@solana/client 1.1.3 → 1.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.browser.mjs +2 -2
- package/dist/index.native.mjs +2 -2
- package/dist/index.node.mjs +8 -1
- package/dist/types/index.d.ts +1 -1
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/wallet/connectors.d.ts +4 -0
- package/dist/types/wallet/connectors.d.ts.map +1 -1
- package/package.json +3 -2
- package/dist/index.browser.mjs.map +0 -1
- package/dist/index.native.mjs.map +0 -1
- package/dist/index.node.mjs.map +0 -1
- package/dist/server/index.node.mjs.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/actions.ts","../src/utils.ts","../src/logging/logger.ts","../src/rpc/createSolanaRpcClient.ts","../src/serialization/state.ts","../src/utils/cluster.ts","../src/wallet/registry.ts","../src/client/actions.ts","../src/numeric/math.ts","../src/numeric/rational.ts","../src/numeric/amounts.ts","../src/numeric/lamports.ts","../src/signers/walletTransactionSigner.ts","../src/features/sol.ts","../src/features/spl.ts","../src/features/stake.ts","../src/transactions/base64.ts","../src/transactions/prepareTransaction.ts","../src/features/transactions.ts","../src/client/createClientHelpers.ts","../src/client/createClientStore.ts","../src/client/watchers.ts","../src/client/createClient.ts","../src/wallet/standard.ts","../src/wallet/connectors.ts","../src/client/defaultClient.ts","../src/state/asyncState.ts","../src/controllers/solTransferController.ts","../src/controllers/splTransferController.ts","../src/controllers/stakeController.ts","../src/serialization/json.ts","../src/signatures/status.ts","../src/transactions/referenceKeys.ts","../src/transactions/transactionPoolController.ts","../src/utils/addressLike.ts","../src/utils/stableStringify.ts"],"names":["connectWallet","client","params","__name","disconnectWallet","_params","fetchAccount","fetchBalance","fetchLookupTable","fetchLookupTables","fetchNonceAccount","requestAirdrop","sendTransaction","setCluster","deepFreeze","value","objectValue","key","property","now","toErrorMessage","error","createLogger","logger","data","level","message","payload","formatError","createChainedAbortController","parent","controller","onAbort","toBigint","DEFAULT_SIMULATION_CONFIG","createSolanaRpcClient","config","endpoint","websocketEndpoint","commitment","rpc","createSolanaRpc","rpcSubscriptions","createSolanaRpcSubscriptions","sendAndConfirmTransaction","transaction","options","abortController","targetCommitment","wireTransaction","getBase64EncodedWireTransaction","response","getBlockHeightExceedencePromise","createBlockHeightExceedencePromiseFactory","getRecentSignatureConfirmationPromise","createRecentSignatureConfirmationPromiseFactory","waitForRecentTransactionConfirmation","simulateTransaction","baseConfig","mergedConfig","normalizedConfig","getInitialSerializableState","applySerializableState","state","serializeSolanaState","deserializeSolanaState","json","parsed","getSerializableStateSnapshot","wallet","autoConnectPreference","lastConnectorId","lastPublicKey","subscribeSolanaState","listener","previous","snapshot","serialized","ensureHttpProtocol","MONIKER_ENDPOINTS","inferWebsocketEndpoint","resolveCluster","moniker","mapped","rawWebsocket","createWalletRegistry","connectors","byId","connector","id","updateState","store","update","createActions","inputLogger","runtime","walletEventsCleanup","getCommitment","warmupCluster","start","nextCommitment","newRpcClient","latencyMs","connectorId","session","accounts","address","lamports","addr","account","fetchAddressLookupTable","addresses","authority","deactivationSlot","lastExtendedSlot","lastExtendedSlotStartIndex","isSome","fetchAllAddressLookupTable","fetchNonce","signature","airdropFactory","TEN","pow10","exponent","assertDecimals","assertNonNegative","label","decimals","trimmed","match","checkedAdd","lhs","rhs","result","checkedSubtract","checkedMultiply","checkedDivide","dividend","divisor","divideWithRounding","rounding","base","remainder","createRatio","numeratorInput","denominatorInput","numerator","denominator","applyRatio","amount","ratio","DECIMAL_PATTERN","normalizeNumberInput","stringValue","parts","decimalToBaseUnits","scale","sanitized","integerPartRaw","fractionalRaw","integerPart","fractionalDigits","hasFractional","truncatedFractional","fractionalComponent","remainderDigits","hasRemainder","firstRemainderDigit","formatBaseUnits","minimumFractionDigits","trimTrailingZeros","whole","fraction","createTokenAmount","fromBaseUnits","fromDecimal","normalized","toDecimalString","add","subtract","multiplyByRatio","isZero","compare","left","right","BASE_LAMPORTS","LAMPORTS_PER_SOL","lamportsMath","lamportsFromSol","lamportsToSolString","isWalletSession","createWalletTransactionSigner","signTransaction","transactions","signedTransactions","castTransaction","signed","mergedTransaction","signedTransaction","base58Encoder","getBase58Encoder","signatures","signatureString","bytes","signatureBytes","resolveSignerMode","signer","isTransactionPartialSigner","isTransactionSendingSigner","ensureAddress","resolveLifetime","fallback","resolveSigner","mode","toLamportAmount","input","createSolTransferHelper","prepareTransfer","lifetime","destination","pipe","createTransactionMessage","m","setTransactionMessageFeePayer","setTransactionMessageLifetimeUsingBlockhash","appendTransactionMessageInstruction","getTransferSolInstruction","singleTransactionPlan","sendPreparedTransfer","prepared","signAndSendTransactionMessageWithSigners","base58Decoder","getBase58Decoder","maxRetries","latestSignature","createTransactionPlanExecutor","signTransactionMessageWithSigners","wire","sendTransfer","createSplTokenHelper","mintAddress","tokenProgram","TOKEN_PROGRAM_ADDRESS","cachedDecimals","cachedMath","resolveDecimals","fetchMint","getTokenMath","deriveAssociatedTokenAddress","owner","ata","findAssociatedTokenPda","ataAddress","uiAmount","sourceOwner","destinationOwner","sourceAta","destinationAta","math","instructionList","getCreateAssociatedTokenInstruction","getTransferCheckedInstruction","instruction","isSolanaError","SOLANA_ERROR__TRANSACTION_ERROR__ALREADY_PROCESSED","retriedPrepared","STAKE_PROGRAM_ID","SYSVAR_CLOCK","SYSVAR_STAKE_HISTORY","UNUSED_STAKE_CONFIG_ACC","STAKE_STATE_LEN","createStakeHelper","prepareStake","validatorAddress","totalLamports","stakeAccount","generateKeyPairSigner","createIx","getCreateAccountInstruction","initializeIx","getInitializeInstruction","delegateIx","getDelegateStakeInstruction","appendTransactionMessageInstructions","sendPreparedStake","sendStake","prepareUnstake","stakeAccountAddress","deactivateIx","getDeactivateInstruction","sendPreparedUnstake","sendUnstake","prepareWithdraw","destinationAddress","withdrawIx","getWithdrawInstruction","sendPreparedWithdraw","sendWithdraw","getStakeAccounts","validatorId","walletAddress","validatorIdStr","acc","transactionToBase64","tx","compileTransaction","transactionToBase64WithSigners","partiallySignTransactionMessageWithSigners","DEFAULT_COMPUTE_UNIT_LIMIT_MULTIPLIER","DEFAULT_COMPUTE_UNIT_LIMIT","MAX_COMPUTE_UNIT_LIMIT","isComputeUnitLimitInstruction","COMPUTE_BUDGET_PROGRAM_ADDRESS","didExceedComputeBudget","current","SOLANA_ERROR__INSTRUCTION_ERROR__COMPUTATIONAL_BUDGET_EXCEEDED","estimateComputeUnits","target","latest","base64Transaction","prepareTransaction","multiplier","shouldResetBlockhash","shouldResetComputeUnits","computeLimitIndex","unitsFromSimulation","estimatedUnits","units","getSetComputeUnitLimitInstruction","nextInstructions","transactionHasLifetime","toAddress","parseAddress","hasSetComputeUnitLimitInstruction","instructions","isInstructionForProgram","isInstructionWithData","ComputeBudgetInstruction","hasSetComputeUnitPriceInstruction","instructionUsesAddressLookup","resolveVersion","requested","normaliseCommitment","request","getFallbackCommitment","resolveFeePayerAddress","feePayer","authoritySigner","resolveComputeUnitLimit","resolveComputeUnitPrice","createTransactionRecipe","context","walletMode","feePayerSigner","baseInstructions","version","resolvedComputeUnitLimit","computeUnitPrice","prefixInstructions","getSetComputeUnitPriceInstruction","instructionSequence","setTransactionMessageFeePayerSigner","getMessagePackerInstructionPlanFromInstructions","assertSingleTransactionPlan","plan","createTransactionHelper","prepare","recipe","createTransactionPlanner","singlePlan","sign","toWire","send","sendDirect","sendWithExecutor","prepareAndSend","overrides","rest","prepareConfig","tunedMessage","tunedPrepared","withDefaultCommitment","getFallback","baseCommitment","wrapSolTransferHelper","helper","wrapSplTokenHelper","resolveCommitment","wrapStakeHelper","normaliseConfigValue","serialiseSplConfig","createClientHelpers","splTokenCache","solTransfer","stake","getSolTransfer","getStake","getTransaction","getSplTokenHelper","cacheKey","cached","scoped","createClusterStatus","createInitialClientState","timestamp","createClientStore","initialState","createStore","createDefaultClientStore","createWatchers","setSubscriptionStatus","kind","status","createSubscriptionHandle","abort","handleAccountNotifications","iterator","notification","slot","entry","watchAccount","watchBalance","handleSignatureNotifications","watchSignature","createClient","hydratedConfig","resolvedCluster","rpcClient","actions","watchers","helpers","destroy","transactionDecoder","getTransactionDecoder","transactionEncoder","getTransactionEncoder","deriveConnectorId","getPrimaryAccount","primary","mapCommitment","toSessionAccount","walletAccount","getChain","preferred","disconnectFeature","StandardDisconnect","createWalletStandardConnector","metadata","StandardConnect","connect","connectionOptions","connectFeature","eventsFeature","StandardEvents","shouldConnectSilently","allowInteractiveFallback","walletAccounts","connectWithMode","silent","currentAccount","sessionAccount","signMessageFeature","SolanaSignMessage","signTransactionFeature","SolanaSignTransaction","signAndSendFeature","SolanaSignAndSendTransaction","resolvedChain","signMessage","output","wireBytes","chain","disconnectSession","changeUnsubscribe","onAccountsChanged","disconnect","isSupported","mapWalletToConnector","getWalletStandardConnectors","get","getWallets","seen","watchWalletStandardConnectors","onChange","on","emit","deduplicated","offRegister","offUnregister","autoDiscover","injected","first","filterByName","name","lower","phantom","solflare","backpack","defaultWalletConnectors","normalizeUrl","resolveClientConfig","cluster","endpointOverride","websocket","walletConnectors","passthrough","resolvedEndpoint","resolvedConnectors","createDefaultClient","createInitialAsyncState","createAsyncState","ensureAuthority","resolveDefault","createSolTransferController","listeners","authorityProvider","notify","setState","next","subscribe","reset","ensureTransferConfig","resolveAuthority","resolveSourceOwner","createSplTransferController","sourceOwnerProvider","resolvedConfig","ensureUnstakeAuthority","ensureWithdrawAuthority","createStakeController","unstakeListeners","withdrawListeners","unstakeState","withdrawState","notifyUnstake","notifyWithdraw","setUnstakeState","setWithdrawState","unstake","withdraw","subscribeUnstake","subscribeWithdraw","resetUnstake","resetWithdraw","bigintToJson","bigintFromJson","lamportsToJson","lamportsFromJson","COMMITMENT_PRIORITY","SIGNATURE_STATUS_TIMEOUT_MS","normalizeSignature","parseSignature","deriveConfirmationStatus","confirmationMeetsCommitment","confirmation","MEMO_PROGRAM_ADDRESS","ensureNonMemoInstructionIndex","index","SolanaError","SOLANA_ERROR__INSTRUCTION_ERROR__GENERIC_ERROR","insertReferenceKey","reference","insertReferenceKeys","references","targetInstruction","AccountRole","updatedInstructions","initial","freezeInstructions","list","createTransactionPoolController","initialInstructions","blockhashMaxAgeMs","latestBlockhashCache","instructionsStore","preparedStore","prepareStateStore","sendStateStore","resetDerivedState","commitInstructions","addInstruction","addInstructions","instructionSet","replaceInstructions","clearInstructions","removeInstruction","_","ii","ensureInstructions","resolveCachedLifetime","overrideInstructions","cachedLifetime","restWithLifetime","resolvePrepared","override","resolveLifetimeOptions","overridePrepared","sendOptions","subscribeInstructions","subscribePrepared","subscribePrepareState","subscribeSendState","setLatestBlockhashCache","cache","addressLike","toAddressString","stableStringify","_key","candidate"],"mappings":"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","file":"index.native.mjs","sourcesContent":["import type {\n\tConnectWalletParameters,\n\tConnectWalletReturnType,\n\tDisconnectWalletParameters,\n\tDisconnectWalletReturnType,\n\tFetchAccountParameters,\n\tFetchAccountReturnType,\n\tFetchBalanceParameters,\n\tFetchBalanceReturnType,\n\tFetchLookupTableParameters,\n\tFetchLookupTableReturnType,\n\tFetchLookupTablesParameters,\n\tFetchLookupTablesReturnType,\n\tFetchNonceAccountParameters,\n\tFetchNonceAccountReturnType,\n\tRequestAirdropParameters,\n\tRequestAirdropReturnType,\n\tSendTransactionParameters,\n\tSendTransactionReturnType,\n\tSetClusterParameters,\n\tSetClusterReturnType,\n\tSolanaClient,\n} from './types';\n\n/**\n * Connect to a registered wallet connector by id.\n *\n * @param client - Solana client instance.\n * @param params - Connector id and optional auto-connect preference.\n */\nexport function connectWallet(client: SolanaClient, params: ConnectWalletParameters): ConnectWalletReturnType {\n\treturn client.actions.connectWallet(params.connectorId, params.options);\n}\n\n/**\n * Disconnect the active wallet session (noop if already disconnected).\n *\n * @param client - Solana client instance.\n */\nexport function disconnectWallet(\n\tclient: SolanaClient,\n\t_params?: DisconnectWalletParameters,\n): DisconnectWalletReturnType {\n\tvoid _params;\n\treturn client.actions.disconnectWallet();\n}\n\n/**\n * Fetch and cache account data for an address.\n *\n * @param client - Solana client instance.\n * @param params - Address and optional commitment override.\n */\nexport function fetchAccount(client: SolanaClient, params: FetchAccountParameters): FetchAccountReturnType {\n\treturn client.actions.fetchAccount(params.address, params.commitment);\n}\n\n/**\n * Fetch and cache lamport balance for an address.\n *\n * @param client - Solana client instance.\n * @param params - Address and optional commitment override.\n */\nexport function fetchBalance(client: SolanaClient, params: FetchBalanceParameters): FetchBalanceReturnType {\n\treturn client.actions.fetchBalance(params.address, params.commitment);\n}\n\n/**\n * Fetch an address lookup table.\n *\n * @param client - Solana client instance.\n * @param params - Lookup table address and optional commitment override.\n */\nexport function fetchLookupTable(client: SolanaClient, params: FetchLookupTableParameters): FetchLookupTableReturnType {\n\treturn client.actions.fetchLookupTable(params.address, params.commitment);\n}\n\n/**\n * Fetch multiple address lookup tables.\n *\n * @param client - Solana client instance.\n * @param params - Lookup table addresses and optional commitment override.\n */\nexport function fetchLookupTables(\n\tclient: SolanaClient,\n\tparams: FetchLookupTablesParameters,\n): FetchLookupTablesReturnType {\n\treturn client.actions.fetchLookupTables(params.addresses, params.commitment);\n}\n\n/**\n * Fetch a nonce account.\n *\n * @param client - Solana client instance.\n * @param params - Nonce account address and optional commitment override.\n */\nexport function fetchNonceAccount(\n\tclient: SolanaClient,\n\tparams: FetchNonceAccountParameters,\n): FetchNonceAccountReturnType {\n\treturn client.actions.fetchNonceAccount(params.address, params.commitment);\n}\n\n/**\n * Request an airdrop to an address.\n *\n * @param client - Solana client instance.\n * @param params - Target address and lamports amount.\n */\nexport function requestAirdrop(client: SolanaClient, params: RequestAirdropParameters): RequestAirdropReturnType {\n\treturn client.actions.requestAirdrop(params.address, params.lamports);\n}\n\n/**\n * Send a prepared transaction through the client.\n *\n * @param client - Solana client instance.\n * @param params - Transaction and optional commitment override.\n */\nexport function sendTransaction(client: SolanaClient, params: SendTransactionParameters): SendTransactionReturnType {\n\treturn client.actions.sendTransaction(params.transaction, params.commitment);\n}\n\n/**\n * Reconfigure the client to target a new cluster endpoint (and optional websocket/commitment).\n *\n * @param client - Solana client instance.\n * @param params - Endpoint plus optional config overrides.\n */\nexport function setCluster(client: SolanaClient, params: SetClusterParameters): SetClusterReturnType {\n\treturn client.actions.setCluster(params.endpoint, params.config);\n}\n","/**\n * Recursively freezes a value to avoid accidental mutation of initial state snapshots.\n *\n * @param value - Value to freeze in place.\n * @returns The same value with all nested objects frozen.\n */\nexport function deepFreeze<T>(value: T): T {\n\tif (typeof value !== 'object' || value === null) {\n\t\treturn value;\n\t}\n\tconst objectValue = value as Record<PropertyKey, unknown>;\n\tfor (const key of Reflect.ownKeys(objectValue)) {\n\t\tconst property = objectValue[key as keyof typeof objectValue];\n\t\tdeepFreeze(property as unknown);\n\t}\n\treturn Object.freeze(value);\n}\n\n/**\n * Returns the current timestamp in milliseconds.\n *\n * @returns Millisecond timestamp provided by {@link Date.now}.\n */\nexport function now(): number {\n\treturn Date.now();\n}\n\n/**\n * Converts optional errors to a serializable string for logging.\n *\n * @param error - Arbitrary error value to format.\n * @returns String representation of the provided error.\n */\nexport function toErrorMessage(error: unknown): string {\n\tif (error instanceof Error) {\n\t\treturn error.message;\n\t}\n\tif (typeof error === 'string') {\n\t\treturn error;\n\t}\n\ttry {\n\t\treturn JSON.stringify(error);\n\t} catch {\n\t\treturn String(error);\n\t}\n}\n","import type { ClientLogger, LogLevel } from '../types';\nimport { toErrorMessage } from '../utils';\n\nconst defaultLevels: Record<LogLevel, number> = {\n\tdebug: 10,\n\terror: 40,\n\tinfo: 20,\n\twarn: 30,\n};\n\n/**\n * Creates a logger function that falls back to console logging when no custom logger is provided.\n *\n * @param logger - Optional logger implementation supplied by the integrator.\n * @returns A {@link ClientLogger} instance ready for dependency injection.\n */\nexport function createLogger(logger?: ClientLogger): ClientLogger {\n\tif (logger) {\n\t\treturn logger;\n\t}\n\treturn ({ data, level, message }) => {\n\t\tconst payload: Record<string, unknown> = data ? { ...data } : {};\n\t\tswitch (level) {\n\t\t\tcase 'error':\n\t\t\t\tconsole.error(`[react-core] ${message}`, payload);\n\t\t\t\tbreak;\n\t\t\tcase 'warn':\n\t\t\t\tconsole.warn(`[react-core] ${message}`, payload);\n\t\t\t\tbreak;\n\t\t\tcase 'info':\n\t\t\t\tconsole.info(`[react-core] ${message}`, payload);\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tconsole.debug(`[react-core] ${message}`, payload);\n\t\t}\n\t};\n}\n\n/**\n * Formats an error into a structured payload for logging.\n *\n * @param error - Arbitrary error value that will be recorded.\n * @returns Serializable shape containing the original error and message.\n */\nexport function formatError(error: unknown): Record<string, unknown> {\n\treturn {\n\t\terror,\n\t\tmessage: toErrorMessage(error),\n\t};\n}\n\n/**\n * Returns whether the provided log level is at least as severe as the threshold.\n *\n * @param level - Log level to evaluate.\n * @param threshold - Minimum severity level that should pass.\n * @returns `true` when the level meets or exceeds the threshold.\n */\nexport function isLevelAtLeast(level: LogLevel, threshold: LogLevel): boolean {\n\treturn defaultLevels[level] >= defaultLevels[threshold];\n}\n","import {\n\ttype ClusterUrl,\n\ttype Commitment,\n\tcreateSolanaRpc,\n\tcreateSolanaRpcSubscriptions,\n\tgetBase64EncodedWireTransaction,\n\ttype SendableTransaction,\n\ttype Signature,\n\ttype Transaction,\n} from '@solana/kit';\nimport type { TransactionWithLastValidBlockHeight } from '@solana/transaction-confirmation';\nimport {\n\tcreateBlockHeightExceedencePromiseFactory,\n\tcreateRecentSignatureConfirmationPromiseFactory,\n\twaitForRecentTransactionConfirmation,\n} from '@solana/transaction-confirmation';\n\ntype SolanaRpcInstance = ReturnType<typeof createSolanaRpc>;\ntype SolanaRpcSubscriptionsInstance = ReturnType<typeof createSolanaRpcSubscriptions>;\n\ntype ConfirmableTransaction = SendableTransaction & Transaction & TransactionWithLastValidBlockHeight;\n\ntype SimulateTransactionPlan = ReturnType<SolanaRpcInstance['simulateTransaction']>;\ntype SimulateTransactionConfig = Parameters<SolanaRpcInstance['simulateTransaction']>[1];\ntype SimulateTransactionResult = Awaited<ReturnType<SimulateTransactionPlan['send']>>;\n\nexport type SendAndConfirmTransactionOptions = Readonly<{\n\tabortSignal?: AbortSignal;\n\tcommitment?: Commitment;\n\tmaxRetries?: bigint | number;\n\tminContextSlot?: bigint | number;\n\tskipPreflight?: boolean;\n}>;\n\nexport type SimulateTransactionOptions = Readonly<{\n\tabortSignal?: AbortSignal;\n\tcommitment?: Commitment;\n\tconfig?: SimulateTransactionConfig;\n}>;\n\nexport type SolanaRpcClient = Readonly<{\n\tcommitment: Commitment;\n\tendpoint: ClusterUrl;\n\trpc: SolanaRpcInstance;\n\trpcSubscriptions: SolanaRpcSubscriptionsInstance;\n\tsendAndConfirmTransaction(\n\t\ttransaction: ConfirmableTransaction,\n\t\toptions?: SendAndConfirmTransactionOptions,\n\t): Promise<Signature>;\n\tsimulateTransaction(\n\t\ttransaction: SendableTransaction & Transaction,\n\t\toptions?: SimulateTransactionOptions,\n\t): Promise<SimulateTransactionResult>;\n\twebsocketEndpoint: ClusterUrl;\n}>;\n\nexport type CreateSolanaRpcClientConfig = Readonly<{\n\tcommitment?: Commitment;\n\tendpoint: ClusterUrl;\n\trpcConfig?: Parameters<typeof createSolanaRpc>[1];\n\trpcSubscriptionsConfig?: Parameters<typeof createSolanaRpcSubscriptions>[1];\n\twebsocketEndpoint?: ClusterUrl;\n}>;\n\nfunction createChainedAbortController(parent?: AbortSignal): AbortController {\n\tconst controller = new AbortController();\n\tif (!parent) {\n\t\treturn controller;\n\t}\n\tif (parent.aborted) {\n\t\tcontroller.abort(parent.reason);\n\t\treturn controller;\n\t}\n\tconst onAbort = () => {\n\t\tcontroller.abort(parent.reason);\n\t\tparent.removeEventListener('abort', onAbort);\n\t};\n\tparent.addEventListener('abort', onAbort, { once: true });\n\treturn controller;\n}\n\nfunction toBigint(value?: number | bigint): bigint | undefined {\n\tif (value === undefined) {\n\t\treturn undefined;\n\t}\n\treturn typeof value === 'bigint' ? value : BigInt(Math.floor(value));\n}\n\nconst DEFAULT_SIMULATION_CONFIG = Object.freeze({\n\tencoding: 'base64' as const,\n\treplaceRecentBlockhash: true as const,\n\tsigVerify: false as const,\n});\n\n/**\n * Creates a lightweight RPC client that wires up JSON-RPC, subscriptions, and common helpers.\n */\nexport function createSolanaRpcClient(config: CreateSolanaRpcClientConfig): SolanaRpcClient {\n\tconst endpoint = config.endpoint;\n\tconst websocketEndpoint = config.websocketEndpoint ?? endpoint;\n\tconst commitment = config.commitment ?? 'confirmed';\n\tconst rpc = createSolanaRpc(endpoint, config.rpcConfig);\n\tconst rpcSubscriptions = createSolanaRpcSubscriptions(websocketEndpoint, config.rpcSubscriptionsConfig);\n\n\tasync function sendAndConfirmTransaction(\n\t\ttransaction: ConfirmableTransaction,\n\t\toptions: SendAndConfirmTransactionOptions = {},\n\t): Promise<Signature> {\n\t\tconst abortController = createChainedAbortController(options.abortSignal);\n\t\tconst targetCommitment = options.commitment ?? commitment;\n\t\tconst wireTransaction = getBase64EncodedWireTransaction(transaction);\n\t\tconst response = await rpc\n\t\t\t.sendTransaction(wireTransaction, {\n\t\t\t\tencoding: 'base64',\n\t\t\t\tmaxRetries: toBigint(options.maxRetries),\n\t\t\t\tminContextSlot: toBigint(options.minContextSlot),\n\t\t\t\tpreflightCommitment: targetCommitment,\n\t\t\t\tskipPreflight: options.skipPreflight,\n\t\t\t})\n\t\t\t.send({ abortSignal: abortController.signal });\n\n\t\tconst getBlockHeightExceedencePromise = createBlockHeightExceedencePromiseFactory({\n\t\t\trpc: rpc as Parameters<typeof createBlockHeightExceedencePromiseFactory>[0]['rpc'],\n\t\t\trpcSubscriptions: rpcSubscriptions as Parameters<\n\t\t\t\ttypeof createBlockHeightExceedencePromiseFactory\n\t\t\t>[0]['rpcSubscriptions'],\n\t\t});\n\t\tconst getRecentSignatureConfirmationPromise = createRecentSignatureConfirmationPromiseFactory({\n\t\t\trpc: rpc as Parameters<typeof createRecentSignatureConfirmationPromiseFactory>[0]['rpc'],\n\t\t\trpcSubscriptions: rpcSubscriptions as Parameters<\n\t\t\t\ttypeof createRecentSignatureConfirmationPromiseFactory\n\t\t\t>[0]['rpcSubscriptions'],\n\t\t});\n\n\t\tawait waitForRecentTransactionConfirmation({\n\t\t\tabortSignal: abortController.signal,\n\t\t\tcommitment: targetCommitment,\n\t\t\tgetBlockHeightExceedencePromise,\n\t\t\tgetRecentSignatureConfirmationPromise,\n\t\t\ttransaction,\n\t\t});\n\n\t\treturn response;\n\t}\n\n\tasync function simulateTransaction(\n\t\ttransaction: SendableTransaction & Transaction,\n\t\toptions: SimulateTransactionOptions = {},\n\t): Promise<SimulateTransactionResult> {\n\t\tconst wireTransaction = getBase64EncodedWireTransaction(transaction);\n\t\tconst baseConfig = (options.config ?? {}) as SimulateTransactionConfig;\n\t\tconst mergedConfig = {\n\t\t\t...DEFAULT_SIMULATION_CONFIG,\n\t\t\t...baseConfig,\n\t\t\tcommitment: baseConfig.commitment ?? options.commitment ?? commitment,\n\t\t};\n\t\tconst normalizedConfig =\n\t\t\tmergedConfig.sigVerify === true && mergedConfig.replaceRecentBlockhash !== false\n\t\t\t\t? { ...mergedConfig, replaceRecentBlockhash: false }\n\t\t\t\t: mergedConfig;\n\t\treturn rpc\n\t\t\t.simulateTransaction(wireTransaction, normalizedConfig as SimulateTransactionConfig)\n\t\t\t.send({ abortSignal: options.abortSignal });\n\t}\n\n\treturn {\n\t\tcommitment,\n\t\tendpoint,\n\t\trpc,\n\t\trpcSubscriptions,\n\t\tsendAndConfirmTransaction,\n\t\tsimulateTransaction,\n\t\twebsocketEndpoint,\n\t};\n}\n","import type { SerializableSolanaState, SolanaClient, SolanaClientConfig } from '../types';\n\nconst SERIALIZABLE_STATE_VERSION = 1;\n\n/**\n * Derive the minimal serializable state for a client based on its config.\n */\nexport function getInitialSerializableState(config: SolanaClientConfig): SerializableSolanaState {\n\treturn {\n\t\tautoconnect: false,\n\t\tcommitment: config.commitment,\n\t\tendpoint: config.endpoint,\n\t\tlastConnectorId: null,\n\t\tlastPublicKey: null,\n\t\tversion: SERIALIZABLE_STATE_VERSION,\n\t\twebsocketEndpoint: config.websocketEndpoint,\n\t};\n}\n\n/**\n * Applies persisted serializable state on top of a base client config.\n *\n * This is a pure helper; it does not mutate the client. Callers can use the returned\n * config object to construct a hydrated client instance.\n */\nexport function applySerializableState(\n\tconfig: SolanaClientConfig,\n\tstate: SerializableSolanaState | null | undefined,\n): SolanaClientConfig {\n\tif (!state) {\n\t\treturn config;\n\t}\n\treturn {\n\t\t...config,\n\t\tcommitment: state.commitment ?? config.commitment,\n\t\tendpoint: state.endpoint ?? config.endpoint,\n\t\twebsocketEndpoint: state.websocketEndpoint ?? config.websocketEndpoint,\n\t};\n}\n\n/**\n * Serializes a {@link SerializableSolanaState} to a JSON string.\n */\nexport function serializeSolanaState(state: SerializableSolanaState): string {\n\treturn JSON.stringify(state);\n}\n\n/**\n * Safely deserializes persisted state into a {@link SerializableSolanaState}.\n */\nexport function deserializeSolanaState(json: string | null | undefined): SerializableSolanaState | null {\n\tif (!json) return null;\n\ttry {\n\t\tconst parsed = JSON.parse(json) as Partial<SerializableSolanaState> | unknown;\n\t\tif (typeof parsed !== 'object' || parsed === null) return null;\n\t\tconst state = parsed as Partial<SerializableSolanaState>;\n\t\treturn {\n\t\t\tautoconnect: state.autoconnect ?? false,\n\t\t\tcommitment: state.commitment,\n\t\t\tendpoint: state.endpoint as SerializableSolanaState['endpoint'],\n\t\t\tlastConnectorId: state.lastConnectorId ?? null,\n\t\t\tlastPublicKey: state.lastPublicKey ?? null,\n\t\t\tversion: state.version ?? SERIALIZABLE_STATE_VERSION,\n\t\t\twebsocketEndpoint: state.websocketEndpoint,\n\t\t};\n\t} catch {\n\t\treturn null;\n\t}\n}\n\nfunction getSerializableStateSnapshot(client: SolanaClient): SerializableSolanaState {\n\tconst state = client.store.getState();\n\tconst wallet = state.wallet as typeof state.wallet & { autoConnect?: boolean };\n\tconst autoConnectPreference = wallet.autoConnect;\n\tlet lastConnectorId: string | null = null;\n\tlet lastPublicKey: string | null = null;\n\tif ('connectorId' in wallet) {\n\t\tlastConnectorId = wallet.connectorId ?? null;\n\t\tif (wallet.status === 'connected') {\n\t\t\tlastPublicKey = wallet.session.account.address.toString();\n\t\t}\n\t}\n\treturn {\n\t\tautoconnect: autoConnectPreference ?? Boolean(lastConnectorId),\n\t\tcommitment: state.cluster.commitment,\n\t\tendpoint: state.cluster.endpoint,\n\t\tlastConnectorId,\n\t\tlastPublicKey,\n\t\tversion: SERIALIZABLE_STATE_VERSION,\n\t\twebsocketEndpoint: state.cluster.websocketEndpoint,\n\t};\n}\n\n/**\n * Subscribes to client state changes and emits a serializable snapshot when relevant fields change.\n */\nexport function subscribeSolanaState(\n\tclient: SolanaClient,\n\tlistener: (state: SerializableSolanaState) => void,\n): () => void {\n\tlet previous = serializeSolanaState(getSerializableStateSnapshot(client));\n\tlistener(JSON.parse(previous) as SerializableSolanaState);\n\tconst unsubscribe = client.store.subscribe(() => {\n\t\tconst snapshot = getSerializableStateSnapshot(client);\n\t\tconst serialized = serializeSolanaState(snapshot);\n\t\tif (serialized === previous) {\n\t\t\treturn;\n\t\t}\n\t\tprevious = serialized;\n\t\tlistener(snapshot);\n\t});\n\treturn unsubscribe;\n}\n","import type { ClusterUrl } from '@solana/kit';\n\nexport type ClusterMoniker = 'mainnet' | 'mainnet-beta' | 'testnet' | 'devnet' | 'localnet' | 'localhost';\n\ntype ResolvedCluster = Readonly<{\n\tendpoint: ClusterUrl;\n\tmoniker: ClusterMoniker | 'custom';\n\twebsocketEndpoint: ClusterUrl;\n}>;\n\nfunction ensureHttpProtocol(endpoint: string): ClusterUrl {\n\tif (\n\t\tendpoint.startsWith('http://') ||\n\t\tendpoint.startsWith('https://') ||\n\t\tendpoint.startsWith('ws://') ||\n\t\tendpoint.startsWith('wss://')\n\t) {\n\t\treturn endpoint as ClusterUrl;\n\t}\n\treturn `https://${endpoint}` as ClusterUrl;\n}\n\nconst MONIKER_ENDPOINTS: Record<ClusterMoniker, Readonly<{ endpoint: ClusterUrl; websocketEndpoint: ClusterUrl }>> = {\n\tdevnet: {\n\t\tendpoint: 'https://api.devnet.solana.com',\n\t\twebsocketEndpoint: 'wss://api.devnet.solana.com',\n\t},\n\tlocalhost: {\n\t\tendpoint: 'http://127.0.0.1:8899',\n\t\twebsocketEndpoint: 'ws://127.0.0.1:8900',\n\t},\n\tlocalnet: {\n\t\tendpoint: 'http://127.0.0.1:8899',\n\t\twebsocketEndpoint: 'ws://127.0.0.1:8900',\n\t},\n\t'mainnet-beta': {\n\t\tendpoint: 'https://api.mainnet-beta.solana.com',\n\t\twebsocketEndpoint: 'wss://api.mainnet-beta.solana.com',\n\t},\n\tmainnet: {\n\t\tendpoint: 'https://api.mainnet-beta.solana.com',\n\t\twebsocketEndpoint: 'wss://api.mainnet-beta.solana.com',\n\t},\n\ttestnet: {\n\t\tendpoint: 'https://api.testnet.solana.com',\n\t\twebsocketEndpoint: 'wss://api.testnet.solana.com',\n\t},\n};\n\nfunction inferWebsocketEndpoint(endpoint: ClusterUrl): ClusterUrl {\n\tif (endpoint.startsWith('https://')) {\n\t\treturn endpoint.replace('https://', 'wss://') as ClusterUrl;\n\t}\n\tif (endpoint.startsWith('http://')) {\n\t\treturn endpoint.replace('http://', 'ws://') as ClusterUrl;\n\t}\n\tif (endpoint.startsWith('ws://') || endpoint.startsWith('wss://')) {\n\t\treturn endpoint;\n\t}\n\treturn endpoint;\n}\n\nexport function resolveCluster(\n\tconfig: Readonly<{ endpoint?: ClusterUrl; moniker?: ClusterMoniker; websocketEndpoint?: ClusterUrl }>,\n): ResolvedCluster {\n\tconst moniker = config.moniker ?? (config.endpoint ? 'custom' : 'devnet');\n\tconst mapped = moniker === 'custom' ? undefined : MONIKER_ENDPOINTS[moniker];\n\tconst endpoint = ensureHttpProtocol((config.endpoint ?? mapped?.endpoint) as ClusterUrl);\n\tconst rawWebsocket = config.websocketEndpoint ? ensureHttpProtocol(config.websocketEndpoint) : undefined;\n\tconst websocketEndpoint = inferWebsocketEndpoint(\n\t\t(rawWebsocket ?? mapped?.websocketEndpoint ?? endpoint) as ClusterUrl,\n\t) as ClusterUrl;\n\treturn {\n\t\tendpoint,\n\t\tmoniker,\n\t\twebsocketEndpoint,\n\t};\n}\n","import type { WalletConnector, WalletRegistry } from '../types';\n\n/**\n * Creates an in-memory wallet registry from the provided connectors.\n *\n * @param connectors - Wallet connector implementations to register.\n * @returns A registry exposing iteration and lookup helpers.\n */\nexport function createWalletRegistry(connectors: readonly WalletConnector[]): WalletRegistry {\n\tconst byId = new Map<string, WalletConnector>();\n\tfor (const connector of connectors) {\n\t\tif (!byId.has(connector.id)) {\n\t\t\tbyId.set(connector.id, connector);\n\t\t}\n\t}\n\treturn {\n\t\tall: [...byId.values()],\n\t\t/**\n\t\t * Looks up a connector by identifier.\n\t\t *\n\t\t * @param id - Unique connector identifier.\n\t\t * @returns The registered connector, if present.\n\t\t */\n\t\tget(id: string) {\n\t\t\treturn byId.get(id);\n\t\t},\n\t};\n}\n","import type {\n\tAddress,\n\tClusterUrl,\n\tCommitment,\n\tLamports,\n\tSendableTransaction,\n\tSignature,\n\tTransaction,\n} from '@solana/kit';\nimport { airdropFactory, getBase64EncodedWireTransaction, isSome } from '@solana/kit';\nimport type { TransactionWithLastValidBlockHeight } from '@solana/transaction-confirmation';\nimport {\n\tcreateBlockHeightExceedencePromiseFactory,\n\tcreateRecentSignatureConfirmationPromiseFactory,\n\twaitForRecentTransactionConfirmation,\n} from '@solana/transaction-confirmation';\nimport { fetchAddressLookupTable, fetchAllAddressLookupTable } from '@solana-program/address-lookup-table';\nimport { fetchNonce } from '@solana-program/system';\n\nimport { createLogger, formatError } from '../logging/logger';\nimport { createSolanaRpcClient } from '../rpc/createSolanaRpcClient';\nimport type {\n\tAddressLookupTableData,\n\tClientActions,\n\tClientState,\n\tClientStore,\n\tNonceAccountData,\n\tSolanaClientRuntime,\n\tWalletRegistry,\n} from '../types';\nimport { now } from '../utils';\n\ntype MutableRuntime = SolanaClientRuntime;\n\ntype ActionDeps = Readonly<{\n\tconnectors: WalletRegistry;\n\tlogger?: ReturnType<typeof createLogger>;\n\truntime: MutableRuntime;\n\tstore: ClientStore;\n}>;\n\n/**\n * Updates the client store while also refreshing the `lastUpdatedAt` timestamp.\n *\n * @param store - Zustand store instance that holds {@link ClientState}.\n * @param update - Partial set of fields that should be merged into the state.\n * @returns Nothing; mutates the provided store.\n */\nfunction updateState(store: ClientStore, update: Partial<ClientState>): void {\n\tstore.setState((state) => ({\n\t\t...state,\n\t\t...update,\n\t\tlastUpdatedAt: now(),\n\t}));\n}\n\n/**\n * Creates the action set used by the Solana client POC.\n *\n * @param deps - Dependencies required to build the action set.\n * @returns An immutable collection implementing {@link ClientActions}.\n */\nexport function createActions({ connectors, logger: inputLogger, runtime, store }: ActionDeps): ClientActions {\n\tconst logger = inputLogger ?? createLogger();\n\tlet walletEventsCleanup: (() => void) | undefined;\n\n\t/**\n\t * Returns the commitment to use for a request, falling back to the store default.\n\t *\n\t * @param commitment - Explicit commitment override.\n\t * @returns The resolved commitment value.\n\t */\n\tfunction getCommitment(commitment?: Commitment): Commitment {\n\t\treturn commitment ?? store.getState().cluster.commitment;\n\t}\n\n\t/**\n\t * Performs a warm-up RPC call so the client can measure cluster latency.\n\t *\n\t * @param endpoint - RPC HTTP endpoint.\n\t * @param commitment - Commitment that should be used for the test call.\n\t * @returns Milliseconds spent waiting for the cluster or `undefined` on failure.\n\t */\n\tasync function warmupCluster(endpoint: ClusterUrl, commitment: Commitment): Promise<number | undefined> {\n\t\ttry {\n\t\t\tconst start = now();\n\t\t\tawait runtime.rpc.getLatestBlockhash({ commitment }).send({ abortSignal: AbortSignal.timeout(10_000) });\n\t\t\treturn now() - start;\n\t\t} catch (error) {\n\t\t\tlogger({\n\t\t\t\tdata: { endpoint, ...formatError(error) },\n\t\t\t\tlevel: 'warn',\n\t\t\t\tmessage: 'cluster warmup failed',\n\t\t\t});\n\t\t\treturn undefined;\n\t\t}\n\t}\n\n\t/**\n\t * Reconfigures the client to target the specified cluster.\n\t *\n\t * @param endpoint - Base RPC endpoint URL.\n\t * @param config - Optional commitment and websocket overrides.\n\t * @returns Promise that resolves once the cluster has been reconfigured.\n\t */\n\tasync function setCluster(\n\t\tendpoint: ClusterUrl,\n\t\tconfig?: Readonly<{ commitment?: Commitment; websocketEndpoint?: ClusterUrl }>,\n\t): Promise<void> {\n\t\tconst nextCommitment = config?.commitment ?? store.getState().cluster.commitment;\n\t\tconst websocketEndpoint = config?.websocketEndpoint ?? endpoint;\n\t\tstore.setState((state) => ({\n\t\t\t...state,\n\t\t\tcluster: {\n\t\t\t\tcommitment: nextCommitment,\n\t\t\t\tendpoint,\n\t\t\t\tstatus: { status: 'connecting' },\n\t\t\t\twebsocketEndpoint,\n\t\t\t},\n\t\t\tlastUpdatedAt: now(),\n\t\t}));\n\t\ttry {\n\t\t\tconst newRpcClient = createSolanaRpcClient({\n\t\t\t\tcommitment: nextCommitment,\n\t\t\t\tendpoint,\n\t\t\t\twebsocketEndpoint,\n\t\t\t});\n\t\t\truntime.rpc = newRpcClient.rpc;\n\t\t\truntime.rpcSubscriptions = newRpcClient.rpcSubscriptions;\n\t\t\tconst latencyMs = await warmupCluster(endpoint, nextCommitment);\n\t\t\tstore.setState((state) => ({\n\t\t\t\t...state,\n\t\t\t\tcluster: {\n\t\t\t\t\tcommitment: nextCommitment,\n\t\t\t\t\tendpoint,\n\t\t\t\t\tstatus: { latencyMs, status: 'ready' },\n\t\t\t\t\twebsocketEndpoint,\n\t\t\t\t},\n\t\t\t\tlastUpdatedAt: now(),\n\t\t\t}));\n\t\t} catch (error) {\n\t\t\tstore.setState((state) => ({\n\t\t\t\t...state,\n\t\t\t\tcluster: {\n\t\t\t\t\tcommitment: nextCommitment,\n\t\t\t\t\tendpoint,\n\t\t\t\t\tstatus: { error, status: 'error' },\n\t\t\t\t\twebsocketEndpoint,\n\t\t\t\t},\n\t\t\t\tlastUpdatedAt: now(),\n\t\t\t}));\n\t\t\tlogger({\n\t\t\t\tdata: { endpoint, ...formatError(error) },\n\t\t\t\tlevel: 'error',\n\t\t\t\tmessage: 'cluster setup failed',\n\t\t\t});\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\t/**\n\t * Initiates a wallet connection using a registered connector.\n\t *\n\t * @param connectorId - Identifier for the desired wallet connector.\n\t * @returns Promise that resolves once the connection attempt has completed.\n\t */\n\tasync function connectWallet(\n\t\tconnectorId: string,\n\t\toptions: Readonly<{ autoConnect?: boolean }> = {},\n\t): Promise<void> {\n\t\twalletEventsCleanup?.();\n\t\twalletEventsCleanup = undefined;\n\t\tconst connector = connectors.get(connectorId);\n\t\tif (!connector) {\n\t\t\tthrow new Error(`No wallet connector registered for id \"${connectorId}\".`);\n\t\t}\n\t\tif (!connector.isSupported()) {\n\t\t\tthrow new Error(`Wallet connector \"${connectorId}\" is not supported in this environment.`);\n\t\t}\n\t\tconst autoConnectPreference = options.autoConnect ?? false;\n\n\t\tstore.setState((state) => ({\n\t\t\t...state,\n\t\t\tlastUpdatedAt: now(),\n\t\t\twallet: { autoConnect: autoConnectPreference, connectorId, status: 'connecting' },\n\t\t}));\n\n\t\ttry {\n\t\t\tconst session = await connector.connect(options);\n\t\t\tstore.setState((state) => ({\n\t\t\t\t...state,\n\t\t\t\tlastUpdatedAt: now(),\n\t\t\t\twallet: { autoConnect: autoConnectPreference, connectorId, session, status: 'connected' },\n\t\t\t}));\n\t\t\tif (session.onAccountsChanged) {\n\t\t\t\twalletEventsCleanup = session.onAccountsChanged((accounts) => {\n\t\t\t\t\tif (accounts.length === 0) {\n\t\t\t\t\t\twalletEventsCleanup?.();\n\t\t\t\t\t\twalletEventsCleanup = undefined;\n\t\t\t\t\t\tvoid disconnectWallet();\n\t\t\t\t\t}\n\t\t\t\t});\n\t\t\t}\n\t\t\tlogger({\n\t\t\t\tdata: { address: session.account.address.toString(), connectorId },\n\t\t\t\tlevel: 'info',\n\t\t\t\tmessage: 'wallet connected',\n\t\t\t});\n\t\t} catch (error) {\n\t\t\tstore.setState((state) => ({\n\t\t\t\t...state,\n\t\t\t\tlastUpdatedAt: now(),\n\t\t\t\twallet: { autoConnect: autoConnectPreference, connectorId, error, status: 'error' },\n\t\t\t}));\n\t\t\tlogger({\n\t\t\t\tdata: { connectorId, ...formatError(error) },\n\t\t\t\tlevel: 'error',\n\t\t\t\tmessage: 'wallet connection failed',\n\t\t\t});\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\t/**\n\t * Disconnects the currently active wallet session if one exists.\n\t *\n\t * @returns Promise that resolves once the wallet has been disconnected.\n\t */\n\tasync function disconnectWallet(): Promise<void> {\n\t\tconst wallet = store.getState().wallet;\n\t\tif (wallet.status === 'disconnected') {\n\t\t\treturn;\n\t\t}\n\t\twalletEventsCleanup?.();\n\t\twalletEventsCleanup = undefined;\n\t\ttry {\n\t\t\tif (wallet.status === 'connected') {\n\t\t\t\tawait wallet.session.disconnect();\n\t\t\t\tconst connector = connectors.get(wallet.connectorId);\n\t\t\t\tif (connector) {\n\t\t\t\t\tawait connector.disconnect();\n\t\t\t\t}\n\t\t\t} else if (wallet.status === 'connecting') {\n\t\t\t\tconst connector = connectors.get(wallet.connectorId);\n\t\t\t\tif (connector) {\n\t\t\t\t\tawait connector.disconnect();\n\t\t\t\t}\n\t\t\t}\n\t\t} finally {\n\t\t\tupdateState(store, { wallet: { status: 'disconnected' } });\n\t\t}\n\t}\n\n\t/**\n\t * Fetches the current lamport balance for an address and updates the cache.\n\t *\n\t * @param address - Target account address.\n\t * @param commitment - Optional commitment override for the RPC call.\n\t * @returns Promise resolving with the lamport balance retrieved from the cluster.\n\t */\n\tasync function fetchBalance(address: Address, commitment?: Commitment): Promise<Lamports> {\n\t\tconst key = address.toString();\n\t\tstore.setState((state) => ({\n\t\t\t...state,\n\t\t\taccounts: {\n\t\t\t\t...state.accounts,\n\t\t\t\t[key]: {\n\t\t\t\t\taddress,\n\t\t\t\t\tdata: state.accounts[key]?.data,\n\t\t\t\t\terror: undefined,\n\t\t\t\t\tfetching: true,\n\t\t\t\t\tlamports: state.accounts[key]?.lamports ?? null,\n\t\t\t\t\tlastFetchedAt: now(),\n\t\t\t\t\tslot: state.accounts[key]?.slot ?? null,\n\t\t\t\t},\n\t\t\t},\n\t\t\tlastUpdatedAt: now(),\n\t\t}));\n\t\ttry {\n\t\t\tconst response = await runtime.rpc\n\t\t\t\t.getBalance(address, { commitment: getCommitment(commitment) })\n\t\t\t\t.send({ abortSignal: AbortSignal.timeout(10_000) });\n\t\t\tconst lamports = response.value;\n\t\t\tstore.setState((state) => ({\n\t\t\t\t...state,\n\t\t\t\taccounts: {\n\t\t\t\t\t...state.accounts,\n\t\t\t\t\t[key]: {\n\t\t\t\t\t\taddress,\n\t\t\t\t\t\tdata: state.accounts[key]?.data,\n\t\t\t\t\t\terror: undefined,\n\t\t\t\t\t\tfetching: false,\n\t\t\t\t\t\tlamports,\n\t\t\t\t\t\tlastFetchedAt: now(),\n\t\t\t\t\t\tslot: response.context.slot,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tlastUpdatedAt: now(),\n\t\t\t}));\n\t\t\treturn lamports;\n\t\t} catch (error) {\n\t\t\tstore.setState((state) => ({\n\t\t\t\t...state,\n\t\t\t\taccounts: {\n\t\t\t\t\t...state.accounts,\n\t\t\t\t\t[key]: {\n\t\t\t\t\t\taddress,\n\t\t\t\t\t\tdata: state.accounts[key]?.data,\n\t\t\t\t\t\terror,\n\t\t\t\t\t\tfetching: false,\n\t\t\t\t\t\tlamports: state.accounts[key]?.lamports ?? null,\n\t\t\t\t\t\tlastFetchedAt: now(),\n\t\t\t\t\t\tslot: state.accounts[key]?.slot ?? null,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tlastUpdatedAt: now(),\n\t\t\t}));\n\t\t\tlogger({\n\t\t\t\tdata: { address: key, ...formatError(error) },\n\t\t\t\tlevel: 'error',\n\t\t\t\tmessage: 'balance fetch failed',\n\t\t\t});\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\t/**\n\t * Fetches full account data and writes the result to the cache.\n\t *\n\t * @param address - Target account address.\n\t * @param commitment - Optional commitment override for the RPC call.\n\t * @returns Promise resolving with the cached account entry after the fetch completes.\n\t */\n\tasync function fetchAccount(address: Address, commitment?: Commitment) {\n\t\tconst key = address.toString();\n\t\tstore.setState((state) => ({\n\t\t\t...state,\n\t\t\taccounts: {\n\t\t\t\t...state.accounts,\n\t\t\t\t[key]: {\n\t\t\t\t\taddress,\n\t\t\t\t\tdata: state.accounts[key]?.data,\n\t\t\t\t\terror: undefined,\n\t\t\t\t\tfetching: true,\n\t\t\t\t\tlamports: state.accounts[key]?.lamports ?? null,\n\t\t\t\t\tlastFetchedAt: now(),\n\t\t\t\t\tslot: state.accounts[key]?.slot ?? null,\n\t\t\t\t},\n\t\t\t},\n\t\t\tlastUpdatedAt: now(),\n\t\t}));\n\t\ttry {\n\t\t\tconst response = await runtime.rpc\n\t\t\t\t.getAccountInfo(address, { commitment: getCommitment(commitment), encoding: 'base64' })\n\t\t\t\t.send({ abortSignal: AbortSignal.timeout(10_000) });\n\t\t\tconst value = response.value;\n\t\t\tconst lamports = value?.lamports ?? null;\n\t\t\tstore.setState((state) => ({\n\t\t\t\t...state,\n\t\t\t\taccounts: {\n\t\t\t\t\t...state.accounts,\n\t\t\t\t\t[key]: {\n\t\t\t\t\t\taddress,\n\t\t\t\t\t\tdata: value,\n\t\t\t\t\t\terror: undefined,\n\t\t\t\t\t\tfetching: false,\n\t\t\t\t\t\tlamports,\n\t\t\t\t\t\tlastFetchedAt: now(),\n\t\t\t\t\t\tslot: response.context.slot,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tlastUpdatedAt: now(),\n\t\t\t}));\n\t\t\treturn store.getState().accounts[key];\n\t\t} catch (error) {\n\t\t\tstore.setState((state) => ({\n\t\t\t\t...state,\n\t\t\t\taccounts: {\n\t\t\t\t\t...state.accounts,\n\t\t\t\t\t[key]: {\n\t\t\t\t\t\taddress,\n\t\t\t\t\t\tdata: state.accounts[key]?.data,\n\t\t\t\t\t\terror,\n\t\t\t\t\t\tfetching: false,\n\t\t\t\t\t\tlamports: state.accounts[key]?.lamports ?? null,\n\t\t\t\t\t\tlastFetchedAt: now(),\n\t\t\t\t\t\tslot: state.accounts[key]?.slot ?? null,\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t\tlastUpdatedAt: now(),\n\t\t\t}));\n\t\t\tlogger({\n\t\t\t\tdata: { address: key, ...formatError(error) },\n\t\t\t\tlevel: 'error',\n\t\t\t\tmessage: 'account fetch failed',\n\t\t\t});\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\t/**\n\t * Fetches an address lookup table.\n\t *\n\t * @param addr - Lookup table address.\n\t * @param commitment - Optional commitment override.\n\t * @returns Parsed lookup table data.\n\t */\n\tasync function fetchLookupTable(addr: Address, commitment?: Commitment): Promise<AddressLookupTableData> {\n\t\tconst account = await fetchAddressLookupTable(runtime.rpc, addr, {\n\t\t\tcommitment: getCommitment(commitment),\n\t\t});\n\t\tconst { addresses, authority, deactivationSlot, lastExtendedSlot, lastExtendedSlotStartIndex } = account.data;\n\t\treturn {\n\t\t\taddresses,\n\t\t\tauthority: isSome(authority) ? authority.value : undefined,\n\t\t\tdeactivationSlot,\n\t\t\tlastExtendedSlot,\n\t\t\tlastExtendedSlotStartIndex,\n\t\t};\n\t}\n\n\t/**\n\t * Fetches multiple address lookup tables.\n\t *\n\t * @param addresses - Lookup table addresses.\n\t * @param commitment - Optional commitment override.\n\t * @returns Array of parsed lookup table data.\n\t */\n\tasync function fetchLookupTables(\n\t\taddresses: readonly Address[],\n\t\tcommitment?: Commitment,\n\t): Promise<readonly AddressLookupTableData[]> {\n\t\tif (addresses.length === 0) return [];\n\t\tconst accounts = await fetchAllAddressLookupTable(runtime.rpc, addresses as Address[], {\n\t\t\tcommitment: getCommitment(commitment),\n\t\t});\n\t\treturn accounts.map(({ data }) => ({\n\t\t\taddresses: data.addresses,\n\t\t\tauthority: isSome(data.authority) ? data.authority.value : undefined,\n\t\t\tdeactivationSlot: data.deactivationSlot,\n\t\t\tlastExtendedSlot: data.lastExtendedSlot,\n\t\t\tlastExtendedSlotStartIndex: data.lastExtendedSlotStartIndex,\n\t\t}));\n\t}\n\n\t/**\n\t * Fetches a nonce account.\n\t *\n\t * @param addr - Nonce account address.\n\t * @param commitment - Optional commitment override.\n\t * @returns Parsed nonce data.\n\t */\n\tasync function fetchNonceAccount(addr: Address, commitment?: Commitment): Promise<NonceAccountData> {\n\t\tconst account = await fetchNonce(runtime.rpc, addr, {\n\t\t\tcommitment: getCommitment(commitment),\n\t\t});\n\t\treturn { authority: account.data.authority, blockhash: account.data.blockhash };\n\t}\n\n\t/**\n\t * Sends a transaction and waits for confirmation using the runtime helpers.\n\t *\n\t * @param transaction - Transaction to submit.\n\t * @param commitment - Optional commitment override for confirmation.\n\t * @returns Promise resolving with the signature for the submitted transaction.\n\t */\n\tasync function sendTransaction(\n\t\ttransaction: SendableTransaction & Transaction & TransactionWithLastValidBlockHeight,\n\t\tcommitment?: Commitment,\n\t): Promise<Signature> {\n\t\tconst targetCommitment = getCommitment(commitment);\n\t\tconst abortController = new AbortController();\n\t\tconst signature = await runtime.rpc\n\t\t\t.sendTransaction(getBase64EncodedWireTransaction(transaction), {\n\t\t\t\tencoding: 'base64',\n\t\t\t\tpreflightCommitment: targetCommitment,\n\t\t\t})\n\t\t\t.send({ abortSignal: abortController.signal });\n\t\tconst key = signature.toString();\n\t\tstore.setState((state) => ({\n\t\t\t...state,\n\t\t\tlastUpdatedAt: now(),\n\t\t\ttransactions: {\n\t\t\t\t...state.transactions,\n\t\t\t\t[key]: {\n\t\t\t\t\tlastUpdatedAt: now(),\n\t\t\t\t\tsignature,\n\t\t\t\t\tstatus: 'sending',\n\t\t\t\t},\n\t\t\t},\n\t\t}));\n\t\tconst getBlockHeightExceedencePromise = createBlockHeightExceedencePromiseFactory({\n\t\t\trpc: runtime.rpc,\n\t\t\trpcSubscriptions: runtime.rpcSubscriptions,\n\t\t} as Parameters<typeof createBlockHeightExceedencePromiseFactory>[0]);\n\t\tconst getRecentSignatureConfirmationPromise = createRecentSignatureConfirmationPromiseFactory({\n\t\t\trpc: runtime.rpc,\n\t\t\trpcSubscriptions: runtime.rpcSubscriptions,\n\t\t} as Parameters<typeof createRecentSignatureConfirmationPromiseFactory>[0]);\n\t\ttry {\n\t\t\tawait waitForRecentTransactionConfirmation({\n\t\t\t\tabortSignal: abortController.signal,\n\t\t\t\tcommitment: targetCommitment,\n\t\t\t\tgetBlockHeightExceedencePromise,\n\t\t\t\tgetRecentSignatureConfirmationPromise,\n\t\t\t\ttransaction,\n\t\t\t});\n\t\t\tstore.setState((state) => ({\n\t\t\t\t...state,\n\t\t\t\tlastUpdatedAt: now(),\n\t\t\t\ttransactions: {\n\t\t\t\t\t...state.transactions,\n\t\t\t\t\t[key]: {\n\t\t\t\t\t\tlastUpdatedAt: now(),\n\t\t\t\t\t\tsignature,\n\t\t\t\t\t\tstatus: 'confirmed',\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t}));\n\t\t\treturn signature;\n\t\t} catch (error) {\n\t\t\tstore.setState((state) => ({\n\t\t\t\t...state,\n\t\t\t\tlastUpdatedAt: now(),\n\t\t\t\ttransactions: {\n\t\t\t\t\t...state.transactions,\n\t\t\t\t\t[key]: {\n\t\t\t\t\t\terror,\n\t\t\t\t\t\tlastUpdatedAt: now(),\n\t\t\t\t\t\tsignature,\n\t\t\t\t\t\tstatus: 'failed',\n\t\t\t\t\t},\n\t\t\t\t},\n\t\t\t}));\n\t\t\tlogger({\n\t\t\t\tdata: { signature: key, ...formatError(error) },\n\t\t\t\tlevel: 'error',\n\t\t\t\tmessage: 'transaction failed to confirm',\n\t\t\t});\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\t/**\n\t * Requests an airdrop on supported clusters.\n\t *\n\t * @param address - Address to receive the airdrop.\n\t * @param lamports - Amount of lamports requested.\n\t * @returns Promise resolving with the signature for the airdrop transaction.\n\t */\n\tasync function requestAirdrop(address: Address, lamports: Lamports) {\n\t\ttry {\n\t\t\tconst factory = airdropFactory({\n\t\t\t\trpc: runtime.rpc,\n\t\t\t\trpcSubscriptions: runtime.rpcSubscriptions,\n\t\t\t} as Parameters<typeof airdropFactory>[0]);\n\t\t\tconst signature = await factory({\n\t\t\t\tcommitment: getCommitment('confirmed'),\n\t\t\t\tlamports,\n\t\t\t\trecipientAddress: address,\n\t\t\t});\n\t\t\tlogger({\n\t\t\t\tdata: { address: address.toString(), lamports: lamports.toString(), signature },\n\t\t\t\tlevel: 'info',\n\t\t\t\tmessage: 'airdrop requested',\n\t\t\t});\n\t\t\treturn signature;\n\t\t} catch (error) {\n\t\t\tlogger({\n\t\t\t\tdata: { address: address.toString(), lamports: lamports.toString(), ...formatError(error) },\n\t\t\t\tlevel: 'error',\n\t\t\t\tmessage: 'airdrop request failed',\n\t\t\t});\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\treturn {\n\t\tconnectWallet,\n\t\tdisconnectWallet,\n\t\tfetchAccount,\n\t\tfetchBalance,\n\t\tfetchLookupTable,\n\t\tfetchLookupTables,\n\t\tfetchNonceAccount,\n\t\trequestAirdrop,\n\t\tsendTransaction,\n\t\tsetCluster,\n\t};\n}\n","export type BigintLike = bigint | number | string;\n\nconst TEN = 10n;\n\n/**\n * Raises 10 to the power of the provided non-negative integer exponent.\n *\n * @param exponent - Exponent that must be between 0 and 38 inclusive.\n * @returns Power-of-ten bigint value.\n */\nexport function pow10(exponent: number): bigint {\n\tassertDecimals(exponent, 'exponent');\n\treturn TEN ** BigInt(exponent);\n}\n\n/**\n * Ensures the provided bigint is not negative.\n *\n * @param value - Bigint value to validate.\n * @param label - Optional label used in error messages.\n * @throws When the value is negative.\n */\nexport function assertNonNegative(value: bigint, label = 'value'): void {\n\tif (value < 0n) {\n\t\tthrow new RangeError(`${label} must be non-negative`);\n\t}\n}\n\n/**\n * Ensures the provided decimals value is a safe non-negative integer within typical SPL limits.\n *\n * @param decimals - Decimal precision to validate.\n * @param label - Optional label used in error messages.\n * @throws When the value is not an integer between 0 and 38 inclusive.\n */\nexport function assertDecimals(decimals: number, label = 'decimals'): void {\n\tif (!Number.isInteger(decimals) || decimals < 0 || decimals > 38) {\n\t\tthrow new RangeError(`${label} must be an integer between 0 and 38`);\n\t}\n}\n\n/**\n * Converts supported numeric inputs into bigint while enforcing integer semantics.\n *\n * @param value - Integer-like value to convert.\n * @param label - Optional label used in error messages.\n * @returns Bigint representation of the supplied value.\n * @throws When the input is not a finite integer.\n */\nexport function toBigint(value: BigintLike, label = 'value'): bigint {\n\tif (typeof value === 'bigint') {\n\t\treturn value;\n\t}\n\tif (typeof value === 'number') {\n\t\tif (!Number.isFinite(value) || !Number.isInteger(value)) {\n\t\t\tthrow new RangeError(`${label} must be a finite integer when provided as a number`);\n\t\t}\n\t\tif (!Number.isSafeInteger(value)) {\n\t\t\tthrow new RangeError(`${label} must be within the safe integer range when provided as a number`);\n\t\t}\n\t\treturn BigInt(value);\n\t}\n\tconst trimmed = value.trim();\n\tconst match = /^[-+]?\\d+$/.exec(trimmed);\n\tif (!match) {\n\t\tthrow new SyntaxError(`${label} must be an integer string`);\n\t}\n\treturn BigInt(match[0]);\n}\n\n/**\n * Adds two bigint values while enforcing non-negative outputs.\n *\n * @param lhs - Left-hand side operand.\n * @param rhs - Right-hand side operand.\n * @param label - Optional label used in error messages.\n * @returns Sum of the operands.\n * @throws When the result is negative.\n */\nexport function checkedAdd(lhs: bigint, rhs: bigint, label = 'result'): bigint {\n\tconst result = lhs + rhs;\n\tassertNonNegative(result, label);\n\treturn result;\n}\n\n/**\n * Subtracts two bigint values, throwing if the operation would go negative.\n *\n * @param lhs - Left-hand side operand.\n * @param rhs - Right-hand side operand.\n * @param label - Optional label used in error messages.\n * @returns Difference of the operands.\n * @throws When the result is negative.\n */\nexport function checkedSubtract(lhs: bigint, rhs: bigint, label = 'result'): bigint {\n\tconst result = lhs - rhs;\n\tassertNonNegative(result, label);\n\treturn result;\n}\n\n/**\n * Multiplies two bigint values and ensures the result is non-negative.\n *\n * @param lhs - Left-hand side operand.\n * @param rhs - Right-hand side operand.\n * @param label - Optional label used in error messages.\n * @returns Product of the operands.\n * @throws When the result is negative.\n */\nexport function checkedMultiply(lhs: bigint, rhs: bigint, label = 'result'): bigint {\n\tconst result = lhs * rhs;\n\tassertNonNegative(result, label);\n\treturn result;\n}\n\n/**\n * Performs integer division and verifies that the divisor is non-zero and the result is non-negative.\n *\n * @param dividend - Value to be divided.\n * @param divisor - Value to divide by.\n * @param label - Optional label used in error messages.\n * @returns Quotient of the division.\n * @throws When the divisor is zero or the result is negative.\n */\nexport function checkedDivide(dividend: bigint, divisor: bigint, label = 'result'): bigint {\n\tif (divisor === 0n) {\n\t\tthrow new RangeError('divisor must be non-zero');\n\t}\n\tconst result = dividend / divisor;\n\tassertNonNegative(result, label);\n\treturn result;\n}\n","import { assertNonNegative, type BigintLike, toBigint } from './math';\n\nexport type RoundingMode = 'ceil' | 'floor' | 'round';\n\nexport type Ratio = Readonly<{\n\tdenominator: bigint;\n\tnumerator: bigint;\n}>;\n\n/**\n * Divides two bigint values while applying the requested rounding strategy.\n *\n * @param dividend - Value to be divided.\n * @param divisor - Value to divide by; must be positive.\n * @param rounding - Rounding strategy to apply when a remainder exists.\n * @returns Quotient adjusted for rounding.\n */\nfunction divideWithRounding(dividend: bigint, divisor: bigint, rounding: RoundingMode): bigint {\n\tif (divisor <= 0n) {\n\t\tthrow new RangeError('divisor must be positive');\n\t}\n\tconst base = dividend / divisor;\n\tconst remainder = dividend % divisor;\n\tif (remainder === 0n) {\n\t\treturn base;\n\t}\n\tswitch (rounding) {\n\t\tcase 'ceil':\n\t\t\treturn base + 1n;\n\t\tcase 'round': {\n\t\t\tconst twice = remainder * 2n;\n\t\t\treturn twice >= divisor ? base + 1n : base;\n\t\t}\n\t\tdefault:\n\t\t\treturn base;\n\t}\n}\n\n/**\n * Creates a ratio used for slippage, fee, or percentage calculations.\n *\n * @param numeratorInput - Numerator part of the ratio; must be non-negative.\n * @param denominatorInput - Denominator part of the ratio; must be positive.\n * @returns Immutable ratio descriptor.\n */\nexport function createRatio(numeratorInput: BigintLike, denominatorInput: BigintLike): Ratio {\n\tconst numerator = toBigint(numeratorInput, 'numerator');\n\tconst denominator = toBigint(denominatorInput, 'denominator');\n\tif (denominator <= 0n) {\n\t\tthrow new RangeError('denominator must be positive');\n\t}\n\tassertNonNegative(numerator, 'numerator');\n\treturn Object.freeze({ denominator, numerator });\n}\n\nexport type ApplyRatioOptions = Readonly<{\n\trounding?: RoundingMode;\n}>;\n\n/**\n * Multiplies an integer amount by the provided ratio using the requested rounding strategy.\n *\n * @param amount - Base amount to scale; must be non-negative.\n * @param ratio - Ratio produced by {@link createRatio}.\n * @param options - Optional rounding configuration.\n * @returns Scaled amount as a bigint.\n */\nexport function applyRatio(amount: bigint, ratio: Ratio, options: ApplyRatioOptions = {}): bigint {\n\tassertNonNegative(amount, 'amount');\n\tconst dividend = amount * ratio.numerator;\n\tconst rounding = options.rounding ?? 'floor';\n\treturn divideWithRounding(dividend, ratio.denominator, rounding);\n}\n","import {\n\tassertDecimals,\n\tassertNonNegative,\n\ttype BigintLike,\n\tcheckedAdd,\n\tcheckedSubtract,\n\tpow10,\n\ttoBigint,\n} from './math';\nimport { type ApplyRatioOptions, applyRatio, type Ratio, type RoundingMode } from './rational';\n\nexport type ParseAmountOptions = Readonly<{\n\tlabel?: string;\n\trounding?: RoundingMode;\n}>;\n\nexport type FormatAmountOptions = Readonly<{\n\tminimumFractionDigits?: number;\n\ttrimTrailingZeros?: boolean;\n}>;\n\nexport type TokenAmountMath = Readonly<{\n\tadd(lhs: bigint, rhs: bigint): bigint;\n\tcompare(lhs: bigint, rhs: bigint): number;\n\tdecimals: number;\n\tfromBaseUnits(value: BigintLike, label?: string): bigint;\n\tfromDecimal(value: number | string, options?: ParseAmountOptions): bigint;\n\tisZero(amount: bigint): boolean;\n\tmultiplyByRatio(amount: bigint, ratio: Ratio, options?: ApplyRatioOptions): bigint;\n\tscale: bigint;\n\tsubtract(lhs: bigint, rhs: bigint): bigint;\n\ttoDecimalString(amount: bigint, options?: FormatAmountOptions): string;\n}>;\n\nconst DECIMAL_PATTERN = /^\\d+(?:\\.\\d+)?$/;\n\n/**\n * Normalizes number inputs by validating precision limitations and returning a string representation.\n *\n * @param value - Decimal number provided by the caller.\n * @param decimals - Token decimal precision used to validate fractional digits.\n * @param label - Label used in thrown error messages.\n * @returns A string representation that avoids scientific notation.\n */\nfunction normalizeNumberInput(value: number, decimals: number, label: string): string {\n\tif (!Number.isFinite(value)) {\n\t\tthrow new RangeError(`${label} must be a finite number`);\n\t}\n\tif (Number.isInteger(value)) {\n\t\treturn value.toString(10);\n\t}\n\tconst stringValue = value.toString(10);\n\tif (stringValue.includes('e') || stringValue.includes('E')) {\n\t\tthrow new RangeError(`${label} cannot use exponential notation; provide a string instead`);\n\t}\n\tconst parts = stringValue.split('.');\n\tif (parts[1] && parts[1].length > decimals + 6) {\n\t\t// Safety guard: floating point precision might be insufficient.\n\t\tthrow new RangeError(`${label} exceeds safe precision; provide a string instead`);\n\t}\n\treturn stringValue;\n}\n\n/**\n * Converts a decimal string into base units while respecting rounding preferences.\n *\n * @param value - Decimal string to convert.\n * @param decimals - Token decimal precision.\n * @param scale - Precomputed scale equal to 10^decimals.\n * @param options - Rounding and labelling options.\n * @returns Bigint representing the value in base units.\n */\nfunction decimalToBaseUnits(value: string, decimals: number, scale: bigint, options: ParseAmountOptions): bigint {\n\tconst label = options.label ?? 'value';\n\tconst rounding = options.rounding ?? 'floor';\n\tconst sanitized = value.replace(/_/g, '').trim();\n\tif (sanitized === '') {\n\t\tthrow new SyntaxError(`${label} must not be empty`);\n\t}\n\tif (!DECIMAL_PATTERN.test(sanitized)) {\n\t\tthrow new SyntaxError(`${label} must be a non-negative decimal string`);\n\t}\n\tconst [integerPartRaw, fractionalRaw] = sanitized.split('.');\n\tconst integerPart = integerPartRaw || '0';\n\tassertNonNegative(BigInt(integerPart), label);\n\tlet result = BigInt(integerPart) * scale;\n\n\tconst fractionalDigits = fractionalRaw ?? '';\n\tif (decimals === 0) {\n\t\tif (fractionalDigits.length === 0) {\n\t\t\treturn result;\n\t\t}\n\t\tconst hasFractional = /[1-9]/.test(fractionalDigits);\n\t\tif (rounding === 'ceil' && hasFractional) {\n\t\t\treturn result + 1n;\n\t\t}\n\t\tif (rounding === 'round' && fractionalDigits[0] !== undefined && fractionalDigits[0] >= '5') {\n\t\t\treturn result + 1n;\n\t\t}\n\t\treturn result;\n\t}\n\n\tconst truncatedFractional = fractionalDigits.slice(0, decimals).padEnd(decimals, '0');\n\tconst fractionalComponent = truncatedFractional === '' ? 0n : BigInt(truncatedFractional);\n\tresult += fractionalComponent;\n\n\tif (fractionalDigits.length > decimals) {\n\t\tconst remainderDigits = fractionalDigits.slice(decimals);\n\t\tconst hasRemainder = /[1-9]/.test(remainderDigits);\n\t\tif (rounding === 'ceil' && hasRemainder) {\n\t\t\tresult += 1n;\n\t\t} else if (rounding === 'round') {\n\t\t\tconst firstRemainderDigit = remainderDigits[0];\n\t\t\tif (firstRemainderDigit !== undefined && firstRemainderDigit >= '5') {\n\t\t\t\tresult += 1n;\n\t\t\t}\n\t\t}\n\t}\n\n\treturn result;\n}\n\n/**\n * Formats a base-unit amount into a human-friendly decimal string.\n *\n * @param amount - Value in base units.\n * @param decimals - Token decimal precision.\n * @param scale - Precomputed scale equal to 10^decimals.\n * @param options - Formatting preferences.\n * @returns A decimal string suitable for display.\n */\nfunction formatBaseUnits(amount: bigint, decimals: number, scale: bigint, options: FormatAmountOptions): string {\n\tassertNonNegative(amount, 'amount');\n\tconst minimumFractionDigits = options.minimumFractionDigits ?? 0;\n\tif (minimumFractionDigits < 0 || minimumFractionDigits > decimals) {\n\t\tthrow new RangeError('minimumFractionDigits must be between 0 and the token decimals');\n\t}\n\tconst trimTrailingZeros = options.trimTrailingZeros ?? true;\n\tif (decimals === 0) {\n\t\treturn amount.toString();\n\t}\n\tconst whole = amount / scale;\n\tlet fraction = (amount % scale).toString().padStart(decimals, '0');\n\tif (trimTrailingZeros) {\n\t\tfraction = fraction.replace(/0+$/, '');\n\t}\n\tif (fraction.length < minimumFractionDigits) {\n\t\tfraction = fraction.padEnd(minimumFractionDigits, '0');\n\t}\n\tif (fraction.length === 0) {\n\t\treturn whole.toString();\n\t}\n\treturn `${whole.toString()}.${fraction}`;\n}\n\n/**\n * Factory that returns integer-safe helpers for working with token amounts across arbitrary decimals.\n *\n * @param decimals - Token decimal precision (0-38) used to scale values.\n * @returns Helper collection for conversions and arithmetic over bigint amounts.\n */\nexport function createTokenAmount(decimals: number): TokenAmountMath {\n\tassertDecimals(decimals, 'decimals');\n\tconst scale = pow10(decimals);\n\n\t/**\n\t * Converts a base-unit value into bigint after validation.\n\t *\n\t * @param value - Integer-like representation of the amount.\n\t * @param label - Optional label used in error messages.\n\t * @returns Bigint representation of the base units.\n\t */\n\tfunction fromBaseUnits(value: BigintLike, label?: string): bigint {\n\t\tconst amount = toBigint(value, label ?? 'amount');\n\t\tassertNonNegative(amount, label ?? 'amount');\n\t\treturn amount;\n\t}\n\n\t/**\n\t * Parses user-provided decimal inputs into base units.\n\t *\n\t * @param value - Decimal number or string representing the token amount.\n\t * @param options - Optional rounding and labelling configuration.\n\t * @returns Bigint amount scaled into base units.\n\t */\n\tfunction fromDecimal(value: number | string, options: ParseAmountOptions = {}): bigint {\n\t\tconst label = options.label ?? 'value';\n\t\tif (typeof value === 'number') {\n\t\t\tif (Number.isInteger(value)) {\n\t\t\t\tif (!Number.isSafeInteger(value)) {\n\t\t\t\t\tthrow new RangeError(`${label} must be within the safe integer range when provided as a number`);\n\t\t\t\t}\n\t\t\t\treturn fromBaseUnits(BigInt(value) * scale, label);\n\t\t\t}\n\t\t\tif (decimals === 0) {\n\t\t\t\tthrow new RangeError(`${label} cannot include fractional digits for a token with 0 decimals`);\n\t\t\t}\n\t\t\tconst normalized = normalizeNumberInput(value, decimals, label);\n\t\t\treturn decimalToBaseUnits(normalized, decimals, scale, options);\n\t\t}\n\t\treturn decimalToBaseUnits(value, decimals, scale, options);\n\t}\n\n\t/**\n\t * Formats a base-unit amount into a decimal display string.\n\t *\n\t * @param amount - Integer amount expressed in base units.\n\t * @param options - Formatting preferences for the output string.\n\t * @returns Decimal string representation of the amount.\n\t */\n\tfunction toDecimalString(amount: bigint, options: FormatAmountOptions = {}): string {\n\t\treturn formatBaseUnits(fromBaseUnits(amount), decimals, scale, options);\n\t}\n\n\t/**\n\t * Adds two base-unit amounts while preventing negative results.\n\t *\n\t * @param lhs - First operand in base units.\n\t * @param rhs - Second operand in base units.\n\t * @returns Sum of the operands.\n\t */\n\tfunction add(lhs: bigint, rhs: bigint): bigint {\n\t\treturn checkedAdd(fromBaseUnits(lhs), fromBaseUnits(rhs));\n\t}\n\n\t/**\n\t * Subtracts two base-unit amounts while preventing negative results.\n\t *\n\t * @param lhs - First operand in base units.\n\t * @param rhs - Second operand in base units.\n\t * @returns Difference of the operands.\n\t */\n\tfunction subtract(lhs: bigint, rhs: bigint): bigint {\n\t\treturn checkedSubtract(fromBaseUnits(lhs), fromBaseUnits(rhs));\n\t}\n\n\t/**\n\t * Applies a ratio to a base-unit amount.\n\t *\n\t * @param amount - Base amount to scale.\n\t * @param ratio - Ratio produced by {@link createRatio}.\n\t * @param options - Optional rounding configuration.\n\t * @returns Scaled bigint amount.\n\t */\n\tfunction multiplyByRatio(amount: bigint, ratio: Ratio, options?: ApplyRatioOptions): bigint {\n\t\treturn applyRatio(fromBaseUnits(amount), ratio, options);\n\t}\n\n\t/**\n\t * Returns whether the supplied base-unit amount is zero.\n\t *\n\t * @param amount - Amount to test for zero.\n\t * @returns `true` when the amount equals zero.\n\t */\n\tfunction isZero(amount: bigint): boolean {\n\t\treturn fromBaseUnits(amount) === 0n;\n\t}\n\n\t/**\n\t * Compares two base-unit amounts.\n\t *\n\t * @param lhs - First operand in base units.\n\t * @param rhs - Second operand in base units.\n\t * @returns `1`, `0`, or `-1` depending on the comparison result.\n\t */\n\tfunction compare(lhs: bigint, rhs: bigint): number {\n\t\tconst left = fromBaseUnits(lhs);\n\t\tconst right = fromBaseUnits(rhs);\n\t\tif (left > right) {\n\t\t\treturn 1;\n\t\t}\n\t\tif (left < right) {\n\t\t\treturn -1;\n\t\t}\n\t\treturn 0;\n\t}\n\n\treturn Object.freeze({\n\t\tadd,\n\t\tcompare,\n\t\tdecimals,\n\t\tfromBaseUnits,\n\t\tfromDecimal,\n\t\tisZero,\n\t\tmultiplyByRatio,\n\t\tscale,\n\t\tsubtract,\n\t\ttoDecimalString,\n\t});\n}\n","import type { Lamports } from '@solana/kit';\n\nimport { createTokenAmount, type FormatAmountOptions, type ParseAmountOptions, type TokenAmountMath } from './amounts';\nimport type { ApplyRatioOptions, Ratio } from './rational';\n\nconst BASE_LAMPORTS = createTokenAmount(9);\n\nexport const LAMPORTS_PER_SOL = BASE_LAMPORTS.scale;\n\nexport type LamportsMath = Readonly<{\n\tadd(lhs: Lamports, rhs: Lamports): Lamports;\n\tcompare(lhs: Lamports, rhs: Lamports): number;\n\tdecimals: number;\n\tfromLamports(value: bigint | number | string, label?: string): Lamports;\n\tfromSol(value: number | string, options?: ParseAmountOptions): Lamports;\n\tisZero(amount: Lamports): boolean;\n\tmultiplyByRatio(amount: Lamports, ratio: Ratio, options?: ApplyRatioOptions): Lamports;\n\traw: TokenAmountMath;\n\tscale: bigint;\n\tsubtract(lhs: Lamports, rhs: Lamports): Lamports;\n\ttoSolString(amount: Lamports, options?: FormatAmountOptions): string;\n}>;\n\n/**\n * Typed helpers for working with lamport-denominated values.\n */\nexport const lamportsMath: LamportsMath = Object.freeze({\n\t/**\n\t * Adds two lamport amounts.\n\t *\n\t * @param lhs - First lamport operand.\n\t * @param rhs - Second lamport operand.\n\t * @returns Sum as lamports.\n\t */\n\tadd(lhs, rhs) {\n\t\treturn BASE_LAMPORTS.add(lhs, rhs) as Lamports;\n\t},\n\t/**\n\t * Compares two lamport amounts.\n\t *\n\t * @param lhs - First lamport operand.\n\t * @param rhs - Second lamport operand.\n\t * @returns `1`, `0`, or `-1` corresponding to the comparison result.\n\t */\n\tcompare(lhs, rhs) {\n\t\treturn BASE_LAMPORTS.compare(lhs, rhs);\n\t},\n\tdecimals: BASE_LAMPORTS.decimals,\n\t/**\n\t * Validates and converts raw lamport inputs.\n\t *\n\t * @param value - Integer-like lamport amount.\n\t * @param label - Optional label used for error reporting.\n\t * @returns Normalized lamport bigint.\n\t */\n\tfromLamports(value, label) {\n\t\treturn BASE_LAMPORTS.fromBaseUnits(value, label) as Lamports;\n\t},\n\t/**\n\t * Converts SOL denominated values into lamports.\n\t *\n\t * @param value - Decimal representation of SOL.\n\t * @param options - Optional rounding and labelling configuration.\n\t * @returns Lamport amount.\n\t */\n\tfromSol(value, options) {\n\t\treturn BASE_LAMPORTS.fromDecimal(value, options) as Lamports;\n\t},\n\t/**\n\t * Determines whether a lamport amount equals zero.\n\t *\n\t * @param amount - Lamports to inspect.\n\t * @returns `true` when the amount is zero.\n\t */\n\tisZero(amount) {\n\t\treturn BASE_LAMPORTS.isZero(amount);\n\t},\n\t/**\n\t * Applies a ratio to lamports.\n\t *\n\t * @param amount - Lamport amount to scale.\n\t * @param ratio - Ratio produced by {@link createRatio}.\n\t * @param options - Optional rounding configuration.\n\t * @returns Scaled lamport amount.\n\t */\n\tmultiplyByRatio(amount, ratio, options) {\n\t\treturn BASE_LAMPORTS.multiplyByRatio(amount, ratio, options) as Lamports;\n\t},\n\traw: BASE_LAMPORTS,\n\tscale: BASE_LAMPORTS.scale,\n\t/**\n\t * Subtracts two lamport amounts.\n\t *\n\t * @param lhs - First lamport operand.\n\t * @param rhs - Second lamport operand.\n\t * @returns Difference as lamports.\n\t */\n\tsubtract(lhs, rhs) {\n\t\treturn BASE_LAMPORTS.subtract(lhs, rhs) as Lamports;\n\t},\n\t/**\n\t * Formats lamports into a human-readable SOL string.\n\t *\n\t * @param amount - Lamport amount to format.\n\t * @param options - Formatting preferences.\n\t * @returns SOL string representation.\n\t */\n\ttoSolString(amount, options) {\n\t\treturn BASE_LAMPORTS.toDecimalString(amount, options);\n\t},\n});\n\n/**\n * Shortcut for constructing lamport values from base units.\n *\n * @param value - Integer-like lamport amount.\n * @param label - Optional label used for error reporting.\n * @returns Normalized lamport bigint.\n */\nexport function lamports(value: bigint | number | string, label?: string): Lamports {\n\treturn lamportsMath.fromLamports(value, label);\n}\n\n/**\n * Converts an SOL-denominated value into lamports.\n *\n * @param value - Decimal representation of SOL.\n * @param options - Optional rounding and labelling configuration.\n * @returns Lamport amount.\n */\nexport function lamportsFromSol(value: number | string, options?: ParseAmountOptions): Lamports {\n\treturn lamportsMath.fromSol(value, options);\n}\n\n/**\n * Converts lamports into a human-readable SOL string.\n *\n * @param amount - Lamport amount to format.\n * @param options - Formatting preferences.\n * @returns SOL string representation.\n */\nexport function lamportsToSolString(amount: Lamports, options?: FormatAmountOptions): string {\n\treturn lamportsMath.toSolString(amount, options);\n}\n","import { getBase58Encoder } from '@solana/codecs-strings';\nimport {\n\ttype Commitment,\n\tisTransactionPartialSigner,\n\tisTransactionSendingSigner,\n\ttype SendableTransaction,\n\ttype SignatureBytes,\n\ttype SignatureDictionary,\n\tsignatureBytes,\n\ttype Transaction,\n\ttype TransactionModifyingSigner,\n\ttype TransactionPartialSigner,\n\ttype TransactionSendingSigner,\n\ttype TransactionSigner,\n\ttype TransactionWithinSizeLimit,\n\ttype TransactionWithLifetime,\n} from '@solana/kit';\n\nimport type { WalletSession } from '../types';\n\ntype WalletTransactionSignerMode = 'partial' | 'send';\n\nexport type WalletTransactionSigner = Readonly<{\n\tmode: WalletTransactionSignerMode;\n\tsigner: TransactionSigner;\n}>;\n\nexport type WalletTransactionSignerConfig = Readonly<{\n\tcommitment?: Commitment;\n}>;\n\n/** Type guard that determines whether the provided value is a {@link WalletSession}. */\nexport function isWalletSession(value: unknown): value is WalletSession {\n\tif (typeof value !== 'object' || value === null) {\n\t\treturn false;\n\t}\n\treturn 'account' in value && 'connector' in value && 'disconnect' in value;\n}\n\n/**\n * Creates a {@link TransactionSigner} wrapper around a {@link WalletSession}.\n *\n * The returned signer implements the most capable interface supported by the underlying wallet:\n * - if the wallet exposes `signTransaction`, a partial signer is returned;\n * - otherwise, if the wallet only exposes `sendTransaction`, a sending signer is returned.\n *\n * @param session - Connected wallet session used to sign or send transactions.\n * @param config - Optional configuration that propagates commitment preferences when the wallet sends transactions.\n * @returns Object containing the wrapped {@link TransactionSigner} and the strategy it supports.\n */\nexport function createWalletTransactionSigner(\n\tsession: WalletSession,\n\tconfig: WalletTransactionSignerConfig = {},\n): WalletTransactionSigner {\n\tconst { commitment } = config;\n\tconst address = session.account.address;\n\n\tif (session.signTransaction) {\n\t\tconst signTransaction = session.signTransaction.bind(session);\n\n\t\tconst modifyingSigner: TransactionModifyingSigner & TransactionPartialSigner = Object.freeze({\n\t\t\taddress,\n\t\t\tasync modifyAndSignTransactions(\n\t\t\t\ttransactions: readonly (Transaction | (Transaction & TransactionWithLifetime))[],\n\t\t\t): Promise<readonly (Transaction & TransactionWithinSizeLimit & TransactionWithLifetime)[]> {\n\t\t\t\tconst signedTransactions: (Transaction & TransactionWithinSizeLimit & TransactionWithLifetime)[] = [];\n\t\t\t\tfor (const transaction of transactions) {\n\t\t\t\t\tconst castTransaction = transaction as Transaction &\n\t\t\t\t\t\tTransactionWithinSizeLimit &\n\t\t\t\t\t\tTransactionWithLifetime;\n\t\t\t\t\tconst signed = await signTransaction(\n\t\t\t\t\t\tcastTransaction as unknown as SendableTransaction & Transaction,\n\t\t\t\t\t);\n\t\t\t\t\tconst signature = signed.signatures[address];\n\t\t\t\t\tif (!signature) {\n\t\t\t\t\t\tthrow new Error('Wallet did not populate the expected fee payer signature.');\n\t\t\t\t\t}\n\t\t\t\t\tconst mergedTransaction = Object.freeze({\n\t\t\t\t\t\t...castTransaction,\n\t\t\t\t\t\tmessageBytes: signed.messageBytes,\n\t\t\t\t\t\tsignatures: Object.freeze({\n\t\t\t\t\t\t\t...castTransaction.signatures,\n\t\t\t\t\t\t\t...signed.signatures,\n\t\t\t\t\t\t}),\n\t\t\t\t\t}) as Transaction & TransactionWithinSizeLimit & TransactionWithLifetime;\n\t\t\t\t\tsignedTransactions.push(mergedTransaction);\n\t\t\t\t}\n\t\t\t\treturn Object.freeze(signedTransactions) as readonly (Transaction &\n\t\t\t\t\tTransactionWithinSizeLimit &\n\t\t\t\t\tTransactionWithLifetime)[];\n\t\t\t},\n\t\t\tasync signTransactions(\n\t\t\t\ttransactions: readonly (Transaction & TransactionWithinSizeLimit & TransactionWithLifetime)[],\n\t\t\t): Promise<readonly SignatureDictionary[]> {\n\t\t\t\tconst signedTransactions = await this.modifyAndSignTransactions(transactions);\n\t\t\t\treturn Object.freeze(\n\t\t\t\t\tsignedTransactions.map((signedTransaction) => {\n\t\t\t\t\t\tconst signature = signedTransaction.signatures[address];\n\t\t\t\t\t\tif (!signature) {\n\t\t\t\t\t\t\tthrow new Error('Expected signer to produce a signature for the provided address.');\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn Object.freeze({ [address]: signature });\n\t\t\t\t\t}),\n\t\t\t\t) as readonly SignatureDictionary[];\n\t\t\t},\n\t\t});\n\n\t\treturn {\n\t\t\tmode: 'partial',\n\t\t\tsigner: modifyingSigner,\n\t\t};\n\t}\n\n\tif (session.sendTransaction) {\n\t\tconst base58Encoder = getBase58Encoder();\n\t\tconst sendTransaction = session.sendTransaction.bind(session);\n\t\tconst sendingSigner: TransactionSendingSigner = Object.freeze({\n\t\t\taddress,\n\t\t\tasync signAndSendTransactions(\n\t\t\t\ttransactions: readonly (Transaction | (Transaction & TransactionWithLifetime))[],\n\t\t\t): Promise<readonly SignatureBytes[]> {\n\t\t\t\tconst signatures: SignatureBytes[] = [];\n\t\t\t\tfor (const transaction of transactions) {\n\t\t\t\t\tconst signatureString = await sendTransaction(\n\t\t\t\t\t\ttransaction as unknown as SendableTransaction & Transaction,\n\t\t\t\t\t\tcommitment ? { commitment } : undefined,\n\t\t\t\t\t);\n\t\t\t\t\tconst bytes = base58Encoder.encode(signatureString);\n\t\t\t\t\tsignatures.push(signatureBytes(bytes));\n\t\t\t\t}\n\t\t\t\treturn signatures;\n\t\t\t},\n\t\t});\n\t\treturn {\n\t\t\tmode: 'send',\n\t\t\tsigner: sendingSigner,\n\t\t};\n\t}\n\n\tthrow new Error('Wallet session does not support signing or sending transactions.');\n}\n\n/**\n * Resolves the most capable signing strategy for a {@link TransactionSigner}.\n *\n * @param signer - Arbitrary transaction signer.\n * @returns Strategy descriptor indicating whether the signer can partially sign transactions.\n */\nexport function resolveSignerMode(signer: TransactionSigner): WalletTransactionSignerMode {\n\tif (isTransactionPartialSigner(signer)) {\n\t\treturn 'partial';\n\t}\n\tif (isTransactionSendingSigner(signer)) {\n\t\treturn 'send';\n\t}\n\t// Default to partial mode so downstream helpers can attempt to sign transactions.\n\treturn 'partial';\n}\n","import { getBase58Decoder } from '@solana/codecs-strings';\nimport {\n\ttype Address,\n\taddress,\n\tappendTransactionMessageInstruction,\n\ttype Blockhash,\n\ttype Commitment,\n\tcreateTransactionMessage,\n\tcreateTransactionPlanExecutor,\n\tgetBase64EncodedWireTransaction,\n\tisTransactionSendingSigner,\n\tpipe,\n\ttype Slot,\n\tsetTransactionMessageFeePayer,\n\tsetTransactionMessageLifetimeUsingBlockhash,\n\tsignAndSendTransactionMessageWithSigners,\n\tsignature,\n\tsignTransactionMessageWithSigners,\n\tsingleTransactionPlan,\n\ttype TransactionPlan,\n\ttype TransactionSigner,\n\ttype TransactionVersion,\n} from '@solana/kit';\nimport { getTransferSolInstruction } from '@solana-program/system';\n\nimport { lamportsMath } from '../numeric/lamports';\nimport { createWalletTransactionSigner, isWalletSession, resolveSignerMode } from '../signers/walletTransactionSigner';\nimport type { SolanaClientRuntime, WalletSession } from '../types';\n\ntype BlockhashLifetime = Readonly<{\n\tblockhash: Blockhash;\n\tlastValidBlockHeight: bigint;\n}>;\n\ntype SolTransferAmount = bigint | number | string;\n\ntype SolTransferAuthority = TransactionSigner<string> | WalletSession;\n\ntype SignableSolTransactionMessage = Parameters<typeof signTransactionMessageWithSigners>[0];\n\nexport type SolTransferPrepareConfig = Readonly<{\n\tamount: SolTransferAmount;\n\tauthority: SolTransferAuthority;\n\tcommitment?: Commitment;\n\tdestination: Address | string;\n\tlifetime?: BlockhashLifetime;\n\ttransactionVersion?: TransactionVersion;\n}>;\n\nexport type SolTransferSendOptions = Readonly<{\n\tabortSignal?: AbortSignal;\n\tcommitment?: Commitment;\n\tmaxRetries?: bigint | number;\n\tminContextSlot?: Slot;\n\tskipPreflight?: boolean;\n}>;\n\ntype PreparedSolTransfer = Readonly<{\n\tcommitment?: Commitment;\n\tlifetime: BlockhashLifetime;\n\tmessage: SignableSolTransactionMessage;\n\tmode: 'partial' | 'send';\n\tsigner: TransactionSigner;\n\tplan?: TransactionPlan;\n}>;\n\nfunction ensureAddress(value: Address | string): Address {\n\treturn typeof value === 'string' ? address(value) : value;\n}\n\nasync function resolveLifetime(\n\truntime: SolanaClientRuntime,\n\tcommitment?: Commitment,\n\tfallback?: BlockhashLifetime,\n): Promise<BlockhashLifetime> {\n\tif (fallback) {\n\t\treturn fallback;\n\t}\n\tconst { value } = await runtime.rpc.getLatestBlockhash({ commitment }).send();\n\treturn value;\n}\n\nfunction resolveSigner(\n\tauthority: SolTransferAuthority,\n\tcommitment?: Commitment,\n): { mode: 'partial' | 'send'; signer: TransactionSigner } {\n\tif (isWalletSession(authority)) {\n\t\tconst { signer, mode } = createWalletTransactionSigner(authority, { commitment });\n\t\treturn { mode, signer };\n\t}\n\treturn { mode: resolveSignerMode(authority), signer: authority };\n}\n\nfunction toLamportAmount(input: SolTransferAmount): bigint {\n\treturn lamportsMath.fromLamports(input);\n}\n\nexport type SolTransferHelper = Readonly<{\n\tprepareTransfer(config: SolTransferPrepareConfig): Promise<PreparedSolTransfer>;\n\tsendPreparedTransfer(\n\t\tprepared: PreparedSolTransfer,\n\t\toptions?: SolTransferSendOptions,\n\t): Promise<ReturnType<typeof signature>>;\n\tsendTransfer(\n\t\tconfig: SolTransferPrepareConfig,\n\t\toptions?: SolTransferSendOptions,\n\t): Promise<ReturnType<typeof signature>>;\n}>;\n\n/** Creates documented helpers that build and submit System Program SOL transfers. */\nexport function createSolTransferHelper(runtime: SolanaClientRuntime): SolTransferHelper {\n\tasync function prepareTransfer(config: SolTransferPrepareConfig): Promise<PreparedSolTransfer> {\n\t\tconst commitment = config.commitment;\n\t\tconst lifetime = await resolveLifetime(runtime, commitment, config.lifetime);\n\t\tconst { signer, mode } = resolveSigner(config.authority, commitment);\n\t\tconst destination = ensureAddress(config.destination);\n\t\tconst amount = toLamportAmount(config.amount);\n\n\t\tconst message = pipe(\n\t\t\tcreateTransactionMessage({ version: config.transactionVersion ?? 0 }),\n\t\t\t(m) => setTransactionMessageFeePayer(signer.address, m),\n\t\t\t(m) => setTransactionMessageLifetimeUsingBlockhash(lifetime, m),\n\t\t\t(m) =>\n\t\t\t\tappendTransactionMessageInstruction(\n\t\t\t\t\tgetTransferSolInstruction({ amount, destination, source: signer }),\n\t\t\t\t\tm,\n\t\t\t\t),\n\t\t);\n\n\t\treturn {\n\t\t\tcommitment,\n\t\t\tlifetime,\n\t\t\tmessage,\n\t\t\tmode,\n\t\t\tsigner,\n\t\t\tplan: singleTransactionPlan(message),\n\t\t};\n\t}\n\n\tasync function sendPreparedTransfer(\n\t\tprepared: PreparedSolTransfer,\n\t\toptions: SolTransferSendOptions = {},\n\t): Promise<ReturnType<typeof signature>> {\n\t\tif (prepared.mode === 'send' && isTransactionSendingSigner(prepared.signer)) {\n\t\t\tconst signatureBytes = await signAndSendTransactionMessageWithSigners(prepared.message, {\n\t\t\t\tabortSignal: options.abortSignal,\n\t\t\t\tminContextSlot: options.minContextSlot,\n\t\t\t});\n\t\t\tconst base58Decoder = getBase58Decoder();\n\t\t\treturn signature(base58Decoder.decode(signatureBytes));\n\t\t}\n\n\t\tconst commitment = options.commitment ?? prepared.commitment;\n\t\tconst maxRetries =\n\t\t\toptions.maxRetries === undefined\n\t\t\t\t? undefined\n\t\t\t\t: typeof options.maxRetries === 'bigint'\n\t\t\t\t\t? options.maxRetries\n\t\t\t\t\t: BigInt(options.maxRetries);\n\t\tlet latestSignature: ReturnType<typeof signature> | null = null;\n\t\tconst executor = createTransactionPlanExecutor({\n\t\t\tasync executeTransactionMessage(message, config = {}) {\n\t\t\t\tconst signed = await signTransactionMessageWithSigners(message as SignableSolTransactionMessage, {\n\t\t\t\t\tabortSignal: config.abortSignal ?? options.abortSignal,\n\t\t\t\t\tminContextSlot: options.minContextSlot,\n\t\t\t\t});\n\t\t\t\tconst wire = getBase64EncodedWireTransaction(signed);\n\t\t\t\tconst response = await runtime.rpc\n\t\t\t\t\t.sendTransaction(wire, {\n\t\t\t\t\t\tencoding: 'base64',\n\t\t\t\t\t\tmaxRetries,\n\t\t\t\t\t\tpreflightCommitment: commitment,\n\t\t\t\t\t\tskipPreflight: options.skipPreflight,\n\t\t\t\t\t})\n\t\t\t\t\t.send({ abortSignal: config.abortSignal ?? options.abortSignal });\n\t\t\t\tlatestSignature = signature(response);\n\t\t\t\treturn { transaction: signed };\n\t\t\t},\n\t\t});\n\t\tawait executor(prepared.plan ?? singleTransactionPlan(prepared.message), { abortSignal: options.abortSignal });\n\t\tif (!latestSignature) {\n\t\t\tthrow new Error('Failed to resolve transaction signature.');\n\t\t}\n\t\treturn latestSignature;\n\t}\n\n\tasync function sendTransfer(\n\t\tconfig: SolTransferPrepareConfig,\n\t\toptions?: SolTransferSendOptions,\n\t): Promise<ReturnType<typeof signature>> {\n\t\tconst prepared = await prepareTransfer(config);\n\t\treturn await sendPreparedTransfer(prepared, options);\n\t}\n\n\treturn {\n\t\tprepareTransfer,\n\t\tsendPreparedTransfer,\n\t\tsendTransfer,\n\t};\n}\n","import { getBase58Decoder } from '@solana/codecs-strings';\nimport {\n\ttype Address,\n\taddress,\n\tappendTransactionMessageInstruction,\n\ttype Blockhash,\n\ttype Commitment,\n\tcreateTransactionMessage,\n\tcreateTransactionPlanExecutor,\n\tgetBase64EncodedWireTransaction,\n\tisSolanaError,\n\tisTransactionSendingSigner,\n\tpipe,\n\tSOLANA_ERROR__TRANSACTION_ERROR__ALREADY_PROCESSED,\n\tsetTransactionMessageFeePayer,\n\tsetTransactionMessageLifetimeUsingBlockhash,\n\tsignAndSendTransactionMessageWithSigners,\n\tsignature,\n\tsignTransactionMessageWithSigners,\n\tsingleTransactionPlan,\n\ttype TransactionPlan,\n\ttype TransactionSigner,\n\ttype TransactionVersion,\n} from '@solana/kit';\nimport {\n\tfetchMint,\n\tfindAssociatedTokenPda,\n\tgetCreateAssociatedTokenInstruction,\n\tgetTransferCheckedInstruction,\n\tTOKEN_PROGRAM_ADDRESS,\n} from '@solana-program/token';\n\nimport { createTokenAmount, type TokenAmountMath } from '../numeric/amounts';\nimport { createWalletTransactionSigner, isWalletSession, resolveSignerMode } from '../signers/walletTransactionSigner';\nimport type { SolanaClientRuntime, WalletSession } from '../types';\nimport type { SolTransferSendOptions } from './sol';\n\ntype BlockhashLifetime = Readonly<{\n\tblockhash: Blockhash;\n\tlastValidBlockHeight: bigint;\n}>;\n\ntype SplTokenAuthority = TransactionSigner<string> | WalletSession;\n\ntype SignableSplTransactionMessage = Parameters<typeof signTransactionMessageWithSigners>[0];\n\nexport type SplTokenHelperConfig = Readonly<{\n\tassociatedTokenProgram?: Address | string;\n\tcommitment?: Commitment;\n\tdecimals?: number;\n\tmint: Address | string;\n\ttokenProgram?: Address | string;\n}>;\n\nexport type SplTokenBalance = Readonly<{\n\tamount: bigint;\n\tataAddress: Address;\n\tdecimals: number;\n\texists: boolean;\n\tuiAmount: string;\n}>;\n\nexport type SplTransferPrepareConfig = Readonly<{\n\tamount: bigint | number | string;\n\tamountInBaseUnits?: boolean;\n\tauthority: SplTokenAuthority;\n\tcommitment?: Commitment;\n\tdestinationOwner: Address | string;\n\tdestinationToken?: Address | string;\n\tensureDestinationAta?: boolean;\n\tlifetime?: BlockhashLifetime;\n\tsourceOwner?: Address | string;\n\tsourceToken?: Address | string;\n\ttransactionVersion?: TransactionVersion;\n}>;\n\ntype PreparedSplTransfer = Readonly<{\n\tamount: bigint;\n\tcommitment?: Commitment;\n\tdecimals: number;\n\tdestinationAta: Address;\n\tlifetime: BlockhashLifetime;\n\tmessage: SignableSplTransactionMessage;\n\tmode: 'partial' | 'send';\n\tsigner: TransactionSigner;\n\tsourceAta: Address;\n\tplan?: TransactionPlan;\n}>;\n\nfunction ensureAddress(value: Address | string | undefined, fallback?: Address): Address {\n\tif (value) {\n\t\treturn typeof value === 'string' ? address(value) : value;\n\t}\n\tif (!fallback) {\n\t\tthrow new Error('An address value was expected but not provided.');\n\t}\n\treturn fallback;\n}\n\nasync function resolveLifetime(\n\truntime: SolanaClientRuntime,\n\tcommitment?: Commitment,\n\tfallback?: BlockhashLifetime,\n): Promise<BlockhashLifetime> {\n\tif (fallback) {\n\t\treturn fallback;\n\t}\n\tconst { value } = await runtime.rpc.getLatestBlockhash({ commitment }).send();\n\treturn value;\n}\n\nfunction resolveSigner(\n\tauthority: SplTokenAuthority,\n\tcommitment?: Commitment,\n): { mode: 'partial' | 'send'; signer: TransactionSigner } {\n\tif (isWalletSession(authority)) {\n\t\tconst { signer, mode } = createWalletTransactionSigner(authority, { commitment });\n\t\treturn { mode, signer };\n\t}\n\treturn { mode: resolveSignerMode(authority), signer: authority };\n}\n\nexport type SplTokenHelper = Readonly<{\n\tderiveAssociatedTokenAddress(owner: Address | string): Promise<Address>;\n\tfetchBalance(owner: Address | string, commitment?: Commitment): Promise<SplTokenBalance>;\n\tprepareTransfer(config: SplTransferPrepareConfig): Promise<PreparedSplTransfer>;\n\tsendPreparedTransfer(\n\t\tprepared: PreparedSplTransfer,\n\t\toptions?: SolTransferSendOptions,\n\t): Promise<ReturnType<typeof signature>>;\n\tsendTransfer(\n\t\tconfig: SplTransferPrepareConfig,\n\t\toptions?: SolTransferSendOptions,\n\t): Promise<ReturnType<typeof signature>>;\n}>;\n\n/** Creates helpers dedicated to SPL token account discovery, balances, and transfers. */\nexport function createSplTokenHelper(runtime: SolanaClientRuntime, config: SplTokenHelperConfig): SplTokenHelper {\n\tconst mintAddress = ensureAddress(config.mint);\n\tconst tokenProgram = ensureAddress(config.tokenProgram, address(TOKEN_PROGRAM_ADDRESS));\n\n\tlet cachedDecimals: number | undefined = config.decimals;\n\tlet cachedMath: TokenAmountMath | undefined;\n\n\tasync function resolveDecimals(commitment?: Commitment): Promise<number> {\n\t\tif (cachedDecimals !== undefined) {\n\t\t\treturn cachedDecimals;\n\t\t}\n\t\tconst account = await fetchMint(runtime.rpc, mintAddress, { commitment });\n\t\tcachedDecimals = account.data.decimals;\n\t\treturn cachedDecimals;\n\t}\n\n\tasync function getTokenMath(commitment?: Commitment): Promise<TokenAmountMath> {\n\t\tif (cachedMath) {\n\t\t\treturn cachedMath;\n\t\t}\n\t\tconst decimals = await resolveDecimals(commitment);\n\t\tcachedMath = createTokenAmount(decimals);\n\t\treturn cachedMath;\n\t}\n\n\tasync function deriveAssociatedTokenAddress(owner: Address | string): Promise<Address> {\n\t\tconst [ata] = await findAssociatedTokenPda({\n\t\t\tmint: mintAddress,\n\t\t\towner: ensureAddress(owner),\n\t\t\ttokenProgram,\n\t\t});\n\t\treturn ata;\n\t}\n\n\tasync function fetchBalance(owner: Address | string, commitment?: Commitment): Promise<SplTokenBalance> {\n\t\tconst ataAddress = await deriveAssociatedTokenAddress(owner);\n\t\tconst decimals = await resolveDecimals(commitment);\n\t\ttry {\n\t\t\tconst { value } = await runtime.rpc.getTokenAccountBalance(ataAddress, { commitment }).send();\n\t\t\tconst math = await getTokenMath(commitment);\n\t\t\tconst amount = math.fromBaseUnits(value.amount, 'balance');\n\t\t\tconst uiAmount = value.uiAmountString ?? value.amount;\n\t\t\treturn {\n\t\t\t\tamount,\n\t\t\t\tataAddress,\n\t\t\t\tdecimals,\n\t\t\t\texists: true,\n\t\t\t\tuiAmount,\n\t\t\t};\n\t\t} catch {\n\t\t\treturn {\n\t\t\t\tamount: 0n,\n\t\t\t\tataAddress,\n\t\t\t\tdecimals,\n\t\t\t\texists: false,\n\t\t\t\tuiAmount: '0',\n\t\t\t};\n\t\t}\n\t}\n\n\tasync function prepareTransfer(config: SplTransferPrepareConfig): Promise<PreparedSplTransfer> {\n\t\tconst commitment = config.commitment;\n\t\tconst lifetime = await resolveLifetime(runtime, commitment, config.lifetime);\n\t\tconst { signer, mode } = resolveSigner(config.authority, commitment);\n\t\tconst sourceOwner = ensureAddress(config.sourceOwner, signer.address);\n\t\tconst destinationOwner = ensureAddress(config.destinationOwner);\n\n\t\tconst sourceAta = ensureAddress(config.sourceToken, await deriveAssociatedTokenAddress(sourceOwner));\n\t\tconst destinationAta = ensureAddress(\n\t\t\tconfig.destinationToken,\n\t\t\tawait deriveAssociatedTokenAddress(destinationOwner),\n\t\t);\n\n\t\tconst math = await getTokenMath(commitment);\n\t\tconst decimals = await resolveDecimals(commitment);\n\t\tconst amount = config.amountInBaseUnits\n\t\t\t? math.fromBaseUnits(config.amount, 'amount')\n\t\t\t: math.fromDecimal(config.amount as number | string, { label: 'amount' });\n\n\t\tconst instructionList: Parameters<typeof appendTransactionMessageInstruction>[0][] = [];\n\t\tif (config.ensureDestinationAta ?? true) {\n\t\t\tconst { value } = await runtime.rpc\n\t\t\t\t.getAccountInfo(destinationAta, {\n\t\t\t\t\tcommitment,\n\t\t\t\t\tdataSlice: { length: 0, offset: 0 },\n\t\t\t\t\tencoding: 'base64',\n\t\t\t\t})\n\t\t\t\t.send();\n\t\t\tif (!value) {\n\t\t\t\tinstructionList.push(\n\t\t\t\t\tgetCreateAssociatedTokenInstruction({\n\t\t\t\t\t\tata: destinationAta,\n\t\t\t\t\t\tmint: mintAddress,\n\t\t\t\t\t\towner: destinationOwner,\n\t\t\t\t\t\tpayer: signer,\n\t\t\t\t\t\ttokenProgram,\n\t\t\t\t\t}),\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tinstructionList.push(\n\t\t\tgetTransferCheckedInstruction({\n\t\t\t\tamount,\n\t\t\t\tauthority: signer,\n\t\t\t\tdecimals,\n\t\t\t\tdestination: destinationAta,\n\t\t\t\tmint: mintAddress,\n\t\t\t\tsource: sourceAta,\n\t\t\t}),\n\t\t);\n\n\t\tlet message: SignableSplTransactionMessage = pipe(\n\t\t\tcreateTransactionMessage({ version: config.transactionVersion ?? 0 }),\n\t\t\t(m) => setTransactionMessageFeePayer(signer.address, m),\n\t\t\t(m) => setTransactionMessageLifetimeUsingBlockhash(lifetime, m),\n\t\t);\n\n\t\tfor (const instruction of instructionList) {\n\t\t\tmessage = appendTransactionMessageInstruction(instruction, message);\n\t\t}\n\n\t\treturn {\n\t\t\tamount,\n\t\t\tcommitment,\n\t\t\tdecimals,\n\t\t\tdestinationAta,\n\t\t\tlifetime,\n\t\t\tmessage,\n\t\t\tmode,\n\t\t\tsigner,\n\t\t\tsourceAta,\n\t\t\tplan: singleTransactionPlan(message),\n\t\t};\n\t}\n\n\tasync function sendPreparedTransfer(\n\t\tprepared: PreparedSplTransfer,\n\t\toptions: SolTransferSendOptions = {},\n\t): Promise<ReturnType<typeof signature>> {\n\t\tif (prepared.mode === 'send' && isTransactionSendingSigner(prepared.signer)) {\n\t\t\tconst signatureBytes = await signAndSendTransactionMessageWithSigners(prepared.message, {\n\t\t\t\tabortSignal: options.abortSignal,\n\t\t\t\tminContextSlot: options.minContextSlot,\n\t\t\t});\n\t\t\tconst base58Decoder = getBase58Decoder();\n\t\t\treturn signature(base58Decoder.decode(signatureBytes));\n\t\t}\n\n\t\tconst commitment = options.commitment ?? prepared.commitment;\n\t\tconst maxRetries =\n\t\t\toptions.maxRetries === undefined\n\t\t\t\t? undefined\n\t\t\t\t: typeof options.maxRetries === 'bigint'\n\t\t\t\t\t? options.maxRetries\n\t\t\t\t\t: BigInt(options.maxRetries);\n\t\tlet latestSignature: ReturnType<typeof signature> | null = null;\n\t\tconst executor = createTransactionPlanExecutor({\n\t\t\tasync executeTransactionMessage(message, config = {}) {\n\t\t\t\tconst signed = await signTransactionMessageWithSigners(message as SignableSplTransactionMessage, {\n\t\t\t\t\tabortSignal: config.abortSignal ?? options.abortSignal,\n\t\t\t\t\tminContextSlot: options.minContextSlot,\n\t\t\t\t});\n\t\t\t\tconst wire = getBase64EncodedWireTransaction(signed);\n\t\t\t\tconst response = await runtime.rpc\n\t\t\t\t\t.sendTransaction(wire, {\n\t\t\t\t\t\tencoding: 'base64',\n\t\t\t\t\t\tmaxRetries,\n\t\t\t\t\t\tpreflightCommitment: commitment,\n\t\t\t\t\t\tskipPreflight: options.skipPreflight,\n\t\t\t\t\t})\n\t\t\t\t\t.send({ abortSignal: config.abortSignal ?? options.abortSignal });\n\t\t\t\tlatestSignature = signature(response);\n\t\t\t\treturn { transaction: signed };\n\t\t\t},\n\t\t});\n\t\tawait executor(prepared.plan ?? singleTransactionPlan(prepared.message), { abortSignal: options.abortSignal });\n\t\tif (!latestSignature) {\n\t\t\tthrow new Error('Failed to resolve transaction signature.');\n\t\t}\n\t\treturn latestSignature;\n\t}\n\n\tasync function sendTransfer(\n\t\tconfig: SplTransferPrepareConfig,\n\t\toptions?: SolTransferSendOptions,\n\t): Promise<ReturnType<typeof signature>> {\n\t\tconst prepared = await prepareTransfer(config);\n\t\ttry {\n\t\t\treturn await sendPreparedTransfer(prepared, options);\n\t\t} catch (error) {\n\t\t\tif (isSolanaError(error, SOLANA_ERROR__TRANSACTION_ERROR__ALREADY_PROCESSED)) {\n\t\t\t\tconst retriedPrepared = await prepareTransfer({ ...config, lifetime: undefined });\n\t\t\t\treturn await sendPreparedTransfer(retriedPrepared, options);\n\t\t\t}\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\treturn {\n\t\tderiveAssociatedTokenAddress,\n\t\tfetchBalance,\n\t\tprepareTransfer,\n\t\tsendPreparedTransfer,\n\t\tsendTransfer,\n\t};\n}\n","import { getBase58Decoder } from '@solana/codecs-strings';\nimport {\n\ttype Address,\n\taddress,\n\tappendTransactionMessageInstructions,\n\ttype Base58EncodedBytes,\n\ttype Blockhash,\n\ttype Commitment,\n\tcreateTransactionMessage,\n\tcreateTransactionPlanExecutor,\n\tgenerateKeyPairSigner,\n\tgetBase64EncodedWireTransaction,\n\tisTransactionSendingSigner,\n\tpipe,\n\ttype Slot,\n\tsetTransactionMessageFeePayer,\n\tsetTransactionMessageLifetimeUsingBlockhash,\n\tsignAndSendTransactionMessageWithSigners,\n\tsignature,\n\tsignTransactionMessageWithSigners,\n\tsingleTransactionPlan,\n\ttype TransactionPlan,\n\ttype TransactionSigner,\n\ttype TransactionVersion,\n} from '@solana/kit';\nimport {\n\tgetDeactivateInstruction,\n\tgetDelegateStakeInstruction,\n\tgetInitializeInstruction,\n\tgetWithdrawInstruction,\n} from '@solana-program/stake';\nimport { getCreateAccountInstruction } from '@solana-program/system';\n\nimport { lamportsMath } from '../numeric/lamports';\nimport { createWalletTransactionSigner, isWalletSession, resolveSignerMode } from '../signers/walletTransactionSigner';\nimport type { SolanaClientRuntime, WalletSession } from '../types';\n\ntype BlockhashLifetime = Readonly<{\n\tblockhash: Blockhash;\n\tlastValidBlockHeight: bigint;\n}>;\n\ntype StakeAmount = bigint | number | string;\n\ntype StakeAuthority = TransactionSigner<string> | WalletSession;\n\nexport type StakeAccount = {\n\tpubkey: Address;\n\taccount: {\n\t\tdata: {\n\t\t\tparsed: {\n\t\t\t\tinfo: {\n\t\t\t\t\tstake?: {\n\t\t\t\t\t\tdelegation?: {\n\t\t\t\t\t\t\tvoter: string;\n\t\t\t\t\t\t\tstake: string;\n\t\t\t\t\t\t\tactivationEpoch: string;\n\t\t\t\t\t\t\tdeactivationEpoch: string;\n\t\t\t\t\t\t};\n\t\t\t\t\t};\n\t\t\t\t\tmeta?: {\n\t\t\t\t\t\trentExemptReserve: string;\n\t\t\t\t\t\tauthorized: {\n\t\t\t\t\t\t\tstaker: string;\n\t\t\t\t\t\t\twithdrawer: string;\n\t\t\t\t\t\t};\n\t\t\t\t\t\tlockup: {\n\t\t\t\t\t\t\tunixTimestamp: number;\n\t\t\t\t\t\t\tepoch: number;\n\t\t\t\t\t\t\tcustodian: string;\n\t\t\t\t\t\t};\n\t\t\t\t\t};\n\t\t\t\t};\n\t\t\t};\n\t\t};\n\t\tlamports: bigint;\n\t};\n};\n\ntype SignableStakeTransactionMessage = Parameters<typeof signTransactionMessageWithSigners>[0];\n\n// Stake Program constants\nconst STAKE_PROGRAM_ID: Address = 'Stake11111111111111111111111111111111111111' as Address;\nconst SYSVAR_CLOCK: Address = 'SysvarC1ock11111111111111111111111111111111' as Address;\nconst SYSVAR_STAKE_HISTORY: Address = 'SysvarStakeHistory1111111111111111111111111' as Address;\nconst UNUSED_STAKE_CONFIG_ACC: Address = 'StakeConfig11111111111111111111111111111111' as Address;\nconst STAKE_STATE_LEN = 200;\n\nexport type StakePrepareConfig = Readonly<{\n\tamount: StakeAmount;\n\tauthority: StakeAuthority;\n\tcommitment?: Commitment;\n\tlifetime?: BlockhashLifetime;\n\ttransactionVersion?: TransactionVersion;\n\tvalidatorId: Address | string;\n}>;\n\nexport type StakeSendOptions = Readonly<{\n\tabortSignal?: AbortSignal;\n\tcommitment?: Commitment;\n\tmaxRetries?: bigint | number;\n\tminContextSlot?: Slot;\n\tskipPreflight?: boolean;\n}>;\n\nexport type UnstakePrepareConfig = Readonly<{\n\tauthority: StakeAuthority;\n\tcommitment?: Commitment;\n\tlifetime?: BlockhashLifetime;\n\tstakeAccount: Address | string;\n\ttransactionVersion?: TransactionVersion;\n}>;\n\nexport type UnstakeSendOptions = StakeSendOptions;\n\nexport type WithdrawPrepareConfig = Readonly<{\n\tamount: StakeAmount;\n\tauthority: StakeAuthority;\n\tcommitment?: Commitment;\n\tdestination: Address | string;\n\tlifetime?: BlockhashLifetime;\n\tstakeAccount: Address | string;\n\ttransactionVersion?: TransactionVersion;\n}>;\n\nexport type WithdrawSendOptions = StakeSendOptions;\n\ntype PreparedUnstake = Readonly<{\n\tcommitment?: Commitment;\n\tlifetime: BlockhashLifetime;\n\tmessage: SignableStakeTransactionMessage;\n\tmode: 'partial' | 'send';\n\tplan: TransactionPlan;\n\tsigner: TransactionSigner<string>;\n}>;\n\ntype PreparedWithdraw = Readonly<{\n\tcommitment?: Commitment;\n\tlifetime: BlockhashLifetime;\n\tmessage: SignableStakeTransactionMessage;\n\tmode: 'partial' | 'send';\n\tplan: TransactionPlan;\n\tsigner: TransactionSigner<string>;\n}>;\n\ntype PreparedStake = Readonly<{\n\tcommitment?: Commitment;\n\tlifetime: BlockhashLifetime;\n\tmessage: SignableStakeTransactionMessage;\n\tmode: 'partial' | 'send';\n\tsigner: TransactionSigner;\n\tplan?: TransactionPlan;\n\tstakeAccount: TransactionSigner<string>;\n}>;\n\nfunction ensureAddress(value: Address | string): Address {\n\treturn typeof value === 'string' ? address(value) : value;\n}\n\nasync function resolveLifetime(\n\truntime: SolanaClientRuntime,\n\tcommitment?: Commitment,\n\tfallback?: BlockhashLifetime,\n): Promise<BlockhashLifetime> {\n\tif (fallback) {\n\t\treturn fallback;\n\t}\n\tconst { value } = await runtime.rpc.getLatestBlockhash({ commitment }).send();\n\treturn value;\n}\n\nfunction resolveSigner(\n\tauthority: StakeAuthority,\n\tcommitment?: Commitment,\n): { mode: 'partial' | 'send'; signer: TransactionSigner } {\n\tif (isWalletSession(authority)) {\n\t\tconst { signer, mode } = createWalletTransactionSigner(authority, { commitment });\n\t\treturn { mode, signer };\n\t}\n\treturn { mode: resolveSignerMode(authority), signer: authority };\n}\n\nfunction toLamportAmount(input: StakeAmount): bigint {\n\treturn lamportsMath.fromLamports(input);\n}\n\nexport type StakeHelper = Readonly<{\n\tgetStakeAccounts(wallet: Address | string, validatorId?: Address | string): Promise<StakeAccount[]>;\n\tprepareStake(config: StakePrepareConfig): Promise<PreparedStake>;\n\tprepareUnstake(config: UnstakePrepareConfig): Promise<PreparedUnstake>;\n\tprepareWithdraw(config: WithdrawPrepareConfig): Promise<PreparedWithdraw>;\n\tsendPreparedStake(prepared: PreparedStake, options?: StakeSendOptions): Promise<ReturnType<typeof signature>>;\n\tsendPreparedUnstake(prepared: PreparedUnstake, options?: UnstakeSendOptions): Promise<ReturnType<typeof signature>>;\n\tsendPreparedWithdraw(\n\t\tprepared: PreparedWithdraw,\n\t\toptions?: WithdrawSendOptions,\n\t): Promise<ReturnType<typeof signature>>;\n\tsendStake(config: StakePrepareConfig, options?: StakeSendOptions): Promise<ReturnType<typeof signature>>;\n\tsendUnstake(config: UnstakePrepareConfig, options?: UnstakeSendOptions): Promise<ReturnType<typeof signature>>;\n\tsendWithdraw(config: WithdrawPrepareConfig, options?: WithdrawSendOptions): Promise<ReturnType<typeof signature>>;\n}>;\n\n/** Creates helpers that build and submit native SOL staking transactions. */\nexport function createStakeHelper(runtime: SolanaClientRuntime): StakeHelper {\n\tasync function prepareStake(config: StakePrepareConfig): Promise<PreparedStake> {\n\t\tconst commitment = config.commitment;\n\t\tconst lifetime = await resolveLifetime(runtime, commitment, config.lifetime);\n\t\tconst { signer, mode } = resolveSigner(config.authority, commitment);\n\t\tconst validatorAddress = ensureAddress(config.validatorId);\n\t\tconst amount = toLamportAmount(config.amount);\n\n\t\t// Get rent exemption for stake account\n\t\tconst rentExempt = await runtime.rpc.getMinimumBalanceForRentExemption(BigInt(STAKE_STATE_LEN)).send();\n\n\t\tconst totalLamports = rentExempt + amount;\n\n\t\t// Generate a new stake account\n\t\tconst stakeAccount = await generateKeyPairSigner();\n\n\t\t// Build instructions\n\t\tconst createIx = getCreateAccountInstruction({\n\t\t\tpayer: signer,\n\t\t\tnewAccount: stakeAccount,\n\t\t\tlamports: totalLamports,\n\t\t\tspace: BigInt(STAKE_STATE_LEN),\n\t\t\tprogramAddress: STAKE_PROGRAM_ID,\n\t\t});\n\n\t\tconst initializeIx = getInitializeInstruction({\n\t\t\tstake: stakeAccount.address,\n\t\t\targ0: {\n\t\t\t\tstaker: signer.address,\n\t\t\t\twithdrawer: signer.address,\n\t\t\t},\n\t\t\targ1: {\n\t\t\t\tunixTimestamp: 0n,\n\t\t\t\tepoch: 0n,\n\t\t\t\tcustodian: signer.address,\n\t\t\t},\n\t\t});\n\n\t\tconst delegateIx = getDelegateStakeInstruction({\n\t\t\tstake: stakeAccount.address,\n\t\t\tvote: validatorAddress,\n\t\t\tstakeHistory: SYSVAR_STAKE_HISTORY,\n\t\t\tunused: UNUSED_STAKE_CONFIG_ACC,\n\t\t\tstakeAuthority: signer,\n\t\t});\n\n\t\tconst message = pipe(\n\t\t\tcreateTransactionMessage({ version: config.transactionVersion ?? 0 }),\n\t\t\t(m) => setTransactionMessageFeePayer(signer.address, m),\n\t\t\t(m) => setTransactionMessageLifetimeUsingBlockhash(lifetime, m),\n\t\t\t(m) => appendTransactionMessageInstructions([createIx, initializeIx, delegateIx], m),\n\t\t);\n\n\t\treturn {\n\t\t\tcommitment,\n\t\t\tlifetime,\n\t\t\tmessage,\n\t\t\tmode,\n\t\t\tsigner,\n\t\t\tstakeAccount,\n\t\t\tplan: singleTransactionPlan(message),\n\t\t};\n\t}\n\n\tasync function sendPreparedStake(\n\t\tprepared: PreparedStake,\n\t\toptions: StakeSendOptions = {},\n\t): Promise<ReturnType<typeof signature>> {\n\t\tif (prepared.mode === 'send' && isTransactionSendingSigner(prepared.signer)) {\n\t\t\tconst signatureBytes = await signAndSendTransactionMessageWithSigners(prepared.message, {\n\t\t\t\tabortSignal: options.abortSignal,\n\t\t\t\tminContextSlot: options.minContextSlot,\n\t\t\t});\n\t\t\tconst base58Decoder = getBase58Decoder();\n\t\t\treturn signature(base58Decoder.decode(signatureBytes));\n\t\t}\n\n\t\tconst commitment = options.commitment ?? prepared.commitment;\n\t\tconst maxRetries =\n\t\t\toptions.maxRetries === undefined\n\t\t\t\t? undefined\n\t\t\t\t: typeof options.maxRetries === 'bigint'\n\t\t\t\t\t? options.maxRetries\n\t\t\t\t\t: BigInt(options.maxRetries);\n\t\tlet latestSignature: ReturnType<typeof signature> | null = null;\n\t\tconst executor = createTransactionPlanExecutor({\n\t\t\tasync executeTransactionMessage(message, config = {}) {\n\t\t\t\tconst signed = await signTransactionMessageWithSigners(message as SignableStakeTransactionMessage, {\n\t\t\t\t\tabortSignal: config.abortSignal ?? options.abortSignal,\n\t\t\t\t\tminContextSlot: options.minContextSlot,\n\t\t\t\t});\n\t\t\t\tconst wire = getBase64EncodedWireTransaction(signed);\n\t\t\t\tconst response = await runtime.rpc\n\t\t\t\t\t.sendTransaction(wire, {\n\t\t\t\t\t\tencoding: 'base64',\n\t\t\t\t\t\tmaxRetries,\n\t\t\t\t\t\tpreflightCommitment: commitment,\n\t\t\t\t\t\tskipPreflight: options.skipPreflight,\n\t\t\t\t\t})\n\t\t\t\t\t.send({ abortSignal: config.abortSignal ?? options.abortSignal });\n\t\t\t\tlatestSignature = signature(response);\n\t\t\t\treturn { transaction: signed };\n\t\t\t},\n\t\t});\n\t\tawait executor(prepared.plan ?? singleTransactionPlan(prepared.message), { abortSignal: options.abortSignal });\n\t\tif (!latestSignature) {\n\t\t\tthrow new Error('Failed to resolve transaction signature.');\n\t\t}\n\t\treturn latestSignature;\n\t}\n\n\tasync function sendStake(\n\t\tconfig: StakePrepareConfig,\n\t\toptions?: StakeSendOptions,\n\t): Promise<ReturnType<typeof signature>> {\n\t\tconst prepared = await prepareStake(config);\n\t\treturn await sendPreparedStake(prepared, options);\n\t}\n\n\tasync function prepareUnstake(config: UnstakePrepareConfig): Promise<PreparedUnstake> {\n\t\tconst commitment = config.commitment;\n\t\tconst lifetime = await resolveLifetime(runtime, commitment, config.lifetime);\n\t\tconst { signer, mode } = resolveSigner(config.authority, commitment);\n\t\tconst stakeAccountAddress = ensureAddress(config.stakeAccount);\n\n\t\tconst deactivateIx = getDeactivateInstruction({\n\t\t\tstake: stakeAccountAddress,\n\t\t\tclockSysvar: SYSVAR_CLOCK,\n\t\t\tstakeAuthority: signer,\n\t\t});\n\n\t\tconst message = pipe(\n\t\t\tcreateTransactionMessage({ version: config.transactionVersion ?? 0 }),\n\t\t\t(m) => setTransactionMessageFeePayer(signer.address, m),\n\t\t\t(m) => setTransactionMessageLifetimeUsingBlockhash(lifetime, m),\n\t\t\t(m) => appendTransactionMessageInstructions([deactivateIx], m),\n\t\t);\n\n\t\treturn {\n\t\t\tcommitment,\n\t\t\tlifetime,\n\t\t\tmessage,\n\t\t\tmode,\n\t\t\tsigner,\n\t\t\tplan: singleTransactionPlan(message),\n\t\t};\n\t}\n\n\tasync function sendPreparedUnstake(\n\t\tprepared: PreparedUnstake,\n\t\toptions: UnstakeSendOptions = {},\n\t): Promise<ReturnType<typeof signature>> {\n\t\tif (prepared.mode === 'send' && isTransactionSendingSigner(prepared.signer)) {\n\t\t\tconst signatureBytes = await signAndSendTransactionMessageWithSigners(prepared.message, {\n\t\t\t\tabortSignal: options.abortSignal,\n\t\t\t\tminContextSlot: options.minContextSlot,\n\t\t\t});\n\t\t\tconst base58Decoder = getBase58Decoder();\n\t\t\treturn signature(base58Decoder.decode(signatureBytes));\n\t\t}\n\n\t\tconst commitment = options.commitment ?? prepared.commitment;\n\t\tconst maxRetries =\n\t\t\toptions.maxRetries === undefined\n\t\t\t\t? undefined\n\t\t\t\t: typeof options.maxRetries === 'bigint'\n\t\t\t\t\t? options.maxRetries\n\t\t\t\t\t: BigInt(options.maxRetries);\n\t\tlet latestSignature: ReturnType<typeof signature> | null = null;\n\t\tconst executor = createTransactionPlanExecutor({\n\t\t\tasync executeTransactionMessage(message, config = {}) {\n\t\t\t\tconst signed = await signTransactionMessageWithSigners(message as SignableStakeTransactionMessage, {\n\t\t\t\t\tabortSignal: config.abortSignal ?? options.abortSignal,\n\t\t\t\t\tminContextSlot: options.minContextSlot,\n\t\t\t\t});\n\t\t\t\tconst wire = getBase64EncodedWireTransaction(signed);\n\t\t\t\tconst response = await runtime.rpc\n\t\t\t\t\t.sendTransaction(wire, {\n\t\t\t\t\t\tencoding: 'base64',\n\t\t\t\t\t\tmaxRetries,\n\t\t\t\t\t\tpreflightCommitment: commitment,\n\t\t\t\t\t\tskipPreflight: options.skipPreflight,\n\t\t\t\t\t})\n\t\t\t\t\t.send({ abortSignal: config.abortSignal ?? options.abortSignal });\n\t\t\t\tlatestSignature = signature(response);\n\t\t\t\treturn { transaction: signed };\n\t\t\t},\n\t\t});\n\t\tawait executor(prepared.plan);\n\t\tif (!latestSignature) {\n\t\t\tthrow new Error('Failed to resolve transaction signature.');\n\t\t}\n\t\treturn latestSignature;\n\t}\n\n\tasync function sendUnstake(\n\t\tconfig: UnstakePrepareConfig,\n\t\toptions?: UnstakeSendOptions,\n\t): Promise<ReturnType<typeof signature>> {\n\t\tconst prepared = await prepareUnstake(config);\n\t\treturn await sendPreparedUnstake(prepared, options);\n\t}\n\n\tasync function prepareWithdraw(config: WithdrawPrepareConfig): Promise<PreparedWithdraw> {\n\t\tconst commitment = config.commitment;\n\t\tconst lifetime = await resolveLifetime(runtime, commitment, config.lifetime);\n\t\tconst { signer, mode } = resolveSigner(config.authority, commitment);\n\t\tconst stakeAccountAddress = ensureAddress(config.stakeAccount);\n\t\tconst destinationAddress = ensureAddress(config.destination);\n\t\tconst amount = toLamportAmount(config.amount);\n\n\t\tconst withdrawIx = getWithdrawInstruction({\n\t\t\tstake: stakeAccountAddress,\n\t\t\trecipient: destinationAddress,\n\t\t\tclockSysvar: SYSVAR_CLOCK,\n\t\t\tstakeHistory: SYSVAR_STAKE_HISTORY,\n\t\t\twithdrawAuthority: signer,\n\t\t\targs: amount,\n\t\t});\n\n\t\tconst message = pipe(\n\t\t\tcreateTransactionMessage({ version: config.transactionVersion ?? 0 }),\n\t\t\t(m) => setTransactionMessageFeePayer(signer.address, m),\n\t\t\t(m) => setTransactionMessageLifetimeUsingBlockhash(lifetime, m),\n\t\t\t(m) => appendTransactionMessageInstructions([withdrawIx], m),\n\t\t);\n\n\t\treturn {\n\t\t\tcommitment,\n\t\t\tlifetime,\n\t\t\tmessage,\n\t\t\tmode,\n\t\t\tsigner,\n\t\t\tplan: singleTransactionPlan(message),\n\t\t};\n\t}\n\n\tasync function sendPreparedWithdraw(\n\t\tprepared: PreparedWithdraw,\n\t\toptions: WithdrawSendOptions = {},\n\t): Promise<ReturnType<typeof signature>> {\n\t\tif (prepared.mode === 'send' && isTransactionSendingSigner(prepared.signer)) {\n\t\t\tconst signatureBytes = await signAndSendTransactionMessageWithSigners(prepared.message, {\n\t\t\t\tabortSignal: options.abortSignal,\n\t\t\t\tminContextSlot: options.minContextSlot,\n\t\t\t});\n\t\t\tconst base58Decoder = getBase58Decoder();\n\t\t\treturn signature(base58Decoder.decode(signatureBytes));\n\t\t}\n\n\t\tconst commitment = options.commitment ?? prepared.commitment;\n\t\tconst maxRetries =\n\t\t\toptions.maxRetries === undefined\n\t\t\t\t? undefined\n\t\t\t\t: typeof options.maxRetries === 'bigint'\n\t\t\t\t\t? options.maxRetries\n\t\t\t\t\t: BigInt(options.maxRetries);\n\t\tlet latestSignature: ReturnType<typeof signature> | null = null;\n\t\tconst executor = createTransactionPlanExecutor({\n\t\t\tasync executeTransactionMessage(message, config = {}) {\n\t\t\t\tconst signed = await signTransactionMessageWithSigners(message as SignableStakeTransactionMessage, {\n\t\t\t\t\tabortSignal: config.abortSignal ?? options.abortSignal,\n\t\t\t\t\tminContextSlot: options.minContextSlot,\n\t\t\t\t});\n\t\t\t\tconst wire = getBase64EncodedWireTransaction(signed);\n\t\t\t\tconst response = await runtime.rpc\n\t\t\t\t\t.sendTransaction(wire, {\n\t\t\t\t\t\tencoding: 'base64',\n\t\t\t\t\t\tmaxRetries,\n\t\t\t\t\t\tpreflightCommitment: commitment,\n\t\t\t\t\t\tskipPreflight: options.skipPreflight,\n\t\t\t\t\t})\n\t\t\t\t\t.send({ abortSignal: config.abortSignal ?? options.abortSignal });\n\t\t\t\tlatestSignature = signature(response);\n\t\t\t\treturn { transaction: signed };\n\t\t\t},\n\t\t});\n\t\tawait executor(prepared.plan);\n\t\tif (!latestSignature) {\n\t\t\tthrow new Error('Failed to resolve transaction signature.');\n\t\t}\n\t\treturn latestSignature;\n\t}\n\n\tasync function sendWithdraw(\n\t\tconfig: WithdrawPrepareConfig,\n\t\toptions?: WithdrawSendOptions,\n\t): Promise<ReturnType<typeof signature>> {\n\t\tconst prepared = await prepareWithdraw(config);\n\t\treturn await sendPreparedWithdraw(prepared, options);\n\t}\n\n\tasync function getStakeAccounts(wallet: Address | string, validatorId?: Address | string): Promise<StakeAccount[]> {\n\t\tconst walletAddress = typeof wallet === 'string' ? wallet : String(wallet);\n\n\t\tconst accounts = await runtime.rpc\n\t\t\t.getProgramAccounts(STAKE_PROGRAM_ID, {\n\t\t\t\tencoding: 'jsonParsed',\n\t\t\t\tfilters: [\n\t\t\t\t\t{\n\t\t\t\t\t\tmemcmp: {\n\t\t\t\t\t\t\toffset: 44n,\n\t\t\t\t\t\t\tbytes: walletAddress as Base58EncodedBytes,\n\t\t\t\t\t\t\tencoding: 'base58',\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t],\n\t\t\t})\n\t\t\t.send();\n\n\t\tif (!validatorId) {\n\t\t\treturn accounts as StakeAccount[];\n\t\t}\n\n\t\tconst validatorIdStr = typeof validatorId === 'string' ? validatorId : String(validatorId);\n\t\treturn accounts.filter((acc) => {\n\t\t\tconst data = acc.account?.data;\n\t\t\tif (data && 'parsed' in data) {\n\t\t\t\tconst info = data.parsed?.info as { stake?: { delegation?: { voter?: string } } } | undefined;\n\t\t\t\treturn info?.stake?.delegation?.voter === validatorIdStr;\n\t\t\t}\n\t\t\treturn false;\n\t\t}) as StakeAccount[];\n\t}\n\n\treturn {\n\t\tgetStakeAccounts,\n\t\tprepareStake,\n\t\tprepareUnstake,\n\t\tprepareWithdraw,\n\t\tsendPreparedStake,\n\t\tsendPreparedUnstake,\n\t\tsendPreparedWithdraw,\n\t\tsendStake,\n\t\tsendUnstake,\n\t\tsendWithdraw,\n\t};\n}\n","import type {\n\tBase64EncodedWireTransaction,\n\tTransaction,\n\tTransactionMessage,\n\tTransactionMessageWithFeePayer,\n} from '@solana/kit';\nimport {\n\tcompileTransaction,\n\tgetBase64EncodedWireTransaction,\n\tpartiallySignTransactionMessageWithSigners,\n} from '@solana/kit';\n\ntype Base64ConvertibleTransaction = (TransactionMessage & TransactionMessageWithFeePayer) | Transaction;\n\n/**\n * Serializes a transaction message or fully signed transaction to a base64-encoded wire format string.\n */\nexport function transactionToBase64(tx: Base64ConvertibleTransaction): Base64EncodedWireTransaction {\n\tif ('messageBytes' in tx) {\n\t\treturn getBase64EncodedWireTransaction(tx);\n\t}\n\treturn getBase64EncodedWireTransaction(compileTransaction(tx));\n}\n\n/**\n * Serializes a transaction after ensuring all attached signers have produced signatures.\n */\nexport async function transactionToBase64WithSigners(\n\ttx: Base64ConvertibleTransaction,\n): Promise<Base64EncodedWireTransaction> {\n\tif ('messageBytes' in tx) {\n\t\treturn transactionToBase64(tx);\n\t}\n\tconst signed = await partiallySignTransactionMessageWithSigners(tx);\n\treturn transactionToBase64(signed);\n}\n","import type {\n\tGetLatestBlockhashApi,\n\tRpc,\n\tSimulateTransactionApi,\n\tTransactionMessage,\n\tTransactionMessageWithBlockhashLifetime,\n\tTransactionMessageWithFeePayer,\n} from '@solana/kit';\nimport {\n\tappendTransactionMessageInstruction,\n\tisSolanaError,\n\tSOLANA_ERROR__INSTRUCTION_ERROR__COMPUTATIONAL_BUDGET_EXCEEDED,\n\tsetTransactionMessageLifetimeUsingBlockhash,\n} from '@solana/kit';\nimport { COMPUTE_BUDGET_PROGRAM_ADDRESS, getSetComputeUnitLimitInstruction } from '@solana-program/compute-budget';\n\nimport { transactionToBase64 } from './base64';\n\nexport type PrepareTransactionMessage = TransactionMessage & TransactionMessageWithFeePayer;\n\nexport type PrepareTransactionOptions<TMessage extends PrepareTransactionMessage> = Readonly<{\n\ttransaction: TMessage;\n\tcomputeUnitLimitMultiplier?: number;\n\tcomputeUnitLimitReset?: boolean;\n\tblockhashReset?: boolean;\n\tlogRequest?: (payload: { base64WireTransaction: string }) => void;\n}>;\n\nexport type PrepareTransactionConfig<TMessage extends PrepareTransactionMessage> = PrepareTransactionOptions<TMessage> &\n\tReadonly<{\n\t\trpc: Rpc<GetLatestBlockhashApi & SimulateTransactionApi>;\n\t}>;\n\nconst DEFAULT_COMPUTE_UNIT_LIMIT_MULTIPLIER = 1.1;\nconst DEFAULT_COMPUTE_UNIT_LIMIT = 200_000;\nconst MAX_COMPUTE_UNIT_LIMIT = 1_400_000;\n\nfunction isComputeUnitLimitInstruction(\n\tinstruction: Parameters<typeof appendTransactionMessageInstruction>[0],\n): boolean {\n\treturn (\n\t\tinstruction.programAddress === COMPUTE_BUDGET_PROGRAM_ADDRESS && instruction.data?.[0] === 2 // ComputeBudgetInstruction.SetComputeUnitLimit\n\t);\n}\n\nfunction didExceedComputeBudget(error: unknown): boolean {\n\tlet current: unknown = error;\n\twhile (isSolanaError(current)) {\n\t\tif (isSolanaError(current, SOLANA_ERROR__INSTRUCTION_ERROR__COMPUTATIONAL_BUDGET_EXCEEDED)) {\n\t\t\treturn true;\n\t\t}\n\t\tcurrent = (current as { cause?: unknown }).cause;\n\t}\n\treturn false;\n}\n\nasync function estimateComputeUnits(\n\trpc: Rpc<GetLatestBlockhashApi & SimulateTransactionApi>,\n\ttransaction: PrepareTransactionMessage,\n): Promise<number> {\n\tlet target = transaction;\n\tconst hasLifetime =\n\t\t(transaction as Partial<TransactionMessageWithBlockhashLifetime>).lifetimeConstraint !== undefined;\n\tif (!hasLifetime) {\n\t\tconst latest = await rpc.getLatestBlockhash().send();\n\t\ttarget = setTransactionMessageLifetimeUsingBlockhash(\n\t\t\tlatest.value,\n\t\t\ttransaction,\n\t\t) as unknown as PrepareTransactionMessage & TransactionMessageWithBlockhashLifetime;\n\t}\n\tconst base64Transaction = transactionToBase64(target);\n\ttry {\n\t\tconst { value } = await rpc\n\t\t\t.simulateTransaction(base64Transaction, {\n\t\t\t\tencoding: 'base64',\n\t\t\t\treplaceRecentBlockhash: false,\n\t\t\t\tsigVerify: false,\n\t\t\t})\n\t\t\t.send();\n\t\treturn Number(value.unitsConsumed ?? 0) || 0;\n\t} catch (error) {\n\t\tif (didExceedComputeBudget(error)) {\n\t\t\treturn MAX_COMPUTE_UNIT_LIMIT;\n\t\t}\n\t\tthrow error;\n\t}\n}\n\nexport async function prepareTransaction<TMessage extends PrepareTransactionMessage>(\n\tconfig: PrepareTransactionConfig<TMessage>,\n): Promise<TMessage & TransactionMessageWithBlockhashLifetime> {\n\tconst multiplier = config.computeUnitLimitMultiplier ?? DEFAULT_COMPUTE_UNIT_LIMIT_MULTIPLIER;\n\tconst shouldResetBlockhash = config.blockhashReset !== false;\n\tconst shouldResetComputeUnits = config.computeUnitLimitReset ?? false;\n\n\tlet transaction = config.transaction;\n\n\tconst computeLimitIndex = transaction.instructions.findIndex(isComputeUnitLimitInstruction);\n\tif (computeLimitIndex === -1 || shouldResetComputeUnits) {\n\t\tconst unitsFromSimulation = await estimateComputeUnits(config.rpc, transaction);\n\t\tconst estimatedUnits = unitsFromSimulation\n\t\t\t? Math.ceil(unitsFromSimulation * multiplier)\n\t\t\t: DEFAULT_COMPUTE_UNIT_LIMIT;\n\t\tconst units = Math.min(\n\t\t\tMAX_COMPUTE_UNIT_LIMIT,\n\t\t\tMath.max(DEFAULT_COMPUTE_UNIT_LIMIT, Math.max(1, estimatedUnits)),\n\t\t);\n\t\tconst instruction = getSetComputeUnitLimitInstruction({ units });\n\t\tif (computeLimitIndex === -1) {\n\t\t\ttransaction = appendTransactionMessageInstruction(instruction, transaction) as unknown as TMessage;\n\t\t} else {\n\t\t\tconst nextInstructions = [...transaction.instructions];\n\t\t\tnextInstructions.splice(computeLimitIndex, 1, instruction);\n\t\t\ttransaction = Object.freeze({\n\t\t\t\t...transaction,\n\t\t\t\tinstructions: Object.freeze(nextInstructions),\n\t\t\t}) as unknown as TMessage;\n\t\t}\n\t}\n\n\tlet transactionHasLifetime =\n\t\t(transaction as Partial<TransactionMessageWithBlockhashLifetime>).lifetimeConstraint !== undefined;\n\tif (shouldResetBlockhash || !transactionHasLifetime) {\n\t\tconst latest = await config.rpc.getLatestBlockhash().send();\n\t\tif (!transactionHasLifetime) {\n\t\t\ttransaction = setTransactionMessageLifetimeUsingBlockhash(latest.value, transaction) as unknown as TMessage;\n\t\t} else if (shouldResetBlockhash) {\n\t\t\ttransaction = Object.freeze({\n\t\t\t\t...transaction,\n\t\t\t\tlifetimeConstraint: latest.value,\n\t\t\t}) as unknown as TMessage & TransactionMessageWithBlockhashLifetime;\n\t\t}\n\t\ttransactionHasLifetime = true;\n\t}\n\n\tif (config.logRequest) {\n\t\tconfig.logRequest({ base64WireTransaction: transactionToBase64(transaction) });\n\t}\n\n\treturn transaction as TMessage & TransactionMessageWithBlockhashLifetime;\n}\n","import { getBase58Decoder } from '@solana/codecs-strings';\nimport type {\n\tAddress,\n\tappendTransactionMessageInstruction,\n\tBlockhash,\n\tCommitment,\n\tInstructionPlan,\n\tSingleTransactionPlan,\n\tSlot,\n\tTransactionPlan,\n\tTransactionPlannerConfig,\n\tTransactionSigner,\n\tTransactionVersion,\n} from '@solana/kit';\nimport {\n\tcreateTransactionMessage,\n\tcreateTransactionPlanExecutor,\n\tcreateTransactionPlanner,\n\tgetBase64EncodedWireTransaction,\n\tgetMessagePackerInstructionPlanFromInstructions,\n\tisInstructionForProgram,\n\tisInstructionWithData,\n\tisTransactionSendingSigner,\n\taddress as parseAddress,\n\tpipe,\n\tsetTransactionMessageFeePayer,\n\tsetTransactionMessageFeePayerSigner,\n\tsetTransactionMessageLifetimeUsingBlockhash,\n\tsignAndSendTransactionMessageWithSigners,\n\tsignature,\n\tsignTransactionMessageWithSigners,\n\tsingleTransactionPlan,\n} from '@solana/kit';\nimport {\n\tCOMPUTE_BUDGET_PROGRAM_ADDRESS,\n\tComputeBudgetInstruction,\n\tgetSetComputeUnitLimitInstruction,\n\tgetSetComputeUnitPriceInstruction,\n} from '@solana-program/compute-budget';\n\nimport { createWalletTransactionSigner, isWalletSession, resolveSignerMode } from '../signers/walletTransactionSigner';\nimport {\n\ttype PrepareTransactionMessage,\n\ttype PrepareTransactionOptions,\n\tprepareTransaction as prepareTransactionUtility,\n} from '../transactions/prepareTransaction';\nimport type { SolanaClientRuntime, WalletSession } from '../types';\n\ntype BlockhashLifetime = Readonly<{\n\tblockhash: Blockhash;\n\tlastValidBlockHeight: bigint;\n}>;\n\ntype TransactionInstruction = Parameters<typeof appendTransactionMessageInstruction>[0];\n\nexport type TransactionInstructionInput = TransactionInstruction;\n\ntype SignableTransactionMessage = Parameters<typeof signTransactionMessageWithSigners>[0];\n\ntype TransactionAuthority = TransactionSigner | WalletSession;\n\ntype PrepareTransactionOverrides = Omit<PrepareTransactionOptions<PrepareTransactionMessage>, 'transaction'>;\n\ntype TransactionRecipeMetadata = Readonly<{\n\tcommitment: Commitment;\n\tcomputeUnitLimit?: bigint;\n\tcomputeUnitPrice?: bigint;\n\tfeePayer: Address;\n\tinstructions: readonly TransactionInstruction[];\n\tlifetime: BlockhashLifetime;\n\tmode: 'partial' | 'send';\n\tversion: TransactionVersion;\n}>;\n\nexport type TransactionRecipe = TransactionRecipeMetadata &\n\tReadonly<{\n\t\tcreateTransactionMessage: TransactionPlannerConfig['createTransactionMessage'];\n\t\tinstructionPlan: InstructionPlan;\n\t}>;\n\nexport type TransactionRecipeContext = Readonly<{\n\tgetFallbackCommitment(): Commitment;\n\truntime: SolanaClientRuntime;\n}>;\n\nexport type TransactionPrepareRequest = Readonly<{\n\tabortSignal?: AbortSignal;\n\tauthority?: TransactionAuthority;\n\tcommitment?: Commitment;\n\tcomputeUnitLimit?: bigint | number;\n\tcomputeUnitPrice?: bigint | number;\n\tfeePayer?: Address | string | TransactionSigner;\n\tinstructions: readonly TransactionInstruction[];\n\tlifetime?: BlockhashLifetime;\n\tversion?: TransactionVersion | 'auto';\n}>;\n\nexport type TransactionPrepareAndSendRequest = TransactionPrepareRequest &\n\tReadonly<{\n\t\tprepareTransaction?: false | PrepareTransactionOverrides;\n\t}>;\n\nexport type TransactionPrepared = Readonly<{\n\tcommitment: Commitment;\n\tcomputeUnitLimit?: bigint;\n\tcomputeUnitPrice?: bigint;\n\tfeePayer: Address;\n\tinstructions: readonly TransactionInstruction[];\n\tlifetime: BlockhashLifetime;\n\tmessage: SignableTransactionMessage;\n\tmode: 'partial' | 'send';\n\tplan?: TransactionPlan;\n\tversion: TransactionVersion;\n}>;\n\nexport type TransactionSignOptions = Readonly<{\n\tabortSignal?: AbortSignal;\n\tminContextSlot?: Slot;\n}>;\n\nexport type TransactionSendOptions = Readonly<{\n\tabortSignal?: AbortSignal;\n\tcommitment?: Commitment;\n\tmaxRetries?: bigint | number;\n\tminContextSlot?: Slot;\n\tskipPreflight?: boolean;\n}>;\n\nexport type TransactionHelper = Readonly<{\n\tprepare(request: TransactionPrepareRequest): Promise<TransactionPrepared>;\n\tsign(\n\t\tprepared: TransactionPrepared,\n\t\toptions?: TransactionSignOptions,\n\t): ReturnType<typeof signTransactionMessageWithSigners>;\n\ttoWire(prepared: TransactionPrepared, options?: TransactionSignOptions): Promise<string>;\n\tsend(prepared: TransactionPrepared, options?: TransactionSendOptions): Promise<ReturnType<typeof signature>>;\n\tprepareAndSend(\n\t\trequest: TransactionPrepareAndSendRequest,\n\t\toptions?: TransactionSendOptions,\n\t): Promise<ReturnType<typeof signature>>;\n}>;\n\nfunction toAddress(value: Address | string): Address {\n\treturn typeof value === 'string' ? parseAddress(value) : value;\n}\n\nfunction hasSetComputeUnitLimitInstruction(instructions: readonly TransactionInstruction[]): boolean {\n\treturn instructions.some(\n\t\t(instruction) =>\n\t\t\tisInstructionForProgram(instruction, COMPUTE_BUDGET_PROGRAM_ADDRESS) &&\n\t\t\tisInstructionWithData(instruction) &&\n\t\t\tinstruction.data[0] === ComputeBudgetInstruction.SetComputeUnitLimit,\n\t);\n}\n\nfunction hasSetComputeUnitPriceInstruction(instructions: readonly TransactionInstruction[]): boolean {\n\treturn instructions.some(\n\t\t(instruction) =>\n\t\t\tisInstructionForProgram(instruction, COMPUTE_BUDGET_PROGRAM_ADDRESS) &&\n\t\t\tisInstructionWithData(instruction) &&\n\t\t\tinstruction.data[0] === ComputeBudgetInstruction.SetComputeUnitPrice,\n\t);\n}\n\nfunction instructionUsesAddressLookup(instruction: TransactionInstruction): boolean {\n\tif ('addressTableLookup' in instruction && instruction.addressTableLookup != null) {\n\t\treturn true;\n\t}\n\tif (\n\t\t'addressTableLookups' in instruction &&\n\t\tArray.isArray(instruction.addressTableLookups) &&\n\t\tinstruction.addressTableLookups.length > 0\n\t) {\n\t\treturn true;\n\t}\n\treturn false;\n}\n\nfunction resolveVersion(\n\trequested: TransactionVersion | 'auto' | undefined,\n\tinstructions: readonly TransactionInstruction[],\n): TransactionVersion {\n\tif (requested && requested !== 'auto') {\n\t\treturn requested;\n\t}\n\treturn instructions.some(instructionUsesAddressLookup) ? 0 : 'legacy';\n}\n\nfunction normaliseCommitment(request: TransactionPrepareRequest, getFallbackCommitment: () => Commitment): Commitment {\n\treturn request.commitment ?? getFallbackCommitment();\n}\n\nfunction resolveFeePayerAddress(\n\tfeePayer: Address | string | TransactionSigner | undefined,\n\tauthoritySigner: TransactionSigner | undefined,\n): { address: Address; signer?: TransactionSigner } {\n\tif (!feePayer && !authoritySigner) {\n\t\tthrow new Error('A fee payer must be provided via `feePayer` or `authority`.');\n\t}\n\tif (feePayer && typeof feePayer === 'object' && 'address' in feePayer) {\n\t\treturn { address: feePayer.address as Address, signer: feePayer };\n\t}\n\tif (feePayer) {\n\t\tconst address = toAddress(feePayer);\n\t\tif (authoritySigner && authoritySigner.address === address) {\n\t\t\treturn { address, signer: authoritySigner };\n\t\t}\n\t\treturn { address };\n\t}\n\tif (!authoritySigner) {\n\t\tthrow new Error('Unable to resolve authority signer for the fee payer.');\n\t}\n\tconst authorityAddress = authoritySigner.address as Address;\n\treturn { address: authorityAddress, signer: authoritySigner };\n}\n\nfunction resolveComputeUnitLimit(\n\trequest: TransactionPrepareRequest,\n\tinstructions: readonly TransactionInstruction[],\n): bigint | undefined {\n\tconst value = request.computeUnitLimit;\n\tif (value === undefined || hasSetComputeUnitLimitInstruction(instructions)) {\n\t\treturn undefined;\n\t}\n\treturn typeof value === 'bigint' ? value : BigInt(Math.floor(value));\n}\n\nfunction resolveComputeUnitPrice(\n\trequest: TransactionPrepareRequest,\n\tinstructions: readonly TransactionInstruction[],\n): bigint | undefined {\n\tif (request.computeUnitPrice === undefined || hasSetComputeUnitPriceInstruction(instructions)) {\n\t\treturn undefined;\n\t}\n\tif (typeof request.computeUnitPrice === 'bigint') {\n\t\treturn request.computeUnitPrice;\n\t}\n\treturn BigInt(Math.floor(request.computeUnitPrice));\n}\n\nexport async function createTransactionRecipe(\n\trequest: TransactionPrepareRequest,\n\tcontext: TransactionRecipeContext,\n): Promise<TransactionRecipe> {\n\tif (!request.instructions.length) {\n\t\tthrow new Error('Add at least one instruction before preparing a transaction.');\n\t}\n\n\tconst { getFallbackCommitment, runtime } = context;\n\trequest.abortSignal?.throwIfAborted();\n\n\tconst commitment = normaliseCommitment(request, getFallbackCommitment);\n\n\tlet authoritySigner: TransactionSigner | undefined;\n\tlet mode: 'partial' | 'send' = 'partial';\n\tif (request.authority) {\n\t\tif (isWalletSession(request.authority)) {\n\t\t\tconst { signer, mode: walletMode } = createWalletTransactionSigner(request.authority, { commitment });\n\t\t\tauthoritySigner = signer;\n\t\t\tmode = walletMode;\n\t\t} else {\n\t\t\tauthoritySigner = request.authority;\n\t\t\tmode = resolveSignerMode(authoritySigner);\n\t\t}\n\t}\n\n\tconst { address: feePayer, signer: feePayerSigner } = resolveFeePayerAddress(request.feePayer, authoritySigner);\n\n\tif (mode === 'send') {\n\t\tif (!feePayerSigner || !isTransactionSendingSigner(feePayerSigner)) {\n\t\t\tmode = 'partial';\n\t\t}\n\t}\n\n\tconst baseInstructions = [...request.instructions];\n\tconst version = resolveVersion(request.version, baseInstructions);\n\n\tconst lifetime =\n\t\trequest.lifetime ??\n\t\t(await runtime.rpc.getLatestBlockhash({ commitment }).send({ abortSignal: request.abortSignal })).value;\n\n\trequest.abortSignal?.throwIfAborted();\n\n\tconst resolvedComputeUnitLimit = resolveComputeUnitLimit(request, baseInstructions);\n\tconst computeUnitPrice = resolveComputeUnitPrice(request, baseInstructions);\n\n\tconst prefixInstructions: TransactionInstruction[] = [];\n\tif (resolvedComputeUnitLimit !== undefined) {\n\t\tprefixInstructions.push(getSetComputeUnitLimitInstruction({ units: Number(resolvedComputeUnitLimit) }));\n\t}\n\tif (computeUnitPrice !== undefined) {\n\t\tprefixInstructions.push(getSetComputeUnitPriceInstruction({ microLamports: Number(computeUnitPrice) }));\n\t}\n\tconst instructionSequence = [...prefixInstructions, ...baseInstructions];\n\n\tconst createMessage: TransactionPlannerConfig['createTransactionMessage'] = async () =>\n\t\tpipe(\n\t\t\tcreateTransactionMessage({ version }),\n\t\t\t(message) =>\n\t\t\t\tfeePayerSigner\n\t\t\t\t\t? setTransactionMessageFeePayerSigner(feePayerSigner, message)\n\t\t\t\t\t: setTransactionMessageFeePayer(feePayer, message),\n\t\t\t(message) => setTransactionMessageLifetimeUsingBlockhash(lifetime, message),\n\t\t) as SignableTransactionMessage;\n\n\treturn Object.freeze({\n\t\tcommitment,\n\t\tcomputeUnitLimit: resolvedComputeUnitLimit,\n\t\tcomputeUnitPrice,\n\t\tcreateTransactionMessage: createMessage,\n\t\tfeePayer,\n\t\tinstructionPlan: getMessagePackerInstructionPlanFromInstructions(instructionSequence),\n\t\tinstructions: Object.freeze(baseInstructions),\n\t\tlifetime,\n\t\tmode,\n\t\tversion,\n\t});\n}\n\nfunction assertSingleTransactionPlan(\n\tplan: TransactionPlan,\n): SingleTransactionPlan<SignableTransactionMessage> & { message: SignableTransactionMessage } {\n\tif (plan.kind !== 'single') {\n\t\tthrow new Error('Transaction recipe produced a multi-transaction plan which is not supported.');\n\t}\n\treturn plan as SingleTransactionPlan<SignableTransactionMessage> & { message: SignableTransactionMessage };\n}\n\nexport function createTransactionHelper(\n\truntime: SolanaClientRuntime,\n\tgetFallbackCommitment: () => Commitment,\n): TransactionHelper {\n\tasync function prepare(request: TransactionPrepareRequest): Promise<TransactionPrepared> {\n\t\tconst recipe = await createTransactionRecipe(request, { getFallbackCommitment, runtime });\n\t\tconst planner = createTransactionPlanner({\n\t\t\tcreateTransactionMessage: recipe.createTransactionMessage,\n\t\t});\n\t\tconst plan = await planner(recipe.instructionPlan, { abortSignal: request.abortSignal });\n\t\tconst singlePlan = assertSingleTransactionPlan(plan);\n\n\t\tconst prepared: TransactionPrepared = Object.freeze({\n\t\t\tcommitment: recipe.commitment,\n\t\t\tcomputeUnitLimit: recipe.computeUnitLimit,\n\t\t\tcomputeUnitPrice: recipe.computeUnitPrice,\n\t\t\tfeePayer: recipe.feePayer,\n\t\t\tinstructions: recipe.instructions,\n\t\t\tlifetime: recipe.lifetime,\n\t\t\tmessage: singlePlan.message,\n\t\t\tmode: recipe.mode,\n\t\t\tplan,\n\t\t\tversion: recipe.version,\n\t\t});\n\t\treturn prepared;\n\t}\n\n\tasync function sign(\n\t\tprepared: TransactionPrepared,\n\t\toptions: TransactionSignOptions = {},\n\t): ReturnType<typeof signTransactionMessageWithSigners> {\n\t\treturn await signTransactionMessageWithSigners(prepared.message, {\n\t\t\tabortSignal: options.abortSignal,\n\t\t\tminContextSlot: options.minContextSlot,\n\t\t});\n\t}\n\n\tasync function toWire(prepared: TransactionPrepared, options: TransactionSignOptions = {}) {\n\t\tconst signed = await sign(prepared, options);\n\t\treturn getBase64EncodedWireTransaction(signed);\n\t}\n\n\tasync function send(\n\t\tprepared: TransactionPrepared,\n\t\toptions: TransactionSendOptions = {},\n\t): Promise<ReturnType<typeof signature>> {\n\t\tif (!prepared.plan || prepared.mode === 'send') {\n\t\t\treturn sendDirect(prepared, options);\n\t\t}\n\t\treturn sendWithExecutor(prepared, options);\n\t}\n\n\tasync function sendDirect(\n\t\tprepared: TransactionPrepared,\n\t\toptions: TransactionSendOptions,\n\t): Promise<ReturnType<typeof signature>> {\n\t\tconst commitment = options.commitment ?? prepared.commitment;\n\t\tif (prepared.mode === 'send') {\n\t\t\tconst signatureBytes = await signAndSendTransactionMessageWithSigners(prepared.message, {\n\t\t\t\tabortSignal: options.abortSignal,\n\t\t\t\tminContextSlot: options.minContextSlot,\n\t\t\t});\n\t\t\tconst base58Decoder = getBase58Decoder();\n\t\t\treturn signature(base58Decoder.decode(signatureBytes));\n\t\t}\n\n\t\tconst signed = await sign(prepared, {\n\t\t\tabortSignal: options.abortSignal,\n\t\t\tminContextSlot: options.minContextSlot,\n\t\t});\n\n\t\tconst wire = getBase64EncodedWireTransaction(signed);\n\t\tconst maxRetries =\n\t\t\toptions.maxRetries === undefined\n\t\t\t\t? undefined\n\t\t\t\t: typeof options.maxRetries === 'bigint'\n\t\t\t\t\t? options.maxRetries\n\t\t\t\t\t: BigInt(options.maxRetries);\n\n\t\tconst response = await runtime.rpc\n\t\t\t.sendTransaction(wire, {\n\t\t\t\tencoding: 'base64',\n\t\t\t\tmaxRetries,\n\t\t\t\tpreflightCommitment: commitment,\n\t\t\t\tskipPreflight: options.skipPreflight,\n\t\t\t})\n\t\t\t.send({ abortSignal: options.abortSignal });\n\n\t\treturn signature(response);\n\t}\n\n\tasync function sendWithExecutor(\n\t\tprepared: TransactionPrepared,\n\t\toptions: TransactionSendOptions,\n\t): Promise<ReturnType<typeof signature>> {\n\t\tif (!prepared.plan) {\n\t\t\treturn sendDirect(prepared, options);\n\t\t}\n\t\tconst commitment = options.commitment ?? prepared.commitment;\n\t\tconst maxRetries =\n\t\t\toptions.maxRetries === undefined\n\t\t\t\t? undefined\n\t\t\t\t: typeof options.maxRetries === 'bigint'\n\t\t\t\t\t? options.maxRetries\n\t\t\t\t\t: BigInt(options.maxRetries);\n\t\tlet latestSignature: ReturnType<typeof signature> | null = null;\n\t\tconst executor = createTransactionPlanExecutor({\n\t\t\tasync executeTransactionMessage(message, config = {}) {\n\t\t\t\tconst signed = await signTransactionMessageWithSigners(message as SignableTransactionMessage, {\n\t\t\t\t\tabortSignal: config.abortSignal ?? options.abortSignal,\n\t\t\t\t\tminContextSlot: options.minContextSlot,\n\t\t\t\t});\n\t\t\t\tconst wire = getBase64EncodedWireTransaction(signed);\n\t\t\t\tconst response = await runtime.rpc\n\t\t\t\t\t.sendTransaction(wire, {\n\t\t\t\t\t\tencoding: 'base64',\n\t\t\t\t\t\tmaxRetries,\n\t\t\t\t\t\tpreflightCommitment: commitment,\n\t\t\t\t\t\tskipPreflight: options.skipPreflight,\n\t\t\t\t\t})\n\t\t\t\t\t.send({ abortSignal: config.abortSignal ?? options.abortSignal });\n\t\t\t\tlatestSignature = signature(response);\n\t\t\t\treturn { transaction: signed };\n\t\t\t},\n\t\t});\n\t\tawait executor(prepared.plan, { abortSignal: options.abortSignal });\n\t\tif (!latestSignature) {\n\t\t\tthrow new Error('Failed to resolve transaction signature.');\n\t\t}\n\t\treturn latestSignature;\n\t}\n\n\tasync function prepareAndSend(\n\t\trequest: TransactionPrepareAndSendRequest,\n\t\toptions: TransactionSendOptions = {},\n\t): Promise<ReturnType<typeof signature>> {\n\t\tconst { prepareTransaction: overrides, ...rest } = request;\n\t\tconst prepared = await prepare(rest);\n\t\tif (overrides === false) {\n\t\t\treturn send(prepared, options);\n\t\t}\n\t\tconst prepareConfig = overrides ?? {};\n\t\tconst tunedMessage = (await prepareTransactionUtility({\n\t\t\tblockhashReset: prepareConfig.blockhashReset ?? false,\n\t\t\t...prepareConfig,\n\t\t\trpc: runtime.rpc as Parameters<typeof prepareTransactionUtility>[0]['rpc'],\n\t\t\ttransaction: prepared.message as unknown as PrepareTransactionMessage,\n\t\t})) as SignableTransactionMessage;\n\t\tconst tunedPrepared: TransactionPrepared = Object.freeze({\n\t\t\t...prepared,\n\t\t\tmessage: tunedMessage,\n\t\t\tplan: singleTransactionPlan(tunedMessage),\n\t\t});\n\t\treturn send(tunedPrepared, options);\n\t}\n\n\treturn Object.freeze({\n\t\tprepare,\n\t\tsign,\n\t\ttoWire,\n\t\tsend,\n\t\tprepareAndSend,\n\t});\n}\n","import type { Commitment } from '@solana/kit';\n\nimport { createSolTransferHelper, type SolTransferHelper } from '../features/sol';\nimport { createSplTokenHelper, type SplTokenHelper, type SplTokenHelperConfig } from '../features/spl';\nimport { createStakeHelper, type StakeHelper } from '../features/stake';\nimport { createTransactionHelper, type TransactionHelper } from '../features/transactions';\nimport {\n\ttype PrepareTransactionMessage,\n\ttype PrepareTransactionOptions,\n\tprepareTransaction as prepareTransactionUtility,\n} from '../transactions/prepareTransaction';\nimport type { ClientHelpers, ClientStore, SolanaClientRuntime } from '../types';\n\ntype SplTokenCacheEntry = Readonly<{\n\tbaseCommitment?: Commitment;\n\tscoped: SplTokenHelper;\n}>;\n\nfunction withDefaultCommitment<T extends { commitment?: Commitment }>(\n\tconfig: T,\n\tgetFallback: () => Commitment,\n\tbaseCommitment?: Commitment,\n): T {\n\tif (config.commitment !== undefined) {\n\t\treturn config;\n\t}\n\tconst commitment = baseCommitment ?? getFallback();\n\treturn {\n\t\t...config,\n\t\tcommitment,\n\t};\n}\n\nfunction wrapSolTransferHelper(helper: SolTransferHelper, getFallback: () => Commitment): SolTransferHelper {\n\treturn {\n\t\tprepareTransfer: (config) => helper.prepareTransfer(withDefaultCommitment(config, getFallback)),\n\t\tsendPreparedTransfer: helper.sendPreparedTransfer,\n\t\tsendTransfer: (config, options) => helper.sendTransfer(withDefaultCommitment(config, getFallback), options),\n\t};\n}\n\nfunction wrapSplTokenHelper(\n\thelper: SplTokenHelper,\n\tgetFallback: () => Commitment,\n\tbaseCommitment?: Commitment,\n): SplTokenHelper {\n\tconst resolveCommitment = (commitment?: Commitment) => commitment ?? baseCommitment ?? getFallback();\n\n\treturn {\n\t\tderiveAssociatedTokenAddress: helper.deriveAssociatedTokenAddress,\n\t\tfetchBalance: (owner, commitment) => helper.fetchBalance(owner, resolveCommitment(commitment)),\n\t\tprepareTransfer: (config) => helper.prepareTransfer(withDefaultCommitment(config, getFallback, baseCommitment)),\n\t\tsendPreparedTransfer: helper.sendPreparedTransfer,\n\t\tsendTransfer: (config, options) =>\n\t\t\thelper.sendTransfer(withDefaultCommitment(config, getFallback, baseCommitment), options),\n\t};\n}\n\nfunction wrapStakeHelper(helper: StakeHelper, getFallback: () => Commitment): StakeHelper {\n\treturn {\n\t\tgetStakeAccounts: helper.getStakeAccounts,\n\t\tprepareStake: (config) => helper.prepareStake(withDefaultCommitment(config, getFallback)),\n\t\tprepareUnstake: (config) => helper.prepareUnstake(withDefaultCommitment(config, getFallback)),\n\t\tprepareWithdraw: (config) => helper.prepareWithdraw(withDefaultCommitment(config, getFallback)),\n\t\tsendPreparedStake: helper.sendPreparedStake,\n\t\tsendPreparedUnstake: helper.sendPreparedUnstake,\n\t\tsendPreparedWithdraw: helper.sendPreparedWithdraw,\n\t\tsendStake: (config, options) => helper.sendStake(withDefaultCommitment(config, getFallback), options),\n\t\tsendUnstake: (config, options) => helper.sendUnstake(withDefaultCommitment(config, getFallback), options),\n\t\tsendWithdraw: (config, options) => helper.sendWithdraw(withDefaultCommitment(config, getFallback), options),\n\t};\n}\n\nfunction normaliseConfigValue(value: unknown): string | undefined {\n\tif (value === null || value === undefined) {\n\t\treturn undefined;\n\t}\n\tif (typeof value === 'string') {\n\t\treturn value;\n\t}\n\tif (typeof value === 'object' && 'toString' in value) {\n\t\treturn String((value as { toString(): unknown }).toString());\n\t}\n\treturn JSON.stringify(value);\n}\n\nfunction serialiseSplConfig(config: SplTokenHelperConfig): string {\n\treturn JSON.stringify({\n\t\tassociatedTokenProgram: normaliseConfigValue(config.associatedTokenProgram),\n\t\tcommitment: normaliseConfigValue(config.commitment),\n\t\tdecimals: config.decimals,\n\t\tmint: normaliseConfigValue(config.mint),\n\t\ttokenProgram: normaliseConfigValue(config.tokenProgram),\n\t});\n}\n\nexport function createClientHelpers(runtime: SolanaClientRuntime, store: ClientStore): ClientHelpers {\n\tconst getFallbackCommitment = () => store.getState().cluster.commitment;\n\tconst splTokenCache = new Map<string, SplTokenCacheEntry>();\n\tlet solTransfer: SolTransferHelper | undefined;\n\tlet stake: StakeHelper | undefined;\n\tlet transaction: TransactionHelper | undefined;\n\n\tconst getSolTransfer = () => {\n\t\tif (!solTransfer) {\n\t\t\tsolTransfer = wrapSolTransferHelper(createSolTransferHelper(runtime), getFallbackCommitment);\n\t\t}\n\t\treturn solTransfer;\n\t};\n\n\tconst getStake = () => {\n\t\tif (!stake) {\n\t\t\tstake = wrapStakeHelper(createStakeHelper(runtime), getFallbackCommitment);\n\t\t}\n\t\treturn stake;\n\t};\n\n\tconst getTransaction = () => {\n\t\tif (!transaction) {\n\t\t\ttransaction = createTransactionHelper(runtime, getFallbackCommitment);\n\t\t}\n\t\treturn transaction;\n\t};\n\n\tfunction getSplTokenHelper(config: SplTokenHelperConfig): SplTokenHelper {\n\t\tconst cacheKey = serialiseSplConfig(config);\n\t\tconst cached = splTokenCache.get(cacheKey);\n\t\tif (cached) {\n\t\t\treturn cached.scoped;\n\t\t}\n\t\tconst helper = createSplTokenHelper(runtime, config);\n\t\tconst scoped = wrapSplTokenHelper(helper, getFallbackCommitment, config.commitment);\n\t\tsplTokenCache.set(cacheKey, {\n\t\t\tbaseCommitment: config.commitment,\n\t\t\tscoped,\n\t\t});\n\t\treturn scoped;\n\t}\n\n\tconst prepareTransactionWithRuntime = <TMessage extends PrepareTransactionMessage>(\n\t\toptions: PrepareTransactionOptions<TMessage>,\n\t) =>\n\t\tprepareTransactionUtility({\n\t\t\t...options,\n\t\t\trpc: runtime.rpc as Parameters<typeof prepareTransactionUtility>[0]['rpc'],\n\t\t});\n\n\treturn Object.freeze({\n\t\tget solTransfer() {\n\t\t\treturn getSolTransfer();\n\t\t},\n\t\tsplToken: getSplTokenHelper,\n\t\tget stake() {\n\t\t\treturn getStake();\n\t\t},\n\t\tget transaction() {\n\t\t\treturn getTransaction();\n\t\t},\n\t\tprepareTransaction: prepareTransactionWithRuntime,\n\t});\n}\n","import type { Commitment } from '@solana/kit';\nimport { createStore } from 'zustand/vanilla';\n\nimport type { ClientState, ClientStore, ClusterState, ClusterStatus } from '../types';\nimport { deepFreeze } from '../utils';\n\nexport type ClientStoreConfig = Readonly<{\n\tcommitment: Commitment;\n\tendpoint: ClusterState['endpoint'];\n\twebsocketEndpoint?: ClusterState['websocketEndpoint'];\n}>;\n\n/**\n * Creates the initial cluster status snapshot used by the client.\n *\n * @returns Cluster status in the idle state.\n */\nfunction createClusterStatus(): ClusterStatus {\n\treturn { status: 'idle' };\n}\n\n/**\n * Creates the initial {@link ClientState} using the supplied cluster configuration.\n *\n * @param config - Initial cluster configuration including endpoints and commitment.\n * @returns Deep-frozen client state snapshot.\n */\nexport function createInitialClientState(config: ClientStoreConfig): ClientState {\n\tconst { commitment, endpoint, websocketEndpoint } = config;\n\tconst timestamp = Date.now();\n\treturn deepFreeze({\n\t\taccounts: {},\n\t\tcluster: {\n\t\t\tcommitment,\n\t\t\tendpoint,\n\t\t\tstatus: createClusterStatus(),\n\t\t\twebsocketEndpoint,\n\t\t} satisfies ClusterState,\n\t\tlastUpdatedAt: timestamp,\n\t\tsubscriptions: {\n\t\t\taccount: {},\n\t\t\tsignature: {},\n\t\t},\n\t\ttransactions: {},\n\t\twallet: { status: 'disconnected' },\n\t});\n}\n\n/**\n * Creates a Zustand store using the supplied initial state snapshot.\n *\n * @param initialState - State snapshot produced by {@link createInitialClientState}.\n * @returns Zustand store instance containing the provided state.\n */\nexport function createClientStore(initialState: ClientState): ClientStore {\n\treturn createStore<ClientState>(() => initialState);\n}\n\n/**\n * Convenience helper that creates both the initial state and the store in one step.\n *\n * @param config - Initial cluster configuration including endpoints and commitment.\n * @returns Zustand store instance preloaded with the initial state.\n */\nexport function createDefaultClientStore(config: ClientStoreConfig): ClientStore {\n\treturn createClientStore(createInitialClientState(config));\n}\n","import type { Lamports, SolanaRpcSubscriptionsApi } from '@solana/kit';\n\nimport { createLogger, formatError } from '../logging/logger';\nimport type {\n\tAccountCacheEntry,\n\tAccountWatcherConfig,\n\tBalanceWatcherConfig,\n\tClientStore,\n\tClientWatchers,\n\tSignatureWatcherConfig,\n\tSolanaClientRuntime,\n\tSubscriptionStatus,\n} from '../types';\nimport { now } from '../utils';\n\ntype SubscriptionKind = 'account' | 'signature';\n\ntype WatcherDeps = Readonly<{\n\tlogger?: ReturnType<typeof createLogger>;\n\truntime: SolanaClientRuntime;\n\tstore: ClientStore;\n}>;\n\n/**\n * Creates watcher helpers that wrap RPC subscriptions and keep store metadata in sync.\n *\n * @param deps - Dependencies required to construct watcher helpers.\n * @returns Collection of watcher functions.\n */\nexport function createWatchers({ logger: inputLogger, runtime, store }: WatcherDeps): ClientWatchers {\n\tconst logger = inputLogger ?? createLogger();\n\n\t/**\n\t * Updates subscription metadata in the store for the provided subscription kind and identifier.\n\t *\n\t * @param kind - Subscription bucket being updated.\n\t * @param id - Identifier for the subscription instance.\n\t * @param status - Status descriptor to store.\n\t * @returns Nothing; mutates the provided store.\n\t */\n\tfunction setSubscriptionStatus(kind: SubscriptionKind, id: string, status: SubscriptionStatus): void {\n\t\tstore.setState((state) => ({\n\t\t\t...state,\n\t\t\tlastUpdatedAt: now(),\n\t\t\tsubscriptions: {\n\t\t\t\t...state.subscriptions,\n\t\t\t\t[kind]: {\n\t\t\t\t\t...state.subscriptions[kind],\n\t\t\t\t\t[id]: status,\n\t\t\t\t},\n\t\t\t},\n\t\t}));\n\t}\n\n\t/**\n\t * Handles abort events from active subscriptions.\n\t *\n\t * @param kind - Subscription category that was aborted.\n\t * @param id - Identifier for the subscription instance.\n\t * @returns Nothing; updates store status.\n\t */\n\tfunction onAbort(kind: SubscriptionKind, id: string): void {\n\t\tsetSubscriptionStatus(kind, id, { status: 'inactive' });\n\t}\n\n\t/**\n\t * Creates a subscription handle that exposes an abort method.\n\t *\n\t * @param kind - Subscription category.\n\t * @param id - Identifier for the subscription instance.\n\t * @param abortController - Controller associated with the subscription.\n\t * @returns Handle with an `abort` method.\n\t */\n\tfunction createSubscriptionHandle(kind: SubscriptionKind, id: string, abortController: AbortController) {\n\t\t/**\n\t\t * Cancels the underlying subscription and updates store metadata.\n\t\t *\n\t\t * @returns Nothing; aborts the subscription.\n\t\t */\n\t\tfunction abort(): void {\n\t\t\tabortController.abort();\n\t\t\tonAbort(kind, id);\n\t\t}\n\n\t\treturn { abort };\n\t}\n\n\t/**\n\t * Consumes account notifications and synchronizes store cache with on-chain updates.\n\t *\n\t * @param config - Watcher configuration specifying the target account.\n\t * @param listener - Callback invoked with each account cache entry.\n\t * @param abortController - Abort controller tied to the subscription lifecycle.\n\t * @returns Promise that resolves when the subscription naturally completes.\n\t */\n\tasync function handleAccountNotifications(\n\t\tconfig: AccountWatcherConfig,\n\t\tlistener: (account: AccountCacheEntry) => void,\n\t\tabortController: AbortController,\n\t): Promise<void> {\n\t\tconst commitment = config.commitment ?? store.getState().cluster.commitment;\n\t\tconst plan = runtime.rpcSubscriptions.accountNotifications(config.address, { commitment });\n\t\tconst key = config.address.toString();\n\t\tsetSubscriptionStatus('account', key, { status: 'activating' });\n\t\tabortController.signal.addEventListener('abort', () => onAbort('account', key));\n\t\ttry {\n\t\t\tconst iterator = await plan.subscribe({ abortSignal: abortController.signal });\n\t\t\tsetSubscriptionStatus('account', key, { status: 'active' });\n\t\t\tfor await (const notification of iterator) {\n\t\t\t\tconst lamports = notification.value?.lamports ?? null;\n\t\t\t\tconst slot = notification.context?.slot ?? null;\n\t\t\t\tconst entry: AccountCacheEntry = {\n\t\t\t\t\taddress: config.address,\n\t\t\t\t\tdata: notification.value?.data,\n\t\t\t\t\terror: undefined,\n\t\t\t\t\tfetching: false,\n\t\t\t\t\tlamports,\n\t\t\t\t\tlastFetchedAt: now(),\n\t\t\t\t\tslot,\n\t\t\t\t};\n\t\t\t\tlistener(entry);\n\t\t\t\tstore.setState((state) => ({\n\t\t\t\t\t...state,\n\t\t\t\t\taccounts: {\n\t\t\t\t\t\t...state.accounts,\n\t\t\t\t\t\t[key]: entry,\n\t\t\t\t\t},\n\t\t\t\t\tlastUpdatedAt: now(),\n\t\t\t\t}));\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tif (!abortController.signal.aborted) {\n\t\t\t\tlogger({\n\t\t\t\t\tdata: { address: key, ...formatError(error) },\n\t\t\t\t\tlevel: 'error',\n\t\t\t\t\tmessage: 'account subscription failed',\n\t\t\t\t});\n\t\t\t\tsetSubscriptionStatus('account', key, { error, status: 'error' });\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Subscribes to account notifications and keeps the store cache in sync.\n\t *\n\t * @param config - Watcher configuration specifying the target account.\n\t * @param listener - Callback invoked with updated account cache entries.\n\t * @returns Subscription handle that allows aborting the subscription.\n\t */\n\tfunction watchAccount(config: AccountWatcherConfig, listener: (account: AccountCacheEntry) => void) {\n\t\tconst abortController = new AbortController();\n\t\thandleAccountNotifications(config, listener, abortController).catch((error) => {\n\t\t\tif (!abortController.signal.aborted) {\n\t\t\t\tlogger({\n\t\t\t\t\tdata: { address: config.address.toString(), ...formatError(error) },\n\t\t\t\t\tlevel: 'error',\n\t\t\t\t\tmessage: 'account watcher error',\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t\treturn createSubscriptionHandle('account', config.address.toString(), abortController);\n\t}\n\n\t/**\n\t * Subscribes to balance changes for the provided address.\n\t *\n\t * @param config - Watcher configuration specifying the target account.\n\t * @param listener - Callback invoked with balance updates.\n\t * @returns Subscription handle that allows aborting the subscription.\n\t */\n\tfunction watchBalance(config: BalanceWatcherConfig, listener: (lamports: Lamports) => void) {\n\t\treturn watchAccount(config, (account) => {\n\t\t\tif (account.lamports !== null) {\n\t\t\t\tlistener(account.lamports);\n\t\t\t}\n\t\t});\n\t}\n\n\t/**\n\t * Consumes signature notifications and updates transaction metadata.\n\t *\n\t * @param config - Watcher configuration containing the signature to observe.\n\t * @param listener - Callback invoked with each subscription notification payload.\n\t * @param abortController - Abort controller tied to the subscription lifecycle.\n\t * @returns Promise that resolves when the subscription naturally completes.\n\t */\n\tasync function handleSignatureNotifications(\n\t\tconfig: SignatureWatcherConfig,\n\t\tlistener: (notification: unknown) => void,\n\t\tabortController: AbortController,\n\t): Promise<void> {\n\t\tconst commitment = config.commitment ?? store.getState().cluster.commitment;\n\t\tconst plan = runtime.rpcSubscriptions.signatureNotifications(config.signature, {\n\t\t\tcommitment,\n\t\t\tenableReceivedNotification: config.enableReceivedNotification,\n\t\t} as Parameters<SolanaRpcSubscriptionsApi['signatureNotifications']>[1]);\n\t\tconst key = config.signature.toString();\n\t\tsetSubscriptionStatus('signature', key, { status: 'activating' });\n\t\tabortController.signal.addEventListener('abort', () => onAbort('signature', key));\n\t\ttry {\n\t\t\tconst iterator = await plan.subscribe({ abortSignal: abortController.signal });\n\t\t\tsetSubscriptionStatus('signature', key, { status: 'active' });\n\t\t\tfor await (const notification of iterator) {\n\t\t\t\tlistener(notification);\n\t\t\t\tstore.setState((state) => ({\n\t\t\t\t\t...state,\n\t\t\t\t\tlastUpdatedAt: now(),\n\t\t\t\t\ttransactions: {\n\t\t\t\t\t\t...state.transactions,\n\t\t\t\t\t\t[key]: {\n\t\t\t\t\t\t\tlastUpdatedAt: now(),\n\t\t\t\t\t\t\tsignature: config.signature,\n\t\t\t\t\t\t\tstatus: 'waiting',\n\t\t\t\t\t\t},\n\t\t\t\t\t},\n\t\t\t\t}));\n\t\t\t}\n\t\t} catch (error) {\n\t\t\tif (!abortController.signal.aborted) {\n\t\t\t\tlogger({\n\t\t\t\t\tdata: { signature: key, ...formatError(error) },\n\t\t\t\t\tlevel: 'error',\n\t\t\t\t\tmessage: 'signature subscription failed',\n\t\t\t\t});\n\t\t\t\tsetSubscriptionStatus('signature', key, { error, status: 'error' });\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Subscribes to signature status updates for a submitted transaction.\n\t *\n\t * @param config - Watcher configuration containing the signature to observe.\n\t * @param listener - Callback invoked for each notification received.\n\t * @returns Subscription handle that allows aborting the subscription.\n\t */\n\tfunction watchSignature(config: SignatureWatcherConfig, listener: (notification: unknown) => void) {\n\t\tconst abortController = new AbortController();\n\t\thandleSignatureNotifications(config, listener, abortController).catch((error) => {\n\t\t\tif (!abortController.signal.aborted) {\n\t\t\t\tlogger({\n\t\t\t\t\tdata: { signature: config.signature.toString(), ...formatError(error) },\n\t\t\t\t\tlevel: 'error',\n\t\t\t\t\tmessage: 'signature watcher error',\n\t\t\t\t});\n\t\t\t}\n\t\t});\n\t\treturn createSubscriptionHandle('signature', config.signature.toString(), abortController);\n\t}\n\n\treturn {\n\t\twatchAccount,\n\t\twatchBalance,\n\t\twatchSignature,\n\t};\n}\n","import { createLogger, formatError } from '../logging/logger';\nimport { createSolanaRpcClient } from '../rpc/createSolanaRpcClient';\nimport { applySerializableState } from '../serialization/state';\nimport type { ClientStore, SolanaClient, SolanaClientConfig, SolanaClientRuntime } from '../types';\nimport { now } from '../utils';\nimport { resolveCluster } from '../utils/cluster';\nimport { createWalletRegistry } from '../wallet/registry';\nimport { createActions } from './actions';\nimport { createClientHelpers } from './createClientHelpers';\nimport { createClientStore, createInitialClientState } from './createClientStore';\nimport { createWatchers } from './watchers';\n\n/**\n * Creates a Solana client instance using the provided configuration.\n *\n * @param config - High-level configuration supplied by integrators.\n * @returns Fully initialized {@link SolanaClient} instance.\n */\nexport function createClient(config: SolanaClientConfig): SolanaClient {\n\tconst hydratedConfig = config.initialState ? applySerializableState(config, config.initialState) : config;\n\tconst resolvedCluster = resolveCluster({\n\t\tendpoint: hydratedConfig.rpc ?? hydratedConfig.endpoint,\n\t\tmoniker: hydratedConfig.cluster,\n\t\twebsocketEndpoint: hydratedConfig.websocket ?? hydratedConfig.websocketEndpoint,\n\t});\n\tconst commitment = hydratedConfig.commitment ?? 'confirmed';\n\tconst initialState = createInitialClientState({\n\t\tcommitment,\n\t\tendpoint: resolvedCluster.endpoint,\n\t\twebsocketEndpoint: resolvedCluster.websocketEndpoint,\n\t});\n\tconst store: ClientStore = config.createStore ? config.createStore(initialState) : createClientStore(initialState);\n\tconst rpcClient =\n\t\thydratedConfig.rpcClient ??\n\t\tcreateSolanaRpcClient({\n\t\t\tcommitment,\n\t\t\tendpoint: resolvedCluster.endpoint,\n\t\t\twebsocketEndpoint: resolvedCluster.websocketEndpoint,\n\t\t});\n\tconst runtime: SolanaClientRuntime = {\n\t\trpc: rpcClient.rpc,\n\t\trpcSubscriptions: rpcClient.rpcSubscriptions,\n\t};\n\tconst connectors = createWalletRegistry(hydratedConfig.walletConnectors ?? []);\n\tconst logger = createLogger(hydratedConfig.logger);\n\tconst actions = createActions({ connectors, logger, runtime, store });\n\tconst watchers = createWatchers({ logger, runtime, store });\n\tconst helpers = createClientHelpers(runtime, store);\n\tstore.setState((state) => ({\n\t\t...state,\n\t\tcluster: {\n\t\t\t...state.cluster,\n\t\t\tstatus: { status: 'connecting' },\n\t\t},\n\t\tlastUpdatedAt: now(),\n\t}));\n\tactions\n\t\t.setCluster(resolvedCluster.endpoint, {\n\t\t\tcommitment,\n\t\t\twebsocketEndpoint: resolvedCluster.websocketEndpoint,\n\t\t})\n\t\t.catch((error) =>\n\t\t\tlogger({\n\t\t\t\tdata: formatError(error),\n\t\t\t\tlevel: 'error',\n\t\t\t\tmessage: 'initial cluster setup failed',\n\t\t\t}),\n\t\t);\n\t/**\n\t * Resets the client's store back to its initial state.\n\t *\n\t * @returns Nothing; resets store contents.\n\t */\n\tfunction destroy(): void {\n\t\tstore.setState(() => initialState);\n\t}\n\treturn {\n\t\tactions,\n\t\tconfig,\n\t\tconnectors,\n\t\tdestroy,\n\t\tget helpers() {\n\t\t\treturn helpers;\n\t\t},\n\t\truntime,\n\t\tstore,\n\t\tget solTransfer() {\n\t\t\treturn helpers.solTransfer;\n\t\t},\n\t\tget SolTransfer() {\n\t\t\treturn helpers.solTransfer;\n\t\t},\n\t\tsplToken: helpers.splToken,\n\t\tSplToken: helpers.splToken,\n\t\tSplHelper: helpers.splToken,\n\t\tget stake() {\n\t\t\treturn helpers.stake;\n\t\t},\n\t\tget transaction() {\n\t\t\treturn helpers.transaction;\n\t\t},\n\t\tprepareTransaction: helpers.prepareTransaction,\n\t\twatchers,\n\t};\n}\n","import { getBase58Decoder } from '@solana/codecs-strings';\nimport type { Commitment, SendableTransaction, Signature, Transaction } from '@solana/kit';\nimport { address } from '@solana/kit';\nimport { getTransactionDecoder, getTransactionEncoder } from '@solana/transactions';\nimport type {\n\tSolanaSignAndSendTransactionFeature,\n\tSolanaSignMessageFeature,\n\tSolanaSignTransactionFeature,\n} from '@solana/wallet-standard-features';\nimport {\n\tSolanaSignAndSendTransaction,\n\tSolanaSignMessage,\n\tSolanaSignTransaction,\n} from '@solana/wallet-standard-features';\nimport { getWallets } from '@wallet-standard/app';\nimport type { IdentifierString, Wallet, WalletAccount as WalletStandardAccount } from '@wallet-standard/base';\nimport type {\n\tStandardConnectFeature,\n\tStandardDisconnectFeature,\n\tStandardEventsFeature,\n} from '@wallet-standard/features';\nimport { StandardConnect, StandardDisconnect, StandardEvents } from '@wallet-standard/features';\n\nimport type { WalletAccount, WalletConnector, WalletConnectorMetadata, WalletSession } from '../types';\n\nexport type WalletStandardConnectorMetadata = Readonly<{\n\tcanAutoConnect?: boolean;\n\tdefaultChain?: IdentifierString;\n\ticon?: string;\n\tid?: string;\n\tkind?: string;\n\tname?: string;\n}>;\n\ntype CommitmentLike = 'confirmed' | 'finalized' | 'processed';\n\nconst base58Decoder = getBase58Decoder();\nconst transactionDecoder = getTransactionDecoder();\nconst transactionEncoder = getTransactionEncoder();\n\n/**\n * Derives a connector identifier from a wallet instance.\n *\n * @param wallet - Wallet whose name will be transformed into an identifier.\n * @returns Namespaced identifier string derived from the wallet name.\n */\nfunction deriveConnectorId(wallet: Wallet): string {\n\tconst kebab = wallet.name.toLowerCase().replace(/[^a-z0-9]+/g, '-');\n\treturn `wallet-standard:${kebab}`;\n}\n\n/**\n * Returns the primary account exposed by a wallet.\n *\n * @param accounts - List of wallet accounts provided by the wallet standard API.\n * @returns The first account in the list.\n * @throws When the wallet did not provide any accounts.\n */\nfunction getPrimaryAccount(accounts: readonly WalletStandardAccount[]): WalletStandardAccount {\n\tconst primary = accounts[0];\n\tif (!primary) {\n\t\tthrow new Error('Wallet returned no accounts.');\n\t}\n\treturn primary;\n}\n\n/**\n * Maps an arbitrary commitment value to the limited subset supported by Wallet Standard.\n *\n * @param commitment - Commitment requested by the caller.\n * @returns A valid Wallet Standard commitment or `undefined` when unsupported.\n */\nfunction mapCommitment(commitment: unknown): CommitmentLike | undefined {\n\tif (commitment === 'processed' || commitment === 'confirmed' || commitment === 'finalized') {\n\t\treturn commitment;\n\t}\n\treturn undefined;\n}\n\n/**\n * Converts a Wallet Standard account into the @solana/client {@link WalletAccount} shape.\n *\n * @param walletAccount - Account provided by the wallet standard.\n * @returns Wallet account compatible with the client helpers.\n */\nfunction toSessionAccount(walletAccount: WalletStandardAccount): WalletAccount {\n\treturn {\n\t\taddress: address(walletAccount.address),\n\t\tlabel: walletAccount.label,\n\t\tpublicKey: new Uint8Array(walletAccount.publicKey),\n\t};\n}\n\n/**\n * Selects the preferred chain, if any, from a wallet account.\n *\n * @param account - Wallet Standard account to inspect.\n * @returns Preferred chain identifier or `undefined` when not specified.\n */\nfunction getChain(account: WalletStandardAccount): IdentifierString | undefined {\n\tconst [preferred] = account.chains ?? [];\n\treturn preferred;\n}\n\n/**\n * Disconnects the provided wallet when supported by the feature set.\n *\n * @param wallet - Wallet instance implementing the optional disconnect feature.\n */\nasync function disconnectWallet(wallet: Wallet): Promise<void> {\n\tconst disconnectFeature = wallet.features[StandardDisconnect] as\n\t\t| StandardDisconnectFeature[typeof StandardDisconnect]\n\t\t| undefined;\n\tif (disconnectFeature) {\n\t\tawait disconnectFeature.disconnect();\n\t}\n}\n\n/**\n * Builds a connector function that adheres to the wallet standard API.\n *\n * @param wallet - Wallet instance compatible with Wallet Standard.\n * @param options - Optional overrides for connector metadata.\n * @returns A {@link WalletConnector} wrapping the provided wallet.\n */\nexport function createWalletStandardConnector(\n\twallet: Wallet,\n\toptions: WalletStandardConnectorMetadata = {},\n): WalletConnector {\n\tconst metadata: WalletConnectorMetadata = {\n\t\tcanAutoConnect: options.canAutoConnect ?? Boolean(wallet.features[StandardConnect]),\n\t\ticon: options.icon ?? wallet.icon,\n\t\tid: options.id ?? deriveConnectorId(wallet),\n\t\tkind: options.kind ?? 'wallet-standard',\n\t\tname: options.name ?? wallet.name,\n\t\tready: typeof window !== 'undefined',\n\t};\n\n\t/**\n\t * Establishes a session with the wallet, optionally attempting a silent connection.\n\t *\n\t * @param connectionOptions - Optional connection configuration.\n\t * @returns A wallet session that exposes signing helpers.\n\t */\n\tasync function connect(\n\t\tconnectionOptions: Readonly<{ autoConnect?: boolean; allowInteractiveFallback?: boolean }> = {},\n\t): Promise<WalletSession> {\n\t\tconst connectFeature = wallet.features[StandardConnect] as\n\t\t\t| StandardConnectFeature[typeof StandardConnect]\n\t\t\t| undefined;\n\t\tconst eventsFeature = wallet.features[StandardEvents] as\n\t\t\t| StandardEventsFeature[typeof StandardEvents]\n\t\t\t| undefined;\n\t\tconst shouldConnectSilently = Boolean(connectionOptions.autoConnect);\n\t\tconst allowInteractiveFallback = connectionOptions.allowInteractiveFallback ?? true;\n\t\tlet walletAccounts = wallet.accounts;\n\t\tif (connectFeature) {\n\t\t\tconst connectWithMode = async (silent?: boolean) =>\n\t\t\t\tconnectFeature.connect({\n\t\t\t\t\tsilent,\n\t\t\t\t});\n\t\t\ttry {\n\t\t\t\tconst { accounts } = await connectWithMode(shouldConnectSilently);\n\t\t\t\tif (accounts.length) {\n\t\t\t\t\twalletAccounts = accounts;\n\t\t\t\t}\n\t\t\t} catch (error) {\n\t\t\t\tif (!shouldConnectSilently || !allowInteractiveFallback) {\n\t\t\t\t\tthrow error;\n\t\t\t\t}\n\t\t\t\tconst { accounts } = await connectWithMode(false);\n\t\t\t\tif (accounts.length) {\n\t\t\t\t\twalletAccounts = accounts;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tlet currentAccount = getPrimaryAccount(walletAccounts);\n\t\tlet sessionAccount = toSessionAccount(currentAccount);\n\n\t\tconst signMessageFeature = wallet.features[SolanaSignMessage] as\n\t\t\t| SolanaSignMessageFeature[typeof SolanaSignMessage]\n\t\t\t| undefined;\n\t\tconst signTransactionFeature = wallet.features[SolanaSignTransaction] as\n\t\t\t| SolanaSignTransactionFeature[typeof SolanaSignTransaction]\n\t\t\t| undefined;\n\t\tconst signAndSendFeature = wallet.features[SolanaSignAndSendTransaction] as\n\t\t\t| SolanaSignAndSendTransactionFeature[typeof SolanaSignAndSendTransaction]\n\t\t\t| undefined;\n\n\t\tconst resolvedChain = options.defaultChain ?? getChain(currentAccount);\n\n\t\t/**\n\t\t * Signs messages using the wallet standard feature when available.\n\t\t *\n\t\t * @param message - Message payload to sign.\n\t\t * @returns Promise resolving with the signature.\n\t\t */\n\t\tconst signMessage = signMessageFeature\n\t\t\t? async (message: Uint8Array) => {\n\t\t\t\t\tconst [output] = await signMessageFeature.signMessage({\n\t\t\t\t\t\taccount: currentAccount,\n\t\t\t\t\t\tmessage,\n\t\t\t\t\t});\n\t\t\t\t\treturn output.signature;\n\t\t\t\t}\n\t\t\t: undefined;\n\n\t\t/**\n\t\t * Signs transactions using the wallet standard feature when available.\n\t\t *\n\t\t * @param transaction - Transaction to sign.\n\t\t * @returns Promise resolving with the signed transaction.\n\t\t */\n\t\tconst signTransaction = signTransactionFeature\n\t\t\t? async (transaction: SendableTransaction & Transaction) => {\n\t\t\t\t\tconst wireBytes = new Uint8Array(transactionEncoder.encode(transaction));\n\t\t\t\t\tconst request = resolvedChain\n\t\t\t\t\t\t? {\n\t\t\t\t\t\t\t\taccount: currentAccount,\n\t\t\t\t\t\t\t\tchain: resolvedChain,\n\t\t\t\t\t\t\t\ttransaction: wireBytes,\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t: {\n\t\t\t\t\t\t\t\taccount: currentAccount,\n\t\t\t\t\t\t\t\ttransaction: wireBytes,\n\t\t\t\t\t\t\t};\n\t\t\t\t\tconst [output] = await signTransactionFeature.signTransaction(request);\n\t\t\t\t\treturn transactionDecoder.decode(output.signedTransaction) as SendableTransaction & Transaction;\n\t\t\t\t}\n\t\t\t: undefined;\n\n\t\t/**\n\t\t * Signs and sends transactions using the wallet standard feature when available.\n\t\t *\n\t\t * @param transaction - Transaction to sign and submit.\n\t\t * @param config - Optional commitment override for the submission.\n\t\t * @returns Promise resolving with the submitted signature.\n\t\t */\n\t\tconst sendTransaction = signAndSendFeature\n\t\t\t? async (\n\t\t\t\t\ttransaction: SendableTransaction & Transaction,\n\t\t\t\t\tconfig?: Readonly<{ commitment?: Commitment }>,\n\t\t\t\t) => {\n\t\t\t\t\tconst wireBytes = new Uint8Array(transactionEncoder.encode(transaction));\n\t\t\t\t\tconst chain: IdentifierString =\n\t\t\t\t\t\toptions.defaultChain ?? getChain(currentAccount) ?? 'solana:mainnet-beta';\n\t\t\t\t\tconst [output] = await signAndSendFeature.signAndSendTransaction({\n\t\t\t\t\t\taccount: currentAccount,\n\t\t\t\t\t\tchain,\n\t\t\t\t\t\toptions: {\n\t\t\t\t\t\t\tcommitment: mapCommitment(config?.commitment),\n\t\t\t\t\t\t},\n\t\t\t\t\t\ttransaction: wireBytes,\n\t\t\t\t\t});\n\t\t\t\t\treturn base58Decoder.decode(output.signature) as Signature;\n\t\t\t\t}\n\t\t\t: undefined;\n\n\t\t/**\n\t\t * Disconnects the session scoped to this connect invocation.\n\t\t *\n\t\t * @returns Promise that resolves once the wallet has been disconnected.\n\t\t */\n\t\tasync function disconnectSession(): Promise<void> {\n\t\t\tchangeUnsubscribe?.();\n\t\t\tawait disconnectWallet(wallet);\n\t\t}\n\n\t\tlet changeUnsubscribe: (() => void) | undefined;\n\t\tconst onAccountsChanged = eventsFeature\n\t\t\t? (listener: (accounts: WalletAccount[]) => void) => {\n\t\t\t\t\tconst off = eventsFeature.on('change', ({ accounts }) => {\n\t\t\t\t\t\tif (!accounts) return;\n\t\t\t\t\t\tif (!accounts.length) {\n\t\t\t\t\t\t\tlistener([]);\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcurrentAccount = accounts[0];\n\t\t\t\t\t\tsessionAccount = toSessionAccount(currentAccount);\n\t\t\t\t\t\tlistener(accounts.map(toSessionAccount));\n\t\t\t\t\t});\n\t\t\t\t\treturn off;\n\t\t\t\t}\n\t\t\t: undefined;\n\n\t\treturn {\n\t\t\taccount: sessionAccount,\n\t\t\tconnector: metadata,\n\t\t\tdisconnect: disconnectSession,\n\t\t\tonAccountsChanged: onAccountsChanged\n\t\t\t\t? (listener) => {\n\t\t\t\t\t\tchangeUnsubscribe = onAccountsChanged(listener);\n\t\t\t\t\t\treturn () => {\n\t\t\t\t\t\t\tchangeUnsubscribe?.();\n\t\t\t\t\t\t\tchangeUnsubscribe = undefined;\n\t\t\t\t\t\t};\n\t\t\t\t\t}\n\t\t\t\t: undefined,\n\t\t\tsendTransaction,\n\t\t\tsignMessage,\n\t\t\tsignTransaction,\n\t\t};\n\t}\n\n\t/**\n\t * Disconnects the wallet session when supported.\n\t *\n\t * @returns Promise that resolves once the wallet has been disconnected.\n\t */\n\tasync function disconnect(): Promise<void> {\n\t\tawait disconnectWallet(wallet);\n\t}\n\n\t/**\n\t * Indicates whether the runtime environment appears to be browser based.\n\t *\n\t * @returns `true` when the wallet can be interacted with.\n\t */\n\tfunction isSupported(): boolean {\n\t\treturn typeof window !== 'undefined';\n\t}\n\n\treturn {\n\t\t...metadata,\n\t\tconnect,\n\t\tdisconnect,\n\t\tisSupported,\n\t};\n}\n\n/**\n * Maps a wallet instance to a connector, applying optional overrides.\n *\n * @param wallet - Wallet retrieved from Wallet Standard.\n * @param overrides - Optional override factory for connector metadata.\n * @returns Connector representation of the wallet.\n */\nfunction mapWalletToConnector(\n\twallet: Wallet,\n\toverrides?: (wallet: Wallet) => WalletStandardConnectorMetadata | undefined,\n): WalletConnector {\n\treturn createWalletStandardConnector(wallet, overrides?.(wallet));\n}\n\nexport type WalletStandardDiscoveryOptions = Readonly<{\n\toverrides?: (wallet: Wallet) => WalletStandardConnectorMetadata | undefined;\n}>;\n\n/**\n * Returns connectors for all wallets currently registered with Wallet Standard.\n *\n * @param options - Optional discovery configuration.\n * @returns A deduplicated list of wallet connectors.\n */\nexport function getWalletStandardConnectors(options: WalletStandardDiscoveryOptions = {}): readonly WalletConnector[] {\n\tconst { get } = getWallets();\n\tconst connectors = get().map((wallet) => mapWalletToConnector(wallet, options.overrides));\n\n\t// Deduplicate by connector ID (keep first occurrence)\n\tconst seen = new Set<string>();\n\treturn connectors.filter((connector) => {\n\t\tif (seen.has(connector.id)) {\n\t\t\treturn false;\n\t\t}\n\t\tseen.add(connector.id);\n\t\treturn true;\n\t});\n}\n\n/**\n * Watches Wallet Standard registrations and emits new connector lists whenever the set changes.\n *\n * @param onChange - Callback invoked each time the connector set changes.\n * @param options - Optional discovery configuration overrides.\n * @returns Cleanup function that removes all listeners.\n */\nexport function watchWalletStandardConnectors(\n\tonChange: (connectors: readonly WalletConnector[]) => void,\n\toptions: WalletStandardDiscoveryOptions = {},\n): () => void {\n\tconst { get, on } = getWallets();\n\tconst emit = () => {\n\t\tconst connectors = get().map((wallet) => mapWalletToConnector(wallet, options.overrides));\n\n\t\t// Deduplicate by connector ID (keep first occurrence)\n\t\tconst seen = new Set<string>();\n\t\tconst deduplicated = connectors.filter((connector) => {\n\t\t\tif (seen.has(connector.id)) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tseen.add(connector.id);\n\t\t\treturn true;\n\t\t});\n\n\t\tonChange(deduplicated);\n\t};\n\temit();\n\tconst offRegister = on('register', emit);\n\tconst offUnregister = on('unregister', emit);\n\treturn () => {\n\t\toffRegister();\n\t\toffUnregister();\n\t};\n}\n","import { getWallets } from '@wallet-standard/app';\nimport type { Wallet } from '@wallet-standard/base';\nimport { StandardConnect } from '@wallet-standard/features';\nimport type { WalletConnector } from '../types';\nimport { createWalletStandardConnector } from './standard';\n\ntype DiscoveryOptions = Readonly<{\n\toverrides?: (wallet: Wallet) => Parameters<typeof createWalletStandardConnector>[1];\n\tfilter?: (wallet: Wallet) => boolean;\n}>;\n\n/**\n * Returns connectors for all Wallet Standard wallets currently registered.\n */\nexport function autoDiscover(options: DiscoveryOptions = {}): readonly WalletConnector[] {\n\tconst { get } = getWallets();\n\tconst wallets = get().filter((wallet) => (options.filter ? options.filter(wallet) : true));\n\tconst connectors = wallets.map((wallet) => createWalletStandardConnector(wallet, options.overrides?.(wallet)));\n\n\t// Deduplicate by connector id.\n\tconst seen = new Set<string>();\n\treturn connectors.filter((connector) => {\n\t\tif (seen.has(connector.id)) return false;\n\t\tseen.add(connector.id);\n\t\treturn true;\n\t});\n}\n\n/**\n * Creates a connector for any Wallet Standard wallet that supports connect.\n */\nexport function injected(options?: Parameters<typeof createWalletStandardConnector>[1]): WalletConnector {\n\tconst connector: WalletConnector = {\n\t\tcanAutoConnect: true,\n\t\tid: 'wallet-standard:injected',\n\t\tkind: 'wallet-standard',\n\t\tname: 'Injected Wallet',\n\t\tready: typeof window !== 'undefined',\n\t\tasync connect() {\n\t\t\tconst wallets = getWallets().get();\n\t\t\tconst first = wallets.find((wallet) => StandardConnect in wallet.features);\n\t\t\tif (!first) {\n\t\t\t\tthrow new Error('No Wallet Standard wallets available.');\n\t\t\t}\n\t\t\treturn createWalletStandardConnector(first, options).connect();\n\t\t},\n\t\tasync disconnect() {\n\t\t\t// No-op: injected aggregate does not manage specific wallet state.\n\t\t},\n\t\tisSupported() {\n\t\t\treturn typeof window !== 'undefined';\n\t\t},\n\t};\n\treturn connector;\n}\n\nfunction filterByName(name: string) {\n\tconst lower = name.toLowerCase();\n\treturn (wallet: Wallet) => wallet.name.toLowerCase().includes(lower);\n}\n\n/**\n * Factory for a Phantom-only connector.\n */\nexport function phantom(options?: Parameters<typeof createWalletStandardConnector>[1]): readonly WalletConnector[] {\n\treturn autoDiscover({\n\t\tfilter: filterByName('phantom'),\n\t\toverrides: () => ({ ...options, id: 'wallet-standard:phantom' }),\n\t});\n}\n\n/**\n * Factory for a Solflare-only connector.\n */\nexport function solflare(options?: Parameters<typeof createWalletStandardConnector>[1]): readonly WalletConnector[] {\n\treturn autoDiscover({\n\t\tfilter: filterByName('solflare'),\n\t\toverrides: () => ({ ...options, id: 'wallet-standard:solflare' }),\n\t});\n}\n\n/**\n * Factory for a Backpack-only connector.\n */\nexport function backpack(options?: Parameters<typeof createWalletStandardConnector>[1]): readonly WalletConnector[] {\n\treturn autoDiscover({\n\t\tfilter: filterByName('backpack'),\n\t\toverrides: () => ({ ...options, id: 'wallet-standard:backpack' }),\n\t});\n}\n","import type { ClusterUrl, Commitment } from '@solana/kit';\n\nimport type { SolanaClient, SolanaClientConfig, WalletConnector } from '../types';\nimport { type ClusterMoniker, resolveCluster } from '../utils/cluster';\nimport { autoDiscover, backpack, phantom, solflare } from '../wallet/connectors';\nimport { createClient } from './createClient';\n\ntype BasePassthrough = Omit<SolanaClientConfig, 'endpoint' | 'websocketEndpoint' | 'walletConnectors'>;\n\nexport type CreateDefaultClientOptions = Readonly<\n\tBasePassthrough & {\n\t\tcluster?: ClusterMoniker;\n\t\tcommitment?: Commitment;\n\t\t/**\n\t\t * Alias for endpoint/RPC URL.\n\t\t */\n\t\trpc?: ClusterUrl;\n\t\t/**\n\t\t * Optional HTTP endpoint override. `rpc` takes precedence when both are provided.\n\t\t */\n\t\tendpoint?: ClusterUrl;\n\t\t/**\n\t\t * Optional websocket override. When omitted we infer from HTTP.\n\t\t */\n\t\twebsocket?: ClusterUrl;\n\t\twalletConnectors?: readonly WalletConnector[] | 'default';\n\t}\n>;\n\nexport function defaultWalletConnectors(): readonly WalletConnector[] {\n\treturn [...phantom(), ...solflare(), ...backpack(), ...autoDiscover()];\n}\n\nfunction normalizeUrl(value?: string | null): ClusterUrl | undefined {\n\tif (!value) return undefined;\n\tconst trimmed = value.trim();\n\treturn trimmed.length ? (trimmed as ClusterUrl) : undefined;\n}\n\nexport function resolveClientConfig(config: CreateDefaultClientOptions | SolanaClientConfig = {}): SolanaClientConfig {\n\tconst {\n\t\tcluster,\n\t\tendpoint: endpointOverride,\n\t\trpc,\n\t\twebsocket,\n\t\twebsocketEndpoint,\n\t\twalletConnectors,\n\t\t...passthrough\n\t} = config as CreateDefaultClientOptions & Partial<SolanaClientConfig>;\n\tconst resolvedEndpoint =\n\t\tnormalizeUrl(rpc) ?? normalizeUrl(endpointOverride) ?? normalizeUrl((config as SolanaClientConfig).endpoint);\n\tconst resolvedCluster = resolveCluster({\n\t\tendpoint: resolvedEndpoint,\n\t\tmoniker: cluster ?? undefined,\n\t\twebsocketEndpoint: normalizeUrl(websocket ?? websocketEndpoint),\n\t});\n\tconst resolvedConnectors =\n\t\twalletConnectors === undefined || walletConnectors === 'default' ? defaultWalletConnectors() : walletConnectors;\n\n\treturn {\n\t\t...passthrough,\n\t\tendpoint: resolvedCluster.endpoint,\n\t\twebsocketEndpoint: resolvedCluster.websocketEndpoint,\n\t\twalletConnectors: resolvedConnectors,\n\t};\n}\n\nexport function createDefaultClient(config: CreateDefaultClientOptions = {}): SolanaClient {\n\treturn createClient(resolveClientConfig(config));\n}\n","export type AsyncStatus = 'error' | 'idle' | 'loading' | 'success';\n\nexport type AsyncState<T> = Readonly<{\n\tdata?: T;\n\terror?: unknown;\n\tstatus: AsyncStatus;\n}>;\n\nexport function createInitialAsyncState<T>(): AsyncState<T> {\n\treturn { status: 'idle' };\n}\n\nexport function createAsyncState<T>(\n\tstatus: AsyncStatus,\n\tpayload: Readonly<{ data?: T; error?: unknown }> = {},\n): AsyncState<T> {\n\treturn {\n\t\tdata: payload.data,\n\t\terror: payload.error,\n\t\tstatus,\n\t};\n}\n","import type { SolTransferHelper, SolTransferPrepareConfig, SolTransferSendOptions } from '../features/sol';\nimport { type AsyncState, createAsyncState, createInitialAsyncState } from '../state/asyncState';\n\ntype SolTransferSignature = Awaited<ReturnType<SolTransferHelper['sendTransfer']>>;\n\ntype Listener = () => void;\n\nexport type SolTransferControllerConfig = Readonly<{\n\tauthorityProvider?: () => SolTransferPrepareConfig['authority'] | undefined;\n\thelper: SolTransferHelper;\n}>;\n\nexport type SolTransferInput = Omit<SolTransferPrepareConfig, 'authority'> & {\n\tauthority?: SolTransferPrepareConfig['authority'];\n};\n\nexport type SolTransferController = Readonly<{\n\tgetHelper(): SolTransferHelper;\n\tgetState(): AsyncState<SolTransferSignature>;\n\treset(): void;\n\tsend(config: SolTransferInput, options?: SolTransferSendOptions): Promise<SolTransferSignature>;\n\tsubscribe(listener: Listener): () => void;\n}>;\n\nfunction ensureAuthority(\n\tinput: SolTransferInput,\n\tresolveDefault?: () => SolTransferPrepareConfig['authority'] | undefined,\n): SolTransferPrepareConfig {\n\tconst authority = input.authority ?? resolveDefault?.();\n\tif (!authority) {\n\t\tthrow new Error('Connect a wallet or supply an `authority` before sending SOL transfers.');\n\t}\n\treturn {\n\t\t...input,\n\t\tauthority,\n\t};\n}\n\nexport function createSolTransferController(config: SolTransferControllerConfig): SolTransferController {\n\tconst listeners = new Set<Listener>();\n\tconst helper = config.helper;\n\tconst authorityProvider = config.authorityProvider;\n\tlet state: AsyncState<SolTransferSignature> = createInitialAsyncState<SolTransferSignature>();\n\n\tfunction notify() {\n\t\tfor (const listener of listeners) {\n\t\t\tlistener();\n\t\t}\n\t}\n\n\tfunction setState(next: AsyncState<SolTransferSignature>) {\n\t\tstate = next;\n\t\tnotify();\n\t}\n\n\tasync function send(config: SolTransferInput, options?: SolTransferSendOptions): Promise<SolTransferSignature> {\n\t\tconst request = ensureAuthority(config, authorityProvider);\n\t\tsetState(createAsyncState<SolTransferSignature>('loading'));\n\t\ttry {\n\t\t\tconst signature = await helper.sendTransfer(request, options);\n\t\t\tsetState(createAsyncState<SolTransferSignature>('success', { data: signature }));\n\t\t\treturn signature;\n\t\t} catch (error) {\n\t\t\tsetState(createAsyncState<SolTransferSignature>('error', { error }));\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\tfunction subscribe(listener: Listener): () => void {\n\t\tlisteners.add(listener);\n\t\treturn () => {\n\t\t\tlisteners.delete(listener);\n\t\t};\n\t}\n\n\tfunction reset() {\n\t\tsetState(createInitialAsyncState<SolTransferSignature>());\n\t}\n\n\treturn {\n\t\tgetHelper: () => helper,\n\t\tgetState: () => state,\n\t\treset,\n\t\tsend,\n\t\tsubscribe,\n\t};\n}\n","import type { SolTransferSendOptions } from '../features/sol';\nimport type { SplTokenHelper, SplTransferPrepareConfig } from '../features/spl';\nimport { type AsyncState, createAsyncState, createInitialAsyncState } from '../state/asyncState';\n\ntype SplTransferSignature = Awaited<ReturnType<SplTokenHelper['sendTransfer']>>;\n\ntype Listener = () => void;\n\nexport type SplTransferInput = Omit<SplTransferPrepareConfig, 'authority' | 'sourceOwner'> & {\n\tauthority?: SplTransferPrepareConfig['authority'];\n\tsourceOwner?: SplTransferPrepareConfig['sourceOwner'];\n};\n\nexport type SplTransferControllerConfig = Readonly<{\n\tauthorityProvider?: () => SplTransferPrepareConfig['authority'] | undefined;\n\thelper: SplTokenHelper;\n\tsourceOwnerProvider?: () => SplTransferPrepareConfig['sourceOwner'] | undefined;\n}>;\n\nexport type SplTransferController = Readonly<{\n\tgetHelper(): SplTokenHelper;\n\tgetState(): AsyncState<SplTransferSignature>;\n\treset(): void;\n\tsend(config: SplTransferInput, options?: SolTransferSendOptions): Promise<SplTransferSignature>;\n\tsubscribe(listener: Listener): () => void;\n}>;\n\nfunction ensureTransferConfig(\n\tinput: SplTransferInput,\n\tresolveAuthority?: () => SplTransferPrepareConfig['authority'] | undefined,\n\tresolveSourceOwner?: () => SplTransferPrepareConfig['sourceOwner'] | undefined,\n): SplTransferPrepareConfig {\n\tconst authority = input.authority ?? resolveAuthority?.();\n\tif (!authority) {\n\t\tthrow new Error('Connect a wallet or supply an `authority` before sending SPL tokens.');\n\t}\n\tconst sourceOwner = input.sourceOwner ?? resolveSourceOwner?.();\n\tif (!sourceOwner) {\n\t\tthrow new Error('Unable to resolve a source owner for the SPL token transfer.');\n\t}\n\treturn {\n\t\t...input,\n\t\tauthority,\n\t\tsourceOwner,\n\t};\n}\n\nexport function createSplTransferController(config: SplTransferControllerConfig): SplTransferController {\n\tconst helper = config.helper;\n\tconst authorityProvider = config.authorityProvider;\n\tconst sourceOwnerProvider = config.sourceOwnerProvider;\n\tconst listeners = new Set<Listener>();\n\tlet state: AsyncState<SplTransferSignature> = createInitialAsyncState<SplTransferSignature>();\n\n\tfunction notify() {\n\t\tfor (const listener of listeners) {\n\t\t\tlistener();\n\t\t}\n\t}\n\n\tfunction setState(next: AsyncState<SplTransferSignature>) {\n\t\tstate = next;\n\t\tnotify();\n\t}\n\n\tasync function send(config: SplTransferInput, options?: SolTransferSendOptions): Promise<SplTransferSignature> {\n\t\tconst resolvedConfig = ensureTransferConfig(\n\t\t\tconfig,\n\t\t\tconfig.authority ? undefined : authorityProvider,\n\t\t\tconfig.sourceOwner ? undefined : sourceOwnerProvider,\n\t\t);\n\t\tsetState(createAsyncState<SplTransferSignature>('loading'));\n\t\ttry {\n\t\t\tconst signature = await helper.sendTransfer(resolvedConfig, options);\n\t\t\tsetState(createAsyncState<SplTransferSignature>('success', { data: signature }));\n\t\t\treturn signature;\n\t\t} catch (error) {\n\t\t\tsetState(createAsyncState<SplTransferSignature>('error', { error }));\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\tfunction subscribe(listener: Listener): () => void {\n\t\tlisteners.add(listener);\n\t\treturn () => {\n\t\t\tlisteners.delete(listener);\n\t\t};\n\t}\n\n\tfunction reset() {\n\t\tsetState(createInitialAsyncState<SplTransferSignature>());\n\t}\n\n\treturn {\n\t\tgetHelper: () => helper,\n\t\tgetState: () => state,\n\t\treset,\n\t\tsend,\n\t\tsubscribe,\n\t};\n}\n","import type {\n\tStakeHelper,\n\tStakePrepareConfig,\n\tStakeSendOptions,\n\tUnstakePrepareConfig,\n\tUnstakeSendOptions,\n\tWithdrawPrepareConfig,\n\tWithdrawSendOptions,\n} from '../features/stake';\nimport { type AsyncState, createAsyncState, createInitialAsyncState } from '../state/asyncState';\n\ntype StakeSignature = Awaited<ReturnType<StakeHelper['sendStake']>>;\ntype UnstakeSignature = Awaited<ReturnType<StakeHelper['sendUnstake']>>;\ntype WithdrawSignature = Awaited<ReturnType<StakeHelper['sendWithdraw']>>;\n\ntype Listener = () => void;\n\nexport type StakeControllerConfig = Readonly<{\n\tauthorityProvider?: () => StakePrepareConfig['authority'] | undefined;\n\thelper: StakeHelper;\n}>;\n\nexport type StakeInput = Omit<StakePrepareConfig, 'authority'> & {\n\tauthority?: StakePrepareConfig['authority'];\n};\n\nexport type UnstakeInput = Omit<UnstakePrepareConfig, 'authority'> & {\n\tauthority?: UnstakePrepareConfig['authority'];\n};\n\nexport type WithdrawInput = Omit<WithdrawPrepareConfig, 'authority'> & {\n\tauthority?: WithdrawPrepareConfig['authority'];\n};\n\nexport type StakeController = Readonly<{\n\tgetHelper(): StakeHelper;\n\tgetState(): AsyncState<StakeSignature>;\n\tgetUnstakeState(): AsyncState<UnstakeSignature>;\n\tgetWithdrawState(): AsyncState<WithdrawSignature>;\n\treset(): void;\n\tresetUnstake(): void;\n\tresetWithdraw(): void;\n\tstake(config: StakeInput, options?: StakeSendOptions): Promise<StakeSignature>;\n\tunstake(config: UnstakeInput, options?: UnstakeSendOptions): Promise<UnstakeSignature>;\n\twithdraw(config: WithdrawInput, options?: WithdrawSendOptions): Promise<WithdrawSignature>;\n\tsubscribe(listener: Listener): () => void;\n\tsubscribeUnstake(listener: Listener): () => void;\n\tsubscribeWithdraw(listener: Listener): () => void;\n}>;\n\nfunction ensureAuthority(\n\tinput: StakeInput,\n\tresolveDefault?: () => StakePrepareConfig['authority'] | undefined,\n): StakePrepareConfig {\n\tconst authority = input.authority ?? resolveDefault?.();\n\tif (!authority) {\n\t\tthrow new Error('Connect a wallet or supply an `authority` before staking SOL.');\n\t}\n\treturn {\n\t\t...input,\n\t\tauthority,\n\t};\n}\n\nfunction ensureUnstakeAuthority(\n\tinput: UnstakeInput,\n\tresolveDefault?: () => UnstakePrepareConfig['authority'] | undefined,\n): UnstakePrepareConfig {\n\tconst authority = input.authority ?? resolveDefault?.();\n\tif (!authority) {\n\t\tthrow new Error('Connect a wallet or supply an `authority` before unstaking SOL.');\n\t}\n\treturn {\n\t\t...input,\n\t\tauthority,\n\t};\n}\n\nfunction ensureWithdrawAuthority(\n\tinput: WithdrawInput,\n\tresolveDefault?: () => WithdrawPrepareConfig['authority'] | undefined,\n): WithdrawPrepareConfig {\n\tconst authority = input.authority ?? resolveDefault?.();\n\tif (!authority) {\n\t\tthrow new Error('Connect a wallet or supply an `authority` before withdrawing SOL.');\n\t}\n\treturn {\n\t\t...input,\n\t\tauthority,\n\t};\n}\n\nexport function createStakeController(config: StakeControllerConfig): StakeController {\n\tconst listeners = new Set<Listener>();\n\tconst unstakeListeners = new Set<Listener>();\n\tconst withdrawListeners = new Set<Listener>();\n\tconst helper = config.helper;\n\tconst authorityProvider = config.authorityProvider;\n\tlet state: AsyncState<StakeSignature> = createInitialAsyncState<StakeSignature>();\n\tlet unstakeState: AsyncState<UnstakeSignature> = createInitialAsyncState<UnstakeSignature>();\n\tlet withdrawState: AsyncState<WithdrawSignature> = createInitialAsyncState<WithdrawSignature>();\n\n\tfunction notify() {\n\t\tfor (const listener of listeners) {\n\t\t\tlistener();\n\t\t}\n\t}\n\n\tfunction notifyUnstake() {\n\t\tfor (const listener of unstakeListeners) {\n\t\t\tlistener();\n\t\t}\n\t}\n\n\tfunction notifyWithdraw() {\n\t\tfor (const listener of withdrawListeners) {\n\t\t\tlistener();\n\t\t}\n\t}\n\n\tfunction setState(next: AsyncState<StakeSignature>) {\n\t\tstate = next;\n\t\tnotify();\n\t}\n\n\tfunction setUnstakeState(next: AsyncState<UnstakeSignature>) {\n\t\tunstakeState = next;\n\t\tnotifyUnstake();\n\t}\n\n\tfunction setWithdrawState(next: AsyncState<WithdrawSignature>) {\n\t\twithdrawState = next;\n\t\tnotifyWithdraw();\n\t}\n\n\tasync function stake(config: StakeInput, options?: StakeSendOptions): Promise<StakeSignature> {\n\t\tconst request = ensureAuthority(config, authorityProvider);\n\t\tsetState(createAsyncState<StakeSignature>('loading'));\n\t\ttry {\n\t\t\tconst signature = await helper.sendStake(request, options);\n\t\t\tsetState(createAsyncState<StakeSignature>('success', { data: signature }));\n\t\t\treturn signature;\n\t\t} catch (error) {\n\t\t\tsetState(createAsyncState<StakeSignature>('error', { error }));\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\tasync function unstake(config: UnstakeInput, options?: UnstakeSendOptions): Promise<UnstakeSignature> {\n\t\tconst request = ensureUnstakeAuthority(config, authorityProvider);\n\t\tsetUnstakeState(createAsyncState<UnstakeSignature>('loading'));\n\t\ttry {\n\t\t\tconst signature = await helper.sendUnstake(request, options);\n\t\t\tsetUnstakeState(createAsyncState<UnstakeSignature>('success', { data: signature }));\n\t\t\treturn signature;\n\t\t} catch (error) {\n\t\t\tsetUnstakeState(createAsyncState<UnstakeSignature>('error', { error }));\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\tasync function withdraw(config: WithdrawInput, options?: WithdrawSendOptions): Promise<WithdrawSignature> {\n\t\tconst request = ensureWithdrawAuthority(config, authorityProvider);\n\t\tsetWithdrawState(createAsyncState<WithdrawSignature>('loading'));\n\t\ttry {\n\t\t\tconst signature = await helper.sendWithdraw(request, options);\n\t\t\tsetWithdrawState(createAsyncState<WithdrawSignature>('success', { data: signature }));\n\t\t\treturn signature;\n\t\t} catch (error) {\n\t\t\tsetWithdrawState(createAsyncState<WithdrawSignature>('error', { error }));\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\tfunction subscribe(listener: Listener): () => void {\n\t\tlisteners.add(listener);\n\t\treturn () => {\n\t\t\tlisteners.delete(listener);\n\t\t};\n\t}\n\n\tfunction subscribeUnstake(listener: Listener): () => void {\n\t\tunstakeListeners.add(listener);\n\t\treturn () => {\n\t\t\tunstakeListeners.delete(listener);\n\t\t};\n\t}\n\n\tfunction subscribeWithdraw(listener: Listener): () => void {\n\t\twithdrawListeners.add(listener);\n\t\treturn () => {\n\t\t\twithdrawListeners.delete(listener);\n\t\t};\n\t}\n\n\tfunction reset() {\n\t\tsetState(createInitialAsyncState<StakeSignature>());\n\t}\n\n\tfunction resetUnstake() {\n\t\tsetUnstakeState(createInitialAsyncState<UnstakeSignature>());\n\t}\n\n\tfunction resetWithdraw() {\n\t\tsetWithdrawState(createInitialAsyncState<WithdrawSignature>());\n\t}\n\n\treturn {\n\t\tgetHelper: () => helper,\n\t\tgetState: () => state,\n\t\tgetUnstakeState: () => unstakeState,\n\t\tgetWithdrawState: () => withdrawState,\n\t\treset,\n\t\tresetUnstake,\n\t\tresetWithdraw,\n\t\tstake,\n\t\tunstake,\n\t\twithdraw,\n\t\tsubscribe,\n\t\tsubscribeUnstake,\n\t\tsubscribeWithdraw,\n\t};\n}\n","import type { Lamports } from '@solana/kit';\n\nimport { lamports } from '../numeric/lamports';\nimport { type BigintLike, toBigint } from '../numeric/math';\n\n/**\n * Serializes a bigint to its decimal string representation for JSON payloads.\n *\n * @param value - Bigint value to serialize.\n * @returns Decimal string representation suitable for JSON.\n */\nexport function bigintToJson(value: bigint): string {\n\treturn value.toString();\n}\n\n/**\n * Parses a bigint-compatible JSON value.\n *\n * @param value - JSON value that should contain an integer string or number.\n * @returns Parsed bigint.\n */\nexport function bigintFromJson(value: BigintLike): bigint {\n\treturn toBigint(value, 'bigint');\n}\n\n/**\n * Serializes lamports to a string since JSON cannot encode bigint directly.\n *\n * @param value - Lamport amount to serialize.\n * @returns Decimal string representation of the lamport amount.\n */\nexport function lamportsToJson(value: Lamports): string {\n\treturn value.toString();\n}\n\n/**\n * Parses a lamport value from JSON primitives.\n *\n * @param value - JSON value containing an integer string or number.\n * @returns Parsed lamport amount.\n */\nexport function lamportsFromJson(value: BigintLike): Lamports {\n\treturn lamports(value, 'lamports');\n}\n","import { type Commitment, signature as parseSignature, type Signature } from '@solana/kit';\n\nexport type SignatureLike = Signature | string;\n\nexport type ConfirmationCommitment = Extract<Commitment, 'confirmed' | 'finalized' | 'processed'>;\n\nexport type SignatureStatusLike = Readonly<{\n\tconfirmationStatus?: ConfirmationCommitment | null;\n\tconfirmations?: number | bigint | null;\n}> | null;\n\nconst COMMITMENT_PRIORITY: Record<ConfirmationCommitment, number> = {\n\tprocessed: 0,\n\tconfirmed: 1,\n\tfinalized: 2,\n};\n\nexport const SIGNATURE_STATUS_TIMEOUT_MS = 20_000;\n\nexport function normalizeSignature(input?: SignatureLike): Signature | undefined {\n\tif (!input) {\n\t\treturn undefined;\n\t}\n\treturn typeof input === 'string' ? parseSignature(input) : input;\n}\n\nexport function deriveConfirmationStatus(status: SignatureStatusLike): ConfirmationCommitment | null {\n\tif (!status) {\n\t\treturn null;\n\t}\n\tif (\n\t\tstatus.confirmationStatus === 'processed' ||\n\t\tstatus.confirmationStatus === 'confirmed' ||\n\t\tstatus.confirmationStatus === 'finalized'\n\t) {\n\t\treturn status.confirmationStatus;\n\t}\n\tif (status.confirmations === null) {\n\t\treturn 'finalized';\n\t}\n\tif (typeof status.confirmations === 'number' && status.confirmations > 0) {\n\t\treturn 'confirmed';\n\t}\n\treturn 'processed';\n}\n\nexport function confirmationMeetsCommitment(\n\tconfirmation: ConfirmationCommitment | null,\n\ttarget: ConfirmationCommitment,\n): boolean {\n\tif (!confirmation) {\n\t\treturn false;\n\t}\n\treturn COMMITMENT_PRIORITY[confirmation] >= COMMITMENT_PRIORITY[target];\n}\n","import type { Address, BaseTransactionMessage } from '@solana/kit';\nimport { AccountRole, SOLANA_ERROR__INSTRUCTION_ERROR__GENERIC_ERROR, SolanaError } from '@solana/kit';\n\nconst MEMO_PROGRAM_ADDRESS = 'MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr';\n\nfunction ensureNonMemoInstructionIndex(instructions: BaseTransactionMessage['instructions']): number {\n\tconst index = instructions.findIndex((instruction) => instruction.programAddress !== MEMO_PROGRAM_ADDRESS);\n\tif (instructions.length === 0 || index === -1) {\n\t\tthrow new SolanaError(SOLANA_ERROR__INSTRUCTION_ERROR__GENERIC_ERROR, {\n\t\t\tcause: 'At least one non-memo instruction is required.',\n\t\t\tindex: instructions.length || index,\n\t\t});\n\t}\n\treturn index;\n}\n\n/**\n * Appends reference address metadata to the first non-memo instruction in a transaction.\n */\nexport function insertReferenceKey<T extends BaseTransactionMessage>(reference: Address, transaction: T): T {\n\treturn insertReferenceKeys([reference], transaction);\n}\n\n/**\n * Appends multiple reference addresses to the first non-memo instruction in a transaction.\n */\nexport function insertReferenceKeys<T extends BaseTransactionMessage>(references: Address[], transaction: T): T {\n\tconst index = ensureNonMemoInstructionIndex(transaction.instructions);\n\tconst targetInstruction = transaction.instructions[index];\n\tconst accounts = [\n\t\t...(targetInstruction.accounts ?? []),\n\t\t...references.map((address) => ({ address, role: AccountRole.READONLY })),\n\t];\n\tconst updatedInstructions = [...transaction.instructions];\n\tupdatedInstructions.splice(index, 1, { ...targetInstruction, accounts });\n\treturn Object.freeze({\n\t\t...transaction,\n\t\tinstructions: Object.freeze(updatedInstructions),\n\t});\n}\n","import type {\n\tTransactionHelper,\n\tTransactionInstructionInput,\n\tTransactionPrepareAndSendRequest,\n\tTransactionPrepared,\n\tTransactionPrepareRequest,\n\tTransactionSendOptions,\n\tTransactionSignOptions,\n} from '../features/transactions';\nimport { type AsyncState, createAsyncState, createInitialAsyncState } from '../state/asyncState';\n\ntype Listener = () => void;\n\nexport type TransactionInstructionList = readonly TransactionInstructionInput[];\n\ntype TransactionSignature = Awaited<ReturnType<TransactionHelper['send']>>;\n\nexport type LatestBlockhashCache = Readonly<{\n\tupdatedAt: number;\n\tvalue: NonNullable<TransactionPrepareRequest['lifetime']>;\n}>;\n\nexport type TransactionPoolConfig = Readonly<{\n\tblockhashMaxAgeMs?: number;\n\thelper: TransactionHelper;\n\tinitialInstructions?: TransactionInstructionList;\n}>;\n\nexport type TransactionPoolPrepareOptions = Readonly<\n\tPartial<Omit<TransactionPrepareRequest, 'instructions'>> & {\n\t\tinstructions?: TransactionInstructionList;\n\t}\n>;\n\nexport type TransactionPoolSignOptions = Readonly<TransactionSignOptions & { prepared?: TransactionPrepared }>;\n\nexport type TransactionPoolSendOptions = Readonly<TransactionSendOptions & { prepared?: TransactionPrepared }>;\n\nexport type TransactionPoolPrepareAndSendOptions = Readonly<\n\tOmit<TransactionPrepareAndSendRequest, 'instructions'> & {\n\t\tinstructions?: TransactionInstructionList;\n\t}\n>;\n\ntype Store<T> = Readonly<{\n\tgetSnapshot(): T;\n\tsetSnapshot(next: T): void;\n\tsubscribe(listener: Listener): () => void;\n}>;\n\nfunction createStore<T>(initial: T): Store<T> {\n\tlet snapshot = initial;\n\tconst listeners = new Set<Listener>();\n\treturn {\n\t\tgetSnapshot: () => snapshot,\n\t\tsetSnapshot(next: T) {\n\t\t\tsnapshot = next;\n\t\t\tfor (const listener of listeners) {\n\t\t\t\tlistener();\n\t\t\t}\n\t\t},\n\t\tsubscribe(listener: Listener) {\n\t\t\tlisteners.add(listener);\n\t\t\treturn () => {\n\t\t\t\tlisteners.delete(listener);\n\t\t\t};\n\t\t},\n\t};\n}\n\nfunction freezeInstructions(list: TransactionInstructionList): TransactionInstructionList {\n\treturn Object.freeze([...list]);\n}\n\nexport type TransactionPoolController = Readonly<{\n\taddInstruction(instruction: TransactionInstructionInput): void;\n\taddInstructions(instructionSet: TransactionInstructionList): void;\n\tclearInstructions(): void;\n\tgetInstructions(): TransactionInstructionList;\n\tgetPrepareState(): AsyncState<TransactionPrepared>;\n\tgetPrepared(): TransactionPrepared | null;\n\tgetSendState(): AsyncState<TransactionSignature>;\n\tgetLatestBlockhashCache(): LatestBlockhashCache | undefined;\n\tprepare(options?: TransactionPoolPrepareOptions): Promise<TransactionPrepared>;\n\tprepareAndSend(\n\t\trequest?: TransactionPoolPrepareAndSendOptions,\n\t\tsendOptions?: TransactionSendOptions,\n\t): Promise<TransactionSignature>;\n\tremoveInstruction(index: number): void;\n\treplaceInstructions(instructionSet: TransactionInstructionList): void;\n\treset(): void;\n\tsend(options?: TransactionPoolSendOptions): Promise<TransactionSignature>;\n\tsetLatestBlockhashCache(cache: LatestBlockhashCache | undefined): void;\n\tsign(options?: TransactionPoolSignOptions): ReturnType<TransactionHelper['sign']>;\n\tsubscribeInstructions(listener: Listener): () => void;\n\tsubscribePrepareState(listener: Listener): () => void;\n\tsubscribePrepared(listener: Listener): () => void;\n\tsubscribeSendState(listener: Listener): () => void;\n\ttoWire(options?: TransactionPoolSignOptions): ReturnType<TransactionHelper['toWire']>;\n\tget helper(): TransactionHelper;\n}>;\n\nexport function createTransactionPoolController(config: TransactionPoolConfig): TransactionPoolController {\n\tconst helper = config.helper;\n\tconst initialInstructions = freezeInstructions(config.initialInstructions ?? []);\n\tconst blockhashMaxAgeMs = config.blockhashMaxAgeMs ?? 30_000;\n\tlet latestBlockhashCache: LatestBlockhashCache | undefined;\n\n\tconst instructionsStore = createStore<TransactionInstructionList>(initialInstructions);\n\tconst preparedStore = createStore<TransactionPrepared | null>(null);\n\tconst prepareStateStore = createStore<AsyncState<TransactionPrepared>>(\n\t\tcreateInitialAsyncState<TransactionPrepared>(),\n\t);\n\tconst sendStateStore = createStore<AsyncState<TransactionSignature>>(\n\t\tcreateInitialAsyncState<TransactionSignature>(),\n\t);\n\n\tfunction resetDerivedState() {\n\t\tpreparedStore.setSnapshot(null);\n\t\tprepareStateStore.setSnapshot(createInitialAsyncState<TransactionPrepared>());\n\t\tsendStateStore.setSnapshot(createInitialAsyncState<TransactionSignature>());\n\t}\n\n\tfunction commitInstructions(next: TransactionInstructionList) {\n\t\tinstructionsStore.setSnapshot(freezeInstructions(next));\n\t\tresetDerivedState();\n\t}\n\n\tfunction addInstruction(instruction: TransactionInstructionInput) {\n\t\tconst next = [...instructionsStore.getSnapshot(), instruction];\n\t\tcommitInstructions(next);\n\t}\n\n\tfunction addInstructions(instructionSet: TransactionInstructionList) {\n\t\tif (!instructionSet.length) {\n\t\t\treturn;\n\t\t}\n\t\tconst next = [...instructionsStore.getSnapshot(), ...instructionSet];\n\t\tcommitInstructions(next);\n\t}\n\n\tfunction replaceInstructions(instructionSet: TransactionInstructionList) {\n\t\tcommitInstructions(instructionSet);\n\t}\n\n\tfunction clearInstructions() {\n\t\tcommitInstructions([]);\n\t}\n\n\tfunction removeInstruction(index: number) {\n\t\tconst current = instructionsStore.getSnapshot();\n\t\tif (index < 0 || index >= current.length) {\n\t\t\treturn;\n\t\t}\n\t\tconst next = current.filter((_, ii) => ii !== index);\n\t\tcommitInstructions(next);\n\t}\n\n\tfunction reset() {\n\t\tcommitInstructions(initialInstructions);\n\t}\n\n\tfunction ensureInstructions(\n\t\tinstructionList: TransactionInstructionList,\n\t): asserts instructionList is TransactionInstructionList & { length: number } {\n\t\tif (!instructionList.length) {\n\t\t\tthrow new Error('Add at least one instruction before preparing a transaction.');\n\t\t}\n\t}\n\n\tfunction resolveCachedLifetime(): TransactionPoolPrepareOptions['lifetime'] | undefined {\n\t\tif (!latestBlockhashCache) {\n\t\t\treturn undefined;\n\t\t}\n\t\tif (Date.now() - latestBlockhashCache.updatedAt > blockhashMaxAgeMs) {\n\t\t\treturn undefined;\n\t\t}\n\t\treturn latestBlockhashCache.value;\n\t}\n\n\tasync function prepare(options: TransactionPoolPrepareOptions = {}): Promise<TransactionPrepared> {\n\t\tconst { instructions: overrideInstructions, ...rest } = options;\n\t\tconst nextInstructions = overrideInstructions ?? instructionsStore.getSnapshot();\n\t\tensureInstructions(nextInstructions);\n\t\tprepareStateStore.setSnapshot(createAsyncState<TransactionPrepared>('loading'));\n\t\ttry {\n\t\t\tconst cachedLifetime = rest.lifetime ?? resolveCachedLifetime();\n\t\t\tconst restWithLifetime = cachedLifetime && !rest.lifetime ? { ...rest, lifetime: cachedLifetime } : rest;\n\t\t\tconst prepared = await helper.prepare({\n\t\t\t\t...(restWithLifetime as Omit<TransactionPrepareRequest, 'instructions'>),\n\t\t\t\tinstructions: nextInstructions,\n\t\t\t});\n\t\t\tpreparedStore.setSnapshot(prepared);\n\t\t\tprepareStateStore.setSnapshot(createAsyncState<TransactionPrepared>('success', { data: prepared }));\n\t\t\treturn prepared;\n\t\t} catch (error) {\n\t\t\tprepareStateStore.setSnapshot(createAsyncState<TransactionPrepared>('error', { error }));\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\tfunction resolvePrepared(override?: TransactionPrepared | null): TransactionPrepared {\n\t\tconst target = override ?? preparedStore.getSnapshot();\n\t\tif (!target) {\n\t\t\tthrow new Error('Prepare a transaction before sending.');\n\t\t}\n\t\treturn target;\n\t}\n\n\tfunction resolveLifetimeOptions<T extends { lifetime?: TransactionPoolPrepareOptions['lifetime'] }>(options: T): T {\n\t\tif (options.lifetime) {\n\t\t\treturn options;\n\t\t}\n\t\tconst cachedLifetime = resolveCachedLifetime();\n\t\tif (!cachedLifetime) {\n\t\t\treturn options;\n\t\t}\n\t\treturn { ...options, lifetime: cachedLifetime };\n\t}\n\n\tasync function send(options: TransactionPoolSendOptions = {}): Promise<TransactionSignature> {\n\t\tconst { prepared: overridePrepared, ...rest } = options;\n\t\tconst target = resolvePrepared(overridePrepared);\n\t\tsendStateStore.setSnapshot(createAsyncState<TransactionSignature>('loading'));\n\t\ttry {\n\t\t\tconst signature = await helper.send(target, rest);\n\t\t\tsendStateStore.setSnapshot(createAsyncState<TransactionSignature>('success', { data: signature }));\n\t\t\treturn signature;\n\t\t} catch (error) {\n\t\t\tsendStateStore.setSnapshot(createAsyncState<TransactionSignature>('error', { error }));\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\tasync function prepareAndSend(\n\t\trequest: TransactionPoolPrepareAndSendOptions = {},\n\t\tsendOptions?: TransactionSendOptions,\n\t): Promise<TransactionSignature> {\n\t\tconst { instructions: overrideInstructions, ...rest } = request;\n\t\tconst nextInstructions = overrideInstructions ?? instructionsStore.getSnapshot();\n\t\tensureInstructions(nextInstructions);\n\t\tsendStateStore.setSnapshot(createAsyncState<TransactionSignature>('loading'));\n\t\ttry {\n\t\t\tconst restWithLifetime = resolveLifetimeOptions(rest);\n\t\t\tconst signature = await helper.prepareAndSend(\n\t\t\t\t{\n\t\t\t\t\t...(restWithLifetime as Omit<TransactionPrepareAndSendRequest, 'instructions'>),\n\t\t\t\t\tinstructions: nextInstructions,\n\t\t\t\t},\n\t\t\t\tsendOptions,\n\t\t\t);\n\t\t\tsendStateStore.setSnapshot(createAsyncState<TransactionSignature>('success', { data: signature }));\n\t\t\treturn signature;\n\t\t} catch (error) {\n\t\t\tsendStateStore.setSnapshot(createAsyncState<TransactionSignature>('error', { error }));\n\t\t\tthrow error;\n\t\t}\n\t}\n\n\tfunction sign(options: TransactionPoolSignOptions = {}) {\n\t\tconst { prepared: overridePrepared, ...rest } = options;\n\t\tconst target = resolvePrepared(overridePrepared);\n\t\treturn helper.sign(target, rest);\n\t}\n\n\tfunction toWire(options: TransactionPoolSignOptions = {}) {\n\t\tconst { prepared: overridePrepared, ...rest } = options;\n\t\tconst target = resolvePrepared(overridePrepared);\n\t\treturn helper.toWire(target, rest);\n\t}\n\n\tfunction subscribeInstructions(listener: Listener) {\n\t\treturn instructionsStore.subscribe(listener);\n\t}\n\n\tfunction subscribePrepared(listener: Listener) {\n\t\treturn preparedStore.subscribe(listener);\n\t}\n\n\tfunction subscribePrepareState(listener: Listener) {\n\t\treturn prepareStateStore.subscribe(listener);\n\t}\n\n\tfunction subscribeSendState(listener: Listener) {\n\t\treturn sendStateStore.subscribe(listener);\n\t}\n\n\tfunction setLatestBlockhashCache(cache: LatestBlockhashCache | undefined) {\n\t\tlatestBlockhashCache = cache;\n\t}\n\n\treturn {\n\t\taddInstruction,\n\t\taddInstructions,\n\t\tclearInstructions,\n\t\tget helper() {\n\t\t\treturn helper;\n\t\t},\n\t\tgetInstructions: instructionsStore.getSnapshot,\n\t\tgetPrepareState: prepareStateStore.getSnapshot,\n\t\tgetPrepared: preparedStore.getSnapshot,\n\t\tgetSendState: sendStateStore.getSnapshot,\n\t\tgetLatestBlockhashCache: () => latestBlockhashCache,\n\t\tprepare,\n\t\tprepareAndSend,\n\t\tremoveInstruction,\n\t\treplaceInstructions,\n\t\treset,\n\t\tsend,\n\t\tsetLatestBlockhashCache,\n\t\tsign,\n\t\tsubscribeInstructions,\n\t\tsubscribePrepareState,\n\t\tsubscribePrepared,\n\t\tsubscribeSendState,\n\t\ttoWire,\n\t};\n}\n","import { type Address, address as parseAddress } from '@solana/kit';\n\nexport type AddressLike = Address | string;\n\nexport function toAddress(addressLike: AddressLike): Address {\n\treturn typeof addressLike === 'string' ? parseAddress(addressLike) : addressLike;\n}\n\nexport function toAddressString(addressLike: AddressLike): string {\n\treturn toAddress(addressLike).toString();\n}\n","type JsonValue = null | boolean | number | string | JsonValue[] | { [key: string]: JsonValue };\n\nexport function stableStringify(value: unknown): string {\n\tconst result = JSON.stringify(value, (_key, candidate) => {\n\t\tif (typeof candidate === 'bigint') {\n\t\t\treturn { __type: 'bigint', value: candidate.toString() };\n\t\t}\n\t\tif (candidate instanceof Uint8Array) {\n\t\t\treturn Array.from(candidate);\n\t\t}\n\t\treturn candidate as JsonValue;\n\t});\n\treturn result ?? 'undefined';\n}\n"]}
|