@solana/connector 0.1.4 → 0.1.5
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/README.md +236 -0
- package/dist/{chunk-U64YZRJL.mjs → chunk-3STZXVXD.mjs} +254 -53
- package/dist/chunk-3STZXVXD.mjs.map +1 -0
- package/dist/{chunk-RIQH5W7D.js → chunk-I64FD2EH.js} +4 -3
- package/dist/chunk-I64FD2EH.js.map +1 -0
- package/dist/{chunk-CLXM6UEE.js → chunk-JUZVCBAI.js} +91 -85
- package/dist/chunk-JUZVCBAI.js.map +1 -0
- package/dist/{chunk-D6PZY5G6.js → chunk-NQXK7PGX.js} +30 -26
- package/dist/chunk-NQXK7PGX.js.map +1 -0
- package/dist/{chunk-N3Q2J2FG.mjs → chunk-QKVL45F6.mjs} +10 -6
- package/dist/chunk-QKVL45F6.mjs.map +1 -0
- package/dist/{chunk-P5MWBDFG.mjs → chunk-QL3IT3TS.mjs} +4 -3
- package/dist/chunk-QL3IT3TS.mjs.map +1 -0
- package/dist/{chunk-LUZWUZ5N.js → chunk-ULUYX23Q.js} +268 -67
- package/dist/chunk-ULUYX23Q.js.map +1 -0
- package/dist/{chunk-YTCSTE3Q.mjs → chunk-VMSZJPR5.mjs} +10 -4
- package/dist/chunk-VMSZJPR5.mjs.map +1 -0
- package/dist/compat.js +3 -3
- package/dist/compat.mjs +1 -1
- package/dist/headless.d.mts +2 -2
- package/dist/headless.d.ts +2 -2
- package/dist/headless.js +120 -120
- package/dist/headless.mjs +3 -3
- package/dist/index.d.mts +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.js +147 -147
- package/dist/index.mjs +4 -4
- package/dist/react.d.mts +4 -4
- package/dist/react.d.ts +4 -4
- package/dist/react.js +28 -28
- package/dist/react.mjs +2 -2
- package/dist/{wallet-standard-shim-DC_Z7DS-.d.ts → wallet-standard-shim--YcrQNRt.d.ts} +83 -0
- package/dist/{wallet-standard-shim-Cp4vF4oo.d.mts → wallet-standard-shim-Dx7H8Ctf.d.mts} +83 -0
- package/package.json +1 -1
- package/dist/chunk-CLXM6UEE.js.map +0 -1
- package/dist/chunk-D6PZY5G6.js.map +0 -1
- package/dist/chunk-LUZWUZ5N.js.map +0 -1
- package/dist/chunk-N3Q2J2FG.mjs.map +0 -1
- package/dist/chunk-P5MWBDFG.mjs.map +0 -1
- package/dist/chunk-RIQH5W7D.js.map +0 -1
- package/dist/chunk-U64YZRJL.mjs.map +0 -1
- package/dist/chunk-YTCSTE3Q.mjs.map +0 -1
|
@@ -148,7 +148,8 @@ var SENSITIVE_KEYS = [
|
|
|
148
148
|
__publicField(this, "config");
|
|
149
149
|
let isDevelopment = typeof process < "u" && process.env?.NODE_ENV === "development";
|
|
150
150
|
this.config = {
|
|
151
|
-
|
|
151
|
+
// Default to disabled - logging is opt-in via __CONNECTOR_DEBUG__ or explicit config
|
|
152
|
+
enabled: config.enabled ?? false,
|
|
152
153
|
level: config.level ?? "debug",
|
|
153
154
|
redactSensitive: config.redactSensitive ?? !isDevelopment,
|
|
154
155
|
prefix: config.prefix ?? "Connector",
|
|
@@ -307,5 +308,5 @@ exports.lamportsToSol = lamportsToSol;
|
|
|
307
308
|
exports.prepareTransaction = prepareTransaction;
|
|
308
309
|
exports.prepareTransactionForWallet = prepareTransactionForWallet;
|
|
309
310
|
exports.solToLamports = solToLamports;
|
|
310
|
-
//# sourceMappingURL=chunk-
|
|
311
|
-
//# sourceMappingURL=chunk-
|
|
311
|
+
//# sourceMappingURL=chunk-I64FD2EH.js.map
|
|
312
|
+
//# sourceMappingURL=chunk-I64FD2EH.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../src/lib/kit-utils/constants.ts","../src/lib/kit-utils/rpc.ts","../src/lib/kit-utils/explorer.ts","../src/lib/kit-utils/client.ts","../src/lib/kit-utils/debug.ts","../src/lib/kit-utils/prepare-transaction.ts","../src/lib/utils/secure-logger.ts","../src/utils/transaction-format.ts"],"names":["createSolanaRpc","createSolanaRpcSubscriptions","setTransactionMessageLifetimeUsingBlockhash","assertIsTransactionMessageWithBlockhashLifetime","LOG_LEVELS"],"mappings":"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","file":"chunk-I64FD2EH.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 * @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-utils';\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","/**\n * Transaction Format Utilities\n *\n * Utilities for detecting and converting between different transaction formats:\n * - web3.js Transaction/VersionedTransaction objects\n * - Serialized Uint8Array (Wallet Standard format)\n * - Other TypedArray formats\n *\n * Note: Uses dynamic imports for @solana/web3.js to avoid bundling it\n * since it's only needed for the compat layer.\n */\n\nimport type { Transaction, VersionedTransaction } from '@solana/web3.js';\nimport type { SolanaTransaction } from '../types/transactions';\n\n/**\n * Check if a value is a web3.js Transaction or VersionedTransaction object\n *\n * @param tx - Value to check\n * @returns True if it's a web3.js transaction object\n */\nexport function isWeb3jsTransaction(tx: unknown): tx is Transaction | VersionedTransaction {\n // Duck-typing: if it has a serialize method, it's likely a web3.js transaction\n return tx !== null && typeof tx === 'object' && 'serialize' in tx && typeof tx.serialize === 'function';\n}\n\n/**\n * Serialize a transaction to Uint8Array format (required for Wallet Standard)\n *\n * @param tx - Transaction to serialize (web3.js object, Uint8Array, or TypedArray)\n * @returns Serialized transaction bytes\n * @throws Error if transaction format is unsupported\n */\nexport function serializeTransaction(tx: SolanaTransaction): Uint8Array {\n // web3.js Transaction/VersionedTransaction object\n if (isWeb3jsTransaction(tx)) {\n return tx.serialize({\n requireAllSignatures: false,\n verifySignatures: false,\n });\n }\n\n // Already serialized as Uint8Array\n if (tx instanceof Uint8Array) {\n return tx;\n }\n\n // Other TypedArray format\n if (ArrayBuffer.isView(tx)) {\n return new Uint8Array(tx.buffer, tx.byteOffset, tx.byteLength);\n }\n\n throw new Error('Unsupported transaction format - must be Transaction, VersionedTransaction, or Uint8Array');\n}\n\n/**\n * Check if transaction bytes represent a legacy transaction\n * Legacy transactions have high bit = 0, versioned have high bit = 1\n *\n * @param bytes - Serialized transaction bytes\n * @returns True if legacy transaction\n */\nfunction isLegacyTransaction(bytes: Uint8Array): boolean {\n if (bytes.length === 0) return false;\n // High bit of first byte: 0 = legacy, 1 = versioned\n return (bytes[0] & 0x80) === 0;\n}\n\n/**\n * Deserialize bytes to a web3.js Transaction or VersionedTransaction object\n * Uses dynamic import to avoid bundling @solana/web3.js\n * Automatically detects legacy vs versioned format\n *\n * @param bytes - Serialized transaction bytes\n * @returns Transaction or VersionedTransaction object\n */\nexport async function deserializeToWeb3jsTransaction(bytes: Uint8Array): Promise<Transaction | VersionedTransaction> {\n if (isLegacyTransaction(bytes)) {\n // Legacy transaction - use Transaction.deserialize to preserve legacy-only fields\n const { Transaction } = await import('@solana/web3.js');\n return Transaction.from(bytes);\n } else {\n // Versioned transaction\n const { VersionedTransaction } = await import('@solana/web3.js');\n return VersionedTransaction.deserialize(bytes);\n }\n}\n\n/**\n * Smart converter that preserves the original format\n * Converts to Wallet Standard format (Uint8Array) and tracks original type\n *\n * @param tx - Transaction in any supported format\n * @returns Object with serialized bytes and format flag\n */\nexport function prepareTransactionForWallet(tx: SolanaTransaction): { serialized: Uint8Array; wasWeb3js: boolean } {\n const wasWeb3js = isWeb3jsTransaction(tx);\n const serialized = serializeTransaction(tx);\n return { serialized, wasWeb3js };\n}\n\n/**\n * Convert signed transaction bytes back to original format if needed\n *\n * @param signedBytes - Signed transaction as Uint8Array\n * @param wasWeb3js - Whether the original was a web3.js object\n * @returns Transaction in appropriate format (async if conversion needed)\n * Returns Transaction for legacy, VersionedTransaction for versioned, or Uint8Array if not web3js\n */\nexport async function convertSignedTransaction(\n signedBytes: Uint8Array,\n wasWeb3js: boolean,\n): Promise<Transaction | VersionedTransaction | Uint8Array> {\n if (wasWeb3js) {\n return await deserializeToWeb3jsTransaction(signedBytes);\n }\n return signedBytes;\n}\n"]}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var chunkI64FD2EH_js = require('./chunk-I64FD2EH.js');
|
|
4
4
|
var react = require('react');
|
|
5
5
|
var jsxRuntime = require('react/jsx-runtime');
|
|
6
6
|
var webcryptoEd25519Polyfill = require('@solana/webcrypto-ed25519-polyfill');
|
|
@@ -55,9 +55,9 @@ function getWalletsRegistry() {
|
|
|
55
55
|
var ConnectorError = class extends Error {
|
|
56
56
|
constructor(message, context, originalError) {
|
|
57
57
|
super(message);
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
58
|
+
chunkI64FD2EH_js.__publicField(this, "context");
|
|
59
|
+
chunkI64FD2EH_js.__publicField(this, "originalError");
|
|
60
|
+
chunkI64FD2EH_js.__publicField(this, "timestamp");
|
|
61
61
|
this.name = this.constructor.name, this.context = context, this.originalError = originalError, this.timestamp = (/* @__PURE__ */ new Date()).toISOString(), Error.captureStackTrace && Error.captureStackTrace(this, this.constructor);
|
|
62
62
|
}
|
|
63
63
|
toJSON() {
|
|
@@ -74,36 +74,36 @@ var ConnectorError = class extends Error {
|
|
|
74
74
|
}, ConnectionError = class extends ConnectorError {
|
|
75
75
|
constructor(code, message, context, originalError) {
|
|
76
76
|
super(message, context, originalError);
|
|
77
|
-
|
|
78
|
-
|
|
77
|
+
chunkI64FD2EH_js.__publicField(this, "code");
|
|
78
|
+
chunkI64FD2EH_js.__publicField(this, "recoverable", true);
|
|
79
79
|
this.code = code;
|
|
80
80
|
}
|
|
81
81
|
}, ValidationError = class extends ConnectorError {
|
|
82
82
|
constructor(code, message, context, originalError) {
|
|
83
83
|
super(message, context, originalError);
|
|
84
|
-
|
|
85
|
-
|
|
84
|
+
chunkI64FD2EH_js.__publicField(this, "code");
|
|
85
|
+
chunkI64FD2EH_js.__publicField(this, "recoverable", false);
|
|
86
86
|
this.code = code;
|
|
87
87
|
}
|
|
88
88
|
}, ConfigurationError = class extends ConnectorError {
|
|
89
89
|
constructor(code, message, context, originalError) {
|
|
90
90
|
super(message, context, originalError);
|
|
91
|
-
|
|
92
|
-
|
|
91
|
+
chunkI64FD2EH_js.__publicField(this, "code");
|
|
92
|
+
chunkI64FD2EH_js.__publicField(this, "recoverable", false);
|
|
93
93
|
this.code = code;
|
|
94
94
|
}
|
|
95
95
|
}, NetworkError = class extends ConnectorError {
|
|
96
96
|
constructor(code, message, context, originalError) {
|
|
97
97
|
super(message, context, originalError);
|
|
98
|
-
|
|
99
|
-
|
|
98
|
+
chunkI64FD2EH_js.__publicField(this, "code");
|
|
99
|
+
chunkI64FD2EH_js.__publicField(this, "recoverable", true);
|
|
100
100
|
this.code = code;
|
|
101
101
|
}
|
|
102
102
|
}, TransactionError = class extends ConnectorError {
|
|
103
103
|
constructor(code, message, context, originalError) {
|
|
104
104
|
super(message, context, originalError);
|
|
105
|
-
|
|
106
|
-
|
|
105
|
+
chunkI64FD2EH_js.__publicField(this, "code");
|
|
106
|
+
chunkI64FD2EH_js.__publicField(this, "recoverable");
|
|
107
107
|
this.code = code, this.recoverable = ["USER_REJECTED", "SEND_FAILED", "SIMULATION_FAILED"].includes(code);
|
|
108
108
|
}
|
|
109
109
|
};
|
|
@@ -207,7 +207,7 @@ function toClusterId(network) {
|
|
|
207
207
|
function getDefaultRpcUrl(network) {
|
|
208
208
|
let normalized = normalizeNetwork(network);
|
|
209
209
|
try {
|
|
210
|
-
return
|
|
210
|
+
return chunkI64FD2EH_js.getPublicSolanaRpcUrl(normalized);
|
|
211
211
|
} catch {
|
|
212
212
|
return PUBLIC_RPC_ENDPOINTS[normalized] ?? PUBLIC_RPC_ENDPOINTS.localnet;
|
|
213
213
|
}
|
|
@@ -257,14 +257,14 @@ function getClusterExplorerUrl(cluster, path) {
|
|
|
257
257
|
}
|
|
258
258
|
function getTransactionUrl(signature, cluster) {
|
|
259
259
|
let clusterType = getClusterType(cluster), explorerCluster = clusterType === "custom" || clusterType === "localnet" ? "devnet" : clusterType;
|
|
260
|
-
return
|
|
260
|
+
return chunkI64FD2EH_js.getExplorerLink({
|
|
261
261
|
transaction: signature,
|
|
262
262
|
cluster: explorerCluster === "mainnet" ? "mainnet" : explorerCluster
|
|
263
263
|
});
|
|
264
264
|
}
|
|
265
265
|
function getAddressUrl(address, cluster) {
|
|
266
266
|
let clusterType = getClusterType(cluster), explorerCluster = clusterType === "custom" || clusterType === "localnet" ? "devnet" : clusterType;
|
|
267
|
-
return
|
|
267
|
+
return chunkI64FD2EH_js.getExplorerLink({
|
|
268
268
|
address,
|
|
269
269
|
cluster: explorerCluster === "mainnet" ? "mainnet" : explorerCluster
|
|
270
270
|
});
|
|
@@ -326,9 +326,9 @@ var POLL_INTERVALS_MS = [1e3, 2e3, 3e3, 5e3, 5e3], DEFAULT_MAX_RETRIES = 3, DEFA
|
|
|
326
326
|
// src/lib/core/state-manager.ts
|
|
327
327
|
var StateManager = class {
|
|
328
328
|
constructor(initialState) {
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
329
|
+
chunkI64FD2EH_js.__publicField(this, "state");
|
|
330
|
+
chunkI64FD2EH_js.__publicField(this, "listeners", /* @__PURE__ */ new Set());
|
|
331
|
+
chunkI64FD2EH_js.__publicField(this, "notifyTimeout");
|
|
332
332
|
this.state = initialState;
|
|
333
333
|
}
|
|
334
334
|
/**
|
|
@@ -387,10 +387,10 @@ var StateManager = class {
|
|
|
387
387
|
};
|
|
388
388
|
|
|
389
389
|
// src/lib/core/event-emitter.ts
|
|
390
|
-
var logger =
|
|
390
|
+
var logger = chunkI64FD2EH_js.createLogger("EventEmitter"), EventEmitter = class {
|
|
391
391
|
constructor(debug = false) {
|
|
392
|
-
|
|
393
|
-
|
|
392
|
+
chunkI64FD2EH_js.__publicField(this, "listeners", /* @__PURE__ */ new Set());
|
|
393
|
+
chunkI64FD2EH_js.__publicField(this, "debug");
|
|
394
394
|
this.debug = debug;
|
|
395
395
|
}
|
|
396
396
|
/**
|
|
@@ -446,12 +446,12 @@ var logger = chunkRIQH5W7D_js.createLogger("EventEmitter"), EventEmitter = class
|
|
|
446
446
|
// src/lib/core/debug-metrics.ts
|
|
447
447
|
var DebugMetrics = class {
|
|
448
448
|
constructor() {
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
449
|
+
chunkI64FD2EH_js.__publicField(this, "stateUpdates", 0);
|
|
450
|
+
chunkI64FD2EH_js.__publicField(this, "noopUpdates", 0);
|
|
451
|
+
chunkI64FD2EH_js.__publicField(this, "updateTimes", []);
|
|
452
|
+
chunkI64FD2EH_js.__publicField(this, "lastUpdateTime", 0);
|
|
453
|
+
chunkI64FD2EH_js.__publicField(this, "eventListenerCount", 0);
|
|
454
|
+
chunkI64FD2EH_js.__publicField(this, "subscriptionCount", 0);
|
|
455
455
|
}
|
|
456
456
|
/**
|
|
457
457
|
* Record a state update attempt
|
|
@@ -491,11 +491,11 @@ var DebugMetrics = class {
|
|
|
491
491
|
// src/lib/core/base-collaborator.ts
|
|
492
492
|
var BaseCollaborator = class {
|
|
493
493
|
constructor(config, loggerPrefix) {
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
this.stateManager = config.stateManager, this.eventEmitter = config.eventEmitter, this.debug = config.debug ?? false, this.logger =
|
|
494
|
+
chunkI64FD2EH_js.__publicField(this, "stateManager");
|
|
495
|
+
chunkI64FD2EH_js.__publicField(this, "eventEmitter");
|
|
496
|
+
chunkI64FD2EH_js.__publicField(this, "debug");
|
|
497
|
+
chunkI64FD2EH_js.__publicField(this, "logger");
|
|
498
|
+
this.stateManager = config.stateManager, this.eventEmitter = config.eventEmitter, this.debug = config.debug ?? false, this.logger = chunkI64FD2EH_js.createLogger(loggerPrefix);
|
|
499
499
|
}
|
|
500
500
|
/**
|
|
501
501
|
* Log debug message if debug mode is enabled
|
|
@@ -518,7 +518,7 @@ var BaseCollaborator = class {
|
|
|
518
518
|
};
|
|
519
519
|
|
|
520
520
|
// src/lib/connection/wallet-authenticity-verifier.ts
|
|
521
|
-
var logger2 =
|
|
521
|
+
var logger2 = chunkI64FD2EH_js.createLogger("WalletAuthenticity"), WalletAuthenticityVerifier = class {
|
|
522
522
|
/**
|
|
523
523
|
* Verify a wallet's authenticity using dynamic heuristics
|
|
524
524
|
*
|
|
@@ -728,7 +728,7 @@ var logger2 = chunkRIQH5W7D_js.createLogger("WalletAuthenticity"), WalletAuthent
|
|
|
728
728
|
};
|
|
729
729
|
|
|
730
730
|
// src/lib/connection/wallet-detector.ts
|
|
731
|
-
var logger3 =
|
|
731
|
+
var logger3 = chunkI64FD2EH_js.createLogger("WalletDetector");
|
|
732
732
|
function hasFeature(wallet, featureName) {
|
|
733
733
|
return wallet.features != null && wallet.features[featureName] !== void 0;
|
|
734
734
|
}
|
|
@@ -750,7 +750,7 @@ function verifyWalletName(wallet, requestedName) {
|
|
|
750
750
|
var WalletDetector = class extends BaseCollaborator {
|
|
751
751
|
constructor(stateManager, eventEmitter, debug = false) {
|
|
752
752
|
super({ stateManager, eventEmitter, debug }, "WalletDetector");
|
|
753
|
-
|
|
753
|
+
chunkI64FD2EH_js.__publicField(this, "unsubscribers", []);
|
|
754
754
|
}
|
|
755
755
|
/**
|
|
756
756
|
* Initialize wallet detection
|
|
@@ -875,10 +875,10 @@ function getEventsFeature(wallet) {
|
|
|
875
875
|
var ConnectionManager = class extends BaseCollaborator {
|
|
876
876
|
constructor(stateManager, eventEmitter, walletStorage, debug = false) {
|
|
877
877
|
super({ stateManager, eventEmitter, debug }, "ConnectionManager");
|
|
878
|
-
|
|
879
|
-
|
|
880
|
-
|
|
881
|
-
|
|
878
|
+
chunkI64FD2EH_js.__publicField(this, "walletStorage");
|
|
879
|
+
chunkI64FD2EH_js.__publicField(this, "walletChangeUnsub", null);
|
|
880
|
+
chunkI64FD2EH_js.__publicField(this, "pollTimer", null);
|
|
881
|
+
chunkI64FD2EH_js.__publicField(this, "pollAttempts", 0);
|
|
882
882
|
this.walletStorage = walletStorage;
|
|
883
883
|
}
|
|
884
884
|
/**
|
|
@@ -1073,13 +1073,13 @@ var ConnectionManager = class extends BaseCollaborator {
|
|
|
1073
1073
|
};
|
|
1074
1074
|
|
|
1075
1075
|
// src/lib/connection/auto-connector.ts
|
|
1076
|
-
var logger4 =
|
|
1076
|
+
var logger4 = chunkI64FD2EH_js.createLogger("AutoConnector"), MIN_ADDRESS_LENGTH = 30, AutoConnector = class {
|
|
1077
1077
|
constructor(walletDetector, connectionManager, stateManager, walletStorage, debug = false) {
|
|
1078
|
-
|
|
1079
|
-
|
|
1080
|
-
|
|
1081
|
-
|
|
1082
|
-
|
|
1078
|
+
chunkI64FD2EH_js.__publicField(this, "walletDetector");
|
|
1079
|
+
chunkI64FD2EH_js.__publicField(this, "connectionManager");
|
|
1080
|
+
chunkI64FD2EH_js.__publicField(this, "stateManager");
|
|
1081
|
+
chunkI64FD2EH_js.__publicField(this, "walletStorage");
|
|
1082
|
+
chunkI64FD2EH_js.__publicField(this, "debug");
|
|
1083
1083
|
this.walletDetector = walletDetector, this.connectionManager = connectionManager, this.stateManager = stateManager, this.walletStorage = walletStorage, this.debug = debug;
|
|
1084
1084
|
}
|
|
1085
1085
|
async attemptAutoConnect() {
|
|
@@ -1233,7 +1233,7 @@ var logger4 = chunkRIQH5W7D_js.createLogger("AutoConnector"), MIN_ADDRESS_LENGTH
|
|
|
1233
1233
|
var ClusterManager = class extends BaseCollaborator {
|
|
1234
1234
|
constructor(stateManager, eventEmitter, clusterStorage, config, debug = false) {
|
|
1235
1235
|
super({ stateManager, eventEmitter, debug }, "ClusterManager");
|
|
1236
|
-
|
|
1236
|
+
chunkI64FD2EH_js.__publicField(this, "clusterStorage");
|
|
1237
1237
|
if (this.clusterStorage = clusterStorage, config) {
|
|
1238
1238
|
let clusters = config.clusters ?? [], initialClusterId = this.clusterStorage?.get() ?? config.initialCluster ?? "solana:mainnet", initialCluster = clusters.find((c) => c.id === initialClusterId) ?? clusters[0] ?? null;
|
|
1239
1239
|
this.stateManager.updateState({
|
|
@@ -1277,9 +1277,9 @@ var ClusterManager = class extends BaseCollaborator {
|
|
|
1277
1277
|
var TransactionTracker = class extends BaseCollaborator {
|
|
1278
1278
|
constructor(stateManager, eventEmitter, maxTransactions = 20, debug = false) {
|
|
1279
1279
|
super({ stateManager, eventEmitter, debug }, "TransactionTracker");
|
|
1280
|
-
|
|
1281
|
-
|
|
1282
|
-
|
|
1280
|
+
chunkI64FD2EH_js.__publicField(this, "transactions", []);
|
|
1281
|
+
chunkI64FD2EH_js.__publicField(this, "totalTransactions", 0);
|
|
1282
|
+
chunkI64FD2EH_js.__publicField(this, "maxTransactions");
|
|
1283
1283
|
this.maxTransactions = maxTransactions;
|
|
1284
1284
|
}
|
|
1285
1285
|
/**
|
|
@@ -1333,10 +1333,10 @@ var TransactionTracker = class extends BaseCollaborator {
|
|
|
1333
1333
|
// src/lib/health/health-monitor.ts
|
|
1334
1334
|
var HealthMonitor = class {
|
|
1335
1335
|
constructor(stateManager, walletStorage, clusterStorage, isInitialized) {
|
|
1336
|
-
|
|
1337
|
-
|
|
1338
|
-
|
|
1339
|
-
|
|
1336
|
+
chunkI64FD2EH_js.__publicField(this, "stateManager");
|
|
1337
|
+
chunkI64FD2EH_js.__publicField(this, "walletStorage");
|
|
1338
|
+
chunkI64FD2EH_js.__publicField(this, "clusterStorage");
|
|
1339
|
+
chunkI64FD2EH_js.__publicField(this, "isInitialized");
|
|
1340
1340
|
this.stateManager = stateManager, this.walletStorage = walletStorage, this.clusterStorage = clusterStorage, this.isInitialized = isInitialized ?? (() => true);
|
|
1341
1341
|
}
|
|
1342
1342
|
/**
|
|
@@ -1388,19 +1388,19 @@ var HealthMonitor = class {
|
|
|
1388
1388
|
};
|
|
1389
1389
|
|
|
1390
1390
|
// src/lib/core/connector-client.ts
|
|
1391
|
-
var logger5 =
|
|
1391
|
+
var logger5 = chunkI64FD2EH_js.createLogger("ConnectorClient"), ConnectorClient = class {
|
|
1392
1392
|
constructor(config = {}) {
|
|
1393
|
-
|
|
1394
|
-
|
|
1395
|
-
|
|
1396
|
-
|
|
1397
|
-
|
|
1398
|
-
|
|
1399
|
-
|
|
1400
|
-
|
|
1401
|
-
|
|
1402
|
-
|
|
1403
|
-
|
|
1393
|
+
chunkI64FD2EH_js.__publicField(this, "stateManager");
|
|
1394
|
+
chunkI64FD2EH_js.__publicField(this, "eventEmitter");
|
|
1395
|
+
chunkI64FD2EH_js.__publicField(this, "walletDetector");
|
|
1396
|
+
chunkI64FD2EH_js.__publicField(this, "connectionManager");
|
|
1397
|
+
chunkI64FD2EH_js.__publicField(this, "autoConnector");
|
|
1398
|
+
chunkI64FD2EH_js.__publicField(this, "clusterManager");
|
|
1399
|
+
chunkI64FD2EH_js.__publicField(this, "transactionTracker");
|
|
1400
|
+
chunkI64FD2EH_js.__publicField(this, "debugMetrics");
|
|
1401
|
+
chunkI64FD2EH_js.__publicField(this, "healthMonitor");
|
|
1402
|
+
chunkI64FD2EH_js.__publicField(this, "initialized", false);
|
|
1403
|
+
chunkI64FD2EH_js.__publicField(this, "config");
|
|
1404
1404
|
this.config = config;
|
|
1405
1405
|
let initialState = {
|
|
1406
1406
|
wallets: [],
|
|
@@ -1540,6 +1540,12 @@ var logger5 = chunkRIQH5W7D_js.createLogger("ConnectorClient"), ConnectorClient
|
|
|
1540
1540
|
totalTransactions: this.transactionTracker.getTotalCount()
|
|
1541
1541
|
};
|
|
1542
1542
|
}
|
|
1543
|
+
/**
|
|
1544
|
+
* Get the current connector configuration
|
|
1545
|
+
*/
|
|
1546
|
+
getConfig() {
|
|
1547
|
+
return this.config;
|
|
1548
|
+
}
|
|
1543
1549
|
resetDebugMetrics() {
|
|
1544
1550
|
this.debugMetrics.resetMetrics();
|
|
1545
1551
|
}
|
|
@@ -1548,7 +1554,7 @@ var logger5 = chunkRIQH5W7D_js.createLogger("ConnectorClient"), ConnectorClient
|
|
|
1548
1554
|
}), this.walletDetector.destroy(), this.eventEmitter.offAll(), this.stateManager.clear();
|
|
1549
1555
|
}
|
|
1550
1556
|
};
|
|
1551
|
-
var logger6 =
|
|
1557
|
+
var logger6 = chunkI64FD2EH_js.createLogger("ErrorBoundary"), WalletErrorType = /* @__PURE__ */ ((WalletErrorType2) => (WalletErrorType2.CONNECTION_FAILED = "CONNECTION_FAILED", WalletErrorType2.TRANSACTION_FAILED = "TRANSACTION_FAILED", WalletErrorType2.NETWORK_ERROR = "NETWORK_ERROR", WalletErrorType2.WALLET_NOT_FOUND = "WALLET_NOT_FOUND", WalletErrorType2.USER_REJECTED = "USER_REJECTED", WalletErrorType2.INSUFFICIENT_FUNDS = "INSUFFICIENT_FUNDS", WalletErrorType2.UNKNOWN_ERROR = "UNKNOWN_ERROR", WalletErrorType2))(WalletErrorType || {}), ErrorLogger = class {
|
|
1552
1558
|
static log(error, errorInfo, context) {
|
|
1553
1559
|
if (process.env.NODE_ENV === "development" && logger6.error(error.message, {
|
|
1554
1560
|
error,
|
|
@@ -1596,8 +1602,8 @@ function classifyError(error) {
|
|
|
1596
1602
|
var ConnectorErrorBoundary = class extends react.Component {
|
|
1597
1603
|
constructor(props) {
|
|
1598
1604
|
super(props);
|
|
1599
|
-
|
|
1600
|
-
|
|
1605
|
+
chunkI64FD2EH_js.__publicField(this, "retryTimeouts", /* @__PURE__ */ new Set());
|
|
1606
|
+
chunkI64FD2EH_js.__publicField(this, "retry", () => {
|
|
1601
1607
|
let { maxRetries = 3 } = this.props;
|
|
1602
1608
|
this.state.retryCount >= maxRetries || this.setState((prevState) => ({
|
|
1603
1609
|
hasError: false,
|
|
@@ -1819,11 +1825,11 @@ function withErrorBoundary(Component2, errorBoundaryProps) {
|
|
|
1819
1825
|
let WrappedComponent = (props) => /* @__PURE__ */ jsxRuntime.jsx(ConnectorErrorBoundary, { ...errorBoundaryProps, children: /* @__PURE__ */ jsxRuntime.jsx(Component2, { ...props }) });
|
|
1820
1826
|
return WrappedComponent.displayName = `withErrorBoundary(${Component2.displayName || Component2.name})`, WrappedComponent;
|
|
1821
1827
|
}
|
|
1822
|
-
var logger7 =
|
|
1828
|
+
var logger7 = chunkI64FD2EH_js.createLogger("Polyfills"), installed = false;
|
|
1823
1829
|
function installPolyfills() {
|
|
1824
1830
|
if (!(installed || typeof window > "u"))
|
|
1825
1831
|
try {
|
|
1826
|
-
webcryptoEd25519Polyfill.install(), installed = true,
|
|
1832
|
+
webcryptoEd25519Polyfill.install(), installed = true, logger7.info("Browser compatibility polyfills installed");
|
|
1827
1833
|
} catch (error) {
|
|
1828
1834
|
logger7 && logger7.warn("Failed to install polyfills", { error }), installed = true;
|
|
1829
1835
|
}
|
|
@@ -1992,7 +1998,7 @@ async function copySignatureToClipboard(signature, options) {
|
|
|
1992
1998
|
}
|
|
1993
1999
|
|
|
1994
2000
|
// src/lib/transaction/transaction-validator.ts
|
|
1995
|
-
var logger8 =
|
|
2001
|
+
var logger8 = chunkI64FD2EH_js.createLogger("TransactionValidator"), MAX_TRANSACTION_SIZE = 1232, MIN_TRANSACTION_SIZE = 64, TransactionValidator = class {
|
|
1996
2002
|
/**
|
|
1997
2003
|
* Validate a transaction before signing
|
|
1998
2004
|
*
|
|
@@ -2097,7 +2103,7 @@ var logger8 = chunkRIQH5W7D_js.createLogger("TransactionValidator"), MAX_TRANSAC
|
|
|
2097
2103
|
};
|
|
2098
2104
|
|
|
2099
2105
|
// src/lib/transaction/transaction-signer.ts
|
|
2100
|
-
var logger9 =
|
|
2106
|
+
var logger9 = chunkI64FD2EH_js.createLogger("TransactionSigner");
|
|
2101
2107
|
function createTransactionSigner(config) {
|
|
2102
2108
|
let { wallet, account, cluster, eventEmitter } = config;
|
|
2103
2109
|
if (!wallet || !account)
|
|
@@ -2117,7 +2123,7 @@ function createTransactionSigner(config) {
|
|
|
2117
2123
|
throw logger9.error("Transaction validation failed", { errors: validation.errors }), Errors.invalidTransaction(validation.errors.join(", "));
|
|
2118
2124
|
validation.warnings.length > 0 && logger9.warn("Transaction validation warnings", { warnings: validation.warnings });
|
|
2119
2125
|
try {
|
|
2120
|
-
let signFeature = features["solana:signTransaction"], { serialized, wasWeb3js } =
|
|
2126
|
+
let signFeature = features["solana:signTransaction"], { serialized, wasWeb3js } = chunkI64FD2EH_js.prepareTransactionForWallet(transaction);
|
|
2121
2127
|
logger9.debug("Signing transaction", {
|
|
2122
2128
|
wasWeb3js,
|
|
2123
2129
|
serializedLength: serialized.length,
|
|
@@ -2170,10 +2176,10 @@ function createTransactionSigner(config) {
|
|
|
2170
2176
|
logger9.debug("Found signedTransaction property");
|
|
2171
2177
|
let bytes = signedTx.signedTransaction;
|
|
2172
2178
|
if (bytes instanceof Uint8Array)
|
|
2173
|
-
return await
|
|
2179
|
+
return await chunkI64FD2EH_js.convertSignedTransaction(bytes, wasWeb3js);
|
|
2174
2180
|
}
|
|
2175
2181
|
if (signedTx instanceof Uint8Array)
|
|
2176
|
-
return await
|
|
2182
|
+
return await chunkI64FD2EH_js.convertSignedTransaction(signedTx, wasWeb3js);
|
|
2177
2183
|
throw logger9.error("Unexpected wallet response format", {
|
|
2178
2184
|
type: typeof signedTx,
|
|
2179
2185
|
constructor: signedTx?.constructor?.name
|
|
@@ -2190,14 +2196,14 @@ function createTransactionSigner(config) {
|
|
|
2190
2196
|
return [];
|
|
2191
2197
|
if (capabilities.supportsBatchSigning)
|
|
2192
2198
|
try {
|
|
2193
|
-
let signFeature = features["solana:signAllTransactions"], prepared = transactions.map((tx) =>
|
|
2199
|
+
let signFeature = features["solana:signAllTransactions"], prepared = transactions.map((tx) => chunkI64FD2EH_js.prepareTransactionForWallet(tx)), serializedTxs = prepared.map((p) => p.serialized), wasWeb3js = prepared[0].wasWeb3js, result = await signFeature.signAllTransactions({
|
|
2194
2200
|
account,
|
|
2195
2201
|
transactions: serializedTxs,
|
|
2196
2202
|
...cluster ? { chain: cluster.id } : {}
|
|
2197
2203
|
});
|
|
2198
2204
|
return await Promise.all(
|
|
2199
2205
|
result.signedTransactions.map(
|
|
2200
|
-
(signedBytes) =>
|
|
2206
|
+
(signedBytes) => chunkI64FD2EH_js.convertSignedTransaction(signedBytes, wasWeb3js)
|
|
2201
2207
|
)
|
|
2202
2208
|
);
|
|
2203
2209
|
} catch (error) {
|
|
@@ -2229,7 +2235,7 @@ function createTransactionSigner(config) {
|
|
|
2229
2235
|
if (!capabilities.canSend)
|
|
2230
2236
|
throw Errors.featureNotSupported("sending transactions");
|
|
2231
2237
|
try {
|
|
2232
|
-
let sendFeature = features["solana:signAndSendTransaction"], { serialized } =
|
|
2238
|
+
let sendFeature = features["solana:signAndSendTransaction"], { serialized } = chunkI64FD2EH_js.prepareTransactionForWallet(transaction);
|
|
2233
2239
|
eventEmitter && eventEmitter.emit({
|
|
2234
2240
|
type: "transaction:preparing",
|
|
2235
2241
|
transaction: serialized,
|
|
@@ -2315,7 +2321,7 @@ var TransactionSignerError = class extends TransactionError {
|
|
|
2315
2321
|
function isTransactionSignerError(error) {
|
|
2316
2322
|
return error instanceof TransactionSignerError || error instanceof TransactionError;
|
|
2317
2323
|
}
|
|
2318
|
-
var logger10 =
|
|
2324
|
+
var logger10 = chunkI64FD2EH_js.createLogger("KitTransactionSigner");
|
|
2319
2325
|
function encodeShortVecLength(value) {
|
|
2320
2326
|
let bytes = [], remaining = value;
|
|
2321
2327
|
for (; remaining >= 128; )
|
|
@@ -2347,7 +2353,7 @@ function extractSignature(signedTx) {
|
|
|
2347
2353
|
let signatureStart = bytesConsumed;
|
|
2348
2354
|
return signedTx.slice(signatureStart, signatureStart + 64);
|
|
2349
2355
|
}
|
|
2350
|
-
if (
|
|
2356
|
+
if (chunkI64FD2EH_js.isWeb3jsTransaction(signedTx)) {
|
|
2351
2357
|
let signatures = signedTx.signatures;
|
|
2352
2358
|
if (!signatures || signatures.length === 0)
|
|
2353
2359
|
throw new Error("No signatures found in web3.js transaction");
|
|
@@ -2388,7 +2394,7 @@ function createKitTransactionSigner(connectorSigner) {
|
|
|
2388
2394
|
let signedTxBytes;
|
|
2389
2395
|
if (signedTx instanceof Uint8Array)
|
|
2390
2396
|
signedTxBytes = signedTx;
|
|
2391
|
-
else if (
|
|
2397
|
+
else if (chunkI64FD2EH_js.isWeb3jsTransaction(signedTx)) {
|
|
2392
2398
|
let txObj = signedTx;
|
|
2393
2399
|
if (typeof txObj.serialize == "function")
|
|
2394
2400
|
signedTxBytes = txObj.serialize();
|
|
@@ -2506,5 +2512,5 @@ exports.toClusterId = toClusterId;
|
|
|
2506
2512
|
exports.toConnectorError = toConnectorError;
|
|
2507
2513
|
exports.truncate = truncate;
|
|
2508
2514
|
exports.withErrorBoundary = withErrorBoundary;
|
|
2509
|
-
//# sourceMappingURL=chunk-
|
|
2510
|
-
//# sourceMappingURL=chunk-
|
|
2515
|
+
//# sourceMappingURL=chunk-JUZVCBAI.js.map
|
|
2516
|
+
//# sourceMappingURL=chunk-JUZVCBAI.js.map
|