@solana/connector 0.2.3 → 0.2.6

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.
Files changed (64) hide show
  1. package/dist/{chunk-WPDCSFX2.mjs → chunk-26SWXQP6.mjs} +11 -8
  2. package/dist/chunk-26SWXQP6.mjs.map +1 -0
  3. package/dist/{chunk-NLPEO5GT.js → chunk-5MA4YO43.js} +3 -3
  4. package/dist/chunk-5MA4YO43.js.map +1 -0
  5. package/dist/{chunk-B6YBZB6H.js → chunk-6UTXGTYX.js} +26 -23
  6. package/dist/chunk-6UTXGTYX.js.map +1 -0
  7. package/dist/{chunk-X2X5TFXS.js → chunk-7DATF5NN.js} +4 -4
  8. package/dist/{chunk-X2X5TFXS.js.map → chunk-7DATF5NN.js.map} +1 -1
  9. package/dist/{chunk-E3DAIOYS.mjs → chunk-GM3PZ3WK.mjs} +11 -6
  10. package/dist/chunk-GM3PZ3WK.mjs.map +1 -0
  11. package/dist/{chunk-QST7XLMB.js → chunk-PNZYYZZS.js} +11 -6
  12. package/dist/chunk-PNZYYZZS.js.map +1 -0
  13. package/dist/{chunk-UOML5ULB.mjs → chunk-PP7GI6BR.mjs} +3 -3
  14. package/dist/{chunk-UOML5ULB.mjs.map → chunk-PP7GI6BR.mjs.map} +1 -1
  15. package/dist/{chunk-DFKGCW7K.mjs → chunk-STJOIQUF.mjs} +35 -8
  16. package/dist/chunk-STJOIQUF.mjs.map +1 -0
  17. package/dist/{chunk-ULEPN4NL.js → chunk-USIWRRHO.js} +34 -7
  18. package/dist/chunk-USIWRRHO.js.map +1 -0
  19. package/dist/{chunk-A7WQ3K75.mjs → chunk-ZBPAQUIP.mjs} +3 -3
  20. package/dist/chunk-ZBPAQUIP.mjs.map +1 -0
  21. package/dist/compat.d.mts +1 -1
  22. package/dist/compat.d.ts +1 -1
  23. package/dist/headless.d.mts +5 -6
  24. package/dist/headless.d.ts +5 -6
  25. package/dist/headless.js +113 -113
  26. package/dist/headless.mjs +3 -3
  27. package/dist/index.d.mts +2 -3
  28. package/dist/index.d.ts +2 -3
  29. package/dist/index.js +154 -154
  30. package/dist/index.mjs +4 -4
  31. package/dist/{protocol-G-z1lRqo.d.mts → protocol-nWSt9TTV.d.mts} +1 -1
  32. package/dist/{protocol-G-z1lRqo.d.ts → protocol-nWSt9TTV.d.ts} +1 -1
  33. package/dist/react.d.mts +23 -18
  34. package/dist/react.d.ts +23 -18
  35. package/dist/react.js +49 -49
  36. package/dist/react.mjs +2 -2
  37. package/dist/remote.d.mts +2 -2
  38. package/dist/remote.d.ts +2 -2
  39. package/dist/remote.js +13 -13
  40. package/dist/remote.mjs +2 -2
  41. package/dist/server.d.mts +1 -1
  42. package/dist/server.d.ts +1 -1
  43. package/dist/server.js +13 -10
  44. package/dist/server.js.map +1 -1
  45. package/dist/server.mjs +5 -2
  46. package/dist/server.mjs.map +1 -1
  47. package/dist/{standard-shim-BB0Lkg_C.d.ts → standard-shim-BK2nn2ZT.d.ts} +15 -8
  48. package/dist/{standard-shim-n5phZB1d.d.mts → standard-shim-DSMKHCxD.d.mts} +15 -8
  49. package/dist/{transaction-signer-7NaYmP5w.d.ts → transaction-signer-B3eCsMfI.d.mts} +1 -1
  50. package/dist/{transaction-signer-7NaYmP5w.d.mts → transaction-signer-B3eCsMfI.d.ts} +1 -1
  51. package/dist/{walletconnect-F2M3PAAN.js → walletconnect-FFPQ6PDH.js} +8 -8
  52. package/dist/{walletconnect-F2M3PAAN.js.map → walletconnect-FFPQ6PDH.js.map} +1 -1
  53. package/dist/walletconnect-HMQQB3YM.mjs +3 -0
  54. package/dist/{walletconnect-Z6LPGALR.mjs.map → walletconnect-HMQQB3YM.mjs.map} +1 -1
  55. package/package.json +40 -31
  56. package/dist/chunk-A7WQ3K75.mjs.map +0 -1
  57. package/dist/chunk-B6YBZB6H.js.map +0 -1
  58. package/dist/chunk-DFKGCW7K.mjs.map +0 -1
  59. package/dist/chunk-E3DAIOYS.mjs.map +0 -1
  60. package/dist/chunk-NLPEO5GT.js.map +0 -1
  61. package/dist/chunk-QST7XLMB.js.map +0 -1
  62. package/dist/chunk-ULEPN4NL.js.map +0 -1
  63. package/dist/chunk-WPDCSFX2.mjs.map +0 -1
  64. package/dist/walletconnect-Z6LPGALR.mjs +0 -3
@@ -109,7 +109,7 @@ async function createWalletConnectTransport(config) {
109
109
  state.connectPromise = (async () => {
110
110
  state.connecting = true;
111
111
  try {
112
- let CANCELLED = Symbol("WALLETCONNECT_CANCELLED"), cancelResolve = null, cancelPromise = new Promise((resolve) => {
112
+ let CANCELLED = /* @__PURE__ */ Symbol("WALLETCONNECT_CANCELLED"), cancelResolve = null, cancelPromise = new Promise((resolve) => {
113
113
  cancelResolve = () => resolve(CANCELLED);
114
114
  }), isCancelled = false;
115
115
  state.cancelConnect = () => {
@@ -503,5 +503,5 @@ exports.createWalletConnectTransport = createWalletConnectTransport;
503
503
  exports.createWalletConnectWallet = createWalletConnectWallet;
504
504
  exports.isWalletConnectAvailable = isWalletConnectAvailable;
505
505
  exports.registerWalletConnectWallet = registerWalletConnectWallet;
506
- //# sourceMappingURL=chunk-NLPEO5GT.js.map
507
- //# sourceMappingURL=chunk-NLPEO5GT.js.map
506
+ //# sourceMappingURL=chunk-5MA4YO43.js.map
507
+ //# sourceMappingURL=chunk-5MA4YO43.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/lib/wallet/walletconnect/universal-provider.ts","../src/lib/wallet/walletconnect/create-walletconnect-wallet.ts","../src/lib/wallet/walletconnect/register-walletconnect.ts"],"names":["createLogger","getBase58Encoder","getBase58Decoder","logger"],"mappings":"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","file":"chunk-5MA4YO43.js","sourcesContent":["/**\n * WalletConnect Universal Provider Adapter\n *\n * Provides a thin adapter around @walletconnect/universal-provider that:\n * - Lazily imports the provider (optional dependency)\n * - Handles display_uri events and forwards to onDisplayUri callback\n * - Implements the WalletConnectTransport interface\n *\n * @see https://docs.walletconnect.network/wallet-sdk/chain-support/solana\n */\n\nimport type { WalletConnectConfig, WalletConnectTransport } from '../../../types/walletconnect';\nimport { createLogger } from '../../utils/secure-logger';\n\nconst logger = createLogger('WalletConnectProvider');\n\n// Solana JSON-RPC methods we need to support\nconst SOLANA_METHODS = [\n 'solana_getAccounts',\n 'solana_requestAccounts',\n 'solana_signMessage',\n 'solana_signTransaction',\n 'solana_signAllTransactions',\n 'solana_signAndSendTransaction',\n] as const;\n\n// CAIP-2 chain IDs for Solana networks\n// Format: solana:<genesis_hash_first_32_chars>\nexport const SOLANA_CAIP_CHAINS = {\n 'solana:mainnet': 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp',\n 'solana:devnet': 'solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1',\n 'solana:testnet': 'solana:4uhcVJyU9pJkvQyS88uRDiswHXSCkY3z',\n} as const;\n\n// All CAIP chain IDs as an array (for requesting all chains)\nconst ALL_SOLANA_CAIP_CHAINS = Object.values(SOLANA_CAIP_CHAINS);\n\n/**\n * State for the WalletConnect provider instance\n */\ninterface ProviderState {\n provider: import('@walletconnect/universal-provider').default | null;\n initialized: boolean;\n connecting: boolean;\n connectPromise: Promise<void> | null;\n cancelConnect: (() => void) | null;\n sessionChangeListeners: Set<(accounts: string[]) => void>;\n}\n\n/**\n * Create a WalletConnect transport adapter\n *\n * This adapter lazily loads @walletconnect/universal-provider and implements\n * the WalletConnectTransport interface for use with the WalletConnect wallet shim.\n */\nexport async function createWalletConnectTransport(config: WalletConnectConfig): Promise<WalletConnectTransport> {\n const state: ProviderState = {\n provider: null,\n initialized: false,\n connecting: false,\n connectPromise: null,\n cancelConnect: null,\n sessionChangeListeners: new Set(),\n };\n\n /**\n * Notify all session change listeners with current accounts\n */\n function notifySessionChange(): void {\n if (!state.provider?.session) return;\n\n const accounts = getAccountsFromSession(state.provider.session);\n state.sessionChangeListeners.forEach(listener => {\n try {\n listener(accounts);\n } catch (error) {\n logger.warn('Error in session change listener', { error });\n }\n });\n }\n\n /**\n * Extract accounts from a WalletConnect session\n */\n function getAccountsFromSession(session: unknown): string[] {\n const accounts: string[] = [];\n const namespaces = (session as { namespaces?: Record<string, { accounts?: string[] }> } | null)?.namespaces;\n\n if (namespaces?.solana?.accounts) {\n for (const account of namespaces.solana.accounts) {\n // Account format: \"solana:chainId:address\"\n const parts = account.split(':');\n if (parts.length >= 3) {\n const address = parts.slice(2).join(':');\n if (address && !accounts.includes(address)) {\n accounts.push(address);\n }\n }\n }\n }\n return accounts;\n }\n\n function hasSolanaNamespace(session: unknown): boolean {\n const namespaces = (session as { namespaces?: Record<string, unknown> } | null | undefined)?.namespaces;\n if (!namespaces) return false;\n return 'solana' in namespaces;\n }\n\n async function safeCleanupPendingPairings(\n provider: import('@walletconnect/universal-provider').default,\n deletePairings = false,\n ): Promise<void> {\n const cleanup = (\n provider as unknown as { cleanupPendingPairings?: (opts?: { deletePairings?: boolean }) => Promise<void> }\n ).cleanupPendingPairings;\n if (!cleanup) return;\n try {\n await cleanup.call(provider, { deletePairings });\n } catch (error) {\n // ignore errors\n }\n }\n\n function safeAbortPairingAttempt(provider: import('@walletconnect/universal-provider').default): void {\n const abort = (provider as unknown as { abortPairingAttempt?: () => void }).abortPairingAttempt;\n if (!abort) return;\n try {\n abort.call(provider);\n } catch (error) {\n // ignore errors\n }\n }\n\n async function safeDisconnectProvider(\n provider: import('@walletconnect/universal-provider').default,\n ): Promise<void> {\n try {\n await provider.disconnect();\n } catch (error) {\n // ignore errors\n }\n }\n\n /**\n * Initialize the provider lazily\n */\n async function initProvider(): Promise<import('@walletconnect/universal-provider').default> {\n if (state.provider) {\n return state.provider;\n }\n\n // Dynamically import WalletConnect Universal Provider\n let UniversalProvider: typeof import('@walletconnect/universal-provider').default;\n\n try {\n const module = await import('@walletconnect/universal-provider');\n UniversalProvider = module.default;\n } catch (error) {\n throw new Error(\n 'WalletConnect is enabled but @walletconnect/universal-provider is not installed. ' +\n 'Please install it in your app (e.g. pnpm add @walletconnect/universal-provider).',\n );\n }\n\n // Initialize the provider\n const provider = await UniversalProvider.init({\n projectId: config.projectId,\n metadata: config.metadata,\n relayUrl: config.relayUrl,\n });\n\n // Set up event listeners\n provider.on('display_uri', (uri: string) => {\n if (config.onDisplayUri) {\n config.onDisplayUri(uri);\n } else if (process.env.NODE_ENV === 'development') {\n // Log to console in development if no handler provided\n }\n });\n\n provider.on('session_delete', () => {\n if (config.onSessionDisconnected) {\n config.onSessionDisconnected();\n }\n });\n\n // Handle session_update events (accounts may have changed)\n provider.on('session_update', () => {\n logger.debug('WalletConnect session_update received');\n notifySessionChange();\n });\n\n // Handle session_event (general session events that may include account changes)\n provider.on('session_event', (event: unknown) => {\n logger.debug('WalletConnect session_event received', { event });\n // Some wallets emit account changes through session_event\n notifySessionChange();\n });\n\n state.provider = provider;\n state.initialized = true;\n\n return provider;\n }\n\n const transport: WalletConnectTransport = {\n async connect(): Promise<void> {\n if (state.connectPromise) {\n await state.connectPromise;\n return;\n }\n\n state.connectPromise = (async () => {\n state.connecting = true;\n\n try {\n const CANCELLED = Symbol('WALLETCONNECT_CANCELLED');\n type Cancelled = typeof CANCELLED;\n\n let cancelResolve: (() => void) | null = null;\n const cancelPromise = new Promise<Cancelled>(resolve => {\n cancelResolve = () => resolve(CANCELLED);\n });\n\n let isCancelled = false;\n state.cancelConnect = () => {\n if (isCancelled) return;\n isCancelled = true;\n cancelResolve?.();\n };\n\n async function raceWithCancel<T>(promise: Promise<T>): Promise<T> {\n const result = await Promise.race([\n promise as Promise<T | Cancelled>,\n cancelPromise as Promise<T | Cancelled>,\n ]);\n if (result === CANCELLED) {\n throw new Error('Connection cancelled');\n }\n return result as T;\n }\n\n let provider: import('@walletconnect/universal-provider').default | null = null;\n let connectAttemptPromise: Promise<unknown> | null = null;\n\n provider = await raceWithCancel(initProvider());\n\n // If we already have a session, validate that it's actually a Solana session.\n // WalletConnect can restore sessions from storage; if it's not a Solana session,\n // we must disconnect and start a fresh pairing so we can request Solana accounts.\n if (provider.session) {\n if (hasSolanaNamespace(provider.session)) {\n if (config.onSessionEstablished) {\n config.onSessionEstablished();\n }\n return;\n }\n\n await raceWithCancel(safeDisconnectProvider(provider));\n // Clean up old pairings only after explicitly disconnecting an invalid session\n await raceWithCancel(safeCleanupPendingPairings(provider, false));\n }\n\n // Request ALL Solana chains so the session supports any cluster.\n // The actual chain used for requests will be determined by the current cluster.\n connectAttemptPromise = provider.connect({\n namespaces: {\n solana: {\n chains: [...ALL_SOLANA_CAIP_CHAINS],\n methods: [...SOLANA_METHODS],\n events: [],\n },\n },\n });\n\n try {\n await raceWithCancel(connectAttemptPromise);\n } catch (error) {\n // Prevent unhandled rejections if the underlying connect eventually errors.\n void connectAttemptPromise?.catch(() => {});\n throw error;\n }\n\n if (!provider.session) {\n throw new Error('WalletConnect: connect completed but no session was established');\n }\n if (!hasSolanaNamespace(provider.session)) {\n await raceWithCancel(safeDisconnectProvider(provider));\n throw new Error('WalletConnect: connected session does not include Solana namespace');\n }\n\n if (config.onSessionEstablished) {\n config.onSessionEstablished();\n }\n } finally {\n state.connecting = false;\n state.cancelConnect = null;\n state.connectPromise = null;\n }\n })();\n\n await state.connectPromise;\n },\n\n async disconnect(): Promise<void> {\n // Always cancel an in-flight connect attempt, even if the provider isn't initialized yet.\n if (state.cancelConnect) {\n try {\n state.cancelConnect();\n } catch {\n // ignore cancellation errors\n }\n }\n\n if (!state.provider) {\n if (config.onSessionDisconnected) {\n config.onSessionDisconnected();\n }\n return;\n }\n\n // Only abort/cleanup if there's no active session (i.e., still pairing)\n if (!state.provider.session) {\n safeAbortPairingAttempt(state.provider);\n // Don't delete pairings aggressively - just clean up expired ones\n await safeCleanupPendingPairings(state.provider, false);\n } else {\n // There's an active session - disconnect it properly\n await safeDisconnectProvider(state.provider);\n }\n\n if (config.onSessionDisconnected) {\n config.onSessionDisconnected();\n }\n },\n\n async request<T = unknown>(args: { method: string; params: unknown; chainId?: string }): Promise<T> {\n const provider = await initProvider();\n\n if (!provider.session) {\n throw new Error('WalletConnect: no active session. Call connect() first.');\n }\n\n try {\n return await provider.request<T>(\n {\n method: args.method,\n params: args.params as object | Record<string, unknown> | unknown[] | undefined,\n },\n args.chainId,\n );\n } catch (error) {\n throw error;\n }\n },\n\n isConnected(): boolean {\n return state.provider?.session != null;\n },\n\n getSessionAccounts(): string[] {\n if (!state.provider?.session) {\n return [];\n }\n return getAccountsFromSession(state.provider.session);\n },\n\n onSessionChanged(listener: (accounts: string[]) => void): () => void {\n state.sessionChangeListeners.add(listener);\n return () => {\n state.sessionChangeListeners.delete(listener);\n };\n },\n };\n\n return transport;\n}\n\n/**\n * Create a mock transport for testing purposes\n *\n * This allows testing the WalletConnect wallet shim without actual WalletConnect\n * network dependencies.\n */\nexport function createMockWalletConnectTransport(\n mockImplementation: Partial<WalletConnectTransport> = {},\n): WalletConnectTransport {\n let connected = false;\n const listeners = new Set<(accounts: string[]) => void>();\n\n const defaultTransport: WalletConnectTransport = {\n async connect(): Promise<void> {\n connected = true;\n },\n async disconnect(): Promise<void> {\n connected = false;\n },\n async request<T = unknown>(): Promise<T> {\n throw new Error('Mock transport: request not implemented');\n },\n isConnected(): boolean {\n return connected;\n },\n getSessionAccounts(): string[] {\n return [];\n },\n onSessionChanged(listener: (accounts: string[]) => void): () => void {\n listeners.add(listener);\n return () => listeners.delete(listener);\n },\n };\n\n return {\n ...defaultTransport,\n ...mockImplementation,\n };\n}\n","/**\n * WalletConnect Wallet Standard Shim\n *\n * Creates a Wallet Standard-compatible wallet that proxies all operations\n * to WalletConnect Solana JSON-RPC methods.\n *\n * @see https://docs.walletconnect.network/wallet-sdk/chain-support/solana\n */\n\nimport type { Wallet, WalletAccount, WalletIcon } from '@wallet-standard/base';\nimport type {\n WalletConnectConfig,\n WalletConnectTransport,\n WalletConnectSolanaAccount,\n WalletConnectSignMessageResult,\n WalletConnectSignTransactionResult,\n WalletConnectSignAllTransactionsResult,\n WalletConnectSignAndSendTransactionResult,\n} from '../../../types/walletconnect';\nimport { getBase58Encoder, getBase58Decoder } from '@solana/codecs';\n\n// WalletConnect icon (official WC logo as SVG data URI)\nconst WALLETCONNECT_ICON: WalletIcon =\n 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMzIiIGhlaWdodD0iMzIiIHZpZXdCb3g9IjAgMCAzMiAzMiIgZmlsbD0ibm9uZSIgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIj4KPHJlY3Qgd2lkdGg9IjMyIiBoZWlnaHQ9IjMyIiByeD0iOCIgZmlsbD0iIzMzOTZGRiIvPgo8cGF0aCBkPSJNOS42IDEyLjRDMTMuMSA5IDE4LjkgOSAyMi40IDEyLjRMMjIuOSAxMi45QzIzLjEgMTMuMSAyMy4xIDEzLjQgMjIuOSAxMy42TDIxLjQgMTUuMUMyMS4zIDE1LjIgMjEuMSAxNS4yIDIxIDE1LjFMMjAuMyAxNC40QzE4IDEyLjIgMTQgMTIuMiAxMS43IDE0LjRMMTEgMTUuMUMxMC45IDE1LjIgMTAuNyAxNS4yIDEwLjYgMTUuMUw5LjEgMTMuNkM4LjkgMTMuNCA4LjkgMTMuMSA5LjEgMTIuOUw5LjYgMTIuNFpNMjUuMyAxNS4yTDI2LjYgMTYuNUMyNi44IDE2LjcgMjYuOCAxNyAyNi42IDE3LjJMMjAuNyAyMy4xQzIwLjUgMjMuMyAyMC4yIDIzLjMgMjAgMjMuMUwxNS45IDE5QzE1LjggMTguOSAxNS43IDE4LjkgMTUuNiAxOUwxMS41IDIzLjFDMTEuMyAyMy4zIDExIDIzLjMgMTAuOCAyMy4xTDQuOSAxNy4yQzQuNyAxNyA0LjcgMTYuNyA0LjkgMTYuNUw2LjIgMTUuMkM2LjQgMTUgNi43IDE1IDYuOSAxNS4yTDExIDE5LjNDMTEuMSAxOS40IDExLjIgMTkuNCAxMS4zIDE5LjNMMTUuNCAxNS4yQzE1LjYgMTUgMTUuOSAxNSAxNi4xIDE1LjJMMjAuMiAxOS4zQzIwLjMgMTkuNCAyMC40IDE5LjQgMjAuNSAxOS4zTDI0LjYgMTUuMkMyNC44IDE1IDI1LjEgMTUgMjUuMyAxNS4yWiIgZmlsbD0id2hpdGUiLz4KPC9zdmc+Cg==';\n\nimport { SOLANA_CAIP_CHAINS } from './universal-provider';\n\n// Default supported chains\nconst DEFAULT_CHAINS = ['solana:mainnet', 'solana:devnet', 'solana:testnet'] as const;\n\nfunction toCaipChainId(chainId: string): string {\n return SOLANA_CAIP_CHAINS[chainId as keyof typeof SOLANA_CAIP_CHAINS] || chainId;\n}\n\n/**\n * Encode bytes to base64\n */\nfunction bytesToBase64(bytes: Uint8Array): string {\n let binary = '';\n for (let i = 0; i < bytes.length; i++) {\n binary += String.fromCharCode(bytes[i]);\n }\n return btoa(binary);\n}\n\n/**\n * Decode base64 to bytes\n */\nfunction base64ToBytes(base64: string): Uint8Array {\n const binary = atob(base64);\n const bytes = new Uint8Array(binary.length);\n for (let i = 0; i < binary.length; i++) {\n bytes[i] = binary.charCodeAt(i);\n }\n return bytes;\n}\n\n/**\n * Check if a string is likely base58 encoded (vs base64)\n * Base58 doesn't use: 0, O, I, l, +, /, =\n * If any of these are present, it's likely base64\n */\nfunction isLikelyBase58(str: string): boolean {\n // Base64 characters that are NOT in base58\n return !/[0OIl+/=]/.test(str);\n}\n\n/**\n * Decode a transaction string that could be base58 or base64\n * Some wallets (like Backpack) return base58, others return base64\n */\nfunction decodeTransaction(encoded: string): Uint8Array {\n if (isLikelyBase58(encoded)) {\n // Note: getBase58Encoder().encode() takes a base58 string and returns bytes\n // Convert ReadonlyUint8Array to Uint8Array\n const readonlyBytes = getBase58Encoder().encode(encoded);\n return new Uint8Array(readonlyBytes);\n } else {\n return base64ToBytes(encoded);\n }\n}\n\n/**\n * Decode shortvec-encoded length prefix from serialized transaction\n */\nfunction decodeShortVecLength(data: Uint8Array): { length: number; bytesConsumed: number } {\n let length = 0;\n let size = 0;\n\n for (;;) {\n if (size >= data.length) {\n throw new Error('Invalid shortvec encoding: unexpected end of data');\n }\n const byte = data[size];\n length |= (byte & 0x7f) << (size * 7);\n size += 1;\n\n if ((byte & 0x80) === 0) {\n break;\n }\n if (size > 10) {\n throw new Error('Invalid shortvec encoding: length prefix too long');\n }\n }\n\n return { length, bytesConsumed: size };\n}\n\n/**\n * Parse transaction message to find the index of a signer\n */\nfunction findSignerIndex(txBytes: Uint8Array, signerPubkeyBase58: string): number {\n const { length: numSignatures, bytesConsumed: sigCountSize } = decodeShortVecLength(txBytes);\n const messageOffset = sigCountSize + numSignatures * 64;\n const messageBytes = txBytes.subarray(messageOffset);\n\n // Parse message header\n let offset = 0;\n\n // Check for version byte (0x80 = version 0)\n if (messageBytes[0] === 0x80) {\n offset = 1;\n }\n\n // Read header (3 bytes)\n const numSignerAccounts = messageBytes[offset];\n offset += 3;\n\n // Read static accounts array\n const { length: numStaticAccounts, bytesConsumed } = decodeShortVecLength(messageBytes.subarray(offset));\n offset += bytesConsumed;\n\n // Search for the signer pubkey in the static accounts\n const base58Decoder = getBase58Decoder();\n for (let i = 0; i < Math.min(numStaticAccounts, numSignerAccounts); i++) {\n const accountBytes = messageBytes.subarray(offset + i * 32, offset + (i + 1) * 32);\n const accountAddress = base58Decoder.decode(accountBytes);\n if (accountAddress === signerPubkeyBase58) {\n return i;\n }\n }\n\n return -1;\n}\n\n/**\n * Inject a signature into a serialized transaction at the specified signer index\n */\nfunction injectSignature(txBytes: Uint8Array, signerIndex: number, signatureBase58: string): Uint8Array {\n const { bytesConsumed: sigCountSize } = decodeShortVecLength(txBytes);\n\n // Decode signature from base58 to bytes\n const signatureBytes = getBase58Encoder().encode(signatureBase58);\n if (signatureBytes.length !== 64) {\n throw new Error(`Invalid signature length: expected 64 bytes, got ${signatureBytes.length}`);\n }\n\n // Create a copy and inject the signature\n const result = new Uint8Array(txBytes);\n const signatureOffset = sigCountSize + signerIndex * 64;\n result.set(signatureBytes, signatureOffset);\n\n return result;\n}\n\n/**\n * Convert WalletConnect account response to Wallet Standard account\n */\nfunction toWalletAccount(account: WalletConnectSolanaAccount, chains: readonly string[]): WalletAccount {\n const base58Encoder = getBase58Encoder();\n return {\n address: account.pubkey,\n publicKey: base58Encoder.encode(account.pubkey),\n chains: chains as `${string}:${string}`[],\n features: [],\n };\n}\n\n/**\n * Create a Wallet Standard-compatible wallet that uses WalletConnect\n */\nexport function createWalletConnectWallet(config: WalletConnectConfig, transport: WalletConnectTransport): Wallet {\n const chains = (config.defaultChain ? [config.defaultChain] : DEFAULT_CHAINS) as readonly `${string}:${string}`[];\n\n // Function to get the current CAIP chain ID dynamically\n function getCurrentCaipChainId(): string {\n const currentChain = config.getCurrentChain?.() || config.defaultChain || 'solana:mainnet';\n return toCaipChainId(currentChain);\n }\n\n let accounts: WalletAccount[] = [];\n const changeListeners = new Set<(props: { accounts?: readonly WalletAccount[] }) => void>();\n\n function emitChange() {\n changeListeners.forEach(fn => fn({ accounts }));\n }\n\n /**\n * Refresh accounts from the session.\n * Called when transport notifies of session changes.\n */\n function refreshAccountsFromSession(sessionAccounts: string[]): void {\n if (sessionAccounts.length === 0) {\n // Session cleared - emit with empty accounts\n accounts = [];\n emitChange();\n return;\n }\n\n // Convert session accounts to Wallet Standard accounts\n accounts = sessionAccounts.map(pubkey => toWalletAccount({ pubkey }, chains));\n emitChange();\n }\n\n // Subscribe to session changes from the transport and capture unsubscribe function\n let unsubscribeSessionChanged: (() => void) | undefined;\n if (transport.onSessionChanged) {\n const unsubscribe = transport.onSessionChanged(refreshAccountsFromSession);\n // Guard for transports that return void (no-op) - store only if it's a function\n if (typeof unsubscribe === 'function') {\n unsubscribeSessionChanged = unsubscribe;\n }\n }\n\n /**\n * Cleanup function to unsubscribe from session changes\n */\n function cleanupSessionSubscription(): void {\n if (unsubscribeSessionChanged) {\n unsubscribeSessionChanged();\n unsubscribeSessionChanged = undefined; // Clear reference to avoid double-calls\n }\n }\n\n const wallet: Wallet & { cleanup?: () => void } = {\n version: '1.0.0',\n name: 'WalletConnect',\n icon: WALLETCONNECT_ICON,\n chains,\n get accounts() {\n return accounts;\n },\n cleanup: cleanupSessionSubscription,\n features: {\n // Standard connect feature\n 'standard:connect': {\n version: '1.0.0',\n connect: async (input?: { silent?: boolean }) => {\n await transport.connect();\n\n // First, try to get accounts from the session namespaces (most reliable)\n const sessionAccounts = transport.getSessionAccounts();\n\n if (sessionAccounts.length > 0) {\n accounts = sessionAccounts.map(pubkey => toWalletAccount({ pubkey }, chains));\n emitChange();\n return { accounts };\n }\n\n // Fallback: Try RPC methods if session doesn't have accounts\n const method = input?.silent ? 'solana_getAccounts' : 'solana_requestAccounts';\n let result: WalletConnectSolanaAccount[];\n let firstError: unknown;\n\n try {\n result = await transport.request<WalletConnectSolanaAccount[]>({\n method,\n params: {},\n chainId: getCurrentCaipChainId(),\n });\n } catch (error) {\n firstError = error;\n // Fallback to the other method\n try {\n const fallbackMethod =\n method === 'solana_getAccounts' ? 'solana_requestAccounts' : 'solana_getAccounts';\n result = await transport.request<WalletConnectSolanaAccount[]>({\n method: fallbackMethod,\n params: {},\n chainId: getCurrentCaipChainId(),\n });\n } catch (fallbackError) {\n const firstMessage = firstError instanceof Error ? firstError.message : String(firstError);\n const fallbackMessage =\n fallbackError instanceof Error ? fallbackError.message : String(fallbackError);\n const details = [firstMessage, fallbackMessage].filter(Boolean).join(' | ');\n throw new Error(\n `Failed to get accounts from WalletConnect. The wallet may not support Solana accounts.${\n details ? ` (Details: ${details})` : ''\n }`,\n );\n }\n }\n\n // Map to Wallet Standard accounts\n accounts = Array.isArray(result) ? result.map(acc => toWalletAccount(acc, chains)) : [];\n emitChange();\n\n return { accounts };\n },\n },\n\n // Standard disconnect feature\n 'standard:disconnect': {\n version: '1.0.0',\n disconnect: async () => {\n // Unsubscribe from session changes before disconnecting\n cleanupSessionSubscription();\n await transport.disconnect();\n accounts = [];\n emitChange();\n },\n },\n\n // Standard events feature\n 'standard:events': {\n version: '1.0.0',\n on: (event: string, listener: (props: { accounts?: readonly WalletAccount[] }) => void) => {\n if (event !== 'change') return () => {};\n changeListeners.add(listener);\n return () => changeListeners.delete(listener);\n },\n },\n\n // Solana sign message feature\n 'solana:signMessage': {\n version: '1.0.0',\n signMessage: async ({ account, message }: { account: WalletAccount; message: Uint8Array }) => {\n // WalletConnect expects message as base58 string\n const base58Decoder = getBase58Decoder();\n const messageBase58 = base58Decoder.decode(message);\n\n const result = await transport.request<WalletConnectSignMessageResult>({\n method: 'solana_signMessage',\n params: {\n message: messageBase58,\n pubkey: account.address,\n },\n chainId: getCurrentCaipChainId(),\n });\n\n // WalletConnect returns signature as base58 string, convert to bytes\n const signatureBytes = getBase58Encoder().encode(result.signature);\n\n return [{ signature: signatureBytes, signedMessage: message }];\n },\n },\n\n // Solana sign transaction feature\n 'solana:signTransaction': {\n version: '1.0.0',\n signTransaction: async ({\n account,\n transaction,\n }: {\n account: WalletAccount;\n transaction: Uint8Array;\n }) => {\n // WalletConnect expects transaction as base64 string\n const transactionBase64 = bytesToBase64(transaction);\n\n const requestChainId = getCurrentCaipChainId();\n\n const result = await transport.request<WalletConnectSignTransactionResult>({\n method: 'solana_signTransaction',\n params: {\n transaction: transactionBase64,\n },\n chainId: requestChainId,\n });\n\n let signedTransaction: Uint8Array;\n\n if (result.transaction) {\n // Wallet returned the full signed transaction\n signedTransaction = decodeTransaction(result.transaction);\n } else if (result.signature) {\n // Wallet returned only the signature, inject it into the original transaction\n const signerIndex = findSignerIndex(transaction, account.address);\n if (signerIndex < 0) {\n throw new Error('Signer pubkey not found in transaction');\n }\n signedTransaction = injectSignature(transaction, signerIndex, result.signature);\n } else {\n throw new Error('Invalid solana_signTransaction response: no signature or transaction');\n }\n\n return [{ signedTransaction }];\n },\n },\n\n // Solana sign all transactions feature\n 'solana:signAllTransactions': {\n version: '1.0.0',\n signAllTransactions: async ({\n account,\n transactions,\n }: {\n account: WalletAccount;\n transactions: Uint8Array[];\n }) => {\n // WalletConnect expects transactions as base64 strings\n const transactionsBase64 = transactions.map(bytesToBase64);\n\n try {\n const result = await transport.request<WalletConnectSignAllTransactionsResult>({\n method: 'solana_signAllTransactions',\n params: {\n transactions: transactionsBase64,\n },\n chainId: getCurrentCaipChainId(),\n });\n\n // Map back to bytes - could be base58 or base64 depending on wallet\n return result.transactions.map(txEncoded => ({\n signedTransaction: decodeTransaction(txEncoded),\n }));\n } catch (error) {\n // Fallback: sign transactions one by one\n\n const signFeature = wallet.features['solana:signTransaction'] as {\n signTransaction: (args: {\n account: WalletAccount;\n transaction: Uint8Array;\n }) => Promise<{ signedTransaction: Uint8Array }[]>;\n };\n\n const results = await Promise.all(\n transactions.map(tx => signFeature.signTransaction({ account, transaction: tx })),\n );\n\n return results.map(r => ({ signedTransaction: r[0].signedTransaction }));\n }\n },\n },\n\n // Solana sign and send transaction feature\n 'solana:signAndSendTransaction': {\n version: '1.0.0',\n signAndSendTransaction: async ({\n transaction,\n options,\n }: {\n account: WalletAccount;\n transaction: Uint8Array;\n options?: {\n skipPreflight?: boolean;\n preflightCommitment?: string;\n maxRetries?: number;\n minContextSlot?: number;\n };\n }) => {\n // WalletConnect expects transaction as base64 string\n const transactionBase64 = bytesToBase64(transaction);\n\n const result = await transport.request<WalletConnectSignAndSendTransactionResult>({\n method: 'solana_signAndSendTransaction',\n params: {\n transaction: transactionBase64,\n sendOptions: options\n ? {\n skipPreflight: options.skipPreflight,\n preflightCommitment: options.preflightCommitment as\n | 'processed'\n | 'confirmed'\n | 'finalized'\n | undefined,\n maxRetries: options.maxRetries,\n minContextSlot: options.minContextSlot,\n }\n : undefined,\n },\n chainId: getCurrentCaipChainId(),\n });\n\n // Return signature bytes (convert from base58)\n const signatureBytes = getBase58Encoder().encode(result.signature);\n\n return [{ signature: signatureBytes }];\n },\n },\n },\n };\n\n return wallet;\n}\n","/**\n * WalletConnect Registration Helper\n *\n * Registers the WalletConnect wallet shim into the Wallet Standard registry,\n * making it available to ConnectorKit's wallet detection system.\n */\n\nimport type { Wallet } from '@wallet-standard/base';\nimport type { WalletConnectConfig } from '../../../types/walletconnect';\nimport { createWalletConnectWallet } from './create-walletconnect-wallet';\nimport { createWalletConnectTransport } from './universal-provider';\nimport { createLogger } from '../../utils/secure-logger';\n\nconst logger = createLogger('WalletConnectRegistration');\n\n/**\n * Result of registering the WalletConnect wallet\n */\nexport interface WalletConnectRegistration {\n /** The registered wallet instance */\n wallet: Wallet;\n /** Function to unregister the wallet from the registry */\n unregister: () => void;\n}\n\n/**\n * Register a WalletConnect wallet into the Wallet Standard registry\n *\n * This function:\n * 1. Creates a WalletConnect transport adapter\n * 2. Creates a Wallet Standard-compatible wallet shim\n * 3. Registers the wallet with the Wallet Standard registry\n *\n * The wallet will appear in ConnectorKit's wallet list as \"WalletConnect\"\n * and can be selected like any other wallet.\n *\n * @param config - WalletConnect configuration\n * @returns Registration result with wallet and unregister function\n *\n * @example\n * ```typescript\n * const { wallet, unregister } = await registerWalletConnectWallet({\n * projectId: 'your-project-id',\n * metadata: {\n * name: 'My App',\n * description: 'My Solana App',\n * url: 'https://myapp.com',\n * icons: ['https://myapp.com/icon.png'],\n * },\n * onDisplayUri: (uri) => {\n * // Show QR code with this URI\n * },\n * });\n *\n * // Later, to remove from registry:\n * unregister();\n * ```\n */\nexport async function registerWalletConnectWallet(config: WalletConnectConfig): Promise<WalletConnectRegistration> {\n if (typeof window === 'undefined') {\n throw new Error('WalletConnect registration can only be done in a browser environment');\n }\n\n logger.debug('Registering WalletConnect wallet', {\n projectId: config.projectId.substring(0, 8) + '...',\n defaultChain: config.defaultChain,\n });\n\n // Create the transport adapter\n const transport = await createWalletConnectTransport(config);\n\n // Create the Wallet Standard wallet shim\n const wallet = createWalletConnectWallet(config, transport);\n\n // Get the Wallet Standard registry and register the wallet\n const { getWallets } = await import('@wallet-standard/app');\n const wallets = getWallets();\n const unregister = wallets.register(wallet);\n\n logger.info('WalletConnect wallet registered successfully');\n\n return {\n wallet,\n unregister,\n };\n}\n\n/**\n * Check if WalletConnect dependencies are available\n *\n * This function checks if @walletconnect/universal-provider can be imported.\n * Useful for conditionally showing WalletConnect options in UI.\n */\nexport async function isWalletConnectAvailable(): Promise<boolean> {\n if (typeof window === 'undefined') {\n return false;\n }\n\n try {\n await import('@walletconnect/universal-provider');\n return true;\n } catch {\n return false;\n }\n}\n"]}
@@ -1,6 +1,6 @@
1
1
  'use strict';
2
2
 
3
- var chunkULEPN4NL_js = require('./chunk-ULEPN4NL.js');
3
+ var chunkUSIWRRHO_js = require('./chunk-USIWRRHO.js');
4
4
  var chunkBF67LVVM_js = require('./chunk-BF67LVVM.js');
5
5
  var chunkL5FWMNWO_js = require('./chunk-L5FWMNWO.js');
6
6
  var React4 = require('react');
@@ -314,7 +314,7 @@ function useWalletConnectUri() {
314
314
  };
315
315
  }
316
316
  var logger2 = chunkBF67LVVM_js.createLogger("ConnectorProvider");
317
- chunkULEPN4NL_js.installPolyfills();
317
+ chunkUSIWRRHO_js.installPolyfills();
318
318
  var ConnectorContext = React4.createContext(null);
319
319
  ConnectorContext.displayName = "ConnectorContext";
320
320
  function ConnectorProviderInternal({
@@ -325,15 +325,18 @@ function ConnectorProviderInternal({
325
325
  let clientRef = React4.useRef(null), client = React4__default.default.useCallback(() => {
326
326
  if (!clientRef.current)
327
327
  try {
328
- clientRef.current = new chunkULEPN4NL_js.ConnectorClient(config), typeof window < "u" && (window.__connectorClient = clientRef.current), config?.debug && logger2.info("Client initialized successfully");
328
+ clientRef.current = new chunkUSIWRRHO_js.ConnectorClient(config), typeof window < "u" && (window.__connectorClient = clientRef.current), config?.debug && logger2.info("Client initialized successfully");
329
329
  } catch (error) {
330
330
  let err = error;
331
331
  logger2.error("Failed to initialize client", { error: err });
332
332
  let extendedConfig = config;
333
- return extendedConfig?.errorBoundary?.onError && extendedConfig.errorBoundary.onError(err, {
334
- componentStack: "client-initialization",
335
- digest: `constructor-${(/* @__PURE__ */ new Date()).toISOString()}`
336
- }), null;
333
+ if (extendedConfig?.errorBoundary?.onError) {
334
+ let constructorDigest = `constructor-${(/* @__PURE__ */ new Date()).toISOString()}`;
335
+ extendedConfig.errorBoundary.onError(err, {
336
+ componentStack: `client-initialization (${constructorDigest})`
337
+ });
338
+ }
339
+ return null;
337
340
  }
338
341
  return clientRef.current;
339
342
  }, [config])();
@@ -568,7 +571,7 @@ function useCluster() {
568
571
  [client]
569
572
  );
570
573
  return React4.useMemo(() => {
571
- let isMainnet = cluster ? chunkULEPN4NL_js.isMainnetCluster(cluster) : false, isDevnet = cluster ? chunkULEPN4NL_js.isDevnetCluster(cluster) : false, isTestnet = cluster ? chunkULEPN4NL_js.isTestnetCluster(cluster) : false, isLocal = cluster ? chunkULEPN4NL_js.isLocalCluster(cluster) : false, explorerUrl = cluster ? chunkULEPN4NL_js.getClusterExplorerUrl(cluster) : "", type = cluster ? chunkULEPN4NL_js.getClusterType(cluster) : null;
574
+ let isMainnet = cluster ? chunkUSIWRRHO_js.isMainnetCluster(cluster) : false, isDevnet = cluster ? chunkUSIWRRHO_js.isDevnetCluster(cluster) : false, isTestnet = cluster ? chunkUSIWRRHO_js.isTestnetCluster(cluster) : false, isLocal = cluster ? chunkUSIWRRHO_js.isLocalCluster(cluster) : false, explorerUrl = cluster ? chunkUSIWRRHO_js.getClusterExplorerUrl(cluster) : "", type = cluster ? chunkUSIWRRHO_js.getClusterType(cluster) : null;
572
575
  return {
573
576
  cluster,
574
577
  clusters,
@@ -586,7 +589,7 @@ function useAccount() {
586
589
  let { selectedAccount, accounts, connected, selectAccount } = useConnector(), [copied, setCopied] = React4.useState(false), copyTimeoutRef = React4__default.default.useRef(void 0), account = React4.useMemo(
587
590
  () => accounts.find((a) => a.address === selectedAccount) ?? null,
588
591
  [accounts, selectedAccount]
589
- ), formatted = React4.useMemo(() => selectedAccount ? chunkULEPN4NL_js.formatAddress(selectedAccount) : "", [selectedAccount]), copy = React4.useCallback(async () => selectedAccount ? (copyTimeoutRef.current && clearTimeout(copyTimeoutRef.current), await chunkULEPN4NL_js.copyAddressToClipboard(selectedAccount, {
592
+ ), formatted = React4.useMemo(() => selectedAccount ? chunkUSIWRRHO_js.formatAddress(selectedAccount) : "", [selectedAccount]), copy = React4.useCallback(async () => selectedAccount ? (copyTimeoutRef.current && clearTimeout(copyTimeoutRef.current), await chunkUSIWRRHO_js.copyAddressToClipboard(selectedAccount, {
590
593
  onSuccess: () => {
591
594
  setCopied(true), copyTimeoutRef.current = setTimeout(() => setCopied(false), 2e3);
592
595
  }
@@ -616,7 +619,7 @@ function useWalletInfo() {
616
619
  () => wallets.map(
617
620
  (walletInfo) => ({
618
621
  name: walletInfo.wallet.name,
619
- connectorId: chunkULEPN4NL_js.createConnectorId(walletInfo.wallet.name),
622
+ connectorId: chunkUSIWRRHO_js.createConnectorId(walletInfo.wallet.name),
620
623
  icon: walletInfo.wallet.icon,
621
624
  installed: walletInfo.installed,
622
625
  connectable: walletInfo.connectable
@@ -653,7 +656,7 @@ function useTransactionSigner() {
653
656
  let { selectedWallet, selectedAccount, accounts, cluster, connected } = useConnector(), client = useConnectorClient(), account = React4.useMemo(
654
657
  () => accounts.find((a) => a.address === selectedAccount)?.raw ?? null,
655
658
  [accounts, selectedAccount]
656
- ), signer = React4.useMemo(() => !connected || !selectedWallet || !account ? null : chunkULEPN4NL_js.createTransactionSigner({
659
+ ), signer = React4.useMemo(() => !connected || !selectedWallet || !account ? null : chunkUSIWRRHO_js.createTransactionSigner({
657
660
  wallet: selectedWallet,
658
661
  account,
659
662
  cluster: cluster ?? void 0,
@@ -681,7 +684,7 @@ function useTransactionSigner() {
681
684
  function useKitTransactionSigner() {
682
685
  let { signer: connectorSigner, ready } = useTransactionSigner();
683
686
  return {
684
- signer: React4.useMemo(() => connectorSigner ? chunkULEPN4NL_js.createKitTransactionSigner(connectorSigner) : null, [connectorSigner]),
687
+ signer: React4.useMemo(() => connectorSigner ? chunkUSIWRRHO_js.createKitTransactionSigner(connectorSigner) : null, [connectorSigner]),
685
688
  ready
686
689
  };
687
690
  }
@@ -1066,7 +1069,7 @@ function getBalanceQueryKey(rpcUrl, address) {
1066
1069
  }
1067
1070
  var LAMPORTS_PER_SOL2 = 1000000000n;
1068
1071
  function formatTokenAccount(account) {
1069
- let formatted = chunkULEPN4NL_js.formatBigIntBalance(account.amount, account.decimals, {
1072
+ let formatted = chunkUSIWRRHO_js.formatBigIntBalance(account.amount, account.decimals, {
1070
1073
  maxDecimals: Math.min(account.decimals, 6)
1071
1074
  });
1072
1075
  return {
@@ -1110,7 +1113,7 @@ function useBalance(options = {}) {
1110
1113
  refetchIntervalMs: autoRefresh ? refreshInterval : false,
1111
1114
  client: clientOverride,
1112
1115
  select: selectBalance
1113
- }), lamports = data?.lamports ?? 0n, tokens = data?.tokens ?? [], solBalance = React4.useMemo(() => Number(lamports) / Number(LAMPORTS_PER_SOL2), [lamports]), formattedSol = React4.useMemo(() => chunkULEPN4NL_js.formatLamportsToSolSafe(lamports, { maxDecimals: 4, suffix: true }), [lamports]), visibleError = updatedAt ? null : error, refetch = React4.useCallback(
1116
+ }), lamports = data?.lamports ?? 0n, tokens = data?.tokens ?? [], solBalance = React4.useMemo(() => Number(lamports) / Number(LAMPORTS_PER_SOL2), [lamports]), formattedSol = React4.useMemo(() => chunkUSIWRRHO_js.formatLamportsToSolSafe(lamports, { maxDecimals: 4, suffix: true }), [lamports]), visibleError = updatedAt ? null : error, refetch = React4.useCallback(
1114
1117
  async (opts) => {
1115
1118
  await sharedRefetch(opts);
1116
1119
  },
@@ -1579,7 +1582,7 @@ function useTransactions(options = {}) {
1579
1582
  blockTimeNum,
1580
1583
  Number(sig.slot),
1581
1584
  sig.err,
1582
- chunkULEPN4NL_js.getTransactionUrl(String(sig.signature), currentCluster)
1585
+ chunkUSIWRRHO_js.getTransactionUrl(String(sig.signature), currentCluster)
1583
1586
  );
1584
1587
  });
1585
1588
  } else
@@ -1594,7 +1597,7 @@ function useTransactions(options = {}) {
1594
1597
  type: "unknown",
1595
1598
  formattedDate: date,
1596
1599
  formattedTime: time,
1597
- explorerUrl: chunkULEPN4NL_js.getTransactionUrl(String(sig.signature), currentCluster)
1600
+ explorerUrl: chunkUSIWRRHO_js.getTransactionUrl(String(sig.signature), currentCluster)
1598
1601
  };
1599
1602
  });
1600
1603
  let mintsToFetch = [
@@ -1608,7 +1611,7 @@ function useTransactions(options = {}) {
1608
1611
  throwIfAborted(signal);
1609
1612
  let tokenMetadata = await fetchTransactionTokenMetadata(mintsToFetch, {
1610
1613
  signal,
1611
- cluster: chunkULEPN4NL_js.getClusterType(currentCluster)
1614
+ cluster: chunkUSIWRRHO_js.getClusterType(currentCluster)
1612
1615
  });
1613
1616
  tokenMetadata.size > 0 && (newTransactions = newTransactions.map((tx) => {
1614
1617
  let enrichedTx = { ...tx };
@@ -1853,7 +1856,7 @@ async function fetchTokenMetadataHybrid(mints, coingeckoConfig, options) {
1853
1856
  }
1854
1857
  if (!cached.coingeckoId) continue;
1855
1858
  let priceEntry = priceCache.get(cached.coingeckoId);
1856
- !!(priceEntry && now - priceEntry.timestamp < PRICE_CACHE_TTL) || staleCoingeckoIdToMint.set(cached.coingeckoId, mint);
1859
+ priceEntry && now - priceEntry.timestamp < PRICE_CACHE_TTL || staleCoingeckoIdToMint.set(cached.coingeckoId, mint);
1857
1860
  }
1858
1861
  let didUpdate = false, tokenListMetadata = await fetchSolanaTokenListMetadata(mintsNeedingTokenList, {
1859
1862
  timeoutMs: 1e4,
@@ -1888,12 +1891,12 @@ async function fetchTokenMetadataHybrid(mints, coingeckoConfig, options) {
1888
1891
  return didUpdatePrices && options?.onUpdate?.(), didUpdate;
1889
1892
  }
1890
1893
  function formatBalance(amount, decimals) {
1891
- return chunkULEPN4NL_js.formatBigIntBalance(amount, decimals, {
1894
+ return chunkUSIWRRHO_js.formatBigIntBalance(amount, decimals, {
1892
1895
  maxDecimals: Math.min(decimals, 6)
1893
1896
  });
1894
1897
  }
1895
1898
  function formatUsd(amount, decimals, usdPrice) {
1896
- return chunkULEPN4NL_js.formatBigIntUsd(amount, decimals, usdPrice);
1899
+ return chunkUSIWRRHO_js.formatBigIntUsd(amount, decimals, usdPrice);
1897
1900
  }
1898
1901
  function selectTokens(assets, address) {
1899
1902
  return {
@@ -2110,7 +2113,7 @@ function AccountElement({
2110
2113
  variant = "compact",
2111
2114
  render
2112
2115
  }) {
2113
- let { account, connectorId } = useWallet(), connectors = useWalletConnectors(), address = React4__default.default.useMemo(() => account ? String(account) : null, [account]), formatted = React4__default.default.useMemo(() => address ? chunkULEPN4NL_js.formatAddress(address) : "", [address]), connector = React4__default.default.useMemo(() => connectorId ? connectors.find((c) => c.id === connectorId) ?? null : null, [connectors, connectorId]), walletName = connector?.name ?? null, walletIcon = connector?.icon ? connector.icon : null, [copied, setCopied] = React4__default.default.useState(false), copyTimeoutRef = React4__default.default.useRef(void 0), copy = React4__default.default.useCallback(async () => address ? (copyTimeoutRef.current && clearTimeout(copyTimeoutRef.current), await chunkULEPN4NL_js.copyAddressToClipboard(address, {
2116
+ let { account, connectorId } = useWallet(), connectors = useWalletConnectors(), address = React4__default.default.useMemo(() => account ? String(account) : null, [account]), formatted = React4__default.default.useMemo(() => address ? chunkUSIWRRHO_js.formatAddress(address) : "", [address]), connector = React4__default.default.useMemo(() => connectorId ? connectors.find((c) => c.id === connectorId) ?? null : null, [connectors, connectorId]), walletName = connector?.name ?? null, walletIcon = connector?.icon ? connector.icon : null, [copied, setCopied] = React4__default.default.useState(false), copyTimeoutRef = React4__default.default.useRef(void 0), copy = React4__default.default.useCallback(async () => address ? (copyTimeoutRef.current && clearTimeout(copyTimeoutRef.current), await chunkUSIWRRHO_js.copyAddressToClipboard(address, {
2114
2117
  onSuccess: () => {
2115
2118
  setCopied(true), copyTimeoutRef.current = setTimeout(() => setCopied(false), 2e3);
2116
2119
  }
@@ -3309,5 +3312,5 @@ exports.useWalletConnectUri = useWalletConnectUri;
3309
3312
  exports.useWalletConnectors = useWalletConnectors;
3310
3313
  exports.useWalletInfo = useWalletInfo;
3311
3314
  exports.withErrorBoundary = withErrorBoundary;
3312
- //# sourceMappingURL=chunk-B6YBZB6H.js.map
3313
- //# sourceMappingURL=chunk-B6YBZB6H.js.map
3315
+ //# sourceMappingURL=chunk-6UTXGTYX.js.map
3316
+ //# sourceMappingURL=chunk-6UTXGTYX.js.map