@sodax/wallet-sdk-react 1.5.6-beta → 2.0.0-rc.1
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 +103 -145
- package/ai-exported/AGENTS.md +122 -0
- package/ai-exported/integration/README.md +102 -0
- package/ai-exported/integration/ai-rules.md +136 -0
- package/ai-exported/integration/architecture.md +181 -0
- package/ai-exported/integration/examples/01-minimal-evm.tsx +75 -0
- package/ai-exported/integration/examples/02-multi-chain-modal.tsx +169 -0
- package/ai-exported/integration/examples/03-nextjs-app-router.tsx +99 -0
- package/ai-exported/integration/examples/04-walletconnect-setup.tsx +89 -0
- package/ai-exported/integration/examples/README.md +29 -0
- package/ai-exported/integration/recipes/batch-operations.md +223 -0
- package/ai-exported/integration/recipes/bridge-to-sdk.md +164 -0
- package/ai-exported/integration/recipes/chain-detection.md +254 -0
- package/ai-exported/integration/recipes/connect-button.md +156 -0
- package/ai-exported/integration/recipes/multi-chain-modal.md +199 -0
- package/ai-exported/integration/recipes/setup.md +158 -0
- package/ai-exported/integration/recipes/sign-message.md +137 -0
- package/ai-exported/integration/recipes/sub-path-imports.md +95 -0
- package/ai-exported/integration/recipes/switch-chain.md +141 -0
- package/ai-exported/integration/recipes/walletconnect-setup.md +139 -0
- package/ai-exported/integration/reference/api-surface.md +175 -0
- package/ai-exported/integration/reference/chain-support.md +78 -0
- package/ai-exported/integration/reference/connectors.md +74 -0
- package/ai-exported/integration/reference/hooks.md +204 -0
- package/ai-exported/integration/reference/wallet-brands.md +106 -0
- package/ai-exported/migration/README.md +49 -0
- package/ai-exported/migration/ai-rules.md +144 -0
- package/ai-exported/migration/breaking-changes.md +305 -0
- package/ai-exported/migration/checklist.md +159 -0
- package/ai-exported/migration/recipes/connect-button.md +166 -0
- package/ai-exported/migration/recipes/multi-chain-modal.md +244 -0
- package/ai-exported/migration/recipes/ssr-setup.md +162 -0
- package/ai-exported/migration/recipes/walletconnect-migration.md +168 -0
- package/ai-exported/migration/reference/components.md +73 -0
- package/ai-exported/migration/reference/config.md +307 -0
- package/ai-exported/migration/reference/hooks.md +278 -0
- package/ai-exported/migration/reference/imports.md +157 -0
- package/dist/XConnector-B9YQTVJ4.d.ts +146 -0
- package/dist/chunk-2BOUGCJ7.mjs +150 -0
- package/dist/chunk-2BOUGCJ7.mjs.map +1 -0
- package/dist/chunk-66BAUK56.mjs +202 -0
- package/dist/chunk-66BAUK56.mjs.map +1 -0
- package/dist/chunk-7ULB6DW4.mjs +102 -0
- package/dist/chunk-7ULB6DW4.mjs.map +1 -0
- package/dist/chunk-BKJB527E.mjs +125 -0
- package/dist/chunk-BKJB527E.mjs.map +1 -0
- package/dist/chunk-BXJLBR4G.mjs +88 -0
- package/dist/chunk-BXJLBR4G.mjs.map +1 -0
- package/dist/chunk-E5IAZ7E6.mjs +186 -0
- package/dist/chunk-E5IAZ7E6.mjs.map +1 -0
- package/dist/chunk-MAQ47Q52.mjs +33 -0
- package/dist/chunk-MAQ47Q52.mjs.map +1 -0
- package/dist/chunk-MXZVF5HR.mjs +34 -0
- package/dist/chunk-MXZVF5HR.mjs.map +1 -0
- package/dist/chunk-N5A2TMF6.mjs +33 -0
- package/dist/chunk-N5A2TMF6.mjs.map +1 -0
- package/dist/chunk-NY7U7OJW.mjs +64 -0
- package/dist/chunk-NY7U7OJW.mjs.map +1 -0
- package/dist/chunk-PJLEJVAU.mjs +140 -0
- package/dist/chunk-PJLEJVAU.mjs.map +1 -0
- package/dist/chunk-PLCA4ZDJ.mjs +1585 -0
- package/dist/chunk-PLCA4ZDJ.mjs.map +1 -0
- package/dist/chunk-TZMKDXFA.mjs +3 -0
- package/dist/chunk-TZMKDXFA.mjs.map +1 -0
- package/dist/chunk-X2MHIWXO.mjs +100 -0
- package/dist/chunk-X2MHIWXO.mjs.map +1 -0
- package/dist/chunk-XZ7CHO2S.mjs +41 -0
- package/dist/chunk-XZ7CHO2S.mjs.map +1 -0
- package/dist/config-OlnzyEUE.d.ts +146 -0
- package/dist/index.cjs +2784 -1594
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +768 -1498
- package/dist/index.mjs +463 -2004
- package/dist/index.mjs.map +1 -1
- package/dist/xchains/bitcoin/index.cjs +1927 -0
- package/dist/xchains/bitcoin/index.cjs.map +1 -0
- package/dist/xchains/bitcoin/index.d.ts +125 -0
- package/dist/xchains/bitcoin/index.mjs +16 -0
- package/dist/xchains/bitcoin/index.mjs.map +1 -0
- package/dist/xchains/evm/index.cjs +316 -0
- package/dist/xchains/evm/index.cjs.map +1 -0
- package/dist/xchains/evm/index.d.ts +39 -0
- package/dist/xchains/evm/index.mjs +5 -0
- package/dist/xchains/evm/index.mjs.map +1 -0
- package/dist/xchains/icon/index.cjs +311 -0
- package/dist/xchains/icon/index.cjs.map +1 -0
- package/dist/xchains/icon/index.d.ts +37 -0
- package/dist/xchains/icon/index.mjs +7 -0
- package/dist/xchains/icon/index.mjs.map +1 -0
- package/dist/xchains/injective/index.cjs +223 -0
- package/dist/xchains/injective/index.cjs.map +1 -0
- package/dist/xchains/injective/index.d.ts +35 -0
- package/dist/xchains/injective/index.mjs +5 -0
- package/dist/xchains/injective/index.mjs.map +1 -0
- package/dist/xchains/near/index.cjs +190 -0
- package/dist/xchains/near/index.cjs.map +1 -0
- package/dist/xchains/near/index.d.ts +34 -0
- package/dist/xchains/near/index.mjs +6 -0
- package/dist/xchains/near/index.mjs.map +1 -0
- package/dist/xchains/solana/index.cjs +186 -0
- package/dist/xchains/solana/index.cjs.map +1 -0
- package/dist/xchains/solana/index.d.ts +26 -0
- package/dist/xchains/solana/index.mjs +7 -0
- package/dist/xchains/solana/index.mjs.map +1 -0
- package/dist/xchains/stacks/index.cjs +240 -0
- package/dist/xchains/stacks/index.cjs.map +1 -0
- package/dist/xchains/stacks/index.d.ts +36 -0
- package/dist/xchains/stacks/index.mjs +5 -0
- package/dist/xchains/stacks/index.mjs.map +1 -0
- package/dist/xchains/stellar/index.cjs +322 -0
- package/dist/xchains/stellar/index.cjs.map +1 -0
- package/dist/xchains/stellar/index.d.ts +44 -0
- package/dist/xchains/stellar/index.mjs +6 -0
- package/dist/xchains/stellar/index.mjs.map +1 -0
- package/dist/xchains/sui/index.cjs +248 -0
- package/dist/xchains/sui/index.cjs.map +1 -0
- package/dist/xchains/sui/index.d.ts +37 -0
- package/dist/xchains/sui/index.mjs +7 -0
- package/dist/xchains/sui/index.mjs.map +1 -0
- package/docs/ADDING_A_NEW_CHAIN.md +440 -0
- package/docs/ARCHITECTURE.md +291 -0
- package/docs/BATCH_OPERATIONS.md +267 -0
- package/docs/CHAIN_DETECTION.md +216 -0
- package/docs/CONFIGURE_PROVIDER.md +360 -0
- package/docs/CONNECTORS.md +247 -0
- package/docs/CONNECT_FLOW.md +276 -0
- package/docs/EVM_SWITCH_CHAIN.md +161 -0
- package/docs/SIGN_MESSAGE.md +213 -0
- package/docs/SUB_PATH_EXPORTS.md +246 -0
- package/docs/WALLETCONNECT.md +154 -0
- package/docs/WALLET_MODAL.md +331 -0
- package/docs/WALLET_PROVIDER_BRIDGE.md +226 -0
- package/package.json +34 -9
- package/skills/SKILLS.md +84 -0
- package/skills/bridge-to-sdk.md +148 -0
- package/skills/connect-button.md +116 -0
- package/skills/evm-only-walletconnect.md +111 -0
- package/skills/multi-chain-modal.md +178 -0
- package/skills/setup.md +107 -0
- package/dist/index.d.cts +0 -1579
- package/src/Hydrate.ts +0 -65
- package/src/SodaxWalletProvider.tsx +0 -97
- package/src/actions/getXChainType.ts +0 -8
- package/src/actions/getXService.ts +0 -33
- package/src/actions/index.ts +0 -2
- package/src/assets/wallets/hana.svg +0 -6
- package/src/assets/wallets/havah.svg +0 -76
- package/src/assets/wallets/keplr.svg +0 -30
- package/src/assets/wallets/metamask.svg +0 -60
- package/src/assets/wallets/phantom.svg +0 -4
- package/src/assets/wallets/sui.svg +0 -20
- package/src/core/XConnector.ts +0 -54
- package/src/core/XService.ts +0 -85
- package/src/core/index.ts +0 -2
- package/src/hooks/index.ts +0 -11
- package/src/hooks/useEthereumChainId.ts +0 -44
- package/src/hooks/useEvmSwitchChain.ts +0 -91
- package/src/hooks/useWalletProvider.ts +0 -206
- package/src/hooks/useXAccount.ts +0 -51
- package/src/hooks/useXAccounts.ts +0 -56
- package/src/hooks/useXBalances.ts +0 -65
- package/src/hooks/useXConnect.ts +0 -118
- package/src/hooks/useXConnection.ts +0 -72
- package/src/hooks/useXConnectors.ts +0 -72
- package/src/hooks/useXDisconnect.ts +0 -73
- package/src/hooks/useXService.ts +0 -8
- package/src/hooks/useXSignMessage.ts +0 -82
- package/src/index.ts +0 -19
- package/src/types/index.ts +0 -22
- package/src/useXWagmiStore.ts +0 -116
- package/src/utils/index.ts +0 -21
- package/src/xchains/bitcoin/BitcoinXConnector.ts +0 -34
- package/src/xchains/bitcoin/BitcoinXService.ts +0 -40
- package/src/xchains/bitcoin/OKXXConnector.ts +0 -117
- package/src/xchains/bitcoin/UnisatXConnector.ts +0 -117
- package/src/xchains/bitcoin/XverseXConnector.ts +0 -232
- package/src/xchains/bitcoin/index.ts +0 -7
- package/src/xchains/bitcoin/useBitcoinXConnectors.ts +0 -14
- package/src/xchains/evm/EvmXConnector.ts +0 -27
- package/src/xchains/evm/EvmXService.ts +0 -211
- package/src/xchains/evm/index.ts +0 -3
- package/src/xchains/icon/IconHanaXConnector.ts +0 -39
- package/src/xchains/icon/IconXService.ts +0 -117
- package/src/xchains/icon/actions.ts +0 -28
- package/src/xchains/icon/iconex/index.tsx +0 -46
- package/src/xchains/icon/index.ts +0 -2
- package/src/xchains/injective/InjectiveXConnector.ts +0 -60
- package/src/xchains/injective/InjectiveXService.ts +0 -62
- package/src/xchains/injective/actions.ts +0 -32
- package/src/xchains/injective/index.ts +0 -2
- package/src/xchains/near/NearXConnector.ts +0 -42
- package/src/xchains/near/NearXService.ts +0 -46
- package/src/xchains/near/useNearXConnectors.ts +0 -23
- package/src/xchains/solana/SolanaXConnector.ts +0 -26
- package/src/xchains/solana/SolanaXService.ts +0 -46
- package/src/xchains/solana/index.ts +0 -2
- package/src/xchains/stacks/StacksXConnector.ts +0 -63
- package/src/xchains/stacks/StacksXService.ts +0 -59
- package/src/xchains/stacks/constants.ts +0 -42
- package/src/xchains/stacks/index.ts +0 -4
- package/src/xchains/stacks/useStacksXConnectors.ts +0 -7
- package/src/xchains/stellar/CustomSorobanServer.ts +0 -93
- package/src/xchains/stellar/StellarWalletsKitXConnector.ts +0 -53
- package/src/xchains/stellar/StellarXService.ts +0 -93
- package/src/xchains/stellar/actions.ts +0 -24
- package/src/xchains/stellar/index.tsx +0 -2
- package/src/xchains/stellar/useStellarXConnectors.ts +0 -21
- package/src/xchains/stellar/utils.ts +0 -49
- package/src/xchains/sui/SuiXConnector.ts +0 -28
- package/src/xchains/sui/SuiXService.ts +0 -66
- package/src/xchains/sui/index.ts +0 -2
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":["../../../src/core/XService.ts","../../../src/utils/walletRpcConfig.ts","../../../src/utils/index.ts","../../../src/constants.ts","../../../src/xchains/bitcoin/BitcoinXService.ts","../../../src/core/XConnector.ts","../../../src/xchains/bitcoin/BitcoinXConnector.ts","../../../src/xchains/bitcoin/UnisatXConnector.ts","../../../src/xchains/bitcoin/XverseXConnector.ts","../../../src/xchains/bitcoin/OKXXConnector.ts","../../../src/shared/guards.ts","../../../src/xchains/evm/EvmXService.ts","../../../src/xchains/solana/SolanaXService.ts","../../../src/xchains/sui/SuiXService.ts","../../../src/xchains/stellar/CustomSorobanServer.ts","../../../src/xchains/stellar/utils.ts","../../../src/xchains/stellar/StellarXService.ts","../../../src/xchains/stellar/StellarWalletsKitXConnector.ts","../../../src/xchains/icon/IconXService.ts","../../../src/xchains/icon/iconex/index.tsx","../../../src/xchains/icon/IconHanaXConnector.ts","../../../src/xchains/injective/InjectiveXService.ts","../../../src/xchains/injective/InjectiveXConnector.ts","../../../src/xchains/bitcoin/bitcoinSignGuards.ts","../../../src/xchains/near/NearXService.ts","../../../src/xchains/near/NearXConnector.ts","../../../src/xchains/stacks/StacksXService.ts","../../../src/xchains/stacks/StacksXConnector.ts","../../../src/xchains/stacks/constants.ts","../../../src/chainRegistry.ts","../../../src/useXWalletStore.ts","../../../src/useWalletModalStore.ts","../../../src/hooks/useXService.ts","../../../src/context/WalletConfigContext.ts","../../../src/xchains/bitcoin/useBitcoinXConnectors.ts"],"names":["address","baseChainInfo","detectBitcoinAddressType","request","MessageSigningProtocols","AddressPurpose","getPublicClient","erc20Abi","PublicKey","getAssociatedTokenAddressSync","getAccount","SuiWalletProvider","rpc","Address","Contract","TimeoutInfinite","scValToBigInt","StellarWalletsKit","WalletNetwork","allowAllModules","StellarSdk","IconSdkRaw","getNetworkEndpoints","Network","WalletStrategy","InjectiveChainId","mainnet","IndexerGrpcAccountPortfolioApi","ChainGrpcWasmApi","MsgBroadcaster","isCosmosBrowserWallet","isCosmosWalletInstalled","isEvmBrowserWallet","getInjectiveAddress","NearConnector","JsonRpcProvider","network","networkFrom","fetchCallReadOnlyFunction","Cl","disconnect","defineChain","ChainKeys","Wallet","getEthereumAddress","InjectiveWalletProvider","StellarWalletProvider","IconWalletProvider","NearWalletProvider","StacksWalletProvider","ChainTypeArr","create","devtools","persist","immer","createJSONStorage","createContext","useMemo"],"mappings":"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","file":"index.cjs","sourcesContent":["import type { ChainType, IXServiceBase, XToken } from '@sodax/types';\nimport type { IXConnector } from '@/types/interfaces.js';\n\n/**\n * Abstract base class for blockchain service implementations.\n *\n * The XService class serves as a foundation for implementing blockchain-specific services\n * in a multi-chain environment. It provides a standardized interface for:\n * 1. Managing wallet connectors for different blockchain types\n * 2. Querying token balances across different chains\n *\n * Each blockchain implementation (e.g., Solana, EVM chains) extends this class\n * to provide chain-specific functionality while maintaining a consistent interface.\n *\n * @abstract\n * @class XService\n * @property {ChainType} xChainType - The blockchain type this service handles (e.g., 'SOLANA', 'EVM')\n * @property {XConnector[]} xConnectors - Available wallet connectors for this chain\n *\n */\nexport abstract class XService implements IXServiceBase {\n /** The blockchain type this service handles */\n public readonly xChainType: ChainType;\n\n /** Available wallet connectors for this chain */\n private xConnectors: IXConnector[] = [];\n\n constructor(xChainType: ChainType) {\n this.xChainType = xChainType;\n }\n\n /**\n * Gets the balance of a specific token for an address\n * @param address The wallet address to check\n * @param xToken The token to get the balance for\n * @returns Promise resolving to the token balance as a bigint\n */\n public async getBalance(address: string | undefined, xToken: XToken): Promise<bigint> {\n return 0n;\n }\n\n /**\n * Gets balances for multiple tokens for an address\n * @param address The wallet address to check\n * @param xTokens Array of tokens to get balances for\n * @returns Promise resolving to object mapping token addresses to balances\n */\n public async getBalances(address: string | undefined, xTokens: readonly XToken[]): Promise<Record<string, bigint>> {\n if (!address) return {};\n\n const balancePromises = xTokens.map(async xToken => {\n const balance = await this.getBalance(address, xToken);\n return { address: xToken.address, balance };\n });\n\n const balances = await Promise.all(balancePromises);\n return balances.reduce<Record<string, bigint>>((acc, { address, balance }) => {\n acc[address] = balance;\n return acc;\n }, {});\n }\n\n /**\n * Gets all available connectors for this chain\n */\n public getXConnectors(): IXConnector[] {\n return this.xConnectors;\n }\n\n /**\n * Sets the available connectors for this chain\n */\n public setXConnectors(xConnectors: IXConnector[]): void {\n this.xConnectors = xConnectors;\n }\n\n /**\n * Gets a specific connector by its ID\n * @param xConnectorId The connector ID to look up\n * @returns The matching connector or undefined if not found\n */\n public getXConnectorById(xConnectorId: string): IXConnector | undefined {\n return this.getXConnectors().find(xConnector => xConnector.id === xConnectorId);\n }\n}\n","import { getEvmChainKeyByChainId, type ChainKey, type EvmChainKey } from '@sodax/types';\nimport type { EvmWalletDefaults } from '@sodax/wallet-sdk-core';\nimport type { ChainEntry, EvmChainEntry, WalletDefaultsByKey } from '@/types/config.js';\n\nexport type { ChainEntry, WalletDefaultsByKey };\n\n/**\n * Extract `defaults` from a chain entry. Returns undefined when the entry is\n * missing, or for Stacks's preset-name string variant (no `defaults` slot).\n */\nexport function getEntryDefaults<K extends ChainKey>(\n entry: ChainEntry<K> | undefined,\n): WalletDefaultsByKey<K> | undefined {\n if (!entry || typeof entry === 'string') return undefined;\n return (entry as { defaults?: WalletDefaultsByKey<K> }).defaults;\n}\n\n/**\n * Extract `rpcUrl` from a chain entry. Use for chains whose underlying factory\n * expects a bare URL string (EVM/Solana/Sui/Icon/Near). Returns undefined for\n * missing entries and for non-rpcUrl forms (Stacks preset name, object entries\n * lacking the field) — downstream falls back to a public default.\n */\nexport function getRpcUrl<K extends ChainKey>(entry: ChainEntry<K> | undefined): string | undefined {\n if (!entry || typeof entry === 'string') return undefined;\n return (entry as { rpcUrl?: string }).rpcUrl;\n}\n\n/**\n * Resolve EVM wallet provider defaults for the chain currently active on a\n * wagmi-supplied client. Used by `EvmHydrator` so the provider re-instantiates\n * with the right defaults when wagmi swaps clients on chain switch.\n *\n * `getEvmChainKeyByChainId` lives in `@sodax/types` (alongside `baseChainInfo`,\n * the data source); this helper composes it with the `SodaxWalletConfig.EVM.chains`\n * lookup, which is React-layer concern.\n */\nexport function resolveEvmDefaults(\n activeChainId: number | undefined,\n evmChains: Partial<Record<EvmChainKey, EvmChainEntry>> | undefined,\n): EvmWalletDefaults | undefined {\n const key = getEvmChainKeyByChainId(activeChainId);\n if (!key || !evmChains) return undefined;\n return evmChains[key]?.defaults;\n}\n","import { baseChainInfo, type SpokeChainKey, type XToken } from '@sodax/types';\n\nexport { sortConnectors, type SortConnectorsOptions } from './sortConnectors.js';\nexport {\n getEntryDefaults,\n getRpcUrl,\n resolveEvmDefaults,\n type WalletDefaultsByKey,\n} from './walletRpcConfig.js';\n\nexport const isNativeToken = (xToken: XToken): boolean => {\n const nativeAddresses = [\n 'cx0000000000000000000000000000000000000000',\n '0x0000000000000000000000000000000000000000',\n 'inj',\n '0x0000000000000000000000000000000000000000000000000000000000000002::sui::SUI',\n 'hx0000000000000000000000000000000000000000',\n '11111111111111111111111111111111', // solana\n 'CAS3J7GYLGXMF6TDJBBYYSE3HQ6BBSMLNUQ34T6TZMYMW2EVH34XOWMA', // stellar\n 'ST000000000000000000002AMW42H.nativetoken', // stacks\n '0:0', // bitcoin\n ];\n\n return nativeAddresses.includes(xToken.address);\n};\n\nexport const getWagmiChainId = (xChainId: SpokeChainKey): number => {\n const chainId = baseChainInfo[xChainId].chainId;\n if (typeof chainId !== 'number') {\n throw new Error(`[wallet-sdk-react] getWagmiChainId: expected numeric chainId, got ${typeof chainId}`);\n }\n return chainId;\n};\n","/**\n * Default values used across providers and hydrators.\n * Centralized so consumers and tests have a single source of truth.\n */\n\n// ─── Stacks ─────────────────────────────────────────────────────────────────\nexport const STACKS_DEFAULT_RPC_URL = 'https://api.mainnet.hiro.so';\nexport const STACKS_DEFAULT_NETWORK = 'mainnet' as const;\n\n// ─── Sui ────────────────────────────────────────────────────────────────────\nexport const SUI_DEFAULT_NETWORK = 'mainnet' as const;\nexport const SUI_DEFAULT_AUTO_CONNECT = true;\n\n// ─── EVM ────────────────────────────────────────────────────────────────────\nexport const EVM_DEFAULT_RECONNECT_ON_MOUNT = false;\nexport const EVM_DEFAULT_SSR = true;\n\n// ─── Solana ─────────────────────────────────────────────────────────────────\nexport const SOLANA_DEFAULT_AUTO_CONNECT = true;\nexport const SOLANA_DEFAULT_RPC_URL = 'https://api.mainnet-beta.solana.com';\n/** Timeout for MetaMask Solana wallet connect — MetaMask's Solana adapter is slow to fire `connect`. */\nexport const SOLANA_METAMASK_CONNECT_TIMEOUT_MS = 30_000;\n\n// ─── Bitcoin ────────────────────────────────────────────────────────────────\nexport const BITCOIN_DEFAULT_RPC_URL = 'https://mempool.space/api';\n\n// ─── Stellar ────────────────────────────────────────────────────────────────\nexport const STELLAR_DEFAULT_HORIZON_RPC_URL = 'https://horizon.stellar.org';\nexport const STELLAR_DEFAULT_SOROBAN_RPC_URL = 'https://rpc.ankr.com/stellar_soroban';\n\n// ─── NEAR ───────────────────────────────────────────────────────────────────\nexport const NEAR_DEFAULT_RPC_URL = 'https://1rpc.io/near';\n\n// ─── Wallet metadata (install URLs + icons for extension-based wallets) ────\n// Keys are wallet-level, not per-connector: one OKX extension serves both\n// Bitcoin and EVM connectors, so metadata is shared.\n\nexport const WALLET_METADATA = {\n unisat: {\n installUrl: 'https://chromewebstore.google.com/detail/unisat-wallet/ppbibelpcjmhbdihakflkdcoccbgbkpo',\n icon: 'https://avatars.githubusercontent.com/u/125119198?s=200&v=4',\n },\n xverse: {\n installUrl: 'https://chromewebstore.google.com/detail/xverse-bitcoin-crypto-wal/idnnbdplmphpflfnlkomgpfbpcgelopg',\n icon:\n 'https://cdn.brandfetch.io/iddzGN5Rcv/w/400/h/400/theme/dark/icon.jpeg?c=1bxid64Mup7aczewSAYMX&t=1771902357797',\n },\n okx: {\n installUrl: 'https://chromewebstore.google.com/detail/okx-wallet/mcohilncbfahbmgdjkbpemcciiolgcge',\n icon: 'https://static.okx.com/cdn/assets/imgs/247/58E63FEA47A2B7D7.png',\n },\n hana: {\n installUrl: 'https://chromewebstore.google.com/detail/hana-wallet/jfdlamikmbghhapbgfoogdffldioobgl',\n icon: 'https://raw.githubusercontent.com/balancednetwork/icons/master/wallets/hana.svg',\n },\n} as const satisfies Record<string, { installUrl: string; icon: string }>;\n","import { XService } from '@/core/XService.js';\nimport { isNativeToken } from '@/utils/index.js';\nimport type { XToken } from '@sodax/types';\nimport { BITCOIN_DEFAULT_RPC_URL } from '@/constants.js';\n\nexport class BitcoinXService extends XService {\n private static instance: BitcoinXService;\n private rpcUrl: string;\n\n private constructor(rpcUrl: string = BITCOIN_DEFAULT_RPC_URL) {\n super('BITCOIN');\n this.rpcUrl = rpcUrl;\n }\n\n public static getInstance(rpcUrl?: string): BitcoinXService {\n if (!BitcoinXService.instance) {\n BitcoinXService.instance = new BitcoinXService(rpcUrl);\n } else if (rpcUrl && rpcUrl !== BitcoinXService.instance.rpcUrl) {\n BitcoinXService.instance.rpcUrl = rpcUrl;\n }\n return BitcoinXService.instance;\n }\n\n override async getBalance(address: string | undefined, xToken: XToken): Promise<bigint> {\n if (!address) return 0n;\n\n try {\n if (isNativeToken(xToken)) {\n const response = await fetch(`${this.rpcUrl}/address/${address}/utxo`);\n if (!response.ok) return 0n;\n const utxos: Array<{ value: number }> = await response.json();\n const totalBalance = utxos.reduce((sum, utxo) => sum + utxo.value, 0);\n return BigInt(totalBalance);\n }\n } catch {\n return 0n;\n }\n\n return 0n;\n }\n}\n","import type { ChainType } from '@sodax/types';\nimport type { XAccount } from '@/types/index.js';\nimport type { IXConnector } from '@/types/interfaces.js';\n\n/**\n * Base class for wallet provider connectors that handles connection management and wallet interactions\n *\n * @abstract\n * @class XConnector\n * @property {ChainType} xChainType - The blockchain type this connector supports\n * @property {string} name - Display name of the wallet provider\n * @property {string} _id - Unique identifier for the connector\n * @property {string | undefined} _icon - Optional icon URL for the wallet provider\n */\n\nexport abstract class XConnector implements IXConnector {\n /** The blockchain type this connector supports */\n public readonly xChainType: ChainType;\n\n /** Display name of the wallet provider */\n public readonly name: string;\n\n /** Unique identifier for the connector */\n public readonly _id: string;\n\n /** Optional icon URL for the wallet provider */\n public readonly _icon?: string;\n\n constructor(xChainType: ChainType, name: string, id: string) {\n this.xChainType = xChainType;\n this.name = name;\n this._id = id;\n }\n\n /**\n * Connects to the wallet provider\n * @returns Promise resolving to the connected account, or undefined if connection fails\n */\n abstract connect(): Promise<XAccount | undefined>;\n\n /**\n * Disconnects from the wallet provider\n */\n abstract disconnect(): Promise<void>;\n\n /** Get the unique identifier for this connector */\n public get id(): string {\n return this._id;\n }\n\n /** Get the optional icon URL for this wallet provider */\n public get icon(): string | undefined {\n return this._icon;\n }\n\n /**\n * True when the wallet extension backing this connector is installed.\n * Default: true (for provider-managed chains where connector presence already\n * implies install — EVM via EIP-6963, Solana/Sui via adapter discovery).\n * Subclasses backed by extension injection (Bitcoin, ICON, Stacks) override\n * this with a window probe.\n */\n public get isInstalled(): boolean {\n return true;\n }\n\n /** URL to install the wallet extension when missing. Subclasses override. */\n public get installUrl(): string | undefined {\n return undefined;\n }\n}\n","import { XConnector } from '@/core/index.js';\nimport type { XAccount } from '@/types/index.js';\nimport type { IBitcoinWalletProvider } from '@sodax/types';\nimport type { BitcoinWalletDefaults } from '@sodax/wallet-sdk-core';\nimport { BitcoinXService } from './BitcoinXService.js';\n\n/**\n * Abstract base class for Bitcoin wallet connectors.\n * Subclasses implement wallet-specific connection logic (Unisat, Xverse, OKX).\n *\n * `defaults` carries per-call overrides forwarded to the wallet provider built\n * by each subclass. Currently honored field: `defaultFinalize` — applied to\n * `signTransaction` when the caller omits the `finalize` argument.\n */\nexport abstract class BitcoinXConnector extends XConnector {\n protected readonly defaults: BitcoinWalletDefaults | undefined;\n\n constructor(name: string, id: string, defaults?: BitcoinWalletDefaults) {\n super('BITCOIN', name, id);\n this.defaults = defaults;\n }\n\n getXService(): BitcoinXService {\n return BitcoinXService.getInstance();\n }\n\n abstract override connect(): Promise<XAccount | undefined>;\n abstract override disconnect(): Promise<void>;\n\n /**\n * Returns an IBitcoinWalletProvider instance after connecting.\n * Used by useSpokeProvider to build BitcoinSpokeProvider.\n */\n abstract getWalletProvider(): IBitcoinWalletProvider | undefined;\n\n /**\n * Recreates a walletProvider from the browser extension window object\n * and stored xAccount data (no connect() call, no popup).\n * Used to restore provider after page reload without requiring reconnect.\n */\n abstract recreateWalletProvider(xAccount: XAccount): IBitcoinWalletProvider | undefined;\n}\n","import type { XAccount } from '@/types/index.js';\nimport { detectBitcoinAddressType, type IBitcoinWalletProvider, type BtcAddressType } from '@sodax/types';\nimport type { BitcoinWalletDefaults } from '@sodax/wallet-sdk-core';\nimport { WALLET_METADATA } from '@/constants.js';\nimport { BitcoinXConnector } from './BitcoinXConnector.js';\n\n// Minimal Unisat window API types\ninterface UnisatWallet {\n getAccounts(): Promise<string[]>;\n getPublicKey(): Promise<string>;\n signPsbt(psbtHex: string, options?: { autoFinalized?: boolean }): Promise<string>;\n signMessage(message: string, type?: 'bip322-simple' | 'ecdsa'): Promise<string>;\n requestAccounts(): Promise<string[]>;\n sendBitcoin(address: string, satoshis: number): Promise<string>;\n}\n\ndeclare global {\n interface Window {\n unisat?: UnisatWallet;\n }\n}\n\nclass UnisatWalletProvider implements IBitcoinWalletProvider {\n readonly chainType = 'BITCOIN' as const;\n private cachedAddress: string;\n private readonly defaults: BitcoinWalletDefaults | undefined;\n\n constructor(address: string, defaults?: BitcoinWalletDefaults) {\n this.cachedAddress = address;\n this.defaults = defaults;\n }\n\n // Lazy resolve so the provider can be constructed before the extension finishes injecting `window.unisat` (post-refresh rehydrate path).\n private get unisat(): UnisatWallet {\n const u = window.unisat;\n if (!u) throw new Error('Unisat wallet not available');\n return u;\n }\n\n async getWalletAddress(): Promise<string> {\n try {\n const accounts = await this.unisat.getAccounts();\n if (accounts[0]) this.cachedAddress = accounts[0];\n } catch {\n // wallet locked — fall through to cached address\n }\n return this.cachedAddress;\n }\n\n async getPublicKey(): Promise<string> {\n return this.unisat.getPublicKey();\n }\n\n async getAddressType(_address: string): Promise<BtcAddressType> {\n const address = await this.getWalletAddress();\n return detectBitcoinAddressType(address);\n }\n\n async signTransaction(psbtBase64: string, finalize?: boolean): Promise<string> {\n const effectiveFinalize = finalize ?? this.defaults?.defaultFinalize ?? false;\n // Convert base64 → hex for Unisat, then back\n const psbtHex = Buffer.from(psbtBase64, 'base64').toString('hex');\n const signedHex = await this.unisat.signPsbt(psbtHex, { autoFinalized: effectiveFinalize });\n // Return as hex (BTCWalletProvider.signTransaction expects this)\n return signedHex;\n }\n\n async signEcdsaMessage(message: string): Promise<string> {\n return this.unisat.signMessage(message, 'ecdsa');\n }\n\n async signBip322Message(message: string): Promise<string> {\n return this.unisat.signMessage(message, 'bip322-simple');\n }\n\n async sendBitcoin(toAddress: string, satoshis: bigint): Promise<string> {\n if (satoshis > BigInt(Number.MAX_SAFE_INTEGER)) {\n throw new Error(`Amount ${satoshis} satoshis exceeds safe integer range`);\n }\n return this.unisat.sendBitcoin(toAddress, Number(satoshis));\n }\n}\n\nexport class UnisatXConnector extends BitcoinXConnector {\n private walletProvider: UnisatWalletProvider | undefined;\n\n constructor(defaults?: BitcoinWalletDefaults) {\n super('Unisat', 'unisat', defaults);\n }\n\n public static isAvailable(): boolean {\n return typeof window !== 'undefined' && !!window.unisat;\n }\n\n public override get isInstalled(): boolean {\n return UnisatXConnector.isAvailable();\n }\n\n public override get installUrl(): string {\n return WALLET_METADATA.unisat.installUrl;\n }\n\n public override get icon(): string {\n return WALLET_METADATA.unisat.icon;\n }\n\n async connect(): Promise<XAccount | undefined> {\n if (!window.unisat) {\n throw new Error('Unisat wallet is not installed');\n }\n\n const accounts = await window.unisat.requestAccounts();\n const address = accounts[0];\n if (!address) {\n console.warn('[UnisatXConnector] connect: requestAccounts returned no address');\n return undefined;\n }\n\n this.walletProvider = new UnisatWalletProvider(address, this.defaults);\n\n return {\n address,\n xChainType: 'BITCOIN',\n };\n }\n\n async disconnect(): Promise<void> {\n this.walletProvider = undefined;\n }\n\n getWalletProvider(): IBitcoinWalletProvider | undefined {\n return this.walletProvider;\n }\n\n recreateWalletProvider(xAccount: XAccount): IBitcoinWalletProvider | undefined {\n if (!xAccount.address) return undefined;\n return new UnisatWalletProvider(xAccount.address, this.defaults);\n }\n}\n","import type { XAccount } from '@/types/index.js';\nimport { detectBitcoinAddressType, type IBitcoinWalletProvider, type BtcAddressType, type BtcWalletAddressType } from '@sodax/types';\nimport type { BitcoinWalletDefaults } from '@sodax/wallet-sdk-core';\nimport { AddressPurpose, MessageSigningProtocols } from 'sats-connect';\nimport { WALLET_METADATA } from '@/constants.js';\nimport { BitcoinXConnector } from './BitcoinXConnector.js';\n\n// sats-connect types\ninterface SignPsbtResult {\n psbt: string; // base64 signed PSBT\n}\n\ninterface GetAccountsResult {\n address: string;\n publicKey: string;\n purpose: string;\n addressType: string;\n}\n\ninterface SignMessageResult {\n signature: string;\n}\n\n\nclass XverseWalletProvider implements IBitcoinWalletProvider {\n readonly chainType = 'BITCOIN' as const;\n private address: string;\n private publicKey: string;\n private readonly defaults: BitcoinWalletDefaults | undefined;\n\n constructor(address: string, publicKey: string, defaults?: BitcoinWalletDefaults) {\n this.address = address;\n this.publicKey = publicKey;\n this.defaults = defaults;\n }\n\n async getWalletAddress(): Promise<string> {\n return this.address;\n }\n\n async getPublicKey(): Promise<string> {\n return this.publicKey;\n }\n\n async getAddressType(_address: string): Promise<BtcAddressType> {\n return detectBitcoinAddressType(this.address);\n }\n\n /**\n * Parse a base64-encoded PSBT to count the number of inputs.\n * Reads the unsigned transaction from the PSBT global section.\n */\n private countPsbtInputs(psbtBase64: string): number {\n const data = Buffer.from(psbtBase64, 'base64');\n // Skip 5-byte magic (0x70736274FF = \"psbt\" + separator)\n let offset = 5;\n\n // Global section: first key-value pair should be key 0x00 (unsigned tx)\n const keyLen = data[offset++] ?? 0;\n if (keyLen !== 1 || data[offset++] !== 0x00) {\n return 1; // fallback: assume 1 input\n }\n\n // Read value length (compact size)\n const firstByte = data[offset++] ?? 0;\n if (firstByte === 0xfd) offset += 2;\n else if (firstByte === 0xfe) offset += 4;\n else if (firstByte === 0xff) offset += 8;\n // else firstByte IS the length (< 0xfd), no extra bytes\n\n // Unsigned tx: skip 4-byte version\n offset += 4;\n\n // Read input count (varint)\n const inputByte = data[offset] ?? 0;\n if (inputByte < 0xfd) return inputByte;\n return 1; // fallback for unusual cases\n }\n\n async signTransaction(psbtBase64: string, finalize?: boolean): Promise<string> {\n const effectiveFinalize = finalize ?? this.defaults?.defaultFinalize ?? false;\n const { request } = await import('sats-connect');\n\n const inputCount = this.countPsbtInputs(psbtBase64);\n const signingIndexes = Array.from({ length: inputCount }, (_, i) => i);\n\n const response = await request('signPsbt', {\n psbt: psbtBase64,\n broadcast: false,\n signInputs: {\n [this.address]: signingIndexes,\n },\n });\n\n if (response.status === 'error') {\n throw new Error(response.error?.message || 'Xverse PSBT signing failed');\n }\n\n const result = response.result as SignPsbtResult;\n\n if (effectiveFinalize) {\n // Return hex for broadcast\n return Buffer.from(result.psbt, 'base64').toString('hex');\n }\n\n // Return base64 signed PSBT (partially signed)\n return result.psbt;\n }\n\n async signEcdsaMessage(message: string): Promise<string> {\n const { request } = await import('sats-connect');\n\n const response = await request('signMessage', {\n address: this.address,\n message,\n protocol: MessageSigningProtocols.ECDSA,\n });\n\n if (response.status === 'error') {\n throw new Error(response.error?.message || 'Xverse ECDSA signing failed');\n }\n\n return (response.result as SignMessageResult).signature;\n }\n\n async signBip322Message(message: string): Promise<string> {\n const { request } = await import('sats-connect');\n\n const response = await request('signMessage', {\n address: this.address,\n message,\n protocol: MessageSigningProtocols.BIP322,\n });\n\n if (response.status === 'error') {\n throw new Error(response.error?.message || 'Xverse BIP322 signing failed');\n }\n\n return (response.result as SignMessageResult).signature;\n }\n\n async sendBitcoin(toAddress: string, satoshis: bigint): Promise<string> {\n const { request } = await import('sats-connect');\n\n const response = await request('sendTransfer', {\n recipients: [\n {\n address: toAddress,\n amount: Number(satoshis),\n },\n ],\n });\n\n if (response.status === 'error') {\n throw new Error(response.error?.message || 'Xverse sendTransfer failed');\n }\n\n return (response.result as { txid: string }).txid;\n }\n}\n\nconst XVERSE_ADDRESS_TYPE_KEY = 'xverse-address-type';\n\nexport class XverseXConnector extends BitcoinXConnector {\n private walletProvider: XverseWalletProvider | undefined;\n\n /** Address purpose used when connecting. Taproot (Ordinals) by default to match Radfi. */\n public addressPurpose: AddressPurpose;\n\n constructor(defaults?: BitcoinWalletDefaults) {\n super('Xverse', 'xverse', defaults);\n // Restore saved preference, default to Taproot\n const saved = typeof window !== 'undefined' ? localStorage.getItem(XVERSE_ADDRESS_TYPE_KEY) : null;\n this.addressPurpose = saved === 'segwit' ? AddressPurpose.Payment : AddressPurpose.Ordinals;\n }\n\n /** Set address purpose and persist to localStorage. */\n public setAddressPurpose(type: BtcWalletAddressType): void {\n this.addressPurpose = type === 'taproot' ? AddressPurpose.Ordinals : AddressPurpose.Payment;\n if (typeof window !== 'undefined') {\n localStorage.setItem(XVERSE_ADDRESS_TYPE_KEY, type);\n }\n }\n\n public static isAvailable(): boolean {\n return typeof window !== 'undefined' && !!window.BitcoinProvider;\n }\n\n public override get isInstalled(): boolean {\n return XverseXConnector.isAvailable();\n }\n\n public override get installUrl(): string {\n return WALLET_METADATA.xverse.installUrl;\n }\n\n public override get icon(): string {\n return WALLET_METADATA.xverse.icon;\n }\n\n async connect(): Promise<XAccount | undefined> {\n if (!XverseXConnector.isAvailable()) {\n throw new Error('Xverse wallet is not installed');\n }\n\n const { request } = await import('sats-connect');\n\n const response = await request('getAccounts', {\n purposes: [this.addressPurpose],\n message: 'Connect to Sodax',\n });\n\n if (response.status === 'error') {\n throw new Error(response.error?.message || 'Xverse connection failed');\n }\n\n const accounts = response.result as GetAccountsResult[];\n const paymentAccount = accounts.find(a => a.purpose === this.addressPurpose) || accounts[0];\n\n if (!paymentAccount) return undefined;\n\n this.walletProvider = new XverseWalletProvider(\n paymentAccount.address,\n paymentAccount.publicKey,\n this.defaults,\n );\n\n return {\n address: paymentAccount.address,\n publicKey: paymentAccount.publicKey,\n xChainType: 'BITCOIN',\n };\n }\n\n async disconnect(): Promise<void> {\n this.walletProvider = undefined;\n }\n\n getWalletProvider(): IBitcoinWalletProvider | undefined {\n return this.walletProvider;\n }\n\n recreateWalletProvider(xAccount: XAccount): IBitcoinWalletProvider | undefined {\n if (!xAccount.address || !xAccount.publicKey) return undefined;\n return new XverseWalletProvider(xAccount.address, xAccount.publicKey, this.defaults);\n }\n}\n","import type { XAccount } from '@/types/index.js';\nimport { detectBitcoinAddressType, type IBitcoinWalletProvider, type BtcAddressType } from '@sodax/types';\nimport type { BitcoinWalletDefaults } from '@sodax/wallet-sdk-core';\nimport { WALLET_METADATA } from '@/constants.js';\nimport { BitcoinXConnector } from './BitcoinXConnector.js';\n\n// OKX Bitcoin wallet window API types\ninterface OKXBitcoinWallet {\n getAccounts(): Promise<string[]>;\n getPublicKey(): Promise<string>;\n signPsbt(psbtHex: string, options?: { autoFinalized?: boolean }): Promise<string>;\n signMessage(message: string, type?: 'bip322-simple' | 'ecdsa'): Promise<string>;\n connect(): Promise<{ address: string; publicKey: string }>;\n sendBitcoin(toAddress: string, satoshis: number): Promise<string>;\n}\n\ndeclare global {\n interface Window {\n okxwallet?: {\n bitcoin?: OKXBitcoinWallet;\n };\n }\n}\n\nclass OKXWalletProvider implements IBitcoinWalletProvider {\n readonly chainType = 'BITCOIN' as const;\n private cachedAddress: string;\n private readonly defaults: BitcoinWalletDefaults | undefined;\n\n constructor(address: string, defaults?: BitcoinWalletDefaults) {\n this.cachedAddress = address;\n this.defaults = defaults;\n }\n\n // Lazy resolve so the provider can be constructed before the extension finishes injecting `window.okxwallet` (post-refresh rehydrate path).\n private get okx(): OKXBitcoinWallet {\n const o = window.okxwallet?.bitcoin;\n if (!o) throw new Error('OKX wallet not available');\n return o;\n }\n\n async getWalletAddress(): Promise<string> {\n try {\n const accounts = await this.okx.getAccounts();\n if (accounts[0]) this.cachedAddress = accounts[0];\n } catch {\n // wallet locked — fall through to cached address\n }\n return this.cachedAddress;\n }\n\n async getPublicKey(): Promise<string> {\n return this.okx.getPublicKey();\n }\n\n async getAddressType(_address: string): Promise<BtcAddressType> {\n const address = await this.getWalletAddress();\n return detectBitcoinAddressType(address);\n }\n\n async signTransaction(psbtBase64: string, finalize?: boolean): Promise<string> {\n const effectiveFinalize = finalize ?? this.defaults?.defaultFinalize ?? false;\n const psbtHex = Buffer.from(psbtBase64, 'base64').toString('hex');\n return this.okx.signPsbt(psbtHex, { autoFinalized: effectiveFinalize });\n }\n\n async signEcdsaMessage(message: string): Promise<string> {\n return this.okx.signMessage(message, 'ecdsa');\n }\n\n async signBip322Message(message: string): Promise<string> {\n return this.okx.signMessage(message, 'bip322-simple');\n }\n\n async sendBitcoin(toAddress: string, satoshis: bigint): Promise<string> {\n if (satoshis > BigInt(Number.MAX_SAFE_INTEGER)) {\n throw new Error(`Amount ${satoshis} satoshis exceeds safe integer range`);\n }\n return this.okx.sendBitcoin(toAddress, Number(satoshis));\n }\n}\n\nexport class OKXXConnector extends BitcoinXConnector {\n private walletProvider: OKXWalletProvider | undefined;\n\n constructor(defaults?: BitcoinWalletDefaults) {\n super('OKX Wallet', 'okx-bitcoin', defaults);\n }\n\n public static isAvailable(): boolean {\n return typeof window !== 'undefined' && !!window.okxwallet?.bitcoin;\n }\n\n public override get isInstalled(): boolean {\n return OKXXConnector.isAvailable();\n }\n\n public override get installUrl(): string {\n return WALLET_METADATA.okx.installUrl;\n }\n\n public override get icon(): string {\n return WALLET_METADATA.okx.icon;\n }\n\n async connect(): Promise<XAccount | undefined> {\n const okx = window.okxwallet?.bitcoin;\n if (!okx) {\n throw new Error('OKX wallet is not installed');\n }\n\n const { address } = await okx.connect();\n if (!address) {\n console.warn('[OKXXConnector] connect: okx.connect() returned no address');\n return undefined;\n }\n\n this.walletProvider = new OKXWalletProvider(address, this.defaults);\n\n return {\n address,\n xChainType: 'BITCOIN',\n };\n }\n\n async disconnect(): Promise<void> {\n this.walletProvider = undefined;\n }\n\n getWalletProvider(): IBitcoinWalletProvider | undefined {\n return this.walletProvider;\n }\n\n recreateWalletProvider(xAccount: XAccount): IBitcoinWalletProvider | undefined {\n if (!xAccount.address) return undefined;\n return new OKXWalletProvider(xAccount.address, this.defaults);\n }\n}\n","// packages/wallet-sdk-react/src/shared/guards.ts\n\n/**\n * Tiny runtime type guards used to safely narrow `unknown` values.\n *\n * Why this exists:\n * - In wallets land, many values come from outside TypeScript (window injections, 3rd-party SDKs, serialized state).\n * - Writing `as SomeType` skips checks and can crash later in confusing places.\n * - Guards + `assert(...)` let us fail fast with a clear error message at the boundary.\n */\n\nexport type UnknownRecord = Record<string, unknown>;\n\n/** True if value is a non-null object (Record-like). */\nexport function isRecord(value: unknown): value is UnknownRecord {\n return typeof value === 'object' && value !== null;\n}\n\n/** True if the object has a string property at `key`. */\nexport function hasStringProperty<Key extends string>(\n value: unknown,\n key: Key,\n): value is UnknownRecord & Record<Key, string> {\n return isRecord(value) && typeof value[key] === 'string';\n}\n\n/** True if the object has an optional string property at `key`. */\nexport function hasOptionalStringProperty<Key extends string>(\n value: unknown,\n key: Key,\n): value is UnknownRecord & Partial<Record<Key, string>> {\n return isRecord(value) && (value[key] === undefined || typeof value[key] === 'string');\n}\n\n/** True if the object has a boolean property at `key`. */\nexport function hasBooleanProperty<Key extends string>(\n value: unknown,\n key: Key,\n): value is UnknownRecord & Record<Key, boolean> {\n return isRecord(value) && typeof value[key] === 'boolean';\n}\n\n/** True if the object has a function property at `key`. */\nexport function hasFunctionProperty<Key extends string>(\n value: unknown,\n key: Key,\n): value is UnknownRecord & Record<Key, (...args: unknown[]) => unknown> {\n return isRecord(value) && typeof value[key] === 'function';\n}\n\n/**\n * Throws if condition is false.\n * Use this after guards to stop execution early with an actionable error message.\n */\nexport function assert(condition: unknown, message: string): asserts condition {\n if (!condition) {\n throw new Error(message);\n }\n}\n\n/**\n * Validates the runtime shape of Sui provider dependencies before passing them to wallet-sdk-core.\n * Used by both SuiHydrator (render path) and SuiXService.createWalletProvider (imperative path).\n */\nexport function assertSuiProviderShape(caller: string, client: unknown, wallet: unknown, account: unknown): void {\n const clientOk =\n isRecord(client) &&\n hasFunctionProperty(client, 'executeTransactionBlock') &&\n hasFunctionProperty(client, 'devInspectTransactionBlock') &&\n hasFunctionProperty(client, 'getCoins');\n assert(clientOk, `[${caller}] invalid Sui client shape`);\n\n const walletOk = isRecord(wallet) && hasStringProperty(wallet, 'name');\n assert(walletOk, `[${caller}] invalid Sui wallet shape`);\n\n const accountOk = isRecord(account) && hasStringProperty(account, 'address');\n assert(accountOk, `[${caller}] invalid Sui account shape`);\n}\n","import { XService } from '@/core/XService.js';\nimport { ChainKeys, type XToken } from '@sodax/types';\nimport type { EvmTypeConfig } from '@/types/config.js';\nimport { getRpcUrl, getWagmiChainId, isNativeToken } from '@/utils/index.js';\n\nimport { type Address, type Chain, defineChain, erc20Abi } from 'viem';\nimport { getPublicClient } from 'wagmi/actions';\nimport { type Config, type CreateConnectorFn, createConfig, http, createStorage, cookieStorage } from 'wagmi';\nimport {\n mainnet,\n avalanche,\n base,\n optimism,\n polygon,\n arbitrum,\n bsc,\n sonic,\n lightlinkPhoenix,\n redbellyMainnet,\n kaia,\n} from 'wagmi/chains';\ntype WagmiOptions = {\n reconnectOnMount?: boolean;\n ssr?: boolean;\n};\n\n// HyperEVM chain is not supported by viem, so we need to define it manually\nexport const hyper = /*#__PURE__*/ defineChain({\n id: 999,\n name: 'HyperEVM',\n nativeCurrency: {\n decimals: 18,\n name: 'HYPE',\n symbol: 'HYPE',\n },\n rpcUrls: {\n default: { http: ['https://rpc.hyperliquid.xyz/evm'] },\n },\n blockExplorers: {\n default: {\n name: 'HyperEVMScan',\n url: 'https://hyperevmscan.io/',\n },\n },\n contracts: {\n multicall3: {\n address: '0xcA11bde05977b3631167028862bE2a173976CA11',\n blockCreated: 13051,\n },\n },\n});\n\nexport const createWagmiConfig = (\n evmChains: EvmTypeConfig['chains'],\n options?: WagmiOptions & { connectors?: CreateConnectorFn[] },\n): Config => {\n return createConfig({\n chains: [\n mainnet,\n avalanche,\n arbitrum,\n base,\n bsc,\n sonic,\n optimism,\n polygon,\n hyper,\n lightlinkPhoenix,\n kaia,\n redbellyMainnet,\n ],\n connectors: options?.connectors ?? [],\n ssr: options?.ssr,\n transports: {\n [mainnet.id]: http(getRpcUrl(evmChains?.[ChainKeys.ETHEREUM_MAINNET])),\n [avalanche.id]: http(getRpcUrl(evmChains?.[ChainKeys.AVALANCHE_MAINNET])),\n [arbitrum.id]: http(getRpcUrl(evmChains?.[ChainKeys.ARBITRUM_MAINNET])),\n [base.id]: http(getRpcUrl(evmChains?.[ChainKeys.BASE_MAINNET])),\n [bsc.id]: http(getRpcUrl(evmChains?.[ChainKeys.BSC_MAINNET])),\n [sonic.id]: http(getRpcUrl(evmChains?.[ChainKeys.SONIC_MAINNET])),\n [optimism.id]: http(getRpcUrl(evmChains?.[ChainKeys.OPTIMISM_MAINNET])),\n [polygon.id]: http(getRpcUrl(evmChains?.[ChainKeys.POLYGON_MAINNET])),\n [hyper.id]: http(getRpcUrl(evmChains?.[ChainKeys.HYPEREVM_MAINNET])),\n [lightlinkPhoenix.id]: http(getRpcUrl(evmChains?.[ChainKeys.LIGHTLINK_MAINNET])),\n [redbellyMainnet.id]: http(getRpcUrl(evmChains?.[ChainKeys.REDBELLY_MAINNET])),\n [kaia.id]: http(getRpcUrl(evmChains?.[ChainKeys.KAIA_MAINNET])),\n },\n storage: createStorage({\n storage: cookieStorage,\n key: 'sodax',\n }),\n });\n};\n\n/**\n * Service class for handling EVM chain interactions.\n * Implements singleton pattern and provides methods for wallet/chain operations.\n */\n\nexport class EvmXService extends XService {\n private static instance: EvmXService;\n public wagmiConfig: Config | undefined;\n\n private constructor() {\n super('EVM');\n }\n\n public static getInstance(): EvmXService {\n if (!EvmXService.instance) {\n EvmXService.instance = new EvmXService();\n }\n return EvmXService.instance;\n }\n\n // get erc20 token balance in a chain (evm chain only)\n async _getTokenBalance(address: string | undefined, chainId: number, tokenAddress: string): Promise<bigint> {\n const publicClient = getPublicClient(this.wagmiConfig as Config, { chainId: chainId });\n if (!publicClient) throw new Error('Public client not found');\n const balance = await publicClient.readContract({\n abi: erc20Abi,\n address: tokenAddress as `0x${string}`,\n functionName: 'balanceOf',\n args: [address as `0x${string}`],\n });\n return balance || 0n;\n }\n\n //get native balance of the chain (evm chain only)\n async _getChainBalance(address: string | undefined, chainId: number) {\n const balance = await getPublicClient(this.wagmiConfig as Config, { chainId: chainId })?.getBalance({\n address: address as Address,\n });\n return balance || 0n;\n }\n\n override async getBalance(address: string | undefined, xToken: XToken): Promise<bigint> {\n if (!address) return 0n;\n if (!this.wagmiConfig) return 0n;\n\n const chainId = getWagmiChainId(xToken.chainKey);\n\n if (isNativeToken(xToken)) {\n return this._getChainBalance(address, chainId);\n }\n\n throw new Error(`Unsupported token: ${xToken.symbol}`);\n }\n\n override async getBalances(address: string | undefined, xTokens: XToken[]) {\n if (!address) return {};\n if (!this.wagmiConfig) return {};\n\n const nativeTokenBalancePromises = xTokens\n .filter(xToken => isNativeToken(xToken))\n .map(async xToken => {\n const balance = await this.getBalance(address, xToken);\n return { symbol: xToken.symbol, address: xToken.address, balance };\n });\n\n const nativeTokenBalances = await Promise.all(nativeTokenBalancePromises);\n const tokenMap: Record<string, bigint> = nativeTokenBalances.reduce<Record<string, bigint>>(\n (map, { address, balance }) => {\n if (balance) map[address] = balance;\n return map;\n },\n {},\n );\n\n const nonNativeXTokens = xTokens.filter(xToken => !isNativeToken(xToken));\n const firstToken = xTokens[0];\n if (!firstToken) return tokenMap;\n const chainKey = firstToken.chainKey;\n const viemChain: Chain = this.wagmiConfig.chains.find(chain => chain.id === getWagmiChainId(chainKey)) as Chain;\n const chainId = getWagmiChainId(chainKey);\n\n const publicClient = getPublicClient(this.wagmiConfig, { chainId: chainId });\n if (!publicClient) throw new Error('Public client not found');\n\n if (viemChain?.contracts?.multicall3) {\n //multicall supports\n const result = await publicClient.multicall({\n contracts: nonNativeXTokens.map(token => ({\n abi: erc20Abi,\n address: token.address as `0x${string}`,\n functionName: 'balanceOf',\n args: [address],\n })),\n });\n\n return nonNativeXTokens.reduce((acc, token, index) => {\n const resultValue = result?.[index]?.result;\n acc[token.address] = resultValue !== undefined && resultValue !== null ? BigInt(resultValue) : 0n;\n return acc;\n }, tokenMap);\n }\n\n const nonNativeTokenBalances: bigint[] = await Promise.all(\n nonNativeXTokens.map(token => this._getTokenBalance(address, chainId, token.address)),\n );\n\n return nonNativeXTokens.reduce((acc, token, idx) => {\n acc[token.address] = nonNativeTokenBalances[idx] ?? 0n;\n return acc;\n }, tokenMap);\n }\n}\n","import { XService } from '@/core/XService.js';\nimport { isNativeToken } from '@/utils/index.js';\nimport type { XToken } from '@sodax/types';\nimport { type Connection, PublicKey } from '@solana/web3.js';\nimport { getAccount, getAssociatedTokenAddressSync } from '@solana/spl-token';\nimport type { WalletContextState } from '@solana/wallet-adapter-react';\n\nexport class SolanaXService extends XService {\n private static instance: SolanaXService;\n\n public connection: Connection | undefined;\n public wallet: WalletContextState | undefined;\n\n private constructor() {\n super('SOLANA');\n }\n\n public static getInstance(): SolanaXService {\n if (!SolanaXService.instance) {\n SolanaXService.instance = new SolanaXService();\n }\n return SolanaXService.instance;\n }\n\n override async getBalance(address: string | undefined, xToken: XToken): Promise<bigint> {\n if (!address) return BigInt(0);\n\n const connection = this.connection;\n if (!connection) {\n return BigInt(0);\n }\n\n try {\n if (isNativeToken(xToken)) {\n const newBalance = await connection.getBalance(new PublicKey(address));\n return BigInt(newBalance);\n }\n\n const tokenAccountPubkey = getAssociatedTokenAddressSync(new PublicKey(xToken.address), new PublicKey(address));\n const tokenAccount = await getAccount(connection, tokenAccountPubkey);\n return BigInt(tokenAccount.amount);\n } catch {\n return BigInt(0);\n }\n }\n}\n","import { XService } from '@/core/XService.js';\nimport type { XToken, ISuiWalletProvider } from '@sodax/types';\nimport { SuiWalletProvider } from '@sodax/wallet-sdk-core';\nimport { isNativeToken } from '@/utils/index.js';\nimport { assertSuiProviderShape } from '@/shared/guards.js';\n\n// These fields are hydrated by SuiHydrator from @mysten/dapp-kit hooks.\n// We use structural interfaces instead of importing nominal types from @mysten/wallet-standard\n// because dapp-kit may resolve a different version than wallet-sdk-core, causing nominal mismatch.\n// The `getBalance` method is the only field we call directly — the rest are passed through.\ninterface SuiClientLike {\n getBalance(input: { owner: string; coinType: string }): Promise<{ totalBalance: string }>;\n}\n\nexport class SuiXService extends XService {\n private static instance: SuiXService;\n\n // Hydrated by SuiHydrator. Start undefined because wallet may not be connected yet.\n // suiClient is typed structurally for the methods we call directly.\n // suiWallet/suiAccount are opaque — stored and passed through to SuiWalletProvider.\n public suiClient: SuiClientLike | undefined;\n public suiWallet: unknown;\n public suiAccount: unknown;\n\n private constructor() {\n super('SUI');\n }\n\n public static getInstance(): SuiXService {\n if (!SuiXService.instance) {\n SuiXService.instance = new SuiXService();\n }\n return SuiXService.instance;\n }\n\n createWalletProvider(): ISuiWalletProvider | undefined {\n if (!this.suiClient || !this.suiWallet || !this.suiAccount) {\n console.warn(\n '[SuiXService] createWalletProvider: missing dependencies — wallet not connected yet',\n { hasClient: !!this.suiClient, hasWallet: !!this.suiWallet, hasAccount: !!this.suiAccount },\n );\n return undefined;\n }\n\n // Runtime validation before passing data to wallet-sdk-core. This avoids \"trust me bro\" casting.\n // Note: we validate the minimum shape we rely on; the exact nominal types may differ by package version.\n assertSuiProviderShape('SuiXService', this.suiClient, this.suiWallet, this.suiAccount);\n\n // Version mismatch cast: dapp-kit hooks return types from their bundled @mysten/wallet-standard,\n // which differs nominally from wallet-sdk-core's version. Structurally identical at runtime.\n type SuiWalletProviderConfig = ConstructorParameters<typeof SuiWalletProvider>[0];\n return new SuiWalletProvider({\n client: this.suiClient,\n wallet: this.suiWallet,\n account: this.suiAccount,\n } as unknown as SuiWalletProviderConfig);\n }\n\n // getBalance is not used because getBalances uses getAllBalances which returns all balances\n\n override async getBalances(address: string | undefined, xTokens: readonly XToken[]): Promise<Record<string, bigint>> {\n if (!address || !this.suiClient) return {};\n // Capture in local so the closure sees a narrowed (non-undefined) reference.\n const client = this.suiClient;\n try {\n const balancePromises = xTokens.map(async xToken => {\n let coinType = isNativeToken(xToken) ? '0x2::sui::SUI' : xToken.address;\n\n // TODO: hard coded for getting legacy bnUSD balance\n if (\n coinType ===\n '0x03917a812fe4a6d6bc779c5ab53f8a80ba741f8af04121193fc44e0f662e2ceb::balanced_dollar::BALANCED_DOLLAR'\n ) {\n coinType =\n '0x3917a812fe4a6d6bc779c5ab53f8a80ba741f8af04121193fc44e0f662e2ceb::balanced_dollar::BALANCED_DOLLAR';\n }\n\n const balance = await client.getBalance({\n owner: address,\n coinType: coinType,\n });\n\n return {\n address: xToken.address,\n balance: balance ? BigInt(balance.totalBalance) : undefined,\n };\n });\n\n const results = await Promise.all(balancePromises);\n\n const tokenMap: Record<string, bigint> = {};\n results.forEach(result => {\n if (result.balance !== undefined) {\n tokenMap[result.address] = result.balance;\n }\n });\n\n return tokenMap;\n } catch (error) {\n console.error('[wallet-sdk-react] SUI getBalances failed:', error);\n return {};\n }\n }\n}\n","import {\n type FeeBumpTransaction,\n type Memo,\n type MemoType,\n type Operation,\n rpc,\n type Transaction,\n} from '@stellar/stellar-sdk';\n\nclass CustomSorobanServer extends rpc.Server {\n private readonly customHeaders: Record<string, string>;\n\n constructor(serverUrl: string, customHeaders: Record<string, string>) {\n super(serverUrl, {\n allowHttp: true,\n });\n this.customHeaders = customHeaders;\n }\n\n override async simulateTransaction(\n tx: Transaction<Memo<MemoType>, Operation[]>,\n ): Promise<rpc.Api.SimulateTransactionResponse> {\n const requestOptions = {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n ...this.customHeaders,\n },\n body: JSON.stringify({\n id: 1,\n jsonrpc: '2.0',\n method: 'simulateTransaction',\n params: {\n transaction: tx.toXDR(),\n },\n }),\n };\n\n const response = await fetch(`${this.serverURL}`, requestOptions);\n if (!response.ok) {\n throw new Error(`HTTP error simulating TX! status: ${response.status}`);\n }\n // Parse raw JSON-RPC payload into the discriminated union expected by callers\n return response.json().then(json => rpc.parseRawSimulation(json.result));\n }\n\n override async sendTransaction(tx: Transaction | FeeBumpTransaction): Promise<rpc.Api.SendTransactionResponse> {\n const requestOptions = {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n ...this.customHeaders,\n },\n body: JSON.stringify({\n id: 1,\n jsonrpc: '2.0',\n method: 'sendTransaction',\n params: {\n transaction: tx.toXDR(),\n },\n }),\n };\n\n const response = await fetch(`${this.serverURL}`, requestOptions);\n if (!response.ok) {\n throw new Error(`HTTP error submitting TX! status: ${response.status}`);\n }\n return response.json().then(json => json.result);\n }\n\n override async getTransaction(hash: string): Promise<rpc.Api.GetTransactionResponse> {\n const requestOptions = {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n ...this.customHeaders,\n },\n body: JSON.stringify({\n id: 1,\n jsonrpc: '2.0',\n method: 'getTransaction',\n params: { hash },\n }),\n };\n\n const response = await fetch(`${this.serverURL}`, requestOptions);\n if (!response.ok) {\n throw new Error(`HTTP error getting TX! status: ${response.status}`);\n }\n return response.json().then(json => json.result);\n }\n}\n\nexport default CustomSorobanServer;\n","import {\n Address,\n Contract,\n type Memo,\n type MemoType,\n type Operation,\n rpc,\n TimeoutInfinite,\n type Transaction,\n type TransactionBuilder,\n scValToBigInt,\n} from '@stellar/stellar-sdk';\nimport type CustomSorobanServer from './CustomSorobanServer.js';\n\nexport const STELLAR_RLP_MSG_TYPE = { type: 'symbol' };\n\n// Can be used whenever you need an Address argument for a contract method\nexport const accountToScVal = (account: string) => new Address(account).toScVal();\n\nexport const simulateTx = (\n tx: Transaction<Memo<MemoType>, Operation[]>,\n server: CustomSorobanServer,\n): Promise<rpc.Api.SimulateTransactionResponse> => server.simulateTransaction(tx);\n\nexport const getTokenBalance = async (\n address: string,\n tokenId: string,\n txBuilder: TransactionBuilder,\n server: CustomSorobanServer,\n) => {\n const params = [accountToScVal(address)];\n const contract = new Contract(tokenId);\n const tx = txBuilder\n .addOperation(contract.call('balance', ...params))\n .setTimeout(TimeoutInfinite)\n .build();\n\n const result = await simulateTx(tx, server);\n\n // Also throws on restore responses — invalid for read-only balance simulation\n if (!rpc.Api.isSimulationSuccess(result)) {\n throw new Error(`Simulation failed: ${JSON.stringify(result)}`);\n }\n\n return result.result ? scValToBigInt(result.result.retval) : 0n;\n};\n","import { XService } from '@/core/XService.js';\nimport { StellarWalletsKit, WalletNetwork, allowAllModules } from '@creit.tech/stellar-wallets-kit';\nimport * as StellarSdk from '@stellar/stellar-sdk';\nimport CustomSorobanServer from './CustomSorobanServer.js';\nimport { getTokenBalance } from './utils.js';\nimport type { XToken } from '@sodax/types';\nimport { STELLAR_DEFAULT_HORIZON_RPC_URL, STELLAR_DEFAULT_SOROBAN_RPC_URL } from '@/constants.js';\n\n/** Base reserve in stroops (0.5 XLM). Each subentry (trustline, signer, data entry, offer) adds one base reserve. */\nconst STELLAR_BASE_RESERVE_STROOPS = 5_000_000;\n\n/** Horizon account fields used for minimum balance. Minimum = (2 + subentry_count + num_sponsoring - num_sponsored) * base_reserve + selling_liabilities. */\ninterface StellarAccountReserveFields {\n subentry_count?: number;\n num_sponsoring?: number;\n num_sponsored?: number;\n}\n\n/** Parse XLM balance string (e.g. \"198.8944970\") to stroops (1 XLM = 10^7 stroops). */\nfunction parseXlmBalanceToStroops(balanceStr: string): bigint {\n const parts = balanceStr.split('.');\n const whole = parts[0] ?? '0';\n const frac = (parts[1] ?? '').padEnd(7, '0').slice(0, 7);\n return BigInt(whole + frac);\n}\n\nexport class StellarXService extends XService {\n private static instance: StellarXService;\n\n public walletsKit: StellarWalletsKit;\n public server: StellarSdk.Horizon.Server;\n public sorobanServer: CustomSorobanServer;\n\n private constructor(horizonRpcUrl?: string, sorobanRpcUrl?: string) {\n super('STELLAR');\n\n this.walletsKit = new StellarWalletsKit({\n network: WalletNetwork.PUBLIC,\n modules: allowAllModules(),\n });\n\n this.server = new StellarSdk.Horizon.Server(horizonRpcUrl ?? STELLAR_DEFAULT_HORIZON_RPC_URL, { allowHttp: true });\n this.sorobanServer = new CustomSorobanServer(sorobanRpcUrl ?? STELLAR_DEFAULT_SOROBAN_RPC_URL, {});\n }\n\n public static getInstance(horizonRpcUrl?: string, sorobanRpcUrl?: string): StellarXService {\n if (!StellarXService.instance) {\n StellarXService.instance = new StellarXService(horizonRpcUrl, sorobanRpcUrl);\n } else {\n if (horizonRpcUrl) {\n StellarXService.instance.server = new StellarSdk.Horizon.Server(horizonRpcUrl, { allowHttp: true });\n }\n if (sorobanRpcUrl) {\n StellarXService.instance.sorobanServer = new CustomSorobanServer(sorobanRpcUrl, {});\n }\n }\n return StellarXService.instance;\n }\n\n override async getBalance(address: string | undefined, xToken: XToken): Promise<bigint> {\n if (!address) return BigInt(0);\n\n const stellarAccount = await this.server.loadAccount(address);\n\n if (xToken.symbol === 'XLM') {\n const xlmBalance = stellarAccount.balances.find(balance => balance.asset_type === 'native');\n if (xlmBalance) {\n const rawBalanceStroops = parseXlmBalanceToStroops(xlmBalance.balance);\n const sellingLiabilitiesStroops = (xlmBalance as { selling_liabilities?: string }).selling_liabilities\n ? parseXlmBalanceToStroops((xlmBalance as { selling_liabilities: string }).selling_liabilities)\n : BigInt(0);\n const reserveFields = stellarAccount as unknown as StellarAccountReserveFields;\n const subentryCount = reserveFields.subentry_count ?? 0;\n const numSponsoring = reserveFields.num_sponsoring ?? 0;\n const numSponsored = reserveFields.num_sponsored ?? 0;\n // Minimum balance = (2 + subentry_count + num_sponsoring - num_sponsored) * base_reserve + selling_liabilities.\n // When account has sponsored reserves (num_sponsored > 0), those reserves are paid by the sponsor, so we don't subtract them.\n const reserveCount = Math.max(0, 2 + subentryCount + numSponsoring - numSponsored);\n const minBalanceStroops =\n BigInt(reserveCount) * BigInt(STELLAR_BASE_RESERVE_STROOPS) + sellingLiabilitiesStroops;\n const availableStroops =\n rawBalanceStroops > minBalanceStroops ? rawBalanceStroops - minBalanceStroops : BigInt(0);\n return availableStroops;\n }\n } else {\n try {\n const txBuilder = new StellarSdk.TransactionBuilder(stellarAccount, {\n fee: StellarSdk.BASE_FEE,\n networkPassphrase: StellarSdk.Networks.PUBLIC,\n });\n\n const balance = await getTokenBalance(address, xToken.address, txBuilder, this.sorobanServer);\n return balance;\n } catch (e) {\n console.error(`Error while fetching token on Stellar: ${xToken.symbol}, Error: ${e}`);\n }\n }\n\n return BigInt(0);\n }\n}\n","import type { XAccount } from '@/types/index.js';\n\nimport { XConnector } from '@/core/index.js';\nimport { StellarXService } from './StellarXService.js';\n\nexport type StellarWalletType = {\n icon: string;\n id: string;\n isAvailable: boolean;\n name: string;\n type: string;\n url: string;\n};\n\nexport class StellarWalletsKitXConnector extends XConnector {\n _wallet: StellarWalletType;\n\n constructor(wallet: StellarWalletType) {\n super('STELLAR', wallet.name, wallet.id);\n this._wallet = wallet;\n }\n\n getXService(): StellarXService {\n return StellarXService.getInstance();\n }\n\n async connect(): Promise<XAccount | undefined> {\n const kit = this.getXService().walletsKit;\n\n if (!this._wallet) {\n return;\n }\n\n if (!this._wallet.isAvailable) {\n // Throw instead of silently navigating to the install URL — callers\n // that bypass `useWalletModal.selectWallet`'s pre-check otherwise\n // see a tab open with no surfaced error. Consumers read\n // `connector.installUrl` to render the install CTA on the caught\n // error.\n throw new Error(`${this._wallet.name} is not installed. Install the wallet and reload the page.`);\n }\n\n kit.setWallet(this._wallet.id);\n const { address } = await kit.getAddress();\n\n return {\n address: address,\n xChainType: this.xChainType,\n };\n }\n\n async disconnect(): Promise<void> {}\n\n public override get icon(): string {\n return this._wallet.icon;\n }\n\n public override get isInstalled(): boolean {\n return this._wallet.isAvailable;\n }\n\n public override get installUrl(): string | undefined {\n return this._wallet.url;\n }\n}\n","import { XService } from '@/core/XService.js';\nimport type { IconService } from 'icon-sdk-js';\nimport * as IconSdkRaw from 'icon-sdk-js';\nimport type { XToken } from '@sodax/types';\nimport { isNativeToken } from '@/utils/index.js';\n\nconst IconSdk = ('default' in IconSdkRaw.default ? IconSdkRaw.default : IconSdkRaw) as typeof IconSdkRaw;\nconst { IconService: IconServiceConstructor, Builder: IconBuilder, Converter: IconConverter } = IconSdk;\nexport interface CallData {\n target: string;\n method: string;\n params: string[];\n}\n\nexport enum SupportedChainId {\n MAINNET = 1,\n}\n\ninterface ChainInfo {\n readonly name: string;\n readonly node: string;\n readonly APIEndpoint: string;\n readonly debugAPIEndpoint: string;\n readonly chainId: number;\n readonly tracker: string;\n}\n\nexport const CHAIN_INFO: { readonly [chainId: number]: ChainInfo } = {\n [SupportedChainId.MAINNET]: {\n name: 'ICON Mainnet',\n node: 'https://ctz.solidwallet.io',\n APIEndpoint: 'https://ctz.solidwallet.io/api/v3',\n debugAPIEndpoint: 'https://api.icon.community/api/v3d',\n chainId: 1,\n tracker: 'https://tracker.icon.community',\n },\n};\n\nexport class IconXService extends XService {\n private static instance: IconXService;\n\n public iconService: IconService;\n\n private constructor(rpcUrl?: string) {\n super('ICON');\n const mainnetInfo = CHAIN_INFO[SupportedChainId.MAINNET];\n if (!mainnetInfo) throw new Error('ICON mainnet chain info not found');\n this.iconService = new IconServiceConstructor(\n new IconServiceConstructor.HttpProvider(rpcUrl ?? mainnetInfo.APIEndpoint),\n );\n }\n\n public static getInstance(rpcUrl?: string): IconXService {\n if (!IconXService.instance) {\n IconXService.instance = new IconXService(rpcUrl);\n }\n return IconXService.instance;\n }\n\n private async getAggregateData(requireSuccess: boolean, calls: CallData[]) {\n const rawTx = new IconBuilder.CallBuilder()\n // muticall address on mainnet\n .to('cxa4aa9185e23558cff990f494c1fd2845f6cbf741')\n .method('tryAggregate')\n .params({ requireSuccess: IconConverter.toHex(requireSuccess ? 1 : 0), calls })\n .build();\n\n try {\n const result = await this.iconService.call(rawTx).execute();\n const aggs = result['returnData'];\n\n const data = aggs.map((agg: Record<string, string>) => {\n if (agg['success'] === '0x0') {\n return null;\n }\n return agg['returnData'];\n });\n\n return data;\n } catch (err) {\n console.error(err);\n return Array(calls.length).fill(null);\n }\n }\n\n override async getBalances(address: string | undefined, xTokens: XToken[]) {\n if (!address) return {};\n\n const balances: Record<string, bigint> = {};\n\n const nativeXToken = xTokens.find(xToken => isNativeToken(xToken));\n const nonNativeXTokens = xTokens.filter(xToken => !isNativeToken(xToken));\n\n if (nativeXToken) {\n const balance = await this.iconService.getBalance(address).execute();\n balances[nativeXToken.address] = BigInt(balance.toFixed());\n }\n\n const cds: CallData[] = nonNativeXTokens.map(token => {\n return {\n target: token.address,\n method: 'balanceOf',\n params: [address],\n };\n });\n\n const data: (string | null)[] = await this.getAggregateData(\n false,\n cds.filter(cd => cd.target.startsWith('cx')),\n );\n\n return nonNativeXTokens.reduce((agg, token, idx) => {\n const balance = data[idx];\n if (balance) {\n balances[token.address] = BigInt(balance);\n }\n\n return agg;\n }, balances);\n }\n}\n","const ICONEX_RELAY_RESPONSE = 'ICONEX_RELAY_RESPONSE';\nconst ICONEX_RELAY_REQUEST = 'ICONEX_RELAY_REQUEST';\n\nexport enum ICONexRequestEventType {\n REQUEST_HAS_ACCOUNT = 'REQUEST_HAS_ACCOUNT',\n REQUEST_HAS_ADDRESS = 'REQUEST_HAS_ADDRESS',\n REQUEST_ADDRESS = 'REQUEST_ADDRESS',\n REQUEST_JSON = 'REQUEST_JSON',\n REQUEST_SIGNING = 'REQUEST_SIGNING',\n}\n\nexport enum ICONexResponseEventType {\n RESPONSE_HAS_ACCOUNT = 'RESPONSE_HAS_ACCOUNT',\n RESPONSE_HAS_ADDRESS = 'RESPONSE_HAS_ADDRESS',\n RESPONSE_ADDRESS = 'RESPONSE_ADDRESS',\n RESPONSE_JSON = 'RESPONSE_JSON',\n RESPONSE_SIGNING = 'RESPONSE_SIGNING',\n}\n\nexport interface ICONexRequestEvent {\n type: ICONexRequestEventType;\n // Request payload varies by event type (JSON-RPC params, signing data, etc).\n // `unknown` forces callers to validate before using — safer than `any`.\n payload?: unknown;\n}\n\nexport interface ICONexResponseEvent {\n type: ICONexResponseEventType;\n // Response payload is always a string: wallet address, tx hash, or signature.\n payload?: string;\n}\n\nexport type ICONexEvent = ICONexRequestEvent | ICONexResponseEvent;\n\nexport const request = (event: ICONexRequestEvent): Promise<ICONexResponseEvent> => {\n return new Promise((resolve, reject) => {\n // evt is a CustomEvent dispatched by the ICONex/Hana extension. Type the handler\n // param so evt.detail is properly typed instead of implicit `any`.\n const handler = (evt: Event) => {\n window.removeEventListener(ICONEX_RELAY_RESPONSE, handler);\n resolve((evt as CustomEvent<ICONexResponseEvent>).detail);\n };\n\n window.addEventListener(ICONEX_RELAY_RESPONSE, handler);\n window.dispatchEvent(\n new CustomEvent(ICONEX_RELAY_REQUEST, {\n detail: event,\n }),\n );\n });\n};\n","import type { XAccount } from '@/types/index.js';\nimport { ICONexRequestEventType, ICONexResponseEventType, request } from './iconex/index.js';\n\nimport { XConnector } from '@/core/XConnector.js';\nimport { assert, hasBooleanProperty, isRecord } from '@/shared/guards.js';\nimport { WALLET_METADATA } from '@/constants.js';\n\nconst isHanaWallet = (value: unknown): value is { available?: boolean } => {\n return isRecord(value) && (value.available === undefined || hasBooleanProperty(value, 'available'));\n};\n\nexport class IconHanaXConnector extends XConnector {\n constructor() {\n super('ICON', 'Hana Wallet', 'hana');\n }\n\n public override get isInstalled(): boolean {\n if (typeof window === 'undefined') return false;\n const hanaWallet = (window as unknown as Record<string, unknown>).hanaWallet;\n return isHanaWallet(hanaWallet) && hanaWallet.available === true;\n }\n\n public override get installUrl(): string {\n return WALLET_METADATA.hana.installUrl;\n }\n\n async connect(): Promise<XAccount | undefined> {\n const hanaWallet = (window as unknown as Record<string, unknown>).hanaWallet;\n assert(isHanaWallet(hanaWallet) || hanaWallet === undefined, '[IconHanaXConnector] invalid window.hanaWallet type');\n\n if (!hanaWallet || !hanaWallet.available) {\n window.open(WALLET_METADATA.hana.installUrl, '_blank', 'noopener,noreferrer');\n return;\n }\n\n const detail = await request({\n type: ICONexRequestEventType.REQUEST_ADDRESS,\n });\n\n if (detail?.type === ICONexResponseEventType.RESPONSE_ADDRESS) {\n return {\n address: detail?.payload,\n xChainType: this.xChainType,\n };\n }\n\n console.warn('[IconHanaXConnector] connect: unexpected response from Hana wallet', detail);\n return undefined;\n }\n\n async disconnect(): Promise<void> {\n console.log('HanaIconXConnector disconnected');\n }\n\n public override get icon(): string {\n return WALLET_METADATA.hana.icon;\n }\n}\n","import { XService } from '@/core/XService.js';\nimport { Network, getNetworkEndpoints } from '@injectivelabs/networks';\nimport { ChainGrpcWasmApi, IndexerGrpcAccountPortfolioApi } from '@injectivelabs/sdk-ts';\nimport { ChainId as InjectiveChainId } from '@injectivelabs/ts-types';\nimport { MsgBroadcaster } from '@injectivelabs/wallet-core';\nimport type { InjectiveRpcConfig, XToken } from '@sodax/types';\nimport { mainnet } from 'wagmi/chains';\nimport { WalletStrategy } from '@injectivelabs/wallet-strategy';\n\nexport class InjectiveXService extends XService {\n private static instance: InjectiveXService;\n\n public walletStrategy: WalletStrategy;\n public indexerGrpcAccountPortfolioApi: IndexerGrpcAccountPortfolioApi;\n public chainGrpcWasmApi: ChainGrpcWasmApi;\n public msgBroadcaster: MsgBroadcaster;\n\n private constructor(rpcConfig?: InjectiveRpcConfig) {\n super('INJECTIVE');\n\n const defaults = getNetworkEndpoints(Network.Mainnet);\n // Only `indexer` + `grpc` are overridable — the rest of the endpoints object\n // (rest, rpc, explorer, …) keeps the @injectivelabs/networks mainnet defaults.\n // Extend `InjectiveRpcConfig` if more endpoints need to be consumer-configurable.\n const endpoints = {\n ...defaults,\n indexer: rpcConfig?.indexer || defaults.indexer,\n grpc: rpcConfig?.grpc || defaults.grpc,\n };\n\n this.walletStrategy = new WalletStrategy({\n chainId: InjectiveChainId.Mainnet,\n strategies: {},\n evmOptions: {\n evmChainId: mainnet.id,\n rpcUrl: mainnet.rpcUrls.default.http[0],\n },\n });\n\n this.indexerGrpcAccountPortfolioApi = new IndexerGrpcAccountPortfolioApi(endpoints.indexer);\n this.chainGrpcWasmApi = new ChainGrpcWasmApi(endpoints.grpc);\n this.msgBroadcaster = new MsgBroadcaster({\n walletStrategy: this.walletStrategy,\n network: Network.Mainnet,\n endpoints,\n });\n }\n\n /**\n * @param rpcConfig - Only applied on first call. Subsequent calls return the\n * existing instance unchanged — gRPC/Indexer clients are built in the\n * constructor and can't be rebuilt at runtime. Pass the desired endpoints\n * via `SodaxWalletProvider.config.rpcConfig` once at app init.\n */\n public static getInstance(rpcConfig?: InjectiveRpcConfig): InjectiveXService {\n if (!InjectiveXService.instance) {\n InjectiveXService.instance = new InjectiveXService(rpcConfig);\n }\n return InjectiveXService.instance;\n }\n\n override async getBalance(address: string | undefined, xToken: XToken) {\n if (!address) return 0n;\n\n const portfolio = await this.indexerGrpcAccountPortfolioApi.fetchAccountPortfolioBalances(address);\n\n const xTokenAddress = xToken.address;\n\n const balance = portfolio.bankBalancesList.find(_balance => _balance.denom === xTokenAddress);\n if (balance) {\n return BigInt(balance.amount);\n }\n\n return 0n;\n }\n}\n","import type { XAccount } from '@/types/index.js';\nimport { XConnector } from '@/core/index.js';\nimport { getInjectiveAddress } from '@injectivelabs/sdk-ts';\nimport { type Wallet, isEvmBrowserWallet, isCosmosBrowserWallet } from '@injectivelabs/wallet-base';\nimport { isCosmosWalletInstalled } from '@injectivelabs/wallet-cosmos';\nimport { InjectiveXService } from './InjectiveXService.js';\n\nconst WALLET_ICONS: Partial<Record<Wallet, string>> = {\n metamask: 'https://raw.githubusercontent.com/balancednetwork/icons/master/wallets/metamask.svg',\n keplr: 'https://raw.githubusercontent.com/balancednetwork/icons/master/wallets/keplr.svg',\n leap: 'https://assets.leapwallet.io/logos/leap-cosmos-logo.svg',\n rabby: 'https://raw.githubusercontent.com/RabbyHub/logo/master/symbol.svg',\n phantom: 'https://raw.githubusercontent.com/balancednetwork/icons/master/wallets/phantom.svg',\n 'okx-wallet': 'https://static.okx.com/cdn/assets/imgs/247/58E63FEA47A2B7D7.png',\n 'trust-wallet': 'https://trustwallet.com/assets/images/media/assets/twLogo.svg',\n};\n\nexport class InjectiveXConnector extends XConnector {\n private wallet: Wallet;\n\n constructor(name: string, wallet: Wallet) {\n super('INJECTIVE', name, wallet);\n this.wallet = wallet;\n }\n\n getXService(): InjectiveXService {\n return InjectiveXService.getInstance();\n }\n\n async connect(): Promise<XAccount | undefined> {\n if (isCosmosBrowserWallet(this.wallet) && !isCosmosWalletInstalled(this.wallet)) {\n console.warn(`[InjectiveXConnector] connect: ${this.wallet} cosmos wallet not installed`);\n return undefined;\n }\n\n const walletStrategy = this.getXService().walletStrategy;\n await walletStrategy.setWallet(this.wallet);\n const addresses = await walletStrategy.getAddresses();\n\n if (!addresses?.length) {\n console.warn(`[InjectiveXConnector] connect: ${this.wallet} returned no addresses`);\n return undefined;\n }\n\n const firstAddress = addresses[0];\n if (!firstAddress) {\n console.warn(`[InjectiveXConnector] connect: ${this.wallet} returned empty addresses array`);\n return undefined;\n }\n const address = isEvmBrowserWallet(this.wallet) ? getInjectiveAddress(firstAddress) : firstAddress;\n\n return {\n address,\n xChainType: this.xChainType,\n };\n }\n\n async disconnect(): Promise<void> {\n if (isEvmBrowserWallet(this.wallet)) {\n const walletStrategy = this.getXService().walletStrategy;\n await walletStrategy.setWallet(this.wallet);\n await walletStrategy.disconnect();\n }\n }\n\n public override get icon(): string | undefined {\n return WALLET_ICONS[this.wallet];\n }\n\n public override get isInstalled(): boolean {\n if (isCosmosBrowserWallet(this.wallet)) {\n return isCosmosWalletInstalled(this.wallet);\n }\n // EVM / other injective wallets: wallet-strategy handles install errors at connect time.\n // Default to true so users can attempt connect — Phase 3 classifier will surface walletNotInstalled if it fails.\n return true;\n }\n}\n","import type { BitcoinXConnector } from './BitcoinXConnector.js';\n\n/** Bitcoin connectors that support BIP-322 message signing (Unisat, Xverse, OKX). */\nexport function hasSignBip322(\n c: BitcoinXConnector,\n): c is BitcoinXConnector & { signBip322Message(msg: string): Promise<string> } {\n return 'signBip322Message' in c && typeof c.signBip322Message === 'function';\n}\n\n/** Bitcoin connectors that support legacy ECDSA message signing. */\nexport function hasSignEcdsa(\n c: BitcoinXConnector,\n): c is BitcoinXConnector & { signEcdsaMessage(msg: string): Promise<string> } {\n return 'signEcdsaMessage' in c && typeof c.signEcdsaMessage === 'function';\n}\n","import { XService } from '@/core/XService.js';\nimport type { XToken } from '@sodax/types';\nimport { NearConnector } from '@hot-labs/near-connect';\nimport { JsonRpcProvider } from 'near-api-js';\nimport { NEAR_DEFAULT_RPC_URL } from '@/constants.js';\n\nexport class NearXService extends XService {\n private static instance: NearXService;\n\n public walletSelector: NearConnector;\n public rpcUrl: string;\n\n /**\n * @param rpcUrl - Used by `getBalance` via `JsonRpcProvider({ url: rpcUrl })`.\n * Does NOT affect `walletSelector` — `@hot-labs/near-connect` only accepts\n * the network preset name (`'mainnet'`/`'testnet'`) and fetches RPC internally.\n * Custom RPC is therefore read-only for balance queries.\n */\n private constructor(rpcUrl: string = NEAR_DEFAULT_RPC_URL) {\n super('NEAR');\n\n this.rpcUrl = rpcUrl;\n this.walletSelector = new NearConnector({\n network: 'mainnet',\n logger: console,\n autoConnect: true,\n excludedWallets: ['okx-wallet'],\n });\n }\n\n /**\n * @param rpcUrl - Re-applied on every call (matches StacksXService semantics).\n * `rpcUrl` only drives `getBalance` via a per-call `JsonRpcProvider`, so it's\n * safe to update at runtime — no persistent chain client to rebuild.\n */\n public static getInstance(rpcUrl?: string): NearXService {\n if (!NearXService.instance) {\n NearXService.instance = new NearXService(rpcUrl);\n } else if (rpcUrl) {\n NearXService.instance.rpcUrl = rpcUrl;\n }\n return NearXService.instance;\n }\n\n override async getBalance(address: string | undefined, xToken: XToken): Promise<bigint> {\n // reference: https://near.github.io/near-api-js/classes/_near-js_providers.json-rpc-provider.JsonRpcProvider.html\n const provider = new JsonRpcProvider({ url: this.rpcUrl });\n\n // get native balance\n if (xToken.symbol === 'NEAR') {\n const account = await provider.viewAccount({ accountId: address ?? '' });\n return BigInt(account.amount);\n }\n\n // Near Fungible Token Standard(https://github.com/near/NEPs/blob/master/neps/nep-0141.md)\n // get balance of the token\n\n const res = await provider.callFunction<number>({\n contractId: xToken.address,\n method: 'ft_balance_of',\n args: { account_id: address },\n });\n return BigInt(res ?? 0);\n }\n}\n","import type { XAccount } from '@/types/index.js';\n\nimport { XConnector } from '@/core/index.js';\nimport type { NearWalletBase } from '@hot-labs/near-connect';\nimport { NearXService } from './NearXService.js';\n\nexport class NearXConnector extends XConnector {\n _wallet: NearWalletBase;\n\n constructor(wallet: NearWalletBase) {\n super('NEAR', wallet.manifest.name, wallet.manifest.id);\n this._wallet = wallet;\n }\n\n getXService(): NearXService {\n return NearXService.getInstance();\n }\n\n async connect(): Promise<XAccount | undefined> {\n const walletSelector = this.getXService().walletSelector;\n const wallet = await walletSelector.connect({ walletId: this._wallet.manifest.id });\n const accounts = await wallet.getAccounts();\n\n if (accounts.length === 0 || accounts[0] === undefined) {\n console.warn(`[NearXConnector] connect: ${this._wallet.manifest.name} returned no accounts`);\n return undefined;\n }\n\n return {\n address: accounts[0].accountId,\n xChainType: this.xChainType,\n };\n }\n\n async disconnect(): Promise<void> {\n const walletSelector = this.getXService().walletSelector;\n await walletSelector.disconnect(this._wallet);\n }\n\n public override get icon(): string {\n return this._wallet.manifest.icon;\n }\n}\n","import { XService } from '@/core/XService.js';\nimport type { XToken } from '@sodax/types';\nimport { fetchCallReadOnlyFunction, Cl, type UIntCV, type ResponseOkCV } from '@stacks/transactions';\nimport { networkFrom, type StacksNetwork, type StacksNetworkName } from '@stacks/network';\n\nexport class StacksXService extends XService {\n private static instance: StacksXService;\n\n public network: StacksNetwork;\n\n private constructor(network?: StacksNetworkName | StacksNetwork) {\n super('STACKS');\n this.network = networkFrom(network || 'mainnet');\n }\n\n public static getInstance(network?: StacksNetworkName | StacksNetwork): StacksXService {\n if (!StacksXService.instance) {\n StacksXService.instance = new StacksXService(network);\n } else if (network) {\n StacksXService.instance.network = networkFrom(network);\n }\n return StacksXService.instance;\n }\n\n override async getBalance(address: string | undefined, xToken: XToken): Promise<bigint> {\n if (!address) return 0n;\n\n // native STX balance\n if (xToken.symbol === 'STX') {\n const url = `${this.network.client.baseUrl}/extended/v1/address/${address}/balances`;\n try {\n const response = await fetch(url);\n if (!response.ok) {\n throw new Error(`Error fetching data: ${response.statusText}`);\n }\n const data = await response.json();\n return BigInt(data.stx.balance);\n } catch (error) {\n console.error('Error fetching STX balance:', error);\n return 0n;\n }\n }\n\n // SIP-010 fungible token balance via read-only contract call\n const parts = xToken.address.split('.');\n const contractAddress = parts[0] ?? '';\n const contractName = parts[1] ?? '';\n try {\n const result = (await fetchCallReadOnlyFunction({\n contractAddress,\n contractName,\n functionName: 'get-balance',\n functionArgs: [Cl.principal(address)],\n network: this.network,\n senderAddress: address,\n })) as ResponseOkCV<UIntCV>;\n return result.value.value as bigint;\n } catch (error) {\n console.error('Error fetching token balance:', error);\n return 0n;\n }\n }\n}\n","import type { XAccount } from '@/types/index.js';\nimport { XConnector } from '@/core/index.js';\nimport type { StacksProvider } from '@stacks/connect';\nimport { request, disconnect } from '@stacks/connect';\n\nexport interface StacksProviderConfig {\n /** The provider ID matching the window path, e.g. 'LeatherProvider' or 'XverseProviders.BitcoinProvider' */\n id: string;\n name: string;\n icon: string;\n installUrl?: string;\n}\n\n/** Resolves a provider from `window` by dot-separated ID, matching @stacks/connect-ui's getProviderFromId */\nfunction getProviderFromId(id: string): StacksProvider | undefined {\n return id.split('.').reduce<unknown>((acc, part) => (acc as Record<string, unknown>)?.[part], window) as\n | StacksProvider\n | undefined;\n}\n\nexport class StacksXConnector extends XConnector {\n private readonly config: StacksProviderConfig;\n\n constructor(config: StacksProviderConfig) {\n super('STACKS', config.name, config.id);\n this.config = config;\n }\n\n async connect(): Promise<XAccount | undefined> {\n const provider = this.getProvider();\n\n if (!provider) {\n // Throw instead of silently navigating to the install URL — callers\n // that bypass `useWalletModal.selectWallet`'s pre-check otherwise\n // see a tab open with no surfaced error. Consumers read\n // `connector.installUrl` to render the install CTA on the caught\n // error.\n throw new Error(`${this.config.name} is not installed. Install the extension and reload the page.`);\n }\n\n const response = await request({ provider }, 'stx_getAddresses');\n // Stacks SDK types don't include `purpose` on AddressEntry, but wallets return it at runtime\n const stxAddress = response.addresses.find(a => (a as unknown as { purpose?: string }).purpose === 'stacks');\n\n if (!stxAddress) {\n console.warn(\n `[StacksXConnector] ${this.config.name}: no address with purpose=\"stacks\" returned from stx_getAddresses`,\n response.addresses,\n );\n return undefined;\n }\n\n return {\n address: stxAddress.address,\n xChainType: this.xChainType,\n };\n }\n\n async disconnect(): Promise<void> {\n disconnect();\n }\n\n public override get icon(): string {\n return this.config.icon;\n }\n\n public override get isInstalled(): boolean {\n if (typeof window === 'undefined') return false;\n return getProviderFromId(this.config.id) !== undefined;\n }\n\n public override get installUrl(): string | undefined {\n return this.config.installUrl;\n }\n\n public getProvider(): StacksProvider | undefined {\n return getProviderFromId(this.config.id);\n }\n}\n","import type { StacksProviderConfig } from './StacksXConnector.js';\n\n// Icons sourced from @stacks/connect DEFAULT_PROVIDERS\n// https://github.com/stx-labs/connect/blob/main/packages/connect/src/providers.ts\nconst LEATHER_ICON =\n 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iMTI4IiBoZWlnaHQ9IjEyOCIgdmlld0JveD0iMCAwIDEyOCAxMjgiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CjxyZWN0IHdpZHRoPSIxMjgiIGhlaWdodD0iMTI4IiByeD0iMjYuODM4NyIgZmlsbD0iIzEyMTAwRiIvPgo8cGF0aCBkPSJNNzQuOTE3MSA1Mi43MTE0QzgyLjQ3NjYgNTEuNTQwOCA5My40MDg3IDQzLjU4MDQgOTMuNDA4NyAzNy4zNzYxQzkzLjQwODcgMzUuNTAzMSA5MS44OTY4IDM0LjIxNTQgODkuNjg3MSAzNC4yMTU0Qzg1LjUwMDQgMzQuMjE1NCA3OC40MDYxIDQwLjUzNjggNzQuOTE3MSA1Mi43MTE0Wk0zOS45MTEgODMuNDk5MUMzMC4wMjU2IDgzLjQ5OTEgMjkuMjExNSA5My4zMzI0IDM5LjA5NjkgOTMuMzMyNEM0My41MTYzIDkzLjMzMjQgNDguODY2MSA5MS41NzY0IDUxLjY1NzMgODguNDE1N0M0Ny41ODY4IDg0LjkwMzggNDQuMjE0MSA4My40OTkxIDM5LjkxMSA4My40OTkxWk0xMDIuODI5IDc5LjI4NDhDMTAzLjQxIDk1Ljc5MDcgOTUuMDM2OSAxMDUuMDM5IDgwLjg0ODQgMTA1LjAzOUM3Mi40NzQ4IDEwNS4wMzkgNjguMjg4MSAxMDEuODc4IDU5LjMzMyA5Ni4wMjQ5QzU0LjY4MSAxMDEuMTc2IDQ1Ljg0MjMgMTA1LjAzOSAzOC41MTU0IDEwNS4wMzlDMTMuMjc4NSAxMDUuMDM5IDE0LjMyNTIgNzIuODQ2MyA0MC4wMjczIDcyLjg0NjNDNDUuMzc3MSA3Mi44NDYzIDQ5LjkxMjggNzQuMjUxMSA1NS43Mjc3IDc3Ljg4TDU5LjU2NTYgNjQuNDE3N0M0My43NDg5IDYwLjA4NjQgMzUuODQwNSA0Ny45MTE4IDQzLjYzMjYgMzAuNDY5M0g1Ni4xOTI5QzQ5LjIxNSA0Mi4wNTg2IDUzLjk4MzIgNTEuNjU3OCA2Mi44MjIgNTIuNzExNEM2Ny41OTAzIDM1LjczNzIgNzcuODI0NiAyMi41MDkgOTEuNDMxNiAyMi41MDlDOTkuMTA3NCAyMi41MDkgMTA1LjE1NSAyNy41NDI4IDEwNS4xNTUgMzYuNjczN0MxMDUuMTU1IDUxLjMwNjYgODYuMDgxOSA2My4yNDcxIDcxLjY2MDcgNjQuNDE3N0w2NS43Mjk1IDg1LjM3MjFDNzIuNDc0OCA5My4yMTUzIDkxLjE5OSAxMDAuODI0IDkxLjE5OSA3OS4yODQ4SDEwMi44MjlaIiBmaWxsPSIjRjVGMUVEIi8+Cjwvc3ZnPgo=';\n\nconst XVERSE_ICON =\n 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI2MDAiIGhlaWdodD0iNjAwIj48ZyBmaWxsPSJub25lIiBmaWxsLXJ1bGU9ImV2ZW5vZGQiPjxwYXRoIGZpbGw9IiMxNzE3MTciIGQ9Ik0wIDBoNjAwdjYwMEgweiIvPjxwYXRoIGZpbGw9IiNGRkYiIGZpbGwtcnVsZT0ibm9uemVybyIgZD0iTTQ0MCA0MzUuNHYtNTFjMC0yLS44LTMuOS0yLjItNS4zTDIyMCAxNjIuMmE3LjYgNy42IDAgMCAwLTUuNC0yLjJoLTUxLjFjLTIuNSAwLTQuNiAyLTQuNiA0LjZ2NDcuM2MwIDIgLjggNCAyLjIgNS40bDc4LjIgNzcuOGE0LjYgNC42IDAgMCAxIDAgNi41bC03OSA3OC43Yy0xIC45LTEuNCAyLTEuNCAzLjJ2NTJjMCAyLjQgMiA0LjUgNC42IDQuNUgyNDljMi42IDAgNC42LTIgNC42LTQuNlY0MDVjMC0xLjIuNS0yLjQgMS40LTMuM2w0Mi40LTQyLjJhNC42IDQuNiAwIDAgMSA2LjQgMGw3OC43IDc4LjRhNy42IDcuNiAwIDAgMCA1LjQgMi4yaDQ3LjVjMi41IDAgNC42LTIgNC42LTQuNloiLz48cGF0aCBmaWxsPSIjRUU3QTMwIiBmaWxsLXJ1bGU9Im5vbnplcm8iIGQ9Ik0zMjUuNiAyMjcuMmg0Mi44YzIuNiAwIDQuNiAyLjEgNC42IDQuNnY0Mi42YzAgNCA1IDYuMSA4IDMuMmw1OC43LTU4LjVjLjgtLjggMS4zLTIgMS4zLTMuMnYtNTEuMmMwLTIuNi0yLTQuNi00LjYtNC42TDM4NCAxNjBjLTEuMiAwLTIuNC41LTMuMyAxLjNsLTU4LjQgNTguMWE0LjYgNC42IDAgMCAwIDMuMiA3LjhaIi8+PC9nPjwvc3ZnPg==';\n\nconst ASIGNA_ICON =\n 'data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSIzMiIgaGVpZ2h0PSIzMiIgZmlsbD0ibm9uZSI+PHBhdGggZmlsbD0iIzAwMDEwMCIgZD0iTTAgMGgzMnYzMkgweiIvPjxwYXRoIGZpbGw9InVybCgjYSkiIGQ9Ik0xNS4xMSA1LjU1YTMgMyAwIDAgMC0xLjgyIDEuM2wtLjA1LjA4LS40My43Mi0uMDcuMTEtLjUuODUtLjA1LjA5LTEuMjkgMi4xOC0uMDQuMDctLjQ3LjgtLjA2LjEtLjQ2Ljc4LS4wNy4xMS0xLjYzIDIuNzYtLjA3LjExLS4zOC42Ni0uMDUuMDgtLjczIDEuMjQtLjM1LjYtLjQuNjctLjA1LjA5TDUuMSAyMC43bC0uMTEuMTgtLjE0LjIzLS4wNy4xMy0uMzMuNTUtLjA0LjA3di4wMWExLjI2IDEuMjYgMCAwIDAtLjE0LjQ3IDEuMzEgMS4zMSAwIDAgMCAxLjI0IDEuNGgxLjVsLjA1LS4wNi4wNC0uMDYuODctMS4yMS4wNS0uMDguNzctMS4wNy4wNS0uMDcuNC0uNTcuMDUtLjA2LjI0LS4zNGExLjUyIDEuNTIgMCAwIDEgMS4zOS0uNjIgMS41IDEuNSAwIDAgMSAuNjQuMiAxLjQ3IDEuNDcgMCAwIDEgLjczIDEuMjcgMS40NCAxLjQ0IDAgMCAxLS4yNy44NGwtLjYzLjg4LS4wNS4wNy0uMzIuNDUtLjA2LjA4LS4wOC4xMi0uMTIuMTYtLjA1LjA4aDIuMTNhMi4zMiAyLjMyIDAgMCAwIDEuNzctLjk2bDEuMTgtMS42My43Ny0xLjA4IDEuMy0xLjhhMS4yNCAxLjI0IDAgMCAxIC41NS0uNDNsLjA4LS4wM2ExLjMgMS4zIDAgMCAxIC4zLS4wNiAxLjI4IDEuMjggMCAwIDEgMS4xNS41NGwuMTEuMmExLjEzIDEuMTMgMCAwIDEgLjEuNDEgMS4xOSAxLjE5IDAgMCAxLS4yMy43N2wtLjAzLjA1LS41Ny44LS43Ljk4LS4yNy4zN2ExLjIyIDEuMjIgMCAwIDAtLjIuNSAxLjA1IDEuMDUgMCAwIDAtLjAyLjIzdi4wNmExLjE3IDEuMTcgMCAwIDAgLjE0LjQzbC4wMi4wNS4wNy4xYTEuNDQgMS40NCAwIDAgMCAuMS4xMWwuMDUuMDYuMDEuMDFhMS44IDEuOCAwIDAgMCAuMTQuMWMwIC4wMi4wMi4wMy4wNC4wM2ExIDEgMCAwIDAgLjA4LjA1bC4wNy4wNGExLjI1IDEuMjUgMCAwIDAgLjUuMWg2LjljLjEgMCAuMi0uMDEuMjktLjAzbC4wNi0uMDJhMS4yNyAxLjI3IDAgMCAwIC4yNy0uMS41Ny41NyAwIDAgMCAuMDctLjAzIDEuMjEgMS4yMSAwIDAgMCAuMjYtLjE5bC4wOC0uMDdhLjkyLjkyIDAgMCAwIC4xNS0uMTkgMS41NSAxLjU1IDAgMCAwIC4wOS0uMTdsLjAyLS4wNWExLjIyIDEuMjIgMCAwIDAgLjA4LS4yNnYtLjA0bC4wMi0uMDh2LS4wOGExLjMyIDEuMzIgMCAwIDAtLjItLjc0bC0xLjYtMi42NC0uMDYtLjEtLjItLjMyLS4zMy0uNTR2LS4wMWwtLjA1LS4wOC0xLjMtMi4xNS0uMDctLjEtLjA0LS4wNi0uOC0xLjMyLS4wNC0uMDctLjItLjM0LS4xLS4xNC0uMS0uMTYtLjUzLS45LS4xMy0uMi0uMDktLjE0LTIuMTctMy41Ny0uMDQtLjA3LS43Mi0xLjE5LS4wNS0uMDctLjQtLjY1YTIuNjUgMi42NSAwIDAgMC0uMy0uNCAyLjk2IDIuOTYgMCAwIDAtLjk3LS43NCAzLjA0IDMuMDQgMCAwIDAtMS4zLS4zYy0uMjUgMC0uNS4wNC0uNzQuMVoiLz48cGF0aCBmaWxsPSJ1cmwoI2IpIiBkPSJNMTkgMTYuM2E1LjQ1IDUuNDUgMCAwIDAtLjgzIDEuNTZsLS4wNC4xNWExLjM2IDEuMzYgMCAwIDEgLjI4LS4xNiAxLjI0IDEuMjQgMCAwIDEgLjM4LS4wOGguMWExLjI4IDEuMjggMCAwIDEgMS4wNS41NGMuMDQuMDYuMDguMTMuMS4yYTEuMjQgMS4yNCAwIDAgMSAuMDkuMjcgMS4xOSAxLjE5IDAgMCAxLS4yLjkxbC0uMDQuMDUtLjU3Ljc5LS43Ljk5LS4yNy4zN2ExLjIzIDEuMjMgMCAwIDAtLjIuNDIgMS4wNiAxLjA2IDAgMCAwLS4wMi4zMXYuMDZhMS4xNyAxLjE3IDAgMCAwIC4xNi40Ny45My45MyAwIDAgMCAuMDcuMSAxLjUgMS41IDAgMCAwIC4xLjEybC4wNS4wNmguMDFhMS45NCAxLjk0IDAgMCAwIC4wOS4wOCAxIDEgMCAwIDAgLjE3LjFsLjA3LjA0YTEuMjUgMS4yNSAwIDAgMCAuNS4xaDYuOWMuMSAwIC4yIDAgLjI4LS4wMmwuMDctLjAyYTEuMzIgMS4zMiAwIDAgMCAuMzQtLjEzbC4xNi0uMS4wMy0uMDNhMS4yOSAxLjI5IDAgMCAwIC4yLS4yIDIuNDMgMi40MyAwIDAgMCAuMTItLjE3Yy4wMy0uMDMuMDUtLjA4LjA3LS4xMmwuMDItLjA1YTEuMjEgMS4yMSAwIDAgMCAuMDktLjN2LS4wOGwuMDEtLjA5YTEuMzIgMS4zMiAwIDAgMC0uMi0uNzNsLTEuNi0yLjY0LS4wNi0uMS0uMi0uMzItLjMzLS41NHYtLjAybC0uMDUtLjA3LTEuMy0yLjE1LS4xMi0uMDctLjA3LS4wNGE0Ljk0IDQuOTQgMCAwIDAtMi40Ni0uNjdjLTEuMDMgMC0xLjc2LjU3LTIuMjYgMS4yWiIvPjxwYXRoIGZpbGw9IiNmZmYiIGQ9Ik0xMi4yOSAyMS4wOGMwIC4yOS0uMDkuNTgtLjI3Ljg0bC0xLjMxIDEuODRIN2wyLjUyLTMuNTNhMS41NCAxLjU0IDAgMCAxIDIuMS0uMzZjLjQzLjI4LjY2Ljc0LjY2IDEuMloiLz48cGF0aCBmaWxsPSIjMDAwIiBkPSJNMTEuMTYgMjEuMjVhLjU2LjU2IDAgMCAxLS41Ny41NS41Ni41NiAwIDAgMS0uNTctLjU2LjU2LjU2IDAgMCAxIC41Ny0uNTUuNTYuNTYgMCAwIDEgLjU3LjU2WiIvPjxkZWZzPjxsaW5lYXJHcmFkaWVudCBpZD0iYSIgeDE9IjE1LjIzIiB4Mj0iMTkuMyIgeTE9IjI1Ljc4IiB5Mj0iNi4xMSIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPjxzdG9wIHN0b3AtY29sb3I9IiM2NTIyRjQiLz48c3RvcCBvZmZzZXQ9Ii41NSIgc3RvcC1jb2xvcj0iIzlCNkJGRiIvPjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iI0E1ODVGRiIvPjwvbGluZWFyR3JhZGllbnQ+PGxpbmVhckdyYWRpZW50IGlkPSJiIiB4MT0iMjIuNTkiIHgyPSIyNC44IiB5MT0iMjQuNzEiIHkyPSIxNS41MyIgZ3JhZGllbnRVbml0cz0idXNlclNwYWNlT25Vc2UiPjxzdG9wIHN0b3AtY29sb3I9IiM0MjFGOEIiLz48c3RvcCBvZmZzZXQ9Ii41NSIgc3RvcC1jb2xvcj0iIzcyMzBGRiIvPjxzdG9wIG9mZnNldD0iMSIgc3RvcC1jb2xvcj0iIzk3NzNGRiIvPjwvbGluZWFyR3JhZGllbnQ+PC9kZWZzPjwvc3ZnPg==';\n\nconst FORDEFI_ICON =\n 'data:image/svg+xml;base64,PHN2ZyB3aWR0aD0iNDIiIGhlaWdodD0iNDIiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CiAgPHBhdGggZmlsbD0iIzEwMTExNCIgZD0iTTAgMGg0MnY0MkgweiIvPgogIDxwYXRoIGQ9Ik0xOS40NyAyNi44OUg1djMuNTdhNC41NyA0LjU3IDAgMCAwIDQuNTggNC41N2g1LjgzbDQuMDYtOC4xNFoiIGZpbGw9IiM3OTk0RkYiLz4KICA8cGF0aCBkPSJNNSAxNy40aDI3LjU4bC0zLjIgNi43OEg1VjE3LjRaIiBmaWxsPSIjNDg2REZGIi8+CiAgPHBhdGggZD0iTTE0LjY3IDdINXY3LjY4aDMzVjdoLTkuNjd2NS43NGgtMlY3aC05LjY3djUuNzRoLTEuOTlWN1oiIGZpbGw9IiM1Q0QxRkEiLz4KPC9zdmc+Cg==';\n\nexport const STACKS_PROVIDERS: StacksProviderConfig[] = [\n {\n id: 'LeatherProvider',\n name: 'Leather',\n icon: LEATHER_ICON,\n installUrl: 'https://chrome.google.com/webstore/detail/hiro-wallet/ldinpeekobnhjjdofggfgjlcehhmanlj',\n },\n {\n id: 'XverseProviders.BitcoinProvider',\n name: 'Xverse Wallet',\n icon: XVERSE_ICON,\n installUrl: 'https://chrome.google.com/webstore/detail/xverse-wallet/idnnbdplmphpflfnlkomgpfbpcgelopg',\n },\n {\n id: 'AsignaProvider',\n name: 'Asigna Multisig',\n icon: ASIGNA_ICON,\n installUrl: 'https://stx.asigna.io/',\n },\n {\n id: 'FordefiProviders.UtxoProvider',\n name: 'Fordefi',\n icon: FORDEFI_ICON,\n installUrl: 'https://chromewebstore.google.com/detail/fordefi/hcmehenccjdmfbojapcbcofkgdpbnlle',\n },\n];\n","import { type ChainType, ChainKeys, ChainTypeArr, detectBitcoinAddressType } from '@sodax/types';\nimport {\n IconWalletProvider,\n InjectiveWalletProvider,\n StellarWalletProvider,\n NearWalletProvider,\n StacksWalletProvider,\n} from '@sodax/wallet-sdk-core';\nimport { Wallet } from '@injectivelabs/wallet-base';\nimport { getEthereumAddress } from '@injectivelabs/sdk-ts';\n\nimport { XConnector, type XService } from './core/index.js';\nimport type { IWalletProvider, XConnection } from './types/index.js';\nimport type { IXConnector } from './types/interfaces.js';\nimport type { SodaxWalletConfig } from './types/config.js';\nimport type { ChainActions, ChainActionsRegistry } from './types/chainActions.js';\nimport { getEntryDefaults, getRpcUrl } from './utils/walletRpcConfig.js';\n\nimport { EvmXService } from './xchains/evm/index.js';\nimport { SolanaXService } from './xchains/solana/SolanaXService.js';\nimport { SuiXService } from './xchains/sui/index.js';\nimport { StellarXService, StellarWalletsKitXConnector } from './xchains/stellar/index.js';\nimport type { StellarWalletType } from './xchains/stellar/StellarWalletsKitXConnector.js';\nimport { IconXService, CHAIN_INFO, SupportedChainId } from './xchains/icon/index.js';\nimport { IconHanaXConnector } from './xchains/icon/IconHanaXConnector.js';\nimport { InjectiveXConnector, InjectiveXService } from './xchains/injective/index.js';\nimport { BitcoinXService } from './xchains/bitcoin/index.js';\nimport { UnisatXConnector } from './xchains/bitcoin/UnisatXConnector.js';\nimport { XverseXConnector } from './xchains/bitcoin/XverseXConnector.js';\nimport { OKXXConnector } from './xchains/bitcoin/OKXXConnector.js';\nimport { BitcoinXConnector } from './xchains/bitcoin/BitcoinXConnector.js';\nimport { hasSignBip322, hasSignEcdsa } from './xchains/bitcoin/bitcoinSignGuards.js';\nimport { NearXService } from './xchains/near/NearXService.js';\nimport { NearXConnector } from './xchains/near/NearXConnector.js';\nimport { StacksXService, StacksXConnector, STACKS_PROVIDERS } from './xchains/stacks/index.js';\n\n// ─── Types ──────────────────────────────────────────────────────────────────\n\n/** Store accessor — avoids circular dependency with useXWalletStore */\nexport type StoreAccessor = () => {\n xConnections: Partial<Record<ChainType, XConnection>>;\n xConnectorsByChain: Partial<Record<ChainType, XConnector[]>>;\n xServices: Partial<Record<ChainType, XService>>;\n setXConnectors: (xChainType: ChainType, connectors: XConnector[]) => void;\n unsetXConnection: (xChainType: ChainType) => void;\n setWalletProvider: (xChainType: ChainType, provider: IWalletProvider | undefined) => void;\n /**\n * User-supplied `SodaxWalletConfig` (per-chain-type slots, each with adapter\n * settings + nested chains map). Source of `defaults` forwarded to core\n * wallet provider constructors for non-provider chains.\n */\n walletConfig: SodaxWalletConfig | undefined;\n};\n\nexport type ChainServiceFactory<S extends XService = XService> = {\n /** Create or get the XService singleton for this chain. */\n createService(walletConfig?: SodaxWalletConfig): S;\n /** Human-readable chain name for display in modal UIs. */\n displayName: string;\n /** Optional icon URL for the chain. Consumers can override when rendering. */\n iconUrl?: string;\n /**\n * Static connectors known at build time. Ignored for provider-managed chains.\n * `walletConfig` is forwarded so chains whose connectors construct wallet\n * providers eagerly (e.g. Bitcoin) can read per-chain-id `defaults` at\n * registration time.\n */\n defaultConnectors(walletConfig?: SodaxWalletConfig): XConnector[];\n /** true = needs React provider (EVM/Solana/Sui), false = browser extension APIs. */\n providerManaged: boolean;\n /** ChainActions for non-provider chains. If omitted, uses createDefaultActions(). */\n createActions?(service: S, getStore: StoreAccessor): ChainActions;\n /** Wallet provider for non-provider chains. Called on setXConnection(). */\n createWalletProvider?(service: S, getStore: StoreAccessor): IWalletProvider | undefined;\n /**\n * Async connector discovery for chains whose available wallets can only be detected at runtime\n * (e.g. browser extension scan, manifest loading). Runs once after init, updates store.xConnectorsByChain when done.\n * Use when wallet detection requires async operations — if connectors are known statically, use defaultConnectors() instead.\n *\n * Example: Stellar scans for installed browser wallets via walletsKit.getSupportedWallets(),\n * NEAR loads wallet manifest via walletSelector.whenManifestLoaded.\n */\n discoverConnectors?(service: S, getStore: StoreAccessor): Promise<void>;\n};\n\n/**\n * Define a chain service factory. Infers `S` from `createService` so all callbacks\n * (createActions, createWalletProvider, discoverConnectors) get the concrete service type,\n * then erases to the base ChainServiceFactory for storage in the registry.\n */\nfunction defineChain<S extends XService>(factory: ChainServiceFactory<S>): ChainServiceFactory {\n return factory;\n}\n\nexport type ChainServicesResult = {\n xServices: Partial<Record<ChainType, XService>>;\n xConnectorsByChain: Partial<Record<ChainType, IXConnector[]>>;\n enabledChains: ChainType[];\n chainActions: ChainActionsRegistry;\n};\n\n// ─── Connector helpers ─────────────────────────────────────────────────────\n\n/**\n * Validate that consumer-supplied connectors (typed against the public\n * `IXConnector` interface) are actual `XConnector` instances. Required at the\n * connectors override boundary because the SDK stores `XConnector[]` internally\n * — `getXConnectorById` and chain-specific subclass methods rely on the\n * abstract class default behavior.\n */\nfunction narrowConnectors(items: readonly IXConnector[], chainType: ChainType): XConnector[] {\n return items.filter((item): item is XConnector => {\n if (!(item instanceof XConnector)) {\n console.warn(\n `[chainRegistry] ${chainType} connector \"${item.id}\" must extend XConnector — skipping. Implement the abstract XConnector class instead of raw IXConnector for full SDK support.`,\n );\n return false;\n }\n return true;\n });\n}\n\n/** Read `connectors` override from the matching chain-type slot, if any. */\nfunction readConnectorsOverride(chainType: ChainType, walletConfig: SodaxWalletConfig | undefined): readonly IXConnector[] | undefined {\n return walletConfig?.[chainType]?.connectors;\n}\n\n/** Returns `true` if the chain-type slot is present in `walletConfig`. */\nfunction hasChainOfType(chainType: ChainType, walletConfig: SodaxWalletConfig): boolean {\n return walletConfig[chainType] !== undefined;\n}\n\n// ─── Default Actions Helper ─────────────────────────────────────────────────\n\nconst createDefaultActions = (chainType: ChainType, service: XService, getStore: StoreAccessor): ChainActions => ({\n connect: async (xConnectorId: string) => {\n const connector = service.getXConnectorById(xConnectorId);\n return connector?.connect();\n },\n disconnect: async () => {\n const store = getStore();\n const connectorId = store.xConnections[chainType]?.xConnectorId;\n const connector = connectorId ? service.getXConnectorById(connectorId) : undefined;\n // Clear store even if wallet.disconnect() throws — UI must not get stuck \"connected\".\n try {\n await connector?.disconnect();\n } finally {\n store.unsetXConnection(chainType);\n }\n },\n getConnectors: () => getStore().xConnectorsByChain[chainType] ?? [],\n getConnection: () => getStore().xConnections[chainType],\n});\n\n// ─── Chain Registry ──────────────────────────────────────────────────────────\n\nexport const chainRegistry: Record<string, ChainServiceFactory> = {\n EVM: defineChain({\n createService: () => EvmXService.getInstance(),\n displayName: 'EVM',\n defaultConnectors: () => [],\n providerManaged: true,\n }),\n SUI: defineChain({\n createService: () => SuiXService.getInstance(),\n displayName: 'Sui',\n defaultConnectors: () => [],\n providerManaged: true,\n }),\n SOLANA: defineChain({\n createService: () => SolanaXService.getInstance(),\n displayName: 'Solana',\n defaultConnectors: () => [],\n providerManaged: true,\n }),\n BITCOIN: defineChain({\n createService: walletConfig =>\n BitcoinXService.getInstance(getRpcUrl(walletConfig?.BITCOIN?.chains?.[ChainKeys.BITCOIN_MAINNET])),\n displayName: 'Bitcoin',\n defaultConnectors: (walletConfig?: SodaxWalletConfig) => {\n const defaults = getEntryDefaults<typeof ChainKeys.BITCOIN_MAINNET>(\n walletConfig?.BITCOIN?.chains?.[ChainKeys.BITCOIN_MAINNET],\n );\n return [new UnisatXConnector(defaults), new XverseXConnector(defaults), new OKXXConnector(defaults)];\n },\n providerManaged: false,\n createActions: (service, getStore) => ({\n ...createDefaultActions('BITCOIN', service, getStore),\n signMessage: async (message: string) => {\n const store = getStore();\n const connection = store.xConnections.BITCOIN;\n const connector = connection?.xConnectorId ? service.getXConnectorById(connection.xConnectorId) : undefined;\n if (!(connector instanceof BitcoinXConnector)) {\n throw new Error('Bitcoin wallet not connected');\n }\n const address = connection?.xAccount.address;\n if (!address) throw new Error('Bitcoin address not found');\n const addressType = detectBitcoinAddressType(address);\n\n switch (addressType) {\n case 'P2WPKH':\n case 'P2TR': {\n if (!hasSignBip322(connector)) {\n throw new Error(`${connector.id} does not support BIP-322 signing`);\n }\n return connector.signBip322Message(message);\n }\n case 'P2SH':\n case 'P2PKH': {\n if (!hasSignEcdsa(connector)) {\n throw new Error(`${connector.id} does not support ECDSA signing`);\n }\n return connector.signEcdsaMessage(message);\n }\n default: {\n const _exhaustiveCheck: never = addressType;\n throw new Error(`Unhandled Bitcoin address type: ${_exhaustiveCheck}`);\n }\n }\n },\n }),\n createWalletProvider: (service, getStore) => {\n const store = getStore();\n const connection = store.xConnections.BITCOIN;\n if (!connection?.xConnectorId) return undefined;\n const connector = service.getXConnectorById(connection.xConnectorId);\n if (!(connector instanceof BitcoinXConnector)) return undefined;\n return connector.recreateWalletProvider(connection.xAccount);\n },\n }),\n INJECTIVE: defineChain({\n createService: walletConfig =>\n InjectiveXService.getInstance(walletConfig?.INJECTIVE?.chains?.[ChainKeys.INJECTIVE_MAINNET]),\n displayName: 'Injective',\n defaultConnectors: () => [\n new InjectiveXConnector('MetaMask', Wallet.Metamask),\n new InjectiveXConnector('Keplr', Wallet.Keplr),\n new InjectiveXConnector('Leap', Wallet.Leap),\n ],\n providerManaged: false,\n createActions: (service, getStore) => ({\n ...createDefaultActions('INJECTIVE', service, getStore),\n signMessage: async (message: string) => {\n const store = getStore();\n const address = store.xConnections.INJECTIVE?.xAccount.address;\n if (!address) throw new Error('Injective address not found');\n\n const ethereumAddress = getEthereumAddress(address);\n const walletStrategy = service.walletStrategy;\n const res = await walletStrategy.signArbitrary(\n walletStrategy.getWallet() === Wallet.Metamask ? ethereumAddress : address,\n message,\n );\n if (!res) throw new Error('Injective signature not found');\n return res;\n },\n }),\n createWalletProvider: (service, getStore) => {\n if (!service) return undefined;\n const defaults = getEntryDefaults<typeof ChainKeys.INJECTIVE_MAINNET>(\n getStore().walletConfig?.INJECTIVE?.chains?.[ChainKeys.INJECTIVE_MAINNET],\n );\n return new InjectiveWalletProvider({ msgBroadcaster: service.msgBroadcaster, defaults });\n },\n }),\n STELLAR: defineChain({\n createService: walletConfig => {\n const stellarRpc = walletConfig?.STELLAR?.chains?.[ChainKeys.STELLAR_MAINNET];\n return StellarXService.getInstance(stellarRpc?.horizonRpcUrl, stellarRpc?.sorobanRpcUrl);\n },\n displayName: 'Stellar',\n defaultConnectors: () => [],\n providerManaged: false,\n discoverConnectors: async (service, getStore) => {\n // Hana Stellar injects window.hanaWallet.stellar lazily (sometimes after init).\n // The kit has no event API, so poll a few times with backoff so the connector\n // list catches up without forcing a refresh. Stop early once the id set stays\n // stable across consecutive iterations.\n const STELLAR_DISCOVER_DELAYS_MS = [0, 100, 500] as const;\n let lastIds = '';\n for (const delay of STELLAR_DISCOVER_DELAYS_MS) {\n if (delay) await new Promise(r => setTimeout(r, delay));\n const wallets = await service.walletsKit.getSupportedWallets();\n const connectors = wallets\n .filter((w: StellarWalletType) => w.isAvailable)\n .map((w: StellarWalletType) => new StellarWalletsKitXConnector(w));\n const ids = connectors\n .map(c => c.id)\n .sort()\n .join(',');\n if (ids === lastIds) break; // list stable — no new wallet inject\n lastIds = ids;\n service.setXConnectors(connectors);\n getStore().setXConnectors('STELLAR', connectors);\n }\n },\n createActions: (service, getStore) => ({\n ...createDefaultActions('STELLAR', service, getStore),\n signMessage: async (message: string) => {\n const res = await service.walletsKit.signMessage(message);\n return res.signedMessage;\n },\n }),\n createWalletProvider: (service, getStore) => {\n if (!service?.walletsKit) return undefined;\n const defaults = getEntryDefaults<typeof ChainKeys.STELLAR_MAINNET>(\n getStore().walletConfig?.STELLAR?.chains?.[ChainKeys.STELLAR_MAINNET],\n );\n return new StellarWalletProvider({\n type: 'BROWSER_EXTENSION',\n walletsKit: service.walletsKit,\n network: 'PUBLIC',\n defaults,\n });\n },\n }),\n // ICON: signMessage not implemented — Hana wallet does not expose a signing API.\n // connect/disconnect use createDefaultActions (no createActions override needed).\n ICON: defineChain({\n createService: walletConfig =>\n IconXService.getInstance(getRpcUrl(walletConfig?.ICON?.chains?.[ChainKeys.ICON_MAINNET])),\n displayName: 'ICON',\n defaultConnectors: () => [new IconHanaXConnector()],\n providerManaged: false,\n createWalletProvider: (_service, getStore) => {\n const store = getStore();\n const address = store.xConnections.ICON?.xAccount.address;\n if (!address) return undefined;\n const chainInfo = CHAIN_INFO[SupportedChainId.MAINNET];\n if (!chainInfo) throw new Error('ICON mainnet chain info not found');\n const defaults = getEntryDefaults<typeof ChainKeys.ICON_MAINNET>(\n store.walletConfig?.ICON?.chains?.[ChainKeys.ICON_MAINNET],\n );\n return new IconWalletProvider({\n walletAddress: address as `hx${string}`,\n rpcUrl: chainInfo.APIEndpoint as `http${string}`,\n defaults,\n });\n },\n }),\n NEAR: defineChain({\n createService: walletConfig =>\n NearXService.getInstance(getRpcUrl(walletConfig?.NEAR?.chains?.[ChainKeys.NEAR_MAINNET])),\n displayName: 'NEAR',\n defaultConnectors: () => [],\n providerManaged: false,\n discoverConnectors: async (service, getStore) => {\n await service.walletSelector.whenManifestLoaded;\n const connectors = service.walletSelector.availableWallets.map(w => new NearXConnector(w));\n service.setXConnectors(connectors);\n getStore().setXConnectors('NEAR', connectors);\n },\n createActions: (service, getStore) => ({\n ...createDefaultActions('NEAR', service, getStore),\n disconnect: async () => {\n try {\n service.walletSelector.disconnect();\n } finally {\n getStore().unsetXConnection('NEAR');\n }\n },\n }),\n createWalletProvider: (service, getStore) => {\n if (!service?.walletSelector) return undefined;\n const defaults = getEntryDefaults<typeof ChainKeys.NEAR_MAINNET>(\n getStore().walletConfig?.NEAR?.chains?.[ChainKeys.NEAR_MAINNET],\n );\n return new NearWalletProvider({ wallet: service.walletSelector, defaults });\n },\n }),\n STACKS: defineChain({\n createService: walletConfig => StacksXService.getInstance(walletConfig?.STACKS?.chains?.[ChainKeys.STACKS_MAINNET]),\n displayName: 'Stacks',\n defaultConnectors: () => STACKS_PROVIDERS.map(c => new StacksXConnector(c)),\n providerManaged: false,\n createWalletProvider: (service, getStore) => {\n const store = getStore();\n const connection = store.xConnections.STACKS;\n const address = connection?.xAccount.address;\n if (!address) return undefined;\n const connector = connection?.xConnectorId ? service.getXConnectorById(connection.xConnectorId) : undefined;\n const provider = connector instanceof StacksXConnector ? connector.getProvider() : undefined;\n const defaults = getEntryDefaults<typeof ChainKeys.STACKS_MAINNET>(\n store.walletConfig?.STACKS?.chains?.[ChainKeys.STACKS_MAINNET],\n );\n return new StacksWalletProvider({ address, provider, defaults });\n },\n }),\n};\n\n// ─── createChainServices ─────────────────────────────────────────────────────\n\nexport const createChainServices = (\n walletConfig: SodaxWalletConfig,\n getStore: StoreAccessor,\n): ChainServicesResult => {\n const xServices: Partial<Record<ChainType, XService>> = {};\n const xConnectorsByChain: Partial<Record<ChainType, IXConnector[]>> = {};\n const enabledChains: ChainType[] = [];\n const chainActions: ChainActionsRegistry = {};\n\n for (const chainType of ChainTypeArr) {\n if (!hasChainOfType(chainType, walletConfig)) continue;\n const factory = chainRegistry[chainType];\n if (!factory) continue;\n\n const service = factory.createService(walletConfig);\n xServices[chainType] = service;\n enabledChains.push(chainType);\n\n if (!factory.providerManaged) {\n const override = readConnectorsOverride(chainType, walletConfig);\n const connectors = override\n ? narrowConnectors(override, chainType)\n : factory.defaultConnectors(walletConfig);\n service.setXConnectors(connectors);\n xConnectorsByChain[chainType] = connectors;\n\n // Register ChainActions for non-provider chains\n chainActions[chainType] = factory.createActions\n ? factory.createActions(service, getStore)\n : createDefaultActions(chainType, service, getStore);\n\n // Async connector discovery (Stellar, NEAR) — updates store when done\n if (factory.discoverConnectors) {\n factory.discoverConnectors(service, getStore).catch(err => {\n console.warn(`[wallet-sdk-react] discoverConnectors failed for ${chainType}:`, err);\n });\n }\n }\n }\n\n return { xServices, xConnectorsByChain, enabledChains, chainActions };\n};\n","import { ChainTypeArr, type ChainType, type GetWalletProviderType } from '@sodax/types';\nimport { create } from 'zustand';\nimport { createJSONStorage, persist, devtools } from 'zustand/middleware';\nimport { immer } from 'zustand/middleware/immer';\nimport type { XService, XConnector } from './core/index.js';\nimport type { XConnection, IWalletProvider } from './types/index.js';\nimport type { ChainActions } from './types/chainActions.js';\nimport type { SodaxWalletConfig } from './types/config.js';\nimport { chainRegistry, createChainServices } from './chainRegistry.js';\n\n/** Empty slot in `walletProviders` is normal before a wallet is connected. */\nexport type GetWalletProviderReturnType<K extends ChainType | undefined> = K extends ChainType\n ? GetWalletProviderType<K> | undefined\n : undefined;\n\n// ─── Store ───────────────────────────────────────────────────────────────────\n\ntype XWalletStore = {\n xServices: Partial<Record<ChainType, XService>>;\n /** Active wallet connections. Persisted to localStorage. */\n xConnections: Partial<Record<ChainType, XConnection>>;\n xConnectorsByChain: Partial<Record<ChainType, XConnector[]>>;\n enabledChains: ChainType[];\n chainActions: Partial<Record<ChainType, ChainActions>>;\n /** Wallet providers from wallet-sdk-core. Read by useWalletProvider() hook. */\n walletProviders: Partial<Record<ChainType, IWalletProvider>>;\n /**\n * User-supplied `SodaxWalletConfig` (per-chain-type slots, each with adapter\n * settings + nested chains map). Source of `defaults` for non-provider chain\n * `createWalletProvider` callbacks. Provider-managed chains (EVM/Solana/Sui)\n * read from `WalletConfigContext` directly via Hydrators.\n */\n walletConfig: SodaxWalletConfig | undefined;\n /** Persisted user-disconnect intent. Hydrators suppress writes when set so ghost auto-reconnects don't override. Cleared by `<Chain>Actions.connect`. */\n userDisconnected: Partial<Record<ChainType, boolean>>;\n\n setXConnection: (xChainType: ChainType, xConnection: XConnection) => void;\n unsetXConnection: (xChainType: ChainType) => void;\n setXConnectors: (xChainType: ChainType, connectors: XConnector[]) => void;\n registerChainActions: (xChainType: ChainType, actions: ChainActions) => void;\n getWalletProvider: <K extends ChainType | undefined>(xChainType: K) => GetWalletProviderReturnType<K>;\n setWalletProvider: (xChainType: ChainType, provider: IWalletProvider | undefined) => void;\n /** Initialize all chain services from config. Called once by useInitChainServices. */\n initChainServices: (walletConfig: SodaxWalletConfig) => void;\n /** Remove persisted connections for chains not in enabledChains. Called after persist hydration. */\n cleanupDisabledConnections: () => void;\n markUserDisconnected: (xChainType: ChainType) => void;\n clearUserDisconnected: (xChainType: ChainType) => void;\n};\n\nexport const useXWalletStore = create<XWalletStore>()(\n devtools(\n persist(\n immer((set, get) => ({\n xServices: {},\n xConnections: {},\n xConnectorsByChain: {},\n enabledChains: [],\n chainActions: {},\n walletProviders: {},\n walletConfig: undefined,\n userDisconnected: {},\n\n setXConnection: (xChainType: ChainType, xConnection: XConnection) => {\n set(state => {\n state.xConnections[xChainType] = xConnection;\n });\n // Side-effect: recreate wallet provider for non-provider chains (Bitcoin, ICON, etc.)\n const factory = chainRegistry[xChainType]?.createWalletProvider;\n if (factory) {\n const service = get().xServices[xChainType];\n if (service) {\n const provider = factory(service, () => get());\n get().setWalletProvider(xChainType, provider);\n }\n }\n },\n\n unsetXConnection: (xChainType: ChainType) => {\n set(state => {\n delete state.xConnections[xChainType];\n delete state.walletProviders[xChainType];\n });\n },\n\n setXConnectors: (xChainType: ChainType, connectors: XConnector[]) => {\n set(state => {\n state.xConnectorsByChain[xChainType] = connectors;\n });\n },\n\n registerChainActions: (xChainType: ChainType, actions: ChainActions) => {\n set(state => {\n state.chainActions[xChainType] = actions;\n });\n },\n\n setWalletProvider: (xChainType: ChainType, provider: IWalletProvider | undefined) => {\n set(state => {\n if (provider) {\n state.walletProviders[xChainType] = provider;\n } else {\n delete state.walletProviders[xChainType];\n }\n });\n },\n\n getWalletProvider: <K extends ChainType | undefined>(xChainType: K): GetWalletProviderReturnType<K> => {\n if (!xChainType) return undefined as GetWalletProviderReturnType<K>;\n return get().walletProviders[xChainType] as GetWalletProviderReturnType<K>;\n },\n\n initChainServices: (walletConfig: SodaxWalletConfig) => {\n const result = createChainServices(walletConfig, () => get());\n set(state => {\n state.xServices = result.xServices;\n state.enabledChains = result.enabledChains;\n // Merge connectors and chainActions — provider-managed chains (EVM/Solana/Sui)\n // hydrate these via their Hydrator/Actions components, which may run before\n // or after this effect due to React's bottom-up effect ordering.\n Object.assign(state.xConnectorsByChain, result.xConnectorsByChain);\n Object.assign(state.chainActions, result.chainActions);\n });\n // Set `walletConfig` outside the immer recipe — the deep-readonly viem\n // types inside `EvmWalletDefaults.transport.rpcSchema` clash with immer's\n // WritableDraft. We never mutate this field, so a plain replace is correct.\n set({ walletConfig });\n },\n\n cleanupDisabledConnections: () => {\n set(state => {\n for (const chainType of ChainTypeArr) {\n if (state.xConnections[chainType] && !state.enabledChains.includes(chainType)) {\n delete state.xConnections[chainType];\n delete state.walletProviders[chainType];\n }\n }\n });\n },\n\n markUserDisconnected: (xChainType: ChainType) => {\n set(state => {\n state.userDisconnected[xChainType] = true;\n });\n },\n\n clearUserDisconnected: (xChainType: ChainType) => {\n set(state => {\n delete state.userDisconnected[xChainType];\n });\n },\n })),\n {\n // key kept as 'xwagmi-store' for backward compat — existing users won't lose persisted connections on upgrade\n name: 'xwagmi-store',\n storage: createJSONStorage(() => localStorage),\n partialize: state => ({\n xConnections: state.xConnections,\n userDisconnected: state.userDisconnected,\n }),\n },\n ),\n { name: 'xwagmi-store' },\n ),\n);\n","import type { ChainType } from '@sodax/types';\nimport { create } from 'zustand';\nimport { devtools } from 'zustand/middleware';\nimport { immer } from 'zustand/middleware/immer';\nimport type { XConnector } from './core/index.js';\nimport type { XAccount } from './types/index.js';\n\n/**\n * Discriminated union for the wallet-modal flow state machine.\n * See `useWalletModal()` for transitions and consumer usage.\n */\nexport type WalletModalState =\n | { kind: 'closed' }\n | { kind: 'chainSelect' }\n | { kind: 'walletSelect'; chainType: ChainType }\n | { kind: 'connecting'; chainType: ChainType; connector: XConnector }\n | { kind: 'success'; chainType: ChainType; connector: XConnector; account: XAccount }\n | { kind: 'error'; chainType: ChainType; connector: XConnector; error: Error };\n\ntype WalletModalStore = {\n walletModal: WalletModalState;\n\n open: () => void;\n close: () => void;\n /**\n * Smart back: walletSelect → chainSelect; connecting/error → walletSelect\n * (preserve chainType so the user can pick another wallet or retry);\n * success → closed; closed/chainSelect → no-op.\n */\n back: () => void;\n selectChain: (chainType: ChainType) => void;\n setConnecting: (chainType: ChainType, connector: XConnector) => void;\n setSuccess: (chainType: ChainType, connector: XConnector, account: XAccount) => void;\n setError: (chainType: ChainType, connector: XConnector, error: Error) => void;\n};\n\n/**\n * Ephemeral UI store for the wallet-modal flow. Kept separate from\n * `useXWalletStore` because modal lifecycle is per-session UI state — it\n * has no business being co-located with persistent connection data and\n * doesn't share the persist/hydration concerns.\n *\n * Direct store access is intentionally not part of the package's public\n * surface; consumers go through `useWalletModal()`.\n */\nexport const useWalletModalStore = create<WalletModalStore>()(\n devtools(\n immer(set => ({\n walletModal: { kind: 'closed' },\n\n open: () => {\n set(state => {\n state.walletModal = { kind: 'chainSelect' };\n });\n },\n\n close: () => {\n set(state => {\n state.walletModal = { kind: 'closed' };\n });\n },\n\n back: () => {\n set(state => {\n const current = state.walletModal;\n switch (current.kind) {\n case 'walletSelect':\n state.walletModal = { kind: 'chainSelect' };\n return;\n case 'connecting':\n case 'error':\n state.walletModal = { kind: 'walletSelect', chainType: current.chainType };\n return;\n case 'success':\n state.walletModal = { kind: 'closed' };\n return;\n // 'closed' and 'chainSelect' have nowhere to go back to.\n }\n });\n },\n\n selectChain: (chainType: ChainType) => {\n set(state => {\n state.walletModal = { kind: 'walletSelect', chainType };\n });\n },\n\n setConnecting: (chainType: ChainType, connector: XConnector) => {\n set(state => {\n state.walletModal = { kind: 'connecting', chainType, connector };\n });\n },\n\n setSuccess: (chainType: ChainType, connector: XConnector, account: XAccount) => {\n set(state => {\n state.walletModal = { kind: 'success', chainType, connector, account };\n });\n },\n\n setError: (chainType: ChainType, connector: XConnector, error: Error) => {\n set(state => {\n state.walletModal = { kind: 'error', chainType, connector, error };\n });\n },\n })),\n { name: 'wallet-modal-store' },\n ),\n);\n","import type { ChainType } from '@sodax/types';\nimport type { XService } from '@/core/index.js';\nimport { useXWalletStore } from '@/useXWalletStore.js';\n\nexport type UseXServiceOptions = {\n xChainType?: ChainType;\n};\n\n/**\n * Returns the chain-specific `XService` instance for advanced reads — balance lookups\n * (`xService.getBalance(address, xToken)`), connector enumeration, or chain-specific\n * methods on concrete subclasses.\n *\n * Most consumers don't need this — `useWalletProvider` is the higher-level bridge to\n * `@sodax/sdk`, and `useXConnectors` returns the connector list directly. Reach for\n * `useXService` only when you need the service object itself (e.g. passing it to\n * `useXBalances` from `@sodax/dapp-kit`).\n *\n * Returns `undefined` when `xChainType` is omitted or the chain isn't enabled.\n */\nexport function useXService({ xChainType }: UseXServiceOptions = {}): XService | undefined {\n const xService = useXWalletStore(state => (xChainType ? state.xServices[xChainType] : undefined));\n return xService;\n}\n","import { createContext, useContext } from 'react';\nimport type { ChainType } from '@sodax/types';\nimport type { SodaxWalletConfig } from '@/types/config.js';\n\n/**\n * Config-level context — answers \"what did the consumer configure?\" (before service init).\n * For service-level queries (is a chain's XService initialized?), use `state.enabledChains` from useXWalletStore.\n * Both sources agree in practice since they're populated from the same config at the same time.\n */\nconst WalletConfigContext = createContext<SodaxWalletConfig | null>(null);\n\nexport const WalletConfigProvider = WalletConfigContext.Provider;\n\nexport function useWalletConfig(): SodaxWalletConfig {\n const config = useContext(WalletConfigContext);\n if (!config) {\n throw new Error('useWalletConfig must be used within SodaxWalletProvider');\n }\n return config;\n}\n\n/** A chain type is \"enabled\" only when its slot is present in SodaxWalletConfig. */\nexport function useIsChainEnabled(chainType: ChainType): boolean {\n const config = useWalletConfig();\n return config[chainType] !== undefined;\n}\n\n/** See {@link useIsChainEnabled} for the \"enabled\" semantic. */\nexport function useEnabledChainTypes(): ChainType[] {\n const config = useWalletConfig();\n return (Object.keys(config) as ChainType[]).filter(t => config[t] !== undefined);\n}\n","import { useMemo } from 'react';\nimport { BitcoinXConnector } from './BitcoinXConnector.js';\nimport { useXService } from '@/hooks/index.js';\n\n/**\n * Hook to return available Bitcoin wallet connectors from the globally registered xService.\n */\nexport function useBitcoinXConnectors(): BitcoinXConnector[] {\n const xService = useXService({ xChainType: 'BITCOIN' });\n\n return useMemo(() => {\n const connectors = xService?.getXConnectors() ?? [];\n return connectors.filter((c): c is BitcoinXConnector => c instanceof BitcoinXConnector);\n }, [xService]);\n}\n"]}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
import { b as XService, c as XConnector, X as XAccount } from '../../XConnector-B9YQTVJ4.js';
|
|
2
|
+
import { XToken, IBitcoinWalletProvider, BtcWalletAddressType } from '@sodax/types';
|
|
3
|
+
export { BtcWalletAddressType } from '@sodax/types';
|
|
4
|
+
import { BitcoinWalletDefaults } from '@sodax/wallet-sdk-core';
|
|
5
|
+
import { AddressPurpose } from 'sats-connect';
|
|
6
|
+
|
|
7
|
+
declare class BitcoinXService extends XService {
|
|
8
|
+
private static instance;
|
|
9
|
+
private rpcUrl;
|
|
10
|
+
private constructor();
|
|
11
|
+
static getInstance(rpcUrl?: string): BitcoinXService;
|
|
12
|
+
getBalance(address: string | undefined, xToken: XToken): Promise<bigint>;
|
|
13
|
+
}
|
|
14
|
+
|
|
15
|
+
/**
|
|
16
|
+
* Abstract base class for Bitcoin wallet connectors.
|
|
17
|
+
* Subclasses implement wallet-specific connection logic (Unisat, Xverse, OKX).
|
|
18
|
+
*
|
|
19
|
+
* `defaults` carries per-call overrides forwarded to the wallet provider built
|
|
20
|
+
* by each subclass. Currently honored field: `defaultFinalize` — applied to
|
|
21
|
+
* `signTransaction` when the caller omits the `finalize` argument.
|
|
22
|
+
*/
|
|
23
|
+
declare abstract class BitcoinXConnector extends XConnector {
|
|
24
|
+
protected readonly defaults: BitcoinWalletDefaults | undefined;
|
|
25
|
+
constructor(name: string, id: string, defaults?: BitcoinWalletDefaults);
|
|
26
|
+
getXService(): BitcoinXService;
|
|
27
|
+
abstract connect(): Promise<XAccount | undefined>;
|
|
28
|
+
abstract disconnect(): Promise<void>;
|
|
29
|
+
/**
|
|
30
|
+
* Returns an IBitcoinWalletProvider instance after connecting.
|
|
31
|
+
* Used by useSpokeProvider to build BitcoinSpokeProvider.
|
|
32
|
+
*/
|
|
33
|
+
abstract getWalletProvider(): IBitcoinWalletProvider | undefined;
|
|
34
|
+
/**
|
|
35
|
+
* Recreates a walletProvider from the browser extension window object
|
|
36
|
+
* and stored xAccount data (no connect() call, no popup).
|
|
37
|
+
* Used to restore provider after page reload without requiring reconnect.
|
|
38
|
+
*/
|
|
39
|
+
abstract recreateWalletProvider(xAccount: XAccount): IBitcoinWalletProvider | undefined;
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
interface UnisatWallet {
|
|
43
|
+
getAccounts(): Promise<string[]>;
|
|
44
|
+
getPublicKey(): Promise<string>;
|
|
45
|
+
signPsbt(psbtHex: string, options?: {
|
|
46
|
+
autoFinalized?: boolean;
|
|
47
|
+
}): Promise<string>;
|
|
48
|
+
signMessage(message: string, type?: 'bip322-simple' | 'ecdsa'): Promise<string>;
|
|
49
|
+
requestAccounts(): Promise<string[]>;
|
|
50
|
+
sendBitcoin(address: string, satoshis: number): Promise<string>;
|
|
51
|
+
}
|
|
52
|
+
declare global {
|
|
53
|
+
interface Window {
|
|
54
|
+
unisat?: UnisatWallet;
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
declare class UnisatXConnector extends BitcoinXConnector {
|
|
58
|
+
private walletProvider;
|
|
59
|
+
constructor(defaults?: BitcoinWalletDefaults);
|
|
60
|
+
static isAvailable(): boolean;
|
|
61
|
+
get isInstalled(): boolean;
|
|
62
|
+
get installUrl(): string;
|
|
63
|
+
get icon(): string;
|
|
64
|
+
connect(): Promise<XAccount | undefined>;
|
|
65
|
+
disconnect(): Promise<void>;
|
|
66
|
+
getWalletProvider(): IBitcoinWalletProvider | undefined;
|
|
67
|
+
recreateWalletProvider(xAccount: XAccount): IBitcoinWalletProvider | undefined;
|
|
68
|
+
}
|
|
69
|
+
|
|
70
|
+
declare class XverseXConnector extends BitcoinXConnector {
|
|
71
|
+
private walletProvider;
|
|
72
|
+
/** Address purpose used when connecting. Taproot (Ordinals) by default to match Radfi. */
|
|
73
|
+
addressPurpose: AddressPurpose;
|
|
74
|
+
constructor(defaults?: BitcoinWalletDefaults);
|
|
75
|
+
/** Set address purpose and persist to localStorage. */
|
|
76
|
+
setAddressPurpose(type: BtcWalletAddressType): void;
|
|
77
|
+
static isAvailable(): boolean;
|
|
78
|
+
get isInstalled(): boolean;
|
|
79
|
+
get installUrl(): string;
|
|
80
|
+
get icon(): string;
|
|
81
|
+
connect(): Promise<XAccount | undefined>;
|
|
82
|
+
disconnect(): Promise<void>;
|
|
83
|
+
getWalletProvider(): IBitcoinWalletProvider | undefined;
|
|
84
|
+
recreateWalletProvider(xAccount: XAccount): IBitcoinWalletProvider | undefined;
|
|
85
|
+
}
|
|
86
|
+
|
|
87
|
+
interface OKXBitcoinWallet {
|
|
88
|
+
getAccounts(): Promise<string[]>;
|
|
89
|
+
getPublicKey(): Promise<string>;
|
|
90
|
+
signPsbt(psbtHex: string, options?: {
|
|
91
|
+
autoFinalized?: boolean;
|
|
92
|
+
}): Promise<string>;
|
|
93
|
+
signMessage(message: string, type?: 'bip322-simple' | 'ecdsa'): Promise<string>;
|
|
94
|
+
connect(): Promise<{
|
|
95
|
+
address: string;
|
|
96
|
+
publicKey: string;
|
|
97
|
+
}>;
|
|
98
|
+
sendBitcoin(toAddress: string, satoshis: number): Promise<string>;
|
|
99
|
+
}
|
|
100
|
+
declare global {
|
|
101
|
+
interface Window {
|
|
102
|
+
okxwallet?: {
|
|
103
|
+
bitcoin?: OKXBitcoinWallet;
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
}
|
|
107
|
+
declare class OKXXConnector extends BitcoinXConnector {
|
|
108
|
+
private walletProvider;
|
|
109
|
+
constructor(defaults?: BitcoinWalletDefaults);
|
|
110
|
+
static isAvailable(): boolean;
|
|
111
|
+
get isInstalled(): boolean;
|
|
112
|
+
get installUrl(): string;
|
|
113
|
+
get icon(): string;
|
|
114
|
+
connect(): Promise<XAccount | undefined>;
|
|
115
|
+
disconnect(): Promise<void>;
|
|
116
|
+
getWalletProvider(): IBitcoinWalletProvider | undefined;
|
|
117
|
+
recreateWalletProvider(xAccount: XAccount): IBitcoinWalletProvider | undefined;
|
|
118
|
+
}
|
|
119
|
+
|
|
120
|
+
/**
|
|
121
|
+
* Hook to return available Bitcoin wallet connectors from the globally registered xService.
|
|
122
|
+
*/
|
|
123
|
+
declare function useBitcoinXConnectors(): BitcoinXConnector[];
|
|
124
|
+
|
|
125
|
+
export { BitcoinXConnector, BitcoinXService, OKXXConnector, UnisatXConnector, XverseXConnector, useBitcoinXConnectors };
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export { BitcoinXConnector, BitcoinXService, OKXXConnector, UnisatXConnector, XverseXConnector, useBitcoinXConnectors } from '../../chunk-PLCA4ZDJ.mjs';
|
|
2
|
+
import '../../chunk-66BAUK56.mjs';
|
|
3
|
+
import '../../chunk-7ULB6DW4.mjs';
|
|
4
|
+
import '../../chunk-E5IAZ7E6.mjs';
|
|
5
|
+
import '../../chunk-2BOUGCJ7.mjs';
|
|
6
|
+
import '../../chunk-MAQ47Q52.mjs';
|
|
7
|
+
import '../../chunk-BKJB527E.mjs';
|
|
8
|
+
import '../../chunk-BXJLBR4G.mjs';
|
|
9
|
+
import '../../chunk-MXZVF5HR.mjs';
|
|
10
|
+
import '../../chunk-XZ7CHO2S.mjs';
|
|
11
|
+
import '../../chunk-NY7U7OJW.mjs';
|
|
12
|
+
import '../../chunk-PJLEJVAU.mjs';
|
|
13
|
+
import '../../chunk-TZMKDXFA.mjs';
|
|
14
|
+
import '../../chunk-X2MHIWXO.mjs';
|
|
15
|
+
//# sourceMappingURL=index.mjs.map
|
|
16
|
+
//# sourceMappingURL=index.mjs.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"sources":[],"names":[],"mappings":"","file":"index.mjs"}
|