@creit.tech/stellar-wallets-kit
Version:
A kit to handle all Stellar Wallets at once
1 lines • 15.7 kB
Source Map (JSON)
{"version":3,"file":"walletconnect.module.cjs","sources":["../../src/modules/walletconnect.module.ts"],"sourcesContent":["import { WalletConnectModal } from '@walletconnect/modal';\nimport { SignClient } from '@walletconnect/sign-client';\nimport { ISignClient } from '@walletconnect/types/dist/types/sign-client/client';\nimport { SessionTypes } from '@walletconnect/types/dist/types/sign-client/session';\nimport { ModuleInterface, ModuleType, WalletNetwork } from '../types';\nimport { parseError } from '../utils';\n\nconst parseWalletConnectSession = (session: SessionTypes.Struct): IParsedWalletConnectSession => {\n const accounts = session.namespaces.stellar.accounts.map((account: string) => ({\n network: account.split(':')[1] as 'pubnet' | 'testnet',\n publicKey: account.split(':')[2],\n }));\n\n return {\n id: session.topic,\n name: session.peer.metadata.name,\n description: session.peer.metadata.description,\n url: session.peer.metadata.url,\n icons: session.peer.metadata.icons[0],\n accounts,\n };\n};\n\nexport interface IParsedWalletConnectSession {\n // \"id\" is the topic, we call it \"id\" to make it easier for those not familiarized with WalletConnect\n id: string;\n name: string;\n description: string;\n url: string;\n icons: string;\n accounts: Array<{\n network: 'pubnet' | 'testnet';\n publicKey: string;\n }>;\n}\n\nexport const WALLET_CONNECT_ID = 'wallet_connect';\n\nexport class WalletConnectModule implements ModuleInterface {\n moduleType: ModuleType = ModuleType.BRIDGE_WALLET;\n\n productId: string = WALLET_CONNECT_ID;\n productName: string = 'Wallet Connect';\n productUrl: string = 'https://walletconnect.com/';\n productIcon: string = 'https://stellar.creit.tech/wallet-icons/walletconnect.png';\n\n private client?: ISignClient & {\n on: (event: string, cb: (data: { topic: string }) => void) => void;\n };\n private activeSession?: string;\n private qrModal!: WalletConnectModal;\n\n async isAvailable(): Promise<boolean> {\n return true;\n }\n\n constructor(public wcParams: IWalletConnectConstructorParams) {\n if (wcParams.sessionId) {\n this.setSession(wcParams.sessionId);\n }\n\n if (wcParams.client && wcParams.modal) {\n this.client = wcParams.client as any;\n this.qrModal = wcParams.modal;\n } else {\n SignClient.init({\n projectId: wcParams.projectId,\n metadata: {\n name: wcParams.name,\n url: wcParams.url,\n description: wcParams.description,\n icons: wcParams.icons,\n },\n })\n .then(client => {\n console.log('WalletConnect is ready.');\n this.client = client as never;\n this.qrModal = new WalletConnectModal({ projectId: wcParams.projectId });\n\n if (wcParams.onSessionDeleted) {\n this.onSessionDeleted(wcParams.onSessionDeleted);\n }\n })\n .catch(console.error);\n }\n }\n\n async getAddress(): Promise<{ address: string }> {\n const runChecks = async () => {\n if (!this.client) {\n throw new Error('WalletConnect is not running yet');\n }\n };\n\n return runChecks()\n .then(async (): Promise<{ address: string }> => {\n const targetSession: IParsedWalletConnectSession = await this.getTargetSession();\n return { address: targetSession.accounts[0].publicKey };\n })\n .catch(e => {\n throw parseError(e);\n });\n }\n\n async signTransaction(\n xdr: string,\n opts?: {\n networkPassphrase?: string;\n address?: string;\n path?: string;\n submit?: boolean;\n submitUrl?: string;\n }\n ): Promise<{ signedTxXdr: string; signerAddress?: string }> {\n const runChecks = async () => {\n if (!this.client) {\n throw new Error('WalletConnect is not running yet');\n }\n };\n\n return runChecks()\n .then(async () => {\n const targetSession: IParsedWalletConnectSession = await this.getTargetSession({ publicKey: opts?.address });\n const signedTxXdr = await this.client!.request({\n topic: targetSession.id,\n chainId:\n opts?.networkPassphrase === WalletNetwork.PUBLIC\n ? WalletConnectTargetChain.PUBLIC\n : WalletConnectTargetChain.TESTNET,\n request: {\n method: this.wcParams.method,\n params: { xdr },\n },\n }).then((v: any) => v.signedXDR);\n\n return { signedTxXdr };\n })\n .catch(e => {\n throw parseError(e);\n });\n }\n\n async signAuthEntry(): Promise<{ signedAuthEntry: string; signerAddress?: string }> {\n throw {\n code: -3,\n message: 'WalletConnect does not support the \"signAuthEntry\" function',\n };\n }\n\n async signMessage(): Promise<{ signedMessage: string; signerAddress?: string }> {\n throw {\n code: -3,\n message: 'WalletConnect does not support the \"signMessage\" function',\n };\n }\n\n async getNetwork(): Promise<{ network: string; networkPassphrase: string }> {\n throw {\n code: -3,\n message: 'WalletConnect does not support the \"getNetwork\" function',\n };\n }\n\n /**\n * Allows manually setting the current active session to be used in the kit when doing WalletConnect requests\n *\n * @param sessionId The session ID is a placeholder for the session \"topic\", term used in WalletConnect\n * */\n public setSession(sessionId: string) {\n this.activeSession = sessionId;\n }\n\n public onSessionDeleted(cb: (sessionId: string) => void) {\n if (!this.client) {\n throw new Error('WalletConnect is not running yet');\n }\n\n this.client.on('session_delete', data => {\n cb(data.topic);\n });\n }\n\n public async connectWalletConnect(): Promise<IParsedWalletConnectSession> {\n if (!this.client) {\n throw new Error('WalletConnect is not running yet');\n }\n\n try {\n const { uri, approval } = await this.client.connect({\n requiredNamespaces: {\n stellar: {\n methods: [this.wcParams.method],\n chains: [\n this.wcParams.network === WalletNetwork.PUBLIC\n ? WalletConnectTargetChain.PUBLIC\n : WalletConnectTargetChain.TESTNET,\n ],\n events: [],\n },\n },\n });\n const session: IParsedWalletConnectSession = await new Promise<SessionTypes.Struct>((resolve, reject) => {\n // Open QRCode modal if a URI was returned (i.e. we're not connecting an existing pairing).\n if (uri) {\n this.qrModal.openModal({ uri });\n }\n\n // Await session approval from the wallet.\n approval()\n .then(session => {\n this.qrModal.closeModal();\n resolve(session);\n })\n .catch(error => {\n this.qrModal.closeModal();\n reject(error);\n });\n }).then(parseWalletConnectSession);\n\n this.setSession(session.id);\n return session;\n } catch (e: unknown) {\n this.qrModal.closeModal();\n console.error(e);\n throw new Error('There was an error when trying to connect');\n }\n }\n\n async disconnect(): Promise<void> {\n if (!this.client) {\n throw new Error('WalletConnect is not running yet');\n }\n\n const sessions: IParsedWalletConnectSession[] = await this.getSessions();\n for (const session of sessions) {\n await this.closeSession(session.id);\n }\n }\n\n public async closeSession(sessionId: string, reason?: string): Promise<void> {\n if (!this.client) {\n throw new Error('WalletConnect is not running yet');\n }\n\n await this.client.disconnect({\n topic: sessionId,\n reason: {\n message: reason || 'Session closed',\n code: -1,\n },\n });\n }\n\n public async getSessions(): Promise<IParsedWalletConnectSession[]> {\n if (!this.client) {\n throw new Error('WalletConnect is not running yet');\n }\n\n return this.client.session.values.map(parseWalletConnectSession);\n }\n\n private async getTargetSession(params?: { publicKey?: string }): Promise<IParsedWalletConnectSession> {\n const activeSessions: IParsedWalletConnectSession[] = await this.getSessions();\n let targetSession: IParsedWalletConnectSession | undefined = activeSessions.find(\n (session: IParsedWalletConnectSession): boolean =>\n session.id === this.activeSession || !!session.accounts.find(a => a.publicKey === params?.publicKey)\n );\n\n if (!targetSession) {\n targetSession = await this.connectWalletConnect();\n }\n\n return targetSession;\n }\n}\n\nexport interface IWalletConnectConstructorParams {\n projectId: string;\n name: string;\n description: string;\n url: string;\n icons: string[];\n method: WalletConnectAllowedMethods;\n network: WalletNetwork;\n sessionId?: string;\n client?: typeof SignClient;\n modal?: WalletConnectModal;\n onSessionDeleted?: (sessionId: string) => void;\n}\n\nexport enum WalletConnectTargetChain {\n PUBLIC = 'stellar:pubnet',\n TESTNET = 'stellar:testnet',\n}\n\nexport enum WalletConnectAllowedMethods {\n SIGN = 'stellar_signXDR',\n SIGN_AND_SUBMIT = 'stellar_signAndSubmitXDR',\n}\n"],"names":["ModuleType","SignClient","WalletConnectModal","parseError","WalletNetwork","WalletConnectTargetChain","WalletConnectAllowedMethods"],"mappings":"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"}