@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.
- package/dist/{chunk-WPDCSFX2.mjs → chunk-26SWXQP6.mjs} +11 -8
- package/dist/chunk-26SWXQP6.mjs.map +1 -0
- package/dist/{chunk-NLPEO5GT.js → chunk-5MA4YO43.js} +3 -3
- package/dist/chunk-5MA4YO43.js.map +1 -0
- package/dist/{chunk-B6YBZB6H.js → chunk-6UTXGTYX.js} +26 -23
- package/dist/chunk-6UTXGTYX.js.map +1 -0
- package/dist/{chunk-X2X5TFXS.js → chunk-7DATF5NN.js} +4 -4
- package/dist/{chunk-X2X5TFXS.js.map → chunk-7DATF5NN.js.map} +1 -1
- package/dist/{chunk-E3DAIOYS.mjs → chunk-GM3PZ3WK.mjs} +11 -6
- package/dist/chunk-GM3PZ3WK.mjs.map +1 -0
- package/dist/{chunk-QST7XLMB.js → chunk-PNZYYZZS.js} +11 -6
- package/dist/chunk-PNZYYZZS.js.map +1 -0
- package/dist/{chunk-UOML5ULB.mjs → chunk-PP7GI6BR.mjs} +3 -3
- package/dist/{chunk-UOML5ULB.mjs.map → chunk-PP7GI6BR.mjs.map} +1 -1
- package/dist/{chunk-DFKGCW7K.mjs → chunk-STJOIQUF.mjs} +35 -8
- package/dist/chunk-STJOIQUF.mjs.map +1 -0
- package/dist/{chunk-ULEPN4NL.js → chunk-USIWRRHO.js} +34 -7
- package/dist/chunk-USIWRRHO.js.map +1 -0
- package/dist/{chunk-A7WQ3K75.mjs → chunk-ZBPAQUIP.mjs} +3 -3
- package/dist/chunk-ZBPAQUIP.mjs.map +1 -0
- package/dist/compat.d.mts +1 -1
- package/dist/compat.d.ts +1 -1
- package/dist/headless.d.mts +5 -6
- package/dist/headless.d.ts +5 -6
- package/dist/headless.js +113 -113
- package/dist/headless.mjs +3 -3
- package/dist/index.d.mts +2 -3
- package/dist/index.d.ts +2 -3
- package/dist/index.js +154 -154
- package/dist/index.mjs +4 -4
- package/dist/{protocol-G-z1lRqo.d.mts → protocol-nWSt9TTV.d.mts} +1 -1
- package/dist/{protocol-G-z1lRqo.d.ts → protocol-nWSt9TTV.d.ts} +1 -1
- package/dist/react.d.mts +23 -18
- package/dist/react.d.ts +23 -18
- package/dist/react.js +49 -49
- package/dist/react.mjs +2 -2
- package/dist/remote.d.mts +2 -2
- package/dist/remote.d.ts +2 -2
- package/dist/remote.js +13 -13
- package/dist/remote.mjs +2 -2
- package/dist/server.d.mts +1 -1
- package/dist/server.d.ts +1 -1
- package/dist/server.js +13 -10
- package/dist/server.js.map +1 -1
- package/dist/server.mjs +5 -2
- package/dist/server.mjs.map +1 -1
- package/dist/{standard-shim-BB0Lkg_C.d.ts → standard-shim-BK2nn2ZT.d.ts} +15 -8
- package/dist/{standard-shim-n5phZB1d.d.mts → standard-shim-DSMKHCxD.d.mts} +15 -8
- package/dist/{transaction-signer-7NaYmP5w.d.ts → transaction-signer-B3eCsMfI.d.mts} +1 -1
- package/dist/{transaction-signer-7NaYmP5w.d.mts → transaction-signer-B3eCsMfI.d.ts} +1 -1
- package/dist/{walletconnect-F2M3PAAN.js → walletconnect-FFPQ6PDH.js} +8 -8
- package/dist/{walletconnect-F2M3PAAN.js.map → walletconnect-FFPQ6PDH.js.map} +1 -1
- package/dist/walletconnect-HMQQB3YM.mjs +3 -0
- package/dist/{walletconnect-Z6LPGALR.mjs.map → walletconnect-HMQQB3YM.mjs.map} +1 -1
- package/package.json +40 -31
- package/dist/chunk-A7WQ3K75.mjs.map +0 -1
- package/dist/chunk-B6YBZB6H.js.map +0 -1
- package/dist/chunk-DFKGCW7K.mjs.map +0 -1
- package/dist/chunk-E3DAIOYS.mjs.map +0 -1
- package/dist/chunk-NLPEO5GT.js.map +0 -1
- package/dist/chunk-QST7XLMB.js.map +0 -1
- package/dist/chunk-ULEPN4NL.js.map +0 -1
- package/dist/chunk-WPDCSFX2.mjs.map +0 -1
- 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-
|
|
507
|
-
//# sourceMappingURL=chunk-
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
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 ?
|
|
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 ?
|
|
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:
|
|
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 :
|
|
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 ?
|
|
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 =
|
|
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(() =>
|
|
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
|
-
|
|
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:
|
|
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:
|
|
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
|
-
|
|
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
|
|
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
|
|
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 ?
|
|
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-
|
|
3313
|
-
//# sourceMappingURL=chunk-
|
|
3315
|
+
//# sourceMappingURL=chunk-6UTXGTYX.js.map
|
|
3316
|
+
//# sourceMappingURL=chunk-6UTXGTYX.js.map
|