@txnlab/use-wallet-walletconnect 5.0.1 → 5.1.0-next.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -93,6 +93,13 @@ export declare class WalletConnectAdapter extends BaseWallet<WalletConnectOption
93
93
  private initializeClient;
94
94
  private initializeModal;
95
95
  private onSessionConnected;
96
+ /**
97
+ * Asks the wallet for its accounts' empty signatures with
98
+ * `algo_getEmptySignatures`, if it approved that method for the session. The
99
+ * response is applied when it arrives. If the wallet doesn't answer in time,
100
+ * the accounts' types stay unknown.
101
+ */
102
+ private requestEmptySignatures;
96
103
  get activeChainId(): string;
97
104
  connect: () => Promise<WalletAccount[]>;
98
105
  disconnect: () => Promise<void>;
package/dist/index.js CHANGED
@@ -16,6 +16,15 @@ var SessionError = class extends Error {
16
16
  }
17
17
  };
18
18
  const ICON = `data:image/svg+xml;base64,${btoa(icon)}`;
19
+ const EMPTY_SIGNATURES_METHOD = "algo_getEmptySignatures";
20
+ const EMPTY_SIGNATURES_TIMEOUT = 3e4;
21
+ function withTimeout(promise, ms) {
22
+ let timer;
23
+ const timeout = new Promise((_, reject) => {
24
+ timer = setTimeout(() => reject(/* @__PURE__ */ new Error(`Timed out after ${ms}ms`)), ms);
25
+ });
26
+ return Promise.race([promise, timeout]).finally(() => clearTimeout(timer));
27
+ }
19
28
  var WalletConnectAdapter = class extends BaseWallet {
20
29
  client = null;
21
30
  clientOptions;
@@ -184,17 +193,24 @@ var WalletConnectAdapter = class extends BaseWallet {
184
193
  this.logger.info("Modal initialized");
185
194
  return modal;
186
195
  }
187
- onSessionConnected(session) {
196
+ onSessionConnected(session, { approved = false } = {}) {
188
197
  const caipAccounts = session.namespaces.algorand.accounts;
189
198
  if (!caipAccounts.length) {
190
199
  this.logger.error("No accounts found!");
191
200
  throw new Error("No accounts found!");
192
201
  }
193
- const walletAccounts = [...new Set(caipAccounts.map((account) => account.split(":").pop()))].map((address, idx) => ({
194
- name: `${this.metadata.name} Account ${idx + 1}`,
195
- address
196
- }));
202
+ const accounts = [...new Set(caipAccounts.map((account) => account.split(":").pop()))];
197
203
  const walletState = this.store.getWalletState();
204
+ const emptySignatures = approved || !walletState ? {} : Object.fromEntries(walletState.accounts.map((a) => [a.address, a.emptySignature]));
205
+ const walletAccounts = accounts.map((address, idx) => {
206
+ const account = {
207
+ name: `${this.metadata.name} Account ${idx + 1}`,
208
+ address
209
+ };
210
+ const emptySignature = emptySignatures[address];
211
+ if (emptySignature !== void 0) account.emptySignature = emptySignature;
212
+ return account;
213
+ });
198
214
  if (!walletState) {
199
215
  const newWalletState = {
200
216
  accounts: walletAccounts,
@@ -202,7 +218,7 @@ var WalletConnectAdapter = class extends BaseWallet {
202
218
  };
203
219
  this.store.addWallet(newWalletState);
204
220
  this.logger.info("Connected", newWalletState);
205
- } else if (!compareAccounts(walletAccounts, walletState.accounts)) {
221
+ } else if (!(compareAccounts(walletAccounts, walletState.accounts) && walletAccounts.every((account) => walletState.accounts.find((a) => a.address === account.address)?.emptySignature === account.emptySignature))) {
206
222
  this.logger.warn("Session accounts mismatch, updating accounts", {
207
223
  prev: walletState.accounts,
208
224
  current: walletAccounts
@@ -212,6 +228,27 @@ var WalletConnectAdapter = class extends BaseWallet {
212
228
  this.session = session;
213
229
  return walletAccounts;
214
230
  }
231
+ /**
232
+ * Asks the wallet for its accounts' empty signatures with
233
+ * `algo_getEmptySignatures`, if it approved that method for the session. The
234
+ * response is applied when it arrives. If the wallet doesn't answer in time,
235
+ * the accounts' types stay unknown.
236
+ */
237
+ async requestEmptySignatures(session) {
238
+ if (!this.client || !session.namespaces.algorand?.methods.includes(EMPTY_SIGNATURES_METHOD)) return;
239
+ const chainId = this.activeChainId;
240
+ try {
241
+ const emptySignatures = await withTimeout(this.client.request({
242
+ chainId,
243
+ topic: session.topic,
244
+ request: formatJsonRpcRequest(EMPTY_SIGNATURES_METHOD, { chainId })
245
+ }), EMPTY_SIGNATURES_TIMEOUT);
246
+ if (this.session?.topic !== session.topic || this.activeChainId !== chainId) return;
247
+ this.applyEmptySignatures(emptySignatures);
248
+ } catch (error) {
249
+ this.logger.warn(`Could not get empty signatures: ${error.message}`);
250
+ }
251
+ }
215
252
  get activeChainId() {
216
253
  const network = this.activeNetworkConfig;
217
254
  if (!network?.caipChainId) {
@@ -230,14 +267,23 @@ var WalletConnectAdapter = class extends BaseWallet {
230
267
  methods: ["algo_signTxn"],
231
268
  events: []
232
269
  } };
233
- const { uri, approval } = await client.connect({ requiredNamespaces });
270
+ const optionalNamespaces = { algorand: {
271
+ chains: [this.activeChainId],
272
+ methods: [EMPTY_SIGNATURES_METHOD],
273
+ events: []
274
+ } };
275
+ const { uri, approval } = await client.connect({
276
+ requiredNamespaces,
277
+ optionalNamespaces
278
+ });
234
279
  if (!uri) {
235
280
  this.logger.error("No URI found");
236
281
  throw new Error("No URI found");
237
282
  }
238
283
  await modal.openModal({ uri });
239
284
  const session = await approval();
240
- const walletAccounts = this.onSessionConnected(session);
285
+ const walletAccounts = this.onSessionConnected(session, { approved: true });
286
+ this.requestEmptySignatures(session);
241
287
  this.logger.info("Connected successfully");
242
288
  return walletAccounts;
243
289
  } catch (error) {
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","names":[],"sources":["../src/icon.ts","../src/adapter.ts","../src/skins.ts","../src/index.ts"],"sourcesContent":["export const icon = `\n<svg viewBox=\"0 0 480 480\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect width=\"480\" height=\"480\" fill=\"#FFFFFF\" />\n <path fill=\"#3396FF\" d=\"M126.6,168c62.6-61.3,164.2-61.3,226.8,0l7.5,7.4c3.1,3.1,3.1,8,0,11.1l-25.8,25.2c-1.6,1.5-4.1,1.5-5.7,0l-10.4-10.2c-43.7-42.8-114.5-42.8-158.2,0l-11.1,10.9c-1.6,1.5-4.1,1.5-5.7,0l-25.8-25.2c-3.1-3.1-3.1-8,0-11.1L126.6,168zM406.7,220.2l22.9,22.5c3.1,3.1,3.1,8,0,11.1L326.2,355.1c-3.1,3.1-8.2,3.1-11.3,0l-73.4-71.9c-0.8-0.8-2.1-0.8-2.8,0l-73.4,71.9c-3.1,3.1-8.2,3.1-11.3,0L50.3,253.8c-3.1-3.1-3.1-8,0-11.1l22.9-22.5c3.1-3.1,8.2-3.1,11.3,0l73.4,71.9c0.8,0.8,2.1,0.8,2.8,0 l73.4-71.9c3.1-3.1,8.2-3.1,11.3,0l73.4,71.9c0.8,0.8,2.1,0.8,2.8,0l73.4-71.9C398.5,217.1,403.6,217.1,406.7,220.2L406.7,220.2z\" />\n</svg>\n`\n","import algosdk from 'algosdk'\nimport {\n BaseWallet,\n base64ToByteArray,\n byteArrayToBase64,\n compareAccounts,\n flattenTxnGroup,\n formatJsonRpcRequest,\n isSignedTxn,\n isTransactionArray,\n type AdapterConstructorParams,\n type WalletAccount,\n type WalletMetadata,\n type WalletState,\n type WalletTransaction\n} from '@txnlab/use-wallet/adapter'\nimport type { WalletConnectModal, WalletConnectModalConfig } from '@walletconnect/modal'\nimport type SignClient from '@walletconnect/sign-client'\nimport type { SessionTypes, SignClientTypes } from '@walletconnect/types'\nimport type { WalletConnectSkinOption } from './skins'\n\ninterface SignClientOptions {\n projectId: string\n relayUrl?: string\n metadata?: SignClientTypes.Metadata\n}\n\ntype WalletConnectModalOptions = Pick<\n WalletConnectModalConfig,\n | 'enableExplorer'\n | 'explorerRecommendedWalletIds'\n | 'privacyPolicyUrl'\n | 'termsOfServiceUrl'\n | 'themeMode'\n | 'themeVariables'\n>\n\ntype WalletConnectBaseOptions = SignClientOptions & WalletConnectModalOptions\n\nexport interface WalletConnectOptions extends WalletConnectBaseOptions {\n /**\n * Optional skin to apply to this WalletConnect instance.\n * Can be either:\n * - A string ID referencing a built-in skin (e.g., 'biatec')\n * - A full skin object with id, name, and icon\n *\n * When a skin is applied, the wallet will use the skin's metadata\n * and a unique walletKey for state isolation.\n */\n skin?: WalletConnectSkinOption\n}\n\nexport type SignTxnsResponse = Array<Uint8Array | number[] | string | null | undefined>\n\nexport class SessionError extends Error {\n constructor(message: string) {\n super(message)\n this.name = 'SessionError'\n }\n}\n\nimport { icon } from './icon'\n\nconst ICON = `data:image/svg+xml;base64,${btoa(icon)}`\n\nexport class WalletConnectAdapter extends BaseWallet<WalletConnectOptions> {\n private client: SignClient | null = null\n private clientOptions: SignClientOptions\n private modal: WalletConnectModal | null = null\n private modalOptions: WalletConnectModalOptions\n private session: SessionTypes.Struct | null = null\n\n constructor(params: AdapterConstructorParams<WalletConnectOptions>) {\n super(params)\n\n if (!this.options?.projectId) {\n this.logger.error('Missing required option: projectId')\n throw new Error('Missing required option: projectId')\n }\n\n const {\n projectId,\n relayUrl = 'wss://relay.walletconnect.com',\n metadata: metadataOptions,\n\n skin: _skinOption, // Extract skin to exclude from modalOptions\n ...modalOptions\n } = this.options\n\n const clientMetadata: SignClientTypes.Metadata = {\n ...this.getWindowMetadata(),\n ...metadataOptions\n }\n\n this.clientOptions = {\n projectId,\n relayUrl,\n metadata: clientMetadata\n }\n\n this.modalOptions = modalOptions\n }\n\n static defaultMetadata: WalletMetadata = {\n name: 'WalletConnect',\n icon: ICON\n }\n\n /**\n * Get metadata from the current window. This is adapted from the @walletconnect/utils\n * implementation, to avoid requiring the entire package as a dependency.\n * @see https://github.com/WalletConnect/walletconnect-utils/blob/master/browser/window-metadata/src/index.ts\n */\n private getWindowMetadata(): SignClientTypes.Metadata {\n let doc: Document\n let loc: Location\n\n const defaultMetadata = {\n name: '',\n description: '',\n url: '',\n icons: []\n }\n\n function getFromWindow<T>(name: string): T | undefined {\n let res: T | undefined\n if (typeof window !== 'undefined' && typeof (window as any)[name] !== 'undefined') {\n res = (window as any)[name]\n }\n return res\n }\n\n function getFromWindowOrThrow<T>(name: string): T {\n const res = getFromWindow<T>(name)\n if (!res) {\n throw new Error(`${name} is not defined in Window`)\n }\n return res\n }\n\n function getDocumentOrThrow(): Document {\n return getFromWindowOrThrow<Document>('document')\n }\n\n function getLocationOrThrow(): Location {\n return getFromWindowOrThrow<Location>('location')\n }\n\n try {\n doc = getDocumentOrThrow()\n loc = getLocationOrThrow()\n } catch (error) {\n this.logger.warn('Error getting window metadata:', error)\n return defaultMetadata\n }\n\n function getIcons(): string[] {\n const links: HTMLCollectionOf<HTMLLinkElement> = doc.getElementsByTagName('link')\n const icons: string[] = []\n\n for (let i = 0; i < links.length; i++) {\n const link: HTMLLinkElement = links[i]\n\n const rel: string | null = link.getAttribute('rel')\n if (rel) {\n if (rel.toLowerCase().indexOf('icon') > -1) {\n const href: string | null = link.getAttribute('href')\n\n if (href) {\n if (\n href.toLowerCase().indexOf('https:') === -1 &&\n href.toLowerCase().indexOf('http:') === -1 &&\n href.indexOf('//') !== 0\n ) {\n let absoluteHref: string = loc.protocol + '//' + loc.host\n\n if (href.indexOf('/') === 0) {\n absoluteHref += href\n } else {\n const path: string[] = loc.pathname.split('/')\n path.pop()\n const finalPath: string = path.join('/')\n absoluteHref += finalPath + '/' + href\n }\n\n icons.push(absoluteHref)\n } else if (href.indexOf('//') === 0) {\n const absoluteUrl: string = loc.protocol + href\n\n icons.push(absoluteUrl)\n } else {\n icons.push(href)\n }\n }\n }\n }\n }\n\n return icons\n }\n\n function getWindowMetadataOfAny(...args: string[]): string {\n const metaTags: HTMLCollectionOf<HTMLMetaElement> = doc.getElementsByTagName('meta')\n\n for (let i = 0; i < metaTags.length; i++) {\n const tag: HTMLMetaElement = metaTags[i]\n const attributes: Array<string | null> = ['itemprop', 'property', 'name']\n .map((target: string) => tag.getAttribute(target))\n .filter((attr: string | null) => {\n if (attr) {\n return args.includes(attr)\n }\n return false\n })\n\n if (attributes.length && attributes) {\n const content: string | null = tag.getAttribute('content')\n if (content) {\n return content\n }\n }\n }\n\n return ''\n }\n\n function getName(): string {\n let name: string = getWindowMetadataOfAny('name', 'og:site_name', 'og:title', 'twitter:title')\n\n if (!name) {\n name = doc.title\n }\n\n return name\n }\n\n function getDescription(): string {\n const description: string = getWindowMetadataOfAny(\n 'description',\n 'og:description',\n 'twitter:description',\n 'keywords'\n )\n\n return description\n }\n\n const name: string = getName()\n const description: string = getDescription()\n const url: string = loc.origin\n const icons: string[] = getIcons()\n\n const meta: SignClientTypes.Metadata = {\n description,\n url,\n icons,\n name\n }\n\n return meta\n }\n\n private async initializeClient(): Promise<SignClient> {\n this.logger.info('Initializing client...')\n const SignClient = (await import('@walletconnect/sign-client')).SignClient\n const client = await SignClient.init(this.clientOptions)\n\n client.on('session_event', (args) => {\n this.logger.info('EVENT: session_event', args)\n })\n\n client.on('session_update', ({ topic, params }) => {\n this.logger.info('EVENT: session_update', { topic, params })\n const { namespaces } = params\n const session = client.session.get(topic)\n const updatedSession = { ...session, namespaces }\n this.onSessionConnected(updatedSession)\n })\n\n client.on('session_delete', () => {\n this.logger.info('EVENT: session_delete')\n this.session = null\n })\n\n this.client = client\n this.logger.info('Client initialized')\n return client\n }\n\n private async initializeModal(): Promise<WalletConnectModal> {\n this.logger.info('Initializing modal...')\n const WalletConnectModal = (await import('@walletconnect/modal')).WalletConnectModal\n const modal = new WalletConnectModal({\n projectId: this.clientOptions.projectId,\n ...this.modalOptions\n })\n\n modal.subscribeModal((state) => this.logger.info(`Modal ${state.open ? 'open' : 'closed'}`))\n\n this.modal = modal\n this.logger.info('Modal initialized')\n return modal\n }\n\n private onSessionConnected(session: SessionTypes.Struct): WalletAccount[] {\n const caipAccounts = session.namespaces.algorand!.accounts\n\n if (!caipAccounts.length) {\n this.logger.error('No accounts found!')\n throw new Error('No accounts found!')\n }\n\n // @todo: Validate format of CAIP-10 accounts\n\n // Filter duplicate accounts (same address, different chain)\n const accounts = [...new Set(caipAccounts.map((account) => account.split(':').pop()!))]\n\n const walletAccounts = accounts.map((address: string, idx: number) => ({\n name: `${this.metadata.name} Account ${idx + 1}`,\n address\n }))\n\n const walletState = this.store.getWalletState()\n\n if (!walletState) {\n const newWalletState: WalletState = {\n accounts: walletAccounts,\n activeAccount: walletAccounts[0]\n }\n\n this.store.addWallet(newWalletState)\n\n this.logger.info('Connected', newWalletState)\n } else {\n const match = compareAccounts(walletAccounts, walletState.accounts)\n\n if (!match) {\n this.logger.warn('Session accounts mismatch, updating accounts', {\n prev: walletState.accounts,\n current: walletAccounts\n })\n this.store.setAccounts(walletAccounts)\n }\n }\n\n this.session = session\n return walletAccounts\n }\n\n public get activeChainId(): string {\n const network = this.activeNetworkConfig\n if (!network?.caipChainId) {\n this.logger.warn(`No CAIP-2 chain ID found for network: ${this.activeNetwork}`)\n return ''\n }\n return network.caipChainId\n }\n\n public connect = async (): Promise<WalletAccount[]> => {\n this.logger.info('Connecting...')\n try {\n const client = this.client || (await this.initializeClient())\n const modal = this.modal || (await this.initializeModal())\n\n const requiredNamespaces = {\n algorand: {\n chains: [this.activeChainId],\n methods: ['algo_signTxn'],\n events: []\n }\n }\n\n const { uri, approval } = await client.connect({ requiredNamespaces })\n\n if (!uri) {\n this.logger.error('No URI found')\n throw new Error('No URI found')\n }\n\n await modal.openModal({ uri })\n\n const session = await approval()\n const walletAccounts = this.onSessionConnected(session)\n\n this.logger.info('Connected successfully')\n return walletAccounts\n } catch (error: any) {\n this.logger.error('Error connecting:', error.message)\n throw error\n } finally {\n this.modal?.closeModal()\n }\n }\n\n public disconnect = async (): Promise<void> => {\n this.logger.info('Disconnecting...')\n try {\n this.onDisconnect()\n if (this.client && this.session) {\n await this.client.disconnect({\n topic: this.session.topic,\n reason: {\n message: 'User disconnected.',\n code: 6000\n }\n })\n }\n this.logger.info('Disconnected')\n } catch (error: any) {\n this.logger.error('Error disconnecting:', error.message)\n throw error\n }\n }\n\n public resumeSession = async (): Promise<void> => {\n try {\n const walletState = this.store.getWalletState()\n\n // No session to resume\n if (!walletState) {\n this.logger.info('No session to resume')\n return\n }\n\n this.logger.info('Resuming session...')\n\n const client = this.client || (await this.initializeClient())\n\n if (client.session.length) {\n const lastKeyIndex = client.session.keys.length - 1\n const restoredSession = client.session.get(client.session.keys[lastKeyIndex])\n this.onSessionConnected(restoredSession)\n }\n this.logger.info('Session resumed successfully')\n } catch (error: any) {\n this.logger.error('Error resuming session:', error.message)\n this.onDisconnect()\n throw error\n }\n }\n\n private processTxns(\n txnGroup: algosdk.Transaction[],\n indexesToSign?: number[]\n ): WalletTransaction[] {\n const txnsToSign: WalletTransaction[] = []\n\n txnGroup.forEach((txn, index) => {\n const isIndexMatch = !indexesToSign || indexesToSign.includes(index)\n const signer = txn.sender.toString()\n const canSignTxn = this.addresses.includes(signer)\n\n const txnString = byteArrayToBase64(txn.toByte())\n\n if (isIndexMatch && canSignTxn) {\n txnsToSign.push({ txn: txnString })\n } else {\n txnsToSign.push({ txn: txnString, signers: [] })\n }\n })\n\n return txnsToSign\n }\n\n private processEncodedTxns(\n txnGroup: Uint8Array[],\n indexesToSign?: number[]\n ): WalletTransaction[] {\n const txnsToSign: WalletTransaction[] = []\n\n txnGroup.forEach((txnBuffer, index) => {\n const decodedObj = algosdk.msgpackRawDecode(txnBuffer)\n const isSigned = isSignedTxn(decodedObj)\n\n const txn: algosdk.Transaction = isSigned\n ? algosdk.decodeSignedTransaction(txnBuffer).txn\n : algosdk.decodeUnsignedTransaction(txnBuffer)\n\n const isIndexMatch = !indexesToSign || indexesToSign.includes(index)\n const signer = txn.sender.toString()\n const canSignTxn = !isSigned && this.addresses.includes(signer)\n\n const txnString = byteArrayToBase64(txn.toByte())\n\n if (isIndexMatch && canSignTxn) {\n txnsToSign.push({ txn: txnString })\n } else {\n txnsToSign.push({ txn: txnString, signers: [] })\n }\n })\n\n return txnsToSign\n }\n\n public signTransactions = async <T extends algosdk.Transaction[] | Uint8Array[]>(\n txnGroup: T | T[],\n indexesToSign?: number[]\n ): Promise<(Uint8Array | null)[]> => {\n try {\n if (!this.session) {\n this.logger.error('No session found!')\n throw new SessionError('No session found!')\n }\n\n this.logger.debug('Signing transactions...', { txnGroup, indexesToSign })\n\n let txnsToSign: WalletTransaction[] = []\n\n // Determine type and process transactions for signing\n if (isTransactionArray(txnGroup)) {\n const flatTxns: algosdk.Transaction[] = flattenTxnGroup(txnGroup)\n txnsToSign = this.processTxns(flatTxns, indexesToSign)\n } else {\n const flatTxns: Uint8Array[] = flattenTxnGroup(txnGroup as Uint8Array[])\n txnsToSign = this.processEncodedTxns(flatTxns, indexesToSign)\n }\n\n const client = this.client || (await this.initializeClient())\n\n this.logger.debug('Sending processed transactions to wallet...', [txnsToSign])\n\n // Format JSON-RPC request\n const request = formatJsonRpcRequest('algo_signTxn', [txnsToSign])\n\n // Sign transactions\n const signTxnsResult = await client.request<SignTxnsResponse>({\n chainId: this.activeChainId,\n topic: this.session.topic,\n request\n })\n\n this.logger.debug('Received signed transactions from wallet', signTxnsResult)\n\n // Filter out unsigned transactions, convert signed transactions to Uint8Array\n const signedTxns = signTxnsResult.reduce<Uint8Array[]>((acc, value) => {\n if (value) {\n let signedTxn: Uint8Array\n if (typeof value === 'string') {\n signedTxn = base64ToByteArray(value)\n } else if (value instanceof Uint8Array) {\n signedTxn = value\n } else if (Array.isArray(value)) {\n signedTxn = new Uint8Array(value)\n } else {\n // Log unexpected types for debugging\n this.logger.warn('Unexpected type in signTxnsResult', value)\n signedTxn = new Uint8Array()\n }\n acc.push(signedTxn)\n }\n return acc\n }, [])\n\n // ARC-0001 - Return null for unsigned transactions\n const result = txnsToSign.reduce<(Uint8Array | null)[]>((acc, txn) => {\n if (txn.signers && txn.signers.length == 0) {\n acc.push(null)\n } else {\n const signedTxn = signedTxns.shift()\n if (signedTxn) {\n acc.push(signedTxn)\n }\n }\n return acc\n }, [])\n\n this.logger.debug('Transactions signed successfully', result)\n return result\n } catch (error: any) {\n this.logger.error('Error signing transactions:', error.message)\n throw error\n }\n }\n}\n","// ---------- Skin Types ---------- //\n\nexport interface WalletConnectSkin {\n id: string\n name: string\n icon: string\n}\n\nexport type WalletConnectSkinOption = string | WalletConnectSkin\n\n// ---------- Built-in Skin Icons ---------- //\n\nconst VOI_WALLET_ICON = `data:image/svg+xml;base64,${btoa(`\n<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"322\" height=\"322\">\n <path fill=\"#32B1E8\" d=\"M131 19a42 42 0 0 1 15 8c18 12 36 26 50 43l2 3c26 29 41 64 47 102v2l1 20h-49v10l-42 4a70897 70897 0 0 0-78 7h-3l-18 1a804 804 0 0 0 55-186c16 8 29 33 39 48l-2-16-1-3c-3-14-9-27-15-40l-1-3Z\"/>\n <path fill=\"#1F3AB7\" d=\"M111 33c13 6 23 25 32 37l1 2 4 6 1 2c6 8 4 20 4 30v3c0 32-11 62-26 89h2c23-3 45-4 68-4v9l-42 4a70897 70897 0 0 0-78 7h-3l-18 1a804 804 0 0 0 55-186Z\"/>\n <path fill=\"#3C4856\" d=\"M267 214a2941 2941 0 0 0-12 14l-2 1-10 10-5 4-2 2a8522 8522 0 0 1-21 20c-6 7-11 9-20 10-7 0-12-1-17-6l-8-7-5-6a120 120 0 0 1-8-7l-2-2-4-1-10 7a4157 4157 0 0 1-15 14l-1 1c-5 5-9 6-16 6h-3a397 397 0 0 1-15 0c-14 0-14 0-19-3l-4-7a322 322 0 0 0-8-12l-2-3-8-15 65-7 15-1a47903 47903 0 0 1 122-11l2-1h13Z\"/>\n <path fill=\"#1B87DF\" d=\"M152 86v2l1 2 3 1 3 5 2 4 2 3 2 4c11 21 11 21 14 30l2 4v2l3 7 6 18 5 19 2 9h44v1h-3l-64 2h-3a526 526 0 0 0-44 3l4-9a190 190 0 0 0 21-94V86Z\"/>\n <path fill=\"#1A279D\" d=\"M139 71c5 1 5 1 7 4l2 3 2 3c5 9 3 20 3 29v3c0 32-11 62-26 89h2c23-3 45-4 68-4v9a798 798 0 0 1-92 7l2-2 1-5 5-9c8-16 14-32 19-49l2-8 2-14 1-1c3-18 2-37 2-55Z\"/>\n <path fill=\"#3D4856\" d=\"M151 261c4 1 6 3 8 5l3 3 3 5-4 1-1 19h-18v-20h-7l5-5 2-2 3-2 2-3 4-1Z\"/>\n <path fill=\"#2EB4EB\" d=\"m254 65 4 6c4 6 8 9 14 12v2l-2 1c-7 4-11 9-15 16l-5-7c-3-6-9-8-15-10l7-5c6-4 9-9 12-15Z\"/>\n <path fill=\"#2021AB\" d=\"M162 206h4c10 0 10 0 15 2v1a11602 11602 0 0 1-44 4h-4l-23 1v-1h9l1-3 8-1 3-1h9l2-1 5-1h15Z\"/>\n <path fill=\"#31B8EF\" d=\"M280 50c3 1 3 1 5 4s4 5 8 7l-5 5-6 7-5-5-7-6 6-5 4-7Z\"/>\n <path fill=\"#2DC1F2\" d=\"m255 35 8 9-6 7c-5-1-6-3-9-6l7-10Z\"/>\n <path fill=\"#2F3A48\" d=\"M157 266c3 1 6 3 8 6v2l-4 1-1 19h-18v-18h1v7l1 4 1 4h7l7 1v-12l-1-3v-7l-1-4Z\"/>\n <path fill=\"#233143\" d=\"M157 266c3 1 6 3 8 6v2l-4 1-1 19h-1v-13l-1-4v-6l-1-5Z\"/>\n <path fill=\"#2A2DB3\" d=\"m179 207 2 2-9 1h-7l-4-2c4-4 13-2 18-1Z\"/>\n <path fill=\"#3864CC\" d=\"m104 69 2 6-1 2v3l-1 2-1 2-1 6-2 1 4-22Z\"/>\n <path fill=\"#1F2DAB\" d=\"m77 166 3 1-1 8-5 1c1-4 1-7 3-10Z\"/>\n <path fill=\"#2651C8\" d=\"M98 95c3 3 3 3 3 6v2l-3 1v2h-2l2-11Z\"/>\n <path fill=\"#383F59\" d=\"m267 214-3 5-1-3-9 1 1-2 12-1Z\"/>\n <path fill=\"#184FCF\" d=\"m111 33 4 2-1 2c-2 3-3 5-3 9l-2-1 2-12Z\"/>\n <path fill=\"#1D25A8\" d=\"M71 182h1v8l-4 2c1-7 1-7 3-10Z\"/>\n <path fill=\"#31BBF6\" d=\"m254 65 4 8-3-1-1-2-1 2h-2l3-7Z\"/>\n <path fill=\"#1E78DC\" d=\"m142 168 2 3-2 5-1 2-3 3 1-5 1-3 2-5Z\"/>\n <path fill=\"#42CDF8\" d=\"m255 35 4 4h-2l-7 3 5-7Z\"/>\n <path fill=\"#25B4EC\" d=\"M148 59h4l-2 8c-2-2-2-2-2-5v-3Z\"/>\n <path fill=\"#2024AA\" d=\"m63 200 2 2-1 4-3 2 2-8Z\"/>\n <path fill=\"#32BEFA\" d=\"m280 50 3 1-1 4-3 1 1-6Z\"/>\n</svg>\n`)}`\n\nconst BIATEC_ICON = `data:image/svg+xml;base64,${btoa(`\n<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 200 180\"><path d=\"M94.27 151.629c-.861-.526-1.51-1.37-1.83-2.386-.197-.62-.18-.627 1.082-.437.705.105 1.6.356 1.988.557.696.36 1.815 1.876 1.815 2.459 0 .486-2.166.348-3.054-.193m23.953-.263c-.788-.419-2.095-2.123-2.108-2.75-.01-.433 2.467-.182 3.403.345.955.536 2.148 1.97 2.148 2.582 0 .503-2.397.38-3.443-.177m-9.024-1.165c-1.567-1.193-2.38-2.74-2.55-4.849-.075-.933-.054-1.697.045-1.697.866 0 2.714 1.67 3.439 3.107.398.789.657 3.888.351 4.195-.07.07-.648-.27-1.285-.756m-8.906-1.354c-.63-.684-1.21-1.648-1.387-2.305-.318-1.18-.136-3.416.278-3.416.555 0 2.108 1.697 2.505 2.737.472 1.237.457 3.905-.023 4.063-.16.053-.777-.433-1.373-1.08m-6.805-1.775c-2.764-.612-5.223-1.425-5.357-1.772-.08-.21.169-1.027.555-1.814s.701-1.469.701-1.515c0-.047-.803.067-1.786.253-.982.185-1.857.256-1.944.157-.088-.1-.365-.715-.618-1.367-.252-.652-.858-1.729-1.345-2.393-1.293-1.76-5.285-5.526-7.272-6.858-3.826-2.564-4.96-3.855-4.667-5.316.08-.402.692-1.574 1.359-2.606 1.65-2.551 2.51-4.472 2.512-5.62.002-.571-.364-1.69-.901-2.758l-.905-1.796.706-.532c1.936-1.46 4.649-4.916 4.205-5.36-.06-.06-.846.72-1.745 1.732-3.553 3.997-7.814 6.463-16.014 9.27-5.324 1.823-5.853 2.06-7.183 3.228-1.555 1.365-1.962 2.502-2.531 7.063-.284 2.275-.706 4.79-.937 5.591-.231.8-.403 2.17-.382 3.043.032 1.346-.157 2.06-1.248 4.698-1.498 3.622-1.068 3.708-4.138-.827l-2.036-3.008.747-.784c.411-.43 1.075-.978 1.475-1.216.955-.568.919-.922-.236-2.331-.53-.647-.917-1.209-.86-1.25s.43-.277.83-.526c1.788-1.12 2.7-4.727 2.987-11.822.214-5.274.595-6.46 2.195-6.83 6.634-1.535 7.58-1.98 8.618-4.066.926-1.858.9-3.701-.121-8.475-.87-4.072-1.047-7.21-.516-9.223.606-2.303 3.759-7.433 5.667-9.221.376-.353.684-.729.684-.835 0-.254-3.325-2.697-4.448-3.268-.482-.245-1.455-.45-2.163-.456-3.892-.03-6.628 1.877-8.722 6.08-.603 1.212-1.582 2.73-2.176 3.374-2.733 2.965-8.602 4.09-12.666 2.43l-.913-.374 1.323-.05c1.422-.054 3.498-.94 3.944-1.683.414-.69.076-.79-1.06-.314-1.443.605-4.075.597-5.039-.015-1.259-.8-2.23-1.81-2.795-2.908l-.535-1.042 1.243 1.095c1.51 1.328 2.691 1.752 4.425 1.585 1.506-.145 2.523-.851 1.65-1.147-3.195-1.08-5.834-3.078-7.07-5.35-.809-1.485-1.513-3.982-1.504-5.334l.006-.936.42.854c.232.47.941 1.333 1.576 1.918l1.155 1.064 2.189-.012 2.188-.011-1.012-.535c-.975-.514-3.353-2.766-3.353-3.175 0-.11.506.079 1.124.418 1.282.703 3.888 1.32 4.21.996.12-.118-.204-.612-.718-1.097-.513-.484-1.17-1.344-1.46-1.911l-.525-1.03 1.174.895c2.02 1.542 3.883 1.506 6.342-.123.69-.457 1.218-.863 1.175-.903s-.989.227-2.103.594c-1.87.618-2.11.64-3.151.305-1.284-.415-2.023-1.273-2.25-2.613l-.158-.926.486.595c1.07 1.31 2.652 1.255 6.363-.224 1.132-.451 2.892-1.036 3.91-1.3 2.732-.706 1.561-.926-2.298-.43-1.778.228-3.27.376-3.318.329-.047-.047.662-.415 1.575-.818 2.002-.883 4.78-1.152 6.858-.663 1.817.427 2.555.81 4.032 2.087 1.151.997 3.654 2.156 4.605 2.133.595-.015-2.96-3.395-4.552-4.328-1.639-.96-4.11-1.542-6.107-1.438-.92.049-1.627.016-1.571-.073.242-.388 3.44-.825 5.203-.71 4.048.265 6.96 2.546 10.902 8.537 2.553 3.883 4.234 5.67 6.137 6.524l1.092.49 2.215-1.027c4.747-2.2 8.797-2.518 16.097-1.26 2.25.387 4.717.704 5.482.704h1.39l.074 3.203.074 3.203.894-1.113c.88-1.096.894-1.152.846-3.516l-.049-2.402-1.61-1.721c-4.14-4.425-4.335-6.536-1.135-12.213 2.744-4.87 2.704-4.41.813-9.32-.883-2.292-1.696-4.167-1.807-4.167-.339 0-.205 4 .196 5.821.716 3.256.435 4.822-1.006 5.603-.371.2-2.144.33-4.904.36-3.6.036-4.348-.022-4.473-.348-.087-.227.102-.582.451-.845.53-.4.563-.53.274-1.09-.18-.35-.692-1.022-1.137-1.493s-.734-.933-.64-1.026c.093-.094 1.072-.036 2.175.128 3.023.45 3.76.398 4.211-.297.4-.615 2.887-9.725 2.704-9.907-.196-.196-1.55 1.62-2.759 3.7-1.782 3.068-3.14 3.895-6.379 3.889-2.485-.005-5.43-1.098-8.658-3.213-1.439-.943-3.02-1.855-3.514-2.027-1.524-.531-3.75-.392-5.163.324l-1.26.638.567-.603c.892-.95 3.048-2.004 4.432-2.167 1.94-.23 3.3.283 5.786 2.18 2.39 1.823 3.163 2.225 4.28 2.225.6 0 .497-.12-.745-.872-.792-.48-2.416-1.598-3.609-2.486-2.658-1.978-4.119-2.58-5.831-2.4l-1.26.132.926-.39c.667-.281 1.609-.36 3.373-.284 1.346.059 2.448.077 2.448.04 0-.278-2.537-1.455-3.71-1.722-.89-.202-1.231-.365-.884-.421.312-.051 1.86.225 3.44.614 2.564.63 3.167.687 5.602.525 5.536-.369 7.032-1.144 9.218-4.774l1.433-2.382-1.224 1.323c-.673.728-1.779 1.928-2.457 2.666-.677.739-1.53 1.417-1.893 1.508l-.662.165.61-.503c.334-.277 1.088-1.491 1.675-2.698 1.772-3.648 3.228-4.779 6.772-5.257 3.522-.476 4.797-.791 5.421-1.342.332-.293.429-.44.215-.329-.213.112-1.94.277-3.836.367-2.955.14-3.666.263-4.97.86-1.632.749-4.092 2.893-4.996 4.356-.764 1.236-.923.905-.224-.465 1.387-2.718 4.685-4.945 8.366-5.651l1.815-.349-1.058-.235c-.582-.13-1.952-.224-3.043-.209l-1.984.027 1.72-.82c1.427-.682 2.04-.822 3.611-.822 1.607 0 1.86-.06 1.679-.4-.539-1.005-1.377-1.452-2.69-1.432-.769.011-1.156-.067-.937-.19.534-.298 2.168-.34 4.169-.104 1.648.194 1.82.159 3.59-.733 1.023-.515 2.472-1.047 3.22-1.183 1.388-.253 3.607-.04 4.472.429.942.51 1.958 1.825 2.095 2.712.116.746 0 1.052-.671 1.777-.752.813-.811 1.018-.811 2.82 0 1.706-.105 2.127-.85 3.424-.467.814-.973 1.476-1.124 1.473s-.797-.242-1.435-.532c-1.277-.579-1.714-.435-1.988.655-.115.46.045.84.605 1.44.42.448 1.621 2.237 2.671 3.975 1.883 3.116 1.905 3.175 1.585 4.146-.258.78-.258 1.56 0 3.73.179 1.51.253 3.031.166 3.38-.128.509.033.795.805 1.432 1.367 1.126 5.02 2.947 5.914 2.947 1.268 0 1.588.247 1.588 1.227 0 1.057-.642 2.742-1.045 2.742-.153 0-.278-.298-.278-.662 0-.558-.123-.661-.793-.661-.436 0-2.162-.467-3.836-1.036l-3.044-1.036v1.788c0 .984-.077 3.057-.172 4.608l-.173 2.82h3.015l-.133.86c-.073.472-.206 2.11-.295 3.637-.373 6.42-.634 7.203-4.207 12.65-4.119 6.278-4.635 7.984-3.493 11.548.37 1.158.647 2.133.613 2.167-.246.246-2.569-1.19-3.783-2.34-2.616-2.473-2.922-3.975-1.146-5.619.954-.882 1.054-1.087.892-1.828-.417-1.91-.553-1.976-1-.482-.232.777-.693 1.849-1.024 2.382-.526.846-.603 1.318-.603 3.705v2.736l3.175 1.022c1.746.562 3.446 1.028 3.777 1.034.583.012.59-.012.194-.776-.224-.434-.479-1.307-.566-1.939-.208-1.523.53-3.065 3.905-8.159 4.537-6.845 5.478-9.25 5.681-14.513.07-1.82.19-3.93.267-4.692.137-1.353.17-1.398 1.379-1.933 2.27-1.004 4.245-3.717 6.253-8.589.526-1.274.459-1.204-1.891 1.985-1.019 1.382-2.13 2.751-2.47 3.042-.604.516-.603.506.048-.397.938-1.299 1.216-2.144 1.685-5.107.663-4.193 1.699-6.255 4.604-9.16 3.639-3.638 9.47-6.348 13.7-6.365.635-.003 1.201-.155 1.322-.356.117-.192 1.105-.92 2.196-1.615 1.092-.696 2.252-1.511 2.579-1.812.327-.3.66-.48.74-.4.081.081-.038.942-.263 1.914s-.41 1.88-.41 2.016c0 .37 1.393.3 1.992-.102.287-.192 1.296-.62 2.241-.953s1.998-.78 2.338-.994c.34-.215.665-.345.722-.288.302.302-1.982 3.526-2.927 4.132l-1.152.74c-.277.179 1.202 3.732 1.975 4.745.674.882.862 1.347.742 1.825-.089.354.045 1.273.296 2.044.645 1.98 2.913 6.751 3.698 7.779.808 1.06.82 1.416.075 2.363-.32.408-.648 1.225-.728 1.816-.118.879-.279 1.12-.89 1.335-1.457.512-2.298-.449-2.94-3.358-.113-.512-.325-.728-.715-.728-.634 0-.619.099.398 2.514.368.873.572 1.685.453 1.804-.12.119-.679.178-1.244.132-1.006-.082-1.03-.108-1.165-1.29-.11-.958-.407-1.515-1.444-2.716-1.28-1.483-1.523-1.617-3.974-2.186-.436-.102-1.235-.406-1.776-.677l-.981-.491-.311 1.124c-.462 1.668-.381 7.592.14 10.35.244 1.29.926 3.552 1.516 5.027 1.864 4.655 1.933 4.98 1.924 9.031-.006 2.853-.112 3.972-.461 4.87-.25.641-.415 1.204-.367 1.252.047.047 2.935.203 6.419.347 4.2.174 6.786.397 7.679.664 1.433.429 2.955 1.341 3.328 1.995.125.219 1.292 3.718 2.594 7.777 2.56 7.978 2.515 7.613 1.142 9.263-.582.7-.623.918-.458 2.455l.18 1.686-1.685 1.59c-2.476 2.335-2.487 2.338-2.833.702l-.825-3.894c-.497-2.344-.503-2.535-.09-2.844.245-.182.75-.332 1.121-.335 1.259-.007 1.444-.36.672-1.277l-.7-.833.461-1.209c.403-1.054.421-1.428.146-2.924-.856-4.647-3.463-7.755-6.516-7.769-1.198-.006-5.626.726-6.143 1.015-.419.235 1.36 2.035 4.026 4.073 1.954 1.494 2.487 2.265 2.708 3.918.115.858-.031 1.278-.963 2.753-1.122 1.776-2.596 4.941-4.015 8.62-.437 1.133-1.048 2.383-1.358 2.777-.546.695-.623.712-2.434.544-1.51-.14-2.034-.085-2.726.287-.933.503-1.032.488-5.234-.754l-1.852-.547 1.058-.93c2.452-2.155 4.96-4.035 5.375-4.028.245.004.743.417 1.107.919.364.5.74.914.835.918.336.014 2.673-2.777 3.423-4.09.928-1.622 1.429-3.721 1.19-4.992-.414-2.208-2.105-3.2-8.836-5.183-4.604-1.356-5.44-1.637-6.837-2.3-.81-.384-.92-.36-3.047.664-2.593 1.248-5.507 2.251-8.665 2.983-3.304.766-9.686.95-12.988.376-3.227-.562-7.639-2.035-9.626-3.214-.856-.508-1.618-.862-1.693-.787-.15.15 1.12 2.079 1.665 2.53.271.226.239.732-.166 2.586-1.245 5.713-2.66 8.612-7.189 14.73-2.852 3.852-3.402 5.685-2.327 7.762.66 1.274 9.278 9.763 11.016 10.85.797.498 1.576 1.26 1.929 1.889.496.883 2.158 5.275 2.158 5.704 0 .2-1.577.111-2.779-.154\" style=\"fill:teal;stroke-width:.264583\"></path></svg>\n`)}`\n\n// ---------- Built-in Skins Registry ---------- //\n\n/**\n * Built-in skins that ship with the WalletConnect adapter.\n * PRs to add new WalletConnect-compatible wallets should add entries here.\n */\nexport const BUILTIN_SKINS: Record<string, WalletConnectSkin> = {\n biatec: {\n id: 'biatec',\n name: 'Biatec Wallet',\n icon: BIATEC_ICON\n },\n voiwallet: {\n id: 'voiwallet',\n name: 'Voi Wallet',\n icon: VOI_WALLET_ICON\n }\n}\n\n// ---------- Custom Skins Registry (Runtime) ---------- //\n\n/**\n * Runtime registry for custom skins added by developers.\n * Use `registerSkin()` to add custom skins.\n */\nconst customSkins = new Map<string, WalletConnectSkin>()\n\n/**\n * Register a custom WalletConnect skin at runtime.\n * This allows developers to add their own wallet skins without PRing the library.\n *\n * @param skin - The skin definition to register\n * @throws Error if attempting to override a built-in skin\n *\n * @example\n * ```typescript\n * import { registerSkin } from '@txnlab/use-wallet-walletconnect'\n *\n * registerSkin({\n * id: 'mywallet',\n * name: 'My Custom Wallet',\n * icon: 'data:image/svg+xml;base64,...'\n * })\n * ```\n */\nexport function registerSkin(skin: WalletConnectSkin): void {\n if (BUILTIN_SKINS[skin.id]) {\n throw new Error(`Cannot override built-in skin: ${skin.id}`)\n }\n customSkins.set(skin.id, skin)\n}\n\n/**\n * Get a skin by its ID from either built-in or custom registries.\n *\n * @param skinId - The skin identifier\n * @returns The skin definition, or undefined if not found\n */\nexport function getSkin(skinId: string): WalletConnectSkin | undefined {\n return BUILTIN_SKINS[skinId] || customSkins.get(skinId)\n}\n\n/**\n * Resolve a skin option to a full WalletConnectSkin object.\n *\n * If the option is a string, looks up the skin in the registries.\n * If the option is a full skin object, registers it as a custom skin and returns it.\n *\n * @param skinOption - Either a skin ID string or a full skin definition\n * @returns The resolved skin, or undefined if not found (when string ID provided)\n */\nexport function resolveSkin(skinOption: WalletConnectSkinOption): WalletConnectSkin | undefined {\n if (typeof skinOption === 'string') {\n return getSkin(skinOption)\n }\n\n // If it's a full skin definition, register it as a custom skin\n if (!BUILTIN_SKINS[skinOption.id]) {\n customSkins.set(skinOption.id, skinOption)\n }\n return skinOption\n}\n","import { WalletConnectAdapter } from './adapter'\nimport { resolveSkin } from './skins'\nimport type { WalletConnectOptions } from './adapter'\nimport type { WalletAdapterConfig } from '@txnlab/use-wallet'\n\nexport const WALLET_ID = 'walletconnect' as const\n\n/**\n * Note: unlike other adapter factories, `walletConnect` does not accept\n * the shared `metadata` factory option. WalletConnect's `metadata` option\n * is the dApp metadata sent to the relay (name, description, url, icons).\n * To customize the wallet's display name and icon, pass a custom `skin`.\n */\nexport function walletConnect(options: WalletConnectOptions): WalletAdapterConfig {\n const skin = options.skin ? resolveSkin(options.skin) : null\n const id = skin ? `walletconnect:${skin.id}` : WALLET_ID\n const metadata = skin\n ? { name: skin.name, icon: skin.icon }\n : WalletConnectAdapter.defaultMetadata\n\n return {\n id,\n metadata,\n Adapter: WalletConnectAdapter as unknown as WalletAdapterConfig['Adapter'],\n options: options as unknown as Record<string, unknown> | undefined\n }\n}\n\nexport { WalletConnectAdapter }\nexport { SessionError } from './adapter'\nexport type { WalletConnectOptions, SignTxnsResponse } from './adapter'\n\n// Skins utilities and types\nexport { registerSkin, getSkin, resolveSkin, BUILTIN_SKINS } from './skins'\nexport type { WalletConnectSkin, WalletConnectSkinOption } from './skins'\n"],"mappings":"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"}
1
+ {"version":3,"file":"index.js","names":[],"sources":["../src/icon.ts","../src/adapter.ts","../src/skins.ts","../src/index.ts"],"sourcesContent":["export const icon = `\n<svg viewBox=\"0 0 480 480\" xmlns=\"http://www.w3.org/2000/svg\">\n <rect width=\"480\" height=\"480\" fill=\"#FFFFFF\" />\n <path fill=\"#3396FF\" d=\"M126.6,168c62.6-61.3,164.2-61.3,226.8,0l7.5,7.4c3.1,3.1,3.1,8,0,11.1l-25.8,25.2c-1.6,1.5-4.1,1.5-5.7,0l-10.4-10.2c-43.7-42.8-114.5-42.8-158.2,0l-11.1,10.9c-1.6,1.5-4.1,1.5-5.7,0l-25.8-25.2c-3.1-3.1-3.1-8,0-11.1L126.6,168zM406.7,220.2l22.9,22.5c3.1,3.1,3.1,8,0,11.1L326.2,355.1c-3.1,3.1-8.2,3.1-11.3,0l-73.4-71.9c-0.8-0.8-2.1-0.8-2.8,0l-73.4,71.9c-3.1,3.1-8.2,3.1-11.3,0L50.3,253.8c-3.1-3.1-3.1-8,0-11.1l22.9-22.5c3.1-3.1,8.2-3.1,11.3,0l73.4,71.9c0.8,0.8,2.1,0.8,2.8,0 l73.4-71.9c3.1-3.1,8.2-3.1,11.3,0l73.4,71.9c0.8,0.8,2.1,0.8,2.8,0l73.4-71.9C398.5,217.1,403.6,217.1,406.7,220.2L406.7,220.2z\" />\n</svg>\n`\n","import algosdk from 'algosdk'\nimport {\n BaseWallet,\n base64ToByteArray,\n byteArrayToBase64,\n compareAccounts,\n flattenTxnGroup,\n formatJsonRpcRequest,\n isSignedTxn,\n isTransactionArray,\n type AdapterConstructorParams,\n type WalletAccount,\n type WalletMetadata,\n type WalletState,\n type WalletTransaction\n} from '@txnlab/use-wallet/adapter'\nimport type { WalletConnectModal, WalletConnectModalConfig } from '@walletconnect/modal'\nimport type SignClient from '@walletconnect/sign-client'\nimport type { SessionTypes, SignClientTypes } from '@walletconnect/types'\nimport type { WalletConnectSkinOption } from './skins'\n\ninterface SignClientOptions {\n projectId: string\n relayUrl?: string\n metadata?: SignClientTypes.Metadata\n}\n\ntype WalletConnectModalOptions = Pick<\n WalletConnectModalConfig,\n | 'enableExplorer'\n | 'explorerRecommendedWalletIds'\n | 'privacyPolicyUrl'\n | 'termsOfServiceUrl'\n | 'themeMode'\n | 'themeVariables'\n>\n\ntype WalletConnectBaseOptions = SignClientOptions & WalletConnectModalOptions\n\nexport interface WalletConnectOptions extends WalletConnectBaseOptions {\n /**\n * Optional skin to apply to this WalletConnect instance.\n * Can be either:\n * - A string ID referencing a built-in skin (e.g., 'biatec')\n * - A full skin object with id, name, and icon\n *\n * When a skin is applied, the wallet will use the skin's metadata\n * and a unique walletKey for state isolation.\n */\n skin?: WalletConnectSkinOption\n}\n\nexport type SignTxnsResponse = Array<Uint8Array | number[] | string | null | undefined>\n\nexport class SessionError extends Error {\n constructor(message: string) {\n super(message)\n this.name = 'SessionError'\n }\n}\n\nimport { icon } from './icon'\n\nconst ICON = `data:image/svg+xml;base64,${btoa(icon)}`\n\nconst EMPTY_SIGNATURES_METHOD = 'algo_getEmptySignatures'\nconst EMPTY_SIGNATURES_TIMEOUT = 30_000\n\nfunction withTimeout<T>(promise: Promise<T>, ms: number): Promise<T> {\n let timer: ReturnType<typeof setTimeout> | undefined\n const timeout = new Promise<never>((_, reject) => {\n timer = setTimeout(() => reject(new Error(`Timed out after ${ms}ms`)), ms)\n })\n return Promise.race([promise, timeout]).finally(() => clearTimeout(timer))\n}\n\nexport class WalletConnectAdapter extends BaseWallet<WalletConnectOptions> {\n private client: SignClient | null = null\n private clientOptions: SignClientOptions\n private modal: WalletConnectModal | null = null\n private modalOptions: WalletConnectModalOptions\n private session: SessionTypes.Struct | null = null\n\n constructor(params: AdapterConstructorParams<WalletConnectOptions>) {\n super(params)\n\n if (!this.options?.projectId) {\n this.logger.error('Missing required option: projectId')\n throw new Error('Missing required option: projectId')\n }\n\n const {\n projectId,\n relayUrl = 'wss://relay.walletconnect.com',\n metadata: metadataOptions,\n\n skin: _skinOption, // Extract skin to exclude from modalOptions\n ...modalOptions\n } = this.options\n\n const clientMetadata: SignClientTypes.Metadata = {\n ...this.getWindowMetadata(),\n ...metadataOptions\n }\n\n this.clientOptions = {\n projectId,\n relayUrl,\n metadata: clientMetadata\n }\n\n this.modalOptions = modalOptions\n }\n\n static defaultMetadata: WalletMetadata = {\n name: 'WalletConnect',\n icon: ICON\n }\n\n /**\n * Get metadata from the current window. This is adapted from the @walletconnect/utils\n * implementation, to avoid requiring the entire package as a dependency.\n * @see https://github.com/WalletConnect/walletconnect-utils/blob/master/browser/window-metadata/src/index.ts\n */\n private getWindowMetadata(): SignClientTypes.Metadata {\n let doc: Document\n let loc: Location\n\n const defaultMetadata = {\n name: '',\n description: '',\n url: '',\n icons: []\n }\n\n function getFromWindow<T>(name: string): T | undefined {\n let res: T | undefined\n if (typeof window !== 'undefined' && typeof (window as any)[name] !== 'undefined') {\n res = (window as any)[name]\n }\n return res\n }\n\n function getFromWindowOrThrow<T>(name: string): T {\n const res = getFromWindow<T>(name)\n if (!res) {\n throw new Error(`${name} is not defined in Window`)\n }\n return res\n }\n\n function getDocumentOrThrow(): Document {\n return getFromWindowOrThrow<Document>('document')\n }\n\n function getLocationOrThrow(): Location {\n return getFromWindowOrThrow<Location>('location')\n }\n\n try {\n doc = getDocumentOrThrow()\n loc = getLocationOrThrow()\n } catch (error) {\n this.logger.warn('Error getting window metadata:', error)\n return defaultMetadata\n }\n\n function getIcons(): string[] {\n const links: HTMLCollectionOf<HTMLLinkElement> = doc.getElementsByTagName('link')\n const icons: string[] = []\n\n for (let i = 0; i < links.length; i++) {\n const link: HTMLLinkElement = links[i]\n\n const rel: string | null = link.getAttribute('rel')\n if (rel) {\n if (rel.toLowerCase().indexOf('icon') > -1) {\n const href: string | null = link.getAttribute('href')\n\n if (href) {\n if (\n href.toLowerCase().indexOf('https:') === -1 &&\n href.toLowerCase().indexOf('http:') === -1 &&\n href.indexOf('//') !== 0\n ) {\n let absoluteHref: string = loc.protocol + '//' + loc.host\n\n if (href.indexOf('/') === 0) {\n absoluteHref += href\n } else {\n const path: string[] = loc.pathname.split('/')\n path.pop()\n const finalPath: string = path.join('/')\n absoluteHref += finalPath + '/' + href\n }\n\n icons.push(absoluteHref)\n } else if (href.indexOf('//') === 0) {\n const absoluteUrl: string = loc.protocol + href\n\n icons.push(absoluteUrl)\n } else {\n icons.push(href)\n }\n }\n }\n }\n }\n\n return icons\n }\n\n function getWindowMetadataOfAny(...args: string[]): string {\n const metaTags: HTMLCollectionOf<HTMLMetaElement> = doc.getElementsByTagName('meta')\n\n for (let i = 0; i < metaTags.length; i++) {\n const tag: HTMLMetaElement = metaTags[i]\n const attributes: Array<string | null> = ['itemprop', 'property', 'name']\n .map((target: string) => tag.getAttribute(target))\n .filter((attr: string | null) => {\n if (attr) {\n return args.includes(attr)\n }\n return false\n })\n\n if (attributes.length && attributes) {\n const content: string | null = tag.getAttribute('content')\n if (content) {\n return content\n }\n }\n }\n\n return ''\n }\n\n function getName(): string {\n let name: string = getWindowMetadataOfAny('name', 'og:site_name', 'og:title', 'twitter:title')\n\n if (!name) {\n name = doc.title\n }\n\n return name\n }\n\n function getDescription(): string {\n const description: string = getWindowMetadataOfAny(\n 'description',\n 'og:description',\n 'twitter:description',\n 'keywords'\n )\n\n return description\n }\n\n const name: string = getName()\n const description: string = getDescription()\n const url: string = loc.origin\n const icons: string[] = getIcons()\n\n const meta: SignClientTypes.Metadata = {\n description,\n url,\n icons,\n name\n }\n\n return meta\n }\n\n private async initializeClient(): Promise<SignClient> {\n this.logger.info('Initializing client...')\n const SignClient = (await import('@walletconnect/sign-client')).SignClient\n const client = await SignClient.init(this.clientOptions)\n\n client.on('session_event', (args) => {\n this.logger.info('EVENT: session_event', args)\n })\n\n client.on('session_update', ({ topic, params }) => {\n this.logger.info('EVENT: session_update', { topic, params })\n const { namespaces } = params\n const session = client.session.get(topic)\n const updatedSession = { ...session, namespaces }\n this.onSessionConnected(updatedSession)\n })\n\n client.on('session_delete', () => {\n this.logger.info('EVENT: session_delete')\n this.session = null\n })\n\n this.client = client\n this.logger.info('Client initialized')\n return client\n }\n\n private async initializeModal(): Promise<WalletConnectModal> {\n this.logger.info('Initializing modal...')\n const WalletConnectModal = (await import('@walletconnect/modal')).WalletConnectModal\n const modal = new WalletConnectModal({\n projectId: this.clientOptions.projectId,\n ...this.modalOptions\n })\n\n modal.subscribeModal((state) => this.logger.info(`Modal ${state.open ? 'open' : 'closed'}`))\n\n this.modal = modal\n this.logger.info('Modal initialized')\n return modal\n }\n\n private onSessionConnected(\n session: SessionTypes.Struct,\n { approved = false }: { approved?: boolean } = {}\n ): WalletAccount[] {\n const caipAccounts = session.namespaces.algorand!.accounts\n\n if (!caipAccounts.length) {\n this.logger.error('No accounts found!')\n throw new Error('No accounts found!')\n }\n\n // @todo: Validate format of CAIP-10 accounts\n\n // Filter duplicate accounts (same address, different chain)\n const accounts = [...new Set(caipAccounts.map((account) => account.split(':').pop()!))]\n\n const walletState = this.store.getWalletState()\n\n // A new session gets its empty signatures from the wallet, via\n // algo_getEmptySignatures. When restoring or updating a session, keep the ones\n // already in the store, which the manager clears if an account is rekeyed.\n const emptySignatures: Record<string, string | undefined> =\n approved || !walletState\n ? {}\n : Object.fromEntries(walletState.accounts.map((a) => [a.address, a.emptySignature]))\n\n const walletAccounts = accounts.map((address: string, idx: number) => {\n const account: WalletAccount = {\n name: `${this.metadata.name} Account ${idx + 1}`,\n address\n }\n const emptySignature = emptySignatures[address]\n if (emptySignature !== undefined) {\n account.emptySignature = emptySignature\n }\n return account\n })\n\n if (!walletState) {\n const newWalletState: WalletState = {\n accounts: walletAccounts,\n activeAccount: walletAccounts[0]\n }\n\n this.store.addWallet(newWalletState)\n\n this.logger.info('Connected', newWalletState)\n } else {\n const match =\n compareAccounts(walletAccounts, walletState.accounts) &&\n walletAccounts.every(\n (account) =>\n walletState.accounts.find((a) => a.address === account.address)?.emptySignature ===\n account.emptySignature\n )\n\n if (!match) {\n this.logger.warn('Session accounts mismatch, updating accounts', {\n prev: walletState.accounts,\n current: walletAccounts\n })\n this.store.setAccounts(walletAccounts)\n }\n }\n\n this.session = session\n return walletAccounts\n }\n\n /**\n * Asks the wallet for its accounts' empty signatures with\n * `algo_getEmptySignatures`, if it approved that method for the session. The\n * response is applied when it arrives. If the wallet doesn't answer in time,\n * the accounts' types stay unknown.\n */\n private async requestEmptySignatures(session: SessionTypes.Struct): Promise<void> {\n if (!this.client || !session.namespaces.algorand?.methods.includes(EMPTY_SIGNATURES_METHOD)) {\n return\n }\n\n const chainId = this.activeChainId\n\n try {\n const emptySignatures = await withTimeout(\n this.client.request<unknown>({\n chainId,\n topic: session.topic,\n request: formatJsonRpcRequest(EMPTY_SIGNATURES_METHOD, { chainId })\n }),\n EMPTY_SIGNATURES_TIMEOUT\n )\n\n // Discard the response if the session or network changed while waiting\n if (this.session?.topic !== session.topic || this.activeChainId !== chainId) {\n return\n }\n\n this.applyEmptySignatures(emptySignatures)\n } catch (error: any) {\n this.logger.warn(`Could not get empty signatures: ${error.message}`)\n }\n }\n\n public get activeChainId(): string {\n const network = this.activeNetworkConfig\n if (!network?.caipChainId) {\n this.logger.warn(`No CAIP-2 chain ID found for network: ${this.activeNetwork}`)\n return ''\n }\n return network.caipChainId\n }\n\n public connect = async (): Promise<WalletAccount[]> => {\n this.logger.info('Connecting...')\n try {\n const client = this.client || (await this.initializeClient())\n const modal = this.modal || (await this.initializeModal())\n\n const requiredNamespaces = {\n algorand: {\n chains: [this.activeChainId],\n methods: ['algo_signTxn'],\n events: []\n }\n }\n\n // Optional, so wallets that don't support it can still approve the session\n const optionalNamespaces = {\n algorand: {\n chains: [this.activeChainId],\n methods: [EMPTY_SIGNATURES_METHOD],\n events: []\n }\n }\n\n const { uri, approval } = await client.connect({ requiredNamespaces, optionalNamespaces })\n\n if (!uri) {\n this.logger.error('No URI found')\n throw new Error('No URI found')\n }\n\n await modal.openModal({ uri })\n\n const session = await approval()\n const walletAccounts = this.onSessionConnected(session, { approved: true })\n\n // Don't hold up the connection waiting for the wallet\n void this.requestEmptySignatures(session)\n\n this.logger.info('Connected successfully')\n return walletAccounts\n } catch (error: any) {\n this.logger.error('Error connecting:', error.message)\n throw error\n } finally {\n this.modal?.closeModal()\n }\n }\n\n public disconnect = async (): Promise<void> => {\n this.logger.info('Disconnecting...')\n try {\n this.onDisconnect()\n if (this.client && this.session) {\n await this.client.disconnect({\n topic: this.session.topic,\n reason: {\n message: 'User disconnected.',\n code: 6000\n }\n })\n }\n this.logger.info('Disconnected')\n } catch (error: any) {\n this.logger.error('Error disconnecting:', error.message)\n throw error\n }\n }\n\n public resumeSession = async (): Promise<void> => {\n try {\n const walletState = this.store.getWalletState()\n\n // No session to resume\n if (!walletState) {\n this.logger.info('No session to resume')\n return\n }\n\n this.logger.info('Resuming session...')\n\n const client = this.client || (await this.initializeClient())\n\n if (client.session.length) {\n const lastKeyIndex = client.session.keys.length - 1\n const restoredSession = client.session.get(client.session.keys[lastKeyIndex])\n this.onSessionConnected(restoredSession)\n }\n this.logger.info('Session resumed successfully')\n } catch (error: any) {\n this.logger.error('Error resuming session:', error.message)\n this.onDisconnect()\n throw error\n }\n }\n\n private processTxns(\n txnGroup: algosdk.Transaction[],\n indexesToSign?: number[]\n ): WalletTransaction[] {\n const txnsToSign: WalletTransaction[] = []\n\n txnGroup.forEach((txn, index) => {\n const isIndexMatch = !indexesToSign || indexesToSign.includes(index)\n const signer = txn.sender.toString()\n const canSignTxn = this.addresses.includes(signer)\n\n const txnString = byteArrayToBase64(txn.toByte())\n\n if (isIndexMatch && canSignTxn) {\n txnsToSign.push({ txn: txnString })\n } else {\n txnsToSign.push({ txn: txnString, signers: [] })\n }\n })\n\n return txnsToSign\n }\n\n private processEncodedTxns(\n txnGroup: Uint8Array[],\n indexesToSign?: number[]\n ): WalletTransaction[] {\n const txnsToSign: WalletTransaction[] = []\n\n txnGroup.forEach((txnBuffer, index) => {\n const decodedObj = algosdk.msgpackRawDecode(txnBuffer)\n const isSigned = isSignedTxn(decodedObj)\n\n const txn: algosdk.Transaction = isSigned\n ? algosdk.decodeSignedTransaction(txnBuffer).txn\n : algosdk.decodeUnsignedTransaction(txnBuffer)\n\n const isIndexMatch = !indexesToSign || indexesToSign.includes(index)\n const signer = txn.sender.toString()\n const canSignTxn = !isSigned && this.addresses.includes(signer)\n\n const txnString = byteArrayToBase64(txn.toByte())\n\n if (isIndexMatch && canSignTxn) {\n txnsToSign.push({ txn: txnString })\n } else {\n txnsToSign.push({ txn: txnString, signers: [] })\n }\n })\n\n return txnsToSign\n }\n\n public signTransactions = async <T extends algosdk.Transaction[] | Uint8Array[]>(\n txnGroup: T | T[],\n indexesToSign?: number[]\n ): Promise<(Uint8Array | null)[]> => {\n try {\n if (!this.session) {\n this.logger.error('No session found!')\n throw new SessionError('No session found!')\n }\n\n this.logger.debug('Signing transactions...', { txnGroup, indexesToSign })\n\n let txnsToSign: WalletTransaction[] = []\n\n // Determine type and process transactions for signing\n if (isTransactionArray(txnGroup)) {\n const flatTxns: algosdk.Transaction[] = flattenTxnGroup(txnGroup)\n txnsToSign = this.processTxns(flatTxns, indexesToSign)\n } else {\n const flatTxns: Uint8Array[] = flattenTxnGroup(txnGroup as Uint8Array[])\n txnsToSign = this.processEncodedTxns(flatTxns, indexesToSign)\n }\n\n const client = this.client || (await this.initializeClient())\n\n this.logger.debug('Sending processed transactions to wallet...', [txnsToSign])\n\n // Format JSON-RPC request\n const request = formatJsonRpcRequest('algo_signTxn', [txnsToSign])\n\n // Sign transactions\n const signTxnsResult = await client.request<SignTxnsResponse>({\n chainId: this.activeChainId,\n topic: this.session.topic,\n request\n })\n\n this.logger.debug('Received signed transactions from wallet', signTxnsResult)\n\n // Filter out unsigned transactions, convert signed transactions to Uint8Array\n const signedTxns = signTxnsResult.reduce<Uint8Array[]>((acc, value) => {\n if (value) {\n let signedTxn: Uint8Array\n if (typeof value === 'string') {\n signedTxn = base64ToByteArray(value)\n } else if (value instanceof Uint8Array) {\n signedTxn = value\n } else if (Array.isArray(value)) {\n signedTxn = new Uint8Array(value)\n } else {\n // Log unexpected types for debugging\n this.logger.warn('Unexpected type in signTxnsResult', value)\n signedTxn = new Uint8Array()\n }\n acc.push(signedTxn)\n }\n return acc\n }, [])\n\n // ARC-0001 - Return null for unsigned transactions\n const result = txnsToSign.reduce<(Uint8Array | null)[]>((acc, txn) => {\n if (txn.signers && txn.signers.length == 0) {\n acc.push(null)\n } else {\n const signedTxn = signedTxns.shift()\n if (signedTxn) {\n acc.push(signedTxn)\n }\n }\n return acc\n }, [])\n\n this.logger.debug('Transactions signed successfully', result)\n return result\n } catch (error: any) {\n this.logger.error('Error signing transactions:', error.message)\n throw error\n }\n }\n}\n","// ---------- Skin Types ---------- //\n\nexport interface WalletConnectSkin {\n id: string\n name: string\n icon: string\n}\n\nexport type WalletConnectSkinOption = string | WalletConnectSkin\n\n// ---------- Built-in Skin Icons ---------- //\n\nconst VOI_WALLET_ICON = `data:image/svg+xml;base64,${btoa(`\n<svg xmlns=\"http://www.w3.org/2000/svg\" width=\"322\" height=\"322\">\n <path fill=\"#32B1E8\" d=\"M131 19a42 42 0 0 1 15 8c18 12 36 26 50 43l2 3c26 29 41 64 47 102v2l1 20h-49v10l-42 4a70897 70897 0 0 0-78 7h-3l-18 1a804 804 0 0 0 55-186c16 8 29 33 39 48l-2-16-1-3c-3-14-9-27-15-40l-1-3Z\"/>\n <path fill=\"#1F3AB7\" d=\"M111 33c13 6 23 25 32 37l1 2 4 6 1 2c6 8 4 20 4 30v3c0 32-11 62-26 89h2c23-3 45-4 68-4v9l-42 4a70897 70897 0 0 0-78 7h-3l-18 1a804 804 0 0 0 55-186Z\"/>\n <path fill=\"#3C4856\" d=\"M267 214a2941 2941 0 0 0-12 14l-2 1-10 10-5 4-2 2a8522 8522 0 0 1-21 20c-6 7-11 9-20 10-7 0-12-1-17-6l-8-7-5-6a120 120 0 0 1-8-7l-2-2-4-1-10 7a4157 4157 0 0 1-15 14l-1 1c-5 5-9 6-16 6h-3a397 397 0 0 1-15 0c-14 0-14 0-19-3l-4-7a322 322 0 0 0-8-12l-2-3-8-15 65-7 15-1a47903 47903 0 0 1 122-11l2-1h13Z\"/>\n <path fill=\"#1B87DF\" d=\"M152 86v2l1 2 3 1 3 5 2 4 2 3 2 4c11 21 11 21 14 30l2 4v2l3 7 6 18 5 19 2 9h44v1h-3l-64 2h-3a526 526 0 0 0-44 3l4-9a190 190 0 0 0 21-94V86Z\"/>\n <path fill=\"#1A279D\" d=\"M139 71c5 1 5 1 7 4l2 3 2 3c5 9 3 20 3 29v3c0 32-11 62-26 89h2c23-3 45-4 68-4v9a798 798 0 0 1-92 7l2-2 1-5 5-9c8-16 14-32 19-49l2-8 2-14 1-1c3-18 2-37 2-55Z\"/>\n <path fill=\"#3D4856\" d=\"M151 261c4 1 6 3 8 5l3 3 3 5-4 1-1 19h-18v-20h-7l5-5 2-2 3-2 2-3 4-1Z\"/>\n <path fill=\"#2EB4EB\" d=\"m254 65 4 6c4 6 8 9 14 12v2l-2 1c-7 4-11 9-15 16l-5-7c-3-6-9-8-15-10l7-5c6-4 9-9 12-15Z\"/>\n <path fill=\"#2021AB\" d=\"M162 206h4c10 0 10 0 15 2v1a11602 11602 0 0 1-44 4h-4l-23 1v-1h9l1-3 8-1 3-1h9l2-1 5-1h15Z\"/>\n <path fill=\"#31B8EF\" d=\"M280 50c3 1 3 1 5 4s4 5 8 7l-5 5-6 7-5-5-7-6 6-5 4-7Z\"/>\n <path fill=\"#2DC1F2\" d=\"m255 35 8 9-6 7c-5-1-6-3-9-6l7-10Z\"/>\n <path fill=\"#2F3A48\" d=\"M157 266c3 1 6 3 8 6v2l-4 1-1 19h-18v-18h1v7l1 4 1 4h7l7 1v-12l-1-3v-7l-1-4Z\"/>\n <path fill=\"#233143\" d=\"M157 266c3 1 6 3 8 6v2l-4 1-1 19h-1v-13l-1-4v-6l-1-5Z\"/>\n <path fill=\"#2A2DB3\" d=\"m179 207 2 2-9 1h-7l-4-2c4-4 13-2 18-1Z\"/>\n <path fill=\"#3864CC\" d=\"m104 69 2 6-1 2v3l-1 2-1 2-1 6-2 1 4-22Z\"/>\n <path fill=\"#1F2DAB\" d=\"m77 166 3 1-1 8-5 1c1-4 1-7 3-10Z\"/>\n <path fill=\"#2651C8\" d=\"M98 95c3 3 3 3 3 6v2l-3 1v2h-2l2-11Z\"/>\n <path fill=\"#383F59\" d=\"m267 214-3 5-1-3-9 1 1-2 12-1Z\"/>\n <path fill=\"#184FCF\" d=\"m111 33 4 2-1 2c-2 3-3 5-3 9l-2-1 2-12Z\"/>\n <path fill=\"#1D25A8\" d=\"M71 182h1v8l-4 2c1-7 1-7 3-10Z\"/>\n <path fill=\"#31BBF6\" d=\"m254 65 4 8-3-1-1-2-1 2h-2l3-7Z\"/>\n <path fill=\"#1E78DC\" d=\"m142 168 2 3-2 5-1 2-3 3 1-5 1-3 2-5Z\"/>\n <path fill=\"#42CDF8\" d=\"m255 35 4 4h-2l-7 3 5-7Z\"/>\n <path fill=\"#25B4EC\" d=\"M148 59h4l-2 8c-2-2-2-2-2-5v-3Z\"/>\n <path fill=\"#2024AA\" d=\"m63 200 2 2-1 4-3 2 2-8Z\"/>\n <path fill=\"#32BEFA\" d=\"m280 50 3 1-1 4-3 1 1-6Z\"/>\n</svg>\n`)}`\n\nconst BIATEC_ICON = `data:image/svg+xml;base64,${btoa(`\n<svg xmlns=\"http://www.w3.org/2000/svg\" viewBox=\"0 0 200 180\"><path d=\"M94.27 151.629c-.861-.526-1.51-1.37-1.83-2.386-.197-.62-.18-.627 1.082-.437.705.105 1.6.356 1.988.557.696.36 1.815 1.876 1.815 2.459 0 .486-2.166.348-3.054-.193m23.953-.263c-.788-.419-2.095-2.123-2.108-2.75-.01-.433 2.467-.182 3.403.345.955.536 2.148 1.97 2.148 2.582 0 .503-2.397.38-3.443-.177m-9.024-1.165c-1.567-1.193-2.38-2.74-2.55-4.849-.075-.933-.054-1.697.045-1.697.866 0 2.714 1.67 3.439 3.107.398.789.657 3.888.351 4.195-.07.07-.648-.27-1.285-.756m-8.906-1.354c-.63-.684-1.21-1.648-1.387-2.305-.318-1.18-.136-3.416.278-3.416.555 0 2.108 1.697 2.505 2.737.472 1.237.457 3.905-.023 4.063-.16.053-.777-.433-1.373-1.08m-6.805-1.775c-2.764-.612-5.223-1.425-5.357-1.772-.08-.21.169-1.027.555-1.814s.701-1.469.701-1.515c0-.047-.803.067-1.786.253-.982.185-1.857.256-1.944.157-.088-.1-.365-.715-.618-1.367-.252-.652-.858-1.729-1.345-2.393-1.293-1.76-5.285-5.526-7.272-6.858-3.826-2.564-4.96-3.855-4.667-5.316.08-.402.692-1.574 1.359-2.606 1.65-2.551 2.51-4.472 2.512-5.62.002-.571-.364-1.69-.901-2.758l-.905-1.796.706-.532c1.936-1.46 4.649-4.916 4.205-5.36-.06-.06-.846.72-1.745 1.732-3.553 3.997-7.814 6.463-16.014 9.27-5.324 1.823-5.853 2.06-7.183 3.228-1.555 1.365-1.962 2.502-2.531 7.063-.284 2.275-.706 4.79-.937 5.591-.231.8-.403 2.17-.382 3.043.032 1.346-.157 2.06-1.248 4.698-1.498 3.622-1.068 3.708-4.138-.827l-2.036-3.008.747-.784c.411-.43 1.075-.978 1.475-1.216.955-.568.919-.922-.236-2.331-.53-.647-.917-1.209-.86-1.25s.43-.277.83-.526c1.788-1.12 2.7-4.727 2.987-11.822.214-5.274.595-6.46 2.195-6.83 6.634-1.535 7.58-1.98 8.618-4.066.926-1.858.9-3.701-.121-8.475-.87-4.072-1.047-7.21-.516-9.223.606-2.303 3.759-7.433 5.667-9.221.376-.353.684-.729.684-.835 0-.254-3.325-2.697-4.448-3.268-.482-.245-1.455-.45-2.163-.456-3.892-.03-6.628 1.877-8.722 6.08-.603 1.212-1.582 2.73-2.176 3.374-2.733 2.965-8.602 4.09-12.666 2.43l-.913-.374 1.323-.05c1.422-.054 3.498-.94 3.944-1.683.414-.69.076-.79-1.06-.314-1.443.605-4.075.597-5.039-.015-1.259-.8-2.23-1.81-2.795-2.908l-.535-1.042 1.243 1.095c1.51 1.328 2.691 1.752 4.425 1.585 1.506-.145 2.523-.851 1.65-1.147-3.195-1.08-5.834-3.078-7.07-5.35-.809-1.485-1.513-3.982-1.504-5.334l.006-.936.42.854c.232.47.941 1.333 1.576 1.918l1.155 1.064 2.189-.012 2.188-.011-1.012-.535c-.975-.514-3.353-2.766-3.353-3.175 0-.11.506.079 1.124.418 1.282.703 3.888 1.32 4.21.996.12-.118-.204-.612-.718-1.097-.513-.484-1.17-1.344-1.46-1.911l-.525-1.03 1.174.895c2.02 1.542 3.883 1.506 6.342-.123.69-.457 1.218-.863 1.175-.903s-.989.227-2.103.594c-1.87.618-2.11.64-3.151.305-1.284-.415-2.023-1.273-2.25-2.613l-.158-.926.486.595c1.07 1.31 2.652 1.255 6.363-.224 1.132-.451 2.892-1.036 3.91-1.3 2.732-.706 1.561-.926-2.298-.43-1.778.228-3.27.376-3.318.329-.047-.047.662-.415 1.575-.818 2.002-.883 4.78-1.152 6.858-.663 1.817.427 2.555.81 4.032 2.087 1.151.997 3.654 2.156 4.605 2.133.595-.015-2.96-3.395-4.552-4.328-1.639-.96-4.11-1.542-6.107-1.438-.92.049-1.627.016-1.571-.073.242-.388 3.44-.825 5.203-.71 4.048.265 6.96 2.546 10.902 8.537 2.553 3.883 4.234 5.67 6.137 6.524l1.092.49 2.215-1.027c4.747-2.2 8.797-2.518 16.097-1.26 2.25.387 4.717.704 5.482.704h1.39l.074 3.203.074 3.203.894-1.113c.88-1.096.894-1.152.846-3.516l-.049-2.402-1.61-1.721c-4.14-4.425-4.335-6.536-1.135-12.213 2.744-4.87 2.704-4.41.813-9.32-.883-2.292-1.696-4.167-1.807-4.167-.339 0-.205 4 .196 5.821.716 3.256.435 4.822-1.006 5.603-.371.2-2.144.33-4.904.36-3.6.036-4.348-.022-4.473-.348-.087-.227.102-.582.451-.845.53-.4.563-.53.274-1.09-.18-.35-.692-1.022-1.137-1.493s-.734-.933-.64-1.026c.093-.094 1.072-.036 2.175.128 3.023.45 3.76.398 4.211-.297.4-.615 2.887-9.725 2.704-9.907-.196-.196-1.55 1.62-2.759 3.7-1.782 3.068-3.14 3.895-6.379 3.889-2.485-.005-5.43-1.098-8.658-3.213-1.439-.943-3.02-1.855-3.514-2.027-1.524-.531-3.75-.392-5.163.324l-1.26.638.567-.603c.892-.95 3.048-2.004 4.432-2.167 1.94-.23 3.3.283 5.786 2.18 2.39 1.823 3.163 2.225 4.28 2.225.6 0 .497-.12-.745-.872-.792-.48-2.416-1.598-3.609-2.486-2.658-1.978-4.119-2.58-5.831-2.4l-1.26.132.926-.39c.667-.281 1.609-.36 3.373-.284 1.346.059 2.448.077 2.448.04 0-.278-2.537-1.455-3.71-1.722-.89-.202-1.231-.365-.884-.421.312-.051 1.86.225 3.44.614 2.564.63 3.167.687 5.602.525 5.536-.369 7.032-1.144 9.218-4.774l1.433-2.382-1.224 1.323c-.673.728-1.779 1.928-2.457 2.666-.677.739-1.53 1.417-1.893 1.508l-.662.165.61-.503c.334-.277 1.088-1.491 1.675-2.698 1.772-3.648 3.228-4.779 6.772-5.257 3.522-.476 4.797-.791 5.421-1.342.332-.293.429-.44.215-.329-.213.112-1.94.277-3.836.367-2.955.14-3.666.263-4.97.86-1.632.749-4.092 2.893-4.996 4.356-.764 1.236-.923.905-.224-.465 1.387-2.718 4.685-4.945 8.366-5.651l1.815-.349-1.058-.235c-.582-.13-1.952-.224-3.043-.209l-1.984.027 1.72-.82c1.427-.682 2.04-.822 3.611-.822 1.607 0 1.86-.06 1.679-.4-.539-1.005-1.377-1.452-2.69-1.432-.769.011-1.156-.067-.937-.19.534-.298 2.168-.34 4.169-.104 1.648.194 1.82.159 3.59-.733 1.023-.515 2.472-1.047 3.22-1.183 1.388-.253 3.607-.04 4.472.429.942.51 1.958 1.825 2.095 2.712.116.746 0 1.052-.671 1.777-.752.813-.811 1.018-.811 2.82 0 1.706-.105 2.127-.85 3.424-.467.814-.973 1.476-1.124 1.473s-.797-.242-1.435-.532c-1.277-.579-1.714-.435-1.988.655-.115.46.045.84.605 1.44.42.448 1.621 2.237 2.671 3.975 1.883 3.116 1.905 3.175 1.585 4.146-.258.78-.258 1.56 0 3.73.179 1.51.253 3.031.166 3.38-.128.509.033.795.805 1.432 1.367 1.126 5.02 2.947 5.914 2.947 1.268 0 1.588.247 1.588 1.227 0 1.057-.642 2.742-1.045 2.742-.153 0-.278-.298-.278-.662 0-.558-.123-.661-.793-.661-.436 0-2.162-.467-3.836-1.036l-3.044-1.036v1.788c0 .984-.077 3.057-.172 4.608l-.173 2.82h3.015l-.133.86c-.073.472-.206 2.11-.295 3.637-.373 6.42-.634 7.203-4.207 12.65-4.119 6.278-4.635 7.984-3.493 11.548.37 1.158.647 2.133.613 2.167-.246.246-2.569-1.19-3.783-2.34-2.616-2.473-2.922-3.975-1.146-5.619.954-.882 1.054-1.087.892-1.828-.417-1.91-.553-1.976-1-.482-.232.777-.693 1.849-1.024 2.382-.526.846-.603 1.318-.603 3.705v2.736l3.175 1.022c1.746.562 3.446 1.028 3.777 1.034.583.012.59-.012.194-.776-.224-.434-.479-1.307-.566-1.939-.208-1.523.53-3.065 3.905-8.159 4.537-6.845 5.478-9.25 5.681-14.513.07-1.82.19-3.93.267-4.692.137-1.353.17-1.398 1.379-1.933 2.27-1.004 4.245-3.717 6.253-8.589.526-1.274.459-1.204-1.891 1.985-1.019 1.382-2.13 2.751-2.47 3.042-.604.516-.603.506.048-.397.938-1.299 1.216-2.144 1.685-5.107.663-4.193 1.699-6.255 4.604-9.16 3.639-3.638 9.47-6.348 13.7-6.365.635-.003 1.201-.155 1.322-.356.117-.192 1.105-.92 2.196-1.615 1.092-.696 2.252-1.511 2.579-1.812.327-.3.66-.48.74-.4.081.081-.038.942-.263 1.914s-.41 1.88-.41 2.016c0 .37 1.393.3 1.992-.102.287-.192 1.296-.62 2.241-.953s1.998-.78 2.338-.994c.34-.215.665-.345.722-.288.302.302-1.982 3.526-2.927 4.132l-1.152.74c-.277.179 1.202 3.732 1.975 4.745.674.882.862 1.347.742 1.825-.089.354.045 1.273.296 2.044.645 1.98 2.913 6.751 3.698 7.779.808 1.06.82 1.416.075 2.363-.32.408-.648 1.225-.728 1.816-.118.879-.279 1.12-.89 1.335-1.457.512-2.298-.449-2.94-3.358-.113-.512-.325-.728-.715-.728-.634 0-.619.099.398 2.514.368.873.572 1.685.453 1.804-.12.119-.679.178-1.244.132-1.006-.082-1.03-.108-1.165-1.29-.11-.958-.407-1.515-1.444-2.716-1.28-1.483-1.523-1.617-3.974-2.186-.436-.102-1.235-.406-1.776-.677l-.981-.491-.311 1.124c-.462 1.668-.381 7.592.14 10.35.244 1.29.926 3.552 1.516 5.027 1.864 4.655 1.933 4.98 1.924 9.031-.006 2.853-.112 3.972-.461 4.87-.25.641-.415 1.204-.367 1.252.047.047 2.935.203 6.419.347 4.2.174 6.786.397 7.679.664 1.433.429 2.955 1.341 3.328 1.995.125.219 1.292 3.718 2.594 7.777 2.56 7.978 2.515 7.613 1.142 9.263-.582.7-.623.918-.458 2.455l.18 1.686-1.685 1.59c-2.476 2.335-2.487 2.338-2.833.702l-.825-3.894c-.497-2.344-.503-2.535-.09-2.844.245-.182.75-.332 1.121-.335 1.259-.007 1.444-.36.672-1.277l-.7-.833.461-1.209c.403-1.054.421-1.428.146-2.924-.856-4.647-3.463-7.755-6.516-7.769-1.198-.006-5.626.726-6.143 1.015-.419.235 1.36 2.035 4.026 4.073 1.954 1.494 2.487 2.265 2.708 3.918.115.858-.031 1.278-.963 2.753-1.122 1.776-2.596 4.941-4.015 8.62-.437 1.133-1.048 2.383-1.358 2.777-.546.695-.623.712-2.434.544-1.51-.14-2.034-.085-2.726.287-.933.503-1.032.488-5.234-.754l-1.852-.547 1.058-.93c2.452-2.155 4.96-4.035 5.375-4.028.245.004.743.417 1.107.919.364.5.74.914.835.918.336.014 2.673-2.777 3.423-4.09.928-1.622 1.429-3.721 1.19-4.992-.414-2.208-2.105-3.2-8.836-5.183-4.604-1.356-5.44-1.637-6.837-2.3-.81-.384-.92-.36-3.047.664-2.593 1.248-5.507 2.251-8.665 2.983-3.304.766-9.686.95-12.988.376-3.227-.562-7.639-2.035-9.626-3.214-.856-.508-1.618-.862-1.693-.787-.15.15 1.12 2.079 1.665 2.53.271.226.239.732-.166 2.586-1.245 5.713-2.66 8.612-7.189 14.73-2.852 3.852-3.402 5.685-2.327 7.762.66 1.274 9.278 9.763 11.016 10.85.797.498 1.576 1.26 1.929 1.889.496.883 2.158 5.275 2.158 5.704 0 .2-1.577.111-2.779-.154\" style=\"fill:teal;stroke-width:.264583\"></path></svg>\n`)}`\n\n// ---------- Built-in Skins Registry ---------- //\n\n/**\n * Built-in skins that ship with the WalletConnect adapter.\n * PRs to add new WalletConnect-compatible wallets should add entries here.\n */\nexport const BUILTIN_SKINS: Record<string, WalletConnectSkin> = {\n biatec: {\n id: 'biatec',\n name: 'Biatec Wallet',\n icon: BIATEC_ICON\n },\n voiwallet: {\n id: 'voiwallet',\n name: 'Voi Wallet',\n icon: VOI_WALLET_ICON\n }\n}\n\n// ---------- Custom Skins Registry (Runtime) ---------- //\n\n/**\n * Runtime registry for custom skins added by developers.\n * Use `registerSkin()` to add custom skins.\n */\nconst customSkins = new Map<string, WalletConnectSkin>()\n\n/**\n * Register a custom WalletConnect skin at runtime.\n * This allows developers to add their own wallet skins without PRing the library.\n *\n * @param skin - The skin definition to register\n * @throws Error if attempting to override a built-in skin\n *\n * @example\n * ```typescript\n * import { registerSkin } from '@txnlab/use-wallet-walletconnect'\n *\n * registerSkin({\n * id: 'mywallet',\n * name: 'My Custom Wallet',\n * icon: 'data:image/svg+xml;base64,...'\n * })\n * ```\n */\nexport function registerSkin(skin: WalletConnectSkin): void {\n if (BUILTIN_SKINS[skin.id]) {\n throw new Error(`Cannot override built-in skin: ${skin.id}`)\n }\n customSkins.set(skin.id, skin)\n}\n\n/**\n * Get a skin by its ID from either built-in or custom registries.\n *\n * @param skinId - The skin identifier\n * @returns The skin definition, or undefined if not found\n */\nexport function getSkin(skinId: string): WalletConnectSkin | undefined {\n return BUILTIN_SKINS[skinId] || customSkins.get(skinId)\n}\n\n/**\n * Resolve a skin option to a full WalletConnectSkin object.\n *\n * If the option is a string, looks up the skin in the registries.\n * If the option is a full skin object, registers it as a custom skin and returns it.\n *\n * @param skinOption - Either a skin ID string or a full skin definition\n * @returns The resolved skin, or undefined if not found (when string ID provided)\n */\nexport function resolveSkin(skinOption: WalletConnectSkinOption): WalletConnectSkin | undefined {\n if (typeof skinOption === 'string') {\n return getSkin(skinOption)\n }\n\n // If it's a full skin definition, register it as a custom skin\n if (!BUILTIN_SKINS[skinOption.id]) {\n customSkins.set(skinOption.id, skinOption)\n }\n return skinOption\n}\n","import { WalletConnectAdapter } from './adapter'\nimport { resolveSkin } from './skins'\nimport type { WalletConnectOptions } from './adapter'\nimport type { WalletAdapterConfig } from '@txnlab/use-wallet'\n\nexport const WALLET_ID = 'walletconnect' as const\n\n/**\n * Note: unlike other adapter factories, `walletConnect` does not accept\n * the shared `metadata` factory option. WalletConnect's `metadata` option\n * is the dApp metadata sent to the relay (name, description, url, icons).\n * To customize the wallet's display name and icon, pass a custom `skin`.\n */\nexport function walletConnect(options: WalletConnectOptions): WalletAdapterConfig {\n const skin = options.skin ? resolveSkin(options.skin) : null\n const id = skin ? `walletconnect:${skin.id}` : WALLET_ID\n const metadata = skin\n ? { name: skin.name, icon: skin.icon }\n : WalletConnectAdapter.defaultMetadata\n\n return {\n id,\n metadata,\n Adapter: WalletConnectAdapter as unknown as WalletAdapterConfig['Adapter'],\n options: options as unknown as Record<string, unknown> | undefined\n }\n}\n\nexport { WalletConnectAdapter }\nexport { SessionError } from './adapter'\nexport type { WalletConnectOptions, SignTxnsResponse } from './adapter'\n\n// Skins utilities and types\nexport { registerSkin, getSkin, resolveSkin, BUILTIN_SKINS } from './skins'\nexport type { WalletConnectSkin, WalletConnectSkinOption } from './skins'\n"],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@txnlab/use-wallet-walletconnect",
3
- "version": "5.0.1",
3
+ "version": "5.1.0-next.2",
4
4
  "publishConfig": {
5
5
  "access": "public",
6
6
  "provenance": true
@@ -30,19 +30,19 @@
30
30
  "dist"
31
31
  ],
32
32
  "peerDependencies": {
33
- "@txnlab/use-wallet": "^5.0.0",
34
- "algosdk": "^3.0.0"
33
+ "algosdk": "^3.0.0",
34
+ "@txnlab/use-wallet": "^5.1.0-next.2"
35
35
  },
36
36
  "dependencies": {
37
37
  "@walletconnect/modal": "2.7.0",
38
- "@walletconnect/sign-client": "2.25.0",
39
- "@walletconnect/types": "2.25.0"
38
+ "@walletconnect/sign-client": "2.26.0",
39
+ "@walletconnect/types": "2.26.0"
40
40
  },
41
41
  "devDependencies": {
42
- "algosdk": "3.6.0",
43
- "tsdown": "0.23.0",
42
+ "algosdk": "3.8.0",
43
+ "tsdown": "0.23.1",
44
44
  "typescript": "5.9.3",
45
- "@txnlab/use-wallet": "5.0.1"
45
+ "@txnlab/use-wallet": "5.1.0-next.2"
46
46
  },
47
47
  "scripts": {
48
48
  "build": "tsdown",