@satoshai/kit 0.7.0 → 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +173 -19
- package/dist/index.cjs +118 -0
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +385 -1
- package/dist/index.d.ts +385 -1
- package/dist/index.js +118 -0
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/errors.ts","../src/constants/stacks-provider-mapping.ts","../src/constants/storage-keys.ts","../src/constants/wallets.ts","../src/utils/get-stacks-wallets.ts","../src/provider/stacks-wallet-provider.helpers.ts","../src/hooks/use-xverse/use-xverse.helpers.ts","../src/hooks/use-xverse/use-xverse.ts","../src/utils/get-local-storage-wallet.ts","../src/provider/stacks-wallet-provider.tsx","../src/hooks/use-address.ts","../src/hooks/use-connect.ts","../src/hooks/use-disconnect.ts","../src/hooks/use-sign-message.ts","../src/hooks/use-sign-structured-message.ts","../src/hooks/use-sign-transaction.ts","../src/utils/get-network-from-address.ts","../src/hooks/use-transfer-stx.ts","../src/utils/to-clarity-value.ts","../src/hooks/use-write-contract/use-write-contract.helpers.ts","../src/hooks/use-write-contract/use-write-contract.ts","../src/hooks/use-bns-name.ts","../src/hooks/use-wallets.ts","../src/utils/create-contract-config.ts"],"names":["WalletConnect","getSelectedProvider","connect","useState","useEffect","DEFAULT_PROVIDERS","WALLET_CONNECT_PROVIDER","createContext","useRef","setSelectedProviderId","useCallback","gen","clearSelectedProviderId","wc","request","getSelectedProviderId","data","useMemo","jsx","useContext","error","response","uintCV","intCV","boolCV","contractPrincipalCV","standardPrincipalCV","noneCV","bufferCV","stringAsciiCV","stringUtf8CV","someCV","listCV","tupleCV","postConditionToHex","cvToHex","PostConditionMode","getPrimaryName"],"mappings":"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","file":"index.cjs","sourcesContent":["export type BaseErrorType = BaseError & { name: 'StacksKitError' }\n\nexport class BaseError extends Error {\n override name = 'StacksKitError'\n\n shortMessage: string\n\n constructor(shortMessage: string, options?: { cause?: Error; details?: string }) {\n const message = [\n shortMessage,\n options?.details && `Details: ${options.details}`,\n ].filter(Boolean).join('\\n\\n')\n\n super(message, options?.cause ? { cause: options.cause } : undefined)\n this.shortMessage = shortMessage\n }\n\n walk(fn?: (err: unknown) => boolean): unknown {\n return walk(this, fn)\n }\n}\n\nfunction walk(err: unknown, fn?: (err: unknown) => boolean): unknown {\n if (fn?.(err)) return err\n if (err && typeof err === 'object' && 'cause' in err) {\n return walk((err as { cause: unknown }).cause, fn)\n }\n return err\n}\n\nexport type WalletNotConnectedErrorType = WalletNotConnectedError & {\n name: 'WalletNotConnectedError'\n}\n\nexport class WalletNotConnectedError extends BaseError {\n override name = 'WalletNotConnectedError'\n\n constructor() {\n super('Wallet is not connected')\n }\n}\n\nexport type WalletNotFoundErrorType = WalletNotFoundError & {\n name: 'WalletNotFoundError'\n}\n\nexport class WalletNotFoundError extends BaseError {\n override name = 'WalletNotFoundError'\n\n wallet: string\n\n constructor({ wallet }: { wallet: string }) {\n super(`${wallet} wallet not found`, {\n details: 'The wallet extension may not be installed.',\n })\n this.wallet = wallet\n }\n}\n\nexport type UnsupportedMethodErrorType = UnsupportedMethodError & {\n name: 'UnsupportedMethodError'\n}\n\nexport class UnsupportedMethodError extends BaseError {\n override name = 'UnsupportedMethodError'\n\n method: string\n wallet: string\n\n constructor({ method, wallet }: { method: string; wallet: string }) {\n super(`${method} is not supported by ${wallet} wallet`)\n this.method = method\n this.wallet = wallet\n }\n}\n\nexport type WalletRequestErrorType = WalletRequestError & {\n name: 'WalletRequestError'\n}\n\nexport class WalletRequestError extends BaseError {\n override name = 'WalletRequestError'\n\n method: string\n wallet: string\n\n constructor({ method, wallet, cause }: { method: string; wallet: string; cause: Error }) {\n super(`${wallet} wallet request failed`, {\n cause,\n details: cause.message,\n })\n this.method = method\n this.wallet = wallet\n }\n}\n","import type { SupportedStacksWallet } from \"./wallets\";\n\nexport const STACKS_TO_STACKS_CONNECT_PROVIDERS: Record<\n SupportedStacksWallet,\n | \"LeatherProvider\"\n | \"XverseProviders.BitcoinProvider\"\n | \"AsignaProvider\"\n | \"FordefiProviders.UtxoProvider\"\n | \"WalletConnectProvider\"\n | \"OkxStacksProvider\"\n> = {\n xverse: \"XverseProviders.BitcoinProvider\",\n leather: \"LeatherProvider\",\n okx: \"OkxStacksProvider\",\n asigna: \"AsignaProvider\",\n fordefi: \"FordefiProviders.UtxoProvider\",\n \"wallet-connect\": \"WalletConnectProvider\",\n};\n\nexport const STACKS_CONNECT_TO_STACKS_PROVIDERS = Object.fromEntries(\n Object.entries(STACKS_TO_STACKS_CONNECT_PROVIDERS).map(([kit, connect]) => [\n connect,\n kit,\n ])\n) as Record<string, SupportedStacksWallet>;\n","export const LOCAL_STORAGE_STACKS = \"@satoshai/kit\";\n","export const SUPPORTED_STACKS_WALLETS = [\n \"xverse\",\n \"leather\",\n \"asigna\",\n \"fordefi\",\n \"wallet-connect\",\n \"okx\",\n] as const;\n\nexport type SupportedStacksWallet = (typeof SUPPORTED_STACKS_WALLETS)[number];\n","import {\n SUPPORTED_STACKS_WALLETS,\n type SupportedStacksWallet,\n} from '../constants/wallets';\n\nexport interface StacksWallets {\n supported: SupportedStacksWallet[];\n installed: SupportedStacksWallet[];\n}\n\nexport const getStacksWallets = (): StacksWallets => {\n const supported = [...SUPPORTED_STACKS_WALLETS];\n const installed = supported.filter((wallet) =>\n checkIfStacksProviderIsInstalled(wallet)\n );\n\n return { supported, installed };\n};\n\nexport const checkIfStacksProviderIsInstalled = (\n wallet: SupportedStacksWallet\n): boolean => {\n if (typeof window === 'undefined') return wallet === 'wallet-connect';\n\n /* eslint-disable @typescript-eslint/no-explicit-any */\n switch (wallet) {\n case 'xverse':\n return !!(window as any).XverseProviders;\n case 'leather':\n return (\n !!(window as any).LeatherProvider ||\n !!(window as any).HiroWalletProvider\n );\n case 'asigna':\n return !!(window as any).AsignaProvider;\n case 'okx':\n return !!(window as any).okxwallet;\n case 'fordefi':\n return !!(window as any).FordefiProviders?.UtxoProvider;\n case 'wallet-connect':\n return true;\n }\n /* eslint-enable @typescript-eslint/no-explicit-any */\n};\n","import type { SupportedStacksWallet } from '../constants/wallets';\nimport type { WbipProvider } from '@stacks/connect';\nimport type {\n WalletConnectMetadata,\n StacksChain,\n} from './stacks-wallet-provider.types';\nimport { WalletConnect } from '@stacks/connect';\n\nconst STACKS_CHAIN_MAPPING = {\n mainnet: WalletConnect.Chains.Stacks.Mainnet,\n testnet: WalletConnect.Chains.Stacks.Testnet,\n} as const;\n\nexport const buildWalletConnectConfig = (\n projectId: string,\n metadata?: Partial<WalletConnectMetadata>,\n chains?: StacksChain[]\n): {\n projectId: string;\n metadata: WalletConnectMetadata;\n networks: (typeof WalletConnect.Networks.Stacks)[];\n} => {\n const selectedChains = chains ?? ['mainnet'];\n const walletConnectChains = selectedChains.map(\n (chain) => STACKS_CHAIN_MAPPING[chain]\n );\n\n return {\n projectId,\n metadata: {\n name: 'Universal Connector',\n description: 'Universal Connector',\n url: 'https://appkit.reown.com',\n icons: ['https://appkit.reown.com/icon.png'],\n ...metadata,\n },\n networks: [\n {\n ...WalletConnect.Networks.Stacks,\n chains: walletConnectChains,\n },\n ],\n };\n};\n\nexport const getOKXStacksAddress = async () => {\n if (!window.okxwallet) {\n throw new Error('🚨 OKX Wallet is not installed');\n }\n\n const stacksResponse = await window.okxwallet.stacks.connect();\n\n if (!stacksResponse) {\n throw new Error('🚨 Failed to connect with OKX Wallet');\n }\n\n return {\n address: stacksResponse.address,\n provider: 'okx' as const,\n };\n};\n\n/**\n * OKX provider metadata for @stacks/connect's modal. Passed via\n * `defaultProviders` so @stacks/connect places it after natively-registered\n * wallets (i.e. last in the modal).\n */\nexport const OKX_PROVIDER_META: WbipProvider = {\n id: 'OkxStacksProvider',\n name: 'OKX Wallet',\n icon: 'data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiICAgICB4bWxuczp4b2RtPSJodHRwOi8vd3d3LmNvcmVsLmNvbS9jb3JlbGRyYXcvb2RtLzIwMDMiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHZlcnNpb249IjEuMSIgaWQ9IkxheWVyXzEiIHg9IjBweCIgeT0iMHB4IiB2aWV3Qm94PSIwIDAgMjUwMCAyNTAwIiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCAyNTAwIDI1MDA7IiB4bWw6c3BhY2U9InByZXNlcnZlIj4KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KICAgIC5zdDB7ZmlsbC1ydWxlOmV2ZW5vZGQ7Y2xpcC1ydWxlOmV2ZW5vZGQ7fQogICAgLnN0MXtmaWxsOiNGRkZGRkY7fQo8L3N0eWxlPgo8ZyBpZD0iTGF5ZXJfeDAwMjBfMSI+CiAgICA8ZyBpZD0iXzIxODczODEzMjM4NTYiPgogICAgICAgIDxyZWN0IHk9IjAiIGNsYXNzPSJzdDAiIHdpZHRoPSIyNTAwIiBoZWlnaHQ9IjI1MDAiPjwvcmVjdD4KICAgICAgICA8Zz4KICAgICAgICAgICAgPHBhdGggY2xhc3M9InN0MSIgZD0iTTE0NjMsMTAxNWgtNDA0Yy0xNywwLTMxLDE0LTMxLDMxdjQwNGMwLDE3LDE0LDMxLDMxLDMxaDQwNGMxNywwLDMxLTE0LDMxLTMxdi00MDQgICAgIEMxNDk0LDEwMjksMTQ4MCwxMDE1LDE0NjMsMTAxNXoiPjwvcGF0aD4KICAgICAgICAgICAgPHBhdGggY2xhc3M9InN0MSIgZD0iTTk5Niw1NDlINTkyYy0xNywwLTMxLDE0LTMxLDMxdjQwNGMwLDE3LDE0LDMxLDMxLDMxaDQwNGMxNywwLDMxLTE0LDMxLTMxVjU4MEMxMDI3LDU2MywxMDEzLDU0OSw5OTYsNTQ5eiI+PC9wYXRoPgogICAgICAgICAgICA8cGF0aCBjbGFzcz0ic3QxIiBkPSJNMTkzMCw1NDloLTQwNGMtMTcsMC0zMSwxNC0zMSwzMXY0MDRjMCwxNywxNCwzMSwzMSwzMWg0MDRjMTcsMCwzMS0xNCwzMS0zMVY1ODAgICAgIEMxOTYxLDU2MywxOTQ3LDU0OSwxOTMwLDU0OXoiPjwvcGF0aD4KICAgICAgICAgICAgPHBhdGggY2xhc3M9InN0MSIgZD0iTTk5NiwxNDgySDU5MmMtMTcsMC0zMSwxNC0zMSwzMXY0MDRjMCwxNywxNCwzMSwzMSwzMWg0MDRjMTcsMCwzMS0xNCwzMS0zMXYtNDA0ICAgICBDMTAyNywxNDk2LDEwMTMsMTQ4Miw5OTYsMTQ4MnoiPjwvcGF0aD4KICAgICAgICAgICAgPHBhdGggY2xhc3M9InN0MSIgZD0iTTE5MzAsMTQ4MmgtNDA0Yy0xNywwLTMxLDE0LTMxLDMxdjQwNGMwLDE3LDE0LDMxLDMxLDMxaDQwNGMxNywwLDMxLTE0LDMxLTMxdi00MDQgICAgIEMxOTYxLDE0OTYsMTk0NywxNDgyLDE5MzAsMTQ4MnoiPjwvcGF0aD4KICAgICAgICA8L2c+CiAgICA8L2c+CjwvZz4KPC9zdmc+',\n webUrl: 'https://www.okx.com/',\n};\n\n/**\n * Mount a minimal WBIP adapter at `window.OkxStacksProvider` so\n * @stacks/connect's `getProviderFromId()` detects OKX as installed.\n * Only `getAddresses` is handled — after connection the kit routes\n * signMessage / callContract through `window.okxwallet.stacks` directly.\n */\n/* eslint-disable @typescript-eslint/no-explicit-any */\nexport const registerOkxProvider = () => {\n if (typeof window === 'undefined') return;\n\n if (!(window as any).OkxStacksProvider) {\n (window as any).OkxStacksProvider = {\n request: async (method: string) => {\n if (method === 'getAddresses') {\n const data = await getOKXStacksAddress();\n return {\n result: {\n addresses: [\n { address: data.address, symbol: 'STX' },\n ],\n },\n };\n }\n throw new Error(\n `OKX adapter: unsupported method \"${method}\". Use connect('okx') for direct OKX SDK access.`\n );\n },\n };\n }\n};\n\nexport const unregisterOkxProvider = () => {\n if (typeof window === 'undefined') return;\n delete (window as any).OkxStacksProvider;\n};\n/* eslint-enable @typescript-eslint/no-explicit-any */\n\nexport const extractStacksAddress = (\n typedProvider: SupportedStacksWallet,\n addresses: { address?: string; symbol?: string }[]\n) => {\n if (!addresses.length) {\n throw new Error(`No addresses provided for ${typedProvider} wallet`);\n }\n\n if (typedProvider === 'leather' || typedProvider === 'asigna') {\n const stxAddress = addresses.find(\n (addr) => addr.symbol === 'STX'\n )?.address;\n\n if (stxAddress) return stxAddress;\n }\n\n const stacksAddress = addresses.find((addr) =>\n addr.address?.startsWith('S')\n )?.address;\n\n if (stacksAddress) return stacksAddress;\n\n const legacyAddress = addresses[2]?.address;\n\n if (legacyAddress?.startsWith('S')) return legacyAddress;\n\n throw new Error(\n `No valid Stacks address found for ${typedProvider} wallet`\n );\n};\n","import { getSelectedProvider } from '@stacks/connect';\n\nexport const getXverseProductInfo = async (): Promise<{\n version?: string;\n name?: string;\n} | null> =>\n (await window.XverseProviders?.StacksProvider?.getProductInfo?.()) ?? null;\n\nexport const shouldSupportAccountChange = (\n version: string | undefined\n): boolean => version !== undefined && version !== '1.0.0';\n\nexport const waitForXverseProvider = async (\n maxAttempts = 10,\n initialDelay = 200\n): Promise<boolean> => {\n for (let i = 0; i < maxAttempts; i++) {\n const provider = getSelectedProvider();\n\n if (provider?.request && provider?.addListener) return true;\n\n await new Promise((resolve) =>\n setTimeout(resolve, initialDelay * Math.min(i + 1, 5))\n );\n }\n\n return false;\n};\n\nexport const extractAndValidateStacksAddress = (\n addresses:\n | {\n address: string;\n addressType: string;\n purpose: string;\n }[]\n | undefined,\n currentAddress: string | undefined,\n onAddressChange: (address: string) => void,\n connect: () => Promise<void>\n) => {\n if (!addresses || !Array.isArray(addresses)) {\n void connect();\n return;\n }\n\n const stacksAccount = addresses.find(\n (acc) => acc.purpose === 'stacks' || acc.addressType === 'stacks'\n );\n\n if (!stacksAccount?.address) {\n void connect();\n return;\n }\n\n if (stacksAccount.address !== currentAddress) {\n onAddressChange(stacksAccount.address);\n }\n};\n","import { getSelectedProvider } from '@stacks/connect';\nimport { useEffect, useState } from 'react';\n\nimport type { SupportedStacksWallet } from '../../constants/wallets';\nimport type { ConnectOptions } from '../../provider/stacks-wallet-provider.types';\nimport type { XverseAccountChangeEvent } from './use-xverse.types';\nimport {\n extractAndValidateStacksAddress,\n getXverseProductInfo,\n shouldSupportAccountChange,\n waitForXverseProvider,\n} from './use-xverse.helpers';\n\nexport const useXverse = ({\n address,\n provider,\n onAddressChange,\n connect,\n}: {\n address: string | undefined;\n provider: SupportedStacksWallet | undefined;\n onAddressChange: (newAddress: string) => void;\n connect: (\n providerId?: SupportedStacksWallet,\n options?: ConnectOptions\n ) => Promise<void>;\n}) => {\n const [isProviderReady, setIsProviderReady] = useState(false);\n\n useEffect(() => {\n if (provider !== 'xverse') return;\n\n const checkProvider = async () => {\n const ready = await waitForXverseProvider();\n\n setIsProviderReady(ready);\n\n if (!ready) {\n console.error('Xverse provider failed to initialize');\n }\n };\n\n void checkProvider();\n }, [provider]);\n\n useEffect(() => {\n if (provider !== 'xverse' || !address || !isProviderReady) return;\n\n let cancelled = false;\n let removeListener: (() => void) | undefined;\n\n const setupXverse = async () => {\n try {\n const productInfo = await getXverseProductInfo();\n\n if (cancelled) return;\n\n if (!shouldSupportAccountChange(productInfo?.version)) return;\n\n const response = await getSelectedProvider()?.request(\n 'wallet_connect',\n null\n );\n\n if (cancelled) return;\n\n extractAndValidateStacksAddress(\n response?.result?.addresses,\n address,\n onAddressChange,\n () => connect('xverse')\n );\n\n removeListener = getSelectedProvider()?.addListener(\n 'accountChange',\n (event: XverseAccountChangeEvent) => {\n extractAndValidateStacksAddress(\n event?.addresses,\n address,\n onAddressChange,\n () => connect('xverse')\n );\n }\n );\n } catch (error) {\n console.error('Failed to setup Xverse:', error);\n }\n };\n\n void setupXverse();\n\n return () => {\n cancelled = true;\n\n if (!removeListener) return;\n\n try {\n removeListener();\n } catch (error) {\n console.error('Failed to remove Xverse listener:', error);\n }\n };\n }, [address, isProviderReady, onAddressChange, connect, provider]);\n};\n","import { LOCAL_STORAGE_STACKS } from '../constants/storage-keys';\nimport type { SupportedStacksWallet } from '../constants/wallets';\nimport { SUPPORTED_STACKS_WALLETS } from '../constants/wallets';\n\nexport const getLocalStorageWallet = (): {\n address: string;\n provider: SupportedStacksWallet;\n} | null => {\n if (typeof window === 'undefined') return null;\n\n const stored = localStorage.getItem(LOCAL_STORAGE_STACKS);\n\n if (!stored) return null;\n\n try {\n const data = JSON.parse(stored) as {\n address: string;\n provider: SupportedStacksWallet;\n };\n\n const isValid = SUPPORTED_STACKS_WALLETS.find(\n (wallet) => wallet === data.provider\n );\n\n return isValid ? data : null;\n } catch {\n return null;\n }\n};\n","'use client';\n\nimport {\n clearSelectedProviderId,\n getSelectedProviderId,\n setSelectedProviderId,\n request,\n getSelectedProvider,\n DEFAULT_PROVIDERS,\n WALLET_CONNECT_PROVIDER,\n WalletConnect,\n} from '@stacks/connect';\nimport {\n createContext,\n useContext,\n useCallback,\n useEffect,\n useRef,\n useState,\n useMemo,\n} from 'react';\n\nimport {\n STACKS_TO_STACKS_CONNECT_PROVIDERS,\n STACKS_CONNECT_TO_STACKS_PROVIDERS,\n} from '../constants/stacks-provider-mapping';\nimport { LOCAL_STORAGE_STACKS } from '../constants/storage-keys';\nimport type { SupportedStacksWallet } from '../constants/wallets';\nimport { SUPPORTED_STACKS_WALLETS } from '../constants/wallets';\nimport {\n checkIfStacksProviderIsInstalled,\n getStacksWallets,\n} from '../utils/get-stacks-wallets';\n\nimport {\n getOKXStacksAddress,\n extractStacksAddress,\n buildWalletConnectConfig,\n registerOkxProvider,\n unregisterOkxProvider,\n OKX_PROVIDER_META,\n} from './stacks-wallet-provider.helpers';\nimport type {\n WalletContextValue,\n WalletState,\n ConnectOptions,\n StacksWalletProviderProps,\n} from './stacks-wallet-provider.types';\nimport { useXverse } from '../hooks/use-xverse/use-xverse';\nimport { getLocalStorageWallet } from '../utils/get-local-storage-wallet';\n\n// Static lookup — built once at module load from @stacks/connect metadata\nconst PROVIDER_META_BY_KIT_ID = Object.fromEntries(\n [...DEFAULT_PROVIDERS, WALLET_CONNECT_PROVIDER, OKX_PROVIDER_META].map(\n (p) => [\n STACKS_CONNECT_TO_STACKS_PROVIDERS[p.id],\n { name: p.name, icon: p.icon ?? '', webUrl: p.webUrl ?? '' },\n ]\n )\n) as Record<string, { name: string; icon: string; webUrl: string }>;\n\nconst StacksWalletContext = createContext<WalletContextValue | undefined>(\n undefined\n);\n\nexport const StacksWalletProvider = ({\n children,\n wallets,\n connectModal = true,\n walletConnect,\n onConnect,\n onAddressChange,\n onDisconnect,\n}: StacksWalletProviderProps) => {\n const [address, setAddress] = useState<string | undefined>();\n const [provider, setProvider] = useState<\n SupportedStacksWallet | undefined\n >();\n const [isConnecting, setIsConnecting] = useState(false);\n\n // Generation counter — incremented by reset() to invalidate in-flight connect promises\n const connectGenRef = useRef(0);\n\n // Track whether the wallet was previously connected so we only fire\n // onConnect on the initial disconnected → connected transition (#23)\n const wasConnectedRef = useRef(false);\n\n // Guard against concurrent WalletConnect.initializeProvider calls\n const wcInitRef = useRef<Promise<void> | null>(null);\n\n // Keep walletConnect in a ref so the connect callback always reads the\n // latest config without needing the object in its dependency array\n // (inline walletConnect={{ projectId: '...' }} would cause a new ref\n // each render, recreating connect on every render).\n const walletConnectRef = useRef(walletConnect);\n walletConnectRef.current = walletConnect;\n\n // Serialize wallets to a stable string for use as a dependency,\n // so inline arrays like wallets={['xverse', 'leather']} don't\n // invalidate memos on every render. (Fixes #5)\n const walletsKey = wallets?.join(',');\n\n // Validate in render body so React error boundaries can catch it (#21)\n if (wallets?.includes('wallet-connect') && !walletConnect?.projectId) {\n throw new Error(\n 'StacksWalletProvider: \"wallet-connect\" is listed in wallets but no walletConnect.projectId was provided.'\n );\n }\n\n // Register the OKX WBIP adapter so it appears in the @stacks/connect modal.\n // Only when connectModal is enabled and OKX is in the configured wallets\n // (or wallets is undefined, meaning all wallets are configured).\n useEffect(() => {\n const okxConfigured = !wallets || wallets.includes('okx');\n if (connectModal && okxConfigured) {\n registerOkxProvider();\n return () => unregisterOkxProvider();\n }\n }, [connectModal, walletsKey]);\n\n useEffect(() => {\n const loadPersistedWallet = async () => {\n const persisted = getLocalStorageWallet();\n\n if (!persisted) return;\n\n setIsConnecting(true);\n\n try {\n if (persisted.provider === 'okx') {\n const data = await getOKXStacksAddress();\n setAddress(data.address);\n setProvider(data.provider);\n return;\n }\n\n if (\n persisted.provider === 'wallet-connect' &&\n walletConnect?.projectId\n ) {\n const initPromise = WalletConnect.initializeProvider(\n buildWalletConnectConfig(\n walletConnect.projectId,\n walletConnect.metadata,\n walletConnect.chains\n )\n );\n wcInitRef.current = initPromise;\n await initPromise;\n wcInitRef.current = null;\n }\n\n setAddress(persisted.address);\n setProvider(persisted.provider);\n setSelectedProviderId(\n STACKS_TO_STACKS_CONNECT_PROVIDERS[persisted.provider]\n );\n } catch (error) {\n console.error('Failed to restore wallet connection:', error);\n } finally {\n setIsConnecting(false);\n }\n };\n\n void loadPersistedWallet();\n }, [walletConnect?.projectId]);\n\n const connect = useCallback(\n async (\n providerId?: SupportedStacksWallet,\n options?: ConnectOptions\n ) => {\n // --- Modal branch: delegate wallet selection to @stacks/connect ---\n if (connectModal && !providerId) {\n const gen = ++connectGenRef.current;\n setIsConnecting(true);\n\n try {\n clearSelectedProviderId();\n\n const requestOptions: Parameters<typeof request>[0] = {\n forceWalletSelect: true,\n // OKX at the end so it appears last among installed wallets\n defaultProviders: [\n ...DEFAULT_PROVIDERS,\n OKX_PROVIDER_META,\n ],\n };\n\n if (wallets) {\n requestOptions.approvedProviderIds = wallets.map(\n (w) => STACKS_TO_STACKS_CONNECT_PROVIDERS[w]\n );\n }\n\n const wc = walletConnectRef.current;\n if (wc?.projectId) {\n requestOptions.walletConnect =\n buildWalletConnectConfig(\n wc.projectId,\n wc.metadata,\n wc.chains\n );\n }\n\n const data = await request(\n requestOptions,\n 'getAddresses',\n {}\n );\n\n if (connectGenRef.current !== gen) return;\n\n const selectedId = getSelectedProviderId();\n const resolvedProvider = selectedId\n ? STACKS_CONNECT_TO_STACKS_PROVIDERS[selectedId]\n : undefined;\n\n if (!resolvedProvider) {\n throw new Error(\n `Unknown provider returned from @stacks/connect modal: ${selectedId ?? 'none'}`\n );\n }\n\n const extractedAddress = extractStacksAddress(\n resolvedProvider,\n data.addresses\n );\n\n setAddress(extractedAddress);\n setProvider(resolvedProvider);\n options?.onSuccess?.(extractedAddress, resolvedProvider);\n } catch (error) {\n if (connectGenRef.current !== gen) return;\n console.error('Failed to connect wallet:', error);\n getSelectedProvider()?.disconnect?.();\n clearSelectedProviderId();\n options?.onError?.(error as Error);\n } finally {\n if (connectGenRef.current === gen) {\n setIsConnecting(false);\n }\n }\n return;\n }\n\n // --- Explicit provider branch (existing behavior) ---\n const typedProvider = SUPPORTED_STACKS_WALLETS.find(\n (wallet) => wallet === providerId\n );\n\n if (!typedProvider) {\n const error = new Error(\n 'The wallet provider selected is not supported!'\n );\n console.error('🚨', error.message);\n options?.onError?.(error);\n return;\n }\n\n if (!checkIfStacksProviderIsInstalled(typedProvider)) {\n const error = new Error(\n `${typedProvider} wallet is not installed. Please install the wallet extension to continue.`\n );\n console.error('🚨', error.message);\n options?.onError?.(error);\n return;\n }\n\n const wc = walletConnectRef.current;\n\n if (\n typedProvider === 'wallet-connect' &&\n !wc?.projectId\n ) {\n const error = new Error(\n 'WalletConnect requires a project ID. Please provide walletConnect.projectId to the StacksWalletProvider.'\n );\n console.error('🚨', error.message);\n options?.onError?.(error);\n return;\n }\n\n // Capture generation so we can detect if reset() was called during await\n const gen = ++connectGenRef.current;\n setIsConnecting(true);\n\n try {\n if (typedProvider === 'okx') {\n const data = await getOKXStacksAddress();\n if (connectGenRef.current !== gen) return;\n setAddress(data.address);\n setProvider(data.provider);\n options?.onSuccess?.(data.address, data.provider);\n return;\n }\n\n setSelectedProviderId(\n STACKS_TO_STACKS_CONNECT_PROVIDERS[typedProvider]\n );\n\n const wcConfig =\n typedProvider === 'wallet-connect' && wc\n ? buildWalletConnectConfig(\n wc.projectId,\n wc.metadata,\n wc.chains\n )\n : undefined;\n\n if (wcConfig) {\n // Wait for any in-flight init, then start ours\n if (wcInitRef.current) await wcInitRef.current;\n const initPromise =\n WalletConnect.initializeProvider(wcConfig);\n wcInitRef.current = initPromise;\n await initPromise;\n wcInitRef.current = null;\n }\n\n if (connectGenRef.current !== gen) return;\n\n const data = wcConfig\n ? await request(\n { walletConnect: wcConfig },\n 'getAddresses',\n {}\n )\n : await request('getAddresses');\n\n if (connectGenRef.current !== gen) return;\n\n const extractedAddress = extractStacksAddress(\n typedProvider,\n data.addresses\n );\n\n setAddress(extractedAddress);\n setProvider(typedProvider);\n options?.onSuccess?.(extractedAddress, typedProvider);\n } catch (error) {\n if (connectGenRef.current !== gen) return;\n console.error('Failed to connect wallet:', error);\n // OKX uses its own SDK and never calls setSelectedProviderId,\n // so getSelectedProvider() would return the previously connected\n // provider — disconnecting the wrong wallet.\n if (typedProvider !== 'okx') {\n getSelectedProvider()?.disconnect?.();\n clearSelectedProviderId();\n }\n options?.onError?.(error as Error);\n } finally {\n if (connectGenRef.current === gen) {\n setIsConnecting(false);\n }\n }\n },\n [connectModal, walletsKey]\n );\n\n const reset = useCallback(() => {\n connectGenRef.current++;\n setIsConnecting(false);\n clearSelectedProviderId();\n }, []);\n\n const disconnect = useCallback(\n (callback?: () => void) => {\n localStorage.removeItem(LOCAL_STORAGE_STACKS);\n setAddress(undefined);\n setProvider(undefined);\n getSelectedProvider()?.disconnect?.();\n clearSelectedProviderId();\n callback?.();\n onDisconnect?.();\n },\n [onDisconnect]\n );\n\n useEffect(() => {\n if (!address || !provider) return;\n\n localStorage.setItem(\n LOCAL_STORAGE_STACKS,\n JSON.stringify({ address, provider })\n );\n }, [address, provider]);\n\n useEffect(() => {\n const isConnected = !!address && !!provider;\n\n if (isConnected && !wasConnectedRef.current) {\n onConnect?.(provider, address);\n }\n\n wasConnectedRef.current = isConnected;\n }, [address, provider, onConnect]);\n\n const handleAddressChange = useCallback(\n (newAddress: string) => {\n setAddress(newAddress);\n onAddressChange?.(newAddress);\n },\n [onAddressChange]\n );\n\n useXverse({\n address,\n provider,\n onAddressChange: handleAddressChange,\n connect,\n });\n\n // Computed in render body (not memoized) so it picks up wallet extensions\n // injected after hydration. The context value useMemo below uses\n // walletInfosKey so the reference stays stable when nothing changes.\n const { installed } = getStacksWallets();\n const configured = wallets ?? [...SUPPORTED_STACKS_WALLETS];\n const walletInfos = configured.map((w) => ({\n id: w,\n name: PROVIDER_META_BY_KIT_ID[w]?.name ?? w,\n icon: PROVIDER_META_BY_KIT_ID[w]?.icon ?? '',\n webUrl: PROVIDER_META_BY_KIT_ID[w]?.webUrl ?? '',\n available:\n w === 'wallet-connect'\n ? !!walletConnect?.projectId\n : installed.includes(w),\n }));\n\n // Serialize for stable dependency — only changes when the actual data changes\n const walletInfosKey = walletInfos\n .map((w) => `${w.id}:${w.available}`)\n .join(',');\n\n const value = useMemo((): WalletContextValue => {\n const walletState: WalletState = isConnecting\n ? { status: 'connecting', address: undefined, provider: undefined }\n : address && provider\n ? { status: 'connected', address, provider }\n : {\n status: 'disconnected',\n address: undefined,\n provider: undefined,\n };\n\n return {\n ...walletState,\n connect,\n disconnect,\n reset,\n wallets: walletInfos,\n };\n }, [address, provider, isConnecting, connect, disconnect, reset, walletInfosKey]);\n\n return (\n <StacksWalletContext.Provider value={value}>\n {children}\n </StacksWalletContext.Provider>\n );\n};\n\nexport const useStacksWalletContext = () => {\n const context = useContext(StacksWalletContext);\n\n if (context === undefined) {\n throw new Error(\n '🚨 Stacks wallet hooks must be used within StacksWalletProvider'\n );\n }\n\n return context;\n};\n","'use client';\n\nimport { useMemo } from 'react';\n\nimport type { SupportedStacksWallet } from '../constants/wallets';\nimport { useStacksWalletContext } from '../provider/stacks-wallet-provider';\n\ntype UseAddressReturn =\n | {\n address: undefined;\n isConnected: false;\n isConnecting: boolean;\n isDisconnected: boolean;\n provider: undefined;\n }\n | {\n address: string;\n isConnected: true;\n isConnecting: false;\n isDisconnected: false;\n provider: SupportedStacksWallet;\n };\n\nexport const useAddress = (): UseAddressReturn => {\n const { address, status, provider } = useStacksWalletContext();\n\n return useMemo(() => {\n if (status === 'connected' && address && provider) {\n return {\n address,\n isConnected: true as const,\n isConnecting: false as const,\n isDisconnected: false as const,\n provider,\n };\n }\n\n return {\n address: undefined,\n isConnected: false as const,\n isConnecting: status === 'connecting',\n isDisconnected: status === 'disconnected',\n provider: undefined,\n };\n }, [address, status, provider]);\n};\n","'use client';\n\nimport { useCallback, useMemo, useState } from 'react';\n\nimport type { SupportedStacksWallet } from '../constants/wallets';\nimport type { ConnectOptions, MutationStatus } from '../provider/stacks-wallet-provider.types';\nimport { useStacksWalletContext } from '../provider/stacks-wallet-provider';\n\nexport const useConnect = () => {\n const {\n connect: contextConnect,\n reset: contextReset,\n status: walletStatus,\n } = useStacksWalletContext();\n\n const [error, setError] = useState<Error | null>(null);\n const [mutationStatus, setMutationStatus] =\n useState<MutationStatus>('idle');\n\n const connect = useCallback(\n async (\n providerId?: SupportedStacksWallet,\n options?: ConnectOptions\n ) => {\n setError(null);\n setMutationStatus('pending');\n\n let settled = false;\n\n try {\n await contextConnect(providerId, {\n onSuccess: (address, provider) => {\n settled = true;\n setMutationStatus('success');\n options?.onSuccess?.(address, provider);\n },\n onError: (err) => {\n settled = true;\n setError(err);\n setMutationStatus('error');\n options?.onError?.(err);\n },\n });\n } finally {\n if (!settled) {\n // connect returned without calling onSuccess or onError\n // (e.g., cancelled by reset or stale generation)\n setMutationStatus('idle');\n }\n }\n },\n [contextConnect]\n );\n\n const reset = useCallback(() => {\n setError(null);\n setMutationStatus('idle');\n contextReset();\n }, [contextReset]);\n\n const value = useMemo(\n () => ({\n connect,\n reset,\n error,\n isError: mutationStatus === 'error',\n isIdle: mutationStatus === 'idle',\n isPending:\n mutationStatus === 'pending' ||\n walletStatus === 'connecting',\n isSuccess: mutationStatus === 'success',\n status: mutationStatus,\n }),\n [connect, reset, error, mutationStatus, walletStatus]\n );\n\n return value;\n};\n","'use client';\n\nimport { useCallback, useMemo, useState } from 'react';\n\nimport type { MutationStatus } from '../provider/stacks-wallet-provider.types';\nimport { useStacksWalletContext } from '../provider/stacks-wallet-provider';\n\nexport const useDisconnect = () => {\n const { disconnect: contextDisconnect } = useStacksWalletContext();\n\n const [error, setError] = useState<Error | null>(null);\n const [mutationStatus, setMutationStatus] =\n useState<MutationStatus>('idle');\n\n const disconnect = useCallback(\n (callback?: () => void) => {\n setError(null);\n\n try {\n contextDisconnect(callback);\n setMutationStatus('success');\n } catch (err) {\n const normalizedError =\n err instanceof Error ? err : new Error(String(err));\n setError(normalizedError);\n setMutationStatus('error');\n }\n },\n [contextDisconnect]\n );\n\n const reset = useCallback(() => {\n setError(null);\n setMutationStatus('idle');\n }, []);\n\n const value = useMemo(\n () => ({\n disconnect,\n reset,\n error,\n isError: mutationStatus === 'error',\n isIdle: mutationStatus === 'idle',\n isPending: mutationStatus === 'pending',\n isSuccess: mutationStatus === 'success',\n status: mutationStatus,\n }),\n [disconnect, reset, error, mutationStatus]\n );\n\n return value;\n};\n","'use client';\n\nimport { request } from '@stacks/connect';\nimport { useCallback, useMemo, useState } from 'react';\n\nimport {\n BaseError,\n WalletNotConnectedError,\n WalletNotFoundError,\n WalletRequestError,\n} from '../errors';\nimport type { MutationStatus } from '../provider/stacks-wallet-provider.types';\nimport { useAddress } from './use-address';\n\nexport interface SignMessageVariables {\n message: string;\n publicKey?: string;\n}\n\nexport interface SignMessageData {\n publicKey: string;\n signature: string;\n}\n\nexport interface SignMessageOptions {\n onSuccess?: (data: SignMessageData) => void;\n onError?: (error: Error) => void;\n onSettled?: (\n data: SignMessageData | undefined,\n error: Error | null\n ) => void;\n}\n\nexport const useSignMessage = () => {\n const { isConnected, provider } = useAddress();\n const [data, setData] = useState<SignMessageData | undefined>(undefined);\n const [error, setError] = useState<BaseError | null>(null);\n const [status, setStatus] = useState<MutationStatus>('idle');\n\n const signMessageAsync = useCallback(\n async (variables: SignMessageVariables): Promise<SignMessageData> => {\n if (!isConnected) {\n throw new WalletNotConnectedError();\n }\n\n setStatus('pending');\n setError(null);\n setData(undefined);\n\n try {\n let result: SignMessageData;\n\n if (provider === 'okx') {\n if (!window.okxwallet) {\n throw new WalletNotFoundError({ wallet: 'OKX' });\n }\n\n result = await window.okxwallet.stacks.signMessage({\n message: variables.message,\n });\n } else {\n result = await request('stx_signMessage', {\n message: variables.message,\n ...(variables.publicKey && {\n publicKey: variables.publicKey,\n }),\n });\n }\n\n setData(result);\n setStatus('success');\n return result;\n } catch (err) {\n const error = err instanceof BaseError\n ? err\n : new WalletRequestError({\n method: 'stx_signMessage',\n wallet: provider ?? 'unknown',\n cause: err instanceof Error ? err : new Error(String(err)),\n });\n setError(error);\n setStatus('error');\n throw error;\n }\n },\n [isConnected, provider]\n );\n\n const signMessage = useCallback(\n (variables: SignMessageVariables, options?: SignMessageOptions) => {\n signMessageAsync(variables)\n .then((data) => {\n options?.onSuccess?.(data);\n options?.onSettled?.(data, null);\n })\n .catch((error) => {\n options?.onError?.(error);\n options?.onSettled?.(undefined, error);\n });\n },\n [signMessageAsync]\n );\n\n const reset = useCallback(() => {\n setData(undefined);\n setError(null);\n setStatus('idle');\n }, []);\n\n return useMemo(\n () => ({\n signMessage,\n signMessageAsync,\n reset,\n data,\n error,\n isError: status === 'error',\n isIdle: status === 'idle',\n isPending: status === 'pending',\n isSuccess: status === 'success',\n status,\n }),\n [signMessage, signMessageAsync, reset, data, error, status]\n );\n};\n","'use client';\n\nimport { request } from '@stacks/connect';\nimport type { ClarityValue, TupleCV } from '@stacks/transactions';\nimport { useCallback, useMemo, useState } from 'react';\n\nimport {\n BaseError,\n WalletNotConnectedError,\n UnsupportedMethodError,\n WalletRequestError,\n} from '../errors';\nimport type { MutationStatus } from '../provider/stacks-wallet-provider.types';\nimport { useAddress } from './use-address';\n\nexport interface SignStructuredMessageVariables {\n message: ClarityValue;\n domain: TupleCV;\n}\n\nexport interface SignStructuredMessageData {\n publicKey: string;\n signature: string;\n}\n\nexport interface SignStructuredMessageOptions {\n onSuccess?: (data: SignStructuredMessageData) => void;\n onError?: (error: Error) => void;\n onSettled?: (\n data: SignStructuredMessageData | undefined,\n error: Error | null\n ) => void;\n}\n\nexport const useSignStructuredMessage = () => {\n const { isConnected, provider } = useAddress();\n const [data, setData] = useState<SignStructuredMessageData | undefined>(\n undefined\n );\n const [error, setError] = useState<BaseError | null>(null);\n const [status, setStatus] = useState<MutationStatus>('idle');\n\n const signStructuredMessageAsync = useCallback(\n async (\n variables: SignStructuredMessageVariables\n ): Promise<SignStructuredMessageData> => {\n if (!isConnected) {\n throw new WalletNotConnectedError();\n }\n\n if (provider === 'okx') {\n throw new UnsupportedMethodError({\n method: 'stx_signStructuredMessage',\n wallet: 'OKX',\n });\n }\n\n setStatus('pending');\n setError(null);\n setData(undefined);\n\n try {\n const result = await request('stx_signStructuredMessage', {\n message: variables.message,\n domain: variables.domain,\n });\n\n setData(result);\n setStatus('success');\n return result;\n } catch (err) {\n const error = err instanceof BaseError\n ? err\n : new WalletRequestError({\n method: 'stx_signStructuredMessage',\n wallet: provider ?? 'unknown',\n cause: err instanceof Error ? err : new Error(String(err)),\n });\n setError(error);\n setStatus('error');\n throw error;\n }\n },\n [isConnected, provider]\n );\n\n const signStructuredMessage = useCallback(\n (\n variables: SignStructuredMessageVariables,\n options?: SignStructuredMessageOptions\n ) => {\n signStructuredMessageAsync(variables)\n .then((data) => {\n options?.onSuccess?.(data);\n options?.onSettled?.(data, null);\n })\n .catch((error) => {\n options?.onError?.(error);\n options?.onSettled?.(undefined, error);\n });\n },\n [signStructuredMessageAsync]\n );\n\n const reset = useCallback(() => {\n setData(undefined);\n setError(null);\n setStatus('idle');\n }, []);\n\n return useMemo(\n () => ({\n signStructuredMessage,\n signStructuredMessageAsync,\n reset,\n data,\n error,\n isError: status === 'error',\n isIdle: status === 'idle',\n isPending: status === 'pending',\n isSuccess: status === 'success',\n status,\n }),\n [\n signStructuredMessage,\n signStructuredMessageAsync,\n reset,\n data,\n error,\n status,\n ]\n );\n};\n","'use client';\n\nimport { request } from '@stacks/connect';\nimport { useCallback, useMemo, useState } from 'react';\n\nimport {\n BaseError,\n WalletNotConnectedError,\n UnsupportedMethodError,\n WalletRequestError,\n} from '../errors';\nimport type { MutationStatus } from '../provider/stacks-wallet-provider.types';\nimport { useAddress } from './use-address';\n\nexport interface SignTransactionVariables {\n transaction: string;\n broadcast?: boolean;\n}\n\nexport interface SignTransactionData {\n transaction: string;\n txid?: string;\n}\n\nexport interface SignTransactionOptions {\n onSuccess?: (data: SignTransactionData) => void;\n onError?: (error: Error) => void;\n onSettled?: (\n data: SignTransactionData | undefined,\n error: Error | null\n ) => void;\n}\n\nexport const useSignTransaction = () => {\n const { isConnected, provider } = useAddress();\n const [data, setData] = useState<SignTransactionData | undefined>(undefined);\n const [error, setError] = useState<BaseError | null>(null);\n const [status, setStatus] = useState<MutationStatus>('idle');\n\n const signTransactionAsync = useCallback(\n async (\n variables: SignTransactionVariables\n ): Promise<SignTransactionData> => {\n if (!isConnected) {\n throw new WalletNotConnectedError();\n }\n\n if (provider === 'okx') {\n throw new UnsupportedMethodError({\n method: 'stx_signTransaction',\n wallet: 'OKX',\n });\n }\n\n setStatus('pending');\n setError(null);\n setData(undefined);\n\n try {\n const result = await request('stx_signTransaction', {\n transaction: variables.transaction,\n ...(variables.broadcast !== undefined && {\n broadcast: variables.broadcast,\n }),\n });\n\n setData(result);\n setStatus('success');\n return result;\n } catch (err) {\n const error = err instanceof BaseError\n ? err\n : new WalletRequestError({\n method: 'stx_signTransaction',\n wallet: provider ?? 'unknown',\n cause: err instanceof Error ? err : new Error(String(err)),\n });\n setError(error);\n setStatus('error');\n throw error;\n }\n },\n [isConnected, provider]\n );\n\n const signTransaction = useCallback(\n (\n variables: SignTransactionVariables,\n options?: SignTransactionOptions\n ) => {\n signTransactionAsync(variables)\n .then((data) => {\n options?.onSuccess?.(data);\n options?.onSettled?.(data, null);\n })\n .catch((error) => {\n options?.onError?.(error);\n options?.onSettled?.(undefined, error);\n });\n },\n [signTransactionAsync]\n );\n\n const reset = useCallback(() => {\n setData(undefined);\n setError(null);\n setStatus('idle');\n }, []);\n\n return useMemo(\n () => ({\n signTransaction,\n signTransactionAsync,\n reset,\n data,\n error,\n isError: status === 'error',\n isIdle: status === 'idle',\n isPending: status === 'pending',\n isSuccess: status === 'success',\n status,\n }),\n [signTransaction, signTransactionAsync, reset, data, error, status]\n );\n};\n","export const getNetworkFromAddress = (address: string) => {\n if (address.startsWith('SP') || address.startsWith('SM')) {\n return 'mainnet';\n }\n\n if (address.startsWith('ST') || address.startsWith('SN')) {\n return 'testnet';\n }\n\n throw new Error(`Invalid Stacks address: ${address}`);\n};\n","'use client';\n\nimport { request } from '@stacks/connect';\nimport { useCallback, useMemo, useState } from 'react';\n\nimport {\n BaseError,\n WalletNotConnectedError,\n WalletNotFoundError,\n WalletRequestError,\n} from '../errors';\nimport type { MutationStatus } from '../provider/stacks-wallet-provider.types';\nimport { useAddress } from './use-address';\nimport { getNetworkFromAddress } from '../utils/get-network-from-address';\n\nexport interface TransferSTXVariables {\n recipient: string;\n amount: bigint | number | string;\n memo?: string;\n fee?: bigint | number | string;\n nonce?: bigint | number | string;\n}\n\nexport interface TransferSTXOptions {\n onSuccess?: (txid: string) => void;\n onError?: (error: Error) => void;\n onSettled?: (txid: string | undefined, error: Error | null) => void;\n}\n\nexport const useTransferSTX = () => {\n const { isConnected, address, provider } = useAddress();\n const [data, setData] = useState<string | undefined>(undefined);\n const [error, setError] = useState<BaseError | null>(null);\n const [status, setStatus] = useState<MutationStatus>('idle');\n\n const transferSTXAsync = useCallback(\n async (variables: TransferSTXVariables): Promise<string> => {\n if (!isConnected || !address) {\n throw new WalletNotConnectedError();\n }\n\n setStatus('pending');\n setError(null);\n setData(undefined);\n\n try {\n if (provider === 'okx') {\n if (!window.okxwallet) {\n throw new WalletNotFoundError({ wallet: 'OKX' });\n }\n\n const response =\n await window.okxwallet.stacks.signTransaction({\n txType: 'token_transfer',\n recipient: variables.recipient,\n amount: String(variables.amount),\n memo: variables.memo ?? '',\n stxAddress: address,\n anchorMode: 3,\n });\n\n setData(response.txHash);\n setStatus('success');\n return response.txHash;\n }\n\n const response = await request('stx_transferStx', {\n recipient: variables.recipient,\n amount: variables.amount,\n ...(variables.memo !== undefined && {\n memo: variables.memo,\n }),\n ...(variables.fee !== undefined && {\n fee: variables.fee,\n }),\n ...(variables.nonce !== undefined && {\n nonce: variables.nonce,\n }),\n network: getNetworkFromAddress(address),\n });\n\n if (!response.txid) {\n throw new Error('No transaction ID returned');\n }\n\n setData(response.txid);\n setStatus('success');\n return response.txid;\n } catch (err) {\n const error = err instanceof BaseError\n ? err\n : new WalletRequestError({\n method: 'stx_transferStx',\n wallet: provider ?? 'unknown',\n cause: err instanceof Error ? err : new Error(String(err)),\n });\n setError(error);\n setStatus('error');\n throw error;\n }\n },\n [isConnected, address, provider]\n );\n\n const transferSTX = useCallback(\n (variables: TransferSTXVariables, options?: TransferSTXOptions) => {\n transferSTXAsync(variables)\n .then((txid) => {\n options?.onSuccess?.(txid);\n options?.onSettled?.(txid, null);\n })\n .catch((error) => {\n options?.onError?.(error);\n options?.onSettled?.(undefined, error);\n });\n },\n [transferSTXAsync]\n );\n\n const reset = useCallback(() => {\n setData(undefined);\n setError(null);\n setStatus('idle');\n }, []);\n\n return useMemo(\n () => ({\n transferSTX,\n transferSTXAsync,\n reset,\n data,\n error,\n isError: status === 'error',\n isIdle: status === 'idle',\n isPending: status === 'pending',\n isSuccess: status === 'success',\n status,\n }),\n [transferSTX, transferSTXAsync, reset, data, error, status]\n );\n};\n","import type { ClarityValue } from '@stacks/transactions';\nimport {\n uintCV,\n intCV,\n boolCV,\n noneCV,\n someCV,\n bufferCV,\n stringAsciiCV,\n stringUtf8CV,\n listCV,\n tupleCV,\n standardPrincipalCV,\n contractPrincipalCV,\n} from '@stacks/transactions';\ntype AbiType = string | Record<string, unknown>;\n\n/** Loose ABI arg shape for runtime use — avoids importing ClarityAbiArg. */\ninterface AbiArgLike {\n name: string;\n type: unknown;\n}\n\n/** Convert a JS primitive to a ClarityValue guided by an ABI type descriptor. */\nexport function toClarityValue(value: unknown, abiType: AbiType): ClarityValue {\n if (typeof abiType === 'string') {\n switch (abiType) {\n case 'uint128': {\n if (typeof value !== 'bigint') {\n throw new Error(\n `@satoshai/kit: Expected bigint (uint128), got ${typeof value}`\n );\n }\n return uintCV(value);\n }\n case 'int128': {\n if (typeof value !== 'bigint') {\n throw new Error(\n `@satoshai/kit: Expected bigint (int128), got ${typeof value}`\n );\n }\n return intCV(value);\n }\n case 'bool': {\n if (typeof value !== 'boolean') {\n throw new Error(\n `@satoshai/kit: Expected boolean (bool), got ${typeof value}`\n );\n }\n return boolCV(value);\n }\n case 'principal':\n case 'trait_reference': {\n if (typeof value !== 'string') {\n throw new Error(\n `@satoshai/kit: Expected string (${abiType}), got ${typeof value}`\n );\n }\n if (value.includes('.')) {\n const [addr, ...rest] = value.split('.');\n return contractPrincipalCV(addr, rest.join('.'));\n }\n return standardPrincipalCV(value);\n }\n case 'none':\n return noneCV();\n default:\n throw new Error(\n `@satoshai/kit: Unsupported ABI type \"${abiType}\"`\n );\n }\n }\n\n if ('buffer' in abiType) {\n if (!(value instanceof Uint8Array)) {\n throw new Error(\n `@satoshai/kit: Expected Uint8Array (buffer), got ${typeof value}`\n );\n }\n return bufferCV(value);\n }\n if ('string-ascii' in abiType) {\n if (typeof value !== 'string') {\n throw new Error(\n `@satoshai/kit: Expected string (string-ascii), got ${typeof value}`\n );\n }\n return stringAsciiCV(value);\n }\n if ('string-utf8' in abiType) {\n if (typeof value !== 'string') {\n throw new Error(\n `@satoshai/kit: Expected string (string-utf8), got ${typeof value}`\n );\n }\n return stringUtf8CV(value);\n }\n if ('optional' in abiType) {\n if (value === null || value === undefined) return noneCV();\n return someCV(toClarityValue(value, abiType.optional as AbiType));\n }\n if ('list' in abiType) {\n if (!Array.isArray(value)) {\n throw new Error(\n `@satoshai/kit: Expected array (list), got ${typeof value}`\n );\n }\n const listType = abiType.list as { type: AbiType };\n return listCV(\n value.map((item) => toClarityValue(item, listType.type))\n );\n }\n if ('tuple' in abiType) {\n if (typeof value !== 'object' || value === null) {\n throw new Error(\n `@satoshai/kit: Expected object (tuple), got ${value === null ? 'null' : typeof value}`\n );\n }\n const entries = abiType.tuple as Array<{\n name: string;\n type: AbiType;\n }>;\n const obj = value as Record<string, unknown>;\n const result: Record<string, ClarityValue> = {};\n for (const entry of entries) {\n result[entry.name] = toClarityValue(obj[entry.name], entry.type);\n }\n return tupleCV(result);\n }\n\n throw new Error(\n `@satoshai/kit: Unsupported ABI type: ${JSON.stringify(abiType)}`\n );\n}\n\n/** Convert a named args object to an ordered ClarityValue[] using ABI arg definitions. */\nexport function namedArgsToClarityValues(\n args: Record<string, unknown>,\n abiArgs: readonly AbiArgLike[]\n): ClarityValue[] {\n return abiArgs.map((abiArg) => {\n if (!(abiArg.name in args)) {\n throw new Error(\n `@satoshai/kit: Missing argument \"${abiArg.name}\"`\n );\n }\n return toClarityValue(\n args[abiArg.name],\n abiArg.type as AbiType\n );\n });\n}\n","import type { ClarityValue, PostCondition } from \"@stacks/transactions\";\nimport { cvToHex, postConditionToHex } from \"@stacks/transactions\";\n\nexport const preparePostConditionsForOKX = (postConditions: PostCondition[]) =>\n postConditions.map((pc) => postConditionToHex(pc));\n\nexport const prepareArgsForOKX = (args: ClarityValue[]) =>\n args.map((arg) => cvToHex(arg));\n","'use client';\n\nimport { request } from '@stacks/connect';\nimport type { ClarityValue } from '@stacks/transactions';\nimport { PostConditionMode } from '@stacks/transactions';\nimport { useCallback, useMemo, useState } from 'react';\n\nimport {\n BaseError,\n WalletNotConnectedError,\n WalletNotFoundError,\n WalletRequestError,\n} from '../../errors';\nimport type { MutationStatus } from '../../provider/stacks-wallet-provider.types';\nimport { useAddress } from '../use-address';\nimport { getNetworkFromAddress } from '../../utils/get-network-from-address';\nimport { namedArgsToClarityValues } from '../../utils/to-clarity-value';\n\nimport {\n preparePostConditionsForOKX,\n prepareArgsForOKX,\n} from './use-write-contract.helpers';\nimport type {\n PostConditionConfig,\n WriteContractOptions,\n WriteContractAsyncFn,\n WriteContractFn,\n} from './use-write-contract.types';\n\n/** Loose internal ABI shape for runtime — avoids importing ClarityAbi which triggers deep instantiation. */\ninterface AbiLike {\n functions: readonly {\n name: string;\n access: string;\n args: readonly { name: string; type: unknown }[];\n }[];\n}\n\n/** Internal variables shape accepted at runtime (both typed and untyped). */\ninterface WriteContractVariablesInternal {\n abi?: AbiLike;\n address: string;\n contract: string;\n functionName: string;\n args: Record<string, unknown> | ClarityValue[];\n pc: PostConditionConfig;\n}\n\n/** Resolve args to ClarityValue[]: convert named args when ABI is present. */\nfunction resolveArgs(variables: WriteContractVariablesInternal): ClarityValue[] {\n if (!variables.abi) {\n return variables.args as ClarityValue[];\n }\n\n const fn = variables.abi.functions.find(\n (f) => f.name === variables.functionName && f.access === 'public'\n );\n if (!fn) {\n throw new Error(\n `@satoshai/kit: Public function \"${variables.functionName}\" not found in ABI`\n );\n }\n\n return namedArgsToClarityValues(\n variables.args as Record<string, unknown>,\n fn.args\n );\n}\n\nexport const useWriteContract = () => {\n const { isConnected, address, provider } = useAddress();\n\n const [data, setData] = useState<string | undefined>(undefined);\n const [error, setError] = useState<BaseError | null>(null);\n const [status, setStatus] = useState<MutationStatus>('idle');\n\n const writeContractAsync = useCallback(\n async (variables: WriteContractVariablesInternal): Promise<string> => {\n if (!isConnected || !address) {\n throw new WalletNotConnectedError();\n }\n\n setStatus('pending');\n setError(null);\n setData(undefined);\n\n const resolvedArgs = resolveArgs(variables);\n\n try {\n if (provider === 'okx') {\n if (!window.okxwallet) {\n throw new WalletNotFoundError({ wallet: 'OKX' });\n }\n\n const response =\n await window.okxwallet.stacks.signTransaction({\n contractAddress: variables.address,\n contractName: variables.contract,\n functionName: variables.functionName,\n functionArgs: prepareArgsForOKX(resolvedArgs),\n postConditions: preparePostConditionsForOKX(\n variables.pc.postConditions\n ),\n postConditionMode: variables.pc.mode,\n stxAddress: address,\n txType: 'contract_call',\n anchorMode: 3,\n });\n\n setData(response.txHash);\n setStatus('success');\n return response.txHash;\n }\n\n const response = await request('stx_callContract', {\n address,\n contract: `${variables.address}.${variables.contract}`,\n functionName: variables.functionName,\n functionArgs: resolvedArgs,\n postConditions: variables.pc.postConditions,\n postConditionMode:\n variables.pc.mode === PostConditionMode.Allow\n ? 'allow'\n : 'deny',\n network: getNetworkFromAddress(address),\n });\n\n if (!response.txid) {\n throw new Error('No transaction ID returned');\n }\n\n setData(response.txid);\n setStatus('success');\n return response.txid;\n } catch (err) {\n const error = err instanceof BaseError\n ? err\n : new WalletRequestError({\n method: 'stx_callContract',\n wallet: provider ?? 'unknown',\n cause: err instanceof Error ? err : new Error(String(err)),\n });\n setError(error);\n setStatus('error');\n throw error;\n }\n },\n [isConnected, address, provider]\n ) as unknown as WriteContractAsyncFn;\n\n const writeContract = useCallback(\n (variables: WriteContractVariablesInternal, options?: WriteContractOptions) => {\n (writeContractAsync as unknown as (v: WriteContractVariablesInternal) => Promise<string>)(variables)\n .then((data) => {\n options?.onSuccess?.(data);\n options?.onSettled?.(data, null);\n })\n .catch((error) => {\n options?.onError?.(error);\n options?.onSettled?.(undefined, error);\n });\n },\n [writeContractAsync]\n ) as unknown as WriteContractFn;\n\n const reset = useCallback(() => {\n setData(undefined);\n setError(null);\n setStatus('idle');\n }, []);\n\n return useMemo(\n () => ({\n writeContract,\n writeContractAsync,\n reset,\n data,\n error,\n isError: status === 'error',\n isIdle: status === 'idle',\n isPending: status === 'pending',\n isSuccess: status === 'success',\n status,\n }),\n [writeContract, writeContractAsync, reset, data, error, status]\n );\n};\n\nexport type {\n WriteContractVariables,\n WriteContractOptions,\n PostConditionConfig,\n TypedWriteContractVariables,\n UntypedWriteContractVariables,\n WriteContractAsyncFn,\n WriteContractFn,\n} from './use-write-contract.types';\n","'use client';\n\nimport { getPrimaryName } from 'bns-v2-sdk';\nimport { useEffect, useState } from 'react';\n\nimport { getNetworkFromAddress } from '../utils/get-network-from-address';\n\nexport const useBnsName = (address?: string) => {\n const [bnsName, setBnsName] = useState<string | null>(null);\n const [isLoading, setIsLoading] = useState(false);\n\n useEffect(() => {\n if (!address) {\n setBnsName(null);\n setIsLoading(false);\n return;\n }\n\n let cancelled = false;\n\n const fetchBnsName = async () => {\n setIsLoading(true);\n\n try {\n const network = getNetworkFromAddress(address);\n const result = await getPrimaryName({ address, network });\n\n if (cancelled) return;\n\n const fullName = result\n ? `${result.name}.${result.namespace}`\n : null;\n\n setBnsName(fullName);\n } catch {\n if (cancelled) return;\n setBnsName(null);\n } finally {\n if (!cancelled) {\n setIsLoading(false);\n }\n }\n };\n\n void fetchBnsName();\n\n return () => {\n cancelled = true;\n };\n }, [address]);\n\n return { bnsName, isLoading };\n};\n","'use client';\n\nimport { useMemo } from 'react';\n\nimport { useStacksWalletContext } from '../provider/stacks-wallet-provider';\n\nexport const useWallets = () => {\n const { wallets } = useStacksWalletContext();\n\n return useMemo(() => ({ wallets }), [wallets]);\n};\n","import type { ClarityAbi } from 'clarity-abitype';\n\n/** Pre-bind ABI + address + contract for reuse with useWriteContract. */\nexport function createContractConfig<const TAbi extends ClarityAbi>(config: {\n abi: TAbi;\n address: string;\n contract: string;\n}) {\n return config;\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../src/errors.ts","../src/constants/stacks-provider-mapping.ts","../src/constants/storage-keys.ts","../src/constants/wallets.ts","../src/utils/get-stacks-wallets.ts","../src/provider/stacks-wallet-provider.helpers.ts","../src/hooks/use-wallet-connect/use-wallet-connect.helpers.ts","../src/hooks/use-wallet-connect/use-wallet-connect.ts","../src/hooks/use-xverse/use-xverse.helpers.ts","../src/hooks/use-xverse/use-xverse.ts","../src/utils/get-local-storage-wallet.ts","../src/provider/stacks-wallet-provider.tsx","../src/hooks/use-address.ts","../src/hooks/use-connect.ts","../src/hooks/use-disconnect.ts","../src/hooks/use-sign-message.ts","../src/hooks/use-sign-structured-message.ts","../src/hooks/use-sign-transaction.ts","../src/utils/get-network-from-address.ts","../src/hooks/use-transfer-stx.ts","../src/utils/to-clarity-value.ts","../src/hooks/use-write-contract/use-write-contract.helpers.ts","../src/hooks/use-write-contract/use-write-contract.ts","../src/hooks/use-bns-name.ts","../src/hooks/use-wallets.ts","../src/utils/create-contract-config.ts"],"names":["WalletConnect","extractStacksAddress","useEffect","clearSelectedProviderId","getSelectedProvider","connect","useState","DEFAULT_PROVIDERS","WALLET_CONNECT_PROVIDER","createContext","useRef","setSelectedProviderId","useCallback","gen","wc","request","getSelectedProviderId","data","useMemo","jsx","useContext","error","response","uintCV","intCV","boolCV","contractPrincipalCV","standardPrincipalCV","noneCV","bufferCV","stringAsciiCV","stringUtf8CV","someCV","listCV","tupleCV","postConditionToHex","cvToHex","PostConditionMode","getPrimaryName"],"mappings":"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","file":"index.cjs","sourcesContent":["/** Discriminated type for narrowing caught errors to `BaseError`. */\nexport type BaseErrorType = BaseError & { name: 'StacksKitError' }\n\n/**\n * Base error class for all `@satoshai/kit` errors.\n *\n * All errors thrown by hooks extend this class, so you can catch them with\n * `error instanceof BaseError` and use {@link BaseError.walk | walk()} to\n * traverse the cause chain.\n *\n * @example\n * ```ts\n * import { BaseError } from '@satoshai/kit';\n *\n * try {\n * await signMessageAsync({ message: 'hello' });\n * } catch (err) {\n * if (err instanceof BaseError) {\n * console.log(err.shortMessage); // human-readable summary\n * console.log(err.walk()); // root cause\n * }\n * }\n * ```\n */\nexport class BaseError extends Error {\n override name = 'StacksKitError'\n\n /** Short, human-readable error summary without details or cause chain. */\n shortMessage: string\n\n constructor(shortMessage: string, options?: { cause?: Error; details?: string }) {\n const message = [\n shortMessage,\n options?.details && `Details: ${options.details}`,\n ].filter(Boolean).join('\\n\\n')\n\n super(message, options?.cause ? { cause: options.cause } : undefined)\n this.shortMessage = shortMessage\n }\n\n /**\n * Walk the error cause chain. If `fn` is provided, returns the first error\n * where `fn` returns `true`; otherwise returns the root cause.\n */\n walk(fn?: (err: unknown) => boolean): unknown {\n return walk(this, fn)\n }\n}\n\nfunction walk(err: unknown, fn?: (err: unknown) => boolean): unknown {\n if (fn?.(err)) return err\n if (err && typeof err === 'object' && 'cause' in err) {\n return walk((err as { cause: unknown }).cause, fn)\n }\n return err\n}\n\n/** Discriminated type for narrowing to `WalletNotConnectedError`. */\nexport type WalletNotConnectedErrorType = WalletNotConnectedError & {\n name: 'WalletNotConnectedError'\n}\n\n/** Thrown when a mutation hook is called before a wallet is connected. */\nexport class WalletNotConnectedError extends BaseError {\n override name = 'WalletNotConnectedError'\n\n constructor() {\n super('Wallet is not connected')\n }\n}\n\n/** Discriminated type for narrowing to `WalletNotFoundError`. */\nexport type WalletNotFoundErrorType = WalletNotFoundError & {\n name: 'WalletNotFoundError'\n}\n\n/** Thrown when a wallet's browser extension is not installed (e.g. OKX). */\nexport class WalletNotFoundError extends BaseError {\n override name = 'WalletNotFoundError'\n\n /** The wallet ID that was not found. */\n wallet: string\n\n constructor({ wallet }: { wallet: string }) {\n super(`${wallet} wallet not found`, {\n details: 'The wallet extension may not be installed.',\n })\n this.wallet = wallet\n }\n}\n\n/** Discriminated type for narrowing to `UnsupportedMethodError`. */\nexport type UnsupportedMethodErrorType = UnsupportedMethodError & {\n name: 'UnsupportedMethodError'\n}\n\n/** Thrown when a wallet does not support the requested RPC method (e.g. OKX + `stx_signStructuredMessage`). */\nexport class UnsupportedMethodError extends BaseError {\n override name = 'UnsupportedMethodError'\n\n /** The SIP-030 method name that is not supported. */\n method: string\n /** The wallet that does not support the method. */\n wallet: string\n\n constructor({ method, wallet }: { method: string; wallet: string }) {\n super(`${method} is not supported by ${wallet} wallet`)\n this.method = method\n this.wallet = wallet\n }\n}\n\n/** Discriminated type for narrowing to `WalletRequestError`. */\nexport type WalletRequestErrorType = WalletRequestError & {\n name: 'WalletRequestError'\n}\n\n/** Thrown when a wallet RPC request fails (user rejection, timeout, etc.). The original error is attached as `cause`. */\nexport class WalletRequestError extends BaseError {\n override name = 'WalletRequestError'\n\n /** The SIP-030 method name that failed. */\n method: string\n /** The wallet that returned the error. */\n wallet: string\n\n constructor({ method, wallet, cause }: { method: string; wallet: string; cause: Error }) {\n super(`${wallet} wallet request failed`, {\n cause,\n details: cause.message,\n })\n this.method = method\n this.wallet = wallet\n }\n}\n","import type { SupportedStacksWallet } from \"./wallets\";\n\nexport const STACKS_TO_STACKS_CONNECT_PROVIDERS: Record<\n SupportedStacksWallet,\n | \"LeatherProvider\"\n | \"XverseProviders.BitcoinProvider\"\n | \"AsignaProvider\"\n | \"FordefiProviders.UtxoProvider\"\n | \"WalletConnectProvider\"\n | \"OkxStacksProvider\"\n> = {\n xverse: \"XverseProviders.BitcoinProvider\",\n leather: \"LeatherProvider\",\n okx: \"OkxStacksProvider\",\n asigna: \"AsignaProvider\",\n fordefi: \"FordefiProviders.UtxoProvider\",\n \"wallet-connect\": \"WalletConnectProvider\",\n};\n\nexport const STACKS_CONNECT_TO_STACKS_PROVIDERS = Object.fromEntries(\n Object.entries(STACKS_TO_STACKS_CONNECT_PROVIDERS).map(([kit, connect]) => [\n connect,\n kit,\n ])\n) as Record<string, SupportedStacksWallet>;\n","export const LOCAL_STORAGE_STACKS = \"@satoshai/kit\";\n","/** All wallet IDs supported by `@satoshai/kit`. */\nexport const SUPPORTED_STACKS_WALLETS = [\n \"xverse\",\n \"leather\",\n \"asigna\",\n \"fordefi\",\n \"wallet-connect\",\n \"okx\",\n] as const;\n\n/** Union of supported wallet identifiers. */\nexport type SupportedStacksWallet = (typeof SUPPORTED_STACKS_WALLETS)[number];\n","import {\n SUPPORTED_STACKS_WALLETS,\n type SupportedStacksWallet,\n} from '../constants/wallets';\n\n/** Result of {@link getStacksWallets}. */\nexport interface StacksWallets {\n /** All wallets supported by `@satoshai/kit`. */\n supported: SupportedStacksWallet[];\n /** Subset of `supported` whose browser extension is currently detected. */\n installed: SupportedStacksWallet[];\n}\n\n/**\n * Detect which Stacks wallets are supported and installed.\n *\n * Safe to call on the server — `installed` will contain only `'wallet-connect'`\n * when `window` is undefined.\n */\nexport const getStacksWallets = (): StacksWallets => {\n const supported = [...SUPPORTED_STACKS_WALLETS];\n const installed = supported.filter((wallet) =>\n checkIfStacksProviderIsInstalled(wallet)\n );\n\n return { supported, installed };\n};\n\nexport const checkIfStacksProviderIsInstalled = (\n wallet: SupportedStacksWallet\n): boolean => {\n if (typeof window === 'undefined') return wallet === 'wallet-connect';\n\n /* eslint-disable @typescript-eslint/no-explicit-any */\n switch (wallet) {\n case 'xverse':\n return !!(window as any).XverseProviders;\n case 'leather':\n return (\n !!(window as any).LeatherProvider ||\n !!(window as any).HiroWalletProvider\n );\n case 'asigna':\n return !!(window as any).AsignaProvider;\n case 'okx':\n return !!(window as any).okxwallet;\n case 'fordefi':\n return !!(window as any).FordefiProviders?.UtxoProvider;\n case 'wallet-connect':\n return true;\n }\n /* eslint-enable @typescript-eslint/no-explicit-any */\n};\n","import type { SupportedStacksWallet } from '../constants/wallets';\nimport type { WbipProvider } from '@stacks/connect';\nimport type {\n WalletConnectMetadata,\n StacksChain,\n} from './stacks-wallet-provider.types';\nimport { WalletConnect } from '@stacks/connect';\n\nconst STACKS_CHAIN_MAPPING = {\n mainnet: WalletConnect.Chains.Stacks.Mainnet,\n testnet: WalletConnect.Chains.Stacks.Testnet,\n} as const;\n\nexport const buildWalletConnectConfig = (\n projectId: string,\n metadata?: Partial<WalletConnectMetadata>,\n chains?: StacksChain[]\n): {\n projectId: string;\n metadata: WalletConnectMetadata;\n networks: (typeof WalletConnect.Networks.Stacks)[];\n} => {\n const selectedChains = chains ?? ['mainnet'];\n const walletConnectChains = selectedChains.map(\n (chain) => STACKS_CHAIN_MAPPING[chain]\n );\n\n return {\n projectId,\n metadata: {\n name: 'Universal Connector',\n description: 'Universal Connector',\n url: 'https://appkit.reown.com',\n icons: ['https://appkit.reown.com/icon.png'],\n ...metadata,\n },\n networks: [\n {\n ...WalletConnect.Networks.Stacks,\n chains: walletConnectChains,\n },\n ],\n };\n};\n\nexport const getOKXStacksAddress = async () => {\n if (!window.okxwallet) {\n throw new Error('🚨 OKX Wallet is not installed');\n }\n\n const stacksResponse = await window.okxwallet.stacks.connect();\n\n if (!stacksResponse) {\n throw new Error('🚨 Failed to connect with OKX Wallet');\n }\n\n return {\n address: stacksResponse.address,\n provider: 'okx' as const,\n };\n};\n\n/**\n * OKX provider metadata for @stacks/connect's modal. Passed via\n * `defaultProviders` so @stacks/connect places it after natively-registered\n * wallets (i.e. last in the modal).\n */\nexport const OKX_PROVIDER_META: WbipProvider = {\n id: 'OkxStacksProvider',\n name: 'OKX Wallet',\n icon: 'data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4KPHN2ZyB3aWR0aD0iMjQiIGhlaWdodD0iMjQiICAgICB4bWxuczp4b2RtPSJodHRwOi8vd3d3LmNvcmVsLmNvbS9jb3JlbGRyYXcvb2RtLzIwMDMiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHZlcnNpb249IjEuMSIgaWQ9IkxheWVyXzEiIHg9IjBweCIgeT0iMHB4IiB2aWV3Qm94PSIwIDAgMjUwMCAyNTAwIiBzdHlsZT0iZW5hYmxlLWJhY2tncm91bmQ6bmV3IDAgMCAyNTAwIDI1MDA7IiB4bWw6c3BhY2U9InByZXNlcnZlIj4KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KICAgIC5zdDB7ZmlsbC1ydWxlOmV2ZW5vZGQ7Y2xpcC1ydWxlOmV2ZW5vZGQ7fQogICAgLnN0MXtmaWxsOiNGRkZGRkY7fQo8L3N0eWxlPgo8ZyBpZD0iTGF5ZXJfeDAwMjBfMSI+CiAgICA8ZyBpZD0iXzIxODczODEzMjM4NTYiPgogICAgICAgIDxyZWN0IHk9IjAiIGNsYXNzPSJzdDAiIHdpZHRoPSIyNTAwIiBoZWlnaHQ9IjI1MDAiPjwvcmVjdD4KICAgICAgICA8Zz4KICAgICAgICAgICAgPHBhdGggY2xhc3M9InN0MSIgZD0iTTE0NjMsMTAxNWgtNDA0Yy0xNywwLTMxLDE0LTMxLDMxdjQwNGMwLDE3LDE0LDMxLDMxLDMxaDQwNGMxNywwLDMxLTE0LDMxLTMxdi00MDQgICAgIEMxNDk0LDEwMjksMTQ4MCwxMDE1LDE0NjMsMTAxNXoiPjwvcGF0aD4KICAgICAgICAgICAgPHBhdGggY2xhc3M9InN0MSIgZD0iTTk5Niw1NDlINTkyYy0xNywwLTMxLDE0LTMxLDMxdjQwNGMwLDE3LDE0LDMxLDMxLDMxaDQwNGMxNywwLDMxLTE0LDMxLTMxVjU4MEMxMDI3LDU2MywxMDEzLDU0OSw5OTYsNTQ5eiI+PC9wYXRoPgogICAgICAgICAgICA8cGF0aCBjbGFzcz0ic3QxIiBkPSJNMTkzMCw1NDloLTQwNGMtMTcsMC0zMSwxNC0zMSwzMXY0MDRjMCwxNywxNCwzMSwzMSwzMWg0MDRjMTcsMCwzMS0xNCwzMS0zMVY1ODAgICAgIEMxOTYxLDU2MywxOTQ3LDU0OSwxOTMwLDU0OXoiPjwvcGF0aD4KICAgICAgICAgICAgPHBhdGggY2xhc3M9InN0MSIgZD0iTTk5NiwxNDgySDU5MmMtMTcsMC0zMSwxNC0zMSwzMXY0MDRjMCwxNywxNCwzMSwzMSwzMWg0MDRjMTcsMCwzMS0xNCwzMS0zMXYtNDA0ICAgICBDMTAyNywxNDk2LDEwMTMsMTQ4Miw5OTYsMTQ4MnoiPjwvcGF0aD4KICAgICAgICAgICAgPHBhdGggY2xhc3M9InN0MSIgZD0iTTE5MzAsMTQ4MmgtNDA0Yy0xNywwLTMxLDE0LTMxLDMxdjQwNGMwLDE3LDE0LDMxLDMxLDMxaDQwNGMxNywwLDMxLTE0LDMxLTMxdi00MDQgICAgIEMxOTYxLDE0OTYsMTk0NywxNDgyLDE5MzAsMTQ4MnoiPjwvcGF0aD4KICAgICAgICA8L2c+CiAgICA8L2c+CjwvZz4KPC9zdmc+',\n webUrl: 'https://www.okx.com/',\n};\n\n/**\n * Mount a minimal WBIP adapter at `window.OkxStacksProvider` so\n * @stacks/connect's `getProviderFromId()` detects OKX as installed.\n * Only `getAddresses` is handled — after connection the kit routes\n * signMessage / callContract through `window.okxwallet.stacks` directly.\n */\n/* eslint-disable @typescript-eslint/no-explicit-any */\nexport const registerOkxProvider = () => {\n if (typeof window === 'undefined') return;\n\n if (!(window as any).OkxStacksProvider) {\n (window as any).OkxStacksProvider = {\n request: async (method: string) => {\n if (method === 'getAddresses') {\n const data = await getOKXStacksAddress();\n return {\n result: {\n addresses: [\n { address: data.address, symbol: 'STX' },\n ],\n },\n };\n }\n throw new Error(\n `OKX adapter: unsupported method \"${method}\". Use connect('okx') for direct OKX SDK access.`\n );\n },\n };\n }\n};\n\nexport const unregisterOkxProvider = () => {\n if (typeof window === 'undefined') return;\n delete (window as any).OkxStacksProvider;\n};\n/* eslint-enable @typescript-eslint/no-explicit-any */\n\nexport const extractStacksAddress = (\n typedProvider: SupportedStacksWallet,\n addresses: { address?: string; symbol?: string }[]\n) => {\n if (!addresses.length) {\n throw new Error(`No addresses provided for ${typedProvider} wallet`);\n }\n\n if (typedProvider === 'leather' || typedProvider === 'asigna') {\n const stxAddress = addresses.find(\n (addr) => addr.symbol === 'STX'\n )?.address;\n\n if (stxAddress) return stxAddress;\n }\n\n const stacksAddress = addresses.find((addr) =>\n addr.address?.startsWith('S')\n )?.address;\n\n if (stacksAddress) return stacksAddress;\n\n const legacyAddress = addresses[2]?.address;\n\n if (legacyAddress?.startsWith('S')) return legacyAddress;\n\n throw new Error(\n `No valid Stacks address found for ${typedProvider} wallet`\n );\n};\n","import type {\n WcUniversalProvider,\n StxAccount,\n} from './use-wallet-connect.types';\n\n/**\n * Access the underlying UniversalProvider from the @stacks/connect\n * WalletConnect wrapper. Returns null if not available.\n */\nexport const getWcUniversalProvider = (): WcUniversalProvider | null =>\n window.WalletConnectProvider?.connector?.provider ?? null;\n\n/**\n * Extract the first Stacks address from an stx_accountChange payload.\n *\n * SIP-030 defines the data as an array of { address, publicKey } objects.\n * The generic WC `accountsChanged` event may carry plain addresses or\n * CAIP-10 strings — this helper handles all three formats.\n */\nexport const extractStacksAddress = (\n accounts: (StxAccount | string)[],\n): string | null => {\n for (const entry of accounts) {\n if (typeof entry === 'object' && entry !== null && 'address' in entry) {\n return entry.address;\n }\n if (typeof entry === 'string') {\n if (entry.startsWith('S')) return entry;\n if (entry.startsWith('stacks:')) return entry.split(':')[2] ?? null;\n }\n }\n return null;\n};\n\nconst PING_TIMEOUT_MS = 10_000;\n\n/**\n * Ping the wallet via the WC relay to verify the session is still alive.\n * Returns true if alive, false if dead or unreachable.\n * Times out after 10 seconds to avoid the default 5-minute WC timeout.\n */\nexport const pingSession = async (): Promise<boolean> => {\n const wcProvider = getWcUniversalProvider();\n const client = wcProvider?.client;\n const session = wcProvider?.session;\n if (!client || !session) return false;\n try {\n await Promise.race([\n client.ping({ topic: session.topic }),\n new Promise<never>((_, reject) =>\n setTimeout(() => reject(new Error('Ping timeout')), PING_TIMEOUT_MS)\n ),\n ]);\n return true;\n } catch {\n return false;\n }\n};\n","import { useEffect } from 'react';\nimport { clearSelectedProviderId } from '@stacks/connect';\n\nimport type { SupportedStacksWallet } from '../../constants/wallets';\nimport {\n getWcUniversalProvider,\n extractStacksAddress,\n pingSession,\n} from './use-wallet-connect.helpers';\n\nexport const useWalletConnect = ({\n address,\n provider,\n onAddressChange,\n onDisconnect,\n}: {\n address: string | undefined;\n provider: SupportedStacksWallet | undefined;\n onAddressChange: (newAddress: string) => void;\n onDisconnect: () => void;\n}) => {\n // On restore: validate the session is still alive\n useEffect(() => {\n if (provider !== 'wallet-connect' || !address) return;\n\n let cancelled = false;\n\n const validateSession = async () => {\n const alive = await pingSession();\n if (cancelled) return;\n if (!alive) {\n const wcProvider = getWcUniversalProvider();\n try {\n await wcProvider?.disconnect();\n } catch {\n // Provider may already be cleaned up\n }\n clearSelectedProviderId();\n onDisconnect();\n }\n };\n\n void validateSession();\n\n return () => {\n cancelled = true;\n };\n }, [provider, address, onDisconnect]);\n\n // Listen for wallet-initiated disconnect and account changes\n useEffect(() => {\n if (provider !== 'wallet-connect' || !address) return;\n\n const wcProvider = getWcUniversalProvider();\n if (!wcProvider) return;\n\n const handleDisconnect = () => {\n clearSelectedProviderId();\n onDisconnect();\n };\n\n const handleAccountsChanged = (...args: unknown[]) => {\n const accounts = args[0] as (import('./use-wallet-connect.types').StxAccount | string)[];\n const newAddress = extractStacksAddress(accounts);\n if (newAddress && newAddress !== address) {\n onAddressChange(newAddress);\n }\n };\n\n wcProvider.on('disconnect', handleDisconnect);\n wcProvider.on('accountsChanged', handleAccountsChanged);\n wcProvider.on('stx_accountChange', handleAccountsChanged);\n wcProvider.on('stx_accountsChanged', handleAccountsChanged);\n\n return () => {\n try {\n wcProvider.off('disconnect', handleDisconnect);\n wcProvider.off('accountsChanged', handleAccountsChanged);\n wcProvider.off('stx_accountChange', handleAccountsChanged);\n wcProvider.off('stx_accountsChanged', handleAccountsChanged);\n } catch (error) {\n console.error(\n 'Failed to remove WalletConnect listeners:',\n error\n );\n }\n };\n }, [address, provider, onAddressChange, onDisconnect]);\n};\n","import { getSelectedProvider } from '@stacks/connect';\n\nexport const getXverseProductInfo = async (): Promise<{\n version?: string;\n name?: string;\n} | null> =>\n (await window.XverseProviders?.StacksProvider?.getProductInfo?.()) ?? null;\n\nexport const shouldSupportAccountChange = (\n version: string | undefined\n): boolean => version !== undefined && version !== '1.0.0';\n\nexport const waitForXverseProvider = async (\n maxAttempts = 10,\n initialDelay = 200\n): Promise<boolean> => {\n for (let i = 0; i < maxAttempts; i++) {\n const provider = getSelectedProvider();\n\n if (provider?.request && provider?.addListener) return true;\n\n await new Promise((resolve) =>\n setTimeout(resolve, initialDelay * Math.min(i + 1, 5))\n );\n }\n\n return false;\n};\n\nexport const extractAndValidateStacksAddress = (\n addresses:\n | {\n address: string;\n addressType: string;\n purpose: string;\n }[]\n | undefined,\n currentAddress: string | undefined,\n onAddressChange: (address: string) => void,\n connect: () => Promise<void>\n) => {\n if (!addresses || !Array.isArray(addresses)) {\n void connect();\n return;\n }\n\n const stacksAccount = addresses.find(\n (acc) => acc.purpose === 'stacks' || acc.addressType === 'stacks'\n );\n\n if (!stacksAccount?.address) {\n void connect();\n return;\n }\n\n if (stacksAccount.address !== currentAddress) {\n onAddressChange(stacksAccount.address);\n }\n};\n","import { getSelectedProvider } from '@stacks/connect';\nimport { useEffect, useState } from 'react';\n\nimport type { SupportedStacksWallet } from '../../constants/wallets';\nimport type { ConnectOptions } from '../../provider/stacks-wallet-provider.types';\nimport type { XverseAccountChangeEvent } from './use-xverse.types';\nimport {\n extractAndValidateStacksAddress,\n getXverseProductInfo,\n shouldSupportAccountChange,\n waitForXverseProvider,\n} from './use-xverse.helpers';\n\nexport const useXverse = ({\n address,\n provider,\n onAddressChange,\n connect,\n}: {\n address: string | undefined;\n provider: SupportedStacksWallet | undefined;\n onAddressChange: (newAddress: string) => void;\n connect: (\n providerId?: SupportedStacksWallet,\n options?: ConnectOptions\n ) => Promise<void>;\n}) => {\n const [isProviderReady, setIsProviderReady] = useState(false);\n\n useEffect(() => {\n if (provider !== 'xverse') return;\n\n const checkProvider = async () => {\n const ready = await waitForXverseProvider();\n\n setIsProviderReady(ready);\n\n if (!ready) {\n console.error('Xverse provider failed to initialize');\n }\n };\n\n void checkProvider();\n }, [provider]);\n\n useEffect(() => {\n if (provider !== 'xverse' || !address || !isProviderReady) return;\n\n let cancelled = false;\n let removeListener: (() => void) | undefined;\n\n const setupXverse = async () => {\n try {\n const productInfo = await getXverseProductInfo();\n\n if (cancelled) return;\n\n if (!shouldSupportAccountChange(productInfo?.version)) return;\n\n const response = await getSelectedProvider()?.request(\n 'wallet_connect',\n null\n );\n\n if (cancelled) return;\n\n extractAndValidateStacksAddress(\n response?.result?.addresses,\n address,\n onAddressChange,\n () => connect('xverse')\n );\n\n removeListener = getSelectedProvider()?.addListener(\n 'accountChange',\n (event: XverseAccountChangeEvent) => {\n extractAndValidateStacksAddress(\n event?.addresses,\n address,\n onAddressChange,\n () => connect('xverse')\n );\n }\n );\n } catch (error) {\n console.error('Failed to setup Xverse:', error);\n }\n };\n\n void setupXverse();\n\n return () => {\n cancelled = true;\n\n if (!removeListener) return;\n\n try {\n removeListener();\n } catch (error) {\n console.error('Failed to remove Xverse listener:', error);\n }\n };\n }, [address, isProviderReady, onAddressChange, connect, provider]);\n};\n","import { LOCAL_STORAGE_STACKS } from '../constants/storage-keys';\nimport type { SupportedStacksWallet } from '../constants/wallets';\nimport { SUPPORTED_STACKS_WALLETS } from '../constants/wallets';\n\n/**\n * Read the persisted wallet session from localStorage.\n *\n * Returns `null` on the server, when no session is stored, or when the\n * stored provider is not in the supported wallets list.\n */\nexport const getLocalStorageWallet = (): {\n address: string;\n provider: SupportedStacksWallet;\n} | null => {\n if (typeof window === 'undefined') return null;\n\n const stored = localStorage.getItem(LOCAL_STORAGE_STACKS);\n\n if (!stored) return null;\n\n try {\n const data = JSON.parse(stored) as {\n address: string;\n provider: SupportedStacksWallet;\n };\n\n const isValid = SUPPORTED_STACKS_WALLETS.find(\n (wallet) => wallet === data.provider\n );\n\n return isValid ? data : null;\n } catch {\n return null;\n }\n};\n","'use client';\n\nimport {\n clearSelectedProviderId,\n getSelectedProviderId,\n setSelectedProviderId,\n request,\n getSelectedProvider,\n DEFAULT_PROVIDERS,\n WALLET_CONNECT_PROVIDER,\n WalletConnect,\n} from '@stacks/connect';\nimport {\n createContext,\n useContext,\n useCallback,\n useEffect,\n useRef,\n useState,\n useMemo,\n} from 'react';\n\nimport {\n STACKS_TO_STACKS_CONNECT_PROVIDERS,\n STACKS_CONNECT_TO_STACKS_PROVIDERS,\n} from '../constants/stacks-provider-mapping';\nimport { LOCAL_STORAGE_STACKS } from '../constants/storage-keys';\nimport type { SupportedStacksWallet } from '../constants/wallets';\nimport { SUPPORTED_STACKS_WALLETS } from '../constants/wallets';\nimport {\n checkIfStacksProviderIsInstalled,\n getStacksWallets,\n} from '../utils/get-stacks-wallets';\n\nimport {\n getOKXStacksAddress,\n extractStacksAddress,\n buildWalletConnectConfig,\n registerOkxProvider,\n unregisterOkxProvider,\n OKX_PROVIDER_META,\n} from './stacks-wallet-provider.helpers';\nimport type {\n WalletContextValue,\n WalletState,\n ConnectOptions,\n StacksWalletProviderProps,\n} from './stacks-wallet-provider.types';\nimport { useWalletConnect } from '../hooks/use-wallet-connect/use-wallet-connect';\nimport { useXverse } from '../hooks/use-xverse/use-xverse';\nimport { getLocalStorageWallet } from '../utils/get-local-storage-wallet';\n\n// Static lookup — built once at module load from @stacks/connect metadata\nconst PROVIDER_META_BY_KIT_ID = Object.fromEntries(\n [...DEFAULT_PROVIDERS, WALLET_CONNECT_PROVIDER, OKX_PROVIDER_META].map(\n (p) => [\n STACKS_CONNECT_TO_STACKS_PROVIDERS[p.id],\n { name: p.name, icon: p.icon ?? '', webUrl: p.webUrl ?? '' },\n ]\n )\n) as Record<string, { name: string; icon: string; webUrl: string }>;\n\nconst StacksWalletContext = createContext<WalletContextValue | undefined>(\n undefined\n);\n\n/**\n * React context provider that manages wallet connection state for all `@satoshai/kit` hooks.\n *\n * Wrap your app (or the subtree that needs wallet access) with this provider.\n * All hooks (`useConnect`, `useAddress`, `useWriteContract`, etc.) must be\n * rendered inside this provider.\n *\n * @example\n * ```tsx\n * import { StacksWalletProvider } from '@satoshai/kit';\n *\n * const wallets = ['xverse', 'leather', 'wallet-connect'] as const;\n * const wc = { projectId: 'YOUR_PROJECT_ID' };\n *\n * function App() {\n * return (\n * <StacksWalletProvider wallets={[...wallets]} walletConnect={wc}>\n * <YourApp />\n * </StacksWalletProvider>\n * );\n * }\n * ```\n */\nexport const StacksWalletProvider = ({\n children,\n wallets,\n connectModal = true,\n walletConnect,\n onConnect,\n onAddressChange,\n onDisconnect,\n}: StacksWalletProviderProps) => {\n const [address, setAddress] = useState<string | undefined>();\n const [provider, setProvider] = useState<\n SupportedStacksWallet | undefined\n >();\n const [isConnecting, setIsConnecting] = useState(false);\n\n // Generation counter — incremented by reset() to invalidate in-flight connect promises\n const connectGenRef = useRef(0);\n\n // Track whether the wallet was previously connected so we only fire\n // onConnect on the initial disconnected → connected transition (#23)\n const wasConnectedRef = useRef(false);\n\n // Guard against concurrent WalletConnect.initializeProvider calls\n const wcInitRef = useRef<Promise<void> | null>(null);\n\n // Keep walletConnect in a ref so the connect callback always reads the\n // latest config without needing the object in its dependency array\n // (inline walletConnect={{ projectId: '...' }} would cause a new ref\n // each render, recreating connect on every render).\n const walletConnectRef = useRef(walletConnect);\n walletConnectRef.current = walletConnect;\n\n // Serialize wallets to a stable string for use as a dependency,\n // so inline arrays like wallets={['xverse', 'leather']} don't\n // invalidate memos on every render. (Fixes #5)\n const walletsKey = wallets?.join(',');\n\n // Validate in render body so React error boundaries can catch it (#21)\n if (wallets?.includes('wallet-connect') && !walletConnect?.projectId) {\n throw new Error(\n 'StacksWalletProvider: \"wallet-connect\" is listed in wallets but no walletConnect.projectId was provided.'\n );\n }\n\n // Register the OKX WBIP adapter so it appears in the @stacks/connect modal.\n // Only when connectModal is enabled and OKX is in the configured wallets\n // (or wallets is undefined, meaning all wallets are configured).\n useEffect(() => {\n const okxConfigured = !wallets || wallets.includes('okx');\n if (connectModal && okxConfigured) {\n registerOkxProvider();\n return () => unregisterOkxProvider();\n }\n }, [connectModal, walletsKey]);\n\n useEffect(() => {\n const loadPersistedWallet = async () => {\n const persisted = getLocalStorageWallet();\n\n if (!persisted) return;\n\n setIsConnecting(true);\n\n try {\n if (persisted.provider === 'okx') {\n const data = await getOKXStacksAddress();\n setAddress(data.address);\n setProvider(data.provider);\n return;\n }\n\n if (\n persisted.provider === 'wallet-connect' &&\n walletConnect?.projectId\n ) {\n const initPromise = WalletConnect.initializeProvider(\n buildWalletConnectConfig(\n walletConnect.projectId,\n walletConnect.metadata,\n walletConnect.chains\n )\n );\n wcInitRef.current = initPromise;\n await initPromise;\n wcInitRef.current = null;\n }\n\n setAddress(persisted.address);\n setProvider(persisted.provider);\n setSelectedProviderId(\n STACKS_TO_STACKS_CONNECT_PROVIDERS[persisted.provider]\n );\n } catch (error) {\n console.error('Failed to restore wallet connection:', error);\n } finally {\n setIsConnecting(false);\n }\n };\n\n void loadPersistedWallet();\n }, [walletConnect?.projectId]);\n\n const connect = useCallback(\n async (\n providerId?: SupportedStacksWallet,\n options?: ConnectOptions\n ) => {\n // --- Modal branch: delegate wallet selection to @stacks/connect ---\n if (connectModal && !providerId) {\n const gen = ++connectGenRef.current;\n setIsConnecting(true);\n\n try {\n clearSelectedProviderId();\n\n const requestOptions: Parameters<typeof request>[0] = {\n forceWalletSelect: true,\n // OKX at the end so it appears last among installed wallets\n defaultProviders: [\n ...DEFAULT_PROVIDERS,\n OKX_PROVIDER_META,\n ],\n };\n\n if (wallets) {\n requestOptions.approvedProviderIds = wallets.map(\n (w) => STACKS_TO_STACKS_CONNECT_PROVIDERS[w]\n );\n }\n\n const wc = walletConnectRef.current;\n if (wc?.projectId) {\n requestOptions.walletConnect =\n buildWalletConnectConfig(\n wc.projectId,\n wc.metadata,\n wc.chains\n );\n }\n\n const data = await request(\n requestOptions,\n 'getAddresses',\n {}\n );\n\n if (connectGenRef.current !== gen) return;\n\n const selectedId = getSelectedProviderId();\n const resolvedProvider = selectedId\n ? STACKS_CONNECT_TO_STACKS_PROVIDERS[selectedId]\n : undefined;\n\n if (!resolvedProvider) {\n throw new Error(\n `Unknown provider returned from @stacks/connect modal: ${selectedId ?? 'none'}`\n );\n }\n\n const extractedAddress = extractStacksAddress(\n resolvedProvider,\n data.addresses\n );\n\n setAddress(extractedAddress);\n setProvider(resolvedProvider);\n options?.onSuccess?.(extractedAddress, resolvedProvider);\n } catch (error) {\n if (connectGenRef.current !== gen) return;\n console.error('Failed to connect wallet:', error);\n getSelectedProvider()?.disconnect?.();\n clearSelectedProviderId();\n options?.onError?.(error as Error);\n } finally {\n if (connectGenRef.current === gen) {\n setIsConnecting(false);\n }\n }\n return;\n }\n\n // --- Explicit provider branch (existing behavior) ---\n const typedProvider = SUPPORTED_STACKS_WALLETS.find(\n (wallet) => wallet === providerId\n );\n\n if (!typedProvider) {\n const error = new Error(\n 'The wallet provider selected is not supported!'\n );\n console.error('🚨', error.message);\n options?.onError?.(error);\n return;\n }\n\n if (!checkIfStacksProviderIsInstalled(typedProvider)) {\n const error = new Error(\n `${typedProvider} wallet is not installed. Please install the wallet extension to continue.`\n );\n console.error('🚨', error.message);\n options?.onError?.(error);\n return;\n }\n\n const wc = walletConnectRef.current;\n\n if (\n typedProvider === 'wallet-connect' &&\n !wc?.projectId\n ) {\n const error = new Error(\n 'WalletConnect requires a project ID. Please provide walletConnect.projectId to the StacksWalletProvider.'\n );\n console.error('🚨', error.message);\n options?.onError?.(error);\n return;\n }\n\n // Capture generation so we can detect if reset() was called during await\n const gen = ++connectGenRef.current;\n setIsConnecting(true);\n\n try {\n if (typedProvider === 'okx') {\n const data = await getOKXStacksAddress();\n if (connectGenRef.current !== gen) return;\n setAddress(data.address);\n setProvider(data.provider);\n options?.onSuccess?.(data.address, data.provider);\n return;\n }\n\n setSelectedProviderId(\n STACKS_TO_STACKS_CONNECT_PROVIDERS[typedProvider]\n );\n\n const wcConfig =\n typedProvider === 'wallet-connect' && wc\n ? buildWalletConnectConfig(\n wc.projectId,\n wc.metadata,\n wc.chains\n )\n : undefined;\n\n if (wcConfig) {\n // Wait for any in-flight init, then start ours\n if (wcInitRef.current) await wcInitRef.current;\n const initPromise =\n WalletConnect.initializeProvider(wcConfig);\n wcInitRef.current = initPromise;\n await initPromise;\n wcInitRef.current = null;\n }\n\n if (connectGenRef.current !== gen) return;\n\n const data = wcConfig\n ? await request(\n { walletConnect: wcConfig },\n 'getAddresses',\n {}\n )\n : await request('getAddresses');\n\n if (connectGenRef.current !== gen) return;\n\n const extractedAddress = extractStacksAddress(\n typedProvider,\n data.addresses\n );\n\n setAddress(extractedAddress);\n setProvider(typedProvider);\n options?.onSuccess?.(extractedAddress, typedProvider);\n } catch (error) {\n if (connectGenRef.current !== gen) return;\n console.error('Failed to connect wallet:', error);\n // OKX uses its own SDK and never calls setSelectedProviderId,\n // so getSelectedProvider() would return the previously connected\n // provider — disconnecting the wrong wallet.\n if (typedProvider !== 'okx') {\n getSelectedProvider()?.disconnect?.();\n clearSelectedProviderId();\n }\n options?.onError?.(error as Error);\n } finally {\n if (connectGenRef.current === gen) {\n setIsConnecting(false);\n }\n }\n },\n [connectModal, walletsKey]\n );\n\n const reset = useCallback(() => {\n connectGenRef.current++;\n setIsConnecting(false);\n clearSelectedProviderId();\n }, []);\n\n const disconnect = useCallback(\n (callback?: () => void) => {\n localStorage.removeItem(LOCAL_STORAGE_STACKS);\n setAddress(undefined);\n setProvider(undefined);\n getSelectedProvider()?.disconnect?.();\n clearSelectedProviderId();\n callback?.();\n onDisconnect?.();\n },\n [onDisconnect]\n );\n\n useEffect(() => {\n if (!address || !provider) return;\n\n localStorage.setItem(\n LOCAL_STORAGE_STACKS,\n JSON.stringify({ address, provider })\n );\n }, [address, provider]);\n\n useEffect(() => {\n const isConnected = !!address && !!provider;\n\n if (isConnected && !wasConnectedRef.current) {\n onConnect?.(provider, address);\n }\n\n wasConnectedRef.current = isConnected;\n }, [address, provider, onConnect]);\n\n const handleAddressChange = useCallback(\n (newAddress: string) => {\n setAddress(newAddress);\n onAddressChange?.(newAddress);\n },\n [onAddressChange]\n );\n\n useXverse({\n address,\n provider,\n onAddressChange: handleAddressChange,\n connect,\n });\n\n const handleWcDisconnect = useCallback(() => {\n localStorage.removeItem(LOCAL_STORAGE_STACKS);\n setAddress(undefined);\n setProvider(undefined);\n onDisconnect?.();\n }, [onDisconnect]);\n\n useWalletConnect({\n address,\n provider,\n onAddressChange: handleAddressChange,\n onDisconnect: handleWcDisconnect,\n });\n\n // Computed in render body (not memoized) so it picks up wallet extensions\n // injected after hydration. The context value useMemo below uses\n // walletInfosKey so the reference stays stable when nothing changes.\n const { installed } = getStacksWallets();\n const configured = wallets ?? [...SUPPORTED_STACKS_WALLETS];\n const walletInfos = configured.map((w) => ({\n id: w,\n name: PROVIDER_META_BY_KIT_ID[w]?.name ?? w,\n icon: PROVIDER_META_BY_KIT_ID[w]?.icon ?? '',\n webUrl: PROVIDER_META_BY_KIT_ID[w]?.webUrl ?? '',\n available:\n w === 'wallet-connect'\n ? !!walletConnect?.projectId\n : installed.includes(w),\n }));\n\n // Serialize for stable dependency — only changes when the actual data changes\n const walletInfosKey = walletInfos\n .map((w) => `${w.id}:${w.available}`)\n .join(',');\n\n const value = useMemo((): WalletContextValue => {\n const walletState: WalletState = isConnecting\n ? { status: 'connecting', address: undefined, provider: undefined }\n : address && provider\n ? { status: 'connected', address, provider }\n : {\n status: 'disconnected',\n address: undefined,\n provider: undefined,\n };\n\n return {\n ...walletState,\n connect,\n disconnect,\n reset,\n wallets: walletInfos,\n };\n }, [address, provider, isConnecting, connect, disconnect, reset, walletInfosKey]);\n\n return (\n <StacksWalletContext.Provider value={value}>\n {children}\n </StacksWalletContext.Provider>\n );\n};\n\nexport const useStacksWalletContext = () => {\n const context = useContext(StacksWalletContext);\n\n if (context === undefined) {\n throw new Error(\n '🚨 Stacks wallet hooks must be used within StacksWalletProvider'\n );\n }\n\n return context;\n};\n","'use client';\n\nimport { useMemo } from 'react';\n\nimport type { SupportedStacksWallet } from '../constants/wallets';\nimport { useStacksWalletContext } from '../provider/stacks-wallet-provider';\n\ntype UseAddressReturn =\n | {\n address: undefined;\n isConnected: false;\n isConnecting: boolean;\n isDisconnected: boolean;\n provider: undefined;\n }\n | {\n address: string;\n isConnected: true;\n isConnecting: false;\n isDisconnected: false;\n provider: SupportedStacksWallet;\n };\n\n/**\n * Read the connected wallet's address and connection status.\n *\n * Returns a discriminated union — when `isConnected` is `true`, `address`\n * and `provider` are guaranteed to be defined (no null checks needed).\n *\n * @example\n * ```ts\n * const { address, isConnected, provider } = useAddress();\n *\n * if (isConnected) {\n * console.log(address); // 'SP...' — narrowed to string\n * console.log(provider); // 'xverse' | 'leather' | ...\n * }\n * ```\n */\nexport const useAddress = (): UseAddressReturn => {\n const { address, status, provider } = useStacksWalletContext();\n\n return useMemo(() => {\n if (status === 'connected' && address && provider) {\n return {\n address,\n isConnected: true as const,\n isConnecting: false as const,\n isDisconnected: false as const,\n provider,\n };\n }\n\n return {\n address: undefined,\n isConnected: false as const,\n isConnecting: status === 'connecting',\n isDisconnected: status === 'disconnected',\n provider: undefined,\n };\n }, [address, status, provider]);\n};\n","'use client';\n\nimport { useCallback, useMemo, useState } from 'react';\n\nimport type { SupportedStacksWallet } from '../constants/wallets';\nimport type { ConnectOptions, MutationStatus } from '../provider/stacks-wallet-provider.types';\nimport { useStacksWalletContext } from '../provider/stacks-wallet-provider';\n\n/**\n * Connect to a Stacks wallet.\n *\n * Returns a mutation-style object with `connect`, `reset`, and status flags.\n * Call `connect()` with no args to open the `@stacks/connect` wallet modal,\n * or pass a specific wallet ID (e.g. `connect('xverse')`) to connect directly.\n *\n * @example\n * ```ts\n * const { connect, reset, isPending, isSuccess, error } = useConnect();\n *\n * // Modal mode (default)\n * await connect();\n *\n * // Direct mode\n * await connect('leather', {\n * onSuccess: (address, provider) => console.log(address),\n * onError: (err) => console.error(err),\n * });\n *\n * // Cancel a stuck connection (e.g. OKX popup dismissed)\n * reset();\n * ```\n */\nexport const useConnect = () => {\n const {\n connect: contextConnect,\n reset: contextReset,\n status: walletStatus,\n } = useStacksWalletContext();\n\n const [error, setError] = useState<Error | null>(null);\n const [mutationStatus, setMutationStatus] =\n useState<MutationStatus>('idle');\n\n const connect = useCallback(\n async (\n providerId?: SupportedStacksWallet,\n options?: ConnectOptions\n ) => {\n setError(null);\n setMutationStatus('pending');\n\n let settled = false;\n\n try {\n await contextConnect(providerId, {\n onSuccess: (address, provider) => {\n settled = true;\n setMutationStatus('success');\n options?.onSuccess?.(address, provider);\n },\n onError: (err) => {\n settled = true;\n setError(err);\n setMutationStatus('error');\n options?.onError?.(err);\n },\n });\n } finally {\n if (!settled) {\n // connect returned without calling onSuccess or onError\n // (e.g., cancelled by reset or stale generation)\n setMutationStatus('idle');\n }\n }\n },\n [contextConnect]\n );\n\n const reset = useCallback(() => {\n setError(null);\n setMutationStatus('idle');\n contextReset();\n }, [contextReset]);\n\n const value = useMemo(\n () => ({\n connect,\n reset,\n error,\n isError: mutationStatus === 'error',\n isIdle: mutationStatus === 'idle',\n isPending:\n mutationStatus === 'pending' ||\n walletStatus === 'connecting',\n isSuccess: mutationStatus === 'success',\n status: mutationStatus,\n }),\n [connect, reset, error, mutationStatus, walletStatus]\n );\n\n return value;\n};\n","'use client';\n\nimport { useCallback, useMemo, useState } from 'react';\n\nimport type { MutationStatus } from '../provider/stacks-wallet-provider.types';\nimport { useStacksWalletContext } from '../provider/stacks-wallet-provider';\n\n/**\n * Disconnect the currently connected wallet.\n *\n * Clears wallet state, removes the persisted session from localStorage,\n * and resets the provider context back to `disconnected`.\n *\n * @example\n * ```ts\n * const { disconnect, isSuccess } = useDisconnect();\n *\n * disconnect();\n * disconnect(() => navigate('/'));\n * ```\n */\nexport const useDisconnect = () => {\n const { disconnect: contextDisconnect } = useStacksWalletContext();\n\n const [error, setError] = useState<Error | null>(null);\n const [mutationStatus, setMutationStatus] =\n useState<MutationStatus>('idle');\n\n const disconnect = useCallback(\n (callback?: () => void) => {\n setError(null);\n\n try {\n contextDisconnect(callback);\n setMutationStatus('success');\n } catch (err) {\n const normalizedError =\n err instanceof Error ? err : new Error(String(err));\n setError(normalizedError);\n setMutationStatus('error');\n }\n },\n [contextDisconnect]\n );\n\n const reset = useCallback(() => {\n setError(null);\n setMutationStatus('idle');\n }, []);\n\n const value = useMemo(\n () => ({\n disconnect,\n reset,\n error,\n isError: mutationStatus === 'error',\n isIdle: mutationStatus === 'idle',\n isPending: mutationStatus === 'pending',\n isSuccess: mutationStatus === 'success',\n status: mutationStatus,\n }),\n [disconnect, reset, error, mutationStatus]\n );\n\n return value;\n};\n","'use client';\n\nimport { request } from '@stacks/connect';\nimport { useCallback, useMemo, useState } from 'react';\n\nimport {\n BaseError,\n WalletNotConnectedError,\n WalletNotFoundError,\n WalletRequestError,\n} from '../errors';\nimport type { MutationStatus } from '../provider/stacks-wallet-provider.types';\nimport { useAddress } from './use-address';\n\n/** Variables for {@link useSignMessage}. */\nexport interface SignMessageVariables {\n /** The plaintext message to sign. */\n message: string;\n /** Optional public key hint for wallets that manage multiple keys. */\n publicKey?: string;\n}\n\n/** Successful result from {@link useSignMessage}. */\nexport interface SignMessageData {\n /** The public key that produced the signature. */\n publicKey: string;\n /** The hex-encoded signature. */\n signature: string;\n}\n\n/** Callback options for the fire-and-forget `signMessage()` variant. */\nexport interface SignMessageOptions {\n onSuccess?: (data: SignMessageData) => void;\n onError?: (error: Error) => void;\n onSettled?: (\n data: SignMessageData | undefined,\n error: Error | null\n ) => void;\n}\n\n/**\n * Sign an arbitrary plaintext message with the connected wallet.\n *\n * Provides both a callback-style `signMessage()` and a promise-based\n * `signMessageAsync()`, plus mutation status flags.\n *\n * @example\n * ```ts\n * const { signMessageAsync, isPending } = useSignMessage();\n *\n * const { publicKey, signature } = await signMessageAsync({\n * message: 'Hello Stacks',\n * });\n * ```\n *\n * @throws {WalletNotConnectedError} If no wallet is connected.\n * @throws {WalletNotFoundError} If OKX extension is not installed.\n * @throws {WalletRequestError} If the wallet rejects or fails the request.\n */\nexport const useSignMessage = () => {\n const { isConnected, provider } = useAddress();\n const [data, setData] = useState<SignMessageData | undefined>(undefined);\n const [error, setError] = useState<BaseError | null>(null);\n const [status, setStatus] = useState<MutationStatus>('idle');\n\n const signMessageAsync = useCallback(\n async (variables: SignMessageVariables): Promise<SignMessageData> => {\n if (!isConnected) {\n throw new WalletNotConnectedError();\n }\n\n setStatus('pending');\n setError(null);\n setData(undefined);\n\n try {\n let result: SignMessageData;\n\n if (provider === 'okx') {\n if (!window.okxwallet) {\n throw new WalletNotFoundError({ wallet: 'OKX' });\n }\n\n result = await window.okxwallet.stacks.signMessage({\n message: variables.message,\n });\n } else {\n result = await request('stx_signMessage', {\n message: variables.message,\n ...(variables.publicKey && {\n publicKey: variables.publicKey,\n }),\n });\n }\n\n setData(result);\n setStatus('success');\n return result;\n } catch (err) {\n const error = err instanceof BaseError\n ? err\n : new WalletRequestError({\n method: 'stx_signMessage',\n wallet: provider ?? 'unknown',\n cause: err instanceof Error ? err : new Error(String(err)),\n });\n setError(error);\n setStatus('error');\n throw error;\n }\n },\n [isConnected, provider]\n );\n\n const signMessage = useCallback(\n (variables: SignMessageVariables, options?: SignMessageOptions) => {\n signMessageAsync(variables)\n .then((data) => {\n options?.onSuccess?.(data);\n options?.onSettled?.(data, null);\n })\n .catch((error) => {\n options?.onError?.(error);\n options?.onSettled?.(undefined, error);\n });\n },\n [signMessageAsync]\n );\n\n const reset = useCallback(() => {\n setData(undefined);\n setError(null);\n setStatus('idle');\n }, []);\n\n return useMemo(\n () => ({\n signMessage,\n signMessageAsync,\n reset,\n data,\n error,\n isError: status === 'error',\n isIdle: status === 'idle',\n isPending: status === 'pending',\n isSuccess: status === 'success',\n status,\n }),\n [signMessage, signMessageAsync, reset, data, error, status]\n );\n};\n","'use client';\n\nimport { request } from '@stacks/connect';\nimport type { ClarityValue, TupleCV } from '@stacks/transactions';\nimport { useCallback, useMemo, useState } from 'react';\n\nimport {\n BaseError,\n WalletNotConnectedError,\n UnsupportedMethodError,\n WalletRequestError,\n} from '../errors';\nimport type { MutationStatus } from '../provider/stacks-wallet-provider.types';\nimport { useAddress } from './use-address';\n\n/** Variables for {@link useSignStructuredMessage}. */\nexport interface SignStructuredMessageVariables {\n /** The structured Clarity value to sign. */\n message: ClarityValue;\n /** SIP-018 domain tuple (name, version, chain-id). */\n domain: TupleCV;\n}\n\n/** Successful result from {@link useSignStructuredMessage}. */\nexport interface SignStructuredMessageData {\n publicKey: string;\n signature: string;\n}\n\n/** Callback options for the fire-and-forget `signStructuredMessage()` variant. */\nexport interface SignStructuredMessageOptions {\n onSuccess?: (data: SignStructuredMessageData) => void;\n onError?: (error: Error) => void;\n onSettled?: (\n data: SignStructuredMessageData | undefined,\n error: Error | null\n ) => void;\n}\n\n/**\n * Sign SIP-018 structured data with the connected wallet.\n *\n * Structured messages include a typed domain separator and a Clarity value\n * body, enabling verifiable off-chain signatures that are replay-safe.\n *\n * @example\n * ```ts\n * import { tupleCV, stringAsciiCV, uintCV } from '@stacks/transactions';\n *\n * const { signStructuredMessageAsync } = useSignStructuredMessage();\n *\n * const { signature } = await signStructuredMessageAsync({\n * domain: tupleCV({ name: stringAsciiCV('MyApp'), version: stringAsciiCV('1.0'), 'chain-id': uintCV(1) }),\n * message: tupleCV({ action: stringAsciiCV('authorize') }),\n * });\n * ```\n *\n * @throws {WalletNotConnectedError} If no wallet is connected.\n * @throws {UnsupportedMethodError} If the wallet does not support structured signing (OKX).\n * @throws {WalletRequestError} If the wallet rejects or fails the request.\n */\nexport const useSignStructuredMessage = () => {\n const { isConnected, provider } = useAddress();\n const [data, setData] = useState<SignStructuredMessageData | undefined>(\n undefined\n );\n const [error, setError] = useState<BaseError | null>(null);\n const [status, setStatus] = useState<MutationStatus>('idle');\n\n const signStructuredMessageAsync = useCallback(\n async (\n variables: SignStructuredMessageVariables\n ): Promise<SignStructuredMessageData> => {\n if (!isConnected) {\n throw new WalletNotConnectedError();\n }\n\n if (provider === 'okx') {\n throw new UnsupportedMethodError({\n method: 'stx_signStructuredMessage',\n wallet: 'OKX',\n });\n }\n\n setStatus('pending');\n setError(null);\n setData(undefined);\n\n try {\n const result = await request('stx_signStructuredMessage', {\n message: variables.message,\n domain: variables.domain,\n });\n\n setData(result);\n setStatus('success');\n return result;\n } catch (err) {\n const error = err instanceof BaseError\n ? err\n : new WalletRequestError({\n method: 'stx_signStructuredMessage',\n wallet: provider ?? 'unknown',\n cause: err instanceof Error ? err : new Error(String(err)),\n });\n setError(error);\n setStatus('error');\n throw error;\n }\n },\n [isConnected, provider]\n );\n\n const signStructuredMessage = useCallback(\n (\n variables: SignStructuredMessageVariables,\n options?: SignStructuredMessageOptions\n ) => {\n signStructuredMessageAsync(variables)\n .then((data) => {\n options?.onSuccess?.(data);\n options?.onSettled?.(data, null);\n })\n .catch((error) => {\n options?.onError?.(error);\n options?.onSettled?.(undefined, error);\n });\n },\n [signStructuredMessageAsync]\n );\n\n const reset = useCallback(() => {\n setData(undefined);\n setError(null);\n setStatus('idle');\n }, []);\n\n return useMemo(\n () => ({\n signStructuredMessage,\n signStructuredMessageAsync,\n reset,\n data,\n error,\n isError: status === 'error',\n isIdle: status === 'idle',\n isPending: status === 'pending',\n isSuccess: status === 'success',\n status,\n }),\n [\n signStructuredMessage,\n signStructuredMessageAsync,\n reset,\n data,\n error,\n status,\n ]\n );\n};\n","'use client';\n\nimport { request } from '@stacks/connect';\nimport { useCallback, useMemo, useState } from 'react';\n\nimport {\n BaseError,\n WalletNotConnectedError,\n UnsupportedMethodError,\n WalletRequestError,\n} from '../errors';\nimport type { MutationStatus } from '../provider/stacks-wallet-provider.types';\nimport { useAddress } from './use-address';\n\n/** Variables for {@link useSignTransaction}. */\nexport interface SignTransactionVariables {\n /** Hex-encoded serialized transaction to sign. */\n transaction: string;\n /** Whether to broadcast the signed transaction. Defaults to the wallet's behavior. */\n broadcast?: boolean;\n}\n\n/** Successful result from {@link useSignTransaction}. */\nexport interface SignTransactionData {\n /** The signed, hex-encoded transaction. */\n transaction: string;\n /** Transaction ID, present when the wallet broadcasts it. */\n txid?: string;\n}\n\n/** Callback options for the fire-and-forget `signTransaction()` variant. */\nexport interface SignTransactionOptions {\n onSuccess?: (data: SignTransactionData) => void;\n onError?: (error: Error) => void;\n onSettled?: (\n data: SignTransactionData | undefined,\n error: Error | null\n ) => void;\n}\n\n/**\n * Sign a serialized Stacks transaction without automatic broadcast.\n *\n * Useful for sponsored transaction flows where a separate service pays the\n * fee and broadcasts the transaction.\n *\n * @example\n * ```ts\n * const { signTransactionAsync } = useSignTransaction();\n *\n * const { transaction } = await signTransactionAsync({\n * transaction: '0x0100...',\n * broadcast: false,\n * });\n * ```\n *\n * @throws {WalletNotConnectedError} If no wallet is connected.\n * @throws {UnsupportedMethodError} If the wallet does not support raw signing (OKX).\n * @throws {WalletRequestError} If the wallet rejects or fails the request.\n */\nexport const useSignTransaction = () => {\n const { isConnected, provider } = useAddress();\n const [data, setData] = useState<SignTransactionData | undefined>(undefined);\n const [error, setError] = useState<BaseError | null>(null);\n const [status, setStatus] = useState<MutationStatus>('idle');\n\n const signTransactionAsync = useCallback(\n async (\n variables: SignTransactionVariables\n ): Promise<SignTransactionData> => {\n if (!isConnected) {\n throw new WalletNotConnectedError();\n }\n\n if (provider === 'okx') {\n throw new UnsupportedMethodError({\n method: 'stx_signTransaction',\n wallet: 'OKX',\n });\n }\n\n setStatus('pending');\n setError(null);\n setData(undefined);\n\n try {\n const result = await request('stx_signTransaction', {\n transaction: variables.transaction,\n ...(variables.broadcast !== undefined && {\n broadcast: variables.broadcast,\n }),\n });\n\n setData(result);\n setStatus('success');\n return result;\n } catch (err) {\n const error = err instanceof BaseError\n ? err\n : new WalletRequestError({\n method: 'stx_signTransaction',\n wallet: provider ?? 'unknown',\n cause: err instanceof Error ? err : new Error(String(err)),\n });\n setError(error);\n setStatus('error');\n throw error;\n }\n },\n [isConnected, provider]\n );\n\n const signTransaction = useCallback(\n (\n variables: SignTransactionVariables,\n options?: SignTransactionOptions\n ) => {\n signTransactionAsync(variables)\n .then((data) => {\n options?.onSuccess?.(data);\n options?.onSettled?.(data, null);\n })\n .catch((error) => {\n options?.onError?.(error);\n options?.onSettled?.(undefined, error);\n });\n },\n [signTransactionAsync]\n );\n\n const reset = useCallback(() => {\n setData(undefined);\n setError(null);\n setStatus('idle');\n }, []);\n\n return useMemo(\n () => ({\n signTransaction,\n signTransactionAsync,\n reset,\n data,\n error,\n isError: status === 'error',\n isIdle: status === 'idle',\n isPending: status === 'pending',\n isSuccess: status === 'success',\n status,\n }),\n [signTransaction, signTransactionAsync, reset, data, error, status]\n );\n};\n","/**\n * Infer the Stacks network from an address prefix.\n *\n * @param address - A Stacks address starting with `SP`/`SM` (mainnet) or `ST`/`SN` (testnet).\n * @returns `'mainnet'` or `'testnet'`.\n * @throws If the address doesn't start with a known prefix.\n */\nexport const getNetworkFromAddress = (address: string) => {\n if (address.startsWith('SP') || address.startsWith('SM')) {\n return 'mainnet';\n }\n\n if (address.startsWith('ST') || address.startsWith('SN')) {\n return 'testnet';\n }\n\n throw new Error(`Invalid Stacks address: ${address}`);\n};\n","'use client';\n\nimport { request } from '@stacks/connect';\nimport { useCallback, useMemo, useState } from 'react';\n\nimport {\n BaseError,\n WalletNotConnectedError,\n WalletNotFoundError,\n WalletRequestError,\n} from '../errors';\nimport type { MutationStatus } from '../provider/stacks-wallet-provider.types';\nimport { useAddress } from './use-address';\nimport { getNetworkFromAddress } from '../utils/get-network-from-address';\n\n/** Variables for {@link useTransferSTX}. */\nexport interface TransferSTXVariables {\n /** Recipient Stacks address (`SP...` or `ST...`). */\n recipient: string;\n /** Amount in microSTX. Accepts `bigint`, `number`, or numeric `string`. */\n amount: bigint | number | string;\n /** Optional memo string attached to the transfer. */\n memo?: string;\n /** Custom fee in microSTX. Omit to let the wallet estimate. */\n fee?: bigint | number | string;\n /** Custom nonce. Omit to let the wallet manage. */\n nonce?: bigint | number | string;\n}\n\n/** Callback options for the fire-and-forget `transferSTX()` variant. */\nexport interface TransferSTXOptions {\n onSuccess?: (txid: string) => void;\n onError?: (error: Error) => void;\n onSettled?: (txid: string | undefined, error: Error | null) => void;\n}\n\n/**\n * Transfer native STX tokens to a recipient address.\n *\n * Returns the broadcast transaction ID on success. Supports all 6 wallets\n * (OKX uses its proprietary API internally).\n *\n * @example\n * ```ts\n * const { transferSTXAsync, isPending } = useTransferSTX();\n *\n * const txid = await transferSTXAsync({\n * recipient: 'SP2...',\n * amount: 1_000_000n, // 1 STX\n * memo: 'coffee',\n * });\n * ```\n *\n * @throws {WalletNotConnectedError} If no wallet is connected.\n * @throws {WalletNotFoundError} If OKX extension is not installed.\n * @throws {WalletRequestError} If the wallet rejects or fails the request.\n */\nexport const useTransferSTX = () => {\n const { isConnected, address, provider } = useAddress();\n const [data, setData] = useState<string | undefined>(undefined);\n const [error, setError] = useState<BaseError | null>(null);\n const [status, setStatus] = useState<MutationStatus>('idle');\n\n const transferSTXAsync = useCallback(\n async (variables: TransferSTXVariables): Promise<string> => {\n if (!isConnected || !address) {\n throw new WalletNotConnectedError();\n }\n\n setStatus('pending');\n setError(null);\n setData(undefined);\n\n try {\n if (provider === 'okx') {\n if (!window.okxwallet) {\n throw new WalletNotFoundError({ wallet: 'OKX' });\n }\n\n const response =\n await window.okxwallet.stacks.signTransaction({\n txType: 'token_transfer',\n recipient: variables.recipient,\n amount: String(variables.amount),\n memo: variables.memo ?? '',\n stxAddress: address,\n anchorMode: 3,\n });\n\n setData(response.txHash);\n setStatus('success');\n return response.txHash;\n }\n\n const response = await request('stx_transferStx', {\n recipient: variables.recipient,\n amount: variables.amount,\n ...(variables.memo !== undefined && {\n memo: variables.memo,\n }),\n ...(variables.fee !== undefined && {\n fee: variables.fee,\n }),\n ...(variables.nonce !== undefined && {\n nonce: variables.nonce,\n }),\n network: getNetworkFromAddress(address),\n });\n\n if (!response.txid) {\n throw new Error('No transaction ID returned');\n }\n\n setData(response.txid);\n setStatus('success');\n return response.txid;\n } catch (err) {\n const error = err instanceof BaseError\n ? err\n : new WalletRequestError({\n method: 'stx_transferStx',\n wallet: provider ?? 'unknown',\n cause: err instanceof Error ? err : new Error(String(err)),\n });\n setError(error);\n setStatus('error');\n throw error;\n }\n },\n [isConnected, address, provider]\n );\n\n const transferSTX = useCallback(\n (variables: TransferSTXVariables, options?: TransferSTXOptions) => {\n transferSTXAsync(variables)\n .then((txid) => {\n options?.onSuccess?.(txid);\n options?.onSettled?.(txid, null);\n })\n .catch((error) => {\n options?.onError?.(error);\n options?.onSettled?.(undefined, error);\n });\n },\n [transferSTXAsync]\n );\n\n const reset = useCallback(() => {\n setData(undefined);\n setError(null);\n setStatus('idle');\n }, []);\n\n return useMemo(\n () => ({\n transferSTX,\n transferSTXAsync,\n reset,\n data,\n error,\n isError: status === 'error',\n isIdle: status === 'idle',\n isPending: status === 'pending',\n isSuccess: status === 'success',\n status,\n }),\n [transferSTX, transferSTXAsync, reset, data, error, status]\n );\n};\n","import type { ClarityValue } from '@stacks/transactions';\nimport {\n uintCV,\n intCV,\n boolCV,\n noneCV,\n someCV,\n bufferCV,\n stringAsciiCV,\n stringUtf8CV,\n listCV,\n tupleCV,\n standardPrincipalCV,\n contractPrincipalCV,\n} from '@stacks/transactions';\ntype AbiType = string | Record<string, unknown>;\n\n/** Loose ABI arg shape for runtime use — avoids importing ClarityAbiArg. */\ninterface AbiArgLike {\n name: string;\n type: unknown;\n}\n\n/** Convert a JS primitive to a ClarityValue guided by an ABI type descriptor. */\nexport function toClarityValue(value: unknown, abiType: AbiType): ClarityValue {\n if (typeof abiType === 'string') {\n switch (abiType) {\n case 'uint128': {\n if (typeof value !== 'bigint') {\n throw new Error(\n `@satoshai/kit: Expected bigint (uint128), got ${typeof value}`\n );\n }\n return uintCV(value);\n }\n case 'int128': {\n if (typeof value !== 'bigint') {\n throw new Error(\n `@satoshai/kit: Expected bigint (int128), got ${typeof value}`\n );\n }\n return intCV(value);\n }\n case 'bool': {\n if (typeof value !== 'boolean') {\n throw new Error(\n `@satoshai/kit: Expected boolean (bool), got ${typeof value}`\n );\n }\n return boolCV(value);\n }\n case 'principal':\n case 'trait_reference': {\n if (typeof value !== 'string') {\n throw new Error(\n `@satoshai/kit: Expected string (${abiType}), got ${typeof value}`\n );\n }\n if (value.includes('.')) {\n const [addr, ...rest] = value.split('.');\n return contractPrincipalCV(addr, rest.join('.'));\n }\n return standardPrincipalCV(value);\n }\n case 'none':\n return noneCV();\n default:\n throw new Error(\n `@satoshai/kit: Unsupported ABI type \"${abiType}\"`\n );\n }\n }\n\n if ('buffer' in abiType) {\n if (!(value instanceof Uint8Array)) {\n throw new Error(\n `@satoshai/kit: Expected Uint8Array (buffer), got ${typeof value}`\n );\n }\n return bufferCV(value);\n }\n if ('string-ascii' in abiType) {\n if (typeof value !== 'string') {\n throw new Error(\n `@satoshai/kit: Expected string (string-ascii), got ${typeof value}`\n );\n }\n return stringAsciiCV(value);\n }\n if ('string-utf8' in abiType) {\n if (typeof value !== 'string') {\n throw new Error(\n `@satoshai/kit: Expected string (string-utf8), got ${typeof value}`\n );\n }\n return stringUtf8CV(value);\n }\n if ('optional' in abiType) {\n if (value === null || value === undefined) return noneCV();\n return someCV(toClarityValue(value, abiType.optional as AbiType));\n }\n if ('list' in abiType) {\n if (!Array.isArray(value)) {\n throw new Error(\n `@satoshai/kit: Expected array (list), got ${typeof value}`\n );\n }\n const listType = abiType.list as { type: AbiType };\n return listCV(\n value.map((item) => toClarityValue(item, listType.type))\n );\n }\n if ('tuple' in abiType) {\n if (typeof value !== 'object' || value === null) {\n throw new Error(\n `@satoshai/kit: Expected object (tuple), got ${value === null ? 'null' : typeof value}`\n );\n }\n const entries = abiType.tuple as Array<{\n name: string;\n type: AbiType;\n }>;\n const obj = value as Record<string, unknown>;\n const result: Record<string, ClarityValue> = {};\n for (const entry of entries) {\n result[entry.name] = toClarityValue(obj[entry.name], entry.type);\n }\n return tupleCV(result);\n }\n\n throw new Error(\n `@satoshai/kit: Unsupported ABI type: ${JSON.stringify(abiType)}`\n );\n}\n\n/** Convert a named args object to an ordered ClarityValue[] using ABI arg definitions. */\nexport function namedArgsToClarityValues(\n args: Record<string, unknown>,\n abiArgs: readonly AbiArgLike[]\n): ClarityValue[] {\n return abiArgs.map((abiArg) => {\n if (!(abiArg.name in args)) {\n throw new Error(\n `@satoshai/kit: Missing argument \"${abiArg.name}\"`\n );\n }\n return toClarityValue(\n args[abiArg.name],\n abiArg.type as AbiType\n );\n });\n}\n","import type { ClarityValue, PostCondition } from \"@stacks/transactions\";\nimport { cvToHex, postConditionToHex } from \"@stacks/transactions\";\n\nexport const preparePostConditionsForOKX = (postConditions: PostCondition[]) =>\n postConditions.map((pc) => postConditionToHex(pc));\n\nexport const prepareArgsForOKX = (args: ClarityValue[]) =>\n args.map((arg) => cvToHex(arg));\n","'use client';\n\nimport { request } from '@stacks/connect';\nimport type { ClarityValue } from '@stacks/transactions';\nimport { PostConditionMode } from '@stacks/transactions';\nimport { useCallback, useMemo, useState } from 'react';\n\nimport {\n BaseError,\n WalletNotConnectedError,\n WalletNotFoundError,\n WalletRequestError,\n} from '../../errors';\nimport type { MutationStatus } from '../../provider/stacks-wallet-provider.types';\nimport { useAddress } from '../use-address';\nimport { getNetworkFromAddress } from '../../utils/get-network-from-address';\nimport { namedArgsToClarityValues } from '../../utils/to-clarity-value';\n\nimport {\n preparePostConditionsForOKX,\n prepareArgsForOKX,\n} from './use-write-contract.helpers';\nimport type {\n PostConditionConfig,\n WriteContractOptions,\n WriteContractAsyncFn,\n WriteContractFn,\n} from './use-write-contract.types';\n\n/** Loose internal ABI shape for runtime — avoids importing ClarityAbi which triggers deep instantiation. */\ninterface AbiLike {\n functions: readonly {\n name: string;\n access: string;\n args: readonly { name: string; type: unknown }[];\n }[];\n}\n\n/** Internal variables shape accepted at runtime (both typed and untyped). */\ninterface WriteContractVariablesInternal {\n abi?: AbiLike;\n address: string;\n contract: string;\n functionName: string;\n args: Record<string, unknown> | ClarityValue[];\n pc: PostConditionConfig;\n}\n\n/** Resolve args to ClarityValue[]: convert named args when ABI is present. */\nfunction resolveArgs(variables: WriteContractVariablesInternal): ClarityValue[] {\n if (!variables.abi) {\n return variables.args as ClarityValue[];\n }\n\n const fn = variables.abi.functions.find(\n (f) => f.name === variables.functionName && f.access === 'public'\n );\n if (!fn) {\n throw new Error(\n `@satoshai/kit: Public function \"${variables.functionName}\" not found in ABI`\n );\n }\n\n return namedArgsToClarityValues(\n variables.args as Record<string, unknown>,\n fn.args\n );\n}\n\n/**\n * Call a public function on a Clarity smart contract.\n *\n * Supports two modes:\n * - **Typed** (with ABI) — pass an ABI object for autocomplete on `functionName` and `args`.\n * - **Untyped** — pass `ClarityValue[]` directly as `args`.\n *\n * @example\n * ```ts\n * import { Pc, PostConditionMode } from '@stacks/transactions';\n *\n * const { writeContractAsync } = useWriteContract();\n *\n * // Untyped mode\n * const txid = await writeContractAsync({\n * address: 'SP...',\n * contract: 'my-contract',\n * functionName: 'transfer',\n * args: [uintCV(100)],\n * pc: {\n * postConditions: [Pc.principal('SP...').willSendLte(100n).ustx()],\n * mode: PostConditionMode.Deny,\n * },\n * });\n *\n * // Typed mode (with ABI — enables autocomplete)\n * const txid = await writeContractAsync({\n * abi: myContractAbi,\n * address: 'SP...',\n * contract: 'my-contract',\n * functionName: 'transfer', // autocompleted from ABI\n * args: { amount: 100n }, // named args, type-checked\n * pc: { postConditions: [], mode: PostConditionMode.Deny },\n * });\n * ```\n *\n * @throws {WalletNotConnectedError} If no wallet is connected.\n * @throws {WalletNotFoundError} If OKX extension is not installed.\n * @throws {WalletRequestError} If the wallet rejects or fails the request.\n */\nexport const useWriteContract = () => {\n const { isConnected, address, provider } = useAddress();\n\n const [data, setData] = useState<string | undefined>(undefined);\n const [error, setError] = useState<BaseError | null>(null);\n const [status, setStatus] = useState<MutationStatus>('idle');\n\n const writeContractAsync = useCallback(\n async (variables: WriteContractVariablesInternal): Promise<string> => {\n if (!isConnected || !address) {\n throw new WalletNotConnectedError();\n }\n\n setStatus('pending');\n setError(null);\n setData(undefined);\n\n const resolvedArgs = resolveArgs(variables);\n\n try {\n if (provider === 'okx') {\n if (!window.okxwallet) {\n throw new WalletNotFoundError({ wallet: 'OKX' });\n }\n\n const response =\n await window.okxwallet.stacks.signTransaction({\n contractAddress: variables.address,\n contractName: variables.contract,\n functionName: variables.functionName,\n functionArgs: prepareArgsForOKX(resolvedArgs),\n postConditions: preparePostConditionsForOKX(\n variables.pc.postConditions\n ),\n postConditionMode: variables.pc.mode,\n stxAddress: address,\n txType: 'contract_call',\n anchorMode: 3,\n });\n\n setData(response.txHash);\n setStatus('success');\n return response.txHash;\n }\n\n const response = await request('stx_callContract', {\n address,\n contract: `${variables.address}.${variables.contract}`,\n functionName: variables.functionName,\n functionArgs: resolvedArgs,\n postConditions: variables.pc.postConditions,\n postConditionMode:\n variables.pc.mode === PostConditionMode.Allow\n ? 'allow'\n : 'deny',\n network: getNetworkFromAddress(address),\n });\n\n if (!response.txid) {\n throw new Error('No transaction ID returned');\n }\n\n setData(response.txid);\n setStatus('success');\n return response.txid;\n } catch (err) {\n const error = err instanceof BaseError\n ? err\n : new WalletRequestError({\n method: 'stx_callContract',\n wallet: provider ?? 'unknown',\n cause: err instanceof Error ? err : new Error(String(err)),\n });\n setError(error);\n setStatus('error');\n throw error;\n }\n },\n [isConnected, address, provider]\n ) as unknown as WriteContractAsyncFn;\n\n const writeContract = useCallback(\n (variables: WriteContractVariablesInternal, options?: WriteContractOptions) => {\n (writeContractAsync as unknown as (v: WriteContractVariablesInternal) => Promise<string>)(variables)\n .then((data) => {\n options?.onSuccess?.(data);\n options?.onSettled?.(data, null);\n })\n .catch((error) => {\n options?.onError?.(error);\n options?.onSettled?.(undefined, error);\n });\n },\n [writeContractAsync]\n ) as unknown as WriteContractFn;\n\n const reset = useCallback(() => {\n setData(undefined);\n setError(null);\n setStatus('idle');\n }, []);\n\n return useMemo(\n () => ({\n writeContract,\n writeContractAsync,\n reset,\n data,\n error,\n isError: status === 'error',\n isIdle: status === 'idle',\n isPending: status === 'pending',\n isSuccess: status === 'success',\n status,\n }),\n [writeContract, writeContractAsync, reset, data, error, status]\n );\n};\n\nexport type {\n WriteContractVariables,\n WriteContractOptions,\n PostConditionConfig,\n TypedWriteContractVariables,\n UntypedWriteContractVariables,\n WriteContractAsyncFn,\n WriteContractFn,\n} from './use-write-contract.types';\n","'use client';\n\nimport { getPrimaryName } from 'bns-v2-sdk';\nimport { useEffect, useState } from 'react';\n\nimport { getNetworkFromAddress } from '../utils/get-network-from-address';\n\n/**\n * Resolve a BNS v2 primary name for a Stacks address.\n *\n * Returns `null` when no name is registered or the address is undefined.\n * Automatically detects mainnet/testnet from the address prefix.\n *\n * @param address - Stacks address to resolve (`SP...` or `ST...`).\n *\n * @example\n * ```ts\n * const { bnsName, isLoading } = useBnsName('SP2...');\n * // bnsName = 'satoshi.btc' | null\n * ```\n */\nexport const useBnsName = (address?: string) => {\n const [bnsName, setBnsName] = useState<string | null>(null);\n const [isLoading, setIsLoading] = useState(false);\n\n useEffect(() => {\n if (!address) {\n setBnsName(null);\n setIsLoading(false);\n return;\n }\n\n let cancelled = false;\n\n const fetchBnsName = async () => {\n setIsLoading(true);\n\n try {\n const network = getNetworkFromAddress(address);\n const result = await getPrimaryName({ address, network });\n\n if (cancelled) return;\n\n const fullName = result\n ? `${result.name}.${result.namespace}`\n : null;\n\n setBnsName(fullName);\n } catch {\n if (cancelled) return;\n setBnsName(null);\n } finally {\n if (!cancelled) {\n setIsLoading(false);\n }\n }\n };\n\n void fetchBnsName();\n\n return () => {\n cancelled = true;\n };\n }, [address]);\n\n return { bnsName, isLoading };\n};\n","'use client';\n\nimport { useMemo } from 'react';\n\nimport { useStacksWalletContext } from '../provider/stacks-wallet-provider';\n\n/**\n * List all configured wallets with availability status.\n *\n * Each wallet includes its `id`, display `name`, `icon` (data URI), `webUrl`\n * (install link), and whether it's `available` (extension detected or\n * WalletConnect configured).\n *\n * @example\n * ```ts\n * const { wallets } = useWallets();\n *\n * wallets.map(({ id, name, icon, available }) => (\n * <button key={id} onClick={() => connect(id)} disabled={!available}>\n * <img src={icon} alt={name} width={20} /> {name}\n * </button>\n * ));\n * ```\n */\nexport const useWallets = () => {\n const { wallets } = useStacksWalletContext();\n\n return useMemo(() => ({ wallets }), [wallets]);\n};\n","import type { ClarityAbi } from 'clarity-abitype';\n\n/**\n * Pre-bind ABI, address, and contract name for reuse with `useWriteContract`.\n *\n * Returns the config object as-is but preserves the `const` ABI type, enabling\n * autocomplete on `functionName` and type-checked `args` when spread into\n * `writeContract()`.\n *\n * @example\n * ```ts\n * const pool = createContractConfig({\n * abi: poolAbi,\n * address: 'SP...',\n * contract: 'pool-v1',\n * });\n *\n * writeContract({ ...pool, functionName: 'deposit', args: { amount: 100n }, pc });\n * ```\n */\nexport function createContractConfig<const TAbi extends ClarityAbi>(config: {\n abi: TAbi;\n address: string;\n contract: string;\n}) {\n return config;\n}\n"]}
|