@solana/react-hooks 1.1.3 → 1.1.4

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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@solana/react-hooks",
3
- "version": "1.1.3",
3
+ "version": "1.1.4",
4
4
  "description": "React hooks for the @solana/client Solana client",
5
5
  "exports": {
6
6
  "browser": "./dist/index.browser.mjs",
@@ -16,7 +16,8 @@
16
16
  "types": "./dist/types/index.d.ts",
17
17
  "type": "module",
18
18
  "files": [
19
- "./dist/"
19
+ "./dist/**/*.mjs",
20
+ "./dist/types/"
20
21
  ],
21
22
  "sideEffects": false,
22
23
  "keywords": [
@@ -43,7 +44,7 @@
43
44
  "@solana/kit": "^5.0.0",
44
45
  "swr": "^2.3.6",
45
46
  "zustand": "^5.0.0",
46
- "@solana/client": "1.1.3"
47
+ "@solana/client": "1.1.4"
47
48
  },
48
49
  "devDependencies": {
49
50
  "@types/react": "^19.0.0",
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/context.tsx","../src/querySuspenseContext.ts","../src/useClientStore.ts","../src/query.ts","../src/queryKeys.ts","../src/queryHooks.ts","../src/hooks.ts","../src/QueryProvider.tsx","../src/SolanaProvider.tsx","../src/ui.tsx"],"names":["SolanaClientContext","createContext","normalizeConfig","config","resolveClientConfig","__name","SolanaClientProvider","children","providedClient","normalizedConfig","useMemo","client","createClient","useEffect","jsx","useSolanaClient","useContext","QuerySuspenseContext","useQuerySuspensePreference","identitySelector","state","useClientStore","selector","appliedSelector","slice","useStore","QUERY_NAMESPACE","useSolanaRpcQuery","scope","args","fetcher","options","cluster","disabled","swr","providerSuspensePreference","swrOptions","key","swrResponse","useSWR","dataUpdatedAt","setDataUpdatedAt","useState","status","refresh","useCallback","getLatestBlockhashKey","params","commitment","minContextSlot","normalizeBigint","getProgramAccountsKey","programAddress","address","toAddress","addressKey","toAddressString","configKey","stableStringify","getSimulateTransactionKey","transaction","wire","normalizeWire","getSignatureStatusKey","signature","signatureKey","value","input","getBase64EncodedWireTransaction","DEFAULT_BLOCKHASH_REFRESH_INTERVAL","useLatestBlockhash","refreshInterval","fallbackCommitment","normalizeMinContextSlot","query","useProgramAccounts","disabledOption","mergedConfig","useSimulateTransaction","resolvedConfig","createClusterSelector","createClusterStatusSelector","createWalletSelector","createAccountSelector","useSuspenseFetcher","suspenseEnabled","pendingRef","useRef","promise","useClusterState","useClusterStatus","useWallet","useWalletSession","wallet","useWalletActions","useConnectWallet","connectorId","useDisconnectWallet","useSolTransfer","session","helper","sessionRef","controller","createSolTransferController","useSyncExternalStore","send","useStake","validatorId","normalizedValidatorId","createStakeController","unstakeState","withdrawState","stake","unstake","withdraw","getStakeAccounts","validatorIdFilter","walletAddr","filterAddr","useSplToken","mint","suspense","normalizedMint","helperConfig","ownerRaw","owner","balanceKey","fetchBalance","data","error","isLoading","isValidating","mutate","ownerRef","createSplTransferController","sendState","sendOptions","resetSend","useAccount","addressLike","shouldSkip","accountKey","account","subscription","useBalance","mergedOptions","watcher","lamports","fetching","slot","useTransactionPool","initialInstructions","swrRefreshInterval","blockhashMaxAgeMs","createTransactionPoolController","latestBlockhash","cache","instructions","prepared","prepareState","useSendTransaction","setState","createInitialAsyncState","execute","operation","createAsyncState","ensureAuthority","request","normalizedRequest","sendPrepared","reset","useSignatureStatus","signatureInput","normalizeSignature","SIGNATURE_STATUS_TIMEOUT_MS","confirmationStatus","deriveConfirmationStatus","useWaitForSignature","subscribe","watchCommitment","signatureStatusOptions","restStatusOptions","subscribeCommitment","normalizedSignature","statusQuery","subscriptionSettled","setSubscriptionSettled","hasSignature","signatureError","waitError","meetsCommitment","confirmationMeetsCommitment","settled","waitStatus","useLookupTable","addr","c","useNonceAccount","createCache","DEFAULT_QUERY_CONFIG","SolanaQueryProvider","resetOnClusterChange","cacheRegistryRef","cacheKey","registry","existing","next","base","SWRConfig","SolanaProvider","walletPersistence","shouldIncludeQueryLayer","queryProps","persistenceConfig","storage","getDefaultStorage","storageKey","DEFAULT_STORAGE_KEY","persistedState","readPersistedState","clientConfig","content","jsxs","WalletPersistence","raw","safelyRead","parsed","deserializeSolanaState","autoConnect","initialState","legacyConnectorId","connectWallet","storageRef","hasAttemptedAutoConnect","setHasAttemptedAutoConnect","clientRef","persistedStateRef","legacyConnectorIdRef","activeStorage","unsubscribe","subscribeSolanaState","safelyWrite","serializeSolanaState","persisted","autoConnectEnabled","reader","writer","candidate","useWalletConnection","disconnectWallet","isHydrated","setIsHydrated","connectors","connect","connectOptions","disconnect","currentConnector","connector","WalletConnectionManager","Fragment","useWalletModalState","connection","isOpen","setIsOpen","selectedConnector","setSelectedConnector","closeOnConnect","open","close","toggle","select"],"mappings":"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","file":"index.browser.mjs","sourcesContent":["import {\n\ttype CreateDefaultClientOptions,\n\tcreateClient,\n\tresolveClientConfig,\n\ttype SolanaClient,\n\ttype SolanaClientConfig,\n} from '@solana/client';\nimport type { ReactNode } from 'react';\nimport { createContext, useContext, useEffect, useMemo } from 'react';\n\nconst SolanaClientContext = createContext<SolanaClient | null>(null);\n\ntype ProviderProps = Readonly<{\n\tchildren: ReactNode;\n\tclient?: SolanaClient;\n\tconfig?: SolanaClientConfig | CreateDefaultClientOptions;\n}>;\n\nfunction normalizeConfig(config?: SolanaClientConfig | CreateDefaultClientOptions): SolanaClientConfig {\n\treturn resolveClientConfig(config ?? {});\n}\n\n/**\n * Provides a {@link SolanaClient} instance to descendant components.\n *\n * Supply either an existing `client` or a configuration object used to lazily\n * construct an instance via {@link createClient}.\n */\nexport function SolanaClientProvider({ children, client: providedClient, config }: ProviderProps) {\n\tconst normalizedConfig = useMemo(() => normalizeConfig(config), [config]);\n\tconst client = useMemo(() => {\n\t\tif (providedClient) {\n\t\t\treturn providedClient;\n\t\t}\n\t\treturn createClient(normalizedConfig);\n\t}, [normalizedConfig, providedClient]);\n\n\tuseEffect(() => {\n\t\tif (providedClient) {\n\t\t\treturn;\n\t\t}\n\t\treturn () => {\n\t\t\tclient.destroy();\n\t\t};\n\t}, [client, providedClient]);\n\n\treturn <SolanaClientContext.Provider value={client}>{children}</SolanaClientContext.Provider>;\n}\n\n/**\n * Access the {@link SolanaClient} from the nearest {@link SolanaClientProvider}.\n *\n * @throws If used outside of a provider.\n */\nexport function useSolanaClient(): SolanaClient {\n\tconst client = useContext(SolanaClientContext);\n\tif (!client) {\n\t\tthrow new Error('useSolanaClient must be used within a SolanaClientProvider.');\n\t}\n\treturn client;\n}\n\nexport type SolanaClientProviderProps = ProviderProps;\nexport type UseSolanaClientParameters = undefined;\nexport type UseSolanaClientReturnType = SolanaClient;\n","import { createContext, useContext } from 'react';\n\nconst QuerySuspenseContext = createContext<boolean | undefined>(undefined);\n\nexport function useQuerySuspensePreference(): boolean | undefined {\n\treturn useContext(QuerySuspenseContext);\n}\n\nexport { QuerySuspenseContext };\n","import type { ClientState } from '@solana/client';\nimport { useStore } from 'zustand';\n\nimport { useSolanaClient } from './context';\n\nexport type UseClientStoreSelector<T> = (state: ClientState) => T;\nconst identitySelector = (state: ClientState): ClientState => state;\n\nexport type UseClientStoreParameters<T = ClientState> = UseClientStoreSelector<T> | undefined;\nexport type UseClientStoreReturnType<T = ClientState> = T extends undefined ? ClientState : T;\n\nexport function useClientStore(): ClientState;\nexport function useClientStore<T>(selector: UseClientStoreSelector<T>): T;\n/**\n * Subscribe to the underlying Zustand store exposed by {@link SolanaClient}.\n *\n * @param selector - Derives the slice of state to observe. Defaults to the entire state.\n * @returns Selected state slice that triggers re-render when it changes.\n * @example\n * ```ts\n * const commitment = useClientStore((state) => state.cluster.commitment);\n * ```\n */\nexport function useClientStore<T>(selector?: UseClientStoreSelector<T>): ClientState | T {\n\tconst client = useSolanaClient();\n\tconst appliedSelector = selector ?? (identitySelector as UseClientStoreSelector<T>);\n\tconst slice = useStore(client.store, appliedSelector);\n\treturn selector ? slice : (slice as unknown as ClientState);\n}\n","import type { SolanaClient } from '@solana/client';\nimport { useCallback, useEffect, useMemo, useState } from 'react';\nimport useSWR, { type BareFetcher, type SWRConfiguration, type SWRResponse } from 'swr';\n\nimport { useSolanaClient } from './context';\nimport { useQuerySuspensePreference } from './querySuspenseContext';\nimport { useClientStore } from './useClientStore';\n\nconst QUERY_NAMESPACE = '@solana/react-hooks';\n\nexport type QueryStatus = 'error' | 'idle' | 'loading' | 'success';\n\nexport type UseSolanaRpcQueryOptions<Data> = Readonly<{\n\tdisabled?: boolean;\n\tswr?: Omit<SWRConfiguration<Data, unknown, BareFetcher<Data>>, 'fallback' | 'suspense'>;\n}>;\n\nexport type SolanaQueryResult<Data> = Readonly<{\n\tdata: Data | undefined;\n\tdataUpdatedAt?: number;\n\terror: unknown;\n\tisError: boolean;\n\tisLoading: boolean;\n\tisSuccess: boolean;\n\tisValidating: boolean;\n\tmutate: SWRResponse<Data>['mutate'];\n\trefresh(): Promise<Data | undefined>;\n\tstatus: QueryStatus;\n}>;\n\n/**\n * Low-level RPC query helper that scopes SWR keys to the active cluster and exposes a Solana-friendly\n * status shape. Prefer this when you need custom fetch logic beyond the built-in hooks.\n *\n * @param scope - Namespace label for the query key (for debugging and cache clarity).\n * @param args - Additional key params that uniquely identify the query (e.g. signature, address).\n * @param fetcher - Async function that receives the current {@link SolanaClient} and returns data.\n * @param options - Optional flags to disable the query or pass through SWR configuration.\n * @example\n * ```ts\n * const slotQuery = useSolanaRpcQuery(\n * 'slot',\n * ['slot'],\n * (client) => client.runtime.rpc.getLatestBlockhash().send().then((r) => r.context.slot),\n * );\n * ```\n */\nexport function useSolanaRpcQuery<Data>(\n\tscope: string,\n\targs: readonly unknown[],\n\tfetcher: (client: SolanaClient) => Promise<Data>,\n\toptions: UseSolanaRpcQueryOptions<Data> = {},\n): SolanaQueryResult<Data> {\n\tconst client = useSolanaClient();\n\tconst cluster = useClientStore((state) => state.cluster);\n\tconst { disabled = false, swr } = options;\n\tconst providerSuspensePreference = useQuerySuspensePreference();\n\tconst suspenseEnabled = !disabled && Boolean(providerSuspensePreference);\n\tconst swrOptions: SWRConfiguration<Data, unknown, BareFetcher<Data>> = {\n\t\t...(swr ?? {}),\n\t\tsuspense: suspenseEnabled,\n\t};\n\n\tconst key = useMemo(() => {\n\t\tif (disabled) {\n\t\t\treturn null;\n\t\t}\n\t\treturn [QUERY_NAMESPACE, scope, cluster.endpoint, cluster.commitment, ...args] as const;\n\t}, [cluster.commitment, cluster.endpoint, args, scope, disabled]);\n\n\tconst swrResponse = useSWR<Data>(key, () => fetcher(client), swrOptions);\n\tconst [dataUpdatedAt, setDataUpdatedAt] = useState<number | undefined>(() =>\n\t\tswrResponse.data !== undefined ? Date.now() : undefined,\n\t);\n\n\tuseEffect(() => {\n\t\tif (swrResponse.data !== undefined) {\n\t\t\tsetDataUpdatedAt(Date.now());\n\t\t}\n\t}, [swrResponse.data]);\n\n\tconst status: QueryStatus = swrResponse.error\n\t\t? 'error'\n\t\t: swrResponse.isLoading\n\t\t\t? 'loading'\n\t\t\t: swrResponse.data !== undefined\n\t\t\t\t? 'success'\n\t\t\t\t: 'idle';\n\n\tconst refresh = useCallback(() => swrResponse.mutate(undefined, { revalidate: true }), [swrResponse.mutate]);\n\n\treturn {\n\t\tdata: swrResponse.data,\n\t\tdataUpdatedAt,\n\t\terror: swrResponse.error ?? null,\n\t\tisError: status === 'error',\n\t\tisLoading: swrResponse.isLoading,\n\t\tisSuccess: status === 'success',\n\t\tisValidating: swrResponse.isValidating,\n\t\tmutate: swrResponse.mutate,\n\t\trefresh,\n\t\tstatus,\n\t};\n}\n","import { stableStringify, toAddress, toAddressString } from '@solana/client';\nimport { getBase64EncodedWireTransaction, type SendableTransaction, type Transaction } from '@solana/kit';\n\nimport type { UseSignatureStatusOptions, UseSignatureStatusParameters } from './hooks';\nimport type {\n\tUseLatestBlockhashParameters,\n\tUseProgramAccountsParameters,\n\tUseSimulateTransactionParameters,\n} from './queryHooks';\n\nexport type QueryKey = readonly unknown[];\n\nexport function getLatestBlockhashKey(params: UseLatestBlockhashParameters = {}): QueryKey {\n\tconst { commitment = null, minContextSlot = null } = params;\n\treturn ['latestBlockhash', commitment, normalizeBigint(minContextSlot)];\n}\n\nexport function getProgramAccountsKey(params: UseProgramAccountsParameters = {}): QueryKey {\n\tconst { programAddress, config } = params;\n\tconst address = programAddress ? toAddress(programAddress) : undefined;\n\tconst addressKey = address ? toAddressString(address) : null;\n\tconst configKey = stableStringify(config ?? null);\n\treturn ['programAccounts', addressKey, configKey];\n}\n\nexport function getSimulateTransactionKey(params: UseSimulateTransactionParameters = {}): QueryKey {\n\tconst { transaction, config } = params;\n\tconst wire = transaction ? normalizeWire(transaction) : null;\n\tconst configKey = stableStringify(config ?? null);\n\treturn ['simulateTransaction', wire, configKey];\n}\n\nexport function getSignatureStatusKey(params: UseSignatureStatusParameters | UseSignatureStatusOptions = {}): QueryKey {\n\tconst { config, signature } = params as UseSignatureStatusParameters;\n\tconst signatureKey = signature?.toString() ?? null;\n\tconst configKey = JSON.stringify(config ?? null);\n\treturn ['signatureStatus', signatureKey, configKey];\n}\n\nfunction normalizeBigint(value: bigint | number | null | undefined): bigint | null {\n\tif (value === undefined || value === null) return null;\n\treturn typeof value === 'bigint' ? value : BigInt(Math.floor(value));\n}\n\nfunction normalizeWire(input: UseSimulateTransactionParameters['transaction']): string | null {\n\tif (!input) return null;\n\tif (typeof input === 'string') {\n\t\treturn input;\n\t}\n\treturn getBase64EncodedWireTransaction(input as SendableTransaction & Transaction);\n}\n","import { type AddressLike, type SolanaClient, toAddress } from '@solana/client';\nimport {\n\ttype Base64EncodedWireTransaction,\n\ttype Commitment,\n\tgetBase64EncodedWireTransaction,\n\ttype SendableTransaction,\n\ttype Transaction,\n} from '@solana/kit';\nimport { useCallback, useMemo } from 'react';\n\nimport type { SolanaQueryResult, UseSolanaRpcQueryOptions } from './query';\nimport { useSolanaRpcQuery } from './query';\nimport { getLatestBlockhashKey, getProgramAccountsKey, getSimulateTransactionKey } from './queryKeys';\n\ntype RpcInstance = SolanaClient['runtime']['rpc'];\n\ntype LatestBlockhashPlan = ReturnType<RpcInstance['getLatestBlockhash']>;\ntype LatestBlockhashResponse = Awaited<ReturnType<LatestBlockhashPlan['send']>>;\n\ntype ProgramAccountsPlan = ReturnType<RpcInstance['getProgramAccounts']>;\ntype ProgramAccountsConfig = Parameters<RpcInstance['getProgramAccounts']>[1];\ntype ProgramAccountsResponse = Awaited<ReturnType<ProgramAccountsPlan['send']>>;\n\ntype SimulateTransactionPlan = ReturnType<RpcInstance['simulateTransaction']>;\ntype SimulateTransactionConfig = Parameters<RpcInstance['simulateTransaction']>[1];\ntype SimulateTransactionResponse = Awaited<ReturnType<SimulateTransactionPlan['send']>>;\n\nconst DEFAULT_BLOCKHASH_REFRESH_INTERVAL = 30_000;\n\nexport type UseLatestBlockhashParameters = Readonly<{\n\tcommitment?: Commitment;\n\tdisabled?: boolean;\n\tminContextSlot?: bigint | number;\n\trefreshInterval?: number;\n\tswr?: UseSolanaRpcQueryOptions<LatestBlockhashResponse>['swr'];\n}>;\n\nexport type UseLatestBlockhashReturnType = SolanaQueryResult<LatestBlockhashResponse> &\n\tReadonly<{\n\t\tblockhash: string | null;\n\t\tcontextSlot: bigint | null | undefined;\n\t\tlastValidBlockHeight: bigint | null;\n\t}>;\n\n/**\n * Fetch the current cluster blockhash and keep it warm with a configurable polling interval.\n * Falls back to the client's active commitment when one is not provided.\n *\n * @example\n * ```ts\n * const { blockhash, lastValidBlockHeight } = useLatestBlockhash({ refreshInterval: 10_000 });\n * ```\n */\nexport function useLatestBlockhash(options: UseLatestBlockhashParameters = {}): UseLatestBlockhashReturnType {\n\tconst {\n\t\tcommitment,\n\t\tminContextSlot,\n\t\trefreshInterval = DEFAULT_BLOCKHASH_REFRESH_INTERVAL,\n\t\tdisabled = false,\n\t\tswr,\n\t} = options;\n\tconst fetcher = useCallback(\n\t\tasync (client: SolanaClient) => {\n\t\t\tconst fallbackCommitment = commitment ?? client.store.getState().cluster.commitment;\n\t\t\tconst plan = client.runtime.rpc.getLatestBlockhash({\n\t\t\t\tcommitment: fallbackCommitment,\n\t\t\t\tminContextSlot: normalizeMinContextSlot(minContextSlot),\n\t\t\t});\n\t\t\treturn plan.send({ abortSignal: AbortSignal.timeout(15_000) });\n\t\t},\n\t\t[commitment, minContextSlot],\n\t);\n\tconst query = useSolanaRpcQuery<LatestBlockhashResponse>(\n\t\t'latestBlockhash',\n\t\tgetLatestBlockhashKey(options),\n\t\tfetcher,\n\t\t{\n\t\t\tdisabled,\n\t\t\tswr: {\n\t\t\t\trefreshInterval,\n\t\t\t\t...swr,\n\t\t\t},\n\t\t},\n\t);\n\treturn {\n\t\t...query,\n\t\tblockhash: query.data?.value.blockhash ?? null,\n\t\tcontextSlot: query.data?.context.slot,\n\t\tlastValidBlockHeight: query.data?.value.lastValidBlockHeight ?? null,\n\t};\n}\n\nexport type UseProgramAccountsParameters = Readonly<{\n\tcommitment?: Commitment;\n\tconfig?: ProgramAccountsConfig;\n\tdisabled?: boolean;\n\tprogramAddress?: AddressLike;\n\tswr?: UseSolanaRpcQueryOptions<ProgramAccountsResponse>['swr'];\n}>;\n\nexport type UseProgramAccountsReturnType = SolanaQueryResult<ProgramAccountsResponse> &\n\tReadonly<{\n\t\taccounts: ProgramAccountsResponse;\n\t}>;\n\n/**\n * Fetch accounts owned by a program, keyed by the program address. The query is disabled until a\n * program address is provided, and respects both explicit and client default commitments.\n *\n * @example\n * ```ts\n * const programAccounts = useProgramAccounts(programId, { config: { dataSlice: { offset: 0, length: 0 } } });\n * ```\n */\nexport function useProgramAccounts(\n\tprogramAddress?: AddressLike,\n\toptions?: UseProgramAccountsParameters,\n): UseProgramAccountsReturnType {\n\tconst { commitment, config, swr, disabled: disabledOption } = options ?? {};\n\tconst fetcher = useCallback(\n\t\tasync (client: SolanaClient) => {\n\t\t\tconst address = programAddress ? toAddress(programAddress) : undefined;\n\t\t\tif (!address) {\n\t\t\t\tthrow new Error('Provide a program address before querying program accounts.');\n\t\t\t}\n\t\t\tconst fallbackCommitment = commitment ?? config?.commitment ?? client.store.getState().cluster.commitment;\n\t\t\tconst mergedConfig = {\n\t\t\t\t...(config ?? {}),\n\t\t\t\tcommitment: fallbackCommitment,\n\t\t\t} satisfies ProgramAccountsConfig;\n\t\t\tconst plan = client.runtime.rpc.getProgramAccounts(address, mergedConfig);\n\t\t\treturn plan.send({ abortSignal: AbortSignal.timeout(20_000) });\n\t\t},\n\t\t[commitment, config, programAddress],\n\t);\n\tconst disabled = disabledOption ?? !programAddress;\n\tconst query = useSolanaRpcQuery<ProgramAccountsResponse>(\n\t\t'programAccounts',\n\t\tgetProgramAccountsKey({ programAddress, config }),\n\t\tfetcher,\n\t\t{\n\t\t\tdisabled,\n\t\t\tswr,\n\t\t},\n\t);\n\treturn {\n\t\t...query,\n\t\taccounts: query.data ?? [],\n\t};\n}\n\nexport type UseSimulateTransactionParameters = Readonly<{\n\tcommitment?: Commitment;\n\tconfig?: SimulateTransactionConfig;\n\tdisabled?: boolean;\n\trefreshInterval?: number;\n\tswr?: UseSolanaRpcQueryOptions<SimulateTransactionResponse>['swr'];\n\ttransaction?: SimulationInput | null;\n}>;\n\ntype SimulationInput = (SendableTransaction & Transaction) | Base64EncodedWireTransaction | string;\n\nexport type UseSimulateTransactionReturnType = SolanaQueryResult<SimulateTransactionResponse> &\n\tReadonly<{\n\t\tlogs: readonly string[];\n\t}>;\n\n/**\n * Simulate a transaction or wire payload and return simulation logs/results. Disabled until a\n * transaction payload is provided; uses client commitment when not specified in options.\n *\n * @example\n * ```ts\n * const simulation = useSimulateTransaction(base64Wire, { refreshInterval: 0 });\n * console.log(simulation.logs);\n * ```\n */\nexport function useSimulateTransaction(\n\ttransaction?: SimulationInput | null,\n\toptions?: UseSimulateTransactionParameters,\n): UseSimulateTransactionReturnType {\n\tconst { commitment, config, refreshInterval, disabled: disabledOption, swr } = options ?? {};\n\tconst wire = useMemo<Base64EncodedWireTransaction | null>(() => {\n\t\tif (!transaction) {\n\t\t\treturn null;\n\t\t}\n\t\tif (typeof transaction === 'string') {\n\t\t\treturn transaction as Base64EncodedWireTransaction;\n\t\t}\n\t\treturn getBase64EncodedWireTransaction(transaction);\n\t}, [transaction]);\n\tconst fetcher = useCallback(\n\t\tasync (client: SolanaClient) => {\n\t\t\tif (!wire) {\n\t\t\t\tthrow new Error('Provide a transaction payload before simulating.');\n\t\t\t}\n\t\t\tconst resolvedConfig = {\n\t\t\t\t...(config ?? {}),\n\t\t\t\tcommitment: commitment ?? config?.commitment ?? client.store.getState().cluster.commitment,\n\t\t\t} as SimulateTransactionConfig;\n\t\t\tconst plan = client.runtime.rpc.simulateTransaction(wire, resolvedConfig);\n\t\t\treturn plan.send({ abortSignal: AbortSignal.timeout(20_000) });\n\t\t},\n\t\t[commitment, config, wire],\n\t);\n\tconst disabled = disabledOption ?? !wire;\n\tconst query = useSolanaRpcQuery<SimulateTransactionResponse>(\n\t\t'simulateTransaction',\n\t\tgetSimulateTransactionKey({ transaction, config }),\n\t\tfetcher,\n\t\t{\n\t\t\tdisabled,\n\t\t\tswr: {\n\t\t\t\trefreshInterval,\n\t\t\t\trevalidateIfStale: false,\n\t\t\t\trevalidateOnFocus: false,\n\t\t\t\t...swr,\n\t\t\t},\n\t\t},\n\t);\n\treturn {\n\t\t...query,\n\t\tlogs: query.data?.value.logs ?? [],\n\t};\n}\n\nfunction normalizeMinContextSlot(minContextSlot?: bigint | number): bigint | undefined {\n\tif (minContextSlot === undefined) return undefined;\n\treturn typeof minContextSlot === 'bigint' ? minContextSlot : BigInt(Math.floor(minContextSlot));\n}\n","import {\n\ttype AccountCacheEntry,\n\ttype AddressLike,\n\ttype AddressLookupTableData,\n\ttype AsyncState,\n\ttype ClientState,\n\ttype ConfirmationCommitment,\n\tconfirmationMeetsCommitment,\n\tcreateAsyncState,\n\tcreateInitialAsyncState,\n\tcreateSolTransferController,\n\tcreateSplTransferController,\n\tcreateStakeController,\n\tcreateTransactionPoolController,\n\tderiveConfirmationStatus,\n\ttype LatestBlockhashCache,\n\ttype NonceAccountData,\n\tnormalizeSignature,\n\tSIGNATURE_STATUS_TIMEOUT_MS,\n\ttype SignatureLike,\n\ttype SolanaClient,\n\ttype SolTransferHelper,\n\ttype SolTransferInput,\n\ttype SolTransferSendOptions,\n\ttype SplTokenBalance,\n\ttype SplTokenHelper,\n\ttype SplTokenHelperConfig,\n\ttype SplTransferController,\n\ttype SplTransferInput,\n\ttype StakeAccount,\n\ttype StakeHelper,\n\ttype StakeInput,\n\ttype StakeSendOptions,\n\ttype TransactionHelper,\n\ttype TransactionInstructionInput,\n\ttype TransactionInstructionList,\n\ttype TransactionPoolController,\n\ttype TransactionPoolPrepareAndSendOptions,\n\ttype TransactionPoolPrepareOptions,\n\ttype TransactionPoolSendOptions,\n\ttype TransactionPoolSignOptions,\n\ttype TransactionPrepareAndSendRequest,\n\ttype TransactionPrepared,\n\ttype TransactionSendOptions,\n\ttoAddress,\n\ttype UnstakeInput,\n\ttype UnstakeSendOptions,\n\ttype WalletSession,\n\ttype WalletStatus,\n\ttype WithdrawInput,\n\ttype WithdrawSendOptions,\n} from '@solana/client';\nimport type { Commitment, Lamports, Signature } from '@solana/kit';\nimport { useCallback, useEffect, useMemo, useRef, useState, useSyncExternalStore } from 'react';\nimport useSWR, { type BareFetcher, type SWRConfiguration } from 'swr';\n\nimport { useSolanaClient } from './context';\nimport { type SolanaQueryResult, type UseSolanaRpcQueryOptions, useSolanaRpcQuery } from './query';\nimport { type UseLatestBlockhashParameters, type UseLatestBlockhashReturnType, useLatestBlockhash } from './queryHooks';\nimport { getSignatureStatusKey } from './queryKeys';\nimport { useQuerySuspensePreference } from './querySuspenseContext';\nimport { useClientStore } from './useClientStore';\n\ntype ClusterState = ClientState['cluster'];\ntype ClusterStatus = ClientState['cluster']['status'];\ntype UnwrapPromise<T> = T extends Promise<infer U> ? U : T;\n\ntype RpcInstance = SolanaClient['runtime']['rpc'];\n\ntype SignatureStatusesPlan = ReturnType<RpcInstance['getSignatureStatuses']>;\n\ntype SignatureStatusesResponse = Awaited<ReturnType<SignatureStatusesPlan['send']>>;\n\ntype SignatureStatusValue = SignatureStatusesResponse['value'][number];\n\ntype SignatureStatusConfig = Parameters<RpcInstance['getSignatureStatuses']>[1];\n\ntype UseAccountOptions = Readonly<{\n\tcommitment?: Commitment;\n\tfetch?: boolean;\n\tskip?: boolean;\n\twatch?: boolean;\n}>;\n\ntype UseBalanceOptions = Readonly<{\n\twatch?: boolean;\n}> &\n\tUseAccountOptions;\n\nfunction createClusterSelector(): (state: ClientState) => ClusterState {\n\treturn (state) => state.cluster;\n}\n\nfunction createClusterStatusSelector(): (state: ClientState) => ClusterStatus {\n\treturn (state) => state.cluster.status;\n}\n\nfunction createWalletSelector(): (state: ClientState) => WalletStatus {\n\treturn (state) => state.wallet;\n}\n\nfunction createAccountSelector(key?: string) {\n\treturn (state: ClientState): AccountCacheEntry | undefined => (key ? state.accounts[key] : undefined);\n}\n\ntype SuspensePromiseRef = {\n\tkey: string | null;\n\tpromise: Promise<unknown>;\n};\n\nfunction useSuspenseFetcher(\n\tconfig: Readonly<{\n\t\tenabled: boolean;\n\t\tfetcher: () => Promise<unknown>;\n\t\tkey: string | null;\n\t\tready: boolean;\n\t}>,\n) {\n\tconst preference = useQuerySuspensePreference();\n\tconst suspenseEnabled = Boolean(preference) && config.enabled;\n\tconst pendingRef = useRef<SuspensePromiseRef | null>(null);\n\n\tuseEffect(() => {\n\t\tif (!suspenseEnabled) {\n\t\t\tpendingRef.current = null;\n\t\t\treturn;\n\t\t}\n\t\tif (pendingRef.current && pendingRef.current.key !== config.key) {\n\t\t\tpendingRef.current = null;\n\t\t}\n\t}, [config.key, suspenseEnabled]);\n\n\tif (pendingRef.current && pendingRef.current.key !== config.key) {\n\t\tpendingRef.current = null;\n\t}\n\n\tif (suspenseEnabled && config.key && !config.ready) {\n\t\tif (!pendingRef.current) {\n\t\t\tconst promise = config.fetcher();\n\t\t\tpendingRef.current = {\n\t\t\t\tkey: config.key,\n\t\t\t\tpromise: promise.finally(() => {\n\t\t\t\t\tif (pendingRef.current?.promise === promise) {\n\t\t\t\t\t\tpendingRef.current = null;\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t};\n\t\t}\n\t\tthrow pendingRef.current.promise;\n\t}\n}\n\n/**\n * Read the full cluster state managed by the client store.\n *\n * @example\n * ```ts\n * const cluster = useClusterState();\n * console.log(cluster.endpoint, cluster.status);\n * ```\n */\nexport function useClusterState(): ClusterState {\n\tconst selector = useMemo(createClusterSelector, []);\n\treturn useClientStore(selector);\n}\n\n/**\n * Read just the cluster connection status slice (connecting/ready/error).\n *\n * @example\n * ```ts\n * const status = useClusterStatus();\n * if (status.status === 'error') console.error(status.error);\n * ```\n */\nexport function useClusterStatus(): ClusterStatus {\n\tconst selector = useMemo(createClusterStatusSelector, []);\n\treturn useClientStore(selector);\n}\n\n/**\n * Access the wallet status tracked by the client store (connected/connecting/error/disconnected).\n *\n * @example\n * ```ts\n * const wallet = useWallet();\n * if (wallet.status === 'connected') {\n * console.log(wallet.session.account.address.toString());\n * }\n * ```\n */\nexport function useWallet(): WalletStatus {\n\tconst selector = useMemo(createWalletSelector, []);\n\treturn useClientStore(selector);\n}\n\n/**\n * Convenience helper that returns the active wallet session when connected, otherwise `undefined`.\n *\n * @example\n * ```ts\n * const session = useWalletSession();\n * const address = session?.account.address.toString();\n * ```\n */\nexport function useWalletSession(): WalletSession | undefined {\n\tconst wallet = useWallet();\n\tif (wallet.status === 'connected') {\n\t\treturn wallet.session;\n\t}\n\treturn undefined;\n}\n\n/**\n * Access the headless client actions (setCluster, fetchAccount, connectWallet, etc.).\n *\n * @example\n * ```ts\n * const actions = useWalletActions();\n * await actions.connectWallet('phantom');\n * ```\n */\nexport function useWalletActions() {\n\tconst client = useSolanaClient();\n\treturn client.actions;\n}\n\n/**\n * Stable connect helper that resolves to {@link ClientActions.connectWallet}.\n *\n * @example\n * ```ts\n * const connect = useConnectWallet();\n * await connect('phantom', { autoConnect: true });\n * ```\n */\nexport function useConnectWallet(): (\n\tconnectorId: string,\n\toptions?: Readonly<{ autoConnect?: boolean; allowInteractiveFallback?: boolean }>,\n) => Promise<void> {\n\tconst client = useSolanaClient();\n\treturn useCallback(\n\t\t(connectorId: string, options?: Readonly<{ autoConnect?: boolean; allowInteractiveFallback?: boolean }>) =>\n\t\t\tclient.actions.connectWallet(connectorId, options),\n\t\t[client],\n\t);\n}\n\n/**\n * Stable disconnect helper mapping to {@link ClientActions.disconnectWallet}.\n *\n * @example\n * ```ts\n * const disconnect = useDisconnectWallet();\n * await disconnect();\n * ```\n */\nexport function useDisconnectWallet(): () => Promise<void> {\n\tconst client = useSolanaClient();\n\treturn useCallback(() => client.actions.disconnectWallet(), [client]);\n}\n\ntype SolTransferSignature = UnwrapPromise<ReturnType<SolTransferHelper['sendTransfer']>>;\n\n/**\n * Convenience wrapper around the SOL transfer helper that tracks status and signature.\n *\n * @example\n * ```ts\n * const { send, signature, status } = useSolTransfer();\n * await send({ amount: 1_000_000n, destination: toAddress('...') });\n * console.log(signature, status);\n * ```\n */\nexport function useSolTransfer(): Readonly<{\n\terror: unknown;\n\thelper: SolTransferHelper;\n\tisSending: boolean;\n\treset(): void;\n\tsend(config: SolTransferInput, options?: SolTransferSendOptions): Promise<SolTransferSignature>;\n\tsignature: SolTransferSignature | null;\n\tstatus: AsyncState<SolTransferSignature>['status'];\n}> {\n\tconst client = useSolanaClient();\n\tconst session = useWalletSession();\n\tconst helper = client.solTransfer;\n\tconst sessionRef = useRef(session);\n\n\tuseEffect(() => {\n\t\tsessionRef.current = session;\n\t}, [session]);\n\n\tconst controller = useMemo(\n\t\t() =>\n\t\t\tcreateSolTransferController({\n\t\t\t\tauthorityProvider: () => sessionRef.current,\n\t\t\t\thelper,\n\t\t\t}),\n\t\t[helper],\n\t);\n\n\tconst state = useSyncExternalStore<AsyncState<SolTransferSignature>>(\n\t\tcontroller.subscribe,\n\t\tcontroller.getState,\n\t\tcontroller.getState,\n\t);\n\n\tconst send = useCallback(\n\t\t(config: SolTransferInput, options?: SolTransferSendOptions) => controller.send(config, options),\n\t\t[controller],\n\t);\n\n\treturn {\n\t\terror: state.error ?? null,\n\t\thelper,\n\t\tisSending: state.status === 'loading',\n\t\treset: controller.reset,\n\t\tsend,\n\t\tsignature: state.data ?? null,\n\t\tstatus: state.status,\n\t};\n}\n\ntype StakeSignature = UnwrapPromise<ReturnType<StakeHelper['sendStake']>>;\ntype UnstakeSignature = UnwrapPromise<ReturnType<StakeHelper['sendUnstake']>>;\ntype WithdrawSignature = UnwrapPromise<ReturnType<StakeHelper['sendWithdraw']>>;\n\n/**\n * Convenience wrapper around the stake helper that tracks status and signature for native SOL staking.\n * Allows staking SOL to a validator and returns transaction details.\n */\nexport function useStake(validatorId: AddressLike): Readonly<{\n\terror: unknown;\n\tgetStakeAccounts(wallet: AddressLike, validatorIdFilter?: AddressLike): Promise<StakeAccount[]>;\n\thelper: StakeHelper;\n\tisStaking: boolean;\n\tisUnstaking: boolean;\n\tisWithdrawing: boolean;\n\treset(): void;\n\tresetUnstake(): void;\n\tresetWithdraw(): void;\n\tstake(config: Omit<StakeInput, 'validatorId'>, options?: StakeSendOptions): Promise<StakeSignature>;\n\tunstake(config: Omit<UnstakeInput, 'validatorId'>, options?: UnstakeSendOptions): Promise<UnstakeSignature>;\n\twithdraw(config: Omit<WithdrawInput, 'validatorId'>, options?: WithdrawSendOptions): Promise<WithdrawSignature>;\n\tsignature: StakeSignature | null;\n\tunstakeSignature: UnstakeSignature | null;\n\twithdrawSignature: WithdrawSignature | null;\n\tstatus: AsyncState<StakeSignature>['status'];\n\tunstakeStatus: AsyncState<UnstakeSignature>['status'];\n\twithdrawStatus: AsyncState<WithdrawSignature>['status'];\n\tunstakeError: unknown;\n\twithdrawError: unknown;\n\tvalidatorId: string;\n}> {\n\tconst client = useSolanaClient();\n\tconst session = useWalletSession();\n\tconst helper = client.stake;\n\tconst sessionRef = useRef(session);\n\tconst normalizedValidatorId = useMemo(() => String(validatorId), [validatorId]);\n\n\tuseEffect(() => {\n\t\tsessionRef.current = session;\n\t}, [session]);\n\n\tconst controller = useMemo(\n\t\t() =>\n\t\t\tcreateStakeController({\n\t\t\t\tauthorityProvider: () => sessionRef.current,\n\t\t\t\thelper,\n\t\t\t}),\n\t\t[helper],\n\t);\n\n\tconst state = useSyncExternalStore<AsyncState<StakeSignature>>(\n\t\tcontroller.subscribe,\n\t\tcontroller.getState,\n\t\tcontroller.getState,\n\t);\n\n\tconst unstakeState = useSyncExternalStore<AsyncState<UnstakeSignature>>(\n\t\tcontroller.subscribeUnstake,\n\t\tcontroller.getUnstakeState,\n\t\tcontroller.getUnstakeState,\n\t);\n\n\tconst withdrawState = useSyncExternalStore<AsyncState<WithdrawSignature>>(\n\t\tcontroller.subscribeWithdraw,\n\t\tcontroller.getWithdrawState,\n\t\tcontroller.getWithdrawState,\n\t);\n\n\tconst stake = useCallback(\n\t\t(config: Omit<StakeInput, 'validatorId'>, options?: StakeSendOptions) =>\n\t\t\tcontroller.stake({ ...config, validatorId: normalizedValidatorId }, options),\n\t\t[controller, normalizedValidatorId],\n\t);\n\n\tconst unstake = useCallback(\n\t\t(config: Omit<UnstakeInput, 'validatorId'>, options?: UnstakeSendOptions) =>\n\t\t\tcontroller.unstake({ ...config }, options),\n\t\t[controller],\n\t);\n\n\tconst withdraw = useCallback(\n\t\t(config: Omit<WithdrawInput, 'validatorId'>, options?: WithdrawSendOptions) =>\n\t\t\tcontroller.withdraw({ ...config }, options),\n\t\t[controller],\n\t);\n\n\tconst getStakeAccounts = useCallback(\n\t\tasync (wallet: AddressLike, validatorIdFilter?: AddressLike) => {\n\t\t\tif (!helper.getStakeAccounts) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t'getStakeAccounts is not available. Make sure you have the latest version of @solana/client package.',\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst walletAddr = typeof wallet === 'string' ? wallet : String(wallet);\n\t\t\tconst filterAddr = validatorIdFilter\n\t\t\t\t? typeof validatorIdFilter === 'string'\n\t\t\t\t\t? validatorIdFilter\n\t\t\t\t\t: String(validatorIdFilter)\n\t\t\t\t: undefined;\n\t\t\treturn helper.getStakeAccounts(walletAddr, filterAddr);\n\t\t},\n\t\t[helper],\n\t);\n\n\treturn {\n\t\terror: state.error ?? null,\n\t\tgetStakeAccounts,\n\t\thelper,\n\t\tisStaking: state.status === 'loading',\n\t\tisUnstaking: unstakeState.status === 'loading',\n\t\tisWithdrawing: withdrawState.status === 'loading',\n\t\treset: controller.reset,\n\t\tresetUnstake: controller.resetUnstake,\n\t\tresetWithdraw: controller.resetWithdraw,\n\t\tstake,\n\t\tunstake,\n\t\twithdraw,\n\t\tsignature: state.data ?? null,\n\t\tunstakeSignature: unstakeState.data ?? null,\n\t\twithdrawSignature: withdrawState.data ?? null,\n\t\tstatus: state.status,\n\t\tunstakeStatus: unstakeState.status,\n\t\twithdrawStatus: withdrawState.status,\n\t\tunstakeError: unstakeState.error ?? null,\n\t\twithdrawError: withdrawState.error ?? null,\n\t\tvalidatorId: normalizedValidatorId,\n\t};\n}\n\ntype SplTokenBalanceResult = SplTokenBalance;\ntype SplTransferSignature = UnwrapPromise<ReturnType<SplTokenHelper['sendTransfer']>>;\ntype UseSplTokenOptions = Readonly<{\n\tcommitment?: Commitment;\n\tconfig?: Omit<SplTokenHelperConfig, 'commitment' | 'mint'>;\n\towner?: AddressLike;\n\trevalidateOnFocus?: boolean;\n\tswr?: Omit<\n\t\tSWRConfiguration<SplTokenBalanceResult, unknown, BareFetcher<SplTokenBalanceResult>>,\n\t\t'fallback' | 'suspense'\n\t>;\n}>;\n\n/**\n * Simplified SPL token hook that scopes helpers by mint and manages balance state.\n *\n * @example\n * ```ts\n * const { balance, send, owner } = useSplToken(mintAddress);\n * if (owner && balance?.exists) {\n * await send({ amount: 1n, destinationOwner: toAddress('...') });\n * }\n * ```\n */\nexport function useSplToken(\n\tmint: AddressLike,\n\toptions: UseSplTokenOptions = {},\n): Readonly<{\n\tbalance: SplTokenBalanceResult | null;\n\terror: unknown;\n\thelper: SplTokenHelper;\n\tisFetching: boolean;\n\tisSending: boolean;\n\towner: string | null;\n\trefresh(): Promise<SplTokenBalanceResult | undefined>;\n\trefreshing: boolean;\n\tresetSend(): void;\n\tsend(config: SplTransferInput, options?: SolTransferSendOptions): Promise<SplTransferSignature>;\n\tsendError: unknown;\n\tsendSignature: SplTransferSignature | null;\n\tsendStatus: AsyncState<SplTransferSignature>['status'];\n\tstatus: 'disconnected' | 'error' | 'loading' | 'ready';\n}> {\n\tconst client = useSolanaClient();\n\tconst session = useWalletSession();\n\tconst suspense = Boolean(useQuerySuspensePreference());\n\n\tconst normalizedMint = useMemo(() => String(mint), [mint]);\n\n\tconst helperConfig = useMemo<SplTokenHelperConfig>(\n\t\t() => ({\n\t\t\tcommitment: options.commitment,\n\t\t\tmint: normalizedMint,\n\t\t\t...(options.config ?? {}),\n\t\t}),\n\t\t[normalizedMint, options.commitment, options.config],\n\t);\n\n\tconst helper = useMemo(() => client.splToken(helperConfig), [client, helperConfig]);\n\n\tconst ownerRaw = options.owner ?? session?.account.address;\n\tconst owner = useMemo(() => (ownerRaw ? String(ownerRaw) : null), [ownerRaw]);\n\n\tconst balanceKey = owner ? ['spl-balance', normalizedMint, owner, options.commitment ?? null] : null;\n\n\tconst fetchBalance = useCallback(() => {\n\t\tif (!owner) {\n\t\t\tthrow new Error('Unable to fetch SPL balance without an owner.');\n\t\t}\n\t\treturn helper.fetchBalance(owner, options.commitment);\n\t}, [helper, owner, options.commitment]);\n\n\tconst swrOptions = useMemo(\n\t\t() => ({\n\t\t\trevalidateOnFocus: options.revalidateOnFocus ?? false,\n\t\t\tsuspense,\n\t\t\t...(options.swr ?? {}),\n\t\t}),\n\t\t[options.revalidateOnFocus, options.swr, suspense],\n\t);\n\n\tconst { data, error, isLoading, isValidating, mutate } = useSWR<SplTokenBalanceResult>(\n\t\tbalanceKey,\n\t\tfetchBalance,\n\t\tswrOptions,\n\t);\n\n\tconst sessionRef = useRef(session);\n\tuseEffect(() => {\n\t\tsessionRef.current = session;\n\t}, [session]);\n\n\tconst ownerRef = useRef(owner);\n\tuseEffect(() => {\n\t\townerRef.current = owner;\n\t}, [owner]);\n\n\tconst controller = useMemo<SplTransferController>(\n\t\t() =>\n\t\t\tcreateSplTransferController({\n\t\t\t\tauthorityProvider: () => sessionRef.current ?? undefined,\n\t\t\t\thelper,\n\t\t\t\tsourceOwnerProvider: () => ownerRef.current ?? undefined,\n\t\t\t}),\n\t\t[helper],\n\t);\n\n\tconst sendState = useSyncExternalStore<AsyncState<SplTransferSignature>>(\n\t\tcontroller.subscribe,\n\t\tcontroller.getState,\n\t\tcontroller.getState,\n\t);\n\n\tconst refresh = useCallback(() => {\n\t\tif (!owner) {\n\t\t\treturn Promise.resolve(undefined);\n\t\t}\n\t\treturn mutate(() => helper.fetchBalance(owner, options.commitment), { revalidate: false });\n\t}, [helper, mutate, owner, options.commitment]);\n\n\tconst send = useCallback(\n\t\tasync (config: SplTransferInput, sendOptions?: SolTransferSendOptions) => {\n\t\t\tconst signature = await controller.send(config, sendOptions);\n\t\t\tif (owner) {\n\t\t\t\tawait mutate(() => helper.fetchBalance(owner, options.commitment), { revalidate: false });\n\t\t\t}\n\t\t\treturn signature;\n\t\t},\n\t\t[controller, helper, mutate, options.commitment, owner],\n\t);\n\n\tconst resetSend = useCallback(() => {\n\t\tcontroller.reset();\n\t}, [controller]);\n\n\tconst status: 'disconnected' | 'error' | 'loading' | 'ready' =\n\t\towner === null ? 'disconnected' : error ? 'error' : isLoading && !data ? 'loading' : 'ready';\n\n\treturn {\n\t\tbalance: data ?? null,\n\t\terror: error ?? null,\n\t\thelper,\n\t\tisFetching: Boolean(owner) && (isLoading || isValidating),\n\t\tisSending: sendState.status === 'loading',\n\t\towner,\n\t\trefresh,\n\t\trefreshing: Boolean(owner) && isValidating,\n\t\tresetSend,\n\t\tsend,\n\t\tsendError: sendState.error ?? null,\n\t\tsendSignature: sendState.data ?? null,\n\t\tsendStatus: sendState.status,\n\t\tstatus,\n\t};\n}\n\n/**\n * Subscribe to the account cache for a given address, optionally triggering fetch & watch helpers.\n *\n * @example\n * ```ts\n * const account = useAccount(pubkey, { watch: true });\n * const lamports = account?.lamports ?? null;\n * ```\n */\nexport function useAccount(addressLike?: AddressLike, options: UseAccountOptions = {}): AccountCacheEntry | undefined {\n\tconst client = useSolanaClient();\n\tconst shouldSkip = options.skip ?? !addressLike;\n\tconst address = useMemo(() => {\n\t\tif (shouldSkip || !addressLike) {\n\t\t\treturn undefined;\n\t\t}\n\t\treturn toAddress(addressLike);\n\t}, [addressLike, shouldSkip]);\n\tconst accountKey = useMemo(() => address?.toString(), [address]);\n\tconst selector = useMemo(() => createAccountSelector(accountKey), [accountKey]);\n\tconst account = useClientStore(selector);\n\n\tuseSuspenseFetcher({\n\t\tenabled: options.fetch !== false && !shouldSkip && Boolean(address),\n\t\tfetcher: () => {\n\t\t\tif (!address) {\n\t\t\t\tthrow new Error('Provide an address before fetching account data.');\n\t\t\t}\n\t\t\treturn client.actions.fetchAccount(address, options.commitment);\n\t\t},\n\t\tkey: accountKey ?? null,\n\t\tready: account !== undefined,\n\t});\n\n\tuseEffect(() => {\n\t\tif (!address) {\n\t\t\treturn;\n\t\t}\n\t\tconst commitment = options.commitment;\n\t\tif (options.fetch !== false && account === undefined) {\n\t\t\tvoid client.actions.fetchAccount(address, commitment).catch(() => undefined);\n\t\t}\n\t\tif (options.watch) {\n\t\t\tconst subscription = client.watchers.watchAccount({ address, commitment }, () => undefined);\n\t\t\treturn () => {\n\t\t\t\tsubscription.abort();\n\t\t\t};\n\t\t}\n\t\treturn undefined;\n\t}, [account, address, client, options.commitment, options.fetch, options.watch]);\n\n\treturn account;\n}\n\n/**\n * Track lamport balance for an address. Fetches immediately and watches by default.\n *\n * @example\n * ```ts\n * const { lamports, fetching } = useBalance(pubkey);\n * ```\n */\nexport function useBalance(\n\taddressLike?: AddressLike,\n\toptions: UseBalanceOptions = {},\n): Readonly<{\n\taccount?: AccountCacheEntry;\n\terror?: unknown;\n\tfetching: boolean;\n\tlamports: Lamports | null;\n\tslot: bigint | null | undefined;\n}> {\n\tconst mergedOptions = useMemo(\n\t\t() => ({\n\t\t\tcommitment: options.commitment,\n\t\t\tfetch: options.fetch ?? true,\n\t\t\tskip: options.skip,\n\t\t\twatch: options.watch ?? true,\n\t\t}),\n\t\t[options.commitment, options.fetch, options.skip, options.watch],\n\t);\n\tconst client = useSolanaClient();\n\tconst shouldSkip = mergedOptions.skip ?? !addressLike;\n\tconst address = useMemo(() => {\n\t\tif (shouldSkip || !addressLike) {\n\t\t\treturn undefined;\n\t\t}\n\t\treturn toAddress(addressLike);\n\t}, [addressLike, shouldSkip]);\n\tconst accountKey = useMemo(() => address?.toString(), [address]);\n\tconst selector = useMemo(() => createAccountSelector(accountKey), [accountKey]);\n\tconst account = useClientStore(selector);\n\n\tuseSuspenseFetcher({\n\t\tenabled: mergedOptions.fetch !== false && !shouldSkip && Boolean(address),\n\t\tfetcher: () => {\n\t\t\tif (!address) {\n\t\t\t\tthrow new Error('Provide an address before fetching balance.');\n\t\t\t}\n\t\t\treturn client.actions.fetchBalance(address, mergedOptions.commitment);\n\t\t},\n\t\tkey: accountKey ?? null,\n\t\tready: account !== undefined,\n\t});\n\n\tuseEffect(() => {\n\t\tif (!address) {\n\t\t\treturn;\n\t\t}\n\t\tconst commitment = mergedOptions.commitment;\n\t\tif (mergedOptions.fetch !== false && account === undefined) {\n\t\t\tvoid client.actions.fetchBalance(address, commitment).catch(() => undefined);\n\t\t}\n\t\tif (mergedOptions.watch) {\n\t\t\tconst watcher = client.watchers.watchBalance({ address, commitment }, () => undefined);\n\t\t\treturn () => {\n\t\t\t\twatcher.abort();\n\t\t\t};\n\t\t}\n\t\treturn undefined;\n\t}, [account, address, client, mergedOptions.commitment, mergedOptions.fetch, mergedOptions.watch]);\n\n\tconst lamports = account?.lamports ?? null;\n\tconst fetching = account?.fetching ?? false;\n\tconst slot = account?.slot;\n\tconst error = account?.error;\n\n\treturn useMemo(\n\t\t() => ({\n\t\t\taccount,\n\t\t\terror,\n\t\t\tfetching,\n\t\t\tlamports,\n\t\t\tslot,\n\t\t}),\n\t\t[account, error, fetching, lamports, slot],\n\t);\n}\n\ntype UseTransactionPoolConfig = Readonly<{\n\tinstructions?: TransactionInstructionList;\n\tlatestBlockhash?: UseLatestBlockhashParameters;\n}>;\n\ntype UseTransactionPoolPrepareOptions = TransactionPoolPrepareOptions;\n\ntype UseTransactionPoolSignOptions = TransactionPoolSignOptions;\n\ntype UseTransactionPoolSendOptions = TransactionPoolSendOptions;\n\ntype UseTransactionPoolPrepareAndSendOptions = TransactionPoolPrepareAndSendOptions;\n\ntype TransactionSignature = Signature;\n\n/**\n * Manage a mutable set of instructions and use the transaction helper to prepare/sign/send.\n *\n * @example\n * ```ts\n * const pool = useTransactionPool();\n * pool.addInstruction(ix);\n * const prepared = await pool.prepare({ feePayer });\n * await pool.send();\n * ```\n */\nexport function useTransactionPool(config: UseTransactionPoolConfig = {}): Readonly<{\n\taddInstruction(instruction: TransactionInstructionInput): void;\n\taddInstructions(instructionSet: TransactionInstructionList): void;\n\tclearInstructions(): void;\n\tinstructions: TransactionInstructionList;\n\tisPreparing: boolean;\n\tisSending: boolean;\n\tprepared: TransactionPrepared | null;\n\tprepare(options?: UseTransactionPoolPrepareOptions): Promise<TransactionPrepared>;\n\tprepareError: unknown;\n\tprepareStatus: AsyncState<TransactionPrepared>['status'];\n\tremoveInstruction(index: number): void;\n\treplaceInstructions(instructionSet: TransactionInstructionList): void;\n\treset(): void;\n\tsend(options?: UseTransactionPoolSendOptions): Promise<TransactionSignature>;\n\tsendError: unknown;\n\tsendSignature: TransactionSignature | null;\n\tsendStatus: AsyncState<TransactionSignature>['status'];\n\tprepareAndSend(\n\t\trequest?: UseTransactionPoolPrepareAndSendOptions,\n\t\tsendOptions?: TransactionSendOptions,\n\t): Promise<TransactionSignature>;\n\tsign(options?: UseTransactionPoolSignOptions): ReturnType<TransactionHelper['sign']>;\n\ttoWire(options?: UseTransactionPoolSignOptions): ReturnType<TransactionHelper['toWire']>;\n\tlatestBlockhash: UseLatestBlockhashReturnType;\n}> {\n\tconst initialInstructions = useMemo<TransactionInstructionList>(\n\t\t() => config.instructions ?? [],\n\t\t[config.instructions],\n\t);\n\tconst client = useSolanaClient();\n\tconst helper = client.helpers.transaction;\n\tconst swrRefreshInterval = config.latestBlockhash?.swr?.refreshInterval;\n\tconst blockhashRefreshInterval =\n\t\tconfig.latestBlockhash?.refreshInterval ??\n\t\t(typeof swrRefreshInterval === 'number' ? swrRefreshInterval : undefined);\n\tconst blockhashMaxAgeMs = blockhashRefreshInterval ?? 30_000;\n\tconst controller = useMemo<TransactionPoolController>(\n\t\t() =>\n\t\t\tcreateTransactionPoolController({\n\t\t\t\tblockhashMaxAgeMs,\n\t\t\t\thelper,\n\t\t\t\tinitialInstructions,\n\t\t\t}),\n\t\t[blockhashMaxAgeMs, helper, initialInstructions],\n\t);\n\tconst latestBlockhash = useLatestBlockhash(config.latestBlockhash);\n\n\tuseEffect(() => {\n\t\tconst value = latestBlockhash.data?.value;\n\t\tif (!value) {\n\t\t\tcontroller.setLatestBlockhashCache(undefined);\n\t\t\treturn;\n\t\t}\n\t\tconst cache: LatestBlockhashCache = {\n\t\t\tupdatedAt: latestBlockhash.dataUpdatedAt ?? Date.now(),\n\t\t\tvalue,\n\t\t};\n\t\tcontroller.setLatestBlockhashCache(cache);\n\t}, [controller, latestBlockhash.data, latestBlockhash.dataUpdatedAt]);\n\n\tconst instructions = useSyncExternalStore<TransactionInstructionList>(\n\t\tcontroller.subscribeInstructions,\n\t\tcontroller.getInstructions,\n\t\tcontroller.getInstructions,\n\t);\n\tconst prepared = useSyncExternalStore<TransactionPrepared | null>(\n\t\tcontroller.subscribePrepared,\n\t\tcontroller.getPrepared,\n\t\tcontroller.getPrepared,\n\t);\n\tconst prepareState = useSyncExternalStore<AsyncState<TransactionPrepared>>(\n\t\tcontroller.subscribePrepareState,\n\t\tcontroller.getPrepareState,\n\t\tcontroller.getPrepareState,\n\t);\n\tconst sendState = useSyncExternalStore<AsyncState<TransactionSignature>>(\n\t\tcontroller.subscribeSendState,\n\t\tcontroller.getSendState,\n\t\tcontroller.getSendState,\n\t);\n\n\treturn {\n\t\taddInstruction: controller.addInstruction,\n\t\taddInstructions: controller.addInstructions,\n\t\tclearInstructions: controller.clearInstructions,\n\t\tinstructions,\n\t\tisPreparing: prepareState.status === 'loading',\n\t\tisSending: sendState.status === 'loading',\n\t\tprepared,\n\t\tprepare: controller.prepare,\n\t\tprepareError: prepareState.error ?? null,\n\t\tprepareStatus: prepareState.status,\n\t\tremoveInstruction: controller.removeInstruction,\n\t\treplaceInstructions: controller.replaceInstructions,\n\t\treset: controller.reset,\n\t\tsend: controller.send,\n\t\tsendError: sendState.error ?? null,\n\t\tsendSignature: sendState.data ?? null,\n\t\tsendStatus: sendState.status,\n\t\tprepareAndSend: controller.prepareAndSend,\n\t\tsign: controller.sign,\n\t\ttoWire: controller.toWire,\n\t\tlatestBlockhash,\n\t};\n}\n\ntype SendTransactionSignature = Signature;\n\ntype UseSendTransactionResult = Readonly<{\n\terror: unknown;\n\tisSending: boolean;\n\treset(): void;\n\tsend(\n\t\trequest: TransactionPrepareAndSendRequest,\n\t\toptions?: TransactionSendOptions,\n\t): Promise<SendTransactionSignature>;\n\tsendPrepared(prepared: TransactionPrepared, options?: TransactionSendOptions): Promise<SendTransactionSignature>;\n\tsignature: SendTransactionSignature | null;\n\tstatus: AsyncState<SendTransactionSignature>['status'];\n}>;\n\n/**\n * General-purpose helper that prepares and sends arbitrary transactions through {@link TransactionHelper}.\n *\n * @example\n * ```ts\n * const { send, status } = useSendTransaction();\n * await send({ instructions: [ix], feePayer });\n * ```\n */\nexport function useSendTransaction(): UseSendTransactionResult {\n\tconst client = useSolanaClient();\n\tconst helper = client.transaction;\n\tconst session = useWalletSession();\n\tconst [state, setState] = useState<AsyncState<SendTransactionSignature>>(() =>\n\t\tcreateInitialAsyncState<SendTransactionSignature>(),\n\t);\n\n\tconst execute = useCallback(\n\t\tasync (operation: () => Promise<SendTransactionSignature>): Promise<SendTransactionSignature> => {\n\t\t\tsetState(createAsyncState<SendTransactionSignature>('loading'));\n\t\t\ttry {\n\t\t\t\tconst signature = await operation();\n\t\t\t\tsetState(createAsyncState<SendTransactionSignature>('success', { data: signature }));\n\t\t\t\treturn signature;\n\t\t\t} catch (error) {\n\t\t\t\tsetState(createAsyncState<SendTransactionSignature>('error', { error }));\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t},\n\t\t[],\n\t);\n\n\tconst ensureAuthority = useCallback(\n\t\t(request: TransactionPrepareAndSendRequest): TransactionPrepareAndSendRequest => {\n\t\t\tif (request.authority) {\n\t\t\t\treturn request;\n\t\t\t}\n\t\t\tif (!session) {\n\t\t\t\tthrow new Error('Connect a wallet or supply an `authority` before sending transactions.');\n\t\t\t}\n\t\t\treturn { ...request, authority: session };\n\t\t},\n\t\t[session],\n\t);\n\n\tconst send = useCallback(\n\t\tasync (request: TransactionPrepareAndSendRequest, options?: TransactionSendOptions) => {\n\t\t\tconst normalizedRequest = ensureAuthority(request);\n\t\t\treturn execute(() => helper.prepareAndSend(normalizedRequest, options));\n\t\t},\n\t\t[ensureAuthority, execute, helper],\n\t);\n\n\tconst sendPrepared = useCallback(\n\t\tasync (prepared: TransactionPrepared, options?: TransactionSendOptions) =>\n\t\t\texecute(() => helper.send(prepared, options)),\n\t\t[execute, helper],\n\t);\n\n\tconst reset = useCallback(() => {\n\t\tsetState(createInitialAsyncState<SendTransactionSignature>());\n\t}, []);\n\n\treturn {\n\t\terror: state.error ?? null,\n\t\tisSending: state.status === 'loading',\n\t\treset,\n\t\tsend,\n\t\tsendPrepared,\n\t\tsignature: state.data ?? null,\n\t\tstatus: state.status,\n\t};\n}\n\nexport type UseSignatureStatusOptions = Readonly<{\n\tconfig?: SignatureStatusConfig;\n\tdisabled?: boolean;\n\tswr?: UseSolanaRpcQueryOptions<SignatureStatusValue | null>['swr'];\n}>;\n\nexport type UseSignatureStatusParameters = UseSignatureStatusOptions &\n\tReadonly<{\n\t\tsignature?: SignatureLike;\n\t}>;\n\ntype SignatureStatusState = SolanaQueryResult<SignatureStatusValue | null> &\n\tReadonly<{\n\t\tconfirmationStatus: ConfirmationCommitment | null;\n\t\tsignatureStatus: SignatureStatusValue | null;\n\t}>;\n\n/**\n * Fetch the RPC status for a transaction signature.\n *\n * @example\n * ```ts\n * const { signatureStatus, confirmationStatus } = useSignatureStatus(sig);\n * ```\n */\nexport function useSignatureStatus(\n\tsignatureInput?: SignatureLike,\n\toptions: UseSignatureStatusOptions = {},\n): SignatureStatusState {\n\tconst { config, disabled: disabledOption, swr } = options;\n\tconst signature = useMemo(() => normalizeSignature(signatureInput), [signatureInput]);\n\tconst signatureKey = signature?.toString() ?? null;\n\tconst fetcher = useCallback(\n\t\tasync (client: SolanaClient) => {\n\t\t\tif (!signatureKey) {\n\t\t\t\tthrow new Error('Provide a signature before querying its status.');\n\t\t\t}\n\t\t\tif (!signature) {\n\t\t\t\tthrow new Error('Provide a signature before querying its status.');\n\t\t\t}\n\t\t\tconst plan = client.runtime.rpc.getSignatureStatuses([signature], config);\n\t\t\tconst response = await plan.send({ abortSignal: AbortSignal.timeout(SIGNATURE_STATUS_TIMEOUT_MS) });\n\t\t\treturn response.value[0] ?? null;\n\t\t},\n\t\t[config, signature, signatureKey],\n\t);\n\tconst disabled = disabledOption ?? !signatureKey;\n\tconst query = useSolanaRpcQuery<SignatureStatusValue | null>(\n\t\t'signatureStatus',\n\t\tgetSignatureStatusKey({ signature: signatureInput, config }),\n\t\tfetcher,\n\t\t{\n\t\t\tdisabled,\n\t\t\tswr,\n\t\t},\n\t);\n\tconst confirmationStatus = deriveConfirmationStatus(query.data ?? null);\n\treturn {\n\t\t...query,\n\t\tconfirmationStatus,\n\t\tsignatureStatus: query.data ?? null,\n\t};\n}\n\nexport type SignatureWaitStatus = 'error' | 'idle' | 'success' | 'waiting';\n\nexport type UseWaitForSignatureOptions = Omit<UseSignatureStatusOptions, 'disabled'> &\n\tReadonly<{\n\t\tcommitment?: ConfirmationCommitment;\n\t\tdisabled?: boolean;\n\t\tsubscribe?: boolean;\n\t\twatchCommitment?: ConfirmationCommitment;\n\t}>;\n\ntype WaitForSignatureState = SignatureStatusState &\n\tReadonly<{\n\t\tisError: boolean;\n\t\tisSuccess: boolean;\n\t\tisWaiting: boolean;\n\t\twaitError: unknown;\n\t\twaitStatus: SignatureWaitStatus;\n\t}>;\n\n/**\n * Poll signature status until the desired commitment (or subscription notification) is reached.\n *\n * @example\n * ```ts\n * const { waitStatus, confirmationStatus } = useWaitForSignature(sig, { commitment: 'finalized' });\n * ```\n */\nexport function useWaitForSignature(\n\tsignatureInput?: SignatureLike,\n\toptions: UseWaitForSignatureOptions = {},\n): WaitForSignatureState {\n\tconst {\n\t\tcommitment = 'confirmed',\n\t\tdisabled: disabledOption,\n\t\tsubscribe = true,\n\t\twatchCommitment,\n\t\t...signatureStatusOptions\n\t} = options;\n\tconst { swr, ...restStatusOptions } = signatureStatusOptions;\n\tconst subscribeCommitment = watchCommitment ?? commitment;\n\tconst client = useSolanaClient();\n\tconst normalizedSignature = useMemo(() => normalizeSignature(signatureInput), [signatureInput]);\n\tconst disabled = disabledOption ?? !normalizedSignature;\n\tconst statusQuery = useSignatureStatus(signatureInput, {\n\t\t...restStatusOptions,\n\t\tswr: {\n\t\t\trefreshInterval: 2_000,\n\t\t\t...swr,\n\t\t},\n\t\tdisabled,\n\t});\n\tconst [subscriptionSettled, setSubscriptionSettled] = useState(false);\n\n\tuseEffect(() => {\n\t\tif (normalizedSignature === undefined) {\n\t\t\tsetSubscriptionSettled(false);\n\t\t\treturn;\n\t\t}\n\t\tsetSubscriptionSettled(false);\n\t}, [normalizedSignature]);\n\n\tuseEffect(() => {\n\t\tif (!normalizedSignature || disabled || !subscribe) {\n\t\t\treturn;\n\t\t}\n\t\tconst subscription = client.watchers.watchSignature(\n\t\t\t{\n\t\t\t\tcommitment: subscribeCommitment,\n\t\t\t\tenableReceivedNotification: true,\n\t\t\t\tsignature: normalizedSignature,\n\t\t\t},\n\t\t\t() => {\n\t\t\t\tsetSubscriptionSettled(true);\n\t\t\t},\n\t\t);\n\t\treturn () => {\n\t\t\tsubscription.abort();\n\t\t};\n\t}, [client, disabled, normalizedSignature, subscribe, subscribeCommitment]);\n\n\tconst hasSignature = Boolean(normalizedSignature) && !disabled;\n\tconst signatureError = statusQuery.signatureStatus?.err ?? null;\n\tconst waitError = statusQuery.error ?? signatureError ?? null;\n\tconst meetsCommitment = confirmationMeetsCommitment(statusQuery.confirmationStatus, commitment);\n\tconst settled = subscriptionSettled || meetsCommitment;\n\n\tlet waitStatus: SignatureWaitStatus = 'idle';\n\tif (!hasSignature) {\n\t\twaitStatus = 'idle';\n\t} else if (waitError) {\n\t\twaitStatus = 'error';\n\t} else if (settled) {\n\t\twaitStatus = 'success';\n\t} else {\n\t\twaitStatus = 'waiting';\n\t}\n\n\treturn {\n\t\t...statusQuery,\n\t\tisError: waitStatus === 'error',\n\t\tisSuccess: waitStatus === 'success',\n\t\tisWaiting: waitStatus === 'waiting',\n\t\twaitError,\n\t\twaitStatus,\n\t};\n}\n\ntype UseLookupTableOptions = Readonly<{\n\tcommitment?: Commitment;\n\tswr?: Omit<SWRConfiguration<AddressLookupTableData, unknown, BareFetcher<AddressLookupTableData>>, 'suspense'>;\n}>;\n\n/**\n * Fetch an address lookup table.\n *\n * @example\n * ```ts\n * const { data, isLoading, error } = useLookupTable(lutAddress);\n * ```\n */\nexport function useLookupTable(\n\taddressLike?: AddressLike,\n\toptions: UseLookupTableOptions = {},\n): SolanaQueryResult<AddressLookupTableData> {\n\tconst addr = useMemo(() => (addressLike ? toAddress(addressLike) : undefined), [addressLike]);\n\tconst key = addr?.toString() ?? null;\n\tconst fetcher = useCallback(\n\t\tasync (c: SolanaClient) => {\n\t\t\tif (!addr) throw new Error('Address required');\n\t\t\treturn c.actions.fetchLookupTable(addr, options.commitment);\n\t\t},\n\t\t[addr, options.commitment],\n\t);\n\treturn useSolanaRpcQuery<AddressLookupTableData>('lookupTable', [key, options.commitment], fetcher, {\n\t\tdisabled: !addr,\n\t\tswr: options.swr,\n\t});\n}\n\ntype UseNonceAccountOptions = Readonly<{\n\tcommitment?: Commitment;\n\tswr?: Omit<SWRConfiguration<NonceAccountData, unknown, BareFetcher<NonceAccountData>>, 'suspense'>;\n}>;\n\n/**\n * Fetch a nonce account.\n *\n * @example\n * ```ts\n * const { data, isLoading, error } = useNonceAccount(nonceAddress);\n * ```\n */\nexport function useNonceAccount(\n\taddressLike?: AddressLike,\n\toptions: UseNonceAccountOptions = {},\n): SolanaQueryResult<NonceAccountData> {\n\tconst addr = useMemo(() => (addressLike ? toAddress(addressLike) : undefined), [addressLike]);\n\tconst key = addr?.toString() ?? null;\n\tconst fetcher = useCallback(\n\t\tasync (c: SolanaClient) => {\n\t\t\tif (!addr) throw new Error('Address required');\n\t\t\treturn c.actions.fetchNonceAccount(addr, options.commitment);\n\t\t},\n\t\t[addr, options.commitment],\n\t);\n\treturn useSolanaRpcQuery<NonceAccountData>('nonceAccount', [key, options.commitment], fetcher, {\n\t\tdisabled: !addr,\n\t\tswr: options.swr,\n\t});\n}\n\n// Public hook type aliases for consistency\nexport type UseAccountParameters = Readonly<{ address?: AddressLike; options?: UseAccountOptions }>;\nexport type UseAccountReturnType = ReturnType<typeof useAccount>;\n\nexport type UseBalanceParameters = Readonly<{ address?: AddressLike; options?: UseBalanceOptions }>;\nexport type UseBalanceReturnType = ReturnType<typeof useBalance>;\n\nexport type UseClusterStateParameters = undefined;\nexport type UseClusterStateReturnType = ReturnType<typeof useClusterState>;\n\nexport type UseClusterStatusParameters = undefined;\nexport type UseClusterStatusReturnType = ReturnType<typeof useClusterStatus>;\n\nexport type UseConnectWalletParameters = undefined;\nexport type UseConnectWalletReturnType = ReturnType<typeof useConnectWallet>;\n\nexport type UseDisconnectWalletParameters = undefined;\nexport type UseDisconnectWalletReturnType = ReturnType<typeof useDisconnectWallet>;\n\nexport type UseSendTransactionParameters = undefined;\nexport type UseSendTransactionReturnType = ReturnType<typeof useSendTransaction>;\n\nexport type UseSignatureStatusReturnType = SignatureStatusState;\n\nexport type UseWaitForSignatureParameters = Readonly<{\n\toptions?: UseWaitForSignatureOptions;\n\tsignature?: SignatureLike;\n}>;\n\nexport type UseWaitForSignatureReturnType = WaitForSignatureState;\n\nexport type UseSolTransferParameters = undefined;\nexport type UseSolTransferReturnType = ReturnType<typeof useSolTransfer>;\nexport type UseSplTokenParameters = Readonly<{ mint: AddressLike; options?: UseSplTokenOptions }>;\nexport type UseSplTokenReturnType = ReturnType<typeof useSplToken>;\n\nexport type UseTransactionPoolParameters = Readonly<{ config?: UseTransactionPoolConfig }>;\nexport type UseTransactionPoolReturnType = ReturnType<typeof useTransactionPool>;\n\nexport type UseWalletParameters = undefined;\nexport type UseWalletReturnType = ReturnType<typeof useWallet>;\n\nexport type UseWalletSessionParameters = undefined;\nexport type UseWalletSessionReturnType = ReturnType<typeof useWalletSession>;\n\nexport type UseWalletActionsParameters = undefined;\nexport type UseWalletActionsReturnType = ReturnType<typeof useWalletActions>;\n\nexport type UseLookupTableParameters = Readonly<{ address?: AddressLike; options?: UseLookupTableOptions }>;\nexport type UseLookupTableReturnType = ReturnType<typeof useLookupTable>;\n\nexport type UseNonceAccountParameters = Readonly<{ address?: AddressLike; options?: UseNonceAccountOptions }>;\nexport type UseNonceAccountReturnType = ReturnType<typeof useNonceAccount>;\n","'use client';\n\nimport type { JSX, ReactNode } from 'react';\nimport { useMemo, useRef } from 'react';\nimport { type Cache, SWRConfig, type SWRConfiguration } from 'swr';\n\nimport { QuerySuspenseContext } from './querySuspenseContext';\nimport { useClientStore } from './useClientStore';\n\nconst createCache = (): Cache => new Map<string, unknown>() as Cache;\n\nconst DEFAULT_QUERY_CONFIG: SWRConfiguration = Object.freeze({\n\tdedupingInterval: 2_000,\n\tfocusThrottleInterval: 5_000,\n\tprovider: () => createCache(),\n\trevalidateIfStale: true,\n\trevalidateOnFocus: true,\n\trevalidateOnReconnect: true,\n});\n\ntype SolanaQueryProviderProps = Readonly<{\n\tchildren: ReactNode;\n\tconfig?: SWRConfiguration;\n\tresetOnClusterChange?: boolean;\n\tsuspense?: boolean;\n}>;\n\nexport function SolanaQueryProvider({\n\tchildren,\n\tconfig,\n\tresetOnClusterChange = true,\n\tsuspense,\n}: SolanaQueryProviderProps): JSX.Element {\n\tconst cluster = useClientStore((state) => state.cluster);\n\tconst cacheRegistryRef = useRef<Map<string, Cache>>(new Map());\n\tconst cacheKey = resetOnClusterChange ? `${cluster.endpoint}|${cluster.commitment}` : 'global';\n\tconst cache = useMemo<Cache>(() => {\n\t\tconst registry = cacheRegistryRef.current;\n\t\tif (!resetOnClusterChange) {\n\t\t\tconst existing = registry.get('global');\n\t\t\tif (existing) {\n\t\t\t\treturn existing;\n\t\t\t}\n\t\t\tconst next = createCache();\n\t\t\tregistry.set('global', next);\n\t\t\treturn next;\n\t\t}\n\t\tconst next = createCache();\n\t\tregistry.set(cacheKey, next);\n\t\treturn next;\n\t}, [cacheKey, resetOnClusterChange]);\n\n\tconst value = useMemo<SWRConfiguration>(() => {\n\t\tconst base = {\n\t\t\t...DEFAULT_QUERY_CONFIG,\n\t\t\t...config,\n\t\t};\n\t\tif (!config?.provider) {\n\t\t\tbase.provider = () => cache;\n\t\t}\n\t\tif (base.suspense === undefined && suspense !== undefined) {\n\t\t\tbase.suspense = suspense;\n\t\t}\n\t\treturn base;\n\t}, [cache, config, suspense]);\n\n\treturn (\n\t\t<QuerySuspenseContext.Provider value={suspense}>\n\t\t\t<SWRConfig value={value}>{children}</SWRConfig>\n\t\t</QuerySuspenseContext.Provider>\n\t);\n}\n","'use client';\n\nimport type {\n\tCreateDefaultClientOptions,\n\tSerializableSolanaState,\n\tSolanaClient,\n\tSolanaClientConfig,\n} from '@solana/client';\nimport {\n\tdeserializeSolanaState,\n\tresolveClientConfig,\n\tserializeSolanaState,\n\tsubscribeSolanaState,\n} from '@solana/client';\nimport type { ReactNode } from 'react';\nimport { useEffect, useRef, useState } from 'react';\nimport type { SWRConfiguration } from 'swr';\n\nimport { SolanaClientProvider, useSolanaClient } from './context';\nimport { useConnectWallet, useWallet } from './hooks';\nimport { SolanaQueryProvider } from './QueryProvider';\n\ntype QueryLayerConfig = Readonly<{\n\tconfig?: SWRConfiguration;\n\tresetOnClusterChange?: boolean;\n\tsuspense?: boolean;\n\tdisabled?: boolean;\n}>;\n\ntype StorageAdapter = Readonly<{\n\tgetItem(key: string): string | null;\n\tremoveItem(key: string): void;\n\tsetItem(key: string, value: string): void;\n}>;\n\ntype WalletPersistenceConfig = Readonly<{\n\tautoConnect?: boolean;\n\tstorage?: StorageAdapter | null;\n\tstorageKey?: string;\n}>;\n\ntype PersistedSerializableState = Readonly<{\n\tlegacyConnectorId: string | null;\n\tstate: SerializableSolanaState | null;\n}>;\n\ntype SolanaProviderProps = Readonly<{\n\tchildren: ReactNode;\n\tclient?: SolanaClient;\n\tconfig?: SolanaClientConfig | CreateDefaultClientOptions;\n\tquery?: QueryLayerConfig | false;\n\twalletPersistence?: WalletPersistenceConfig | false;\n}>;\n\n/**\n * Convenience provider that composes {@link SolanaClientProvider} with {@link SolanaQueryProvider}.\n *\n * Useful when you want one drop-in wrapper that handles client setup plus SWR configuration without\n * introducing any additional contexts.\n */\nexport function SolanaProvider({ children, client, config, query, walletPersistence }: SolanaProviderProps) {\n\tconst shouldIncludeQueryLayer = query !== false && query?.disabled !== true;\n\tconst queryProps: QueryLayerConfig = shouldIncludeQueryLayer && query ? query : {};\n\tconst persistenceConfig = walletPersistence === false ? undefined : (walletPersistence ?? {});\n\tconst storage = persistenceConfig ? (persistenceConfig.storage ?? getDefaultStorage()) : null;\n\tconst storageKey = persistenceConfig?.storageKey ?? DEFAULT_STORAGE_KEY;\n\tconst persistedState = persistenceConfig\n\t\t? readPersistedState(storage, storageKey)\n\t\t: { legacyConnectorId: null, state: null };\n\tconst normalizedConfig = config ? resolveClientConfig(config) : resolveClientConfig();\n\tconst clientConfig = persistenceConfig\n\t\t? { ...normalizedConfig, initialState: normalizedConfig.initialState ?? persistedState.state ?? undefined }\n\t\t: normalizedConfig;\n\n\tconst content = shouldIncludeQueryLayer ? (\n\t\t<SolanaQueryProvider\n\t\t\tconfig={queryProps.config}\n\t\t\tresetOnClusterChange={queryProps.resetOnClusterChange}\n\t\t\tsuspense={queryProps.suspense}\n\t\t>\n\t\t\t{children}\n\t\t</SolanaQueryProvider>\n\t) : (\n\t\tchildren\n\t);\n\n\treturn (\n\t\t<SolanaClientProvider client={client} config={clientConfig}>\n\t\t\t{persistenceConfig ? (\n\t\t\t\t<WalletPersistence\n\t\t\t\t\tautoConnect={persistenceConfig.autoConnect}\n\t\t\t\t\tinitialState={clientConfig?.initialState ?? persistedState.state}\n\t\t\t\t\tlegacyConnectorId={persistedState.legacyConnectorId}\n\t\t\t\t\tstorage={storage}\n\t\t\t\t\tstorageKey={storageKey}\n\t\t\t\t/>\n\t\t\t) : null}\n\t\t\t{content}\n\t\t</SolanaClientProvider>\n\t);\n}\n\nconst DEFAULT_STORAGE_KEY = 'solana:last-connector';\n\nfunction readPersistedState(storage: StorageAdapter | null, storageKey: string): PersistedSerializableState {\n\tif (!storage) {\n\t\treturn { legacyConnectorId: null, state: null };\n\t}\n\tconst raw = safelyRead(() => storage.getItem(storageKey));\n\tif (!raw) {\n\t\treturn { legacyConnectorId: null, state: null };\n\t}\n\tconst parsed = deserializeSolanaState(raw);\n\tif (parsed) {\n\t\treturn { legacyConnectorId: null, state: parsed };\n\t}\n\treturn { legacyConnectorId: raw, state: null };\n}\n\ntype WalletPersistenceProps = WalletPersistenceConfig &\n\tReadonly<{\n\t\tinitialState?: SerializableSolanaState | null;\n\t\tlegacyConnectorId?: string | null;\n\t}>;\n\nfunction WalletPersistence({\n\tautoConnect = true,\n\tinitialState = null,\n\tlegacyConnectorId = null,\n\tstorage,\n\tstorageKey = DEFAULT_STORAGE_KEY,\n}: WalletPersistenceProps) {\n\tconst wallet = useWallet();\n\tconst connectWallet = useConnectWallet();\n\tconst client = useSolanaClient();\n\tconst storageRef = useRef<StorageAdapter | null>(storage ?? getDefaultStorage());\n\tconst [hasAttemptedAutoConnect, setHasAttemptedAutoConnect] = useState(false);\n\tconst clientRef = useRef<SolanaClient | null>(null);\n\tconst persistedStateRef = useRef<SerializableSolanaState | null>(initialState);\n\tconst legacyConnectorIdRef = useRef<string | null>(legacyConnectorId);\n\n\tuseEffect(() => {\n\t\tstorageRef.current = storage ?? getDefaultStorage();\n\t}, [storage]);\n\n\tuseEffect(() => {\n\t\tif (clientRef.current !== client) {\n\t\t\tclientRef.current = client;\n\t\t\tsetHasAttemptedAutoConnect(false);\n\t\t}\n\t}, [client]);\n\n\tuseEffect(() => {\n\t\tconst activeStorage = storageRef.current;\n\t\tif (!activeStorage) return;\n\t\tconst unsubscribe = subscribeSolanaState(client, (state) => {\n\t\t\tpersistedStateRef.current = state;\n\t\t\tlegacyConnectorIdRef.current = null;\n\t\t\tsafelyWrite(() => activeStorage.setItem(storageKey, serializeSolanaState(state)));\n\t\t});\n\t\treturn () => {\n\t\t\tunsubscribe();\n\t\t};\n\t}, [client, storageKey]);\n\n\tuseEffect(() => {\n\t\tpersistedStateRef.current = initialState ?? persistedStateRef.current;\n\t\tlegacyConnectorIdRef.current = legacyConnectorId;\n\t}, [initialState, legacyConnectorId]);\n\n\tuseEffect(() => {\n\t\tconst persisted = persistedStateRef.current ?? initialState;\n\t\tconst persistedAutoConnect = persisted?.autoconnect ?? false;\n\t\tconst autoConnectEnabled = persistedAutoConnect || autoConnect;\n\t\tif (!autoConnectEnabled || hasAttemptedAutoConnect) {\n\t\t\treturn;\n\t\t}\n\t\tif (wallet.status === 'connected' || wallet.status === 'connecting') {\n\t\t\tsetHasAttemptedAutoConnect(true);\n\t\t\treturn;\n\t\t}\n\t\tconst connectorId = persisted?.lastConnectorId ?? legacyConnectorIdRef.current;\n\t\tconst shouldAutoConnect = autoConnectEnabled && connectorId;\n\t\tif (!shouldAutoConnect || !connectorId) return;\n\t\tconst connector = client.connectors.get(connectorId);\n\t\tif (!connector) return;\n\n\t\tvoid (async () => {\n\t\t\ttry {\n\t\t\t\tawait connectWallet(connectorId, { autoConnect: true, allowInteractiveFallback: false });\n\t\t\t} catch {\n\t\t\t\t// Ignore auto-connect failures; consumers can handle manual retries via hooks.\n\t\t\t} finally {\n\t\t\t\tsetHasAttemptedAutoConnect(true);\n\t\t\t}\n\t\t})();\n\t}, [autoConnect, client, connectWallet, hasAttemptedAutoConnect, initialState, wallet.status]);\n\n\treturn null;\n}\n\nfunction safelyRead(reader: () => string | null): string | null {\n\ttry {\n\t\treturn reader();\n\t} catch {\n\t\treturn null;\n\t}\n}\n\nfunction safelyWrite(writer: () => void) {\n\ttry {\n\t\twriter();\n\t} catch {\n\t\t// Ignore write failures (private browsing, SSR, etc.).\n\t}\n}\n\nfunction getDefaultStorage(): StorageAdapter | null {\n\tif (typeof globalThis !== 'object' || globalThis === null) {\n\t\treturn null;\n\t}\n\tconst candidate = (globalThis as Record<string, unknown>).localStorage as StorageAdapter | undefined;\n\tif (!candidate) {\n\t\treturn null;\n\t}\n\treturn candidate;\n}\n","import type { WalletConnector, WalletSession, WalletStatus } from '@solana/client';\nimport type { ReactNode } from 'react';\nimport { useCallback, useEffect, useMemo, useState } from 'react';\n\nimport { useSolanaClient } from './context';\nimport { useConnectWallet, useDisconnectWallet, useWallet } from './hooks';\n\ntype WalletConnectionState = Readonly<{\n\tconnect(\n\t\tconnectorId: string,\n\t\toptions?: Readonly<{ autoConnect?: boolean; allowInteractiveFallback?: boolean }>,\n\t): Promise<void>;\n\tconnected: boolean;\n\tconnecting: boolean;\n\tconnectors: readonly WalletConnector[];\n\tcurrentConnector?: WalletConnector;\n\tconnectorId?: string;\n\tdisconnect(): Promise<void>;\n\terror: unknown;\n\tstatus: WalletStatus['status'];\n\twallet: WalletSession | undefined;\n}>;\n\ntype WalletConnectionOptions = Readonly<{\n\tconnectors?: readonly WalletConnector[];\n}>;\n\nexport type UseWalletConnectionParameters = WalletConnectionOptions;\nexport type UseWalletConnectionReturnType = WalletConnectionState;\n\n/**\n * Collect everything needed to build wallet connection UIs into a single hook.\n *\n * @example\n * ```tsx\n * const { connectors, connect, disconnect, status } = useWalletConnection();\n * return connectors.map((c) => (\n * <button key={c.id} onClick={() => connect(c.id)} disabled={status === 'connecting'}>\n * {c.name}\n * </button>\n * ));\n * ```\n */\nexport function useWalletConnection(options: WalletConnectionOptions = {}): WalletConnectionState {\n\tconst wallet = useWallet();\n\tconst connectWallet = useConnectWallet();\n\tconst disconnectWallet = useDisconnectWallet();\n\tconst client = useSolanaClient();\n\tconst [isHydrated, setIsHydrated] = useState(false);\n\tuseEffect(() => {\n\t\tsetIsHydrated(true);\n\t}, []);\n\tconst connectors = isHydrated ? (options.connectors ?? client.connectors.all) : [];\n\tconst connect = useCallback(\n\t\t(\n\t\t\tconnectorId: string,\n\t\t\tconnectOptions?: Readonly<{ autoConnect?: boolean; allowInteractiveFallback?: boolean }>,\n\t\t) => connectWallet(connectorId, connectOptions),\n\t\t[connectWallet],\n\t);\n\tconst disconnect = useCallback(() => disconnectWallet(), [disconnectWallet]);\n\n\tconst state = useMemo<WalletConnectionState>(() => {\n\t\tconst connectorId = 'connectorId' in wallet ? wallet.connectorId : undefined;\n\t\tconst currentConnector = connectorId ? connectors.find((connector) => connector.id === connectorId) : undefined;\n\t\tconst session: WalletSession | undefined = wallet.status === 'connected' ? wallet.session : undefined;\n\t\tconst error = wallet.status === 'error' ? (wallet.error ?? null) : null;\n\n\t\treturn {\n\t\t\tconnect,\n\t\t\tconnected: wallet.status === 'connected',\n\t\t\tconnecting: wallet.status === 'connecting',\n\t\t\tconnectors,\n\t\t\tconnectorId,\n\t\t\tcurrentConnector,\n\t\t\tdisconnect,\n\t\t\terror,\n\t\t\tstatus: wallet.status,\n\t\t\twallet: session,\n\t\t};\n\t}, [connect, connectors, disconnect, wallet]);\n\n\treturn state;\n}\n\ntype WalletConnectionManagerProps = Readonly<{\n\tchildren: (state: WalletConnectionState) => ReactNode;\n\tconnectors?: readonly WalletConnector[];\n}>;\n\n/**\n * Render-prop helper that lets you easily wire wallet status into custom UIs.\n *\n * @example\n * ```tsx\n * <WalletConnectionManager>\n * {({ connectors, connect }) => connectors.map((c) => (\n * <button key={c.id} onClick={() => connect(c.id)}>{c.name}</button>\n * ))}\n * </WalletConnectionManager>\n * ```\n */\nexport function WalletConnectionManager({ children, connectors }: WalletConnectionManagerProps) {\n\tconst state = useWalletConnection({ connectors });\n\treturn <>{children(state)}</>;\n}\n\ntype WalletModalStateOptions = WalletConnectionOptions &\n\tReadonly<{\n\t\tcloseOnConnect?: boolean;\n\t\tinitialOpen?: boolean;\n\t}>;\n\nexport type WalletModalState = WalletConnectionState &\n\tReadonly<{\n\t\tclose(): void;\n\t\tisOpen: boolean;\n\t\topen(): void;\n\t\tselectedConnector: string | null;\n\t\tselect(connectorId: string | null): void;\n\t\ttoggle(): void;\n\t}>;\n\nexport type UseWalletModalStateParameters = WalletModalStateOptions;\nexport type UseWalletModalStateReturnType = WalletModalState;\n\n/**\n * Small state machine for wallet selection modals – keeps track of modal visibility and the currently\n * highlighted connector while reusing the connection state returned by {@link useWalletConnection}.\n *\n * @example\n * ```tsx\n * const modal = useWalletModalState();\n * return (\n * <>\n * <button onClick={modal.toggle}>Connect</button>\n * {modal.isOpen && modal.connectors.map((c) => (\n * <button key={c.id} onClick={() => modal.connect(c.id)}>{c.name}</button>\n * ))}\n * </>\n * );\n * ```\n */\nexport function useWalletModalState(options: WalletModalStateOptions = {}): WalletModalState {\n\tconst connection = useWalletConnection(options);\n\tconst [isOpen, setIsOpen] = useState(options.initialOpen ?? false);\n\tconst [selectedConnector, setSelectedConnector] = useState<string | null>(null);\n\tconst closeOnConnect = options.closeOnConnect ?? true;\n\n\tconst open = useCallback(() => setIsOpen(true), []);\n\tconst close = useCallback(() => setIsOpen(false), []);\n\tconst toggle = useCallback(() => setIsOpen((value) => !value), []);\n\tconst select = useCallback((connectorId: string | null) => setSelectedConnector(connectorId), []);\n\n\tconst connect = useCallback(\n\t\tasync (connectorId: string, connectOptions?: Readonly<{ autoConnect?: boolean }>) => {\n\t\t\tawait connection.connect(connectorId, connectOptions);\n\t\t\tsetSelectedConnector(connectorId);\n\t\t\tif (closeOnConnect) {\n\t\t\t\tsetIsOpen(false);\n\t\t\t}\n\t\t},\n\t\t[closeOnConnect, connection],\n\t);\n\n\treturn {\n\t\t...connection,\n\t\tclose,\n\t\tconnect,\n\t\tisOpen,\n\t\topen,\n\t\tselectedConnector,\n\t\tselect,\n\t\ttoggle,\n\t};\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/context.tsx","../src/querySuspenseContext.ts","../src/useClientStore.ts","../src/query.ts","../src/queryKeys.ts","../src/queryHooks.ts","../src/hooks.ts","../src/QueryProvider.tsx","../src/SolanaProvider.tsx","../src/ui.tsx"],"names":["SolanaClientContext","createContext","normalizeConfig","config","resolveClientConfig","__name","SolanaClientProvider","children","providedClient","normalizedConfig","useMemo","client","createClient","useEffect","jsx","useSolanaClient","useContext","QuerySuspenseContext","useQuerySuspensePreference","identitySelector","state","useClientStore","selector","appliedSelector","slice","useStore","QUERY_NAMESPACE","useSolanaRpcQuery","scope","args","fetcher","options","cluster","disabled","swr","providerSuspensePreference","swrOptions","key","swrResponse","useSWR","dataUpdatedAt","setDataUpdatedAt","useState","status","refresh","useCallback","getLatestBlockhashKey","params","commitment","minContextSlot","normalizeBigint","getProgramAccountsKey","programAddress","address","toAddress","addressKey","toAddressString","configKey","stableStringify","getSimulateTransactionKey","transaction","wire","normalizeWire","getSignatureStatusKey","signature","signatureKey","value","input","getBase64EncodedWireTransaction","DEFAULT_BLOCKHASH_REFRESH_INTERVAL","useLatestBlockhash","refreshInterval","fallbackCommitment","normalizeMinContextSlot","query","useProgramAccounts","disabledOption","mergedConfig","useSimulateTransaction","resolvedConfig","createClusterSelector","createClusterStatusSelector","createWalletSelector","createAccountSelector","useSuspenseFetcher","suspenseEnabled","pendingRef","useRef","promise","useClusterState","useClusterStatus","useWallet","useWalletSession","wallet","useWalletActions","useConnectWallet","connectorId","useDisconnectWallet","useSolTransfer","session","helper","sessionRef","controller","createSolTransferController","useSyncExternalStore","send","useStake","validatorId","normalizedValidatorId","createStakeController","unstakeState","withdrawState","stake","unstake","withdraw","getStakeAccounts","validatorIdFilter","walletAddr","filterAddr","useSplToken","mint","suspense","normalizedMint","helperConfig","ownerRaw","owner","balanceKey","fetchBalance","data","error","isLoading","isValidating","mutate","ownerRef","createSplTransferController","sendState","sendOptions","resetSend","useAccount","addressLike","shouldSkip","accountKey","account","subscription","useBalance","mergedOptions","watcher","lamports","fetching","slot","useTransactionPool","initialInstructions","swrRefreshInterval","blockhashMaxAgeMs","createTransactionPoolController","latestBlockhash","cache","instructions","prepared","prepareState","useSendTransaction","setState","createInitialAsyncState","execute","operation","createAsyncState","ensureAuthority","request","normalizedRequest","sendPrepared","reset","useSignatureStatus","signatureInput","normalizeSignature","SIGNATURE_STATUS_TIMEOUT_MS","confirmationStatus","deriveConfirmationStatus","useWaitForSignature","subscribe","watchCommitment","signatureStatusOptions","restStatusOptions","subscribeCommitment","normalizedSignature","statusQuery","subscriptionSettled","setSubscriptionSettled","hasSignature","signatureError","waitError","meetsCommitment","confirmationMeetsCommitment","settled","waitStatus","useLookupTable","addr","c","useNonceAccount","createCache","DEFAULT_QUERY_CONFIG","SolanaQueryProvider","resetOnClusterChange","cacheRegistryRef","cacheKey","registry","existing","next","base","SWRConfig","SolanaProvider","walletPersistence","shouldIncludeQueryLayer","queryProps","persistenceConfig","storage","getDefaultStorage","storageKey","DEFAULT_STORAGE_KEY","persistedState","readPersistedState","clientConfig","content","jsxs","WalletPersistence","raw","safelyRead","parsed","deserializeSolanaState","autoConnect","initialState","legacyConnectorId","connectWallet","storageRef","hasAttemptedAutoConnect","setHasAttemptedAutoConnect","clientRef","persistedStateRef","legacyConnectorIdRef","activeStorage","unsubscribe","subscribeSolanaState","safelyWrite","serializeSolanaState","persisted","autoConnectEnabled","reader","writer","candidate","useWalletConnection","disconnectWallet","isHydrated","setIsHydrated","connectors","connect","connectOptions","disconnect","currentConnector","connector","WalletConnectionManager","Fragment","useWalletModalState","connection","isOpen","setIsOpen","selectedConnector","setSelectedConnector","closeOnConnect","open","close","toggle","select"],"mappings":"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","file":"index.native.mjs","sourcesContent":["import {\n\ttype CreateDefaultClientOptions,\n\tcreateClient,\n\tresolveClientConfig,\n\ttype SolanaClient,\n\ttype SolanaClientConfig,\n} from '@solana/client';\nimport type { ReactNode } from 'react';\nimport { createContext, useContext, useEffect, useMemo } from 'react';\n\nconst SolanaClientContext = createContext<SolanaClient | null>(null);\n\ntype ProviderProps = Readonly<{\n\tchildren: ReactNode;\n\tclient?: SolanaClient;\n\tconfig?: SolanaClientConfig | CreateDefaultClientOptions;\n}>;\n\nfunction normalizeConfig(config?: SolanaClientConfig | CreateDefaultClientOptions): SolanaClientConfig {\n\treturn resolveClientConfig(config ?? {});\n}\n\n/**\n * Provides a {@link SolanaClient} instance to descendant components.\n *\n * Supply either an existing `client` or a configuration object used to lazily\n * construct an instance via {@link createClient}.\n */\nexport function SolanaClientProvider({ children, client: providedClient, config }: ProviderProps) {\n\tconst normalizedConfig = useMemo(() => normalizeConfig(config), [config]);\n\tconst client = useMemo(() => {\n\t\tif (providedClient) {\n\t\t\treturn providedClient;\n\t\t}\n\t\treturn createClient(normalizedConfig);\n\t}, [normalizedConfig, providedClient]);\n\n\tuseEffect(() => {\n\t\tif (providedClient) {\n\t\t\treturn;\n\t\t}\n\t\treturn () => {\n\t\t\tclient.destroy();\n\t\t};\n\t}, [client, providedClient]);\n\n\treturn <SolanaClientContext.Provider value={client}>{children}</SolanaClientContext.Provider>;\n}\n\n/**\n * Access the {@link SolanaClient} from the nearest {@link SolanaClientProvider}.\n *\n * @throws If used outside of a provider.\n */\nexport function useSolanaClient(): SolanaClient {\n\tconst client = useContext(SolanaClientContext);\n\tif (!client) {\n\t\tthrow new Error('useSolanaClient must be used within a SolanaClientProvider.');\n\t}\n\treturn client;\n}\n\nexport type SolanaClientProviderProps = ProviderProps;\nexport type UseSolanaClientParameters = undefined;\nexport type UseSolanaClientReturnType = SolanaClient;\n","import { createContext, useContext } from 'react';\n\nconst QuerySuspenseContext = createContext<boolean | undefined>(undefined);\n\nexport function useQuerySuspensePreference(): boolean | undefined {\n\treturn useContext(QuerySuspenseContext);\n}\n\nexport { QuerySuspenseContext };\n","import type { ClientState } from '@solana/client';\nimport { useStore } from 'zustand';\n\nimport { useSolanaClient } from './context';\n\nexport type UseClientStoreSelector<T> = (state: ClientState) => T;\nconst identitySelector = (state: ClientState): ClientState => state;\n\nexport type UseClientStoreParameters<T = ClientState> = UseClientStoreSelector<T> | undefined;\nexport type UseClientStoreReturnType<T = ClientState> = T extends undefined ? ClientState : T;\n\nexport function useClientStore(): ClientState;\nexport function useClientStore<T>(selector: UseClientStoreSelector<T>): T;\n/**\n * Subscribe to the underlying Zustand store exposed by {@link SolanaClient}.\n *\n * @param selector - Derives the slice of state to observe. Defaults to the entire state.\n * @returns Selected state slice that triggers re-render when it changes.\n * @example\n * ```ts\n * const commitment = useClientStore((state) => state.cluster.commitment);\n * ```\n */\nexport function useClientStore<T>(selector?: UseClientStoreSelector<T>): ClientState | T {\n\tconst client = useSolanaClient();\n\tconst appliedSelector = selector ?? (identitySelector as UseClientStoreSelector<T>);\n\tconst slice = useStore(client.store, appliedSelector);\n\treturn selector ? slice : (slice as unknown as ClientState);\n}\n","import type { SolanaClient } from '@solana/client';\nimport { useCallback, useEffect, useMemo, useState } from 'react';\nimport useSWR, { type BareFetcher, type SWRConfiguration, type SWRResponse } from 'swr';\n\nimport { useSolanaClient } from './context';\nimport { useQuerySuspensePreference } from './querySuspenseContext';\nimport { useClientStore } from './useClientStore';\n\nconst QUERY_NAMESPACE = '@solana/react-hooks';\n\nexport type QueryStatus = 'error' | 'idle' | 'loading' | 'success';\n\nexport type UseSolanaRpcQueryOptions<Data> = Readonly<{\n\tdisabled?: boolean;\n\tswr?: Omit<SWRConfiguration<Data, unknown, BareFetcher<Data>>, 'fallback' | 'suspense'>;\n}>;\n\nexport type SolanaQueryResult<Data> = Readonly<{\n\tdata: Data | undefined;\n\tdataUpdatedAt?: number;\n\terror: unknown;\n\tisError: boolean;\n\tisLoading: boolean;\n\tisSuccess: boolean;\n\tisValidating: boolean;\n\tmutate: SWRResponse<Data>['mutate'];\n\trefresh(): Promise<Data | undefined>;\n\tstatus: QueryStatus;\n}>;\n\n/**\n * Low-level RPC query helper that scopes SWR keys to the active cluster and exposes a Solana-friendly\n * status shape. Prefer this when you need custom fetch logic beyond the built-in hooks.\n *\n * @param scope - Namespace label for the query key (for debugging and cache clarity).\n * @param args - Additional key params that uniquely identify the query (e.g. signature, address).\n * @param fetcher - Async function that receives the current {@link SolanaClient} and returns data.\n * @param options - Optional flags to disable the query or pass through SWR configuration.\n * @example\n * ```ts\n * const slotQuery = useSolanaRpcQuery(\n * 'slot',\n * ['slot'],\n * (client) => client.runtime.rpc.getLatestBlockhash().send().then((r) => r.context.slot),\n * );\n * ```\n */\nexport function useSolanaRpcQuery<Data>(\n\tscope: string,\n\targs: readonly unknown[],\n\tfetcher: (client: SolanaClient) => Promise<Data>,\n\toptions: UseSolanaRpcQueryOptions<Data> = {},\n): SolanaQueryResult<Data> {\n\tconst client = useSolanaClient();\n\tconst cluster = useClientStore((state) => state.cluster);\n\tconst { disabled = false, swr } = options;\n\tconst providerSuspensePreference = useQuerySuspensePreference();\n\tconst suspenseEnabled = !disabled && Boolean(providerSuspensePreference);\n\tconst swrOptions: SWRConfiguration<Data, unknown, BareFetcher<Data>> = {\n\t\t...(swr ?? {}),\n\t\tsuspense: suspenseEnabled,\n\t};\n\n\tconst key = useMemo(() => {\n\t\tif (disabled) {\n\t\t\treturn null;\n\t\t}\n\t\treturn [QUERY_NAMESPACE, scope, cluster.endpoint, cluster.commitment, ...args] as const;\n\t}, [cluster.commitment, cluster.endpoint, args, scope, disabled]);\n\n\tconst swrResponse = useSWR<Data>(key, () => fetcher(client), swrOptions);\n\tconst [dataUpdatedAt, setDataUpdatedAt] = useState<number | undefined>(() =>\n\t\tswrResponse.data !== undefined ? Date.now() : undefined,\n\t);\n\n\tuseEffect(() => {\n\t\tif (swrResponse.data !== undefined) {\n\t\t\tsetDataUpdatedAt(Date.now());\n\t\t}\n\t}, [swrResponse.data]);\n\n\tconst status: QueryStatus = swrResponse.error\n\t\t? 'error'\n\t\t: swrResponse.isLoading\n\t\t\t? 'loading'\n\t\t\t: swrResponse.data !== undefined\n\t\t\t\t? 'success'\n\t\t\t\t: 'idle';\n\n\tconst refresh = useCallback(() => swrResponse.mutate(undefined, { revalidate: true }), [swrResponse.mutate]);\n\n\treturn {\n\t\tdata: swrResponse.data,\n\t\tdataUpdatedAt,\n\t\terror: swrResponse.error ?? null,\n\t\tisError: status === 'error',\n\t\tisLoading: swrResponse.isLoading,\n\t\tisSuccess: status === 'success',\n\t\tisValidating: swrResponse.isValidating,\n\t\tmutate: swrResponse.mutate,\n\t\trefresh,\n\t\tstatus,\n\t};\n}\n","import { stableStringify, toAddress, toAddressString } from '@solana/client';\nimport { getBase64EncodedWireTransaction, type SendableTransaction, type Transaction } from '@solana/kit';\n\nimport type { UseSignatureStatusOptions, UseSignatureStatusParameters } from './hooks';\nimport type {\n\tUseLatestBlockhashParameters,\n\tUseProgramAccountsParameters,\n\tUseSimulateTransactionParameters,\n} from './queryHooks';\n\nexport type QueryKey = readonly unknown[];\n\nexport function getLatestBlockhashKey(params: UseLatestBlockhashParameters = {}): QueryKey {\n\tconst { commitment = null, minContextSlot = null } = params;\n\treturn ['latestBlockhash', commitment, normalizeBigint(minContextSlot)];\n}\n\nexport function getProgramAccountsKey(params: UseProgramAccountsParameters = {}): QueryKey {\n\tconst { programAddress, config } = params;\n\tconst address = programAddress ? toAddress(programAddress) : undefined;\n\tconst addressKey = address ? toAddressString(address) : null;\n\tconst configKey = stableStringify(config ?? null);\n\treturn ['programAccounts', addressKey, configKey];\n}\n\nexport function getSimulateTransactionKey(params: UseSimulateTransactionParameters = {}): QueryKey {\n\tconst { transaction, config } = params;\n\tconst wire = transaction ? normalizeWire(transaction) : null;\n\tconst configKey = stableStringify(config ?? null);\n\treturn ['simulateTransaction', wire, configKey];\n}\n\nexport function getSignatureStatusKey(params: UseSignatureStatusParameters | UseSignatureStatusOptions = {}): QueryKey {\n\tconst { config, signature } = params as UseSignatureStatusParameters;\n\tconst signatureKey = signature?.toString() ?? null;\n\tconst configKey = JSON.stringify(config ?? null);\n\treturn ['signatureStatus', signatureKey, configKey];\n}\n\nfunction normalizeBigint(value: bigint | number | null | undefined): bigint | null {\n\tif (value === undefined || value === null) return null;\n\treturn typeof value === 'bigint' ? value : BigInt(Math.floor(value));\n}\n\nfunction normalizeWire(input: UseSimulateTransactionParameters['transaction']): string | null {\n\tif (!input) return null;\n\tif (typeof input === 'string') {\n\t\treturn input;\n\t}\n\treturn getBase64EncodedWireTransaction(input as SendableTransaction & Transaction);\n}\n","import { type AddressLike, type SolanaClient, toAddress } from '@solana/client';\nimport {\n\ttype Base64EncodedWireTransaction,\n\ttype Commitment,\n\tgetBase64EncodedWireTransaction,\n\ttype SendableTransaction,\n\ttype Transaction,\n} from '@solana/kit';\nimport { useCallback, useMemo } from 'react';\n\nimport type { SolanaQueryResult, UseSolanaRpcQueryOptions } from './query';\nimport { useSolanaRpcQuery } from './query';\nimport { getLatestBlockhashKey, getProgramAccountsKey, getSimulateTransactionKey } from './queryKeys';\n\ntype RpcInstance = SolanaClient['runtime']['rpc'];\n\ntype LatestBlockhashPlan = ReturnType<RpcInstance['getLatestBlockhash']>;\ntype LatestBlockhashResponse = Awaited<ReturnType<LatestBlockhashPlan['send']>>;\n\ntype ProgramAccountsPlan = ReturnType<RpcInstance['getProgramAccounts']>;\ntype ProgramAccountsConfig = Parameters<RpcInstance['getProgramAccounts']>[1];\ntype ProgramAccountsResponse = Awaited<ReturnType<ProgramAccountsPlan['send']>>;\n\ntype SimulateTransactionPlan = ReturnType<RpcInstance['simulateTransaction']>;\ntype SimulateTransactionConfig = Parameters<RpcInstance['simulateTransaction']>[1];\ntype SimulateTransactionResponse = Awaited<ReturnType<SimulateTransactionPlan['send']>>;\n\nconst DEFAULT_BLOCKHASH_REFRESH_INTERVAL = 30_000;\n\nexport type UseLatestBlockhashParameters = Readonly<{\n\tcommitment?: Commitment;\n\tdisabled?: boolean;\n\tminContextSlot?: bigint | number;\n\trefreshInterval?: number;\n\tswr?: UseSolanaRpcQueryOptions<LatestBlockhashResponse>['swr'];\n}>;\n\nexport type UseLatestBlockhashReturnType = SolanaQueryResult<LatestBlockhashResponse> &\n\tReadonly<{\n\t\tblockhash: string | null;\n\t\tcontextSlot: bigint | null | undefined;\n\t\tlastValidBlockHeight: bigint | null;\n\t}>;\n\n/**\n * Fetch the current cluster blockhash and keep it warm with a configurable polling interval.\n * Falls back to the client's active commitment when one is not provided.\n *\n * @example\n * ```ts\n * const { blockhash, lastValidBlockHeight } = useLatestBlockhash({ refreshInterval: 10_000 });\n * ```\n */\nexport function useLatestBlockhash(options: UseLatestBlockhashParameters = {}): UseLatestBlockhashReturnType {\n\tconst {\n\t\tcommitment,\n\t\tminContextSlot,\n\t\trefreshInterval = DEFAULT_BLOCKHASH_REFRESH_INTERVAL,\n\t\tdisabled = false,\n\t\tswr,\n\t} = options;\n\tconst fetcher = useCallback(\n\t\tasync (client: SolanaClient) => {\n\t\t\tconst fallbackCommitment = commitment ?? client.store.getState().cluster.commitment;\n\t\t\tconst plan = client.runtime.rpc.getLatestBlockhash({\n\t\t\t\tcommitment: fallbackCommitment,\n\t\t\t\tminContextSlot: normalizeMinContextSlot(minContextSlot),\n\t\t\t});\n\t\t\treturn plan.send({ abortSignal: AbortSignal.timeout(15_000) });\n\t\t},\n\t\t[commitment, minContextSlot],\n\t);\n\tconst query = useSolanaRpcQuery<LatestBlockhashResponse>(\n\t\t'latestBlockhash',\n\t\tgetLatestBlockhashKey(options),\n\t\tfetcher,\n\t\t{\n\t\t\tdisabled,\n\t\t\tswr: {\n\t\t\t\trefreshInterval,\n\t\t\t\t...swr,\n\t\t\t},\n\t\t},\n\t);\n\treturn {\n\t\t...query,\n\t\tblockhash: query.data?.value.blockhash ?? null,\n\t\tcontextSlot: query.data?.context.slot,\n\t\tlastValidBlockHeight: query.data?.value.lastValidBlockHeight ?? null,\n\t};\n}\n\nexport type UseProgramAccountsParameters = Readonly<{\n\tcommitment?: Commitment;\n\tconfig?: ProgramAccountsConfig;\n\tdisabled?: boolean;\n\tprogramAddress?: AddressLike;\n\tswr?: UseSolanaRpcQueryOptions<ProgramAccountsResponse>['swr'];\n}>;\n\nexport type UseProgramAccountsReturnType = SolanaQueryResult<ProgramAccountsResponse> &\n\tReadonly<{\n\t\taccounts: ProgramAccountsResponse;\n\t}>;\n\n/**\n * Fetch accounts owned by a program, keyed by the program address. The query is disabled until a\n * program address is provided, and respects both explicit and client default commitments.\n *\n * @example\n * ```ts\n * const programAccounts = useProgramAccounts(programId, { config: { dataSlice: { offset: 0, length: 0 } } });\n * ```\n */\nexport function useProgramAccounts(\n\tprogramAddress?: AddressLike,\n\toptions?: UseProgramAccountsParameters,\n): UseProgramAccountsReturnType {\n\tconst { commitment, config, swr, disabled: disabledOption } = options ?? {};\n\tconst fetcher = useCallback(\n\t\tasync (client: SolanaClient) => {\n\t\t\tconst address = programAddress ? toAddress(programAddress) : undefined;\n\t\t\tif (!address) {\n\t\t\t\tthrow new Error('Provide a program address before querying program accounts.');\n\t\t\t}\n\t\t\tconst fallbackCommitment = commitment ?? config?.commitment ?? client.store.getState().cluster.commitment;\n\t\t\tconst mergedConfig = {\n\t\t\t\t...(config ?? {}),\n\t\t\t\tcommitment: fallbackCommitment,\n\t\t\t} satisfies ProgramAccountsConfig;\n\t\t\tconst plan = client.runtime.rpc.getProgramAccounts(address, mergedConfig);\n\t\t\treturn plan.send({ abortSignal: AbortSignal.timeout(20_000) });\n\t\t},\n\t\t[commitment, config, programAddress],\n\t);\n\tconst disabled = disabledOption ?? !programAddress;\n\tconst query = useSolanaRpcQuery<ProgramAccountsResponse>(\n\t\t'programAccounts',\n\t\tgetProgramAccountsKey({ programAddress, config }),\n\t\tfetcher,\n\t\t{\n\t\t\tdisabled,\n\t\t\tswr,\n\t\t},\n\t);\n\treturn {\n\t\t...query,\n\t\taccounts: query.data ?? [],\n\t};\n}\n\nexport type UseSimulateTransactionParameters = Readonly<{\n\tcommitment?: Commitment;\n\tconfig?: SimulateTransactionConfig;\n\tdisabled?: boolean;\n\trefreshInterval?: number;\n\tswr?: UseSolanaRpcQueryOptions<SimulateTransactionResponse>['swr'];\n\ttransaction?: SimulationInput | null;\n}>;\n\ntype SimulationInput = (SendableTransaction & Transaction) | Base64EncodedWireTransaction | string;\n\nexport type UseSimulateTransactionReturnType = SolanaQueryResult<SimulateTransactionResponse> &\n\tReadonly<{\n\t\tlogs: readonly string[];\n\t}>;\n\n/**\n * Simulate a transaction or wire payload and return simulation logs/results. Disabled until a\n * transaction payload is provided; uses client commitment when not specified in options.\n *\n * @example\n * ```ts\n * const simulation = useSimulateTransaction(base64Wire, { refreshInterval: 0 });\n * console.log(simulation.logs);\n * ```\n */\nexport function useSimulateTransaction(\n\ttransaction?: SimulationInput | null,\n\toptions?: UseSimulateTransactionParameters,\n): UseSimulateTransactionReturnType {\n\tconst { commitment, config, refreshInterval, disabled: disabledOption, swr } = options ?? {};\n\tconst wire = useMemo<Base64EncodedWireTransaction | null>(() => {\n\t\tif (!transaction) {\n\t\t\treturn null;\n\t\t}\n\t\tif (typeof transaction === 'string') {\n\t\t\treturn transaction as Base64EncodedWireTransaction;\n\t\t}\n\t\treturn getBase64EncodedWireTransaction(transaction);\n\t}, [transaction]);\n\tconst fetcher = useCallback(\n\t\tasync (client: SolanaClient) => {\n\t\t\tif (!wire) {\n\t\t\t\tthrow new Error('Provide a transaction payload before simulating.');\n\t\t\t}\n\t\t\tconst resolvedConfig = {\n\t\t\t\t...(config ?? {}),\n\t\t\t\tcommitment: commitment ?? config?.commitment ?? client.store.getState().cluster.commitment,\n\t\t\t} as SimulateTransactionConfig;\n\t\t\tconst plan = client.runtime.rpc.simulateTransaction(wire, resolvedConfig);\n\t\t\treturn plan.send({ abortSignal: AbortSignal.timeout(20_000) });\n\t\t},\n\t\t[commitment, config, wire],\n\t);\n\tconst disabled = disabledOption ?? !wire;\n\tconst query = useSolanaRpcQuery<SimulateTransactionResponse>(\n\t\t'simulateTransaction',\n\t\tgetSimulateTransactionKey({ transaction, config }),\n\t\tfetcher,\n\t\t{\n\t\t\tdisabled,\n\t\t\tswr: {\n\t\t\t\trefreshInterval,\n\t\t\t\trevalidateIfStale: false,\n\t\t\t\trevalidateOnFocus: false,\n\t\t\t\t...swr,\n\t\t\t},\n\t\t},\n\t);\n\treturn {\n\t\t...query,\n\t\tlogs: query.data?.value.logs ?? [],\n\t};\n}\n\nfunction normalizeMinContextSlot(minContextSlot?: bigint | number): bigint | undefined {\n\tif (minContextSlot === undefined) return undefined;\n\treturn typeof minContextSlot === 'bigint' ? minContextSlot : BigInt(Math.floor(minContextSlot));\n}\n","import {\n\ttype AccountCacheEntry,\n\ttype AddressLike,\n\ttype AddressLookupTableData,\n\ttype AsyncState,\n\ttype ClientState,\n\ttype ConfirmationCommitment,\n\tconfirmationMeetsCommitment,\n\tcreateAsyncState,\n\tcreateInitialAsyncState,\n\tcreateSolTransferController,\n\tcreateSplTransferController,\n\tcreateStakeController,\n\tcreateTransactionPoolController,\n\tderiveConfirmationStatus,\n\ttype LatestBlockhashCache,\n\ttype NonceAccountData,\n\tnormalizeSignature,\n\tSIGNATURE_STATUS_TIMEOUT_MS,\n\ttype SignatureLike,\n\ttype SolanaClient,\n\ttype SolTransferHelper,\n\ttype SolTransferInput,\n\ttype SolTransferSendOptions,\n\ttype SplTokenBalance,\n\ttype SplTokenHelper,\n\ttype SplTokenHelperConfig,\n\ttype SplTransferController,\n\ttype SplTransferInput,\n\ttype StakeAccount,\n\ttype StakeHelper,\n\ttype StakeInput,\n\ttype StakeSendOptions,\n\ttype TransactionHelper,\n\ttype TransactionInstructionInput,\n\ttype TransactionInstructionList,\n\ttype TransactionPoolController,\n\ttype TransactionPoolPrepareAndSendOptions,\n\ttype TransactionPoolPrepareOptions,\n\ttype TransactionPoolSendOptions,\n\ttype TransactionPoolSignOptions,\n\ttype TransactionPrepareAndSendRequest,\n\ttype TransactionPrepared,\n\ttype TransactionSendOptions,\n\ttoAddress,\n\ttype UnstakeInput,\n\ttype UnstakeSendOptions,\n\ttype WalletSession,\n\ttype WalletStatus,\n\ttype WithdrawInput,\n\ttype WithdrawSendOptions,\n} from '@solana/client';\nimport type { Commitment, Lamports, Signature } from '@solana/kit';\nimport { useCallback, useEffect, useMemo, useRef, useState, useSyncExternalStore } from 'react';\nimport useSWR, { type BareFetcher, type SWRConfiguration } from 'swr';\n\nimport { useSolanaClient } from './context';\nimport { type SolanaQueryResult, type UseSolanaRpcQueryOptions, useSolanaRpcQuery } from './query';\nimport { type UseLatestBlockhashParameters, type UseLatestBlockhashReturnType, useLatestBlockhash } from './queryHooks';\nimport { getSignatureStatusKey } from './queryKeys';\nimport { useQuerySuspensePreference } from './querySuspenseContext';\nimport { useClientStore } from './useClientStore';\n\ntype ClusterState = ClientState['cluster'];\ntype ClusterStatus = ClientState['cluster']['status'];\ntype UnwrapPromise<T> = T extends Promise<infer U> ? U : T;\n\ntype RpcInstance = SolanaClient['runtime']['rpc'];\n\ntype SignatureStatusesPlan = ReturnType<RpcInstance['getSignatureStatuses']>;\n\ntype SignatureStatusesResponse = Awaited<ReturnType<SignatureStatusesPlan['send']>>;\n\ntype SignatureStatusValue = SignatureStatusesResponse['value'][number];\n\ntype SignatureStatusConfig = Parameters<RpcInstance['getSignatureStatuses']>[1];\n\ntype UseAccountOptions = Readonly<{\n\tcommitment?: Commitment;\n\tfetch?: boolean;\n\tskip?: boolean;\n\twatch?: boolean;\n}>;\n\ntype UseBalanceOptions = Readonly<{\n\twatch?: boolean;\n}> &\n\tUseAccountOptions;\n\nfunction createClusterSelector(): (state: ClientState) => ClusterState {\n\treturn (state) => state.cluster;\n}\n\nfunction createClusterStatusSelector(): (state: ClientState) => ClusterStatus {\n\treturn (state) => state.cluster.status;\n}\n\nfunction createWalletSelector(): (state: ClientState) => WalletStatus {\n\treturn (state) => state.wallet;\n}\n\nfunction createAccountSelector(key?: string) {\n\treturn (state: ClientState): AccountCacheEntry | undefined => (key ? state.accounts[key] : undefined);\n}\n\ntype SuspensePromiseRef = {\n\tkey: string | null;\n\tpromise: Promise<unknown>;\n};\n\nfunction useSuspenseFetcher(\n\tconfig: Readonly<{\n\t\tenabled: boolean;\n\t\tfetcher: () => Promise<unknown>;\n\t\tkey: string | null;\n\t\tready: boolean;\n\t}>,\n) {\n\tconst preference = useQuerySuspensePreference();\n\tconst suspenseEnabled = Boolean(preference) && config.enabled;\n\tconst pendingRef = useRef<SuspensePromiseRef | null>(null);\n\n\tuseEffect(() => {\n\t\tif (!suspenseEnabled) {\n\t\t\tpendingRef.current = null;\n\t\t\treturn;\n\t\t}\n\t\tif (pendingRef.current && pendingRef.current.key !== config.key) {\n\t\t\tpendingRef.current = null;\n\t\t}\n\t}, [config.key, suspenseEnabled]);\n\n\tif (pendingRef.current && pendingRef.current.key !== config.key) {\n\t\tpendingRef.current = null;\n\t}\n\n\tif (suspenseEnabled && config.key && !config.ready) {\n\t\tif (!pendingRef.current) {\n\t\t\tconst promise = config.fetcher();\n\t\t\tpendingRef.current = {\n\t\t\t\tkey: config.key,\n\t\t\t\tpromise: promise.finally(() => {\n\t\t\t\t\tif (pendingRef.current?.promise === promise) {\n\t\t\t\t\t\tpendingRef.current = null;\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t};\n\t\t}\n\t\tthrow pendingRef.current.promise;\n\t}\n}\n\n/**\n * Read the full cluster state managed by the client store.\n *\n * @example\n * ```ts\n * const cluster = useClusterState();\n * console.log(cluster.endpoint, cluster.status);\n * ```\n */\nexport function useClusterState(): ClusterState {\n\tconst selector = useMemo(createClusterSelector, []);\n\treturn useClientStore(selector);\n}\n\n/**\n * Read just the cluster connection status slice (connecting/ready/error).\n *\n * @example\n * ```ts\n * const status = useClusterStatus();\n * if (status.status === 'error') console.error(status.error);\n * ```\n */\nexport function useClusterStatus(): ClusterStatus {\n\tconst selector = useMemo(createClusterStatusSelector, []);\n\treturn useClientStore(selector);\n}\n\n/**\n * Access the wallet status tracked by the client store (connected/connecting/error/disconnected).\n *\n * @example\n * ```ts\n * const wallet = useWallet();\n * if (wallet.status === 'connected') {\n * console.log(wallet.session.account.address.toString());\n * }\n * ```\n */\nexport function useWallet(): WalletStatus {\n\tconst selector = useMemo(createWalletSelector, []);\n\treturn useClientStore(selector);\n}\n\n/**\n * Convenience helper that returns the active wallet session when connected, otherwise `undefined`.\n *\n * @example\n * ```ts\n * const session = useWalletSession();\n * const address = session?.account.address.toString();\n * ```\n */\nexport function useWalletSession(): WalletSession | undefined {\n\tconst wallet = useWallet();\n\tif (wallet.status === 'connected') {\n\t\treturn wallet.session;\n\t}\n\treturn undefined;\n}\n\n/**\n * Access the headless client actions (setCluster, fetchAccount, connectWallet, etc.).\n *\n * @example\n * ```ts\n * const actions = useWalletActions();\n * await actions.connectWallet('phantom');\n * ```\n */\nexport function useWalletActions() {\n\tconst client = useSolanaClient();\n\treturn client.actions;\n}\n\n/**\n * Stable connect helper that resolves to {@link ClientActions.connectWallet}.\n *\n * @example\n * ```ts\n * const connect = useConnectWallet();\n * await connect('phantom', { autoConnect: true });\n * ```\n */\nexport function useConnectWallet(): (\n\tconnectorId: string,\n\toptions?: Readonly<{ autoConnect?: boolean; allowInteractiveFallback?: boolean }>,\n) => Promise<void> {\n\tconst client = useSolanaClient();\n\treturn useCallback(\n\t\t(connectorId: string, options?: Readonly<{ autoConnect?: boolean; allowInteractiveFallback?: boolean }>) =>\n\t\t\tclient.actions.connectWallet(connectorId, options),\n\t\t[client],\n\t);\n}\n\n/**\n * Stable disconnect helper mapping to {@link ClientActions.disconnectWallet}.\n *\n * @example\n * ```ts\n * const disconnect = useDisconnectWallet();\n * await disconnect();\n * ```\n */\nexport function useDisconnectWallet(): () => Promise<void> {\n\tconst client = useSolanaClient();\n\treturn useCallback(() => client.actions.disconnectWallet(), [client]);\n}\n\ntype SolTransferSignature = UnwrapPromise<ReturnType<SolTransferHelper['sendTransfer']>>;\n\n/**\n * Convenience wrapper around the SOL transfer helper that tracks status and signature.\n *\n * @example\n * ```ts\n * const { send, signature, status } = useSolTransfer();\n * await send({ amount: 1_000_000n, destination: toAddress('...') });\n * console.log(signature, status);\n * ```\n */\nexport function useSolTransfer(): Readonly<{\n\terror: unknown;\n\thelper: SolTransferHelper;\n\tisSending: boolean;\n\treset(): void;\n\tsend(config: SolTransferInput, options?: SolTransferSendOptions): Promise<SolTransferSignature>;\n\tsignature: SolTransferSignature | null;\n\tstatus: AsyncState<SolTransferSignature>['status'];\n}> {\n\tconst client = useSolanaClient();\n\tconst session = useWalletSession();\n\tconst helper = client.solTransfer;\n\tconst sessionRef = useRef(session);\n\n\tuseEffect(() => {\n\t\tsessionRef.current = session;\n\t}, [session]);\n\n\tconst controller = useMemo(\n\t\t() =>\n\t\t\tcreateSolTransferController({\n\t\t\t\tauthorityProvider: () => sessionRef.current,\n\t\t\t\thelper,\n\t\t\t}),\n\t\t[helper],\n\t);\n\n\tconst state = useSyncExternalStore<AsyncState<SolTransferSignature>>(\n\t\tcontroller.subscribe,\n\t\tcontroller.getState,\n\t\tcontroller.getState,\n\t);\n\n\tconst send = useCallback(\n\t\t(config: SolTransferInput, options?: SolTransferSendOptions) => controller.send(config, options),\n\t\t[controller],\n\t);\n\n\treturn {\n\t\terror: state.error ?? null,\n\t\thelper,\n\t\tisSending: state.status === 'loading',\n\t\treset: controller.reset,\n\t\tsend,\n\t\tsignature: state.data ?? null,\n\t\tstatus: state.status,\n\t};\n}\n\ntype StakeSignature = UnwrapPromise<ReturnType<StakeHelper['sendStake']>>;\ntype UnstakeSignature = UnwrapPromise<ReturnType<StakeHelper['sendUnstake']>>;\ntype WithdrawSignature = UnwrapPromise<ReturnType<StakeHelper['sendWithdraw']>>;\n\n/**\n * Convenience wrapper around the stake helper that tracks status and signature for native SOL staking.\n * Allows staking SOL to a validator and returns transaction details.\n */\nexport function useStake(validatorId: AddressLike): Readonly<{\n\terror: unknown;\n\tgetStakeAccounts(wallet: AddressLike, validatorIdFilter?: AddressLike): Promise<StakeAccount[]>;\n\thelper: StakeHelper;\n\tisStaking: boolean;\n\tisUnstaking: boolean;\n\tisWithdrawing: boolean;\n\treset(): void;\n\tresetUnstake(): void;\n\tresetWithdraw(): void;\n\tstake(config: Omit<StakeInput, 'validatorId'>, options?: StakeSendOptions): Promise<StakeSignature>;\n\tunstake(config: Omit<UnstakeInput, 'validatorId'>, options?: UnstakeSendOptions): Promise<UnstakeSignature>;\n\twithdraw(config: Omit<WithdrawInput, 'validatorId'>, options?: WithdrawSendOptions): Promise<WithdrawSignature>;\n\tsignature: StakeSignature | null;\n\tunstakeSignature: UnstakeSignature | null;\n\twithdrawSignature: WithdrawSignature | null;\n\tstatus: AsyncState<StakeSignature>['status'];\n\tunstakeStatus: AsyncState<UnstakeSignature>['status'];\n\twithdrawStatus: AsyncState<WithdrawSignature>['status'];\n\tunstakeError: unknown;\n\twithdrawError: unknown;\n\tvalidatorId: string;\n}> {\n\tconst client = useSolanaClient();\n\tconst session = useWalletSession();\n\tconst helper = client.stake;\n\tconst sessionRef = useRef(session);\n\tconst normalizedValidatorId = useMemo(() => String(validatorId), [validatorId]);\n\n\tuseEffect(() => {\n\t\tsessionRef.current = session;\n\t}, [session]);\n\n\tconst controller = useMemo(\n\t\t() =>\n\t\t\tcreateStakeController({\n\t\t\t\tauthorityProvider: () => sessionRef.current,\n\t\t\t\thelper,\n\t\t\t}),\n\t\t[helper],\n\t);\n\n\tconst state = useSyncExternalStore<AsyncState<StakeSignature>>(\n\t\tcontroller.subscribe,\n\t\tcontroller.getState,\n\t\tcontroller.getState,\n\t);\n\n\tconst unstakeState = useSyncExternalStore<AsyncState<UnstakeSignature>>(\n\t\tcontroller.subscribeUnstake,\n\t\tcontroller.getUnstakeState,\n\t\tcontroller.getUnstakeState,\n\t);\n\n\tconst withdrawState = useSyncExternalStore<AsyncState<WithdrawSignature>>(\n\t\tcontroller.subscribeWithdraw,\n\t\tcontroller.getWithdrawState,\n\t\tcontroller.getWithdrawState,\n\t);\n\n\tconst stake = useCallback(\n\t\t(config: Omit<StakeInput, 'validatorId'>, options?: StakeSendOptions) =>\n\t\t\tcontroller.stake({ ...config, validatorId: normalizedValidatorId }, options),\n\t\t[controller, normalizedValidatorId],\n\t);\n\n\tconst unstake = useCallback(\n\t\t(config: Omit<UnstakeInput, 'validatorId'>, options?: UnstakeSendOptions) =>\n\t\t\tcontroller.unstake({ ...config }, options),\n\t\t[controller],\n\t);\n\n\tconst withdraw = useCallback(\n\t\t(config: Omit<WithdrawInput, 'validatorId'>, options?: WithdrawSendOptions) =>\n\t\t\tcontroller.withdraw({ ...config }, options),\n\t\t[controller],\n\t);\n\n\tconst getStakeAccounts = useCallback(\n\t\tasync (wallet: AddressLike, validatorIdFilter?: AddressLike) => {\n\t\t\tif (!helper.getStakeAccounts) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t'getStakeAccounts is not available. Make sure you have the latest version of @solana/client package.',\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst walletAddr = typeof wallet === 'string' ? wallet : String(wallet);\n\t\t\tconst filterAddr = validatorIdFilter\n\t\t\t\t? typeof validatorIdFilter === 'string'\n\t\t\t\t\t? validatorIdFilter\n\t\t\t\t\t: String(validatorIdFilter)\n\t\t\t\t: undefined;\n\t\t\treturn helper.getStakeAccounts(walletAddr, filterAddr);\n\t\t},\n\t\t[helper],\n\t);\n\n\treturn {\n\t\terror: state.error ?? null,\n\t\tgetStakeAccounts,\n\t\thelper,\n\t\tisStaking: state.status === 'loading',\n\t\tisUnstaking: unstakeState.status === 'loading',\n\t\tisWithdrawing: withdrawState.status === 'loading',\n\t\treset: controller.reset,\n\t\tresetUnstake: controller.resetUnstake,\n\t\tresetWithdraw: controller.resetWithdraw,\n\t\tstake,\n\t\tunstake,\n\t\twithdraw,\n\t\tsignature: state.data ?? null,\n\t\tunstakeSignature: unstakeState.data ?? null,\n\t\twithdrawSignature: withdrawState.data ?? null,\n\t\tstatus: state.status,\n\t\tunstakeStatus: unstakeState.status,\n\t\twithdrawStatus: withdrawState.status,\n\t\tunstakeError: unstakeState.error ?? null,\n\t\twithdrawError: withdrawState.error ?? null,\n\t\tvalidatorId: normalizedValidatorId,\n\t};\n}\n\ntype SplTokenBalanceResult = SplTokenBalance;\ntype SplTransferSignature = UnwrapPromise<ReturnType<SplTokenHelper['sendTransfer']>>;\ntype UseSplTokenOptions = Readonly<{\n\tcommitment?: Commitment;\n\tconfig?: Omit<SplTokenHelperConfig, 'commitment' | 'mint'>;\n\towner?: AddressLike;\n\trevalidateOnFocus?: boolean;\n\tswr?: Omit<\n\t\tSWRConfiguration<SplTokenBalanceResult, unknown, BareFetcher<SplTokenBalanceResult>>,\n\t\t'fallback' | 'suspense'\n\t>;\n}>;\n\n/**\n * Simplified SPL token hook that scopes helpers by mint and manages balance state.\n *\n * @example\n * ```ts\n * const { balance, send, owner } = useSplToken(mintAddress);\n * if (owner && balance?.exists) {\n * await send({ amount: 1n, destinationOwner: toAddress('...') });\n * }\n * ```\n */\nexport function useSplToken(\n\tmint: AddressLike,\n\toptions: UseSplTokenOptions = {},\n): Readonly<{\n\tbalance: SplTokenBalanceResult | null;\n\terror: unknown;\n\thelper: SplTokenHelper;\n\tisFetching: boolean;\n\tisSending: boolean;\n\towner: string | null;\n\trefresh(): Promise<SplTokenBalanceResult | undefined>;\n\trefreshing: boolean;\n\tresetSend(): void;\n\tsend(config: SplTransferInput, options?: SolTransferSendOptions): Promise<SplTransferSignature>;\n\tsendError: unknown;\n\tsendSignature: SplTransferSignature | null;\n\tsendStatus: AsyncState<SplTransferSignature>['status'];\n\tstatus: 'disconnected' | 'error' | 'loading' | 'ready';\n}> {\n\tconst client = useSolanaClient();\n\tconst session = useWalletSession();\n\tconst suspense = Boolean(useQuerySuspensePreference());\n\n\tconst normalizedMint = useMemo(() => String(mint), [mint]);\n\n\tconst helperConfig = useMemo<SplTokenHelperConfig>(\n\t\t() => ({\n\t\t\tcommitment: options.commitment,\n\t\t\tmint: normalizedMint,\n\t\t\t...(options.config ?? {}),\n\t\t}),\n\t\t[normalizedMint, options.commitment, options.config],\n\t);\n\n\tconst helper = useMemo(() => client.splToken(helperConfig), [client, helperConfig]);\n\n\tconst ownerRaw = options.owner ?? session?.account.address;\n\tconst owner = useMemo(() => (ownerRaw ? String(ownerRaw) : null), [ownerRaw]);\n\n\tconst balanceKey = owner ? ['spl-balance', normalizedMint, owner, options.commitment ?? null] : null;\n\n\tconst fetchBalance = useCallback(() => {\n\t\tif (!owner) {\n\t\t\tthrow new Error('Unable to fetch SPL balance without an owner.');\n\t\t}\n\t\treturn helper.fetchBalance(owner, options.commitment);\n\t}, [helper, owner, options.commitment]);\n\n\tconst swrOptions = useMemo(\n\t\t() => ({\n\t\t\trevalidateOnFocus: options.revalidateOnFocus ?? false,\n\t\t\tsuspense,\n\t\t\t...(options.swr ?? {}),\n\t\t}),\n\t\t[options.revalidateOnFocus, options.swr, suspense],\n\t);\n\n\tconst { data, error, isLoading, isValidating, mutate } = useSWR<SplTokenBalanceResult>(\n\t\tbalanceKey,\n\t\tfetchBalance,\n\t\tswrOptions,\n\t);\n\n\tconst sessionRef = useRef(session);\n\tuseEffect(() => {\n\t\tsessionRef.current = session;\n\t}, [session]);\n\n\tconst ownerRef = useRef(owner);\n\tuseEffect(() => {\n\t\townerRef.current = owner;\n\t}, [owner]);\n\n\tconst controller = useMemo<SplTransferController>(\n\t\t() =>\n\t\t\tcreateSplTransferController({\n\t\t\t\tauthorityProvider: () => sessionRef.current ?? undefined,\n\t\t\t\thelper,\n\t\t\t\tsourceOwnerProvider: () => ownerRef.current ?? undefined,\n\t\t\t}),\n\t\t[helper],\n\t);\n\n\tconst sendState = useSyncExternalStore<AsyncState<SplTransferSignature>>(\n\t\tcontroller.subscribe,\n\t\tcontroller.getState,\n\t\tcontroller.getState,\n\t);\n\n\tconst refresh = useCallback(() => {\n\t\tif (!owner) {\n\t\t\treturn Promise.resolve(undefined);\n\t\t}\n\t\treturn mutate(() => helper.fetchBalance(owner, options.commitment), { revalidate: false });\n\t}, [helper, mutate, owner, options.commitment]);\n\n\tconst send = useCallback(\n\t\tasync (config: SplTransferInput, sendOptions?: SolTransferSendOptions) => {\n\t\t\tconst signature = await controller.send(config, sendOptions);\n\t\t\tif (owner) {\n\t\t\t\tawait mutate(() => helper.fetchBalance(owner, options.commitment), { revalidate: false });\n\t\t\t}\n\t\t\treturn signature;\n\t\t},\n\t\t[controller, helper, mutate, options.commitment, owner],\n\t);\n\n\tconst resetSend = useCallback(() => {\n\t\tcontroller.reset();\n\t}, [controller]);\n\n\tconst status: 'disconnected' | 'error' | 'loading' | 'ready' =\n\t\towner === null ? 'disconnected' : error ? 'error' : isLoading && !data ? 'loading' : 'ready';\n\n\treturn {\n\t\tbalance: data ?? null,\n\t\terror: error ?? null,\n\t\thelper,\n\t\tisFetching: Boolean(owner) && (isLoading || isValidating),\n\t\tisSending: sendState.status === 'loading',\n\t\towner,\n\t\trefresh,\n\t\trefreshing: Boolean(owner) && isValidating,\n\t\tresetSend,\n\t\tsend,\n\t\tsendError: sendState.error ?? null,\n\t\tsendSignature: sendState.data ?? null,\n\t\tsendStatus: sendState.status,\n\t\tstatus,\n\t};\n}\n\n/**\n * Subscribe to the account cache for a given address, optionally triggering fetch & watch helpers.\n *\n * @example\n * ```ts\n * const account = useAccount(pubkey, { watch: true });\n * const lamports = account?.lamports ?? null;\n * ```\n */\nexport function useAccount(addressLike?: AddressLike, options: UseAccountOptions = {}): AccountCacheEntry | undefined {\n\tconst client = useSolanaClient();\n\tconst shouldSkip = options.skip ?? !addressLike;\n\tconst address = useMemo(() => {\n\t\tif (shouldSkip || !addressLike) {\n\t\t\treturn undefined;\n\t\t}\n\t\treturn toAddress(addressLike);\n\t}, [addressLike, shouldSkip]);\n\tconst accountKey = useMemo(() => address?.toString(), [address]);\n\tconst selector = useMemo(() => createAccountSelector(accountKey), [accountKey]);\n\tconst account = useClientStore(selector);\n\n\tuseSuspenseFetcher({\n\t\tenabled: options.fetch !== false && !shouldSkip && Boolean(address),\n\t\tfetcher: () => {\n\t\t\tif (!address) {\n\t\t\t\tthrow new Error('Provide an address before fetching account data.');\n\t\t\t}\n\t\t\treturn client.actions.fetchAccount(address, options.commitment);\n\t\t},\n\t\tkey: accountKey ?? null,\n\t\tready: account !== undefined,\n\t});\n\n\tuseEffect(() => {\n\t\tif (!address) {\n\t\t\treturn;\n\t\t}\n\t\tconst commitment = options.commitment;\n\t\tif (options.fetch !== false && account === undefined) {\n\t\t\tvoid client.actions.fetchAccount(address, commitment).catch(() => undefined);\n\t\t}\n\t\tif (options.watch) {\n\t\t\tconst subscription = client.watchers.watchAccount({ address, commitment }, () => undefined);\n\t\t\treturn () => {\n\t\t\t\tsubscription.abort();\n\t\t\t};\n\t\t}\n\t\treturn undefined;\n\t}, [account, address, client, options.commitment, options.fetch, options.watch]);\n\n\treturn account;\n}\n\n/**\n * Track lamport balance for an address. Fetches immediately and watches by default.\n *\n * @example\n * ```ts\n * const { lamports, fetching } = useBalance(pubkey);\n * ```\n */\nexport function useBalance(\n\taddressLike?: AddressLike,\n\toptions: UseBalanceOptions = {},\n): Readonly<{\n\taccount?: AccountCacheEntry;\n\terror?: unknown;\n\tfetching: boolean;\n\tlamports: Lamports | null;\n\tslot: bigint | null | undefined;\n}> {\n\tconst mergedOptions = useMemo(\n\t\t() => ({\n\t\t\tcommitment: options.commitment,\n\t\t\tfetch: options.fetch ?? true,\n\t\t\tskip: options.skip,\n\t\t\twatch: options.watch ?? true,\n\t\t}),\n\t\t[options.commitment, options.fetch, options.skip, options.watch],\n\t);\n\tconst client = useSolanaClient();\n\tconst shouldSkip = mergedOptions.skip ?? !addressLike;\n\tconst address = useMemo(() => {\n\t\tif (shouldSkip || !addressLike) {\n\t\t\treturn undefined;\n\t\t}\n\t\treturn toAddress(addressLike);\n\t}, [addressLike, shouldSkip]);\n\tconst accountKey = useMemo(() => address?.toString(), [address]);\n\tconst selector = useMemo(() => createAccountSelector(accountKey), [accountKey]);\n\tconst account = useClientStore(selector);\n\n\tuseSuspenseFetcher({\n\t\tenabled: mergedOptions.fetch !== false && !shouldSkip && Boolean(address),\n\t\tfetcher: () => {\n\t\t\tif (!address) {\n\t\t\t\tthrow new Error('Provide an address before fetching balance.');\n\t\t\t}\n\t\t\treturn client.actions.fetchBalance(address, mergedOptions.commitment);\n\t\t},\n\t\tkey: accountKey ?? null,\n\t\tready: account !== undefined,\n\t});\n\n\tuseEffect(() => {\n\t\tif (!address) {\n\t\t\treturn;\n\t\t}\n\t\tconst commitment = mergedOptions.commitment;\n\t\tif (mergedOptions.fetch !== false && account === undefined) {\n\t\t\tvoid client.actions.fetchBalance(address, commitment).catch(() => undefined);\n\t\t}\n\t\tif (mergedOptions.watch) {\n\t\t\tconst watcher = client.watchers.watchBalance({ address, commitment }, () => undefined);\n\t\t\treturn () => {\n\t\t\t\twatcher.abort();\n\t\t\t};\n\t\t}\n\t\treturn undefined;\n\t}, [account, address, client, mergedOptions.commitment, mergedOptions.fetch, mergedOptions.watch]);\n\n\tconst lamports = account?.lamports ?? null;\n\tconst fetching = account?.fetching ?? false;\n\tconst slot = account?.slot;\n\tconst error = account?.error;\n\n\treturn useMemo(\n\t\t() => ({\n\t\t\taccount,\n\t\t\terror,\n\t\t\tfetching,\n\t\t\tlamports,\n\t\t\tslot,\n\t\t}),\n\t\t[account, error, fetching, lamports, slot],\n\t);\n}\n\ntype UseTransactionPoolConfig = Readonly<{\n\tinstructions?: TransactionInstructionList;\n\tlatestBlockhash?: UseLatestBlockhashParameters;\n}>;\n\ntype UseTransactionPoolPrepareOptions = TransactionPoolPrepareOptions;\n\ntype UseTransactionPoolSignOptions = TransactionPoolSignOptions;\n\ntype UseTransactionPoolSendOptions = TransactionPoolSendOptions;\n\ntype UseTransactionPoolPrepareAndSendOptions = TransactionPoolPrepareAndSendOptions;\n\ntype TransactionSignature = Signature;\n\n/**\n * Manage a mutable set of instructions and use the transaction helper to prepare/sign/send.\n *\n * @example\n * ```ts\n * const pool = useTransactionPool();\n * pool.addInstruction(ix);\n * const prepared = await pool.prepare({ feePayer });\n * await pool.send();\n * ```\n */\nexport function useTransactionPool(config: UseTransactionPoolConfig = {}): Readonly<{\n\taddInstruction(instruction: TransactionInstructionInput): void;\n\taddInstructions(instructionSet: TransactionInstructionList): void;\n\tclearInstructions(): void;\n\tinstructions: TransactionInstructionList;\n\tisPreparing: boolean;\n\tisSending: boolean;\n\tprepared: TransactionPrepared | null;\n\tprepare(options?: UseTransactionPoolPrepareOptions): Promise<TransactionPrepared>;\n\tprepareError: unknown;\n\tprepareStatus: AsyncState<TransactionPrepared>['status'];\n\tremoveInstruction(index: number): void;\n\treplaceInstructions(instructionSet: TransactionInstructionList): void;\n\treset(): void;\n\tsend(options?: UseTransactionPoolSendOptions): Promise<TransactionSignature>;\n\tsendError: unknown;\n\tsendSignature: TransactionSignature | null;\n\tsendStatus: AsyncState<TransactionSignature>['status'];\n\tprepareAndSend(\n\t\trequest?: UseTransactionPoolPrepareAndSendOptions,\n\t\tsendOptions?: TransactionSendOptions,\n\t): Promise<TransactionSignature>;\n\tsign(options?: UseTransactionPoolSignOptions): ReturnType<TransactionHelper['sign']>;\n\ttoWire(options?: UseTransactionPoolSignOptions): ReturnType<TransactionHelper['toWire']>;\n\tlatestBlockhash: UseLatestBlockhashReturnType;\n}> {\n\tconst initialInstructions = useMemo<TransactionInstructionList>(\n\t\t() => config.instructions ?? [],\n\t\t[config.instructions],\n\t);\n\tconst client = useSolanaClient();\n\tconst helper = client.helpers.transaction;\n\tconst swrRefreshInterval = config.latestBlockhash?.swr?.refreshInterval;\n\tconst blockhashRefreshInterval =\n\t\tconfig.latestBlockhash?.refreshInterval ??\n\t\t(typeof swrRefreshInterval === 'number' ? swrRefreshInterval : undefined);\n\tconst blockhashMaxAgeMs = blockhashRefreshInterval ?? 30_000;\n\tconst controller = useMemo<TransactionPoolController>(\n\t\t() =>\n\t\t\tcreateTransactionPoolController({\n\t\t\t\tblockhashMaxAgeMs,\n\t\t\t\thelper,\n\t\t\t\tinitialInstructions,\n\t\t\t}),\n\t\t[blockhashMaxAgeMs, helper, initialInstructions],\n\t);\n\tconst latestBlockhash = useLatestBlockhash(config.latestBlockhash);\n\n\tuseEffect(() => {\n\t\tconst value = latestBlockhash.data?.value;\n\t\tif (!value) {\n\t\t\tcontroller.setLatestBlockhashCache(undefined);\n\t\t\treturn;\n\t\t}\n\t\tconst cache: LatestBlockhashCache = {\n\t\t\tupdatedAt: latestBlockhash.dataUpdatedAt ?? Date.now(),\n\t\t\tvalue,\n\t\t};\n\t\tcontroller.setLatestBlockhashCache(cache);\n\t}, [controller, latestBlockhash.data, latestBlockhash.dataUpdatedAt]);\n\n\tconst instructions = useSyncExternalStore<TransactionInstructionList>(\n\t\tcontroller.subscribeInstructions,\n\t\tcontroller.getInstructions,\n\t\tcontroller.getInstructions,\n\t);\n\tconst prepared = useSyncExternalStore<TransactionPrepared | null>(\n\t\tcontroller.subscribePrepared,\n\t\tcontroller.getPrepared,\n\t\tcontroller.getPrepared,\n\t);\n\tconst prepareState = useSyncExternalStore<AsyncState<TransactionPrepared>>(\n\t\tcontroller.subscribePrepareState,\n\t\tcontroller.getPrepareState,\n\t\tcontroller.getPrepareState,\n\t);\n\tconst sendState = useSyncExternalStore<AsyncState<TransactionSignature>>(\n\t\tcontroller.subscribeSendState,\n\t\tcontroller.getSendState,\n\t\tcontroller.getSendState,\n\t);\n\n\treturn {\n\t\taddInstruction: controller.addInstruction,\n\t\taddInstructions: controller.addInstructions,\n\t\tclearInstructions: controller.clearInstructions,\n\t\tinstructions,\n\t\tisPreparing: prepareState.status === 'loading',\n\t\tisSending: sendState.status === 'loading',\n\t\tprepared,\n\t\tprepare: controller.prepare,\n\t\tprepareError: prepareState.error ?? null,\n\t\tprepareStatus: prepareState.status,\n\t\tremoveInstruction: controller.removeInstruction,\n\t\treplaceInstructions: controller.replaceInstructions,\n\t\treset: controller.reset,\n\t\tsend: controller.send,\n\t\tsendError: sendState.error ?? null,\n\t\tsendSignature: sendState.data ?? null,\n\t\tsendStatus: sendState.status,\n\t\tprepareAndSend: controller.prepareAndSend,\n\t\tsign: controller.sign,\n\t\ttoWire: controller.toWire,\n\t\tlatestBlockhash,\n\t};\n}\n\ntype SendTransactionSignature = Signature;\n\ntype UseSendTransactionResult = Readonly<{\n\terror: unknown;\n\tisSending: boolean;\n\treset(): void;\n\tsend(\n\t\trequest: TransactionPrepareAndSendRequest,\n\t\toptions?: TransactionSendOptions,\n\t): Promise<SendTransactionSignature>;\n\tsendPrepared(prepared: TransactionPrepared, options?: TransactionSendOptions): Promise<SendTransactionSignature>;\n\tsignature: SendTransactionSignature | null;\n\tstatus: AsyncState<SendTransactionSignature>['status'];\n}>;\n\n/**\n * General-purpose helper that prepares and sends arbitrary transactions through {@link TransactionHelper}.\n *\n * @example\n * ```ts\n * const { send, status } = useSendTransaction();\n * await send({ instructions: [ix], feePayer });\n * ```\n */\nexport function useSendTransaction(): UseSendTransactionResult {\n\tconst client = useSolanaClient();\n\tconst helper = client.transaction;\n\tconst session = useWalletSession();\n\tconst [state, setState] = useState<AsyncState<SendTransactionSignature>>(() =>\n\t\tcreateInitialAsyncState<SendTransactionSignature>(),\n\t);\n\n\tconst execute = useCallback(\n\t\tasync (operation: () => Promise<SendTransactionSignature>): Promise<SendTransactionSignature> => {\n\t\t\tsetState(createAsyncState<SendTransactionSignature>('loading'));\n\t\t\ttry {\n\t\t\t\tconst signature = await operation();\n\t\t\t\tsetState(createAsyncState<SendTransactionSignature>('success', { data: signature }));\n\t\t\t\treturn signature;\n\t\t\t} catch (error) {\n\t\t\t\tsetState(createAsyncState<SendTransactionSignature>('error', { error }));\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t},\n\t\t[],\n\t);\n\n\tconst ensureAuthority = useCallback(\n\t\t(request: TransactionPrepareAndSendRequest): TransactionPrepareAndSendRequest => {\n\t\t\tif (request.authority) {\n\t\t\t\treturn request;\n\t\t\t}\n\t\t\tif (!session) {\n\t\t\t\tthrow new Error('Connect a wallet or supply an `authority` before sending transactions.');\n\t\t\t}\n\t\t\treturn { ...request, authority: session };\n\t\t},\n\t\t[session],\n\t);\n\n\tconst send = useCallback(\n\t\tasync (request: TransactionPrepareAndSendRequest, options?: TransactionSendOptions) => {\n\t\t\tconst normalizedRequest = ensureAuthority(request);\n\t\t\treturn execute(() => helper.prepareAndSend(normalizedRequest, options));\n\t\t},\n\t\t[ensureAuthority, execute, helper],\n\t);\n\n\tconst sendPrepared = useCallback(\n\t\tasync (prepared: TransactionPrepared, options?: TransactionSendOptions) =>\n\t\t\texecute(() => helper.send(prepared, options)),\n\t\t[execute, helper],\n\t);\n\n\tconst reset = useCallback(() => {\n\t\tsetState(createInitialAsyncState<SendTransactionSignature>());\n\t}, []);\n\n\treturn {\n\t\terror: state.error ?? null,\n\t\tisSending: state.status === 'loading',\n\t\treset,\n\t\tsend,\n\t\tsendPrepared,\n\t\tsignature: state.data ?? null,\n\t\tstatus: state.status,\n\t};\n}\n\nexport type UseSignatureStatusOptions = Readonly<{\n\tconfig?: SignatureStatusConfig;\n\tdisabled?: boolean;\n\tswr?: UseSolanaRpcQueryOptions<SignatureStatusValue | null>['swr'];\n}>;\n\nexport type UseSignatureStatusParameters = UseSignatureStatusOptions &\n\tReadonly<{\n\t\tsignature?: SignatureLike;\n\t}>;\n\ntype SignatureStatusState = SolanaQueryResult<SignatureStatusValue | null> &\n\tReadonly<{\n\t\tconfirmationStatus: ConfirmationCommitment | null;\n\t\tsignatureStatus: SignatureStatusValue | null;\n\t}>;\n\n/**\n * Fetch the RPC status for a transaction signature.\n *\n * @example\n * ```ts\n * const { signatureStatus, confirmationStatus } = useSignatureStatus(sig);\n * ```\n */\nexport function useSignatureStatus(\n\tsignatureInput?: SignatureLike,\n\toptions: UseSignatureStatusOptions = {},\n): SignatureStatusState {\n\tconst { config, disabled: disabledOption, swr } = options;\n\tconst signature = useMemo(() => normalizeSignature(signatureInput), [signatureInput]);\n\tconst signatureKey = signature?.toString() ?? null;\n\tconst fetcher = useCallback(\n\t\tasync (client: SolanaClient) => {\n\t\t\tif (!signatureKey) {\n\t\t\t\tthrow new Error('Provide a signature before querying its status.');\n\t\t\t}\n\t\t\tif (!signature) {\n\t\t\t\tthrow new Error('Provide a signature before querying its status.');\n\t\t\t}\n\t\t\tconst plan = client.runtime.rpc.getSignatureStatuses([signature], config);\n\t\t\tconst response = await plan.send({ abortSignal: AbortSignal.timeout(SIGNATURE_STATUS_TIMEOUT_MS) });\n\t\t\treturn response.value[0] ?? null;\n\t\t},\n\t\t[config, signature, signatureKey],\n\t);\n\tconst disabled = disabledOption ?? !signatureKey;\n\tconst query = useSolanaRpcQuery<SignatureStatusValue | null>(\n\t\t'signatureStatus',\n\t\tgetSignatureStatusKey({ signature: signatureInput, config }),\n\t\tfetcher,\n\t\t{\n\t\t\tdisabled,\n\t\t\tswr,\n\t\t},\n\t);\n\tconst confirmationStatus = deriveConfirmationStatus(query.data ?? null);\n\treturn {\n\t\t...query,\n\t\tconfirmationStatus,\n\t\tsignatureStatus: query.data ?? null,\n\t};\n}\n\nexport type SignatureWaitStatus = 'error' | 'idle' | 'success' | 'waiting';\n\nexport type UseWaitForSignatureOptions = Omit<UseSignatureStatusOptions, 'disabled'> &\n\tReadonly<{\n\t\tcommitment?: ConfirmationCommitment;\n\t\tdisabled?: boolean;\n\t\tsubscribe?: boolean;\n\t\twatchCommitment?: ConfirmationCommitment;\n\t}>;\n\ntype WaitForSignatureState = SignatureStatusState &\n\tReadonly<{\n\t\tisError: boolean;\n\t\tisSuccess: boolean;\n\t\tisWaiting: boolean;\n\t\twaitError: unknown;\n\t\twaitStatus: SignatureWaitStatus;\n\t}>;\n\n/**\n * Poll signature status until the desired commitment (or subscription notification) is reached.\n *\n * @example\n * ```ts\n * const { waitStatus, confirmationStatus } = useWaitForSignature(sig, { commitment: 'finalized' });\n * ```\n */\nexport function useWaitForSignature(\n\tsignatureInput?: SignatureLike,\n\toptions: UseWaitForSignatureOptions = {},\n): WaitForSignatureState {\n\tconst {\n\t\tcommitment = 'confirmed',\n\t\tdisabled: disabledOption,\n\t\tsubscribe = true,\n\t\twatchCommitment,\n\t\t...signatureStatusOptions\n\t} = options;\n\tconst { swr, ...restStatusOptions } = signatureStatusOptions;\n\tconst subscribeCommitment = watchCommitment ?? commitment;\n\tconst client = useSolanaClient();\n\tconst normalizedSignature = useMemo(() => normalizeSignature(signatureInput), [signatureInput]);\n\tconst disabled = disabledOption ?? !normalizedSignature;\n\tconst statusQuery = useSignatureStatus(signatureInput, {\n\t\t...restStatusOptions,\n\t\tswr: {\n\t\t\trefreshInterval: 2_000,\n\t\t\t...swr,\n\t\t},\n\t\tdisabled,\n\t});\n\tconst [subscriptionSettled, setSubscriptionSettled] = useState(false);\n\n\tuseEffect(() => {\n\t\tif (normalizedSignature === undefined) {\n\t\t\tsetSubscriptionSettled(false);\n\t\t\treturn;\n\t\t}\n\t\tsetSubscriptionSettled(false);\n\t}, [normalizedSignature]);\n\n\tuseEffect(() => {\n\t\tif (!normalizedSignature || disabled || !subscribe) {\n\t\t\treturn;\n\t\t}\n\t\tconst subscription = client.watchers.watchSignature(\n\t\t\t{\n\t\t\t\tcommitment: subscribeCommitment,\n\t\t\t\tenableReceivedNotification: true,\n\t\t\t\tsignature: normalizedSignature,\n\t\t\t},\n\t\t\t() => {\n\t\t\t\tsetSubscriptionSettled(true);\n\t\t\t},\n\t\t);\n\t\treturn () => {\n\t\t\tsubscription.abort();\n\t\t};\n\t}, [client, disabled, normalizedSignature, subscribe, subscribeCommitment]);\n\n\tconst hasSignature = Boolean(normalizedSignature) && !disabled;\n\tconst signatureError = statusQuery.signatureStatus?.err ?? null;\n\tconst waitError = statusQuery.error ?? signatureError ?? null;\n\tconst meetsCommitment = confirmationMeetsCommitment(statusQuery.confirmationStatus, commitment);\n\tconst settled = subscriptionSettled || meetsCommitment;\n\n\tlet waitStatus: SignatureWaitStatus = 'idle';\n\tif (!hasSignature) {\n\t\twaitStatus = 'idle';\n\t} else if (waitError) {\n\t\twaitStatus = 'error';\n\t} else if (settled) {\n\t\twaitStatus = 'success';\n\t} else {\n\t\twaitStatus = 'waiting';\n\t}\n\n\treturn {\n\t\t...statusQuery,\n\t\tisError: waitStatus === 'error',\n\t\tisSuccess: waitStatus === 'success',\n\t\tisWaiting: waitStatus === 'waiting',\n\t\twaitError,\n\t\twaitStatus,\n\t};\n}\n\ntype UseLookupTableOptions = Readonly<{\n\tcommitment?: Commitment;\n\tswr?: Omit<SWRConfiguration<AddressLookupTableData, unknown, BareFetcher<AddressLookupTableData>>, 'suspense'>;\n}>;\n\n/**\n * Fetch an address lookup table.\n *\n * @example\n * ```ts\n * const { data, isLoading, error } = useLookupTable(lutAddress);\n * ```\n */\nexport function useLookupTable(\n\taddressLike?: AddressLike,\n\toptions: UseLookupTableOptions = {},\n): SolanaQueryResult<AddressLookupTableData> {\n\tconst addr = useMemo(() => (addressLike ? toAddress(addressLike) : undefined), [addressLike]);\n\tconst key = addr?.toString() ?? null;\n\tconst fetcher = useCallback(\n\t\tasync (c: SolanaClient) => {\n\t\t\tif (!addr) throw new Error('Address required');\n\t\t\treturn c.actions.fetchLookupTable(addr, options.commitment);\n\t\t},\n\t\t[addr, options.commitment],\n\t);\n\treturn useSolanaRpcQuery<AddressLookupTableData>('lookupTable', [key, options.commitment], fetcher, {\n\t\tdisabled: !addr,\n\t\tswr: options.swr,\n\t});\n}\n\ntype UseNonceAccountOptions = Readonly<{\n\tcommitment?: Commitment;\n\tswr?: Omit<SWRConfiguration<NonceAccountData, unknown, BareFetcher<NonceAccountData>>, 'suspense'>;\n}>;\n\n/**\n * Fetch a nonce account.\n *\n * @example\n * ```ts\n * const { data, isLoading, error } = useNonceAccount(nonceAddress);\n * ```\n */\nexport function useNonceAccount(\n\taddressLike?: AddressLike,\n\toptions: UseNonceAccountOptions = {},\n): SolanaQueryResult<NonceAccountData> {\n\tconst addr = useMemo(() => (addressLike ? toAddress(addressLike) : undefined), [addressLike]);\n\tconst key = addr?.toString() ?? null;\n\tconst fetcher = useCallback(\n\t\tasync (c: SolanaClient) => {\n\t\t\tif (!addr) throw new Error('Address required');\n\t\t\treturn c.actions.fetchNonceAccount(addr, options.commitment);\n\t\t},\n\t\t[addr, options.commitment],\n\t);\n\treturn useSolanaRpcQuery<NonceAccountData>('nonceAccount', [key, options.commitment], fetcher, {\n\t\tdisabled: !addr,\n\t\tswr: options.swr,\n\t});\n}\n\n// Public hook type aliases for consistency\nexport type UseAccountParameters = Readonly<{ address?: AddressLike; options?: UseAccountOptions }>;\nexport type UseAccountReturnType = ReturnType<typeof useAccount>;\n\nexport type UseBalanceParameters = Readonly<{ address?: AddressLike; options?: UseBalanceOptions }>;\nexport type UseBalanceReturnType = ReturnType<typeof useBalance>;\n\nexport type UseClusterStateParameters = undefined;\nexport type UseClusterStateReturnType = ReturnType<typeof useClusterState>;\n\nexport type UseClusterStatusParameters = undefined;\nexport type UseClusterStatusReturnType = ReturnType<typeof useClusterStatus>;\n\nexport type UseConnectWalletParameters = undefined;\nexport type UseConnectWalletReturnType = ReturnType<typeof useConnectWallet>;\n\nexport type UseDisconnectWalletParameters = undefined;\nexport type UseDisconnectWalletReturnType = ReturnType<typeof useDisconnectWallet>;\n\nexport type UseSendTransactionParameters = undefined;\nexport type UseSendTransactionReturnType = ReturnType<typeof useSendTransaction>;\n\nexport type UseSignatureStatusReturnType = SignatureStatusState;\n\nexport type UseWaitForSignatureParameters = Readonly<{\n\toptions?: UseWaitForSignatureOptions;\n\tsignature?: SignatureLike;\n}>;\n\nexport type UseWaitForSignatureReturnType = WaitForSignatureState;\n\nexport type UseSolTransferParameters = undefined;\nexport type UseSolTransferReturnType = ReturnType<typeof useSolTransfer>;\nexport type UseSplTokenParameters = Readonly<{ mint: AddressLike; options?: UseSplTokenOptions }>;\nexport type UseSplTokenReturnType = ReturnType<typeof useSplToken>;\n\nexport type UseTransactionPoolParameters = Readonly<{ config?: UseTransactionPoolConfig }>;\nexport type UseTransactionPoolReturnType = ReturnType<typeof useTransactionPool>;\n\nexport type UseWalletParameters = undefined;\nexport type UseWalletReturnType = ReturnType<typeof useWallet>;\n\nexport type UseWalletSessionParameters = undefined;\nexport type UseWalletSessionReturnType = ReturnType<typeof useWalletSession>;\n\nexport type UseWalletActionsParameters = undefined;\nexport type UseWalletActionsReturnType = ReturnType<typeof useWalletActions>;\n\nexport type UseLookupTableParameters = Readonly<{ address?: AddressLike; options?: UseLookupTableOptions }>;\nexport type UseLookupTableReturnType = ReturnType<typeof useLookupTable>;\n\nexport type UseNonceAccountParameters = Readonly<{ address?: AddressLike; options?: UseNonceAccountOptions }>;\nexport type UseNonceAccountReturnType = ReturnType<typeof useNonceAccount>;\n","'use client';\n\nimport type { JSX, ReactNode } from 'react';\nimport { useMemo, useRef } from 'react';\nimport { type Cache, SWRConfig, type SWRConfiguration } from 'swr';\n\nimport { QuerySuspenseContext } from './querySuspenseContext';\nimport { useClientStore } from './useClientStore';\n\nconst createCache = (): Cache => new Map<string, unknown>() as Cache;\n\nconst DEFAULT_QUERY_CONFIG: SWRConfiguration = Object.freeze({\n\tdedupingInterval: 2_000,\n\tfocusThrottleInterval: 5_000,\n\tprovider: () => createCache(),\n\trevalidateIfStale: true,\n\trevalidateOnFocus: true,\n\trevalidateOnReconnect: true,\n});\n\ntype SolanaQueryProviderProps = Readonly<{\n\tchildren: ReactNode;\n\tconfig?: SWRConfiguration;\n\tresetOnClusterChange?: boolean;\n\tsuspense?: boolean;\n}>;\n\nexport function SolanaQueryProvider({\n\tchildren,\n\tconfig,\n\tresetOnClusterChange = true,\n\tsuspense,\n}: SolanaQueryProviderProps): JSX.Element {\n\tconst cluster = useClientStore((state) => state.cluster);\n\tconst cacheRegistryRef = useRef<Map<string, Cache>>(new Map());\n\tconst cacheKey = resetOnClusterChange ? `${cluster.endpoint}|${cluster.commitment}` : 'global';\n\tconst cache = useMemo<Cache>(() => {\n\t\tconst registry = cacheRegistryRef.current;\n\t\tif (!resetOnClusterChange) {\n\t\t\tconst existing = registry.get('global');\n\t\t\tif (existing) {\n\t\t\t\treturn existing;\n\t\t\t}\n\t\t\tconst next = createCache();\n\t\t\tregistry.set('global', next);\n\t\t\treturn next;\n\t\t}\n\t\tconst next = createCache();\n\t\tregistry.set(cacheKey, next);\n\t\treturn next;\n\t}, [cacheKey, resetOnClusterChange]);\n\n\tconst value = useMemo<SWRConfiguration>(() => {\n\t\tconst base = {\n\t\t\t...DEFAULT_QUERY_CONFIG,\n\t\t\t...config,\n\t\t};\n\t\tif (!config?.provider) {\n\t\t\tbase.provider = () => cache;\n\t\t}\n\t\tif (base.suspense === undefined && suspense !== undefined) {\n\t\t\tbase.suspense = suspense;\n\t\t}\n\t\treturn base;\n\t}, [cache, config, suspense]);\n\n\treturn (\n\t\t<QuerySuspenseContext.Provider value={suspense}>\n\t\t\t<SWRConfig value={value}>{children}</SWRConfig>\n\t\t</QuerySuspenseContext.Provider>\n\t);\n}\n","'use client';\n\nimport type {\n\tCreateDefaultClientOptions,\n\tSerializableSolanaState,\n\tSolanaClient,\n\tSolanaClientConfig,\n} from '@solana/client';\nimport {\n\tdeserializeSolanaState,\n\tresolveClientConfig,\n\tserializeSolanaState,\n\tsubscribeSolanaState,\n} from '@solana/client';\nimport type { ReactNode } from 'react';\nimport { useEffect, useRef, useState } from 'react';\nimport type { SWRConfiguration } from 'swr';\n\nimport { SolanaClientProvider, useSolanaClient } from './context';\nimport { useConnectWallet, useWallet } from './hooks';\nimport { SolanaQueryProvider } from './QueryProvider';\n\ntype QueryLayerConfig = Readonly<{\n\tconfig?: SWRConfiguration;\n\tresetOnClusterChange?: boolean;\n\tsuspense?: boolean;\n\tdisabled?: boolean;\n}>;\n\ntype StorageAdapter = Readonly<{\n\tgetItem(key: string): string | null;\n\tremoveItem(key: string): void;\n\tsetItem(key: string, value: string): void;\n}>;\n\ntype WalletPersistenceConfig = Readonly<{\n\tautoConnect?: boolean;\n\tstorage?: StorageAdapter | null;\n\tstorageKey?: string;\n}>;\n\ntype PersistedSerializableState = Readonly<{\n\tlegacyConnectorId: string | null;\n\tstate: SerializableSolanaState | null;\n}>;\n\ntype SolanaProviderProps = Readonly<{\n\tchildren: ReactNode;\n\tclient?: SolanaClient;\n\tconfig?: SolanaClientConfig | CreateDefaultClientOptions;\n\tquery?: QueryLayerConfig | false;\n\twalletPersistence?: WalletPersistenceConfig | false;\n}>;\n\n/**\n * Convenience provider that composes {@link SolanaClientProvider} with {@link SolanaQueryProvider}.\n *\n * Useful when you want one drop-in wrapper that handles client setup plus SWR configuration without\n * introducing any additional contexts.\n */\nexport function SolanaProvider({ children, client, config, query, walletPersistence }: SolanaProviderProps) {\n\tconst shouldIncludeQueryLayer = query !== false && query?.disabled !== true;\n\tconst queryProps: QueryLayerConfig = shouldIncludeQueryLayer && query ? query : {};\n\tconst persistenceConfig = walletPersistence === false ? undefined : (walletPersistence ?? {});\n\tconst storage = persistenceConfig ? (persistenceConfig.storage ?? getDefaultStorage()) : null;\n\tconst storageKey = persistenceConfig?.storageKey ?? DEFAULT_STORAGE_KEY;\n\tconst persistedState = persistenceConfig\n\t\t? readPersistedState(storage, storageKey)\n\t\t: { legacyConnectorId: null, state: null };\n\tconst normalizedConfig = config ? resolveClientConfig(config) : resolveClientConfig();\n\tconst clientConfig = persistenceConfig\n\t\t? { ...normalizedConfig, initialState: normalizedConfig.initialState ?? persistedState.state ?? undefined }\n\t\t: normalizedConfig;\n\n\tconst content = shouldIncludeQueryLayer ? (\n\t\t<SolanaQueryProvider\n\t\t\tconfig={queryProps.config}\n\t\t\tresetOnClusterChange={queryProps.resetOnClusterChange}\n\t\t\tsuspense={queryProps.suspense}\n\t\t>\n\t\t\t{children}\n\t\t</SolanaQueryProvider>\n\t) : (\n\t\tchildren\n\t);\n\n\treturn (\n\t\t<SolanaClientProvider client={client} config={clientConfig}>\n\t\t\t{persistenceConfig ? (\n\t\t\t\t<WalletPersistence\n\t\t\t\t\tautoConnect={persistenceConfig.autoConnect}\n\t\t\t\t\tinitialState={clientConfig?.initialState ?? persistedState.state}\n\t\t\t\t\tlegacyConnectorId={persistedState.legacyConnectorId}\n\t\t\t\t\tstorage={storage}\n\t\t\t\t\tstorageKey={storageKey}\n\t\t\t\t/>\n\t\t\t) : null}\n\t\t\t{content}\n\t\t</SolanaClientProvider>\n\t);\n}\n\nconst DEFAULT_STORAGE_KEY = 'solana:last-connector';\n\nfunction readPersistedState(storage: StorageAdapter | null, storageKey: string): PersistedSerializableState {\n\tif (!storage) {\n\t\treturn { legacyConnectorId: null, state: null };\n\t}\n\tconst raw = safelyRead(() => storage.getItem(storageKey));\n\tif (!raw) {\n\t\treturn { legacyConnectorId: null, state: null };\n\t}\n\tconst parsed = deserializeSolanaState(raw);\n\tif (parsed) {\n\t\treturn { legacyConnectorId: null, state: parsed };\n\t}\n\treturn { legacyConnectorId: raw, state: null };\n}\n\ntype WalletPersistenceProps = WalletPersistenceConfig &\n\tReadonly<{\n\t\tinitialState?: SerializableSolanaState | null;\n\t\tlegacyConnectorId?: string | null;\n\t}>;\n\nfunction WalletPersistence({\n\tautoConnect = true,\n\tinitialState = null,\n\tlegacyConnectorId = null,\n\tstorage,\n\tstorageKey = DEFAULT_STORAGE_KEY,\n}: WalletPersistenceProps) {\n\tconst wallet = useWallet();\n\tconst connectWallet = useConnectWallet();\n\tconst client = useSolanaClient();\n\tconst storageRef = useRef<StorageAdapter | null>(storage ?? getDefaultStorage());\n\tconst [hasAttemptedAutoConnect, setHasAttemptedAutoConnect] = useState(false);\n\tconst clientRef = useRef<SolanaClient | null>(null);\n\tconst persistedStateRef = useRef<SerializableSolanaState | null>(initialState);\n\tconst legacyConnectorIdRef = useRef<string | null>(legacyConnectorId);\n\n\tuseEffect(() => {\n\t\tstorageRef.current = storage ?? getDefaultStorage();\n\t}, [storage]);\n\n\tuseEffect(() => {\n\t\tif (clientRef.current !== client) {\n\t\t\tclientRef.current = client;\n\t\t\tsetHasAttemptedAutoConnect(false);\n\t\t}\n\t}, [client]);\n\n\tuseEffect(() => {\n\t\tconst activeStorage = storageRef.current;\n\t\tif (!activeStorage) return;\n\t\tconst unsubscribe = subscribeSolanaState(client, (state) => {\n\t\t\tpersistedStateRef.current = state;\n\t\t\tlegacyConnectorIdRef.current = null;\n\t\t\tsafelyWrite(() => activeStorage.setItem(storageKey, serializeSolanaState(state)));\n\t\t});\n\t\treturn () => {\n\t\t\tunsubscribe();\n\t\t};\n\t}, [client, storageKey]);\n\n\tuseEffect(() => {\n\t\tpersistedStateRef.current = initialState ?? persistedStateRef.current;\n\t\tlegacyConnectorIdRef.current = legacyConnectorId;\n\t}, [initialState, legacyConnectorId]);\n\n\tuseEffect(() => {\n\t\tconst persisted = persistedStateRef.current ?? initialState;\n\t\tconst persistedAutoConnect = persisted?.autoconnect ?? false;\n\t\tconst autoConnectEnabled = persistedAutoConnect || autoConnect;\n\t\tif (!autoConnectEnabled || hasAttemptedAutoConnect) {\n\t\t\treturn;\n\t\t}\n\t\tif (wallet.status === 'connected' || wallet.status === 'connecting') {\n\t\t\tsetHasAttemptedAutoConnect(true);\n\t\t\treturn;\n\t\t}\n\t\tconst connectorId = persisted?.lastConnectorId ?? legacyConnectorIdRef.current;\n\t\tconst shouldAutoConnect = autoConnectEnabled && connectorId;\n\t\tif (!shouldAutoConnect || !connectorId) return;\n\t\tconst connector = client.connectors.get(connectorId);\n\t\tif (!connector) return;\n\n\t\tvoid (async () => {\n\t\t\ttry {\n\t\t\t\tawait connectWallet(connectorId, { autoConnect: true, allowInteractiveFallback: false });\n\t\t\t} catch {\n\t\t\t\t// Ignore auto-connect failures; consumers can handle manual retries via hooks.\n\t\t\t} finally {\n\t\t\t\tsetHasAttemptedAutoConnect(true);\n\t\t\t}\n\t\t})();\n\t}, [autoConnect, client, connectWallet, hasAttemptedAutoConnect, initialState, wallet.status]);\n\n\treturn null;\n}\n\nfunction safelyRead(reader: () => string | null): string | null {\n\ttry {\n\t\treturn reader();\n\t} catch {\n\t\treturn null;\n\t}\n}\n\nfunction safelyWrite(writer: () => void) {\n\ttry {\n\t\twriter();\n\t} catch {\n\t\t// Ignore write failures (private browsing, SSR, etc.).\n\t}\n}\n\nfunction getDefaultStorage(): StorageAdapter | null {\n\tif (typeof globalThis !== 'object' || globalThis === null) {\n\t\treturn null;\n\t}\n\tconst candidate = (globalThis as Record<string, unknown>).localStorage as StorageAdapter | undefined;\n\tif (!candidate) {\n\t\treturn null;\n\t}\n\treturn candidate;\n}\n","import type { WalletConnector, WalletSession, WalletStatus } from '@solana/client';\nimport type { ReactNode } from 'react';\nimport { useCallback, useEffect, useMemo, useState } from 'react';\n\nimport { useSolanaClient } from './context';\nimport { useConnectWallet, useDisconnectWallet, useWallet } from './hooks';\n\ntype WalletConnectionState = Readonly<{\n\tconnect(\n\t\tconnectorId: string,\n\t\toptions?: Readonly<{ autoConnect?: boolean; allowInteractiveFallback?: boolean }>,\n\t): Promise<void>;\n\tconnected: boolean;\n\tconnecting: boolean;\n\tconnectors: readonly WalletConnector[];\n\tcurrentConnector?: WalletConnector;\n\tconnectorId?: string;\n\tdisconnect(): Promise<void>;\n\terror: unknown;\n\tstatus: WalletStatus['status'];\n\twallet: WalletSession | undefined;\n}>;\n\ntype WalletConnectionOptions = Readonly<{\n\tconnectors?: readonly WalletConnector[];\n}>;\n\nexport type UseWalletConnectionParameters = WalletConnectionOptions;\nexport type UseWalletConnectionReturnType = WalletConnectionState;\n\n/**\n * Collect everything needed to build wallet connection UIs into a single hook.\n *\n * @example\n * ```tsx\n * const { connectors, connect, disconnect, status } = useWalletConnection();\n * return connectors.map((c) => (\n * <button key={c.id} onClick={() => connect(c.id)} disabled={status === 'connecting'}>\n * {c.name}\n * </button>\n * ));\n * ```\n */\nexport function useWalletConnection(options: WalletConnectionOptions = {}): WalletConnectionState {\n\tconst wallet = useWallet();\n\tconst connectWallet = useConnectWallet();\n\tconst disconnectWallet = useDisconnectWallet();\n\tconst client = useSolanaClient();\n\tconst [isHydrated, setIsHydrated] = useState(false);\n\tuseEffect(() => {\n\t\tsetIsHydrated(true);\n\t}, []);\n\tconst connectors = isHydrated ? (options.connectors ?? client.connectors.all) : [];\n\tconst connect = useCallback(\n\t\t(\n\t\t\tconnectorId: string,\n\t\t\tconnectOptions?: Readonly<{ autoConnect?: boolean; allowInteractiveFallback?: boolean }>,\n\t\t) => connectWallet(connectorId, connectOptions),\n\t\t[connectWallet],\n\t);\n\tconst disconnect = useCallback(() => disconnectWallet(), [disconnectWallet]);\n\n\tconst state = useMemo<WalletConnectionState>(() => {\n\t\tconst connectorId = 'connectorId' in wallet ? wallet.connectorId : undefined;\n\t\tconst currentConnector = connectorId ? connectors.find((connector) => connector.id === connectorId) : undefined;\n\t\tconst session: WalletSession | undefined = wallet.status === 'connected' ? wallet.session : undefined;\n\t\tconst error = wallet.status === 'error' ? (wallet.error ?? null) : null;\n\n\t\treturn {\n\t\t\tconnect,\n\t\t\tconnected: wallet.status === 'connected',\n\t\t\tconnecting: wallet.status === 'connecting',\n\t\t\tconnectors,\n\t\t\tconnectorId,\n\t\t\tcurrentConnector,\n\t\t\tdisconnect,\n\t\t\terror,\n\t\t\tstatus: wallet.status,\n\t\t\twallet: session,\n\t\t};\n\t}, [connect, connectors, disconnect, wallet]);\n\n\treturn state;\n}\n\ntype WalletConnectionManagerProps = Readonly<{\n\tchildren: (state: WalletConnectionState) => ReactNode;\n\tconnectors?: readonly WalletConnector[];\n}>;\n\n/**\n * Render-prop helper that lets you easily wire wallet status into custom UIs.\n *\n * @example\n * ```tsx\n * <WalletConnectionManager>\n * {({ connectors, connect }) => connectors.map((c) => (\n * <button key={c.id} onClick={() => connect(c.id)}>{c.name}</button>\n * ))}\n * </WalletConnectionManager>\n * ```\n */\nexport function WalletConnectionManager({ children, connectors }: WalletConnectionManagerProps) {\n\tconst state = useWalletConnection({ connectors });\n\treturn <>{children(state)}</>;\n}\n\ntype WalletModalStateOptions = WalletConnectionOptions &\n\tReadonly<{\n\t\tcloseOnConnect?: boolean;\n\t\tinitialOpen?: boolean;\n\t}>;\n\nexport type WalletModalState = WalletConnectionState &\n\tReadonly<{\n\t\tclose(): void;\n\t\tisOpen: boolean;\n\t\topen(): void;\n\t\tselectedConnector: string | null;\n\t\tselect(connectorId: string | null): void;\n\t\ttoggle(): void;\n\t}>;\n\nexport type UseWalletModalStateParameters = WalletModalStateOptions;\nexport type UseWalletModalStateReturnType = WalletModalState;\n\n/**\n * Small state machine for wallet selection modals – keeps track of modal visibility and the currently\n * highlighted connector while reusing the connection state returned by {@link useWalletConnection}.\n *\n * @example\n * ```tsx\n * const modal = useWalletModalState();\n * return (\n * <>\n * <button onClick={modal.toggle}>Connect</button>\n * {modal.isOpen && modal.connectors.map((c) => (\n * <button key={c.id} onClick={() => modal.connect(c.id)}>{c.name}</button>\n * ))}\n * </>\n * );\n * ```\n */\nexport function useWalletModalState(options: WalletModalStateOptions = {}): WalletModalState {\n\tconst connection = useWalletConnection(options);\n\tconst [isOpen, setIsOpen] = useState(options.initialOpen ?? false);\n\tconst [selectedConnector, setSelectedConnector] = useState<string | null>(null);\n\tconst closeOnConnect = options.closeOnConnect ?? true;\n\n\tconst open = useCallback(() => setIsOpen(true), []);\n\tconst close = useCallback(() => setIsOpen(false), []);\n\tconst toggle = useCallback(() => setIsOpen((value) => !value), []);\n\tconst select = useCallback((connectorId: string | null) => setSelectedConnector(connectorId), []);\n\n\tconst connect = useCallback(\n\t\tasync (connectorId: string, connectOptions?: Readonly<{ autoConnect?: boolean }>) => {\n\t\t\tawait connection.connect(connectorId, connectOptions);\n\t\t\tsetSelectedConnector(connectorId);\n\t\t\tif (closeOnConnect) {\n\t\t\t\tsetIsOpen(false);\n\t\t\t}\n\t\t},\n\t\t[closeOnConnect, connection],\n\t);\n\n\treturn {\n\t\t...connection,\n\t\tclose,\n\t\tconnect,\n\t\tisOpen,\n\t\topen,\n\t\tselectedConnector,\n\t\tselect,\n\t\ttoggle,\n\t};\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/context.tsx","../src/querySuspenseContext.ts","../src/useClientStore.ts","../src/query.ts","../src/queryKeys.ts","../src/queryHooks.ts","../src/hooks.ts","../src/QueryProvider.tsx","../src/SolanaProvider.tsx","../src/ui.tsx"],"names":["createContext","useContext","useMemo","useEffect","useCallback","toAddress","getBase64EncodedWireTransaction","useSWR","useState","useRef","next","jsx","resolveClientConfig"],"mappings":"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","file":"index.node.mjs","sourcesContent":["import {\n\ttype CreateDefaultClientOptions,\n\tcreateClient,\n\tresolveClientConfig,\n\ttype SolanaClient,\n\ttype SolanaClientConfig,\n} from '@solana/client';\nimport type { ReactNode } from 'react';\nimport { createContext, useContext, useEffect, useMemo } from 'react';\n\nconst SolanaClientContext = createContext<SolanaClient | null>(null);\n\ntype ProviderProps = Readonly<{\n\tchildren: ReactNode;\n\tclient?: SolanaClient;\n\tconfig?: SolanaClientConfig | CreateDefaultClientOptions;\n}>;\n\nfunction normalizeConfig(config?: SolanaClientConfig | CreateDefaultClientOptions): SolanaClientConfig {\n\treturn resolveClientConfig(config ?? {});\n}\n\n/**\n * Provides a {@link SolanaClient} instance to descendant components.\n *\n * Supply either an existing `client` or a configuration object used to lazily\n * construct an instance via {@link createClient}.\n */\nexport function SolanaClientProvider({ children, client: providedClient, config }: ProviderProps) {\n\tconst normalizedConfig = useMemo(() => normalizeConfig(config), [config]);\n\tconst client = useMemo(() => {\n\t\tif (providedClient) {\n\t\t\treturn providedClient;\n\t\t}\n\t\treturn createClient(normalizedConfig);\n\t}, [normalizedConfig, providedClient]);\n\n\tuseEffect(() => {\n\t\tif (providedClient) {\n\t\t\treturn;\n\t\t}\n\t\treturn () => {\n\t\t\tclient.destroy();\n\t\t};\n\t}, [client, providedClient]);\n\n\treturn <SolanaClientContext.Provider value={client}>{children}</SolanaClientContext.Provider>;\n}\n\n/**\n * Access the {@link SolanaClient} from the nearest {@link SolanaClientProvider}.\n *\n * @throws If used outside of a provider.\n */\nexport function useSolanaClient(): SolanaClient {\n\tconst client = useContext(SolanaClientContext);\n\tif (!client) {\n\t\tthrow new Error('useSolanaClient must be used within a SolanaClientProvider.');\n\t}\n\treturn client;\n}\n\nexport type SolanaClientProviderProps = ProviderProps;\nexport type UseSolanaClientParameters = undefined;\nexport type UseSolanaClientReturnType = SolanaClient;\n","import { createContext, useContext } from 'react';\n\nconst QuerySuspenseContext = createContext<boolean | undefined>(undefined);\n\nexport function useQuerySuspensePreference(): boolean | undefined {\n\treturn useContext(QuerySuspenseContext);\n}\n\nexport { QuerySuspenseContext };\n","import type { ClientState } from '@solana/client';\nimport { useStore } from 'zustand';\n\nimport { useSolanaClient } from './context';\n\nexport type UseClientStoreSelector<T> = (state: ClientState) => T;\nconst identitySelector = (state: ClientState): ClientState => state;\n\nexport type UseClientStoreParameters<T = ClientState> = UseClientStoreSelector<T> | undefined;\nexport type UseClientStoreReturnType<T = ClientState> = T extends undefined ? ClientState : T;\n\nexport function useClientStore(): ClientState;\nexport function useClientStore<T>(selector: UseClientStoreSelector<T>): T;\n/**\n * Subscribe to the underlying Zustand store exposed by {@link SolanaClient}.\n *\n * @param selector - Derives the slice of state to observe. Defaults to the entire state.\n * @returns Selected state slice that triggers re-render when it changes.\n * @example\n * ```ts\n * const commitment = useClientStore((state) => state.cluster.commitment);\n * ```\n */\nexport function useClientStore<T>(selector?: UseClientStoreSelector<T>): ClientState | T {\n\tconst client = useSolanaClient();\n\tconst appliedSelector = selector ?? (identitySelector as UseClientStoreSelector<T>);\n\tconst slice = useStore(client.store, appliedSelector);\n\treturn selector ? slice : (slice as unknown as ClientState);\n}\n","import type { SolanaClient } from '@solana/client';\nimport { useCallback, useEffect, useMemo, useState } from 'react';\nimport useSWR, { type BareFetcher, type SWRConfiguration, type SWRResponse } from 'swr';\n\nimport { useSolanaClient } from './context';\nimport { useQuerySuspensePreference } from './querySuspenseContext';\nimport { useClientStore } from './useClientStore';\n\nconst QUERY_NAMESPACE = '@solana/react-hooks';\n\nexport type QueryStatus = 'error' | 'idle' | 'loading' | 'success';\n\nexport type UseSolanaRpcQueryOptions<Data> = Readonly<{\n\tdisabled?: boolean;\n\tswr?: Omit<SWRConfiguration<Data, unknown, BareFetcher<Data>>, 'fallback' | 'suspense'>;\n}>;\n\nexport type SolanaQueryResult<Data> = Readonly<{\n\tdata: Data | undefined;\n\tdataUpdatedAt?: number;\n\terror: unknown;\n\tisError: boolean;\n\tisLoading: boolean;\n\tisSuccess: boolean;\n\tisValidating: boolean;\n\tmutate: SWRResponse<Data>['mutate'];\n\trefresh(): Promise<Data | undefined>;\n\tstatus: QueryStatus;\n}>;\n\n/**\n * Low-level RPC query helper that scopes SWR keys to the active cluster and exposes a Solana-friendly\n * status shape. Prefer this when you need custom fetch logic beyond the built-in hooks.\n *\n * @param scope - Namespace label for the query key (for debugging and cache clarity).\n * @param args - Additional key params that uniquely identify the query (e.g. signature, address).\n * @param fetcher - Async function that receives the current {@link SolanaClient} and returns data.\n * @param options - Optional flags to disable the query or pass through SWR configuration.\n * @example\n * ```ts\n * const slotQuery = useSolanaRpcQuery(\n * 'slot',\n * ['slot'],\n * (client) => client.runtime.rpc.getLatestBlockhash().send().then((r) => r.context.slot),\n * );\n * ```\n */\nexport function useSolanaRpcQuery<Data>(\n\tscope: string,\n\targs: readonly unknown[],\n\tfetcher: (client: SolanaClient) => Promise<Data>,\n\toptions: UseSolanaRpcQueryOptions<Data> = {},\n): SolanaQueryResult<Data> {\n\tconst client = useSolanaClient();\n\tconst cluster = useClientStore((state) => state.cluster);\n\tconst { disabled = false, swr } = options;\n\tconst providerSuspensePreference = useQuerySuspensePreference();\n\tconst suspenseEnabled = !disabled && Boolean(providerSuspensePreference);\n\tconst swrOptions: SWRConfiguration<Data, unknown, BareFetcher<Data>> = {\n\t\t...(swr ?? {}),\n\t\tsuspense: suspenseEnabled,\n\t};\n\n\tconst key = useMemo(() => {\n\t\tif (disabled) {\n\t\t\treturn null;\n\t\t}\n\t\treturn [QUERY_NAMESPACE, scope, cluster.endpoint, cluster.commitment, ...args] as const;\n\t}, [cluster.commitment, cluster.endpoint, args, scope, disabled]);\n\n\tconst swrResponse = useSWR<Data>(key, () => fetcher(client), swrOptions);\n\tconst [dataUpdatedAt, setDataUpdatedAt] = useState<number | undefined>(() =>\n\t\tswrResponse.data !== undefined ? Date.now() : undefined,\n\t);\n\n\tuseEffect(() => {\n\t\tif (swrResponse.data !== undefined) {\n\t\t\tsetDataUpdatedAt(Date.now());\n\t\t}\n\t}, [swrResponse.data]);\n\n\tconst status: QueryStatus = swrResponse.error\n\t\t? 'error'\n\t\t: swrResponse.isLoading\n\t\t\t? 'loading'\n\t\t\t: swrResponse.data !== undefined\n\t\t\t\t? 'success'\n\t\t\t\t: 'idle';\n\n\tconst refresh = useCallback(() => swrResponse.mutate(undefined, { revalidate: true }), [swrResponse.mutate]);\n\n\treturn {\n\t\tdata: swrResponse.data,\n\t\tdataUpdatedAt,\n\t\terror: swrResponse.error ?? null,\n\t\tisError: status === 'error',\n\t\tisLoading: swrResponse.isLoading,\n\t\tisSuccess: status === 'success',\n\t\tisValidating: swrResponse.isValidating,\n\t\tmutate: swrResponse.mutate,\n\t\trefresh,\n\t\tstatus,\n\t};\n}\n","import { stableStringify, toAddress, toAddressString } from '@solana/client';\nimport { getBase64EncodedWireTransaction, type SendableTransaction, type Transaction } from '@solana/kit';\n\nimport type { UseSignatureStatusOptions, UseSignatureStatusParameters } from './hooks';\nimport type {\n\tUseLatestBlockhashParameters,\n\tUseProgramAccountsParameters,\n\tUseSimulateTransactionParameters,\n} from './queryHooks';\n\nexport type QueryKey = readonly unknown[];\n\nexport function getLatestBlockhashKey(params: UseLatestBlockhashParameters = {}): QueryKey {\n\tconst { commitment = null, minContextSlot = null } = params;\n\treturn ['latestBlockhash', commitment, normalizeBigint(minContextSlot)];\n}\n\nexport function getProgramAccountsKey(params: UseProgramAccountsParameters = {}): QueryKey {\n\tconst { programAddress, config } = params;\n\tconst address = programAddress ? toAddress(programAddress) : undefined;\n\tconst addressKey = address ? toAddressString(address) : null;\n\tconst configKey = stableStringify(config ?? null);\n\treturn ['programAccounts', addressKey, configKey];\n}\n\nexport function getSimulateTransactionKey(params: UseSimulateTransactionParameters = {}): QueryKey {\n\tconst { transaction, config } = params;\n\tconst wire = transaction ? normalizeWire(transaction) : null;\n\tconst configKey = stableStringify(config ?? null);\n\treturn ['simulateTransaction', wire, configKey];\n}\n\nexport function getSignatureStatusKey(params: UseSignatureStatusParameters | UseSignatureStatusOptions = {}): QueryKey {\n\tconst { config, signature } = params as UseSignatureStatusParameters;\n\tconst signatureKey = signature?.toString() ?? null;\n\tconst configKey = JSON.stringify(config ?? null);\n\treturn ['signatureStatus', signatureKey, configKey];\n}\n\nfunction normalizeBigint(value: bigint | number | null | undefined): bigint | null {\n\tif (value === undefined || value === null) return null;\n\treturn typeof value === 'bigint' ? value : BigInt(Math.floor(value));\n}\n\nfunction normalizeWire(input: UseSimulateTransactionParameters['transaction']): string | null {\n\tif (!input) return null;\n\tif (typeof input === 'string') {\n\t\treturn input;\n\t}\n\treturn getBase64EncodedWireTransaction(input as SendableTransaction & Transaction);\n}\n","import { type AddressLike, type SolanaClient, toAddress } from '@solana/client';\nimport {\n\ttype Base64EncodedWireTransaction,\n\ttype Commitment,\n\tgetBase64EncodedWireTransaction,\n\ttype SendableTransaction,\n\ttype Transaction,\n} from '@solana/kit';\nimport { useCallback, useMemo } from 'react';\n\nimport type { SolanaQueryResult, UseSolanaRpcQueryOptions } from './query';\nimport { useSolanaRpcQuery } from './query';\nimport { getLatestBlockhashKey, getProgramAccountsKey, getSimulateTransactionKey } from './queryKeys';\n\ntype RpcInstance = SolanaClient['runtime']['rpc'];\n\ntype LatestBlockhashPlan = ReturnType<RpcInstance['getLatestBlockhash']>;\ntype LatestBlockhashResponse = Awaited<ReturnType<LatestBlockhashPlan['send']>>;\n\ntype ProgramAccountsPlan = ReturnType<RpcInstance['getProgramAccounts']>;\ntype ProgramAccountsConfig = Parameters<RpcInstance['getProgramAccounts']>[1];\ntype ProgramAccountsResponse = Awaited<ReturnType<ProgramAccountsPlan['send']>>;\n\ntype SimulateTransactionPlan = ReturnType<RpcInstance['simulateTransaction']>;\ntype SimulateTransactionConfig = Parameters<RpcInstance['simulateTransaction']>[1];\ntype SimulateTransactionResponse = Awaited<ReturnType<SimulateTransactionPlan['send']>>;\n\nconst DEFAULT_BLOCKHASH_REFRESH_INTERVAL = 30_000;\n\nexport type UseLatestBlockhashParameters = Readonly<{\n\tcommitment?: Commitment;\n\tdisabled?: boolean;\n\tminContextSlot?: bigint | number;\n\trefreshInterval?: number;\n\tswr?: UseSolanaRpcQueryOptions<LatestBlockhashResponse>['swr'];\n}>;\n\nexport type UseLatestBlockhashReturnType = SolanaQueryResult<LatestBlockhashResponse> &\n\tReadonly<{\n\t\tblockhash: string | null;\n\t\tcontextSlot: bigint | null | undefined;\n\t\tlastValidBlockHeight: bigint | null;\n\t}>;\n\n/**\n * Fetch the current cluster blockhash and keep it warm with a configurable polling interval.\n * Falls back to the client's active commitment when one is not provided.\n *\n * @example\n * ```ts\n * const { blockhash, lastValidBlockHeight } = useLatestBlockhash({ refreshInterval: 10_000 });\n * ```\n */\nexport function useLatestBlockhash(options: UseLatestBlockhashParameters = {}): UseLatestBlockhashReturnType {\n\tconst {\n\t\tcommitment,\n\t\tminContextSlot,\n\t\trefreshInterval = DEFAULT_BLOCKHASH_REFRESH_INTERVAL,\n\t\tdisabled = false,\n\t\tswr,\n\t} = options;\n\tconst fetcher = useCallback(\n\t\tasync (client: SolanaClient) => {\n\t\t\tconst fallbackCommitment = commitment ?? client.store.getState().cluster.commitment;\n\t\t\tconst plan = client.runtime.rpc.getLatestBlockhash({\n\t\t\t\tcommitment: fallbackCommitment,\n\t\t\t\tminContextSlot: normalizeMinContextSlot(minContextSlot),\n\t\t\t});\n\t\t\treturn plan.send({ abortSignal: AbortSignal.timeout(15_000) });\n\t\t},\n\t\t[commitment, minContextSlot],\n\t);\n\tconst query = useSolanaRpcQuery<LatestBlockhashResponse>(\n\t\t'latestBlockhash',\n\t\tgetLatestBlockhashKey(options),\n\t\tfetcher,\n\t\t{\n\t\t\tdisabled,\n\t\t\tswr: {\n\t\t\t\trefreshInterval,\n\t\t\t\t...swr,\n\t\t\t},\n\t\t},\n\t);\n\treturn {\n\t\t...query,\n\t\tblockhash: query.data?.value.blockhash ?? null,\n\t\tcontextSlot: query.data?.context.slot,\n\t\tlastValidBlockHeight: query.data?.value.lastValidBlockHeight ?? null,\n\t};\n}\n\nexport type UseProgramAccountsParameters = Readonly<{\n\tcommitment?: Commitment;\n\tconfig?: ProgramAccountsConfig;\n\tdisabled?: boolean;\n\tprogramAddress?: AddressLike;\n\tswr?: UseSolanaRpcQueryOptions<ProgramAccountsResponse>['swr'];\n}>;\n\nexport type UseProgramAccountsReturnType = SolanaQueryResult<ProgramAccountsResponse> &\n\tReadonly<{\n\t\taccounts: ProgramAccountsResponse;\n\t}>;\n\n/**\n * Fetch accounts owned by a program, keyed by the program address. The query is disabled until a\n * program address is provided, and respects both explicit and client default commitments.\n *\n * @example\n * ```ts\n * const programAccounts = useProgramAccounts(programId, { config: { dataSlice: { offset: 0, length: 0 } } });\n * ```\n */\nexport function useProgramAccounts(\n\tprogramAddress?: AddressLike,\n\toptions?: UseProgramAccountsParameters,\n): UseProgramAccountsReturnType {\n\tconst { commitment, config, swr, disabled: disabledOption } = options ?? {};\n\tconst fetcher = useCallback(\n\t\tasync (client: SolanaClient) => {\n\t\t\tconst address = programAddress ? toAddress(programAddress) : undefined;\n\t\t\tif (!address) {\n\t\t\t\tthrow new Error('Provide a program address before querying program accounts.');\n\t\t\t}\n\t\t\tconst fallbackCommitment = commitment ?? config?.commitment ?? client.store.getState().cluster.commitment;\n\t\t\tconst mergedConfig = {\n\t\t\t\t...(config ?? {}),\n\t\t\t\tcommitment: fallbackCommitment,\n\t\t\t} satisfies ProgramAccountsConfig;\n\t\t\tconst plan = client.runtime.rpc.getProgramAccounts(address, mergedConfig);\n\t\t\treturn plan.send({ abortSignal: AbortSignal.timeout(20_000) });\n\t\t},\n\t\t[commitment, config, programAddress],\n\t);\n\tconst disabled = disabledOption ?? !programAddress;\n\tconst query = useSolanaRpcQuery<ProgramAccountsResponse>(\n\t\t'programAccounts',\n\t\tgetProgramAccountsKey({ programAddress, config }),\n\t\tfetcher,\n\t\t{\n\t\t\tdisabled,\n\t\t\tswr,\n\t\t},\n\t);\n\treturn {\n\t\t...query,\n\t\taccounts: query.data ?? [],\n\t};\n}\n\nexport type UseSimulateTransactionParameters = Readonly<{\n\tcommitment?: Commitment;\n\tconfig?: SimulateTransactionConfig;\n\tdisabled?: boolean;\n\trefreshInterval?: number;\n\tswr?: UseSolanaRpcQueryOptions<SimulateTransactionResponse>['swr'];\n\ttransaction?: SimulationInput | null;\n}>;\n\ntype SimulationInput = (SendableTransaction & Transaction) | Base64EncodedWireTransaction | string;\n\nexport type UseSimulateTransactionReturnType = SolanaQueryResult<SimulateTransactionResponse> &\n\tReadonly<{\n\t\tlogs: readonly string[];\n\t}>;\n\n/**\n * Simulate a transaction or wire payload and return simulation logs/results. Disabled until a\n * transaction payload is provided; uses client commitment when not specified in options.\n *\n * @example\n * ```ts\n * const simulation = useSimulateTransaction(base64Wire, { refreshInterval: 0 });\n * console.log(simulation.logs);\n * ```\n */\nexport function useSimulateTransaction(\n\ttransaction?: SimulationInput | null,\n\toptions?: UseSimulateTransactionParameters,\n): UseSimulateTransactionReturnType {\n\tconst { commitment, config, refreshInterval, disabled: disabledOption, swr } = options ?? {};\n\tconst wire = useMemo<Base64EncodedWireTransaction | null>(() => {\n\t\tif (!transaction) {\n\t\t\treturn null;\n\t\t}\n\t\tif (typeof transaction === 'string') {\n\t\t\treturn transaction as Base64EncodedWireTransaction;\n\t\t}\n\t\treturn getBase64EncodedWireTransaction(transaction);\n\t}, [transaction]);\n\tconst fetcher = useCallback(\n\t\tasync (client: SolanaClient) => {\n\t\t\tif (!wire) {\n\t\t\t\tthrow new Error('Provide a transaction payload before simulating.');\n\t\t\t}\n\t\t\tconst resolvedConfig = {\n\t\t\t\t...(config ?? {}),\n\t\t\t\tcommitment: commitment ?? config?.commitment ?? client.store.getState().cluster.commitment,\n\t\t\t} as SimulateTransactionConfig;\n\t\t\tconst plan = client.runtime.rpc.simulateTransaction(wire, resolvedConfig);\n\t\t\treturn plan.send({ abortSignal: AbortSignal.timeout(20_000) });\n\t\t},\n\t\t[commitment, config, wire],\n\t);\n\tconst disabled = disabledOption ?? !wire;\n\tconst query = useSolanaRpcQuery<SimulateTransactionResponse>(\n\t\t'simulateTransaction',\n\t\tgetSimulateTransactionKey({ transaction, config }),\n\t\tfetcher,\n\t\t{\n\t\t\tdisabled,\n\t\t\tswr: {\n\t\t\t\trefreshInterval,\n\t\t\t\trevalidateIfStale: false,\n\t\t\t\trevalidateOnFocus: false,\n\t\t\t\t...swr,\n\t\t\t},\n\t\t},\n\t);\n\treturn {\n\t\t...query,\n\t\tlogs: query.data?.value.logs ?? [],\n\t};\n}\n\nfunction normalizeMinContextSlot(minContextSlot?: bigint | number): bigint | undefined {\n\tif (minContextSlot === undefined) return undefined;\n\treturn typeof minContextSlot === 'bigint' ? minContextSlot : BigInt(Math.floor(minContextSlot));\n}\n","import {\n\ttype AccountCacheEntry,\n\ttype AddressLike,\n\ttype AddressLookupTableData,\n\ttype AsyncState,\n\ttype ClientState,\n\ttype ConfirmationCommitment,\n\tconfirmationMeetsCommitment,\n\tcreateAsyncState,\n\tcreateInitialAsyncState,\n\tcreateSolTransferController,\n\tcreateSplTransferController,\n\tcreateStakeController,\n\tcreateTransactionPoolController,\n\tderiveConfirmationStatus,\n\ttype LatestBlockhashCache,\n\ttype NonceAccountData,\n\tnormalizeSignature,\n\tSIGNATURE_STATUS_TIMEOUT_MS,\n\ttype SignatureLike,\n\ttype SolanaClient,\n\ttype SolTransferHelper,\n\ttype SolTransferInput,\n\ttype SolTransferSendOptions,\n\ttype SplTokenBalance,\n\ttype SplTokenHelper,\n\ttype SplTokenHelperConfig,\n\ttype SplTransferController,\n\ttype SplTransferInput,\n\ttype StakeAccount,\n\ttype StakeHelper,\n\ttype StakeInput,\n\ttype StakeSendOptions,\n\ttype TransactionHelper,\n\ttype TransactionInstructionInput,\n\ttype TransactionInstructionList,\n\ttype TransactionPoolController,\n\ttype TransactionPoolPrepareAndSendOptions,\n\ttype TransactionPoolPrepareOptions,\n\ttype TransactionPoolSendOptions,\n\ttype TransactionPoolSignOptions,\n\ttype TransactionPrepareAndSendRequest,\n\ttype TransactionPrepared,\n\ttype TransactionSendOptions,\n\ttoAddress,\n\ttype UnstakeInput,\n\ttype UnstakeSendOptions,\n\ttype WalletSession,\n\ttype WalletStatus,\n\ttype WithdrawInput,\n\ttype WithdrawSendOptions,\n} from '@solana/client';\nimport type { Commitment, Lamports, Signature } from '@solana/kit';\nimport { useCallback, useEffect, useMemo, useRef, useState, useSyncExternalStore } from 'react';\nimport useSWR, { type BareFetcher, type SWRConfiguration } from 'swr';\n\nimport { useSolanaClient } from './context';\nimport { type SolanaQueryResult, type UseSolanaRpcQueryOptions, useSolanaRpcQuery } from './query';\nimport { type UseLatestBlockhashParameters, type UseLatestBlockhashReturnType, useLatestBlockhash } from './queryHooks';\nimport { getSignatureStatusKey } from './queryKeys';\nimport { useQuerySuspensePreference } from './querySuspenseContext';\nimport { useClientStore } from './useClientStore';\n\ntype ClusterState = ClientState['cluster'];\ntype ClusterStatus = ClientState['cluster']['status'];\ntype UnwrapPromise<T> = T extends Promise<infer U> ? U : T;\n\ntype RpcInstance = SolanaClient['runtime']['rpc'];\n\ntype SignatureStatusesPlan = ReturnType<RpcInstance['getSignatureStatuses']>;\n\ntype SignatureStatusesResponse = Awaited<ReturnType<SignatureStatusesPlan['send']>>;\n\ntype SignatureStatusValue = SignatureStatusesResponse['value'][number];\n\ntype SignatureStatusConfig = Parameters<RpcInstance['getSignatureStatuses']>[1];\n\ntype UseAccountOptions = Readonly<{\n\tcommitment?: Commitment;\n\tfetch?: boolean;\n\tskip?: boolean;\n\twatch?: boolean;\n}>;\n\ntype UseBalanceOptions = Readonly<{\n\twatch?: boolean;\n}> &\n\tUseAccountOptions;\n\nfunction createClusterSelector(): (state: ClientState) => ClusterState {\n\treturn (state) => state.cluster;\n}\n\nfunction createClusterStatusSelector(): (state: ClientState) => ClusterStatus {\n\treturn (state) => state.cluster.status;\n}\n\nfunction createWalletSelector(): (state: ClientState) => WalletStatus {\n\treturn (state) => state.wallet;\n}\n\nfunction createAccountSelector(key?: string) {\n\treturn (state: ClientState): AccountCacheEntry | undefined => (key ? state.accounts[key] : undefined);\n}\n\ntype SuspensePromiseRef = {\n\tkey: string | null;\n\tpromise: Promise<unknown>;\n};\n\nfunction useSuspenseFetcher(\n\tconfig: Readonly<{\n\t\tenabled: boolean;\n\t\tfetcher: () => Promise<unknown>;\n\t\tkey: string | null;\n\t\tready: boolean;\n\t}>,\n) {\n\tconst preference = useQuerySuspensePreference();\n\tconst suspenseEnabled = Boolean(preference) && config.enabled;\n\tconst pendingRef = useRef<SuspensePromiseRef | null>(null);\n\n\tuseEffect(() => {\n\t\tif (!suspenseEnabled) {\n\t\t\tpendingRef.current = null;\n\t\t\treturn;\n\t\t}\n\t\tif (pendingRef.current && pendingRef.current.key !== config.key) {\n\t\t\tpendingRef.current = null;\n\t\t}\n\t}, [config.key, suspenseEnabled]);\n\n\tif (pendingRef.current && pendingRef.current.key !== config.key) {\n\t\tpendingRef.current = null;\n\t}\n\n\tif (suspenseEnabled && config.key && !config.ready) {\n\t\tif (!pendingRef.current) {\n\t\t\tconst promise = config.fetcher();\n\t\t\tpendingRef.current = {\n\t\t\t\tkey: config.key,\n\t\t\t\tpromise: promise.finally(() => {\n\t\t\t\t\tif (pendingRef.current?.promise === promise) {\n\t\t\t\t\t\tpendingRef.current = null;\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t};\n\t\t}\n\t\tthrow pendingRef.current.promise;\n\t}\n}\n\n/**\n * Read the full cluster state managed by the client store.\n *\n * @example\n * ```ts\n * const cluster = useClusterState();\n * console.log(cluster.endpoint, cluster.status);\n * ```\n */\nexport function useClusterState(): ClusterState {\n\tconst selector = useMemo(createClusterSelector, []);\n\treturn useClientStore(selector);\n}\n\n/**\n * Read just the cluster connection status slice (connecting/ready/error).\n *\n * @example\n * ```ts\n * const status = useClusterStatus();\n * if (status.status === 'error') console.error(status.error);\n * ```\n */\nexport function useClusterStatus(): ClusterStatus {\n\tconst selector = useMemo(createClusterStatusSelector, []);\n\treturn useClientStore(selector);\n}\n\n/**\n * Access the wallet status tracked by the client store (connected/connecting/error/disconnected).\n *\n * @example\n * ```ts\n * const wallet = useWallet();\n * if (wallet.status === 'connected') {\n * console.log(wallet.session.account.address.toString());\n * }\n * ```\n */\nexport function useWallet(): WalletStatus {\n\tconst selector = useMemo(createWalletSelector, []);\n\treturn useClientStore(selector);\n}\n\n/**\n * Convenience helper that returns the active wallet session when connected, otherwise `undefined`.\n *\n * @example\n * ```ts\n * const session = useWalletSession();\n * const address = session?.account.address.toString();\n * ```\n */\nexport function useWalletSession(): WalletSession | undefined {\n\tconst wallet = useWallet();\n\tif (wallet.status === 'connected') {\n\t\treturn wallet.session;\n\t}\n\treturn undefined;\n}\n\n/**\n * Access the headless client actions (setCluster, fetchAccount, connectWallet, etc.).\n *\n * @example\n * ```ts\n * const actions = useWalletActions();\n * await actions.connectWallet('phantom');\n * ```\n */\nexport function useWalletActions() {\n\tconst client = useSolanaClient();\n\treturn client.actions;\n}\n\n/**\n * Stable connect helper that resolves to {@link ClientActions.connectWallet}.\n *\n * @example\n * ```ts\n * const connect = useConnectWallet();\n * await connect('phantom', { autoConnect: true });\n * ```\n */\nexport function useConnectWallet(): (\n\tconnectorId: string,\n\toptions?: Readonly<{ autoConnect?: boolean; allowInteractiveFallback?: boolean }>,\n) => Promise<void> {\n\tconst client = useSolanaClient();\n\treturn useCallback(\n\t\t(connectorId: string, options?: Readonly<{ autoConnect?: boolean; allowInteractiveFallback?: boolean }>) =>\n\t\t\tclient.actions.connectWallet(connectorId, options),\n\t\t[client],\n\t);\n}\n\n/**\n * Stable disconnect helper mapping to {@link ClientActions.disconnectWallet}.\n *\n * @example\n * ```ts\n * const disconnect = useDisconnectWallet();\n * await disconnect();\n * ```\n */\nexport function useDisconnectWallet(): () => Promise<void> {\n\tconst client = useSolanaClient();\n\treturn useCallback(() => client.actions.disconnectWallet(), [client]);\n}\n\ntype SolTransferSignature = UnwrapPromise<ReturnType<SolTransferHelper['sendTransfer']>>;\n\n/**\n * Convenience wrapper around the SOL transfer helper that tracks status and signature.\n *\n * @example\n * ```ts\n * const { send, signature, status } = useSolTransfer();\n * await send({ amount: 1_000_000n, destination: toAddress('...') });\n * console.log(signature, status);\n * ```\n */\nexport function useSolTransfer(): Readonly<{\n\terror: unknown;\n\thelper: SolTransferHelper;\n\tisSending: boolean;\n\treset(): void;\n\tsend(config: SolTransferInput, options?: SolTransferSendOptions): Promise<SolTransferSignature>;\n\tsignature: SolTransferSignature | null;\n\tstatus: AsyncState<SolTransferSignature>['status'];\n}> {\n\tconst client = useSolanaClient();\n\tconst session = useWalletSession();\n\tconst helper = client.solTransfer;\n\tconst sessionRef = useRef(session);\n\n\tuseEffect(() => {\n\t\tsessionRef.current = session;\n\t}, [session]);\n\n\tconst controller = useMemo(\n\t\t() =>\n\t\t\tcreateSolTransferController({\n\t\t\t\tauthorityProvider: () => sessionRef.current,\n\t\t\t\thelper,\n\t\t\t}),\n\t\t[helper],\n\t);\n\n\tconst state = useSyncExternalStore<AsyncState<SolTransferSignature>>(\n\t\tcontroller.subscribe,\n\t\tcontroller.getState,\n\t\tcontroller.getState,\n\t);\n\n\tconst send = useCallback(\n\t\t(config: SolTransferInput, options?: SolTransferSendOptions) => controller.send(config, options),\n\t\t[controller],\n\t);\n\n\treturn {\n\t\terror: state.error ?? null,\n\t\thelper,\n\t\tisSending: state.status === 'loading',\n\t\treset: controller.reset,\n\t\tsend,\n\t\tsignature: state.data ?? null,\n\t\tstatus: state.status,\n\t};\n}\n\ntype StakeSignature = UnwrapPromise<ReturnType<StakeHelper['sendStake']>>;\ntype UnstakeSignature = UnwrapPromise<ReturnType<StakeHelper['sendUnstake']>>;\ntype WithdrawSignature = UnwrapPromise<ReturnType<StakeHelper['sendWithdraw']>>;\n\n/**\n * Convenience wrapper around the stake helper that tracks status and signature for native SOL staking.\n * Allows staking SOL to a validator and returns transaction details.\n */\nexport function useStake(validatorId: AddressLike): Readonly<{\n\terror: unknown;\n\tgetStakeAccounts(wallet: AddressLike, validatorIdFilter?: AddressLike): Promise<StakeAccount[]>;\n\thelper: StakeHelper;\n\tisStaking: boolean;\n\tisUnstaking: boolean;\n\tisWithdrawing: boolean;\n\treset(): void;\n\tresetUnstake(): void;\n\tresetWithdraw(): void;\n\tstake(config: Omit<StakeInput, 'validatorId'>, options?: StakeSendOptions): Promise<StakeSignature>;\n\tunstake(config: Omit<UnstakeInput, 'validatorId'>, options?: UnstakeSendOptions): Promise<UnstakeSignature>;\n\twithdraw(config: Omit<WithdrawInput, 'validatorId'>, options?: WithdrawSendOptions): Promise<WithdrawSignature>;\n\tsignature: StakeSignature | null;\n\tunstakeSignature: UnstakeSignature | null;\n\twithdrawSignature: WithdrawSignature | null;\n\tstatus: AsyncState<StakeSignature>['status'];\n\tunstakeStatus: AsyncState<UnstakeSignature>['status'];\n\twithdrawStatus: AsyncState<WithdrawSignature>['status'];\n\tunstakeError: unknown;\n\twithdrawError: unknown;\n\tvalidatorId: string;\n}> {\n\tconst client = useSolanaClient();\n\tconst session = useWalletSession();\n\tconst helper = client.stake;\n\tconst sessionRef = useRef(session);\n\tconst normalizedValidatorId = useMemo(() => String(validatorId), [validatorId]);\n\n\tuseEffect(() => {\n\t\tsessionRef.current = session;\n\t}, [session]);\n\n\tconst controller = useMemo(\n\t\t() =>\n\t\t\tcreateStakeController({\n\t\t\t\tauthorityProvider: () => sessionRef.current,\n\t\t\t\thelper,\n\t\t\t}),\n\t\t[helper],\n\t);\n\n\tconst state = useSyncExternalStore<AsyncState<StakeSignature>>(\n\t\tcontroller.subscribe,\n\t\tcontroller.getState,\n\t\tcontroller.getState,\n\t);\n\n\tconst unstakeState = useSyncExternalStore<AsyncState<UnstakeSignature>>(\n\t\tcontroller.subscribeUnstake,\n\t\tcontroller.getUnstakeState,\n\t\tcontroller.getUnstakeState,\n\t);\n\n\tconst withdrawState = useSyncExternalStore<AsyncState<WithdrawSignature>>(\n\t\tcontroller.subscribeWithdraw,\n\t\tcontroller.getWithdrawState,\n\t\tcontroller.getWithdrawState,\n\t);\n\n\tconst stake = useCallback(\n\t\t(config: Omit<StakeInput, 'validatorId'>, options?: StakeSendOptions) =>\n\t\t\tcontroller.stake({ ...config, validatorId: normalizedValidatorId }, options),\n\t\t[controller, normalizedValidatorId],\n\t);\n\n\tconst unstake = useCallback(\n\t\t(config: Omit<UnstakeInput, 'validatorId'>, options?: UnstakeSendOptions) =>\n\t\t\tcontroller.unstake({ ...config }, options),\n\t\t[controller],\n\t);\n\n\tconst withdraw = useCallback(\n\t\t(config: Omit<WithdrawInput, 'validatorId'>, options?: WithdrawSendOptions) =>\n\t\t\tcontroller.withdraw({ ...config }, options),\n\t\t[controller],\n\t);\n\n\tconst getStakeAccounts = useCallback(\n\t\tasync (wallet: AddressLike, validatorIdFilter?: AddressLike) => {\n\t\t\tif (!helper.getStakeAccounts) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t'getStakeAccounts is not available. Make sure you have the latest version of @solana/client package.',\n\t\t\t\t);\n\t\t\t}\n\t\t\tconst walletAddr = typeof wallet === 'string' ? wallet : String(wallet);\n\t\t\tconst filterAddr = validatorIdFilter\n\t\t\t\t? typeof validatorIdFilter === 'string'\n\t\t\t\t\t? validatorIdFilter\n\t\t\t\t\t: String(validatorIdFilter)\n\t\t\t\t: undefined;\n\t\t\treturn helper.getStakeAccounts(walletAddr, filterAddr);\n\t\t},\n\t\t[helper],\n\t);\n\n\treturn {\n\t\terror: state.error ?? null,\n\t\tgetStakeAccounts,\n\t\thelper,\n\t\tisStaking: state.status === 'loading',\n\t\tisUnstaking: unstakeState.status === 'loading',\n\t\tisWithdrawing: withdrawState.status === 'loading',\n\t\treset: controller.reset,\n\t\tresetUnstake: controller.resetUnstake,\n\t\tresetWithdraw: controller.resetWithdraw,\n\t\tstake,\n\t\tunstake,\n\t\twithdraw,\n\t\tsignature: state.data ?? null,\n\t\tunstakeSignature: unstakeState.data ?? null,\n\t\twithdrawSignature: withdrawState.data ?? null,\n\t\tstatus: state.status,\n\t\tunstakeStatus: unstakeState.status,\n\t\twithdrawStatus: withdrawState.status,\n\t\tunstakeError: unstakeState.error ?? null,\n\t\twithdrawError: withdrawState.error ?? null,\n\t\tvalidatorId: normalizedValidatorId,\n\t};\n}\n\ntype SplTokenBalanceResult = SplTokenBalance;\ntype SplTransferSignature = UnwrapPromise<ReturnType<SplTokenHelper['sendTransfer']>>;\ntype UseSplTokenOptions = Readonly<{\n\tcommitment?: Commitment;\n\tconfig?: Omit<SplTokenHelperConfig, 'commitment' | 'mint'>;\n\towner?: AddressLike;\n\trevalidateOnFocus?: boolean;\n\tswr?: Omit<\n\t\tSWRConfiguration<SplTokenBalanceResult, unknown, BareFetcher<SplTokenBalanceResult>>,\n\t\t'fallback' | 'suspense'\n\t>;\n}>;\n\n/**\n * Simplified SPL token hook that scopes helpers by mint and manages balance state.\n *\n * @example\n * ```ts\n * const { balance, send, owner } = useSplToken(mintAddress);\n * if (owner && balance?.exists) {\n * await send({ amount: 1n, destinationOwner: toAddress('...') });\n * }\n * ```\n */\nexport function useSplToken(\n\tmint: AddressLike,\n\toptions: UseSplTokenOptions = {},\n): Readonly<{\n\tbalance: SplTokenBalanceResult | null;\n\terror: unknown;\n\thelper: SplTokenHelper;\n\tisFetching: boolean;\n\tisSending: boolean;\n\towner: string | null;\n\trefresh(): Promise<SplTokenBalanceResult | undefined>;\n\trefreshing: boolean;\n\tresetSend(): void;\n\tsend(config: SplTransferInput, options?: SolTransferSendOptions): Promise<SplTransferSignature>;\n\tsendError: unknown;\n\tsendSignature: SplTransferSignature | null;\n\tsendStatus: AsyncState<SplTransferSignature>['status'];\n\tstatus: 'disconnected' | 'error' | 'loading' | 'ready';\n}> {\n\tconst client = useSolanaClient();\n\tconst session = useWalletSession();\n\tconst suspense = Boolean(useQuerySuspensePreference());\n\n\tconst normalizedMint = useMemo(() => String(mint), [mint]);\n\n\tconst helperConfig = useMemo<SplTokenHelperConfig>(\n\t\t() => ({\n\t\t\tcommitment: options.commitment,\n\t\t\tmint: normalizedMint,\n\t\t\t...(options.config ?? {}),\n\t\t}),\n\t\t[normalizedMint, options.commitment, options.config],\n\t);\n\n\tconst helper = useMemo(() => client.splToken(helperConfig), [client, helperConfig]);\n\n\tconst ownerRaw = options.owner ?? session?.account.address;\n\tconst owner = useMemo(() => (ownerRaw ? String(ownerRaw) : null), [ownerRaw]);\n\n\tconst balanceKey = owner ? ['spl-balance', normalizedMint, owner, options.commitment ?? null] : null;\n\n\tconst fetchBalance = useCallback(() => {\n\t\tif (!owner) {\n\t\t\tthrow new Error('Unable to fetch SPL balance without an owner.');\n\t\t}\n\t\treturn helper.fetchBalance(owner, options.commitment);\n\t}, [helper, owner, options.commitment]);\n\n\tconst swrOptions = useMemo(\n\t\t() => ({\n\t\t\trevalidateOnFocus: options.revalidateOnFocus ?? false,\n\t\t\tsuspense,\n\t\t\t...(options.swr ?? {}),\n\t\t}),\n\t\t[options.revalidateOnFocus, options.swr, suspense],\n\t);\n\n\tconst { data, error, isLoading, isValidating, mutate } = useSWR<SplTokenBalanceResult>(\n\t\tbalanceKey,\n\t\tfetchBalance,\n\t\tswrOptions,\n\t);\n\n\tconst sessionRef = useRef(session);\n\tuseEffect(() => {\n\t\tsessionRef.current = session;\n\t}, [session]);\n\n\tconst ownerRef = useRef(owner);\n\tuseEffect(() => {\n\t\townerRef.current = owner;\n\t}, [owner]);\n\n\tconst controller = useMemo<SplTransferController>(\n\t\t() =>\n\t\t\tcreateSplTransferController({\n\t\t\t\tauthorityProvider: () => sessionRef.current ?? undefined,\n\t\t\t\thelper,\n\t\t\t\tsourceOwnerProvider: () => ownerRef.current ?? undefined,\n\t\t\t}),\n\t\t[helper],\n\t);\n\n\tconst sendState = useSyncExternalStore<AsyncState<SplTransferSignature>>(\n\t\tcontroller.subscribe,\n\t\tcontroller.getState,\n\t\tcontroller.getState,\n\t);\n\n\tconst refresh = useCallback(() => {\n\t\tif (!owner) {\n\t\t\treturn Promise.resolve(undefined);\n\t\t}\n\t\treturn mutate(() => helper.fetchBalance(owner, options.commitment), { revalidate: false });\n\t}, [helper, mutate, owner, options.commitment]);\n\n\tconst send = useCallback(\n\t\tasync (config: SplTransferInput, sendOptions?: SolTransferSendOptions) => {\n\t\t\tconst signature = await controller.send(config, sendOptions);\n\t\t\tif (owner) {\n\t\t\t\tawait mutate(() => helper.fetchBalance(owner, options.commitment), { revalidate: false });\n\t\t\t}\n\t\t\treturn signature;\n\t\t},\n\t\t[controller, helper, mutate, options.commitment, owner],\n\t);\n\n\tconst resetSend = useCallback(() => {\n\t\tcontroller.reset();\n\t}, [controller]);\n\n\tconst status: 'disconnected' | 'error' | 'loading' | 'ready' =\n\t\towner === null ? 'disconnected' : error ? 'error' : isLoading && !data ? 'loading' : 'ready';\n\n\treturn {\n\t\tbalance: data ?? null,\n\t\terror: error ?? null,\n\t\thelper,\n\t\tisFetching: Boolean(owner) && (isLoading || isValidating),\n\t\tisSending: sendState.status === 'loading',\n\t\towner,\n\t\trefresh,\n\t\trefreshing: Boolean(owner) && isValidating,\n\t\tresetSend,\n\t\tsend,\n\t\tsendError: sendState.error ?? null,\n\t\tsendSignature: sendState.data ?? null,\n\t\tsendStatus: sendState.status,\n\t\tstatus,\n\t};\n}\n\n/**\n * Subscribe to the account cache for a given address, optionally triggering fetch & watch helpers.\n *\n * @example\n * ```ts\n * const account = useAccount(pubkey, { watch: true });\n * const lamports = account?.lamports ?? null;\n * ```\n */\nexport function useAccount(addressLike?: AddressLike, options: UseAccountOptions = {}): AccountCacheEntry | undefined {\n\tconst client = useSolanaClient();\n\tconst shouldSkip = options.skip ?? !addressLike;\n\tconst address = useMemo(() => {\n\t\tif (shouldSkip || !addressLike) {\n\t\t\treturn undefined;\n\t\t}\n\t\treturn toAddress(addressLike);\n\t}, [addressLike, shouldSkip]);\n\tconst accountKey = useMemo(() => address?.toString(), [address]);\n\tconst selector = useMemo(() => createAccountSelector(accountKey), [accountKey]);\n\tconst account = useClientStore(selector);\n\n\tuseSuspenseFetcher({\n\t\tenabled: options.fetch !== false && !shouldSkip && Boolean(address),\n\t\tfetcher: () => {\n\t\t\tif (!address) {\n\t\t\t\tthrow new Error('Provide an address before fetching account data.');\n\t\t\t}\n\t\t\treturn client.actions.fetchAccount(address, options.commitment);\n\t\t},\n\t\tkey: accountKey ?? null,\n\t\tready: account !== undefined,\n\t});\n\n\tuseEffect(() => {\n\t\tif (!address) {\n\t\t\treturn;\n\t\t}\n\t\tconst commitment = options.commitment;\n\t\tif (options.fetch !== false && account === undefined) {\n\t\t\tvoid client.actions.fetchAccount(address, commitment).catch(() => undefined);\n\t\t}\n\t\tif (options.watch) {\n\t\t\tconst subscription = client.watchers.watchAccount({ address, commitment }, () => undefined);\n\t\t\treturn () => {\n\t\t\t\tsubscription.abort();\n\t\t\t};\n\t\t}\n\t\treturn undefined;\n\t}, [account, address, client, options.commitment, options.fetch, options.watch]);\n\n\treturn account;\n}\n\n/**\n * Track lamport balance for an address. Fetches immediately and watches by default.\n *\n * @example\n * ```ts\n * const { lamports, fetching } = useBalance(pubkey);\n * ```\n */\nexport function useBalance(\n\taddressLike?: AddressLike,\n\toptions: UseBalanceOptions = {},\n): Readonly<{\n\taccount?: AccountCacheEntry;\n\terror?: unknown;\n\tfetching: boolean;\n\tlamports: Lamports | null;\n\tslot: bigint | null | undefined;\n}> {\n\tconst mergedOptions = useMemo(\n\t\t() => ({\n\t\t\tcommitment: options.commitment,\n\t\t\tfetch: options.fetch ?? true,\n\t\t\tskip: options.skip,\n\t\t\twatch: options.watch ?? true,\n\t\t}),\n\t\t[options.commitment, options.fetch, options.skip, options.watch],\n\t);\n\tconst client = useSolanaClient();\n\tconst shouldSkip = mergedOptions.skip ?? !addressLike;\n\tconst address = useMemo(() => {\n\t\tif (shouldSkip || !addressLike) {\n\t\t\treturn undefined;\n\t\t}\n\t\treturn toAddress(addressLike);\n\t}, [addressLike, shouldSkip]);\n\tconst accountKey = useMemo(() => address?.toString(), [address]);\n\tconst selector = useMemo(() => createAccountSelector(accountKey), [accountKey]);\n\tconst account = useClientStore(selector);\n\n\tuseSuspenseFetcher({\n\t\tenabled: mergedOptions.fetch !== false && !shouldSkip && Boolean(address),\n\t\tfetcher: () => {\n\t\t\tif (!address) {\n\t\t\t\tthrow new Error('Provide an address before fetching balance.');\n\t\t\t}\n\t\t\treturn client.actions.fetchBalance(address, mergedOptions.commitment);\n\t\t},\n\t\tkey: accountKey ?? null,\n\t\tready: account !== undefined,\n\t});\n\n\tuseEffect(() => {\n\t\tif (!address) {\n\t\t\treturn;\n\t\t}\n\t\tconst commitment = mergedOptions.commitment;\n\t\tif (mergedOptions.fetch !== false && account === undefined) {\n\t\t\tvoid client.actions.fetchBalance(address, commitment).catch(() => undefined);\n\t\t}\n\t\tif (mergedOptions.watch) {\n\t\t\tconst watcher = client.watchers.watchBalance({ address, commitment }, () => undefined);\n\t\t\treturn () => {\n\t\t\t\twatcher.abort();\n\t\t\t};\n\t\t}\n\t\treturn undefined;\n\t}, [account, address, client, mergedOptions.commitment, mergedOptions.fetch, mergedOptions.watch]);\n\n\tconst lamports = account?.lamports ?? null;\n\tconst fetching = account?.fetching ?? false;\n\tconst slot = account?.slot;\n\tconst error = account?.error;\n\n\treturn useMemo(\n\t\t() => ({\n\t\t\taccount,\n\t\t\terror,\n\t\t\tfetching,\n\t\t\tlamports,\n\t\t\tslot,\n\t\t}),\n\t\t[account, error, fetching, lamports, slot],\n\t);\n}\n\ntype UseTransactionPoolConfig = Readonly<{\n\tinstructions?: TransactionInstructionList;\n\tlatestBlockhash?: UseLatestBlockhashParameters;\n}>;\n\ntype UseTransactionPoolPrepareOptions = TransactionPoolPrepareOptions;\n\ntype UseTransactionPoolSignOptions = TransactionPoolSignOptions;\n\ntype UseTransactionPoolSendOptions = TransactionPoolSendOptions;\n\ntype UseTransactionPoolPrepareAndSendOptions = TransactionPoolPrepareAndSendOptions;\n\ntype TransactionSignature = Signature;\n\n/**\n * Manage a mutable set of instructions and use the transaction helper to prepare/sign/send.\n *\n * @example\n * ```ts\n * const pool = useTransactionPool();\n * pool.addInstruction(ix);\n * const prepared = await pool.prepare({ feePayer });\n * await pool.send();\n * ```\n */\nexport function useTransactionPool(config: UseTransactionPoolConfig = {}): Readonly<{\n\taddInstruction(instruction: TransactionInstructionInput): void;\n\taddInstructions(instructionSet: TransactionInstructionList): void;\n\tclearInstructions(): void;\n\tinstructions: TransactionInstructionList;\n\tisPreparing: boolean;\n\tisSending: boolean;\n\tprepared: TransactionPrepared | null;\n\tprepare(options?: UseTransactionPoolPrepareOptions): Promise<TransactionPrepared>;\n\tprepareError: unknown;\n\tprepareStatus: AsyncState<TransactionPrepared>['status'];\n\tremoveInstruction(index: number): void;\n\treplaceInstructions(instructionSet: TransactionInstructionList): void;\n\treset(): void;\n\tsend(options?: UseTransactionPoolSendOptions): Promise<TransactionSignature>;\n\tsendError: unknown;\n\tsendSignature: TransactionSignature | null;\n\tsendStatus: AsyncState<TransactionSignature>['status'];\n\tprepareAndSend(\n\t\trequest?: UseTransactionPoolPrepareAndSendOptions,\n\t\tsendOptions?: TransactionSendOptions,\n\t): Promise<TransactionSignature>;\n\tsign(options?: UseTransactionPoolSignOptions): ReturnType<TransactionHelper['sign']>;\n\ttoWire(options?: UseTransactionPoolSignOptions): ReturnType<TransactionHelper['toWire']>;\n\tlatestBlockhash: UseLatestBlockhashReturnType;\n}> {\n\tconst initialInstructions = useMemo<TransactionInstructionList>(\n\t\t() => config.instructions ?? [],\n\t\t[config.instructions],\n\t);\n\tconst client = useSolanaClient();\n\tconst helper = client.helpers.transaction;\n\tconst swrRefreshInterval = config.latestBlockhash?.swr?.refreshInterval;\n\tconst blockhashRefreshInterval =\n\t\tconfig.latestBlockhash?.refreshInterval ??\n\t\t(typeof swrRefreshInterval === 'number' ? swrRefreshInterval : undefined);\n\tconst blockhashMaxAgeMs = blockhashRefreshInterval ?? 30_000;\n\tconst controller = useMemo<TransactionPoolController>(\n\t\t() =>\n\t\t\tcreateTransactionPoolController({\n\t\t\t\tblockhashMaxAgeMs,\n\t\t\t\thelper,\n\t\t\t\tinitialInstructions,\n\t\t\t}),\n\t\t[blockhashMaxAgeMs, helper, initialInstructions],\n\t);\n\tconst latestBlockhash = useLatestBlockhash(config.latestBlockhash);\n\n\tuseEffect(() => {\n\t\tconst value = latestBlockhash.data?.value;\n\t\tif (!value) {\n\t\t\tcontroller.setLatestBlockhashCache(undefined);\n\t\t\treturn;\n\t\t}\n\t\tconst cache: LatestBlockhashCache = {\n\t\t\tupdatedAt: latestBlockhash.dataUpdatedAt ?? Date.now(),\n\t\t\tvalue,\n\t\t};\n\t\tcontroller.setLatestBlockhashCache(cache);\n\t}, [controller, latestBlockhash.data, latestBlockhash.dataUpdatedAt]);\n\n\tconst instructions = useSyncExternalStore<TransactionInstructionList>(\n\t\tcontroller.subscribeInstructions,\n\t\tcontroller.getInstructions,\n\t\tcontroller.getInstructions,\n\t);\n\tconst prepared = useSyncExternalStore<TransactionPrepared | null>(\n\t\tcontroller.subscribePrepared,\n\t\tcontroller.getPrepared,\n\t\tcontroller.getPrepared,\n\t);\n\tconst prepareState = useSyncExternalStore<AsyncState<TransactionPrepared>>(\n\t\tcontroller.subscribePrepareState,\n\t\tcontroller.getPrepareState,\n\t\tcontroller.getPrepareState,\n\t);\n\tconst sendState = useSyncExternalStore<AsyncState<TransactionSignature>>(\n\t\tcontroller.subscribeSendState,\n\t\tcontroller.getSendState,\n\t\tcontroller.getSendState,\n\t);\n\n\treturn {\n\t\taddInstruction: controller.addInstruction,\n\t\taddInstructions: controller.addInstructions,\n\t\tclearInstructions: controller.clearInstructions,\n\t\tinstructions,\n\t\tisPreparing: prepareState.status === 'loading',\n\t\tisSending: sendState.status === 'loading',\n\t\tprepared,\n\t\tprepare: controller.prepare,\n\t\tprepareError: prepareState.error ?? null,\n\t\tprepareStatus: prepareState.status,\n\t\tremoveInstruction: controller.removeInstruction,\n\t\treplaceInstructions: controller.replaceInstructions,\n\t\treset: controller.reset,\n\t\tsend: controller.send,\n\t\tsendError: sendState.error ?? null,\n\t\tsendSignature: sendState.data ?? null,\n\t\tsendStatus: sendState.status,\n\t\tprepareAndSend: controller.prepareAndSend,\n\t\tsign: controller.sign,\n\t\ttoWire: controller.toWire,\n\t\tlatestBlockhash,\n\t};\n}\n\ntype SendTransactionSignature = Signature;\n\ntype UseSendTransactionResult = Readonly<{\n\terror: unknown;\n\tisSending: boolean;\n\treset(): void;\n\tsend(\n\t\trequest: TransactionPrepareAndSendRequest,\n\t\toptions?: TransactionSendOptions,\n\t): Promise<SendTransactionSignature>;\n\tsendPrepared(prepared: TransactionPrepared, options?: TransactionSendOptions): Promise<SendTransactionSignature>;\n\tsignature: SendTransactionSignature | null;\n\tstatus: AsyncState<SendTransactionSignature>['status'];\n}>;\n\n/**\n * General-purpose helper that prepares and sends arbitrary transactions through {@link TransactionHelper}.\n *\n * @example\n * ```ts\n * const { send, status } = useSendTransaction();\n * await send({ instructions: [ix], feePayer });\n * ```\n */\nexport function useSendTransaction(): UseSendTransactionResult {\n\tconst client = useSolanaClient();\n\tconst helper = client.transaction;\n\tconst session = useWalletSession();\n\tconst [state, setState] = useState<AsyncState<SendTransactionSignature>>(() =>\n\t\tcreateInitialAsyncState<SendTransactionSignature>(),\n\t);\n\n\tconst execute = useCallback(\n\t\tasync (operation: () => Promise<SendTransactionSignature>): Promise<SendTransactionSignature> => {\n\t\t\tsetState(createAsyncState<SendTransactionSignature>('loading'));\n\t\t\ttry {\n\t\t\t\tconst signature = await operation();\n\t\t\t\tsetState(createAsyncState<SendTransactionSignature>('success', { data: signature }));\n\t\t\t\treturn signature;\n\t\t\t} catch (error) {\n\t\t\t\tsetState(createAsyncState<SendTransactionSignature>('error', { error }));\n\t\t\t\tthrow error;\n\t\t\t}\n\t\t},\n\t\t[],\n\t);\n\n\tconst ensureAuthority = useCallback(\n\t\t(request: TransactionPrepareAndSendRequest): TransactionPrepareAndSendRequest => {\n\t\t\tif (request.authority) {\n\t\t\t\treturn request;\n\t\t\t}\n\t\t\tif (!session) {\n\t\t\t\tthrow new Error('Connect a wallet or supply an `authority` before sending transactions.');\n\t\t\t}\n\t\t\treturn { ...request, authority: session };\n\t\t},\n\t\t[session],\n\t);\n\n\tconst send = useCallback(\n\t\tasync (request: TransactionPrepareAndSendRequest, options?: TransactionSendOptions) => {\n\t\t\tconst normalizedRequest = ensureAuthority(request);\n\t\t\treturn execute(() => helper.prepareAndSend(normalizedRequest, options));\n\t\t},\n\t\t[ensureAuthority, execute, helper],\n\t);\n\n\tconst sendPrepared = useCallback(\n\t\tasync (prepared: TransactionPrepared, options?: TransactionSendOptions) =>\n\t\t\texecute(() => helper.send(prepared, options)),\n\t\t[execute, helper],\n\t);\n\n\tconst reset = useCallback(() => {\n\t\tsetState(createInitialAsyncState<SendTransactionSignature>());\n\t}, []);\n\n\treturn {\n\t\terror: state.error ?? null,\n\t\tisSending: state.status === 'loading',\n\t\treset,\n\t\tsend,\n\t\tsendPrepared,\n\t\tsignature: state.data ?? null,\n\t\tstatus: state.status,\n\t};\n}\n\nexport type UseSignatureStatusOptions = Readonly<{\n\tconfig?: SignatureStatusConfig;\n\tdisabled?: boolean;\n\tswr?: UseSolanaRpcQueryOptions<SignatureStatusValue | null>['swr'];\n}>;\n\nexport type UseSignatureStatusParameters = UseSignatureStatusOptions &\n\tReadonly<{\n\t\tsignature?: SignatureLike;\n\t}>;\n\ntype SignatureStatusState = SolanaQueryResult<SignatureStatusValue | null> &\n\tReadonly<{\n\t\tconfirmationStatus: ConfirmationCommitment | null;\n\t\tsignatureStatus: SignatureStatusValue | null;\n\t}>;\n\n/**\n * Fetch the RPC status for a transaction signature.\n *\n * @example\n * ```ts\n * const { signatureStatus, confirmationStatus } = useSignatureStatus(sig);\n * ```\n */\nexport function useSignatureStatus(\n\tsignatureInput?: SignatureLike,\n\toptions: UseSignatureStatusOptions = {},\n): SignatureStatusState {\n\tconst { config, disabled: disabledOption, swr } = options;\n\tconst signature = useMemo(() => normalizeSignature(signatureInput), [signatureInput]);\n\tconst signatureKey = signature?.toString() ?? null;\n\tconst fetcher = useCallback(\n\t\tasync (client: SolanaClient) => {\n\t\t\tif (!signatureKey) {\n\t\t\t\tthrow new Error('Provide a signature before querying its status.');\n\t\t\t}\n\t\t\tif (!signature) {\n\t\t\t\tthrow new Error('Provide a signature before querying its status.');\n\t\t\t}\n\t\t\tconst plan = client.runtime.rpc.getSignatureStatuses([signature], config);\n\t\t\tconst response = await plan.send({ abortSignal: AbortSignal.timeout(SIGNATURE_STATUS_TIMEOUT_MS) });\n\t\t\treturn response.value[0] ?? null;\n\t\t},\n\t\t[config, signature, signatureKey],\n\t);\n\tconst disabled = disabledOption ?? !signatureKey;\n\tconst query = useSolanaRpcQuery<SignatureStatusValue | null>(\n\t\t'signatureStatus',\n\t\tgetSignatureStatusKey({ signature: signatureInput, config }),\n\t\tfetcher,\n\t\t{\n\t\t\tdisabled,\n\t\t\tswr,\n\t\t},\n\t);\n\tconst confirmationStatus = deriveConfirmationStatus(query.data ?? null);\n\treturn {\n\t\t...query,\n\t\tconfirmationStatus,\n\t\tsignatureStatus: query.data ?? null,\n\t};\n}\n\nexport type SignatureWaitStatus = 'error' | 'idle' | 'success' | 'waiting';\n\nexport type UseWaitForSignatureOptions = Omit<UseSignatureStatusOptions, 'disabled'> &\n\tReadonly<{\n\t\tcommitment?: ConfirmationCommitment;\n\t\tdisabled?: boolean;\n\t\tsubscribe?: boolean;\n\t\twatchCommitment?: ConfirmationCommitment;\n\t}>;\n\ntype WaitForSignatureState = SignatureStatusState &\n\tReadonly<{\n\t\tisError: boolean;\n\t\tisSuccess: boolean;\n\t\tisWaiting: boolean;\n\t\twaitError: unknown;\n\t\twaitStatus: SignatureWaitStatus;\n\t}>;\n\n/**\n * Poll signature status until the desired commitment (or subscription notification) is reached.\n *\n * @example\n * ```ts\n * const { waitStatus, confirmationStatus } = useWaitForSignature(sig, { commitment: 'finalized' });\n * ```\n */\nexport function useWaitForSignature(\n\tsignatureInput?: SignatureLike,\n\toptions: UseWaitForSignatureOptions = {},\n): WaitForSignatureState {\n\tconst {\n\t\tcommitment = 'confirmed',\n\t\tdisabled: disabledOption,\n\t\tsubscribe = true,\n\t\twatchCommitment,\n\t\t...signatureStatusOptions\n\t} = options;\n\tconst { swr, ...restStatusOptions } = signatureStatusOptions;\n\tconst subscribeCommitment = watchCommitment ?? commitment;\n\tconst client = useSolanaClient();\n\tconst normalizedSignature = useMemo(() => normalizeSignature(signatureInput), [signatureInput]);\n\tconst disabled = disabledOption ?? !normalizedSignature;\n\tconst statusQuery = useSignatureStatus(signatureInput, {\n\t\t...restStatusOptions,\n\t\tswr: {\n\t\t\trefreshInterval: 2_000,\n\t\t\t...swr,\n\t\t},\n\t\tdisabled,\n\t});\n\tconst [subscriptionSettled, setSubscriptionSettled] = useState(false);\n\n\tuseEffect(() => {\n\t\tif (normalizedSignature === undefined) {\n\t\t\tsetSubscriptionSettled(false);\n\t\t\treturn;\n\t\t}\n\t\tsetSubscriptionSettled(false);\n\t}, [normalizedSignature]);\n\n\tuseEffect(() => {\n\t\tif (!normalizedSignature || disabled || !subscribe) {\n\t\t\treturn;\n\t\t}\n\t\tconst subscription = client.watchers.watchSignature(\n\t\t\t{\n\t\t\t\tcommitment: subscribeCommitment,\n\t\t\t\tenableReceivedNotification: true,\n\t\t\t\tsignature: normalizedSignature,\n\t\t\t},\n\t\t\t() => {\n\t\t\t\tsetSubscriptionSettled(true);\n\t\t\t},\n\t\t);\n\t\treturn () => {\n\t\t\tsubscription.abort();\n\t\t};\n\t}, [client, disabled, normalizedSignature, subscribe, subscribeCommitment]);\n\n\tconst hasSignature = Boolean(normalizedSignature) && !disabled;\n\tconst signatureError = statusQuery.signatureStatus?.err ?? null;\n\tconst waitError = statusQuery.error ?? signatureError ?? null;\n\tconst meetsCommitment = confirmationMeetsCommitment(statusQuery.confirmationStatus, commitment);\n\tconst settled = subscriptionSettled || meetsCommitment;\n\n\tlet waitStatus: SignatureWaitStatus = 'idle';\n\tif (!hasSignature) {\n\t\twaitStatus = 'idle';\n\t} else if (waitError) {\n\t\twaitStatus = 'error';\n\t} else if (settled) {\n\t\twaitStatus = 'success';\n\t} else {\n\t\twaitStatus = 'waiting';\n\t}\n\n\treturn {\n\t\t...statusQuery,\n\t\tisError: waitStatus === 'error',\n\t\tisSuccess: waitStatus === 'success',\n\t\tisWaiting: waitStatus === 'waiting',\n\t\twaitError,\n\t\twaitStatus,\n\t};\n}\n\ntype UseLookupTableOptions = Readonly<{\n\tcommitment?: Commitment;\n\tswr?: Omit<SWRConfiguration<AddressLookupTableData, unknown, BareFetcher<AddressLookupTableData>>, 'suspense'>;\n}>;\n\n/**\n * Fetch an address lookup table.\n *\n * @example\n * ```ts\n * const { data, isLoading, error } = useLookupTable(lutAddress);\n * ```\n */\nexport function useLookupTable(\n\taddressLike?: AddressLike,\n\toptions: UseLookupTableOptions = {},\n): SolanaQueryResult<AddressLookupTableData> {\n\tconst addr = useMemo(() => (addressLike ? toAddress(addressLike) : undefined), [addressLike]);\n\tconst key = addr?.toString() ?? null;\n\tconst fetcher = useCallback(\n\t\tasync (c: SolanaClient) => {\n\t\t\tif (!addr) throw new Error('Address required');\n\t\t\treturn c.actions.fetchLookupTable(addr, options.commitment);\n\t\t},\n\t\t[addr, options.commitment],\n\t);\n\treturn useSolanaRpcQuery<AddressLookupTableData>('lookupTable', [key, options.commitment], fetcher, {\n\t\tdisabled: !addr,\n\t\tswr: options.swr,\n\t});\n}\n\ntype UseNonceAccountOptions = Readonly<{\n\tcommitment?: Commitment;\n\tswr?: Omit<SWRConfiguration<NonceAccountData, unknown, BareFetcher<NonceAccountData>>, 'suspense'>;\n}>;\n\n/**\n * Fetch a nonce account.\n *\n * @example\n * ```ts\n * const { data, isLoading, error } = useNonceAccount(nonceAddress);\n * ```\n */\nexport function useNonceAccount(\n\taddressLike?: AddressLike,\n\toptions: UseNonceAccountOptions = {},\n): SolanaQueryResult<NonceAccountData> {\n\tconst addr = useMemo(() => (addressLike ? toAddress(addressLike) : undefined), [addressLike]);\n\tconst key = addr?.toString() ?? null;\n\tconst fetcher = useCallback(\n\t\tasync (c: SolanaClient) => {\n\t\t\tif (!addr) throw new Error('Address required');\n\t\t\treturn c.actions.fetchNonceAccount(addr, options.commitment);\n\t\t},\n\t\t[addr, options.commitment],\n\t);\n\treturn useSolanaRpcQuery<NonceAccountData>('nonceAccount', [key, options.commitment], fetcher, {\n\t\tdisabled: !addr,\n\t\tswr: options.swr,\n\t});\n}\n\n// Public hook type aliases for consistency\nexport type UseAccountParameters = Readonly<{ address?: AddressLike; options?: UseAccountOptions }>;\nexport type UseAccountReturnType = ReturnType<typeof useAccount>;\n\nexport type UseBalanceParameters = Readonly<{ address?: AddressLike; options?: UseBalanceOptions }>;\nexport type UseBalanceReturnType = ReturnType<typeof useBalance>;\n\nexport type UseClusterStateParameters = undefined;\nexport type UseClusterStateReturnType = ReturnType<typeof useClusterState>;\n\nexport type UseClusterStatusParameters = undefined;\nexport type UseClusterStatusReturnType = ReturnType<typeof useClusterStatus>;\n\nexport type UseConnectWalletParameters = undefined;\nexport type UseConnectWalletReturnType = ReturnType<typeof useConnectWallet>;\n\nexport type UseDisconnectWalletParameters = undefined;\nexport type UseDisconnectWalletReturnType = ReturnType<typeof useDisconnectWallet>;\n\nexport type UseSendTransactionParameters = undefined;\nexport type UseSendTransactionReturnType = ReturnType<typeof useSendTransaction>;\n\nexport type UseSignatureStatusReturnType = SignatureStatusState;\n\nexport type UseWaitForSignatureParameters = Readonly<{\n\toptions?: UseWaitForSignatureOptions;\n\tsignature?: SignatureLike;\n}>;\n\nexport type UseWaitForSignatureReturnType = WaitForSignatureState;\n\nexport type UseSolTransferParameters = undefined;\nexport type UseSolTransferReturnType = ReturnType<typeof useSolTransfer>;\nexport type UseSplTokenParameters = Readonly<{ mint: AddressLike; options?: UseSplTokenOptions }>;\nexport type UseSplTokenReturnType = ReturnType<typeof useSplToken>;\n\nexport type UseTransactionPoolParameters = Readonly<{ config?: UseTransactionPoolConfig }>;\nexport type UseTransactionPoolReturnType = ReturnType<typeof useTransactionPool>;\n\nexport type UseWalletParameters = undefined;\nexport type UseWalletReturnType = ReturnType<typeof useWallet>;\n\nexport type UseWalletSessionParameters = undefined;\nexport type UseWalletSessionReturnType = ReturnType<typeof useWalletSession>;\n\nexport type UseWalletActionsParameters = undefined;\nexport type UseWalletActionsReturnType = ReturnType<typeof useWalletActions>;\n\nexport type UseLookupTableParameters = Readonly<{ address?: AddressLike; options?: UseLookupTableOptions }>;\nexport type UseLookupTableReturnType = ReturnType<typeof useLookupTable>;\n\nexport type UseNonceAccountParameters = Readonly<{ address?: AddressLike; options?: UseNonceAccountOptions }>;\nexport type UseNonceAccountReturnType = ReturnType<typeof useNonceAccount>;\n","'use client';\n\nimport type { JSX, ReactNode } from 'react';\nimport { useMemo, useRef } from 'react';\nimport { type Cache, SWRConfig, type SWRConfiguration } from 'swr';\n\nimport { QuerySuspenseContext } from './querySuspenseContext';\nimport { useClientStore } from './useClientStore';\n\nconst createCache = (): Cache => new Map<string, unknown>() as Cache;\n\nconst DEFAULT_QUERY_CONFIG: SWRConfiguration = Object.freeze({\n\tdedupingInterval: 2_000,\n\tfocusThrottleInterval: 5_000,\n\tprovider: () => createCache(),\n\trevalidateIfStale: true,\n\trevalidateOnFocus: true,\n\trevalidateOnReconnect: true,\n});\n\ntype SolanaQueryProviderProps = Readonly<{\n\tchildren: ReactNode;\n\tconfig?: SWRConfiguration;\n\tresetOnClusterChange?: boolean;\n\tsuspense?: boolean;\n}>;\n\nexport function SolanaQueryProvider({\n\tchildren,\n\tconfig,\n\tresetOnClusterChange = true,\n\tsuspense,\n}: SolanaQueryProviderProps): JSX.Element {\n\tconst cluster = useClientStore((state) => state.cluster);\n\tconst cacheRegistryRef = useRef<Map<string, Cache>>(new Map());\n\tconst cacheKey = resetOnClusterChange ? `${cluster.endpoint}|${cluster.commitment}` : 'global';\n\tconst cache = useMemo<Cache>(() => {\n\t\tconst registry = cacheRegistryRef.current;\n\t\tif (!resetOnClusterChange) {\n\t\t\tconst existing = registry.get('global');\n\t\t\tif (existing) {\n\t\t\t\treturn existing;\n\t\t\t}\n\t\t\tconst next = createCache();\n\t\t\tregistry.set('global', next);\n\t\t\treturn next;\n\t\t}\n\t\tconst next = createCache();\n\t\tregistry.set(cacheKey, next);\n\t\treturn next;\n\t}, [cacheKey, resetOnClusterChange]);\n\n\tconst value = useMemo<SWRConfiguration>(() => {\n\t\tconst base = {\n\t\t\t...DEFAULT_QUERY_CONFIG,\n\t\t\t...config,\n\t\t};\n\t\tif (!config?.provider) {\n\t\t\tbase.provider = () => cache;\n\t\t}\n\t\tif (base.suspense === undefined && suspense !== undefined) {\n\t\t\tbase.suspense = suspense;\n\t\t}\n\t\treturn base;\n\t}, [cache, config, suspense]);\n\n\treturn (\n\t\t<QuerySuspenseContext.Provider value={suspense}>\n\t\t\t<SWRConfig value={value}>{children}</SWRConfig>\n\t\t</QuerySuspenseContext.Provider>\n\t);\n}\n","'use client';\n\nimport type {\n\tCreateDefaultClientOptions,\n\tSerializableSolanaState,\n\tSolanaClient,\n\tSolanaClientConfig,\n} from '@solana/client';\nimport {\n\tdeserializeSolanaState,\n\tresolveClientConfig,\n\tserializeSolanaState,\n\tsubscribeSolanaState,\n} from '@solana/client';\nimport type { ReactNode } from 'react';\nimport { useEffect, useRef, useState } from 'react';\nimport type { SWRConfiguration } from 'swr';\n\nimport { SolanaClientProvider, useSolanaClient } from './context';\nimport { useConnectWallet, useWallet } from './hooks';\nimport { SolanaQueryProvider } from './QueryProvider';\n\ntype QueryLayerConfig = Readonly<{\n\tconfig?: SWRConfiguration;\n\tresetOnClusterChange?: boolean;\n\tsuspense?: boolean;\n\tdisabled?: boolean;\n}>;\n\ntype StorageAdapter = Readonly<{\n\tgetItem(key: string): string | null;\n\tremoveItem(key: string): void;\n\tsetItem(key: string, value: string): void;\n}>;\n\ntype WalletPersistenceConfig = Readonly<{\n\tautoConnect?: boolean;\n\tstorage?: StorageAdapter | null;\n\tstorageKey?: string;\n}>;\n\ntype PersistedSerializableState = Readonly<{\n\tlegacyConnectorId: string | null;\n\tstate: SerializableSolanaState | null;\n}>;\n\ntype SolanaProviderProps = Readonly<{\n\tchildren: ReactNode;\n\tclient?: SolanaClient;\n\tconfig?: SolanaClientConfig | CreateDefaultClientOptions;\n\tquery?: QueryLayerConfig | false;\n\twalletPersistence?: WalletPersistenceConfig | false;\n}>;\n\n/**\n * Convenience provider that composes {@link SolanaClientProvider} with {@link SolanaQueryProvider}.\n *\n * Useful when you want one drop-in wrapper that handles client setup plus SWR configuration without\n * introducing any additional contexts.\n */\nexport function SolanaProvider({ children, client, config, query, walletPersistence }: SolanaProviderProps) {\n\tconst shouldIncludeQueryLayer = query !== false && query?.disabled !== true;\n\tconst queryProps: QueryLayerConfig = shouldIncludeQueryLayer && query ? query : {};\n\tconst persistenceConfig = walletPersistence === false ? undefined : (walletPersistence ?? {});\n\tconst storage = persistenceConfig ? (persistenceConfig.storage ?? getDefaultStorage()) : null;\n\tconst storageKey = persistenceConfig?.storageKey ?? DEFAULT_STORAGE_KEY;\n\tconst persistedState = persistenceConfig\n\t\t? readPersistedState(storage, storageKey)\n\t\t: { legacyConnectorId: null, state: null };\n\tconst normalizedConfig = config ? resolveClientConfig(config) : resolveClientConfig();\n\tconst clientConfig = persistenceConfig\n\t\t? { ...normalizedConfig, initialState: normalizedConfig.initialState ?? persistedState.state ?? undefined }\n\t\t: normalizedConfig;\n\n\tconst content = shouldIncludeQueryLayer ? (\n\t\t<SolanaQueryProvider\n\t\t\tconfig={queryProps.config}\n\t\t\tresetOnClusterChange={queryProps.resetOnClusterChange}\n\t\t\tsuspense={queryProps.suspense}\n\t\t>\n\t\t\t{children}\n\t\t</SolanaQueryProvider>\n\t) : (\n\t\tchildren\n\t);\n\n\treturn (\n\t\t<SolanaClientProvider client={client} config={clientConfig}>\n\t\t\t{persistenceConfig ? (\n\t\t\t\t<WalletPersistence\n\t\t\t\t\tautoConnect={persistenceConfig.autoConnect}\n\t\t\t\t\tinitialState={clientConfig?.initialState ?? persistedState.state}\n\t\t\t\t\tlegacyConnectorId={persistedState.legacyConnectorId}\n\t\t\t\t\tstorage={storage}\n\t\t\t\t\tstorageKey={storageKey}\n\t\t\t\t/>\n\t\t\t) : null}\n\t\t\t{content}\n\t\t</SolanaClientProvider>\n\t);\n}\n\nconst DEFAULT_STORAGE_KEY = 'solana:last-connector';\n\nfunction readPersistedState(storage: StorageAdapter | null, storageKey: string): PersistedSerializableState {\n\tif (!storage) {\n\t\treturn { legacyConnectorId: null, state: null };\n\t}\n\tconst raw = safelyRead(() => storage.getItem(storageKey));\n\tif (!raw) {\n\t\treturn { legacyConnectorId: null, state: null };\n\t}\n\tconst parsed = deserializeSolanaState(raw);\n\tif (parsed) {\n\t\treturn { legacyConnectorId: null, state: parsed };\n\t}\n\treturn { legacyConnectorId: raw, state: null };\n}\n\ntype WalletPersistenceProps = WalletPersistenceConfig &\n\tReadonly<{\n\t\tinitialState?: SerializableSolanaState | null;\n\t\tlegacyConnectorId?: string | null;\n\t}>;\n\nfunction WalletPersistence({\n\tautoConnect = true,\n\tinitialState = null,\n\tlegacyConnectorId = null,\n\tstorage,\n\tstorageKey = DEFAULT_STORAGE_KEY,\n}: WalletPersistenceProps) {\n\tconst wallet = useWallet();\n\tconst connectWallet = useConnectWallet();\n\tconst client = useSolanaClient();\n\tconst storageRef = useRef<StorageAdapter | null>(storage ?? getDefaultStorage());\n\tconst [hasAttemptedAutoConnect, setHasAttemptedAutoConnect] = useState(false);\n\tconst clientRef = useRef<SolanaClient | null>(null);\n\tconst persistedStateRef = useRef<SerializableSolanaState | null>(initialState);\n\tconst legacyConnectorIdRef = useRef<string | null>(legacyConnectorId);\n\n\tuseEffect(() => {\n\t\tstorageRef.current = storage ?? getDefaultStorage();\n\t}, [storage]);\n\n\tuseEffect(() => {\n\t\tif (clientRef.current !== client) {\n\t\t\tclientRef.current = client;\n\t\t\tsetHasAttemptedAutoConnect(false);\n\t\t}\n\t}, [client]);\n\n\tuseEffect(() => {\n\t\tconst activeStorage = storageRef.current;\n\t\tif (!activeStorage) return;\n\t\tconst unsubscribe = subscribeSolanaState(client, (state) => {\n\t\t\tpersistedStateRef.current = state;\n\t\t\tlegacyConnectorIdRef.current = null;\n\t\t\tsafelyWrite(() => activeStorage.setItem(storageKey, serializeSolanaState(state)));\n\t\t});\n\t\treturn () => {\n\t\t\tunsubscribe();\n\t\t};\n\t}, [client, storageKey]);\n\n\tuseEffect(() => {\n\t\tpersistedStateRef.current = initialState ?? persistedStateRef.current;\n\t\tlegacyConnectorIdRef.current = legacyConnectorId;\n\t}, [initialState, legacyConnectorId]);\n\n\tuseEffect(() => {\n\t\tconst persisted = persistedStateRef.current ?? initialState;\n\t\tconst persistedAutoConnect = persisted?.autoconnect ?? false;\n\t\tconst autoConnectEnabled = persistedAutoConnect || autoConnect;\n\t\tif (!autoConnectEnabled || hasAttemptedAutoConnect) {\n\t\t\treturn;\n\t\t}\n\t\tif (wallet.status === 'connected' || wallet.status === 'connecting') {\n\t\t\tsetHasAttemptedAutoConnect(true);\n\t\t\treturn;\n\t\t}\n\t\tconst connectorId = persisted?.lastConnectorId ?? legacyConnectorIdRef.current;\n\t\tconst shouldAutoConnect = autoConnectEnabled && connectorId;\n\t\tif (!shouldAutoConnect || !connectorId) return;\n\t\tconst connector = client.connectors.get(connectorId);\n\t\tif (!connector) return;\n\n\t\tvoid (async () => {\n\t\t\ttry {\n\t\t\t\tawait connectWallet(connectorId, { autoConnect: true, allowInteractiveFallback: false });\n\t\t\t} catch {\n\t\t\t\t// Ignore auto-connect failures; consumers can handle manual retries via hooks.\n\t\t\t} finally {\n\t\t\t\tsetHasAttemptedAutoConnect(true);\n\t\t\t}\n\t\t})();\n\t}, [autoConnect, client, connectWallet, hasAttemptedAutoConnect, initialState, wallet.status]);\n\n\treturn null;\n}\n\nfunction safelyRead(reader: () => string | null): string | null {\n\ttry {\n\t\treturn reader();\n\t} catch {\n\t\treturn null;\n\t}\n}\n\nfunction safelyWrite(writer: () => void) {\n\ttry {\n\t\twriter();\n\t} catch {\n\t\t// Ignore write failures (private browsing, SSR, etc.).\n\t}\n}\n\nfunction getDefaultStorage(): StorageAdapter | null {\n\tif (typeof globalThis !== 'object' || globalThis === null) {\n\t\treturn null;\n\t}\n\tconst candidate = (globalThis as Record<string, unknown>).localStorage as StorageAdapter | undefined;\n\tif (!candidate) {\n\t\treturn null;\n\t}\n\treturn candidate;\n}\n","import type { WalletConnector, WalletSession, WalletStatus } from '@solana/client';\nimport type { ReactNode } from 'react';\nimport { useCallback, useEffect, useMemo, useState } from 'react';\n\nimport { useSolanaClient } from './context';\nimport { useConnectWallet, useDisconnectWallet, useWallet } from './hooks';\n\ntype WalletConnectionState = Readonly<{\n\tconnect(\n\t\tconnectorId: string,\n\t\toptions?: Readonly<{ autoConnect?: boolean; allowInteractiveFallback?: boolean }>,\n\t): Promise<void>;\n\tconnected: boolean;\n\tconnecting: boolean;\n\tconnectors: readonly WalletConnector[];\n\tcurrentConnector?: WalletConnector;\n\tconnectorId?: string;\n\tdisconnect(): Promise<void>;\n\terror: unknown;\n\tstatus: WalletStatus['status'];\n\twallet: WalletSession | undefined;\n}>;\n\ntype WalletConnectionOptions = Readonly<{\n\tconnectors?: readonly WalletConnector[];\n}>;\n\nexport type UseWalletConnectionParameters = WalletConnectionOptions;\nexport type UseWalletConnectionReturnType = WalletConnectionState;\n\n/**\n * Collect everything needed to build wallet connection UIs into a single hook.\n *\n * @example\n * ```tsx\n * const { connectors, connect, disconnect, status } = useWalletConnection();\n * return connectors.map((c) => (\n * <button key={c.id} onClick={() => connect(c.id)} disabled={status === 'connecting'}>\n * {c.name}\n * </button>\n * ));\n * ```\n */\nexport function useWalletConnection(options: WalletConnectionOptions = {}): WalletConnectionState {\n\tconst wallet = useWallet();\n\tconst connectWallet = useConnectWallet();\n\tconst disconnectWallet = useDisconnectWallet();\n\tconst client = useSolanaClient();\n\tconst [isHydrated, setIsHydrated] = useState(false);\n\tuseEffect(() => {\n\t\tsetIsHydrated(true);\n\t}, []);\n\tconst connectors = isHydrated ? (options.connectors ?? client.connectors.all) : [];\n\tconst connect = useCallback(\n\t\t(\n\t\t\tconnectorId: string,\n\t\t\tconnectOptions?: Readonly<{ autoConnect?: boolean; allowInteractiveFallback?: boolean }>,\n\t\t) => connectWallet(connectorId, connectOptions),\n\t\t[connectWallet],\n\t);\n\tconst disconnect = useCallback(() => disconnectWallet(), [disconnectWallet]);\n\n\tconst state = useMemo<WalletConnectionState>(() => {\n\t\tconst connectorId = 'connectorId' in wallet ? wallet.connectorId : undefined;\n\t\tconst currentConnector = connectorId ? connectors.find((connector) => connector.id === connectorId) : undefined;\n\t\tconst session: WalletSession | undefined = wallet.status === 'connected' ? wallet.session : undefined;\n\t\tconst error = wallet.status === 'error' ? (wallet.error ?? null) : null;\n\n\t\treturn {\n\t\t\tconnect,\n\t\t\tconnected: wallet.status === 'connected',\n\t\t\tconnecting: wallet.status === 'connecting',\n\t\t\tconnectors,\n\t\t\tconnectorId,\n\t\t\tcurrentConnector,\n\t\t\tdisconnect,\n\t\t\terror,\n\t\t\tstatus: wallet.status,\n\t\t\twallet: session,\n\t\t};\n\t}, [connect, connectors, disconnect, wallet]);\n\n\treturn state;\n}\n\ntype WalletConnectionManagerProps = Readonly<{\n\tchildren: (state: WalletConnectionState) => ReactNode;\n\tconnectors?: readonly WalletConnector[];\n}>;\n\n/**\n * Render-prop helper that lets you easily wire wallet status into custom UIs.\n *\n * @example\n * ```tsx\n * <WalletConnectionManager>\n * {({ connectors, connect }) => connectors.map((c) => (\n * <button key={c.id} onClick={() => connect(c.id)}>{c.name}</button>\n * ))}\n * </WalletConnectionManager>\n * ```\n */\nexport function WalletConnectionManager({ children, connectors }: WalletConnectionManagerProps) {\n\tconst state = useWalletConnection({ connectors });\n\treturn <>{children(state)}</>;\n}\n\ntype WalletModalStateOptions = WalletConnectionOptions &\n\tReadonly<{\n\t\tcloseOnConnect?: boolean;\n\t\tinitialOpen?: boolean;\n\t}>;\n\nexport type WalletModalState = WalletConnectionState &\n\tReadonly<{\n\t\tclose(): void;\n\t\tisOpen: boolean;\n\t\topen(): void;\n\t\tselectedConnector: string | null;\n\t\tselect(connectorId: string | null): void;\n\t\ttoggle(): void;\n\t}>;\n\nexport type UseWalletModalStateParameters = WalletModalStateOptions;\nexport type UseWalletModalStateReturnType = WalletModalState;\n\n/**\n * Small state machine for wallet selection modals – keeps track of modal visibility and the currently\n * highlighted connector while reusing the connection state returned by {@link useWalletConnection}.\n *\n * @example\n * ```tsx\n * const modal = useWalletModalState();\n * return (\n * <>\n * <button onClick={modal.toggle}>Connect</button>\n * {modal.isOpen && modal.connectors.map((c) => (\n * <button key={c.id} onClick={() => modal.connect(c.id)}>{c.name}</button>\n * ))}\n * </>\n * );\n * ```\n */\nexport function useWalletModalState(options: WalletModalStateOptions = {}): WalletModalState {\n\tconst connection = useWalletConnection(options);\n\tconst [isOpen, setIsOpen] = useState(options.initialOpen ?? false);\n\tconst [selectedConnector, setSelectedConnector] = useState<string | null>(null);\n\tconst closeOnConnect = options.closeOnConnect ?? true;\n\n\tconst open = useCallback(() => setIsOpen(true), []);\n\tconst close = useCallback(() => setIsOpen(false), []);\n\tconst toggle = useCallback(() => setIsOpen((value) => !value), []);\n\tconst select = useCallback((connectorId: string | null) => setSelectedConnector(connectorId), []);\n\n\tconst connect = useCallback(\n\t\tasync (connectorId: string, connectOptions?: Readonly<{ autoConnect?: boolean }>) => {\n\t\t\tawait connection.connect(connectorId, connectOptions);\n\t\t\tsetSelectedConnector(connectorId);\n\t\t\tif (closeOnConnect) {\n\t\t\t\tsetIsOpen(false);\n\t\t\t}\n\t\t},\n\t\t[closeOnConnect, connection],\n\t);\n\n\treturn {\n\t\t...connection,\n\t\tclose,\n\t\tconnect,\n\t\tisOpen,\n\t\topen,\n\t\tselectedConnector,\n\t\tselect,\n\t\ttoggle,\n\t};\n}\n"]}