{"version":3,"file":"P6zW8HUf.js","sources":["../../../../composables/useWalletConnect.ts"],"sourcesContent":["import Client from '@walletconnect/sign-client';\nimport type { PairingTypes, SessionTypes } from '@walletconnect/types';\nimport { getSdkError } from '@walletconnect/utils';\nimport { WalletConnectModal } from '@walletconnect/modal';\n\nexport enum DEFAULT_CHIA_METHODS {\n  CHIA_GET_WALLETS = 'chia_getWallets',\n  CHIA_SEND_TRANSACTION = 'chia_sendTransaction',\n  CHIA_NEW_ADDRESS = 'chia_getNextAddress',\n  CHIA_LOG_IN = 'chia_logIn',\n  CHIA_SIGN_MESSAGE_BY_ADDRESS = 'chia_signMessageByAddress',\n  CHIA_SIGN_MESSAGE_BY_ID = 'chia_signMessageById',\n  CHIA_CREATE_OFFER = 'chia_createOfferForIds',\n  CHIA_TAKE_OFFER = 'chia_takeOffer',\n  CHIA_GET_NFT_INFO = 'chia_getNFTInfo',\n  CHIA_GET_WALLET_SYNC_STATUS = 'chia_getSyncStatus',\n}\n\nconst DEFAULT_RELAY_URL = 'wss://relay.walletconnect.com';\nconst PROJECT_ID = 'c4a526d68137397a45fef408ba2e4e5e';\n\nexport const useWalletConnect = async () => {\n  const config = useRuntimeConfig();\n  const chainId = `chia:${config.public.network}`;\n\n  const client = ref<Client>();\n  const pairings = ref<PairingTypes.Struct[]>([]);\n  const session = ref<SessionTypes.Struct>();\n\n  const isInitializing = ref(false);\n  const prevRelayerValue = ref<string>('');\n\n  const balances = ref<any>({});\n  const accounts = ref<string[]>([]);\n  const chains = ref<string[]>([chainId]);\n  const relayerRegion = ref<string>(DEFAULT_RELAY_URL);\n  const walletConnectModal = new WalletConnectModal({\n    projectId: PROJECT_ID,\n    explorerRecommendedWalletIds: 'NONE',\n    themeVariables: {\n      '--wcm-font-family': 'Montserrat, sans-serif',\n      '--wcm-background-color': '#059669',\n      '--wcm-accent-color': '#059669',\n    },\n  });\n\n  const reset = () => {\n    session.value = undefined;\n    chains.value = [];\n    accounts.value = [];\n    balances.value = {};\n    relayerRegion.value = DEFAULT_RELAY_URL;\n  };\n\n  const onSessionConnected = (_session: SessionTypes.Struct) => {\n    const allNamespaceAccounts = Object.values(_session.namespaces)\n      .map((namespace) => namespace.accounts)\n      .flat();\n\n    session.value = _session;\n    // chains.value = allNamespaceChains;\n    accounts.value = allNamespaceAccounts;\n    // await getAccountBalances(allNamespaceAccounts);\n  };\n\n  const connect = async (pairing: any) => {\n    if (typeof client.value === 'undefined') {\n      throw new TypeError('WalletConnect is not initialized');\n    }\n    console.log('connect, pairing topic is:', pairing?.topic);\n    try {\n      const requiredNamespaces = {\n        chia: {\n          methods: Object.values(DEFAULT_CHIA_METHODS),\n          chains: toRaw(chains.value),\n          events: [],\n        },\n      };\n      console.log('requiredNamespaces config for connect:', requiredNamespaces);\n\n      const { uri, approval } = await client.value.connect({\n        pairingTopic: pairing?.topic,\n        requiredNamespaces,\n      });\n\n      // Open QRCode modal if a URI was returned (i.e. we're not connecting an existing pairing).\n      if (uri) {\n        await walletConnectModal.openModal({ uri });\n      }\n\n      const session = await approval();\n      console.log('Established session:', session);\n      await onSessionConnected(session);\n      // Update known pairings after session is connected.\n      pairings.value = client.value.pairing.getAll({ active: true });\n    } catch (e) {\n      console.error(e);\n      // ignore rejection\n    } finally {\n      // close modal in case it was open\n      walletConnectModal.closeModal();\n    }\n  };\n\n  const disconnect = async () => {\n    if (typeof client.value === 'undefined') {\n      throw new TypeError('WalletConnect is not initialized');\n    }\n    if (typeof session.value === 'undefined') {\n      throw new TypeError('Session is not connected');\n    }\n    await client.value.disconnect({\n      topic: session.value.topic,\n      reason: getSdkError('USER_DISCONNECTED'),\n    });\n    // Reset app state after disconnect.\n    reset();\n  };\n\n  const subscribeToEvents = (_client: Client) => {\n    if (typeof _client === 'undefined') {\n      throw new TypeError('WalletConnect is not initialized');\n    }\n\n    _client.on('session_ping', (args) => {\n      console.log('EVENT', 'session_ping', args);\n    });\n\n    _client.on('session_event', (args) => {\n      console.log('EVENT', 'session_event', args);\n    });\n\n    _client.on('session_update', ({ topic, params }) => {\n      console.log('EVENT', 'session_update', { topic, params });\n      const { namespaces } = params;\n      const _session = _client.session.get(topic);\n      const updatedSession = { ..._session, namespaces };\n      onSessionConnected(updatedSession);\n    });\n\n    _client.on('session_delete', () => {\n      console.log('EVENT', 'session_delete');\n      reset();\n    });\n  };\n\n  const _checkPersistedState = async (_client: Client) => {\n    if (typeof _client === 'undefined') {\n      throw new TypeError('WalletConnect is not initialized');\n    }\n    // populates existing pairings to state\n    pairings.value = _client.pairing.getAll({ active: true });\n    console.log('RESTORED PAIRINGS: ', _client.pairing.getAll({ active: true }));\n\n    if (typeof session.value !== 'undefined') return;\n    // populates (the last) existing session to state\n    if (_client.session.length) {\n      const lastKeyIndex = _client.session.keys.length - 1;\n      const _session = _client.session.get(_client.session.keys[lastKeyIndex]);\n      console.log('RESTORED SESSION:', _session);\n      await onSessionConnected(_session);\n      return _session;\n    }\n  };\n\n  if (process.client) {\n    try {\n      isInitializing.value = true;\n\n      const _client = await Client.init({\n        logger: 'debug',\n        relayUrl: relayerRegion.value,\n        projectId: PROJECT_ID,\n        metadata: {\n          name: 'MintGarden',\n          description: 'Explore and mint NFTs in the Chia ecosystem.',\n          url: 'https://mintgarden.io',\n          icons: ['https://assets.mainnet.mintgarden.io/web/mint-logo-round.svg'],\n        },\n      });\n\n      console.log('CREATED CLIENT: ', _client);\n      console.log('relayerRegion ', relayerRegion.value);\n\n      client.value = _client;\n      prevRelayerValue.value = relayerRegion.value;\n      subscribeToEvents(_client);\n      await _checkPersistedState(_client);\n    } finally {\n      isInitializing.value = false;\n    }\n  }\n\n  const signMessageById = async (id: string, message: string) => {\n    const method = DEFAULT_CHIA_METHODS.CHIA_SIGN_MESSAGE_BY_ID;\n    try {\n      const fingerprint = accounts.value[0].split(':')[2];\n      const result = await client.value!.request({\n        topic: session.value!.topic,\n        chainId,\n        request: {\n          method,\n          params: {\n            fingerprint,\n            id,\n            message,\n          },\n        },\n      });\n\n      return {\n        method,\n        valid: true,\n        result,\n      };\n    } catch (e) {\n      console.error(e);\n      return { method, valid: false };\n    }\n  };\n\n  const createOffer = async (offer: any, driverDict: any) => {\n    const method = DEFAULT_CHIA_METHODS.CHIA_CREATE_OFFER;\n    try {\n      const fingerprint = accounts.value[0].split(':')[2];\n      const result = await client.value!.request({\n        topic: session.value!.topic,\n        chainId,\n        request: {\n          method,\n          params: {\n            fingerprint,\n            offer,\n            driverDict,\n            disableJSONFormatting: true,\n          },\n        },\n      });\n\n      return {\n        method,\n        valid: true,\n        result,\n      };\n    } catch (e) {\n      console.error(e);\n      return { method, valid: false };\n    }\n  };\n\n  const getNftInfo = async (coinId: string) => {\n    const method = DEFAULT_CHIA_METHODS.CHIA_GET_NFT_INFO;\n    try {\n      const fingerprint = accounts.value[0].split(':')[2];\n      const result = await client.value!.request({\n        topic: session.value!.topic,\n        chainId,\n        request: {\n          method,\n          params: {\n            fingerprint,\n            coinId,\n          },\n        },\n      });\n\n      return {\n        method,\n        valid: true,\n        result,\n      };\n    } catch (e) {\n      console.error(e);\n      return { method, valid: false };\n    }\n  };\n\n  const takeOffer = async (offer: string, fee = 0) => {\n    const method = DEFAULT_CHIA_METHODS.CHIA_TAKE_OFFER;\n    try {\n      const fingerprint = accounts.value[0].split(':')[2];\n      const result = await client.value!.request({\n        topic: session.value!.topic,\n        chainId,\n        request: {\n          method,\n          params: {\n            fingerprint,\n            offer,\n            fee: fee * 10 ** 12,\n          },\n        },\n      });\n\n      return {\n        method,\n        valid: true,\n        result,\n      };\n    } catch (e) {\n      console.error(e);\n      return { method, valid: false };\n    }\n  };\n\n  const getWallets = async () => {\n    const method = DEFAULT_CHIA_METHODS.CHIA_GET_WALLETS;\n    try {\n      const fingerprint = accounts.value[0].split(':')[2];\n      const result = await client.value!.request({\n        topic: session.value!.topic,\n        chainId,\n        request: {\n          method,\n          params: {\n            fingerprint,\n            includeData: true,\n          },\n        },\n      });\n\n      return {\n        method,\n        valid: true,\n        result,\n      };\n    } catch (e) {\n      console.error(e);\n      return { method, valid: false };\n    }\n  };\n\n  return {\n    client,\n    session,\n    pairings,\n    connect,\n    disconnect,\n    signMessageById,\n    getWallets,\n    getNftInfo,\n    createOffer,\n    takeOffer,\n    accounts: computed(() => accounts.value.map((account) => account.split(':')[2])),\n  };\n};\n"],"names":["DEFAULT_CHIA_METHODS","DEFAULT_RELAY_URL","PROJECT_ID","useWalletConnect","chainId","useRuntimeConfig","client","ref","pairings","session","isInitializing","prevRelayerValue","balances","accounts","chains","relayerRegion","walletConnectModal","WalletConnectModal","reset","onSessionConnected","_session","allNamespaceAccounts","namespace","connect","pairing","requiredNamespaces","toRaw","uri","approval","e","disconnect","getSdkError","subscribeToEvents","_client","args","topic","params","namespaces","updatedSession","_checkPersistedState","lastKeyIndex","Client","id","message","method","fingerprint","result","coinId","offer","driverDict","fee","computed","account"],"mappings":"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"}