{"version":3,"file":"DHxqCKQq.js","sources":["../../../../utilities/walletAdapter/gobyAdapter.ts","../../../../utilities/walletAdapter/walletConnectAdapter.ts","../../../../stores/goby.ts"],"sourcesContent":["import type { WalletAdapter } from '.';\n\nexport const gobyAdapter = new Proxy(\n {\n on: (event: string, callback: (...args: any[]) => void) => {\n return window.chia.on(event, callback);\n },\n chainId: async () => {\n const chainId = await window.chia.request({ method: 'chainId' });\n if (chainId === 'testnet10') {\n return 'testnet11';\n }\n return chainId;\n },\n } as WalletAdapter,\n {\n get(target, key) {\n if (key in target) {\n return target[key as keyof typeof target];\n }\n return function (params: any) {\n return window.chia.request({ method: key, params });\n };\n },\n }\n);\n\nexport const isGobyInstalled = () => {\n if (typeof window === 'undefined') {\n return false;\n }\n const { chia } = window;\n return Boolean(chia && chia.isGoby);\n};\n","import { WalletConnectModal } from '@walletconnect/modal';\nimport SignClient from '@walletconnect/sign-client';\nimport { getSdkError } from '@walletconnect/utils';\nimport type {\n AssetBalanceResp,\n CoinSpend,\n getAssetCoinsParams,\n MintNFTParams,\n SignMessageParams,\n SpendableCoin,\n SpendBundle,\n TransactionResp,\n WalletAdapter,\n} from '.';\n\nconst projectId = 'c4a526d68137397a45fef408ba2e4e5e';\n\nclass WalletConnectAdapter implements WalletAdapter {\n signClient?: SignClient;\n\n network: 'testnet11' | 'mainnet' = 'testnet11';\n\n on(event: string, callback: (...args: any[]) => void) {\n // noop for now\n }\n\n async getSignClient() {\n if (!this.signClient) {\n this.signClient = await SignClient.init({\n projectId,\n relayUrl: 'wss://relay.walletconnect.org',\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 return this.signClient;\n }\n\n async walletSwitchChain(params: { chainId: string }) {\n if (['testnet11', 'mainnet'].includes(params.chainId)) {\n this.network = params.chainId as 'testnet11' | 'mainnet';\n } else {\n throw new Error('Unsupported network');\n }\n return null;\n }\n\n async chainId() {\n return this.network;\n }\n\n async accounts() {\n const sessions = await (await this.getSignClient()).session.getAll();\n if (sessions.length > 0) {\n const lastSession = sessions[sessions.length - 1];\n\n const allNamespaceAccounts = Object.values(lastSession.namespaces)\n .map((namespace) => namespace.accounts)\n .flat()\n .map((account) => account.split(':')[2]);\n\n return allNamespaceAccounts;\n }\n return [];\n }\n\n async getPublicKeys(params: { limit?: number; offset?: number } = { limit: 10, offset: 0 }) {\n return this.sendWalletConnectMessage('chip0002_getPublicKeys', params);\n }\n\n async getAssetBalance(params: { type: string | null; assetId: string | null; includedLocked?: boolean }) {\n return this.sendWalletConnectMessage('chip0002_getAssetBalance', params);\n }\n\n async getAssetCoins(params: getAssetCoinsParams) {\n return this.sendWalletConnectMessage('chip0002_getAssetCoins', { assetId: null, ...params });\n }\n\n async filterUnlockedCoins(params: { coinNames: string[] }) {\n return this.sendWalletConnectMessage('chip0002_filterUnlockedCoins', params);\n }\n\n async signMessage({ message, publicKey }: SignMessageParams) {\n return this.sendWalletConnectMessage('chip0002_signMessage', { message, publicKey });\n }\n\n async signCoinSpends(params: { coinSpends: CoinSpend[] }) {\n return this.sendWalletConnectMessage('chip0002_signCoinSpends', { coinSpends: params.coinSpends });\n }\n\n async sendTransaction(params: { spendBundle: SpendBundle }) {\n return [\n await this.sendWalletConnectMessage('chip0002_sendTransaction', {\n spendBundle: params.spendBundle,\n }),\n ];\n }\n\n async estimateCoinSpendsFee(params: { coinSpends: CoinSpend[] }) {\n return { estimates: [0, 0, 0] as [number, number, number] };\n }\n\n createOffer(params: CreateOfferParams) {\n return this.sendWalletConnectMessage<{ offer: string }>('chia_createOffer', params);\n }\n\n takeOffer(params: { offer: string }) {\n return this.sendWalletConnectMessage('chia_takeOffer', params);\n }\n\n mintNFT(_: MintNFTParams): Promise {\n throw new Error('Not implemented');\n }\n\n async connect(params: { eager?: boolean }) {\n const signClient = await this.getSignClient();\n const sessions = signClient.session.getAll();\n if (sessions.length > 0) {\n return true;\n }\n\n if (params.eager) {\n return false;\n }\n\n try {\n const { uri, approval } = await signClient.connect({\n requiredNamespaces: {\n chia: {\n methods: [\n 'chip0002_getPublicKeys',\n 'chip0002_filterUnlockedCoins',\n 'chip0002_getAssetCoins',\n 'chip0002_getAssetBalance',\n 'chip0002_signCoinSpends',\n 'chip0002_signMessage',\n 'chip0002_sendTransaction',\n 'chia_createOffer',\n 'chia_takeOffer',\n ],\n chains: [`chia:${this.network === 'testnet11' ? 'testnet' : 'mainnet'}`],\n events: ['chip0002_chainChanged', 'chip0002_accountsChanged'],\n },\n },\n });\n\n if (uri) {\n const walletConnectModal = new WalletConnectModal({\n projectId,\n explorerRecommendedWalletIds: 'NONE',\n });\n walletConnectModal.openModal({ uri });\n\n await approval();\n\n walletConnectModal.closeModal();\n\n return true;\n }\n } catch (e) {\n console.error(e);\n }\n return false;\n }\n\n async disconnect() {\n const signClient = await this.getSignClient();\n const sessions = signClient.session.values;\n for (const session of sessions) {\n await signClient.disconnect({\n topic: session.topic,\n reason: getSdkError('USER_DISCONNECTED'),\n });\n }\n return true;\n }\n\n private async sendWalletConnectMessage(method: string, params: any): Promise {\n const signClient = await this.getSignClient();\n const sessions = signClient.session.getAll();\n if (sessions.length > 0) {\n const request = {\n method,\n params,\n };\n console.log('request', request);\n try {\n const result = await signClient.request({\n topic: sessions[0].topic,\n chainId: `chia:${this.network === 'testnet11' ? 'testnet' : 'mainnet'}`,\n request,\n });\n console.log('result', result);\n if (result === null) {\n throw new Error('Request rejected in wallet');\n }\n return result as T;\n } catch (error) {\n console.error(`Error sending ${method} message:`, error);\n throw error;\n }\n } else {\n throw new Error('No wallet connected');\n }\n }\n}\n\nexport const walletConnectAdapter = new WalletConnectAdapter();\n","import { bech32m } from 'bech32';\nimport { useStorage } from '@vueuse/core';\n/* eslint-disable import/default */\nimport chiaBls from 'chia-bls';\nimport clvmLib from 'clvm-lib';\nimport chiaRpc from 'chia-rpc';\n/* eslint-enable import/default */\nimport type { CoinSpend, SpendableCoin, SpendBundle } from '~/types/wallet';\nimport { STANDARD_PUZZLE_MOD } from '~/utilities/puzzles';\nimport { gobyAdapter, isGobyInstalled } from '~/utilities/walletAdapter/gobyAdapter';\nimport { walletConnectAdapter } from '~/utilities/walletAdapter/walletConnectAdapter';\nimport type { ProfileWithCoin } from '~/types/store';\nimport { getApiRoot } from '~/utilities/api';\nimport type { Profile } from '~/types/generated/models/Profile';\n\n/* eslint-disable import/no-named-as-default-member */\nexport const { fromHex, toHex, hash256, concatBytes, JacobianPoint } = chiaBls;\nexport const { Program } = clvmLib;\nexport const { toCoinId } = chiaRpc;\n/* eslint-enable import/no-named-as-default-member */\n\ndeclare global {\n interface Window {\n chia: any;\n goby: any;\n }\n}\n\nconst timeout = (ms: number) =>\n new Promise((_resolve, reject) => setTimeout(() => reject(new Error('Time out!')), ms));\n\nexport type DidCoin = SpendableCoin & { id: string };\n\nconst walletType = useStorage('wallet-type', '');\n\nexport const useGobyStore = defineStore('walletStore', {\n state: () => ({\n isInitialized: false,\n account: undefined as string | undefined,\n publicKey: undefined as string | undefined,\n isWalletInstalled: undefined as boolean | undefined,\n profiles: undefined as ProfileWithCoin[] | undefined,\n nftCoins: undefined as SpendableCoin[] | undefined,\n }),\n getters: {\n type: () => walletType.value,\n wallet: () => {\n if (walletType.value === 'goby') {\n return gobyAdapter;\n } else if (walletType.value === 'walletconnect') {\n return walletConnectAdapter;\n }\n throw new Error('Unsupported wallet type');\n },\n counts: (state) => ({\n did: state.profiles?.length,\n nft: state.nftCoins?.length,\n }),\n profile: (state) => (profileId: string) => state.profiles?.find((p) => p.id === profileId),\n\n p2Puzzle: (state) => {\n if (!state.publicKey) return;\n console.log('state.publicKey', state.publicKey);\n\n const key = JacobianPoint.fromHex(state.publicKey, false);\n return STANDARD_PUZZLE_MOD.curry([Program.fromJacobianPoint(key)]);\n },\n },\n actions: {\n async connect(type: 'goby' | 'walletconnect', eager = false) {\n walletType.value = type;\n if (!eager) {\n const config = useRuntimeConfig();\n const targetChain = config.public.network === 'mainnet' ? 'mainnet' : 'testnet11';\n if ((await this.wallet.chainId()) !== targetChain) {\n await this.wallet.walletSwitchChain({ chainId: targetChain });\n }\n }\n await this.wallet.connect({ eager });\n await this.initialize();\n },\n getIsWalletInstalled() {\n if (walletType.value === 'goby') {\n return isGobyInstalled();\n }\n return true;\n },\n disconnect() {\n if (walletType.value === 'walletconnect') {\n this.wallet.disconnect();\n }\n walletType.value = '';\n this.account = '';\n this.publicKey = '';\n this.isWalletInstalled = undefined;\n this.isInitialized = false;\n },\n async initialize() {\n if (import.meta.client) {\n console.log('this.isWalletInstalled', this.isWalletInstalled);\n console.log('this.account', this.account);\n if (this.isWalletInstalled && this.account) {\n // Nothing to do\n } else if (this.getIsWalletInstalled()) {\n this.isWalletInstalled = true;\n\n const initAccount = async () => {\n this.publicKey = (await this.wallet.getPublicKeys())[0]?.replace('0x', '');\n await this.setAccount();\n };\n\n try {\n await Promise.race([this.wallet.connect({ eager: true }), timeout(10000)]);\n const config = useRuntimeConfig();\n const targetChain = config.public.network === 'mainnet' ? 'mainnet' : 'testnet11';\n if ((await this.wallet.chainId()) !== targetChain) {\n console.log('Switching chain');\n await this.wallet.walletSwitchChain({ chainId: targetChain });\n }\n console.log('Connected to chain', await this.wallet.chainId());\n await initAccount();\n\n this.wallet.on('accountChanged', () => initAccount());\n this.wallet.on('chainChanged', () => window.location.reload());\n } catch (e) {\n this.account = '';\n }\n } else {\n this.isWalletInstalled = false;\n this.account = '';\n }\n console.log('Initialized wallet');\n this.isInitialized = true;\n }\n },\n async initializeAssets() {\n if (process.client && this.isWalletInstalled && this.account) {\n await Promise.all([this.loadNfts(), this.loadProfiles()]);\n }\n },\n async setAccount() {\n const accounts = await this.wallet.accounts();\n console.log('accounts', accounts);\n\n const account = accounts?.[0];\n if (walletType.value === 'walletconnect') {\n this.account = account || '';\n } else {\n this.account = account ? bech32m.encode('xch', bech32m.toWords(fromHex(account))) : '';\n }\n },\n async loadNfts() {\n if (walletType.value === 'goby') {\n this.nftCoins = await this.wallet.getAssetCoins({ type: 'nft', limit: 10 });\n } else {\n this.nftCoins = [];\n }\n },\n async loadProfiles() {\n const loadedProfiles = [];\n const didCoins = await this.wallet.getAssetCoins({ type: 'did', includedLocked: true, limit: 10 });\n for (const didCoin of didCoins) {\n const didPuzzle = Program.deserializeHex(didCoin.puzzle);\n const [, curriedArgs] = didPuzzle.uncurry()!;\n const launcherId = curriedArgs[0].rest.first;\n const didInnerPuzzle = curriedArgs[1];\n const [, innerCurriedArgs] = didInnerPuzzle.uncurry()!;\n const p2Puzzle = innerCurriedArgs[0];\n const [, p2CurriedArgs] = p2Puzzle.uncurry()!;\n const publicKey = p2CurriedArgs[0].toHex();\n\n let profile;\n try {\n profile = await $fetch(`${getApiRoot()}/profile/${launcherId.toHex()}`);\n profile.didCoin = didCoin;\n profile.publicKey = publicKey;\n } catch (e) {\n profile = {\n didCoin,\n id: launcherId.toHex(),\n encoded_id: bech32m.encode('did:chia:', bech32m.toWords(launcherId.toBytes())),\n verification_state: 0,\n publicKey,\n };\n }\n console.log('profile', profile.encoded_id);\n loadedProfiles.push(profile);\n }\n this.profiles = loadedProfiles;\n },\n async refreshProfile(profile: Profile) {\n try {\n const loadedProfile = await $fetch(`${getApiRoot()}/profile/${profile.id}`);\n if (this.profiles && loadedProfile) {\n const index = this.profiles?.findIndex((p) => p.id === profile.id);\n if (index !== undefined) {\n const didCoin = this.profiles[index].didCoin;\n this.profiles.splice(index, 1, { ...loadedProfile, didCoin });\n }\n }\n } catch (e) {\n console.log(e);\n }\n },\n\n signCoinSpends(coinSpends: CoinSpend[]) {\n return this.wallet.signCoinSpends({ coinSpends });\n },\n estimateCoinSpendsFee(coinSpends: CoinSpend[]) {\n return Promise.resolve({ estimates: [0, 0, 0] });\n // return goby.estimateCoinSpendsFee({ coinSpends });\n },\n sendTransaction(spendBundle: SpendBundle) {\n return this.wallet.sendTransaction({ spendBundle });\n },\n async signMessage(message: string, publicKey?: string) {\n const publicKeyToUse = publicKey || this.publicKey;\n if (!publicKeyToUse) {\n throw new Error('No public key');\n }\n const signature = await this.wallet.signMessage({ message, publicKey: publicKeyToUse });\n return { publicKey: publicKeyToUse, signature };\n },\n async getAssetCoins(\n type: 'did' | 'nft' | 'cat' | null,\n assetId: string | null = null,\n includedLocked?: boolean,\n totalAmount: number = 0\n ) {\n const coins: SpendableCoin[] = [];\n\n const limit = 20;\n let offset = 0;\n\n do {\n console.log(`Getting ${limit} coins, offset ${offset}`);\n const assetCoins = await this.wallet.getAssetCoins({ type, assetId, includedLocked, limit, offset });\n coins.push(...assetCoins);\n if (assetCoins.length < limit) {\n break;\n }\n offset += limit;\n } while (coins.reduce((acc, coin) => acc + coin.coin.amount, 0) < totalAmount);\n\n if (coins.reduce((acc, coin) => acc + coin.coin.amount, 0) < totalAmount) {\n throw new Error('Your balance is insufficient.');\n }\n\n return coins;\n },\n async getAssetBalance(type: 'did' | 'nft' | null, assetId?: string, includedLocked?: boolean) {\n const coins = await this.getAssetCoins(type, assetId, includedLocked);\n return coins.reduce((acc, coin) => acc + coin.coin.amount, 0);\n },\n createOffer(params: CreateOfferParams) {\n return this.wallet.createOffer(params);\n },\n takeOffer(offerBech32: string) {\n return this.wallet.takeOffer({ offer: offerBech32 });\n },\n mintNft(metadataInfo: MetadataInfo, didId: string, royaltyAddress?: string, royaltyPercentage?: number) {\n return this.wallet.mintNFT({ metadataInfo, didId, royaltyAddress, royaltyPercentage });\n },\n },\n});\n"],"names":["gobyAdapter","event","callback","chainId","target","key","params","isGobyInstalled","chia","projectId","WalletConnectAdapter","__publicField","SignClient","sessions","lastSession","namespace","account","message","publicKey","_","signClient","uri","approval","walletConnectModal","WalletConnectModal","e","session","getSdkError","method","request","result","error","walletConnectAdapter","fromHex","toHex","hash256","concatBytes","JacobianPoint","chiaBls","Program","clvmLib","toCoinId","chiaRpc","timeout","ms","_resolve","reject","walletType","useStorage","useGobyStore","defineStore","state","_a","_b","profileId","p","STANDARD_PUZZLE_MOD","type","eager","targetChain","useRuntimeConfig","initAccount","accounts","bech32m","loadedProfiles","didCoins","didCoin","didPuzzle","curriedArgs","launcherId","didInnerPuzzle","innerCurriedArgs","p2Puzzle","p2CurriedArgs","profile","getApiRoot","loadedProfile","index","coinSpends","spendBundle","publicKeyToUse","signature","assetId","includedLocked","totalAmount","coins","offset","assetCoins","acc","coin","offerBech32","metadataInfo","didId","royaltyAddress","royaltyPercentage"],"mappings":"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"}