@solana/connector 0.2.0 → 0.2.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (79) hide show
  1. package/README.md +11 -11
  2. package/dist/{chunk-HPQ5T32K.mjs → chunk-3623Z2QL.mjs} +4 -4
  3. package/dist/{chunk-HPQ5T32K.mjs.map → chunk-3623Z2QL.mjs.map} +1 -1
  4. package/dist/{chunk-UCISIAOG.mjs → chunk-A7WQ3K75.mjs} +3 -3
  5. package/dist/{chunk-UCISIAOG.mjs.map → chunk-A7WQ3K75.mjs.map} +1 -1
  6. package/dist/{chunk-SITQ4JWM.js → chunk-BF67LVVM.js} +17 -21
  7. package/dist/chunk-BF67LVVM.js.map +1 -0
  8. package/dist/{chunk-RTXUS5KG.mjs → chunk-DFHJYZKZ.mjs} +84 -71
  9. package/dist/chunk-DFHJYZKZ.mjs.map +1 -0
  10. package/dist/chunk-E3DAIOYS.mjs +22 -0
  11. package/dist/chunk-E3DAIOYS.mjs.map +1 -0
  12. package/dist/chunk-FG7HTQTV.mjs +7 -0
  13. package/dist/chunk-FG7HTQTV.mjs.map +1 -0
  14. package/dist/{chunk-BJAVJQLK.js → chunk-I2XX5FUG.js} +6 -6
  15. package/dist/{chunk-BJAVJQLK.js.map → chunk-I2XX5FUG.js.map} +1 -1
  16. package/dist/chunk-L5FWMNWO.js +9 -0
  17. package/dist/chunk-L5FWMNWO.js.map +1 -0
  18. package/dist/{chunk-HN5AJF7F.js → chunk-NLPEO5GT.js} +5 -5
  19. package/dist/{chunk-HN5AJF7F.js.map → chunk-NLPEO5GT.js.map} +1 -1
  20. package/dist/chunk-QST7XLMB.js +26 -0
  21. package/dist/chunk-QST7XLMB.js.map +1 -0
  22. package/dist/{chunk-ZZTY3O4N.mjs → chunk-SJCQ3KZE.mjs} +4 -7
  23. package/dist/chunk-SJCQ3KZE.mjs.map +1 -0
  24. package/dist/{chunk-IDTUFDNB.mjs → chunk-SQ2JEA2M.mjs} +58 -11
  25. package/dist/chunk-SQ2JEA2M.mjs.map +1 -0
  26. package/dist/{chunk-BZ2VBJCZ.js → chunk-TRSJSU33.js} +141 -94
  27. package/dist/chunk-TRSJSU33.js.map +1 -0
  28. package/dist/{chunk-EM4KNOKG.js → chunk-VVLY6QPI.js} +202 -189
  29. package/dist/chunk-VVLY6QPI.js.map +1 -0
  30. package/dist/compat.js +2 -2
  31. package/dist/compat.mjs +1 -1
  32. package/dist/fireblocks-FLKRTJU3.js +67 -0
  33. package/dist/fireblocks-FLKRTJU3.js.map +1 -0
  34. package/dist/fireblocks-KCJV3GEK.mjs +65 -0
  35. package/dist/fireblocks-KCJV3GEK.mjs.map +1 -0
  36. package/dist/headless.d.mts +6 -11
  37. package/dist/headless.d.ts +6 -11
  38. package/dist/headless.js +147 -147
  39. package/dist/headless.mjs +4 -4
  40. package/dist/index.d.mts +1 -1
  41. package/dist/index.d.ts +1 -1
  42. package/dist/index.js +188 -188
  43. package/dist/index.mjs +5 -5
  44. package/dist/privy-6LYDE24Z.mjs +64 -0
  45. package/dist/privy-6LYDE24Z.mjs.map +1 -0
  46. package/dist/privy-ID4YFTKR.js +66 -0
  47. package/dist/privy-ID4YFTKR.js.map +1 -0
  48. package/dist/protocol-G-z1lRqo.d.mts +166 -0
  49. package/dist/protocol-G-z1lRqo.d.ts +166 -0
  50. package/dist/react.d.mts +18 -6
  51. package/dist/react.d.ts +18 -6
  52. package/dist/react.js +49 -49
  53. package/dist/react.mjs +2 -2
  54. package/dist/remote.d.mts +46 -0
  55. package/dist/remote.d.ts +46 -0
  56. package/dist/remote.js +212 -0
  57. package/dist/remote.js.map +1 -0
  58. package/dist/remote.mjs +198 -0
  59. package/dist/remote.mjs.map +1 -0
  60. package/dist/server.d.mts +141 -0
  61. package/dist/server.d.ts +141 -0
  62. package/dist/server.js +189 -0
  63. package/dist/server.js.map +1 -0
  64. package/dist/server.mjs +187 -0
  65. package/dist/server.mjs.map +1 -0
  66. package/dist/{standard-shim-tmnQelaJ.d.ts → standard-shim-Cg6fmjK_.d.ts} +10 -0
  67. package/dist/{standard-shim-CGB88PPO.d.mts → standard-shim-Cz4UNS7t.d.mts} +10 -0
  68. package/dist/{walletconnect-447EY3OJ.js → walletconnect-F2M3PAAN.js} +8 -8
  69. package/dist/{walletconnect-447EY3OJ.js.map → walletconnect-F2M3PAAN.js.map} +1 -1
  70. package/dist/walletconnect-Z6LPGALR.mjs +3 -0
  71. package/dist/{walletconnect-U455PO4I.mjs.map → walletconnect-Z6LPGALR.mjs.map} +1 -1
  72. package/package.json +27 -2
  73. package/dist/chunk-BZ2VBJCZ.js.map +0 -1
  74. package/dist/chunk-EM4KNOKG.js.map +0 -1
  75. package/dist/chunk-IDTUFDNB.mjs.map +0 -1
  76. package/dist/chunk-RTXUS5KG.mjs.map +0 -1
  77. package/dist/chunk-SITQ4JWM.js.map +0 -1
  78. package/dist/chunk-ZZTY3O4N.mjs.map +0 -1
  79. package/dist/walletconnect-U455PO4I.mjs +0 -3
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/lib/kit/constants.ts","../src/lib/kit/rpc.ts","../src/lib/kit/explorer.ts","../src/lib/kit/client.ts","../src/lib/kit/debug.ts","../src/lib/kit/prepare-transaction.ts","../src/lib/errors/wallet-errors.ts","../src/lib/errors/index.ts","../src/lib/kit/signer-utils.ts","../src/lib/kit/signer-factories.ts","../src/lib/kit/signer-integration.ts","../src/lib/utils/secure-logger.ts"],"names":["createSolanaRpc","createSolanaRpcSubscriptions","setTransactionMessageLifetimeUsingBlockhash","assertIsTransactionMessageWithBlockhashLifetime","__publicField","address","getBase58Encoder","getBase58Decoder","message","LOG_LEVELS"],"mappings":"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","file":"chunk-BF67LVVM.js","sourcesContent":["/**\n * @solana/connector - Kit Constants\n *\n * Core Solana constants used throughout the connector.\n * These match the values from @solana/kit ecosystem.\n */\n\n/** 1 billion lamports per SOL */\nexport const LAMPORTS_PER_SOL = 1_000_000_000;\n\n/**\n * Genesis hash for Solana network clusters\n */\nexport const GENESIS_HASH = {\n mainnet: '5eykt4UsFv8P8NJdTREpY1vzqKqZKvdpKuc147dw2N9d',\n devnet: 'EtWTRABZaYq6iMfeYKouRu166VU2xqa1wcaWoxPkrZBG',\n testnet: '4uhcVJyU9pJkvQyS88uRDiswHXSCkY3zQawwpjk2NsNY',\n} as const;\n\n/**\n * Convert lamports to SOL\n * @param lamports - Amount in lamports\n * @returns Amount in SOL\n */\nexport function lamportsToSol(lamports: number | bigint): number {\n return Number(lamports) / LAMPORTS_PER_SOL;\n}\n\n/**\n * Convert SOL to lamports\n * @param sol - Amount in SOL\n * @returns Amount in lamports\n */\nexport function solToLamports(sol: number): bigint {\n return BigInt(Math.floor(sol * LAMPORTS_PER_SOL));\n}\n","/**\n * @solana/connector - Kit RPC Utilities\n *\n * RPC URL helpers for Solana clusters.\n */\n\nimport type { DevnetUrl, MainnetUrl, TestnetUrl } from '@solana/kit';\n\n/** Solana cluster moniker */\nexport type SolanaClusterMoniker = 'devnet' | 'localnet' | 'mainnet' | 'testnet';\n\n/** Localnet URL type */\nexport type LocalnetUrl = string & { '~cluster': 'localnet' };\n\n/** Generic URL type */\nexport type GenericUrl = string & {};\n\n/** Union of all cluster URL types */\nexport type ModifiedClusterUrl = DevnetUrl | GenericUrl | LocalnetUrl | MainnetUrl | TestnetUrl;\n\n/** URL or moniker that can be used to create a Solana client */\nexport type SolanaClientUrlOrMoniker = ModifiedClusterUrl | SolanaClusterMoniker | URL;\n\n/**\n * Helper to create a localnet URL type\n */\nexport function localnet(putativeString: string): LocalnetUrl {\n return putativeString as LocalnetUrl;\n}\n\n/**\n * Get a public Solana RPC endpoint for a cluster based on its moniker\n *\n * Note: These RPC URLs are rate limited and not suitable for production applications.\n * For production, use a dedicated RPC provider like Triton, Helius, QuickNode, or Alchemy.\n *\n * @param cluster - Cluster moniker\n * @returns Public RPC URL for the cluster\n */\nexport function getPublicSolanaRpcUrl(\n cluster: SolanaClusterMoniker | 'mainnet-beta' | 'localhost',\n): ModifiedClusterUrl {\n switch (cluster) {\n case 'devnet':\n return 'https://api.devnet.solana.com' as DevnetUrl;\n case 'testnet':\n return 'https://api.testnet.solana.com' as TestnetUrl;\n case 'mainnet-beta':\n case 'mainnet':\n return 'https://api.mainnet-beta.solana.com' as MainnetUrl;\n case 'localnet':\n case 'localhost':\n return 'http://127.0.0.1:8899' as LocalnetUrl;\n default:\n throw new Error('Invalid cluster moniker');\n }\n}\n\n/**\n * Get the WebSocket URL for a given RPC URL\n *\n * @param rpcUrl - HTTP/HTTPS RPC URL\n * @returns WebSocket URL\n */\nexport function getWebSocketUrl(rpcUrl: string): string {\n const url = new URL(rpcUrl);\n url.protocol = url.protocol.replace('http', 'ws');\n\n // Default WebSocket port for localnet\n if (url.hostname === 'localhost' || url.hostname.startsWith('127')) {\n url.port = '8900';\n }\n\n return url.toString();\n}\n","/**\n * @solana/connector - Kit Explorer Utilities\n *\n * Generate Solana Explorer links for addresses, transactions, and blocks.\n */\n\n/** Cluster type for explorer links */\nexport type ExplorerCluster = 'mainnet' | 'mainnet-beta' | 'devnet' | 'testnet' | 'localnet' | 'localhost';\n\n/** Arguments for generating an explorer link */\nexport type GetExplorerLinkArgs =\n | { address: string; cluster?: ExplorerCluster }\n | { transaction: string; cluster?: ExplorerCluster }\n | { block: string | number; cluster?: ExplorerCluster }\n | { cluster?: ExplorerCluster };\n\n/**\n * Craft a Solana Explorer link on any cluster\n *\n * @param props - Configuration for the explorer link\n * @returns Solana Explorer URL\n *\n * @example\n * ```ts\n * // Transaction link on mainnet\n * getExplorerLink({ transaction: 'abc123...', cluster: 'mainnet' });\n *\n * // Address link on devnet\n * getExplorerLink({ address: 'abc123...', cluster: 'devnet' });\n *\n * // Block link on testnet\n * getExplorerLink({ block: 12345, cluster: 'testnet' });\n * ```\n */\nexport function getExplorerLink(props: GetExplorerLinkArgs = {}): string {\n const url = new URL('https://explorer.solana.com');\n\n // Default to mainnet / mainnet-beta\n let cluster = props.cluster;\n if (!cluster || cluster === 'mainnet') {\n cluster = 'mainnet-beta';\n }\n\n if ('address' in props && props.address) {\n url.pathname = `/address/${props.address}`;\n } else if ('transaction' in props && props.transaction) {\n url.pathname = `/tx/${props.transaction}`;\n } else if ('block' in props && props.block !== undefined) {\n url.pathname = `/block/${props.block}`;\n }\n\n if (cluster !== 'mainnet-beta') {\n if (cluster === 'localnet' || cluster === 'localhost') {\n // localnet technically isn't a cluster, so requires special handling\n url.searchParams.set('cluster', 'custom');\n url.searchParams.set('customUrl', 'http://localhost:8899');\n } else {\n url.searchParams.set('cluster', cluster);\n }\n }\n\n return url.toString();\n}\n","/**\n * @solana/connector - Kit Client Factory\n *\n * Creates a Solana RPC and WebSocket subscriptions client.\n * Replaces gill's createSolanaClient with a kit-based implementation.\n */\n\nimport type {\n DevnetUrl,\n MainnetUrl,\n TestnetUrl,\n Rpc,\n RpcSubscriptions,\n SolanaRpcApi,\n SolanaRpcSubscriptionsApi,\n} from '@solana/kit';\nimport { createSolanaRpc, createSolanaRpcSubscriptions } from '@solana/kit';\n\nimport type { LocalnetUrl, ModifiedClusterUrl, SolanaClientUrlOrMoniker } from './rpc';\nimport { getPublicSolanaRpcUrl } from './rpc';\n\n/**\n * Configuration for creating a Solana RPC client\n */\nexport interface CreateSolanaClientRpcConfig {\n /** Custom port for the RPC endpoint */\n port?: number;\n}\n\n/**\n * Configuration for creating a Solana RPC subscriptions client\n */\nexport interface CreateSolanaClientRpcSubscriptionsConfig {\n /** Custom port for the WebSocket endpoint */\n port?: number;\n}\n\n/**\n * Arguments for creating a Solana client\n */\nexport interface CreateSolanaClientArgs<TClusterUrl extends SolanaClientUrlOrMoniker = string> {\n /** Full RPC URL (for a private RPC endpoint) or the Solana moniker (for a public RPC endpoint) */\n urlOrMoniker: SolanaClientUrlOrMoniker | TClusterUrl;\n /** Configuration used to create the `rpc` client */\n rpcConfig?: CreateSolanaClientRpcConfig;\n /** Configuration used to create the `rpcSubscriptions` client */\n rpcSubscriptionsConfig?: CreateSolanaClientRpcSubscriptionsConfig;\n}\n\n/**\n * A Solana client with RPC and WebSocket subscription capabilities\n */\nexport interface SolanaClient<TClusterUrl extends ModifiedClusterUrl | string = string> {\n /** Used to make RPC calls to your RPC provider */\n rpc: Rpc<SolanaRpcApi>;\n /** Used to make RPC websocket calls to your RPC provider */\n rpcSubscriptions: RpcSubscriptions<SolanaRpcSubscriptionsApi>;\n /** Full RPC URL that was used to create this client */\n urlOrMoniker: SolanaClientUrlOrMoniker | TClusterUrl;\n}\n\n/**\n * Create a Solana `rpc` and `rpcSubscriptions` client\n *\n * @param props - Configuration for the client\n * @returns Solana client with RPC and WebSocket subscription capabilities\n *\n * @example\n * ```ts\n * // Using a cluster moniker\n * const client = createSolanaClient({ urlOrMoniker: 'devnet' });\n *\n * // Using a custom RPC URL\n * const client = createSolanaClient({ urlOrMoniker: 'https://my-rpc.example.com' });\n *\n * // Making RPC calls\n * const balance = await client.rpc.getBalance(address).send();\n * ```\n */\nexport function createSolanaClient(\n props: Omit<CreateSolanaClientArgs<MainnetUrl | 'mainnet'>, 'urlOrMoniker'> & {\n urlOrMoniker: 'mainnet';\n },\n): SolanaClient<MainnetUrl>;\nexport function createSolanaClient(\n props: Omit<CreateSolanaClientArgs<DevnetUrl | 'devnet'>, 'urlOrMoniker'> & {\n urlOrMoniker: 'devnet';\n },\n): SolanaClient<DevnetUrl>;\nexport function createSolanaClient(\n props: Omit<CreateSolanaClientArgs<TestnetUrl | 'testnet'>, 'urlOrMoniker'> & {\n urlOrMoniker: 'testnet';\n },\n): SolanaClient<TestnetUrl>;\nexport function createSolanaClient(\n props: Omit<CreateSolanaClientArgs<LocalnetUrl | 'localnet'>, 'urlOrMoniker'> & {\n urlOrMoniker: 'localnet';\n },\n): SolanaClient<LocalnetUrl>;\nexport function createSolanaClient<TClusterUrl extends ModifiedClusterUrl>(\n props: CreateSolanaClientArgs<TClusterUrl>,\n): SolanaClient<TClusterUrl>;\nexport function createSolanaClient<TCluster extends ModifiedClusterUrl>({\n urlOrMoniker,\n rpcConfig,\n rpcSubscriptionsConfig,\n}: CreateSolanaClientArgs<TCluster>): SolanaClient<TCluster> {\n if (!urlOrMoniker) throw new Error('Cluster url or moniker is required');\n\n let parsedUrl: URL;\n\n // Try to parse as URL first\n if (urlOrMoniker instanceof URL) {\n parsedUrl = urlOrMoniker;\n } else {\n try {\n parsedUrl = new URL(urlOrMoniker.toString());\n } catch {\n // Not a valid URL, try as moniker\n try {\n parsedUrl = new URL(\n getPublicSolanaRpcUrl(urlOrMoniker.toString() as 'mainnet' | 'devnet' | 'testnet' | 'localnet'),\n );\n } catch {\n throw new Error('Invalid URL or cluster moniker');\n }\n }\n }\n\n if (!parsedUrl.protocol.match(/^https?:/i)) {\n throw new Error('Unsupported protocol. Only HTTP and HTTPS are supported');\n }\n\n // Apply custom port if specified\n if (rpcConfig?.port) {\n parsedUrl.port = rpcConfig.port.toString();\n }\n\n const rpcUrl = parsedUrl.toString();\n const rpc = createSolanaRpc(rpcUrl) as Rpc<SolanaRpcApi>;\n\n // Convert HTTP to WS for subscriptions\n parsedUrl.protocol = parsedUrl.protocol.replace('http', 'ws');\n\n // Apply WebSocket port if specified, or use default 8900 for localhost\n if (rpcSubscriptionsConfig?.port) {\n parsedUrl.port = rpcSubscriptionsConfig.port.toString();\n } else if (parsedUrl.hostname === 'localhost' || parsedUrl.hostname.startsWith('127')) {\n parsedUrl.port = '8900';\n }\n\n const rpcSubscriptions = createSolanaRpcSubscriptions(\n parsedUrl.toString(),\n ) as RpcSubscriptions<SolanaRpcSubscriptionsApi>;\n\n return {\n rpc,\n rpcSubscriptions,\n urlOrMoniker: rpcUrl as TCluster,\n };\n}\n","/**\n * @solana/connector - Kit Debug Utilities\n *\n * Simplified debug logging utilities for the connector.\n * Replaces gill's debug system with a connector-specific implementation.\n */\n\nexport type LogLevel = 'debug' | 'info' | 'warn' | 'error';\n\nconst LOG_LEVELS: Record<LogLevel, number> = {\n debug: 0,\n info: 1,\n warn: 2,\n error: 3,\n};\n\ndeclare global {\n /**\n * Whether or not to enable debug mode. When enabled, default log level of `info`\n */\n // eslint-disable-next-line no-var\n var __CONNECTOR_DEBUG__: boolean | undefined;\n /**\n * Set the a desired level of logs to be output in the application\n *\n * - Default: `info`\n * - Options: `debug` | `info` | `warn` | `error`\n */\n // eslint-disable-next-line no-var\n var __CONNECTOR_DEBUG_LEVEL__: LogLevel | undefined;\n}\n\n/**\n * Get the minimum log level from environment or global settings\n */\nfunction getMinLogLevel(): LogLevel {\n if (typeof process !== 'undefined' && process.env?.CONNECTOR_DEBUG_LEVEL) {\n return process.env.CONNECTOR_DEBUG_LEVEL as LogLevel;\n }\n if (\n typeof globalThis !== 'undefined' &&\n (globalThis as typeof globalThis & { __CONNECTOR_DEBUG_LEVEL__?: LogLevel }).__CONNECTOR_DEBUG_LEVEL__\n ) {\n return (globalThis as typeof globalThis & { __CONNECTOR_DEBUG_LEVEL__?: LogLevel }).__CONNECTOR_DEBUG_LEVEL__!;\n }\n if (\n typeof window !== 'undefined' &&\n (window as Window & { __CONNECTOR_DEBUG_LEVEL__?: LogLevel }).__CONNECTOR_DEBUG_LEVEL__\n ) {\n return (window as Window & { __CONNECTOR_DEBUG_LEVEL__?: LogLevel }).__CONNECTOR_DEBUG_LEVEL__!;\n }\n return 'info';\n}\n\n/**\n * Check if the connector debug logger is enabled or not\n *\n * Enable debugging by setting any of the following to `true`:\n * - `process.env.CONNECTOR_DEBUG`\n * - `globalThis.__CONNECTOR_DEBUG__`\n * - `window.__CONNECTOR_DEBUG__`\n */\nexport function isDebugEnabled(): boolean {\n if (typeof process !== 'undefined') {\n if (process.env?.CONNECTOR_DEBUG_LEVEL) return true;\n if (process.env?.CONNECTOR_DEBUG === 'true' || process.env?.CONNECTOR_DEBUG === '1') return true;\n }\n if (typeof globalThis !== 'undefined') {\n if ((globalThis as typeof globalThis & { __CONNECTOR_DEBUG__?: boolean }).__CONNECTOR_DEBUG__ === true) {\n return true;\n }\n if ((globalThis as typeof globalThis & { __CONNECTOR_DEBUG_LEVEL__?: LogLevel }).__CONNECTOR_DEBUG_LEVEL__) {\n return true;\n }\n }\n if (typeof window !== 'undefined') {\n if ((window as Window & { __CONNECTOR_DEBUG__?: boolean }).__CONNECTOR_DEBUG__ === true) {\n return true;\n }\n if ((window as Window & { __CONNECTOR_DEBUG_LEVEL__?: LogLevel }).__CONNECTOR_DEBUG_LEVEL__) {\n return true;\n }\n }\n return false;\n}\n\n/**\n * Log debug messages based on the desired application's logging level.\n *\n * @param message - the message contents to be logged\n * @param level - default: `info` (see: {@link LOG_LEVELS})\n * @param prefix - default: `[Connector]`\n *\n * To enable connector's debug logger, set any of the following to `true`:\n * - `process.env.CONNECTOR_DEBUG`\n * - `globalThis.__CONNECTOR_DEBUG__`\n * - `window.__CONNECTOR_DEBUG__`\n *\n * To set a desired level of logs to be output in the application, set the value of one of the following:\n * - `process.env.CONNECTOR_DEBUG_LEVEL`\n * - `globalThis.__CONNECTOR_DEBUG_LEVEL__`\n * - `window.__CONNECTOR_DEBUG_LEVEL__`\n */\nexport function debug(message: unknown, level: LogLevel = 'info', prefix: string = '[Connector]'): void {\n if (!isDebugEnabled()) return;\n\n if (LOG_LEVELS[level] < LOG_LEVELS[getMinLogLevel()]) return;\n\n const formattedMessage = typeof message === 'string' ? message : JSON.stringify(message, null, 2);\n\n switch (level) {\n case 'debug':\n console.log(prefix, formattedMessage);\n break;\n case 'info':\n console.info(prefix, formattedMessage);\n break;\n case 'warn':\n console.warn(prefix, formattedMessage);\n break;\n case 'error':\n console.error(prefix, formattedMessage);\n break;\n }\n}\n","/**\n * @solana/connector - Kit Transaction Preparation\n *\n * Prepares transactions for sending by setting blockhash.\n * A simplified version that focuses on blockhash management.\n */\n\nimport type {\n GetLatestBlockhashApi,\n Rpc,\n TransactionMessage,\n TransactionMessageWithBlockhashLifetime,\n TransactionMessageWithFeePayer,\n} from '@solana/kit';\nimport {\n assertIsTransactionMessageWithBlockhashLifetime,\n setTransactionMessageLifetimeUsingBlockhash,\n} from '@solana/kit';\n\nimport { debug, isDebugEnabled } from './debug';\n\n/**\n * Transaction message types that can be prepared.\n * Requires both a fee payer and a transaction message.\n */\ntype PrepareCompilableTransactionMessage = TransactionMessage & TransactionMessageWithFeePayer;\n\n/**\n * Configuration for preparing a transaction\n */\nexport interface PrepareTransactionConfig<TMessage extends PrepareCompilableTransactionMessage> {\n /**\n * Transaction to prepare for sending to the blockchain\n */\n transaction: TMessage;\n /**\n * RPC client capable of getting the latest blockhash\n */\n rpc: Rpc<GetLatestBlockhashApi>;\n /**\n * Multiplier applied to the simulated compute unit value obtained from simulation\n * @default 1.1\n * @deprecated Compute unit estimation is not currently supported\n */\n computeUnitLimitMultiplier?: number;\n /**\n * Whether or not you wish to force reset the compute unit limit value (if one is already set)\n * @deprecated Compute unit estimation is not currently supported\n */\n computeUnitLimitReset?: boolean;\n /**\n * Whether or not you wish to force reset the latest blockhash (if one is already set)\n * @default true\n */\n blockhashReset?: boolean;\n}\n\n/**\n * Prepare a Transaction to be signed and sent to the network. Including:\n * - fetching the latest blockhash (if not already set)\n * - (optional) resetting latest blockhash to the most recent\n *\n * Note: Automatic compute unit estimation is not currently supported in this version.\n * You should set compute unit limits manually if needed.\n *\n * @param config - Configuration for transaction preparation\n * @returns Prepared transaction with blockhash lifetime set\n *\n * @example\n * ```ts\n * const prepared = await prepareTransaction({\n * transaction: myTransaction,\n * rpc: client.rpc,\n * });\n * ```\n */\nexport async function prepareTransaction<TMessage extends PrepareCompilableTransactionMessage>(\n config: PrepareTransactionConfig<TMessage>,\n): Promise<TMessage & TransactionMessageWithBlockhashLifetime> {\n // Set config defaults\n const blockhashReset = config.blockhashReset !== false;\n\n let transaction = config.transaction as TMessage & Partial<TransactionMessageWithBlockhashLifetime>;\n\n // Update the latest blockhash\n const hasLifetimeConstraint = 'lifetimeConstraint' in transaction;\n\n if (blockhashReset || !hasLifetimeConstraint) {\n const { value: latestBlockhash } = await config.rpc.getLatestBlockhash().send();\n\n if (!hasLifetimeConstraint) {\n if (isDebugEnabled()) {\n debug('Transaction missing latest blockhash, fetching one.', 'debug');\n }\n transaction = setTransactionMessageLifetimeUsingBlockhash(\n latestBlockhash,\n transaction as TMessage,\n ) as TMessage & TransactionMessageWithBlockhashLifetime;\n } else if (blockhashReset) {\n if (isDebugEnabled()) {\n debug('Auto resetting the latest blockhash.', 'debug');\n }\n transaction = {\n ...transaction,\n lifetimeConstraint: latestBlockhash,\n } as TMessage & TransactionMessageWithBlockhashLifetime;\n }\n }\n\n assertIsTransactionMessageWithBlockhashLifetime(transaction);\n\n return transaction as TMessage & TransactionMessageWithBlockhashLifetime;\n}\n","/**\n * Wallet Error Types - Framework-agnostic error definitions\n *\n * These types are shared between headless and React implementations.\n * They do NOT import React or any TSX modules.\n */\n\n/**\n * Error types specific to wallet connections.\n * Used by error boundaries and headless error handling.\n */\nexport const WalletErrorType = {\n CONNECTION_FAILED: 'CONNECTION_FAILED',\n TRANSACTION_FAILED: 'TRANSACTION_FAILED',\n NETWORK_ERROR: 'NETWORK_ERROR',\n WALLET_NOT_FOUND: 'WALLET_NOT_FOUND',\n USER_REJECTED: 'USER_REJECTED',\n INSUFFICIENT_FUNDS: 'INSUFFICIENT_FUNDS',\n UNKNOWN_ERROR: 'UNKNOWN_ERROR',\n} as const;\n\nexport type WalletErrorType = (typeof WalletErrorType)[keyof typeof WalletErrorType];\n\n/**\n * Extended error interface for wallet-specific errors.\n * Extends the standard Error with wallet context.\n */\nexport interface WalletError extends Error {\n type: WalletErrorType;\n recoverable: boolean;\n context?: Record<string, unknown>;\n retryAction?: () => Promise<void>;\n}\n\n/**\n * Type guard to check if an error is a WalletError\n */\nexport function isWalletError(error: unknown): error is WalletError {\n return (\n error instanceof Error &&\n 'type' in error &&\n typeof (error as WalletError).type === 'string' &&\n Object.values(WalletErrorType).includes((error as WalletError).type as WalletErrorType)\n );\n}\n\n/**\n * Create a WalletError from a standard Error\n */\nexport function createWalletError(\n error: Error,\n type: WalletErrorType,\n recoverable: boolean,\n context?: Record<string, unknown>,\n): WalletError {\n const walletError = error as WalletError;\n walletError.type = type;\n walletError.recoverable = recoverable;\n walletError.context = context;\n return walletError;\n}\n","/**\n * @solana/connector - Unified Error System\n */\n\n// Re-export wallet-specific error types (React-free)\nexport * from './wallet-errors';\n\nexport abstract class ConnectorError extends Error {\n abstract readonly code: string;\n abstract readonly recoverable: boolean;\n readonly context?: Record<string, unknown>;\n readonly originalError?: Error;\n readonly timestamp: string;\n\n constructor(message: string, context?: Record<string, unknown>, originalError?: Error) {\n super(message);\n this.name = this.constructor.name;\n this.context = context;\n this.originalError = originalError;\n this.timestamp = new Date().toISOString();\n\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, this.constructor);\n }\n }\n\n toJSON(): Record<string, unknown> {\n return {\n name: this.name,\n code: this.code,\n message: this.message,\n recoverable: this.recoverable,\n context: this.context,\n timestamp: this.timestamp,\n originalError: this.originalError?.message,\n };\n }\n}\n\nexport class ConnectionError extends ConnectorError {\n readonly code: ConnectionErrorCode;\n readonly recoverable = true;\n\n constructor(code: ConnectionErrorCode, message: string, context?: Record<string, unknown>, originalError?: Error) {\n super(message, context, originalError);\n this.code = code;\n }\n}\n\nexport type ConnectionErrorCode =\n | 'WALLET_NOT_CONNECTED'\n | 'WALLET_NOT_FOUND'\n | 'CONNECTION_FAILED'\n | 'CONNECTION_REJECTED'\n | 'DISCONNECTION_FAILED'\n | 'ACCOUNT_NOT_AVAILABLE'\n | 'RECONNECTION_FAILED';\n\nexport class ValidationError extends ConnectorError {\n readonly code: ValidationErrorCode;\n readonly recoverable = false;\n\n constructor(code: ValidationErrorCode, message: string, context?: Record<string, unknown>, originalError?: Error) {\n super(message, context, originalError);\n this.code = code;\n }\n}\n\nexport type ValidationErrorCode =\n | 'INVALID_TRANSACTION'\n | 'INVALID_MESSAGE'\n | 'INVALID_ADDRESS'\n | 'INVALID_SIGNATURE'\n | 'INVALID_FORMAT'\n | 'UNSUPPORTED_FORMAT'\n | 'VALIDATION_FAILED';\n\nexport class ConfigurationError extends ConnectorError {\n readonly code: ConfigurationErrorCode;\n readonly recoverable = false;\n\n constructor(\n code: ConfigurationErrorCode,\n message: string,\n context?: Record<string, unknown>,\n originalError?: Error,\n ) {\n super(message, context, originalError);\n this.code = code;\n }\n}\n\nexport type ConfigurationErrorCode =\n | 'MISSING_PROVIDER'\n | 'INVALID_CLUSTER'\n | 'CLUSTER_NOT_FOUND'\n | 'INVALID_CONFIG'\n | 'INITIALIZATION_FAILED';\n\nexport class NetworkError extends ConnectorError {\n readonly code: NetworkErrorCode;\n readonly recoverable = true;\n\n constructor(code: NetworkErrorCode, message: string, context?: Record<string, unknown>, originalError?: Error) {\n super(message, context, originalError);\n this.code = code;\n }\n}\n\nexport type NetworkErrorCode =\n | 'RPC_ERROR'\n | 'NETWORK_TIMEOUT'\n | 'NETWORK_UNAVAILABLE'\n | 'TRANSACTION_SIMULATION_FAILED';\n\nexport class TransactionError extends ConnectorError {\n readonly code: TransactionErrorCode;\n readonly recoverable: boolean;\n\n constructor(code: TransactionErrorCode, message: string, context?: Record<string, unknown>, originalError?: Error) {\n super(message, context, originalError);\n this.code = code;\n this.recoverable = ['USER_REJECTED', 'SEND_FAILED', 'SIMULATION_FAILED'].includes(code);\n }\n}\n\nexport type TransactionErrorCode =\n | 'SIGNING_FAILED'\n | 'SEND_FAILED'\n | 'FEATURE_NOT_SUPPORTED'\n | 'USER_REJECTED'\n | 'SIMULATION_FAILED'\n | 'INVALID_TRANSACTION'\n | 'TRANSACTION_EXPIRED';\n\nexport function isConnectorError(error: unknown): error is ConnectorError {\n return error instanceof ConnectorError;\n}\n\nexport function isConnectionError(error: unknown): error is ConnectionError {\n return error instanceof ConnectionError;\n}\n\nexport function isValidationError(error: unknown): error is ValidationError {\n return error instanceof ValidationError;\n}\n\nexport function isConfigurationError(error: unknown): error is ConfigurationError {\n return error instanceof ConfigurationError;\n}\n\nexport function isNetworkError(error: unknown): error is NetworkError {\n return error instanceof NetworkError;\n}\n\nexport function isTransactionError(error: unknown): error is TransactionError {\n return error instanceof TransactionError;\n}\n\nexport const Errors = {\n walletNotConnected: (context?: Record<string, unknown>) =>\n new ConnectionError('WALLET_NOT_CONNECTED', 'No wallet connected', context),\n\n walletNotFound: (walletName?: string) =>\n new ConnectionError('WALLET_NOT_FOUND', `Wallet not found${walletName ? `: ${walletName}` : ''}`, {\n walletName,\n }),\n\n connectionFailed: (originalError?: Error) =>\n new ConnectionError('CONNECTION_FAILED', 'Failed to connect to wallet', undefined, originalError),\n\n accountNotAvailable: (address?: string) =>\n new ConnectionError('ACCOUNT_NOT_AVAILABLE', 'Requested account not available', { address }),\n\n invalidTransaction: (reason: string, context?: Record<string, unknown>) =>\n new ValidationError('INVALID_TRANSACTION', `Invalid transaction: ${reason}`, context),\n\n invalidFormat: (expectedFormat: string, actualFormat?: string) =>\n new ValidationError('INVALID_FORMAT', `Invalid format: expected ${expectedFormat}`, {\n expectedFormat,\n actualFormat,\n }),\n\n unsupportedFormat: (format: string) =>\n new ValidationError('UNSUPPORTED_FORMAT', `Unsupported format: ${format}`, { format }),\n\n missingProvider: (hookName: string) =>\n new ConfigurationError(\n 'MISSING_PROVIDER',\n `${hookName} must be used within ConnectorProvider. Wrap your app with <ConnectorProvider> or <UnifiedProvider>.`,\n { hookName },\n ),\n\n clusterNotFound: (clusterId: string, availableClusters: string[]) =>\n new ConfigurationError(\n 'CLUSTER_NOT_FOUND',\n `Cluster ${clusterId} not found. Available clusters: ${availableClusters.join(', ')}`,\n { clusterId, availableClusters },\n ),\n\n rpcError: (message: string, originalError?: Error) =>\n new NetworkError('RPC_ERROR', message, undefined, originalError),\n\n networkTimeout: () => new NetworkError('NETWORK_TIMEOUT', 'Network request timed out'),\n\n signingFailed: (originalError?: Error) =>\n new TransactionError('SIGNING_FAILED', 'Failed to sign transaction', undefined, originalError),\n\n featureNotSupported: (feature: string) =>\n new TransactionError('FEATURE_NOT_SUPPORTED', `Wallet does not support ${feature}`, { feature }),\n\n userRejected: (operation: string) =>\n new TransactionError('USER_REJECTED', `User rejected ${operation}`, { operation }),\n} as const;\n\nexport function toConnectorError(error: unknown, defaultMessage = 'An unexpected error occurred'): ConnectorError {\n if (isConnectorError(error)) {\n return error;\n }\n\n if (error instanceof Error) {\n const message = error.message.toLowerCase();\n\n if (message.includes('user rejected') || message.includes('user denied')) {\n return Errors.userRejected('transaction');\n }\n\n if (message.includes('wallet not found') || message.includes('not installed')) {\n return Errors.walletNotFound();\n }\n\n if (message.includes('not connected')) {\n return Errors.walletNotConnected();\n }\n\n if (message.includes('network') || message.includes('fetch')) {\n return Errors.rpcError(error.message, error);\n }\n\n if (message.includes('invalid')) {\n return new ValidationError('VALIDATION_FAILED', error.message, undefined, error);\n }\n\n return new TransactionError('SIGNING_FAILED', error.message, undefined, error);\n }\n\n return new TransactionError('SIGNING_FAILED', defaultMessage, { originalError: String(error) });\n}\n\nexport function getUserFriendlyMessage(error: unknown): string {\n if (!isConnectorError(error)) {\n return 'An unexpected error occurred. Please try again.';\n }\n\n const messages: Record<string, string> = {\n WALLET_NOT_CONNECTED: 'Please connect your wallet to continue.',\n WALLET_NOT_FOUND: 'Wallet not found. Please install a supported wallet.',\n CONNECTION_FAILED: 'Failed to connect to wallet. Please try again.',\n USER_REJECTED: 'Transaction was cancelled.',\n FEATURE_NOT_SUPPORTED: 'This wallet does not support this feature.',\n SIGNING_FAILED: 'Failed to sign transaction. Please try again.',\n SEND_FAILED: 'Failed to send transaction. Please try again.',\n INVALID_CLUSTER: 'Invalid network configuration.',\n CLUSTER_NOT_FOUND: 'Network not found.',\n MISSING_PROVIDER: 'Application not properly configured.',\n RPC_ERROR: 'Network error. Please check your connection.',\n NETWORK_TIMEOUT: 'Request timed out. Please try again.',\n };\n\n return messages[error.code] || error.message || 'An error occurred.';\n}\n","import type { Address } from '@solana/addresses';\nimport { getBase58Decoder, getBase58Encoder } from '@solana/codecs';\nimport type { SignatureBytes } from '@solana/keys';\nimport type { SignatureDictionary } from '@solana/signers';\n\nfunction toSignatureBytes(bytes: Uint8Array): SignatureBytes {\n return bytes as SignatureBytes;\n}\n\nexport function detectMessageModification(original: Uint8Array, modified: Uint8Array): boolean {\n if (original.length !== modified.length) {\n return true;\n }\n\n for (let i = 0; i < original.length; i++) {\n if (original[i] !== modified[i]) {\n return true;\n }\n }\n\n return false;\n}\n\nexport function updateSignatureDictionary(\n original: Uint8Array,\n signed: Uint8Array,\n originalSignatures: SignatureDictionary,\n address: Address<string>,\n signature: Uint8Array,\n): SignatureDictionary {\n const wasModified = detectMessageModification(original, signed);\n\n const signatureBytes = signature as unknown as SignatureBytes;\n\n const newSignatures = {} as Record<string, SignatureBytes>;\n newSignatures[address as string] = signatureBytes;\n\n if (wasModified) {\n return newSignatures as SignatureDictionary;\n }\n\n const merged = {\n ...originalSignatures,\n ...newSignatures,\n };\n\n return merged as SignatureDictionary;\n}\n\nexport function freezeSigner<T extends object>(signer: T): Readonly<T> {\n return Object.freeze(signer);\n}\n\nexport function base58ToSignatureBytes(signature: string): SignatureBytes {\n try {\n const bytes = getBase58Encoder().encode(signature);\n if (bytes.length !== 64) {\n throw new Error(`Invalid signature length: expected 64 bytes, got ${bytes.length}`);\n }\n return bytes as SignatureBytes;\n } catch (error) {\n throw new Error(`Failed to decode base58 signature: ${error instanceof Error ? error.message : String(error)}`);\n }\n}\n\nexport function signatureBytesToBase58(bytes: SignatureBytes): string {\n try {\n if (bytes.length !== 64) {\n throw new Error(`Invalid signature length: expected 64 bytes, got ${bytes.length}`);\n }\n return getBase58Decoder().decode(bytes);\n } catch (error) {\n throw new Error(\n `Failed to encode signature to base58: ${error instanceof Error ? error.message : String(error)}`,\n );\n }\n}\n","/**\n * @solana/connector - Kit Signer Factories\n *\n * Framework-agnostic factory functions to create Kit-compatible signers from wallet functions.\n * These factories enable pure Kit integration without React or framework dependencies.\n */\n\nimport type { Address } from '@solana/addresses';\nimport type {\n MessageModifyingSigner,\n TransactionSendingSigner,\n SignableMessage,\n MessageModifyingSignerConfig,\n TransactionSendingSignerConfig,\n} from '@solana/signers';\nimport type { SignatureBytes } from '@solana/keys';\nimport type { Transaction } from '@solana/transactions';\nimport { ValidationError, TransactionError, Errors } from '../errors';\nimport { updateSignatureDictionary, freezeSigner, base58ToSignatureBytes } from './signer-utils';\n\n/**\n * Create a MessageModifyingSigner from a wallet's sign message function\n *\n * This is a pure, framework-agnostic factory function that can be used anywhere.\n * Enables message signing (SIWS, auth) without React.\n *\n * @param walletAddress - The address of the wallet\n * @param signMessageFn - Function to sign a message (from wallet adapter)\n * @returns A frozen MessageModifyingSigner object\n *\n * @example\n * ```typescript\n * import { address } from '@solana/addresses';\n * import { createMessageSignerFromWallet } from '@solana/connector/headless';\n *\n * const signer = createMessageSignerFromWallet(\n * address('...'),\n * async (msg) => await wallet.signMessage(msg)\n * );\n *\n * // Use with Kit message signing\n * import { createSignableMessage } from '@solana/signers';\n * const signed = await signer.modifyAndSignMessages([createSignableMessage(messageBytes)]);\n * ```\n */\nexport function createMessageSignerFromWallet(\n walletAddress: Address<string>,\n signMessageFn: (message: Uint8Array) => Promise<Uint8Array>,\n): MessageModifyingSigner<string> {\n const signer: MessageModifyingSigner<string> = {\n address: walletAddress,\n\n async modifyAndSignMessages(\n messages: readonly SignableMessage[],\n config?: MessageModifyingSignerConfig,\n ): Promise<readonly SignableMessage[]> {\n // Most wallets only support signing one message at a time\n if (messages.length !== 1) {\n throw new ValidationError('INVALID_FORMAT', 'Wallets only support signing one message at a time', {\n receivedCount: messages.length,\n expectedCount: 1,\n });\n }\n\n const [message] = messages;\n const { content, signatures: originalSignatures } = message;\n\n // Handle abort signal if provided\n if (config?.abortSignal?.aborted) {\n throw Errors.userRejected('message signing');\n }\n\n try {\n // Sign the message\n const signature = await signMessageFn(content);\n\n // Update signatures (handle potential message modification)\n // Note: Message content doesn't change in signMessage operations\n const signatures = updateSignatureDictionary(\n content,\n content, // Message content doesn't change in signMessage\n originalSignatures,\n walletAddress,\n signature,\n );\n\n // Return signed message\n return [\n {\n content,\n signatures,\n },\n ];\n } catch (error) {\n // Convert wallet errors to ConnectorKit errors\n if (error instanceof Error) {\n const message = error.message.toLowerCase();\n if (message.includes('user rejected') || message.includes('user denied')) {\n throw Errors.userRejected('message signing');\n }\n throw new TransactionError('SIGNING_FAILED', 'Failed to sign message', undefined, error);\n }\n throw new TransactionError('SIGNING_FAILED', 'Failed to sign message', {\n originalError: String(error),\n });\n }\n },\n };\n\n return freezeSigner(signer);\n}\n\n/**\n * Create a TransactionSendingSigner from a wallet's send transaction function\n *\n * This is a pure, framework-agnostic factory function that can be used anywhere.\n * Enables sign + send in one operation (wallets like Phantom support this).\n *\n * @param walletAddress - The address of the wallet\n * @param chain - The Solana chain identifier (e.g., 'solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1')\n * @param sendTransactionFn - Function to send a transaction (from wallet adapter)\n * @returns A frozen TransactionSendingSigner object\n *\n * @example\n * ```typescript\n * import { address } from '@solana/addresses';\n * import { createTransactionSendingSignerFromWallet } from '@solana/connector/headless';\n *\n * const signer = createTransactionSendingSignerFromWallet(\n * address('...'),\n * 'solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1',\n * async (tx) => await wallet.sendTransaction(tx, connection)\n * );\n *\n * // Use with Kit transaction sending\n * const signatures = await signer.signAndSendTransactions([transaction]);\n * ```\n */\nexport function createTransactionSendingSignerFromWallet(\n walletAddress: Address<string>,\n chain: `solana:${string}`,\n sendTransactionFn: (transaction: Transaction) => Promise<string>,\n): TransactionSendingSigner<string> {\n const signer: TransactionSendingSigner<string> = {\n address: walletAddress,\n\n async signAndSendTransactions(\n transactions: readonly Transaction[],\n config?: TransactionSendingSignerConfig,\n ): Promise<readonly SignatureBytes[]> {\n // Most wallets only support signing one transaction at a time\n if (transactions.length !== 1) {\n throw new ValidationError('INVALID_FORMAT', 'Wallets only support sending one transaction at a time', {\n receivedCount: transactions.length,\n expectedCount: 1,\n });\n }\n\n const [transaction] = transactions;\n\n // Handle abort signal if provided\n if (config?.abortSignal?.aborted) {\n throw Errors.userRejected('transaction sending');\n }\n\n try {\n // Send the transaction and get signature string (base58)\n const signatureString = await sendTransactionFn(transaction);\n\n // Convert base58 signature string to SignatureBytes\n const signatureBytes = base58ToSignatureBytes(signatureString);\n\n return [signatureBytes];\n } catch (error) {\n // Convert wallet errors to ConnectorKit errors\n if (error instanceof Error) {\n const message = error.message.toLowerCase();\n if (message.includes('user rejected') || message.includes('user denied')) {\n throw Errors.userRejected('transaction sending');\n }\n if (message.includes('network') || message.includes('rpc')) {\n throw new TransactionError('SEND_FAILED', 'Failed to send transaction', undefined, error);\n }\n throw new TransactionError('SEND_FAILED', 'Failed to send transaction', undefined, error);\n }\n throw new TransactionError('SEND_FAILED', 'Failed to send transaction', {\n originalError: String(error),\n });\n }\n },\n };\n\n return freezeSigner(signer);\n}\n","/**\n * @solana/connector - Kit Integration Helper\n *\n * High-level helper to create Kit signers from Wallet Standard wallets.\n * Framework-agnostic and works in any JavaScript environment.\n */\n\nimport type { Wallet, WalletAccount } from '@wallet-standard/base';\nimport type { Address } from '@solana/addresses';\nimport type { MessageModifyingSigner, TransactionSendingSigner } from '@solana/signers';\nimport { address } from '@solana/addresses';\nimport type { Connection } from '@solana/web3.js';\nimport type { Transaction } from '@solana/transactions';\nimport { createMessageSignerFromWallet, createTransactionSendingSignerFromWallet } from './signer-factories';\nimport { Errors } from '../errors';\n\n/**\n * Result of creating Kit signers from a Wallet Standard wallet\n */\nexport interface KitSignersFromWallet {\n /** Kit Address type (null if wallet not connected) */\n address: Address<string> | null;\n\n /** Plain address string (null if wallet not connected) */\n addressString: string | null;\n\n /** Message signer (null if wallet doesn't support signing or not connected) */\n messageSigner: MessageModifyingSigner<string> | null;\n\n /** Transaction sending signer (null if wallet doesn't support or not connected) */\n transactionSigner: TransactionSendingSigner<string> | null;\n}\n\n/**\n * Create Kit-compatible signers from a Wallet Standard wallet\n *\n * This function bridges Wallet Standard wallets with modern Kit architecture.\n * It's framework-agnostic and can be used in any JavaScript environment.\n *\n * The network is automatically detected from the connection's RPC endpoint.\n * For custom RPC URLs, you can override detection with the optional `network` parameter.\n *\n * @param wallet - The Wallet Standard wallet instance\n * @param account - The wallet account to use (first account if not provided)\n * @param connection - Optional connection for network detection and transaction sending\n * @param network - Optional network override ('mainnet' | 'devnet' | 'testnet')\n * @returns Kit signers object with address and signer instances\n *\n * @example\n * ```typescript\n * import { Connection } from '@solana/web3.js';\n * import { createKitSignersFromWallet } from '@solana/connector/headless';\n *\n * const connection = new Connection('https://api.devnet.solana.com');\n * const { address, messageSigner, transactionSigner } = createKitSignersFromWallet(\n * wallet,\n * account,\n * connection\n * );\n * ```\n */\nexport function createKitSignersFromWallet(\n wallet: Wallet | null,\n account?: WalletAccount | null,\n connection?: Connection | null,\n network?: 'mainnet' | 'devnet' | 'testnet',\n): KitSignersFromWallet {\n // If no wallet or account, return null values\n if (!wallet || !account) {\n return {\n address: null,\n addressString: null,\n messageSigner: null,\n transactionSigner: null,\n };\n }\n\n // Convert account address to Kit Address type\n let walletAddress: Address<string> | null = null;\n let walletAddressString: string | null = null;\n\n try {\n walletAddress = address(account.address) as Address<string>;\n walletAddressString = account.address;\n } catch (error) {\n // Invalid address format\n return {\n address: null,\n addressString: null,\n messageSigner: null,\n transactionSigner: null,\n };\n }\n\n // Detect network from connection or use provided override\n // Note: Will be enhanced in Phase 2 with chain utilities\n let chain: `solana:${string}` = 'solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1'; // Default to devnet\n\n if (network) {\n // Map network to Wallet Standard chain ID\n const chainMap: Record<string, `solana:${string}`> = {\n mainnet: 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp',\n devnet: 'solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1',\n testnet: 'solana:4uhcVJyU9pJkvQyS88uRDiswHXSCkY3z',\n };\n chain = chainMap[network] || chain;\n } else if (connection) {\n // Detect from connection RPC URL\n const rpcUrl = connection.rpcEndpoint || '';\n if (rpcUrl.includes('mainnet') || rpcUrl.includes('api.mainnet-beta')) {\n chain = 'solana:5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp';\n } else if (rpcUrl.includes('testnet')) {\n chain = 'solana:4uhcVJyU9pJkvQyS88uRDiswHXSCkY3z';\n } else {\n // Default to devnet\n chain = 'solana:EtWTRABZaYq6iMfeYKouRu166VU2xqa1';\n }\n }\n\n // Check wallet features for capabilities\n const features = wallet.features as Record<string, Record<string, (...args: unknown[]) => unknown>>;\n const hasSignMessage = Boolean(features['solana:signMessage']);\n const hasSignAndSendTransaction = Boolean(features['solana:signAndSendTransaction']);\n const hasSendTransaction = Boolean(features['solana:sendTransaction']);\n\n // Create message signer if wallet supports message signing\n const messageSigner: MessageModifyingSigner<string> | null = hasSignMessage\n ? createMessageSignerFromWallet(walletAddress, async (message: Uint8Array) => {\n if (!hasSignMessage) {\n throw Errors.featureNotSupported('message signing');\n }\n\n try {\n const signFeature = features['solana:signMessage'];\n\n // Ensure message is a Uint8Array\n const messageBytes = message instanceof Uint8Array ? message : new Uint8Array(message);\n\n // Wallet Standard returns an array of signed messages\n const results = (await signFeature.signMessage({\n account,\n message: messageBytes,\n ...(chain ? { chain } : {}),\n })) as Array<{ signature: Uint8Array; signedMessage?: Uint8Array }>;\n\n if (!Array.isArray(results) || results.length === 0) {\n throw new Error('Wallet returned empty results array');\n }\n\n const firstResult = results[0];\n if (!firstResult?.signature) {\n throw new Error('Wallet returned no signature in first result');\n }\n\n return firstResult.signature;\n } catch (error) {\n console.error('signMessage error:', error);\n throw error instanceof Error ? error : new Error(String(error));\n }\n })\n : null;\n\n // Create transaction sending signer if wallet supports sending transactions\n // Prefer signAndSendTransaction over sendTransaction as it's more efficient\n const transactionSigner: TransactionSendingSigner<string> | null =\n hasSignAndSendTransaction || hasSendTransaction\n ? createTransactionSendingSignerFromWallet(walletAddress, chain, async (transaction: Transaction) => {\n // Prefer signAndSendTransaction (sign + send in one call)\n if (hasSignAndSendTransaction) {\n try {\n const signAndSendFeature = features['solana:signAndSendTransaction'];\n const result = (await signAndSendFeature.signAndSendTransaction({\n account,\n transactions: [transaction],\n ...(chain ? { chain } : {}),\n ...(connection ? { connection } : {}),\n })) as { signatures: string[] };\n\n // Return first signature (wallet limitation: single transaction)\n return result.signatures[0] || '';\n } catch (error) {\n throw error instanceof Error ? error : new Error(String(error));\n }\n }\n\n // Fallback to sendTransaction (if wallet supports it but not signAndSendTransaction)\n // Note: sendTransaction in Wallet Standard typically just signs, but some wallets\n // may implement it to also send if connection is available\n if (hasSendTransaction) {\n try {\n const sendFeature = features['solana:sendTransaction'];\n const result = (await sendFeature.sendTransaction({\n account,\n transactions: [transaction],\n ...(chain ? { chain } : {}),\n })) as { signatures: string[] };\n\n // Return first signature\n // Note: Actual sending should be handled by the caller or wallet implementation\n return result.signatures[0] || '';\n } catch (error) {\n throw error instanceof Error ? error : new Error(String(error));\n }\n }\n\n throw Errors.featureNotSupported('transaction sending');\n })\n : null;\n\n return {\n address: walletAddress,\n addressString: walletAddressString,\n messageSigner,\n transactionSigner,\n };\n}\n","/**\n * @solana/connector - Secure Logger\n *\n * Production-safe logger that redacts sensitive information\n * Prevents accidental exposure of addresses, keys, and other PII in logs\n *\n * Integrates with the connector's debug system:\n * - Respects `__CONNECTOR_DEBUG__` flag (enable/disable logging globally)\n * - Respects `__CONNECTOR_DEBUG_LEVEL__` (set minimum log level)\n * - Provides sensitive data redaction\n * - Provides unified logging API across the connector\n *\n * Enable connector debug:\n * ```ts\n * window.__CONNECTOR_DEBUG__ = true\n * window.__CONNECTOR_DEBUG_LEVEL__ = 'debug' // or 'info', 'warn', 'error'\n * ```\n */\n\nimport { isDebugEnabled, debug as connectorDebug } from '../kit';\n\nexport type LogLevel = 'debug' | 'info' | 'warn' | 'error';\n\nexport interface SecureLoggerConfig {\n /** Enable logging (defaults to false - use __CONNECTOR_DEBUG__ flag to enable) */\n enabled?: boolean;\n /** Minimum log level to output */\n level?: LogLevel;\n /** Redact sensitive information in logs (defaults to true in production) */\n redactSensitive?: boolean;\n /** Custom prefix for all log messages */\n prefix?: string;\n /** Use connector's debug system for logging (respects __CONNECTOR_DEBUG__ flags) */\n useConnectorDebug?: boolean;\n}\n\n/**\n * Keys that contain sensitive information that should be redacted\n */\nconst SENSITIVE_KEYS = [\n 'address',\n 'publickey',\n 'signature',\n 'account',\n 'rpcurl',\n 'url',\n 'apikey',\n 'api_key',\n 'token',\n 'secret',\n 'password',\n 'private',\n 'seed',\n 'mnemonic',\n];\n\n/**\n * Log levels in order of severity\n */\nconst LOG_LEVELS: Record<LogLevel, number> = {\n debug: 0,\n info: 1,\n warn: 2,\n error: 3,\n};\n\n/**\n * SecureLogger - Production-safe logging with automatic redaction\n *\n * Features:\n * - Integrates with connector's debug system (respects __CONNECTOR_DEBUG__ flags)\n * - Automatic redaction of sensitive data (addresses, keys, URLs)\n * - Configurable log levels (respects __CONNECTOR_DEBUG_LEVEL__)\n * - Environment-aware defaults\n * - Deep object traversal for nested sensitive data\n *\n * @example\n * ```ts\n * // Enable connector debug\n * window.__CONNECTOR_DEBUG__ = true\n * window.__CONNECTOR_DEBUG_LEVEL__ = 'info' // Optional: filter by level\n *\n * const logger = new SecureLogger({ prefix: 'Connector' });\n *\n * logger.debug('User connected', {\n * address: '7xKXtg2CW87d97TXJSDpbD5jBkheTqA83TZRuJosgAsU', // Auto-redacted in prod\n * wallet: 'Phantom'\n * });\n * // Development: \"User connected { address: '7xKX...gAsU', wallet: 'Phantom' }\"\n * // Production: \"User connected { address: '***', wallet: 'Phantom' }\"\n * ```\n */\nexport class SecureLogger {\n private config: Required<SecureLoggerConfig>;\n\n constructor(config: SecureLoggerConfig = {}) {\n const isDevelopment = typeof process !== 'undefined' && process.env?.NODE_ENV === 'development';\n\n this.config = {\n // Default to disabled - logging is opt-in via __CONNECTOR_DEBUG__ or explicit config\n enabled: config.enabled ?? false,\n level: config.level ?? 'debug',\n redactSensitive: config.redactSensitive ?? !isDevelopment,\n prefix: config.prefix ?? 'Connector',\n useConnectorDebug: config.useConnectorDebug ?? true, // Default to using connector's debug system\n };\n }\n\n /**\n * Log debug information (lowest priority)\n */\n debug(message: string, data?: unknown): void {\n this.log('debug', message, data);\n }\n\n /**\n * Log general information\n */\n info(message: string, data?: unknown): void {\n this.log('info', message, data);\n }\n\n /**\n * Log warnings\n */\n warn(message: string, data?: unknown): void {\n this.log('warn', message, data);\n }\n\n /**\n * Log errors (highest priority)\n */\n error(message: string, data?: unknown): void {\n this.log('error', message, data);\n }\n\n /**\n * Internal log method that handles level filtering and redaction\n * Integrates with connector's debug system when enabled\n */\n private log(level: LogLevel, message: string, data?: unknown): void {\n // Check if logging is enabled (either via config or connector's debug system)\n const debugEnabled = this.config.useConnectorDebug ? isDebugEnabled() : false;\n if (!this.config.enabled && !debugEnabled) return;\n\n // Get effective log level (prefer connector's debug level if set)\n let effectiveLevel = this.config.level;\n if (this.config.useConnectorDebug && typeof globalThis !== 'undefined') {\n const connectorLevel = (globalThis as { __CONNECTOR_DEBUG_LEVEL__?: string }).__CONNECTOR_DEBUG_LEVEL__;\n if (connectorLevel && ['debug', 'info', 'warn', 'error'].includes(connectorLevel)) {\n effectiveLevel = connectorLevel as LogLevel;\n }\n }\n\n // Check if this log level should be output\n if (LOG_LEVELS[level] < LOG_LEVELS[effectiveLevel]) {\n return;\n }\n\n // Process data (redact if enabled)\n const processedData = this.config.redactSensitive ? this.redact(data) : data;\n\n // Format message with data\n const fullMessage =\n processedData !== undefined\n ? `${message} ${typeof processedData === 'object' ? JSON.stringify(processedData, null, 2) : processedData}`\n : message;\n\n // Use connector's debug system if enabled, otherwise fall back to console.*\n if (this.config.useConnectorDebug && debugEnabled) {\n connectorDebug(fullMessage, level, this.config.prefix);\n } else {\n const prefix = `[${this.config.prefix}]`;\n switch (level) {\n case 'debug':\n console.debug(prefix, message, processedData !== undefined ? processedData : '');\n break;\n case 'info':\n console.info(prefix, message, processedData !== undefined ? processedData : '');\n break;\n case 'warn':\n console.warn(prefix, message, processedData !== undefined ? processedData : '');\n break;\n case 'error':\n console.error(prefix, message, processedData !== undefined ? processedData : '');\n break;\n }\n }\n }\n\n /**\n * Recursively redact sensitive information from data\n */\n private redact(data: unknown): unknown {\n if (data === null || data === undefined) {\n return data;\n }\n\n // Handle primitives\n if (typeof data !== 'object') {\n return data;\n }\n\n // Handle arrays\n if (Array.isArray(data)) {\n return data.map(item => this.redact(item));\n }\n\n // Handle objects\n const redacted: Record<string, unknown> = {};\n for (const [key, value] of Object.entries(data)) {\n const keyLower = key.toLowerCase();\n\n // Check if this key contains sensitive information\n const isSensitive = SENSITIVE_KEYS.some(sensitiveKey => keyLower.includes(sensitiveKey));\n\n if (isSensitive) {\n redacted[key] = this.maskValue(value);\n } else if (typeof value === 'object' && value !== null) {\n redacted[key] = this.redact(value);\n } else {\n redacted[key] = value;\n }\n }\n\n return redacted;\n }\n\n /**\n * Mask a sensitive value for logging\n * Shows first 4 and last 4 characters for strings longer than 8 chars\n */\n private maskValue(value: unknown): string {\n if (value === null || value === undefined) {\n return '***';\n }\n\n const str = String(value);\n\n // For very short strings, just mask completely\n if (str.length <= 8) {\n return '***';\n }\n\n // For longer strings, show first and last 4 characters\n return `${str.slice(0, 4)}...${str.slice(-4)}`;\n }\n\n /**\n * Update logger configuration at runtime\n */\n updateConfig(config: Partial<SecureLoggerConfig>): void {\n this.config = { ...this.config, ...config };\n }\n\n /**\n * Get current configuration\n */\n getConfig(): Required<SecureLoggerConfig> {\n return { ...this.config };\n }\n}\n\n/**\n * Default logger instance for the connector\n * Automatically configured based on NODE_ENV\n */\nexport const logger = new SecureLogger({\n prefix: 'Connector',\n});\n\n/**\n * Create a logger with a custom prefix\n *\n * @example\n * ```ts\n * const walletLogger = createLogger('WalletDetector');\n * walletLogger.debug('Scanning for wallets...');\n * // Output: [WalletDetector] Scanning for wallets...\n * ```\n */\nexport function createLogger(prefix: string, config?: Omit<SecureLoggerConfig, 'prefix'>): SecureLogger {\n return new SecureLogger({ ...config, prefix });\n}\n"]}
@@ -1,6 +1,7 @@
1
- import { installPolyfills, isMainnetCluster, isDevnetCluster, isTestnetCluster, isLocalCluster, getClusterExplorerUrl, getClusterType, formatAddress, copyAddressToClipboard, createConnectorId, createTransactionSigner, createKitTransactionSigner, formatLamportsToSolSafe, getTransactionUrl, ConnectorClient, formatBigIntBalance, formatBigIntUsd } from './chunk-IDTUFDNB.mjs';
2
- import { createLogger, __publicField, WalletErrorType, createSolanaClient, NetworkError, prepareTransaction, isConnectorError } from './chunk-ZZTY3O4N.mjs';
3
- import React2, { createContext, Component, useTransition, useState, useCallback, useMemo, useRef, useEffect, useContext, useSyncExternalStore } from 'react';
1
+ import { installPolyfills, isMainnetCluster, isDevnetCluster, isTestnetCluster, isLocalCluster, getClusterExplorerUrl, getClusterType, formatAddress, copyAddressToClipboard, createConnectorId, createTransactionSigner, createKitTransactionSigner, formatLamportsToSolSafe, getTransactionUrl, ConnectorClient, formatBigIntBalance, formatBigIntUsd } from './chunk-SQ2JEA2M.mjs';
2
+ import { createLogger, WalletErrorType, createSolanaClient, NetworkError, prepareTransaction, isConnectorError } from './chunk-SJCQ3KZE.mjs';
3
+ import { __publicField } from './chunk-FG7HTQTV.mjs';
4
+ import React4, { createContext, Component, useTransition, useState, useCallback, useMemo, useRef, useEffect, useContext, useSyncExternalStore } from 'react';
4
5
  import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
5
6
  import { address } from '@solana/addresses';
6
7
  import { signature } from '@solana/keys';
@@ -315,7 +316,7 @@ function ConnectorProviderInternal({
315
316
  config,
316
317
  mobile
317
318
  }) {
318
- let clientRef = useRef(null), client = React2.useCallback(() => {
319
+ let clientRef = useRef(null), client = React4.useCallback(() => {
319
320
  if (!clientRef.current)
320
321
  try {
321
322
  clientRef.current = new ConnectorClient(config), typeof window < "u" && (window.__connectorClient = clientRef.current), config?.debug && logger2.info("Client initialized successfully");
@@ -330,7 +331,7 @@ function ConnectorProviderInternal({
330
331
  }
331
332
  return clientRef.current;
332
333
  }, [config])();
333
- return React2.useEffect(() => {
334
+ return React4.useEffect(() => {
334
335
  let currentClient = clientRef.current;
335
336
  if (currentClient) {
336
337
  let privateClient = currentClient;
@@ -339,7 +340,7 @@ function ConnectorProviderInternal({
339
340
  return () => {
340
341
  typeof window < "u" && (window.__connectorClient = void 0), currentClient && typeof currentClient.destroy == "function" && currentClient.destroy();
341
342
  };
342
- }, []), React2.useEffect(() => {
343
+ }, []), React4.useEffect(() => {
343
344
  if (!mobile) return;
344
345
  let cancelled = false;
345
346
  return (async () => {
@@ -394,9 +395,9 @@ function useConnector() {
394
395
  "useConnector must be used within ConnectorProvider. Wrap your app with <ConnectorProvider> or <UnifiedProvider> to use connector hooks."
395
396
  );
396
397
  let { uri: walletConnectUri, clearUri: clearWalletConnectUri } = useWalletConnectUri(), state = useSyncExternalStore(
397
- React2.useCallback((cb) => client.subscribe(cb), [client]),
398
- React2.useCallback(() => client.getSnapshot(), [client]),
399
- React2.useCallback(() => client.getSnapshot(), [client])
398
+ React4.useCallback((cb) => client.subscribe(cb), [client]),
399
+ React4.useCallback(() => client.getSnapshot(), [client]),
400
+ React4.useCallback(() => client.getSnapshot(), [client])
400
401
  ), methods = useMemo(
401
402
  () => ({
402
403
  // Legacy (kept for backwards compatibility)
@@ -576,7 +577,7 @@ function useCluster() {
576
577
  }, [cluster, clusters, setCluster]);
577
578
  }
578
579
  function useAccount() {
579
- let { selectedAccount, accounts, connected, selectAccount } = useConnector(), [copied, setCopied] = useState(false), copyTimeoutRef = React2.useRef(void 0), account = useMemo(
580
+ let { selectedAccount, accounts, connected, selectAccount } = useConnector(), [copied, setCopied] = useState(false), copyTimeoutRef = React4.useRef(void 0), account = useMemo(
580
581
  () => accounts.find((a) => a.address === selectedAccount) ?? null,
581
582
  [accounts, selectedAccount]
582
583
  ), formatted = useMemo(() => selectedAccount ? formatAddress(selectedAccount) : "", [selectedAccount]), copy = useCallback(async () => selectedAccount ? (copyTimeoutRef.current && clearTimeout(copyTimeoutRef.current), await copyAddressToClipboard(selectedAccount, {
@@ -588,7 +589,7 @@ function useAccount() {
588
589
  error: "empty_value" /* EMPTY_VALUE */,
589
590
  errorMessage: "No account selected"
590
591
  }, [selectedAccount]);
591
- return React2.useEffect(() => () => {
592
+ return React4.useEffect(() => () => {
592
593
  copyTimeoutRef.current && clearTimeout(copyTimeoutRef.current);
593
594
  }, []), useMemo(
594
595
  () => ({
@@ -991,13 +992,13 @@ function useWalletAssets(options = {}) {
991
992
  refetchIntervalMs = false,
992
993
  client: clientOverride,
993
994
  select
994
- } = options, { address: address$1, connected } = useAccount(), { client: providerClient } = useSolanaClient(), rpcClient = clientOverride ?? providerClient, key = useMemo(() => {
995
- if (!enabled || !connected || !address$1 || !rpcClient) return null;
995
+ } = options, { account, isConnected: isConnected2 } = useWallet(), address$1 = account ? String(account) : null, { client: providerClient } = useSolanaClient(), rpcClient = clientOverride ?? providerClient, key = useMemo(() => {
996
+ if (!enabled || !isConnected2 || !address$1 || !rpcClient) return null;
996
997
  let rpcUrl = rpcClient.urlOrMoniker instanceof URL ? rpcClient.urlOrMoniker.toString() : String(rpcClient.urlOrMoniker);
997
998
  return getWalletAssetsQueryKey(rpcUrl, address$1);
998
- }, [enabled, connected, address$1, rpcClient]), queryFn = useCallback(
999
+ }, [enabled, isConnected2, address$1, rpcClient]), queryFn = useCallback(
999
1000
  async (signal) => {
1000
- if (!connected || !address$1 || !rpcClient)
1001
+ if (!isConnected2 || !address$1 || !rpcClient)
1001
1002
  return { lamports: 0n, tokenAccounts: [] };
1002
1003
  if (signal.aborted)
1003
1004
  throw new DOMException("Query aborted", "AbortError");
@@ -1013,12 +1014,12 @@ function useWalletAssets(options = {}) {
1013
1014
  if (signal.aborted)
1014
1015
  throw new DOMException("Query aborted", "AbortError");
1015
1016
  let tokenAccounts = [];
1016
- for (let account of tokenAccountsResult.value) {
1017
- let parsed = parseTokenAccount(account, "token");
1017
+ for (let account2 of tokenAccountsResult.value) {
1018
+ let parsed = parseTokenAccount(account2, "token");
1018
1019
  parsed && tokenAccounts.push(parsed);
1019
1020
  }
1020
- for (let account of token2022AccountsResult.value) {
1021
- let parsed = parseTokenAccount(account, "token-2022");
1021
+ for (let account2 of token2022AccountsResult.value) {
1022
+ let parsed = parseTokenAccount(account2, "token-2022");
1022
1023
  parsed && tokenAccounts.push(parsed);
1023
1024
  }
1024
1025
  return {
@@ -1026,7 +1027,7 @@ function useWalletAssets(options = {}) {
1026
1027
  tokenAccounts
1027
1028
  };
1028
1029
  },
1029
- [connected, address$1, rpcClient]
1030
+ [isConnected2, address$1, rpcClient]
1030
1031
  ), { data, error, status, updatedAt, isFetching, refetch, abort } = useSharedQuery(
1031
1032
  key,
1032
1033
  queryFn,
@@ -1484,7 +1485,7 @@ function useTransactions(options = {}) {
1484
1485
  // 5 minutes
1485
1486
  refetchOnMount = "stale",
1486
1487
  client: clientOverride
1487
- } = options, { address: address$1, connected } = useAccount(), { cluster } = useCluster(), { client: providerClient } = useSolanaClient(), connectorClient = useConnectorClient(), [paginatedTransactions, setPaginatedTransactions] = useState([]), [isPaginationLoading, setIsPaginationLoading] = useState(false), [hasMore, setHasMore] = useState(true), beforeSignatureRef = useRef(void 0), rpcClient = clientOverride ?? providerClient, connectorConfig = connectorClient?.getConfig(), imageProxy = connectorConfig?.imageProxy, programLabels = connectorConfig?.programLabels, parseTransaction = useCallback(
1488
+ } = options, { account, isConnected: isConnected2 } = useWallet(), address$1 = useMemo(() => account ? String(account) : null, [account]), { cluster } = useCluster(), { client: providerClient } = useSolanaClient(), connectorClient = useConnectorClient(), [paginatedTransactions, setPaginatedTransactions] = useState([]), [isPaginationLoading, setIsPaginationLoading] = useState(false), [hasMore, setHasMore] = useState(true), beforeSignatureRef = useRef(void 0), rpcClient = clientOverride ?? providerClient, connectorConfig = connectorClient?.getConfig(), imageProxy = connectorConfig?.imageProxy, programLabels = connectorConfig?.programLabels, parseTransaction = useCallback(
1488
1489
  (tx, walletAddress, sig, blockTime, slot, err, explorerUrl) => {
1489
1490
  let { date, time } = formatDate(blockTime), baseInfo = {
1490
1491
  signature: sig,
@@ -1536,10 +1537,10 @@ function useTransactions(options = {}) {
1536
1537
  },
1537
1538
  [programLabels]
1538
1539
  ), key = useMemo(() => {
1539
- if (!enabled || !connected || !address$1 || !rpcClient || !cluster) return null;
1540
+ if (!enabled || !isConnected2 || !address$1 || !rpcClient || !cluster) return null;
1540
1541
  let rpcUrl = rpcClient.urlOrMoniker instanceof URL ? rpcClient.urlOrMoniker.toString() : String(rpcClient.urlOrMoniker);
1541
1542
  return getTransactionsQueryKey({ rpcUrl, address: address$1, clusterId: cluster.id, limit, fetchDetails });
1542
- }, [enabled, connected, address$1, rpcClient, cluster, limit, fetchDetails]);
1543
+ }, [enabled, isConnected2, address$1, rpcClient, cluster, limit, fetchDetails]);
1543
1544
  useEffect(() => {
1544
1545
  beforeSignatureRef.current = void 0, setPaginatedTransactions([]), setIsPaginationLoading(false), setHasMore(true);
1545
1546
  }, [key]);
@@ -1647,13 +1648,13 @@ function useTransactions(options = {}) {
1647
1648
  [rpcClient, address$1, limit, fetchDetails, detailsConcurrency, parseTransaction, imageProxy]
1648
1649
  ), queryFn = useCallback(
1649
1650
  async (signal) => {
1650
- if (!connected || !address$1 || !rpcClient || !cluster)
1651
+ if (!isConnected2 || !address$1 || !rpcClient || !cluster)
1651
1652
  return [];
1652
1653
  throwIfAborted(signal);
1653
1654
  let result = await fetchAndEnrichTransactions(void 0, cluster, signal);
1654
1655
  return throwIfAborted(signal), result.transactions;
1655
1656
  },
1656
- [connected, address$1, rpcClient, cluster, fetchAndEnrichTransactions]
1657
+ [isConnected2, address$1, rpcClient, cluster, fetchAndEnrichTransactions]
1657
1658
  ), {
1658
1659
  data: initialTransactions,
1659
1660
  error,
@@ -1914,7 +1915,7 @@ function useTokens(options = {}) {
1914
1915
  // 5 minutes
1915
1916
  refetchOnMount = "stale",
1916
1917
  client: clientOverride
1917
- } = options, { address, connected } = useAccount(), { type: clusterType } = useCluster(), connectorConfig = useConnectorClient()?.getConfig(), imageProxy = connectorConfig?.imageProxy, coingeckoConfig = connectorConfig?.coingecko, selectFn = useCallback(
1918
+ } = options, { account, isConnected: isConnected2 } = useWallet(), address = useMemo(() => account ? String(account) : null, [account]), { type: clusterType } = useCluster(), connectorConfig = useConnectorClient()?.getConfig(), imageProxy = connectorConfig?.imageProxy, coingeckoConfig = connectorConfig?.coingecko, selectFn = useCallback(
1918
1919
  (assets) => selectTokens(assets, address ?? ""),
1919
1920
  [address]
1920
1921
  ), {
@@ -1943,16 +1944,16 @@ function useTokens(options = {}) {
1943
1944
  isFrozen: false,
1944
1945
  owner: walletAddress
1945
1946
  });
1946
- for (let account of tokenAccounts)
1947
- !includeZeroBalance && account.amount === 0n || result.push({
1948
- mint: account.mint,
1949
- tokenAccount: account.pubkey,
1950
- amount: account.amount,
1951
- decimals: account.decimals,
1952
- formatted: formatBalance(account.amount, account.decimals),
1953
- isFrozen: account.isFrozen,
1954
- owner: account.owner,
1955
- programId: account.programId
1947
+ for (let account2 of tokenAccounts)
1948
+ !includeZeroBalance && account2.amount === 0n || result.push({
1949
+ mint: account2.mint,
1950
+ tokenAccount: account2.pubkey,
1951
+ amount: account2.amount,
1952
+ decimals: account2.decimals,
1953
+ formatted: formatBalance(account2.amount, account2.decimals),
1954
+ isFrozen: account2.isFrozen,
1955
+ owner: account2.owner,
1956
+ programId: account2.programId
1956
1957
  });
1957
1958
  return result;
1958
1959
  }, [lamports, tokenAccounts, walletAddress, includeNativeSol, includeZeroBalance]), mints = useMemo(() => {
@@ -1994,10 +1995,10 @@ function useTokens(options = {}) {
1994
1995
  };
1995
1996
  }).sort(sortByValueDesc) : baseTokens.slice().sort(sortByValueDesc), [baseTokens, fetchMetadata, imageProxy, metadataVersion]), totalAccounts = tokenAccounts.length + (includeNativeSol ? 1 : 0);
1996
1997
  useEffect(() => (startCacheCleanup(), () => stopCacheCleanup()), []);
1997
- let wasConnectedRef = useRef(connected);
1998
+ let wasConnectedRef = useRef(isConnected2);
1998
1999
  useEffect(() => {
1999
- wasConnectedRef.current && !connected && clearTokenCaches(), wasConnectedRef.current = connected;
2000
- }, [connected]);
2000
+ wasConnectedRef.current && !isConnected2 && clearTokenCaches(), wasConnectedRef.current = isConnected2;
2001
+ }, [isConnected2]);
2001
2002
  let visibleError = updatedAt ? null : error, refetch = useCallback(
2002
2003
  async (opts) => {
2003
2004
  await sharedRefetch(opts);
@@ -2026,17 +2027,12 @@ function DisconnectElement({
2026
2027
  onDisconnect,
2027
2028
  render
2028
2029
  }) {
2029
- let { disconnect, connecting } = useConnector(), [disconnecting, setDisconnecting] = React2.useState(false), handleDisconnect = async () => {
2030
- setDisconnecting(true);
2031
- try {
2032
- await disconnect(), onDisconnect?.();
2033
- } finally {
2034
- setDisconnecting(false);
2035
- }
2030
+ let { isConnecting: isConnecting2 } = useWallet(), { disconnect, isDisconnecting } = useDisconnectWallet(), handleDisconnect = async () => {
2031
+ await disconnect(), onDisconnect?.();
2036
2032
  };
2037
2033
  if (render)
2038
- return /* @__PURE__ */ jsx(Fragment, { children: render({ disconnect: handleDisconnect, disconnecting }) });
2039
- let isDisabled = connecting || disconnecting, content = /* @__PURE__ */ jsxs(Fragment, { children: [
2034
+ return /* @__PURE__ */ jsx(Fragment, { children: render({ disconnect: handleDisconnect, disconnecting: isDisconnecting }) });
2035
+ let isDisabled = isConnecting2 || isDisconnecting, content = /* @__PURE__ */ jsxs(Fragment, { children: [
2040
2036
  showIcon && (icon || showIcon && !icon && /* @__PURE__ */ jsxs(
2041
2037
  "svg",
2042
2038
  {
@@ -2068,7 +2064,7 @@ function DisconnectElement({
2068
2064
  disabled: isDisabled,
2069
2065
  "data-slot": "disconnect-element",
2070
2066
  "data-variant": "button",
2071
- "data-disconnecting": disconnecting,
2067
+ "data-disconnecting": isDisconnecting,
2072
2068
  children: content
2073
2069
  }
2074
2070
  ) : variant === "link" ? /* @__PURE__ */ jsx(
@@ -2080,7 +2076,7 @@ function DisconnectElement({
2080
2076
  disabled: isDisabled,
2081
2077
  "data-slot": "disconnect-element",
2082
2078
  "data-variant": "link",
2083
- "data-disconnecting": disconnecting,
2079
+ "data-disconnecting": isDisconnecting,
2084
2080
  children: content
2085
2081
  }
2086
2082
  ) : /* @__PURE__ */ jsx(
@@ -2093,7 +2089,7 @@ function DisconnectElement({
2093
2089
  disabled: isDisabled,
2094
2090
  "data-slot": "disconnect-element",
2095
2091
  "data-variant": "menuitem",
2096
- "data-disconnecting": disconnecting,
2092
+ "data-disconnecting": isDisconnecting,
2097
2093
  children: content
2098
2094
  }
2099
2095
  );
@@ -2108,8 +2104,16 @@ function AccountElement({
2108
2104
  variant = "compact",
2109
2105
  render
2110
2106
  }) {
2111
- let { address, formatted, copy, copied } = useAccount(), { name: walletName, icon: walletIcon } = useWalletInfo();
2112
- if (render)
2107
+ let { account, connectorId } = useWallet(), connectors = useWalletConnectors(), address = React4.useMemo(() => account ? String(account) : null, [account]), formatted = React4.useMemo(() => address ? formatAddress(address) : "", [address]), connector = React4.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.useState(false), copyTimeoutRef = React4.useRef(void 0), copy = React4.useCallback(async () => address ? (copyTimeoutRef.current && clearTimeout(copyTimeoutRef.current), await copyAddressToClipboard(address, {
2108
+ onSuccess: () => {
2109
+ setCopied(true), copyTimeoutRef.current = setTimeout(() => setCopied(false), 2e3);
2110
+ }
2111
+ })) : {
2112
+ success: false
2113
+ }, [address]);
2114
+ if (React4.useEffect(() => () => {
2115
+ copyTimeoutRef.current && clearTimeout(copyTimeoutRef.current);
2116
+ }, []), render)
2113
2117
  return /* @__PURE__ */ jsx(Fragment, { children: render({ address, formatted, walletName, walletIcon, copy, copied }) });
2114
2118
  if (!address) return null;
2115
2119
  let displayAddress = showFullAddress ? address : formatted, handleCopy = async (e) => {
@@ -2270,7 +2274,7 @@ function ClusterElement({
2270
2274
  labels = {},
2271
2275
  render
2272
2276
  }) {
2273
- let { cluster, clusters, setCluster, isMainnet, isDevnet, isTestnet, isLocal } = useCluster(), [isOpen, setIsOpen] = React2.useState(false);
2277
+ let { cluster, clusters, setCluster, isMainnet, isDevnet, isTestnet, isLocal } = useCluster(), [isOpen, setIsOpen] = React4.useState(false);
2274
2278
  if (render)
2275
2279
  return /* @__PURE__ */ jsx(Fragment, { children: render({ cluster, clusters, setCluster, isMainnet, isDevnet, isTestnet, isLocal }) });
2276
2280
  if (!cluster) return null;
@@ -2481,19 +2485,28 @@ function WalletListElement({
2481
2485
  render,
2482
2486
  renderWallet
2483
2487
  }) {
2484
- let { wallets, connecting } = useWalletInfo(), { select } = useConnector(), installedWallets = wallets.filter((w) => w.installed), displayWallets = installedOnly ? installedWallets : wallets, handleSelect = async (walletName) => {
2485
- await select(walletName), onSelect?.(walletName);
2486
- }, handleConnectById = async (connectorId) => {
2487
- let wallet = wallets.find((w) => w.connectorId === connectorId);
2488
+ let connectors = useWalletConnectors(), { isConnecting: isConnectingGlobal } = useWallet(), { connect, isConnecting: isConnectingLocal } = useConnectWallet(), connecting = isConnectingGlobal || isConnectingLocal, wallets = React4.useMemo(
2489
+ () => connectors.map((c) => ({
2490
+ name: c.name,
2491
+ connectorId: c.id,
2492
+ icon: c.icon || void 0,
2493
+ installed: c.ready,
2494
+ connectable: c.ready
2495
+ })),
2496
+ [connectors]
2497
+ ), installedWallets = wallets.filter((w) => w.installed), displayWallets = installedOnly ? installedWallets : wallets, handleSelect = async (walletName) => {
2498
+ let wallet = wallets.find((w) => w.name === walletName);
2488
2499
  if (!wallet) {
2489
- let availableConnectorIds = wallets.map((w) => w.connectorId);
2500
+ let availableWalletNames = wallets.map((w) => w.name);
2490
2501
  console.warn(
2491
- `[WalletListElement] Wallet not found for connectorId: ${connectorId}. Available connectorIds (${availableConnectorIds.length}):`,
2492
- availableConnectorIds
2502
+ `[WalletListElement] Wallet not found for walletName: ${walletName}. Available wallets (${availableWalletNames.length}):`,
2503
+ availableWalletNames
2493
2504
  );
2494
2505
  return;
2495
2506
  }
2496
- await select(wallet.name), onConnect?.(connectorId);
2507
+ await connect(wallet.connectorId), onSelect?.(walletName), onConnect?.(wallet.connectorId);
2508
+ }, handleConnectById = async (connectorId) => {
2509
+ await connect(connectorId), onConnect?.(connectorId);
2497
2510
  };
2498
2511
  if (render)
2499
2512
  return /* @__PURE__ */ jsx(Fragment, { children: render({
@@ -2562,7 +2575,7 @@ function WalletListElement({
2562
2575
  "data-variant": "grid",
2563
2576
  children: displayWallets.map((wallet) => {
2564
2577
  let handleWalletConnect = () => handleConnectById(wallet.connectorId);
2565
- return renderWallet ? /* @__PURE__ */ jsx(React2.Fragment, { children: renderWallet({
2578
+ return renderWallet ? /* @__PURE__ */ jsx(React4.Fragment, { children: renderWallet({
2566
2579
  wallet,
2567
2580
  select: handleWalletConnect,
2568
2581
  connect: handleWalletConnect,
@@ -2573,7 +2586,7 @@ function WalletListElement({
2573
2586
  type: "button",
2574
2587
  className: "ck-wallet-list-item ck-wallet-list-item--grid",
2575
2588
  onClick: handleWalletConnect,
2576
- disabled: connecting || !wallet.installed && installedOnly,
2589
+ disabled: connecting || !wallet.connectable,
2577
2590
  "data-slot": "wallet-list-item",
2578
2591
  "data-wallet": wallet.name,
2579
2592
  "data-connector-id": wallet.connectorId,
@@ -2596,7 +2609,7 @@ function WalletListElement({
2596
2609
  "data-variant": "compact",
2597
2610
  children: displayWallets.map((wallet) => {
2598
2611
  let handleWalletConnect = () => handleConnectById(wallet.connectorId);
2599
- return renderWallet ? /* @__PURE__ */ jsx(React2.Fragment, { children: renderWallet({
2612
+ return renderWallet ? /* @__PURE__ */ jsx(React4.Fragment, { children: renderWallet({
2600
2613
  wallet,
2601
2614
  select: handleWalletConnect,
2602
2615
  connect: handleWalletConnect,
@@ -2607,7 +2620,7 @@ function WalletListElement({
2607
2620
  type: "button",
2608
2621
  className: "ck-wallet-list-item ck-wallet-list-item--compact",
2609
2622
  onClick: handleWalletConnect,
2610
- disabled: connecting || !wallet.installed && installedOnly,
2623
+ disabled: connecting || !wallet.connectable,
2611
2624
  "data-slot": "wallet-list-item",
2612
2625
  "data-wallet": wallet.name,
2613
2626
  "data-connector-id": wallet.connectorId,
@@ -2629,7 +2642,7 @@ function WalletListElement({
2629
2642
  "data-variant": "list",
2630
2643
  children: displayWallets.map((wallet) => {
2631
2644
  let handleWalletConnect = () => handleConnectById(wallet.connectorId);
2632
- return renderWallet ? /* @__PURE__ */ jsx(React2.Fragment, { children: renderWallet({
2645
+ return renderWallet ? /* @__PURE__ */ jsx(React4.Fragment, { children: renderWallet({
2633
2646
  wallet,
2634
2647
  select: handleWalletConnect,
2635
2648
  connect: handleWalletConnect,
@@ -2640,7 +2653,7 @@ function WalletListElement({
2640
2653
  type: "button",
2641
2654
  className: "ck-wallet-list-item ck-wallet-list-item--list",
2642
2655
  onClick: handleWalletConnect,
2643
- disabled: connecting || !wallet.installed && installedOnly,
2656
+ disabled: connecting || !wallet.connectable,
2644
2657
  "data-slot": "wallet-list-item",
2645
2658
  "data-wallet": wallet.name,
2646
2659
  "data-connector-id": wallet.connectorId,
@@ -2716,7 +2729,7 @@ function injectStyles() {
2716
2729
  }
2717
2730
  }
2718
2731
  function SkeletonShine() {
2719
- return React2.useEffect(() => {
2732
+ return React4.useEffect(() => {
2720
2733
  injectStyles();
2721
2734
  }, []), /* @__PURE__ */ jsx("div", { className: "ck-skeleton-shine", "data-slot": "skeleton-shine" });
2722
2735
  }
@@ -3251,5 +3264,5 @@ function TokenListElement({
3251
3264
  TokenListElement.displayName = "TokenListElement";
3252
3265
 
3253
3266
  export { AccountElement, AppProvider, BalanceElement, ClusterElement, ConnectorErrorBoundary, ConnectorProvider, DisconnectElement, SkeletonShine, TokenListElement, TransactionHistoryElement, UnifiedProvider, WalletConnectProvider, WalletListElement, clearSharedQueryCache, clearTokenCaches, getBalanceQueryKey, getTokensQueryKey, getTransactionsQueryKey, getWalletAssetsQueryKey, invalidateSharedQuery, useAccount, useBalance, useCluster, useConnectWallet, useConnector, useConnectorClient, useDisconnectWallet, useGillSolanaClient, useGillTransactionSigner, useKitTransactionSigner, useSolanaClient, useTokens, useTransactionPreparer, useTransactionSigner, useTransactions, useWallet, useWalletConnectUri, useWalletConnectors, useWalletInfo, withErrorBoundary };
3254
- //# sourceMappingURL=chunk-RTXUS5KG.mjs.map
3255
- //# sourceMappingURL=chunk-RTXUS5KG.mjs.map
3267
+ //# sourceMappingURL=chunk-DFHJYZKZ.mjs.map
3268
+ //# sourceMappingURL=chunk-DFHJYZKZ.mjs.map