decane-connect-kit 0.0.1 → 1.0.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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/core/emitter.ts","../src/core/registry.ts","../src/errors.ts","../src/constants.ts","../src/core/session.ts","../src/core/chainStore.ts","../src/evm/adapter.ts","../src/solana/adapter.ts","../src/core/router.ts","../src/provider.ts","../src/evm/discovery.ts","../src/solana/discovery.ts","../src/factory.ts","../src/ui/WalletSelector.tsx","../src/ui/styles.ts","../src/ui/icons.tsx","../src/ui/context.tsx","../src/ui/hooks.ts"],"sourcesContent":["export { createDecane } from \"./factory\";\n\n// Public type exports\nexport type {\n DecaneProvider,\n DecaneConfig,\n UnifiedWalletAccount,\n ChainDescriptor,\n ChainSupport,\n ChainType,\n ActiveSession,\n CAIP25SessionRequest,\n CAIP25SessionResult,\n ChainScope,\n CAIP25Method,\n} from \"./types\";\n\n// Public value exports\nexport { DecaneError, DecaneErrorCode } from \"./errors\";\nexport { BUILT_IN_CHAINS, CHAINS } from \"./constants\";\nexport type { ChainId } from \"./constants\";\n\n// UI\nexport { WalletSelector } from \"./ui/WalletSelector\";\nexport { DecaneKit } from \"./ui/context\";\nexport type { Theme } from \"./ui/context\";\n\n// React hooks\nexport {\n useDecane,\n useWalletSelector,\n useChainSwitch,\n useSignMessage,\n useSendTransaction,\n useSignTypedData,\n type TxParams,\n} from \"./ui/hooks\";\n","type Handler = (...args: unknown[]) => void;\n\nexport interface Emitter {\n on(event: string, handler: Handler): void;\n off(event: string, handler: Handler): void;\n emit(event: string, ...args: unknown[]): void;\n}\n\nexport function createEmitter(): Emitter {\n const listeners = new Map<string, Set<Handler>>();\n\n return {\n on(event, handler) {\n if (!listeners.has(event)) listeners.set(event, new Set());\n listeners.get(event)!.add(handler);\n },\n\n off(event, handler) {\n listeners.get(event)?.delete(handler);\n },\n\n emit(event, ...args) {\n listeners.get(event)?.forEach((h) => h(...args));\n },\n };\n}\n","import type {\n RawWalletEntry,\n UnifiedWalletAccount,\n ChainSupport,\n EIP1193Provider,\n StandardWallet,\n} from \"../types\";\nimport type { Emitter } from \"./emitter\";\n\nexport interface Registry {\n registerOrMerge(incoming: RawWalletEntry): void;\n unregister(provider: StandardWallet): void;\n get: {\n all(): UnifiedWalletAccount[];\n evm(): UnifiedWalletAccount[];\n solana(): UnifiedWalletAccount[];\n multiChain(): UnifiedWalletAccount[];\n byId(id: string): UnifiedWalletAccount | undefined;\n };\n}\n\nexport function createRegistry(emitter: Emitter): Registry {\n const wallets: UnifiedWalletAccount[] = [];\n\n function normaliseName(name: string): string {\n return name\n .toLowerCase()\n .replace(/\\s+/g, \"\")\n .replace(/wallet$/, \"\");\n }\n\n function toUnified(incoming: RawWalletEntry): UnifiedWalletAccount {\n const id =\n incoming.rdns ??\n incoming.uuid ??\n normaliseName(incoming.name);\n\n const account: UnifiedWalletAccount = {\n id,\n name: incoming.name,\n icon: incoming.icon,\n rdns: incoming.rdns,\n chainSupport: [incoming.chain] as unknown as ChainSupport,\n };\n\n if (incoming.chain === \"evm\") {\n account.evmProvider = incoming.provider as EIP1193Provider;\n } else {\n account.solanaProvider = incoming.provider as StandardWallet;\n }\n\n return account;\n }\n\n function mergeInto(\n existing: UnifiedWalletAccount,\n incoming: RawWalletEntry,\n ): void {\n if (!existing.chainSupport.includes(incoming.chain)) {\n existing.chainSupport = [\n ...existing.chainSupport,\n incoming.chain,\n ].sort() as ChainSupport;\n }\n if (incoming.chain === \"evm\") {\n existing.evmProvider = incoming.provider as EIP1193Provider;\n }\n if (incoming.chain === \"solana\") {\n existing.solanaProvider = incoming.provider as StandardWallet;\n }\n if (!existing.icon && incoming.icon) existing.icon = incoming.icon;\n }\n\n function registerOrMerge(incoming: RawWalletEntry): void {\n // 1. Match by rdns (primary merge key — both sides have rdns and it matches)\n if (incoming.rdns) {\n const existing = wallets.find((w) => w.rdns === incoming.rdns);\n if (existing) {\n mergeInto(existing, incoming);\n emitter.emit(\"walletUpdated\", existing);\n return;\n }\n }\n\n // 2. Match by normalised name — fallback for when rdns didn't match or\n // the incoming entry (typically a Solana Wallet Standard wallet) has no\n // rdns. Solana wallets rarely expose rdns, so this is the normal merge\n // path for multi-chain wallets like Backpack, Phantom, MetaMask.\n if (!incoming.rdns) {\n const norm = normaliseName(incoming.name);\n const existing = wallets.find(\n (w) => normaliseName(w.name) === norm,\n );\n if (existing) {\n mergeInto(existing, incoming);\n emitter.emit(\"walletUpdated\", existing);\n return;\n }\n }\n\n // 3. New wallet\n const account = toUnified(incoming);\n wallets.push(account);\n emitter.emit(\"walletRegistered\", account);\n }\n\n function unregister(provider: StandardWallet): void {\n const idx = wallets.findIndex((w) => w.solanaProvider === provider);\n if (idx === -1) return;\n const entry = wallets[idx];\n if (entry.chainSupport.length === 1) {\n wallets.splice(idx, 1);\n emitter.emit(\"walletUnregistered\", entry);\n } else {\n entry.chainSupport = [\"evm\"];\n entry.solanaProvider = undefined;\n emitter.emit(\"walletUpdated\", entry);\n }\n }\n\n return {\n registerOrMerge,\n unregister,\n get: {\n all: () => [...wallets],\n evm: () => wallets.filter((w) => w.chainSupport.includes(\"evm\")),\n solana: () => wallets.filter((w) => w.chainSupport.includes(\"solana\")),\n multiChain: () =>\n wallets.filter(\n (w) =>\n w.chainSupport.includes(\"evm\") &&\n w.chainSupport.includes(\"solana\"),\n ),\n byId: (id) => wallets.find((w) => w.id === id),\n },\n };\n}\n","export class DecaneError extends Error {\n constructor(\n public code: DecaneErrorCode,\n message: string,\n ) {\n super(message);\n this.name = \"DecaneError\";\n }\n}\n\nexport enum DecaneErrorCode {\n // CAIP-25 standard codes\n USER_REJECTED = 4001,\n UNAUTHORIZED = 4100,\n\n // Session\n NO_ACTIVE_SESSION = 5001,\n SCOPE_MISMATCH = 5002,\n SESSION_EXPIRED = 5003,\n\n // Chain\n UNSUPPORTED_CHAIN = 5010,\n CHAIN_NOT_IN_SCOPE = 5011,\n INVALID_CHAIN_CONFIG = 5012,\n\n // Wallet\n NO_WALLET_CONNECTED = 5020,\n WALLET_DISCONNECTED = 5021,\n PROVIDER_ERROR = 5022,\n\n // Method\n METHOD_NOT_SUPPORTED = 5030,\n EVM_ONLY_METHOD = 5031,\n}\n","import type { ChainDescriptor } from \"./types\";\n\n// ── Built-in chains ───────────────────────────────────────────────────────────\n\nconst ETH = { name: \"Ether\", symbol: \"ETH\", decimals: 18 };\nconst SOL = { name: \"SOL\", symbol: \"SOL\", decimals: 9 };\n\nexport const BUILT_IN_CHAINS: ChainDescriptor[] = [\n // ── Tier-1 EVM ──────────────────────────────────────────────────────────────\n {\n id: \"eip155:1\",\n type: \"evm\",\n name: \"Ethereum\",\n chainId: 1,\n nativeCurrency: ETH,\n rpcUrl: \"https://cloudflare-eth.com\",\n blockExplorerUrl: \"https://etherscan.io\",\n },\n {\n id: \"eip155:8453\",\n type: \"evm\",\n name: \"Base\",\n chainId: 8453,\n nativeCurrency: ETH,\n rpcUrl: \"https://mainnet.base.org\",\n blockExplorerUrl: \"https://basescan.org\",\n },\n {\n id: \"eip155:42161\",\n type: \"evm\",\n name: \"Arbitrum One\",\n chainId: 42161,\n nativeCurrency: ETH,\n rpcUrl: \"https://arb1.arbitrum.io/rpc\",\n blockExplorerUrl: \"https://arbiscan.io\",\n },\n {\n id: \"eip155:10\",\n type: \"evm\",\n name: \"Optimism\",\n chainId: 10,\n nativeCurrency: ETH,\n rpcUrl: \"https://mainnet.optimism.io\",\n blockExplorerUrl: \"https://optimistic.etherscan.io\",\n },\n {\n id: \"eip155:56\",\n type: \"evm\",\n name: \"BNB Chain\",\n chainId: 56,\n nativeCurrency: { name: \"BNB\", symbol: \"BNB\", decimals: 18 },\n rpcUrl: \"https://bsc-dataseed.binance.org\",\n blockExplorerUrl: \"https://bscscan.com\",\n },\n {\n id: \"eip155:137\",\n type: \"evm\",\n name: \"Polygon\",\n chainId: 137,\n nativeCurrency: { name: \"MATIC\", symbol: \"MATIC\", decimals: 18 },\n rpcUrl: \"https://polygon-rpc.com\",\n blockExplorerUrl: \"https://polygonscan.com\",\n },\n\n // ── Extended EVM ecosystem ───────────────────────────────────────────────────\n {\n id: \"eip155:2741\",\n type: \"evm\",\n name: \"Abstract\",\n chainId: 2741,\n nativeCurrency: ETH,\n rpcUrl: \"https://api.mainnet.abs.xyz\",\n blockExplorerUrl: \"https://abscan.org\",\n },\n {\n id: \"eip155:888888888\",\n type: \"evm\",\n name: \"Ancient8\",\n chainId: 888888888,\n nativeCurrency: ETH,\n rpcUrl: \"https://rpc.ancient8.gg\",\n blockExplorerUrl: \"https://scan.ancient8.gg\",\n },\n {\n id: \"eip155:69000\",\n type: \"evm\",\n name: \"Animechain\",\n chainId: 69000,\n nativeCurrency: { name: \"Anime\", symbol: \"ANIME\", decimals: 18 },\n rpcUrl: \"https://rpc.animechain.ai\",\n blockExplorerUrl: \"https://explorer.animechain.ai\",\n },\n {\n id: \"eip155:33139\",\n type: \"evm\",\n name: \"ApeChain\",\n chainId: 33139,\n nativeCurrency: { name: \"ApeCoin\", symbol: \"APE\", decimals: 18 },\n rpcUrl: \"https://rpc.apechain.com/http\",\n blockExplorerUrl: \"https://apescan.io\",\n },\n {\n id: \"eip155:42170\",\n type: \"evm\",\n name: \"Arbitrum Nova\",\n chainId: 42170,\n nativeCurrency: ETH,\n rpcUrl: \"https://nova.arbitrum.io/rpc\",\n blockExplorerUrl: \"https://nova.arbiscan.io\",\n },\n {\n id: \"eip155:43114\",\n type: \"evm\",\n name: \"Avalanche\",\n chainId: 43114,\n nativeCurrency: { name: \"Avalanche\", symbol: \"AVAX\", decimals: 18 },\n rpcUrl: \"https://api.avax.network/ext/bc/C/rpc\",\n blockExplorerUrl: \"https://snowtrace.io\",\n },\n {\n id: \"eip155:8333\",\n type: \"evm\",\n name: \"B3\",\n chainId: 8333,\n nativeCurrency: ETH,\n rpcUrl: \"https://mainnet-rpc.b3.fun/http\",\n blockExplorerUrl: \"https://explorer.b3.fun\",\n },\n {\n id: \"eip155:80094\",\n type: \"evm\",\n name: \"Berachain\",\n chainId: 80094,\n nativeCurrency: { name: \"BERA\", symbol: \"BERA\", decimals: 18 },\n rpcUrl: \"https://rpc.berachain.com\",\n blockExplorerUrl: \"https://berascan.com\",\n },\n {\n id: \"eip155:81457\",\n type: \"evm\",\n name: \"Blast\",\n chainId: 81457,\n nativeCurrency: ETH,\n rpcUrl: \"https://rpc.blast.io\",\n blockExplorerUrl: \"https://blastscan.io\",\n },\n {\n id: \"eip155:60808\",\n type: \"evm\",\n name: \"BOB\",\n chainId: 60808,\n nativeCurrency: ETH,\n rpcUrl: \"https://rpc.gobob.xyz\",\n blockExplorerUrl: \"https://explorer.gobob.xyz\",\n },\n {\n id: \"eip155:288\",\n type: \"evm\",\n name: \"Boba Network\",\n chainId: 288,\n nativeCurrency: ETH,\n rpcUrl: \"https://mainnet.boba.network\",\n blockExplorerUrl: \"https://bobascan.com\",\n },\n {\n id: \"eip155:42220\",\n type: \"evm\",\n name: \"Celo\",\n chainId: 42220,\n nativeCurrency: { name: \"CELO\", symbol: \"CELO\", decimals: 18 },\n rpcUrl: \"https://forno.celo.org\",\n blockExplorerUrl: \"https://celoscan.io\",\n },\n {\n id: \"eip155:21000000\",\n type: \"evm\",\n name: \"Corn\",\n chainId: 21000000,\n nativeCurrency: { name: \"Bitcorn\", symbol: \"BTCN\", decimals: 18 },\n rpcUrl: \"https://mainnet.corn-rpc.com\",\n blockExplorerUrl: \"https://cornscan.io\",\n },\n {\n id: \"eip155:25\",\n type: \"evm\",\n name: \"Cronos\",\n chainId: 25,\n nativeCurrency: { name: \"Cronos\", symbol: \"CRO\", decimals: 18 },\n rpcUrl: \"https://evm.cronos.org\",\n blockExplorerUrl: \"https://cronoscan.com\",\n },\n {\n id: \"eip155:7560\",\n type: \"evm\",\n name: \"Cyber\",\n chainId: 7560,\n nativeCurrency: ETH,\n rpcUrl: \"https://rpc.cyber.co\",\n blockExplorerUrl: \"https://cyberscan.co\",\n },\n {\n id: \"eip155:666666666\",\n type: \"evm\",\n name: \"Degen\",\n chainId: 666666666,\n nativeCurrency: { name: \"Degen\", symbol: \"DEGEN\", decimals: 18 },\n rpcUrl: \"https://rpc.degen.tips\",\n blockExplorerUrl: \"https://explorer.degen.tips\",\n },\n {\n id: \"eip155:747\",\n type: \"evm\",\n name: \"Flow EVM\",\n chainId: 747,\n nativeCurrency: { name: \"Flow\", symbol: \"FLOW\", decimals: 18 },\n rpcUrl: \"https://mainnet.evm.nodes.onflow.org\",\n blockExplorerUrl: \"https://flowdiver.io\",\n },\n {\n id: \"eip155:100\",\n type: \"evm\",\n name: \"Gnosis\",\n chainId: 100,\n nativeCurrency: { name: \"xDai\", symbol: \"xDAI\", decimals: 18 },\n rpcUrl: \"https://rpc.gnosischain.com\",\n blockExplorerUrl: \"https://gnosisscan.io\",\n },\n {\n id: \"eip155:49321\",\n type: \"evm\",\n name: \"Gunz\",\n chainId: 49321,\n nativeCurrency: ETH,\n rpcUrl: \"https://rpc.gunz.dev/ext/bc/evm\",\n blockExplorerUrl: \"https://explorer.gunz.dev\",\n },\n {\n id: \"eip155:43111\",\n type: \"evm\",\n name: \"Hemi\",\n chainId: 43111,\n nativeCurrency: ETH,\n rpcUrl: \"https://rpc.hemi.network/rpc\",\n blockExplorerUrl: \"https://explorer.hemi.xyz\",\n },\n {\n id: \"eip155:999\",\n type: \"evm\",\n name: \"HyperEVM\",\n chainId: 999,\n nativeCurrency: { name: \"HYPE\", symbol: \"HYPE\", decimals: 18 },\n rpcUrl: \"https://rpc.hyperliquid.xyz/evm\",\n blockExplorerUrl: \"https://hyperevm-explorer.hyperliquid.xyz\",\n },\n {\n id: \"eip155:57073\",\n type: \"evm\",\n name: \"Ink\",\n chainId: 57073,\n nativeCurrency: ETH,\n rpcUrl: \"https://rpc-gel.inkonchain.com\",\n blockExplorerUrl: \"https://explorer.inkonchain.com\",\n },\n {\n id: \"eip155:59144\",\n type: \"evm\",\n name: \"Linea\",\n chainId: 59144,\n nativeCurrency: ETH,\n rpcUrl: \"https://rpc.linea.build\",\n blockExplorerUrl: \"https://lineascan.build\",\n },\n {\n id: \"eip155:1135\",\n type: \"evm\",\n name: \"Lisk\",\n chainId: 1135,\n nativeCurrency: ETH,\n rpcUrl: \"https://rpc.api.lisk.com\",\n blockExplorerUrl: \"https://blockscout.lisk.com\",\n },\n {\n id: \"eip155:169\",\n type: \"evm\",\n name: \"Manta Pacific\",\n chainId: 169,\n nativeCurrency: ETH,\n rpcUrl: \"https://pacific-rpc.manta.network/http\",\n blockExplorerUrl: \"https://pacific-explorer.manta.network\",\n },\n {\n id: \"eip155:5000\",\n type: \"evm\",\n name: \"Mantle\",\n chainId: 5000,\n nativeCurrency: { name: \"MNT\", symbol: \"MNT\", decimals: 18 },\n rpcUrl: \"https://rpc.mantle.xyz\",\n blockExplorerUrl: \"https://explorer.mantle.xyz\",\n },\n {\n id: \"eip155:6342\",\n type: \"evm\",\n name: \"MegaETH\",\n chainId: 6342,\n nativeCurrency: ETH,\n rpcUrl: \"https://carrot.megaeth.com\",\n blockExplorerUrl: \"https://megaexplorer.xyz\",\n },\n {\n id: \"eip155:1088\",\n type: \"evm\",\n name: \"Metis\",\n chainId: 1088,\n nativeCurrency: { name: \"Metis\", symbol: \"METIS\", decimals: 18 },\n rpcUrl: \"https://andromeda.metis.io/?owner=1088\",\n blockExplorerUrl: \"https://andromeda-explorer.metis.io\",\n },\n {\n id: \"eip155:34443\",\n type: \"evm\",\n name: \"Mode\",\n chainId: 34443,\n nativeCurrency: ETH,\n rpcUrl: \"https://mainnet.mode.network\",\n blockExplorerUrl: \"https://modescan.io\",\n },\n {\n id: \"eip155:10143\",\n type: \"evm\",\n name: \"Monad\",\n chainId: 10143,\n nativeCurrency: { name: \"MON\", symbol: \"MON\", decimals: 18 },\n rpcUrl: \"https://testnet-rpc.monad.xyz\",\n blockExplorerUrl: \"https://testnet.monadexplorer.com\",\n },\n {\n id: \"eip155:2818\",\n type: \"evm\",\n name: \"Morph\",\n chainId: 2818,\n nativeCurrency: ETH,\n rpcUrl: \"https://rpc-quicknode.morphl2.io\",\n blockExplorerUrl: \"https://explorer.morphl2.io\",\n },\n {\n id: \"eip155:98866\",\n type: \"evm\",\n name: \"Plume\",\n chainId: 98866,\n nativeCurrency: { name: \"Plume\", symbol: \"PLUME\", decimals: 18 },\n rpcUrl: \"https://rpc.plume.org\",\n blockExplorerUrl: \"https://explorer.plume.org\",\n },\n {\n id: \"eip155:1380012617\",\n type: \"evm\",\n name: \"RARI\",\n chainId: 1380012617,\n nativeCurrency: ETH,\n rpcUrl: \"https://mainnet.rpc.rarichain.org/ext/bc/C/rpc\",\n blockExplorerUrl: \"https://mainnet.explorer.rarichain.org\",\n },\n {\n id: \"eip155:690\",\n type: \"evm\",\n name: \"Redstone\",\n chainId: 690,\n nativeCurrency: ETH,\n rpcUrl: \"https://rpc.redstonechain.com\",\n blockExplorerUrl: \"https://explorer.redstone.xyz\",\n },\n {\n id: \"eip155:2020\",\n type: \"evm\",\n name: \"Ronin\",\n chainId: 2020,\n nativeCurrency: { name: \"RON\", symbol: \"RON\", decimals: 18 },\n rpcUrl: \"https://api.roninchain.com/rpc\",\n blockExplorerUrl: \"https://app.roninchain.com\",\n },\n {\n id: \"eip155:534352\",\n type: \"evm\",\n name: \"Scroll\",\n chainId: 534352,\n nativeCurrency: ETH,\n rpcUrl: \"https://rpc.scroll.io\",\n blockExplorerUrl: \"https://scrollscan.com\",\n },\n {\n id: \"eip155:1329\",\n type: \"evm\",\n name: \"Sei\",\n chainId: 1329,\n nativeCurrency: { name: \"Sei\", symbol: \"SEI\", decimals: 18 },\n rpcUrl: \"https://evm-rpc.sei-apis.com\",\n blockExplorerUrl: \"https://seistream.app\",\n },\n {\n id: \"eip155:360\",\n type: \"evm\",\n name: \"Shape\",\n chainId: 360,\n nativeCurrency: ETH,\n rpcUrl: \"https://mainnet.shape.network\",\n blockExplorerUrl: \"https://shapescan.xyz\",\n },\n {\n id: \"eip155:50312\",\n type: \"evm\",\n name: \"Somnia\",\n chainId: 50312,\n nativeCurrency: { name: \"STT\", symbol: \"STT\", decimals: 18 },\n rpcUrl: \"https://dream-rpc.somnia.network\",\n blockExplorerUrl: \"https://shannon-explorer.somnia.network\",\n },\n {\n id: \"eip155:1868\",\n type: \"evm\",\n name: \"Soneium\",\n chainId: 1868,\n nativeCurrency: ETH,\n rpcUrl: \"https://rpc.soneium.org\",\n blockExplorerUrl: \"https://soneium.blockscout.com\",\n },\n {\n id: \"eip155:146\",\n type: \"evm\",\n name: \"Sonic\",\n chainId: 146,\n nativeCurrency: { name: \"Sonic\", symbol: \"S\", decimals: 18 },\n rpcUrl: \"https://rpc.soniclabs.com\",\n blockExplorerUrl: \"https://sonicscan.org\",\n },\n {\n id: \"eip155:1514\",\n type: \"evm\",\n name: \"Story\",\n chainId: 1514,\n nativeCurrency: { name: \"IP\", symbol: \"IP\", decimals: 18 },\n rpcUrl: \"https://mainnet.storyrpc.io\",\n blockExplorerUrl: \"https://storyscan.xyz\",\n },\n {\n id: \"eip155:55244\",\n type: \"evm\",\n name: \"Superposition\",\n chainId: 55244,\n nativeCurrency: ETH,\n rpcUrl: \"https://rpc.superposition.so\",\n blockExplorerUrl: \"https://explorer.superposition.so\",\n },\n {\n id: \"eip155:5330\",\n type: \"evm\",\n name: \"Superseed\",\n chainId: 5330,\n nativeCurrency: ETH,\n rpcUrl: \"https://mainnet.superseed.xyz\",\n blockExplorerUrl: \"https://explorer.superseed.xyz\",\n },\n {\n id: \"eip155:1923\",\n type: \"evm\",\n name: \"SwellChain\",\n chainId: 1923,\n nativeCurrency: ETH,\n rpcUrl: \"https://swell-mainnet.alt.technology\",\n blockExplorerUrl: \"https://explorer.swellnetwork.io\",\n },\n {\n id: \"eip155:167000\",\n type: \"evm\",\n name: \"Taiko\",\n chainId: 167000,\n nativeCurrency: ETH,\n rpcUrl: \"https://rpc.mainnet.taiko.xyz\",\n blockExplorerUrl: \"https://taikoscan.io\",\n },\n {\n id: \"eip155:130\",\n type: \"evm\",\n name: \"Unichain\",\n chainId: 130,\n nativeCurrency: ETH,\n rpcUrl: \"https://mainnet.unichain.org\",\n blockExplorerUrl: \"https://uniscan.xyz\",\n },\n {\n id: \"eip155:480\",\n type: \"evm\",\n name: \"World Chain\",\n chainId: 480,\n nativeCurrency: ETH,\n rpcUrl: \"https://worldchain-mainnet.g.alchemy.com/public\",\n blockExplorerUrl: \"https://worldchain-mainnet.explorer.alchemy.com\",\n },\n {\n id: \"eip155:543210\",\n type: \"evm\",\n name: \"ZERO\",\n chainId: 543210,\n nativeCurrency: ETH,\n rpcUrl: \"https://rpc.zerion.io/v1/zero\",\n blockExplorerUrl: \"https://explorer.zero.network\",\n },\n {\n id: \"eip155:48900\",\n type: \"evm\",\n name: \"Zircuit\",\n chainId: 48900,\n nativeCurrency: ETH,\n rpcUrl: \"https://zircuit1-mainnet.p2pify.com\",\n blockExplorerUrl: \"https://explorer.zircuit.com\",\n },\n {\n id: \"eip155:324\",\n type: \"evm\",\n name: \"zkSync Era\",\n chainId: 324,\n nativeCurrency: ETH,\n rpcUrl: \"https://mainnet.era.zksync.io\",\n blockExplorerUrl: \"https://explorer.zksync.io\",\n },\n {\n id: \"eip155:7777777\",\n type: \"evm\",\n name: \"Zora\",\n chainId: 7777777,\n nativeCurrency: ETH,\n rpcUrl: \"https://rpc.zora.energy\",\n blockExplorerUrl: \"https://explorer.zora.energy\",\n },\n\n // ── Dev / local ──────────────────────────────────────────────────────────────\n {\n id: \"eip155:31337\",\n type: \"evm\",\n name: \"Localhost\",\n chainId: 31337,\n nativeCurrency: ETH,\n rpcUrl: \"http://localhost:8545\",\n isCustom: true,\n },\n\n // ── Solana ───────────────────────────────────────────────────────────────────\n {\n id: \"solana:mainnet\",\n type: \"solana\",\n name: \"Solana\",\n nativeCurrency: SOL,\n blockExplorerUrl: \"https://solscan.io\",\n },\n {\n id: \"solana:devnet\",\n type: \"solana\",\n name: \"Solana Devnet\",\n nativeCurrency: SOL,\n blockExplorerUrl: \"https://solscan.io/?cluster=devnet\",\n },\n];\n\n// ── CAIP-2 helpers ────────────────────────────────────────────────────────────\n\nexport function toCAIP2(type: \"evm\", chainId: number): string;\nexport function toCAIP2(type: \"solana\", network: \"mainnet\" | \"devnet\"): string;\nexport function toCAIP2(type: string, id: string | number): string {\n if (type === \"evm\") return `eip155:${id}`;\n if (type === \"solana\") return `solana:${id}`;\n throw new Error(`Unknown chain type: ${type}`);\n}\n\nexport function getChainType(caip2Id: string): \"evm\" | \"solana\" {\n if (caip2Id.startsWith(\"eip155:\")) return \"evm\";\n if (caip2Id.startsWith(\"solana:\")) return \"solana\";\n throw new Error(`Cannot determine chain type from: ${caip2Id}`);\n}\n\n// ── CAIP-10 helpers ───────────────────────────────────────────────────────────\n\nexport function toCAIP10(chainId: string, address: string): string {\n return `${chainId}:${address}`;\n}\n\nexport function fromCAIP10(account: string): { chainId: string; address: string } {\n const i = account.lastIndexOf(\":\");\n return { chainId: account.slice(0, i), address: account.slice(i + 1) };\n}\n\n// ── Method sets ───────────────────────────────────────────────────────────────\n\nexport const EVM_METHODS = new Set([\n \"wallet_sendTransaction\",\n \"wallet_signMessage\",\n \"wallet_signTypedData\",\n]);\n\nexport const SOLANA_METHODS = new Set([\n \"wallet_sendTransaction\",\n \"wallet_signMessage\",\n // wallet_signTypedData is EVM-only — never included here\n]);\n\n// ── Named chain ID constants ──────────────────────────────────────────────────\n\nexport const CHAINS = {\n // Tier-1\n ETHEREUM: \"eip155:1\",\n BASE: \"eip155:8453\",\n ARBITRUM: \"eip155:42161\",\n OPTIMISM: \"eip155:10\",\n BNB: \"eip155:56\",\n POLYGON: \"eip155:137\",\n // Extended EVM\n ABSTRACT: \"eip155:2741\",\n ANCIENT8: \"eip155:888888888\",\n ANIMECHAIN: \"eip155:69000\",\n APE_CHAIN: \"eip155:33139\",\n ARBITRUM_NOVA: \"eip155:42170\",\n AVALANCHE: \"eip155:43114\",\n B3: \"eip155:8333\",\n BERACHAIN: \"eip155:80094\",\n BLAST: \"eip155:81457\",\n BOB: \"eip155:60808\",\n BOBA: \"eip155:288\",\n CELO: \"eip155:42220\",\n CORN: \"eip155:21000000\",\n CRONOS: \"eip155:25\",\n CYBER: \"eip155:7560\",\n DEGEN: \"eip155:666666666\",\n FLOW_EVM: \"eip155:747\",\n GNOSIS: \"eip155:100\",\n GUNZ: \"eip155:49321\",\n HEMI: \"eip155:43111\",\n HYPER_EVM: \"eip155:999\",\n INK: \"eip155:57073\",\n LINEA: \"eip155:59144\",\n LISK: \"eip155:1135\",\n MANTA_PACIFIC: \"eip155:169\",\n MANTLE: \"eip155:5000\",\n MEGA_ETH: \"eip155:6342\",\n METIS: \"eip155:1088\",\n MODE: \"eip155:34443\",\n MONAD: \"eip155:10143\",\n MORPH: \"eip155:2818\",\n PLUME: \"eip155:98866\",\n RARI: \"eip155:1380012617\",\n REDSTONE: \"eip155:690\",\n RONIN: \"eip155:2020\",\n SCROLL: \"eip155:534352\",\n SEI: \"eip155:1329\",\n SHAPE: \"eip155:360\",\n SOMNIA: \"eip155:50312\",\n SONEIUM: \"eip155:1868\",\n SONIC: \"eip155:146\",\n STORY: \"eip155:1514\",\n SUPERPOSITION: \"eip155:55244\",\n SUPERSEED: \"eip155:5330\",\n SWELL_CHAIN: \"eip155:1923\",\n TAIKO: \"eip155:167000\",\n UNICHAIN: \"eip155:130\",\n WORLD_CHAIN: \"eip155:480\",\n ZERO: \"eip155:543210\",\n ZIRCUIT: \"eip155:48900\",\n ZKSYNC_ERA: \"eip155:324\",\n ZORA: \"eip155:7777777\",\n // Dev\n LOCALHOST: \"eip155:31337\",\n // Solana\n SOLANA: \"solana:mainnet\",\n SOLANA_DEVNET: \"solana:devnet\",\n} as const;\n\nexport type ChainId = typeof CHAINS[keyof typeof CHAINS];\n\n// ── Custom chain validation ───────────────────────────────────────────────────\n\nexport function validateCustomChain(chain: unknown): chain is ChainDescriptor {\n if (!chain || typeof chain !== \"object\") return false;\n const c = chain as Record<string, unknown>;\n if (typeof c.id !== \"string\" || !c.id) return false;\n if (c.type !== \"evm\" && c.type !== \"solana\") return false;\n if (typeof c.name !== \"string\" || !c.name) return false;\n if (!c.nativeCurrency || typeof c.nativeCurrency !== \"object\") return false;\n if (c.type === \"evm\" && (typeof c.chainId !== \"number\" || !c.id.startsWith(\"eip155:\")))\n return false;\n if (c.type === \"solana\" && !c.id.startsWith(\"solana:\")) return false;\n return true;\n}\n","import type { ActiveSession } from \"../types\";\nimport { DecaneError, DecaneErrorCode } from \"../errors\";\nimport { toCAIP10 } from \"../constants\";\n\nconst STORAGE_KEY = \"decane:session\";\n\nfunction loadFromStorage(): ActiveSession | null {\n if (typeof localStorage === \"undefined\") return null;\n try {\n const raw = localStorage.getItem(STORAGE_KEY);\n return raw ? (JSON.parse(raw) as ActiveSession) : null;\n } catch {\n return null;\n }\n}\n\nfunction saveToStorage(session: ActiveSession | null): void {\n if (typeof localStorage === \"undefined\") return;\n try {\n if (session) {\n localStorage.setItem(STORAGE_KEY, JSON.stringify(session));\n } else {\n localStorage.removeItem(STORAGE_KEY);\n }\n } catch {\n // Storage quota exceeded or private browsing — silently skip\n }\n}\n\nexport interface SessionManager {\n get(): ActiveSession | null;\n set(s: ActiveSession | null): void;\n clear(): void;\n isChainGranted(chainId: string): boolean;\n isAccountGranted(chainId: string, address: string): boolean;\n assertChainInScope(chainId: string): void;\n assertAccountInScope(chainId: string, address: string): void;\n}\n\nexport function createSessionManager(): SessionManager {\n // Restore persisted session on SDK init\n let _session: ActiveSession | null = loadFromStorage();\n\n return {\n get: () => _session,\n\n set(s) {\n _session = s;\n saveToStorage(s);\n },\n\n clear() {\n _session = null;\n saveToStorage(null);\n },\n\n isChainGranted(chainId) {\n return !!_session?.grantedScopes[chainId];\n },\n\n isAccountGranted(chainId, address) {\n const scope = _session?.grantedScopes[chainId];\n if (!scope) return false;\n return scope.accounts.includes(toCAIP10(chainId, address));\n },\n\n assertChainInScope(chainId) {\n if (!this.isChainGranted(chainId)) {\n throw new DecaneError(\n DecaneErrorCode.CHAIN_NOT_IN_SCOPE,\n `Chain ${chainId} is not in the current session scope. Call wallet_requestPermissions first.`,\n );\n }\n },\n\n assertAccountInScope(chainId, address) {\n if (!this.isAccountGranted(chainId, address)) {\n throw new DecaneError(\n DecaneErrorCode.SCOPE_MISMATCH,\n `Account ${address} on chain ${chainId} is not in the current session scope.`,\n );\n }\n },\n };\n}\n","import type { ChainDescriptor } from \"../types\";\nimport { DecaneError, DecaneErrorCode } from \"../errors\";\n\nexport interface ChainStore {\n get(id: string): ChainDescriptor | undefined;\n getAll(): ChainDescriptor[];\n add(chain: ChainDescriptor): void;\n remove(id: string): void;\n}\n\nexport function createChainStore(initial: ChainDescriptor[]): ChainStore {\n const chains = new Map<string, ChainDescriptor>(\n initial.map((c) => [c.id, c]),\n );\n\n return {\n get(id) {\n return chains.get(id);\n },\n\n getAll() {\n return [...chains.values()];\n },\n\n add(chain) {\n if (chains.has(chain.id)) {\n throw new DecaneError(\n DecaneErrorCode.INVALID_CHAIN_CONFIG,\n `Chain ${chain.id} is already registered`,\n );\n }\n chains.set(chain.id, chain);\n },\n\n remove(id) {\n const chain = chains.get(id);\n if (!chain) return;\n if (!chain.isCustom) {\n throw new DecaneError(\n DecaneErrorCode.INVALID_CHAIN_CONFIG,\n `Cannot remove built-in chain ${id}`,\n );\n }\n chains.delete(id);\n },\n };\n}\n","import type { EIP1193Provider, CAIP25Method, ChainDescriptor } from \"../types\";\nimport { DecaneError, DecaneErrorCode } from \"../errors\";\n\nexport async function eip1193Request(\n provider: EIP1193Provider,\n method: CAIP25Method,\n payload: unknown,\n account: string,\n): Promise<string> {\n switch (method) {\n case \"wallet_sendTransaction\":\n return provider.request({\n method: \"eth_sendTransaction\",\n params: [{ ...(payload as object), from: account }],\n }) as Promise<string>;\n\n case \"wallet_signMessage\":\n // personal_sign prepends EIP-191 prefix: \"\\x19Ethereum Signed Message:\\n\"\n return provider.request({\n method: \"personal_sign\",\n params: [payload, account],\n }) as Promise<string>;\n\n case \"wallet_signTypedData\":\n // EIP-712 typed data\n return provider.request({\n method: \"eth_signTypedData_v4\",\n params: [account, JSON.stringify(payload)],\n }) as Promise<string>;\n\n default:\n throw new DecaneError(\n DecaneErrorCode.METHOD_NOT_SUPPORTED,\n `EVM adapter: unsupported method ${method}`,\n );\n }\n}\n\nexport async function getEvmAddress(\n provider: EIP1193Provider,\n): Promise<string> {\n const accounts = (await provider.request({\n method: \"eth_requestAccounts\",\n })) as string[];\n if (!accounts?.[0]) {\n throw new DecaneError(\n DecaneErrorCode.USER_REJECTED,\n \"No EVM accounts returned\",\n );\n }\n return accounts[0];\n}\n\n// EIP-3085 — supported by MetaMask and most EVM wallets\nexport async function addEthereumChain(\n provider: EIP1193Provider,\n chain: ChainDescriptor,\n): Promise<void> {\n await provider.request({\n method: \"wallet_addEthereumChain\",\n params: [\n {\n chainId: `0x${chain.chainId!.toString(16)}`,\n chainName: chain.name,\n nativeCurrency: chain.nativeCurrency,\n rpcUrls: chain.rpcUrl ? [chain.rpcUrl] : [],\n blockExplorerUrls: chain.blockExplorerUrl\n ? [chain.blockExplorerUrl]\n : [],\n },\n ],\n });\n}\n","import { base58 } from \"@scure/base\";\nimport type { StandardWallet, CAIP25Method, StandardWalletAccount } from \"../types\";\nimport { DecaneError, DecaneErrorCode } from \"../errors\";\n\ninterface SolanaSignAndSendTx {\n signAndSendTransaction(args: {\n transaction: unknown;\n account: StandardWalletAccount;\n }): Promise<Array<{ signature: string }>>;\n}\n\ninterface SolanaSignMessage {\n signMessage(args: {\n message: Uint8Array;\n account: StandardWalletAccount;\n }): Promise<Array<{ signature: Uint8Array }>>;\n}\n\ninterface StandardConnect {\n connect(opts?: { silent?: boolean }): Promise<{\n accounts: Array<{ publicKey: Uint8Array }>;\n }>;\n}\n\nfunction deserializeSolanaTransaction(data: unknown): unknown {\n // Passthrough — wallet handles actual deserialization\n return data;\n}\n\nexport async function walletStandardRequest(\n wallet: StandardWallet,\n method: CAIP25Method,\n payload: unknown,\n account: string,\n): Promise<string> {\n switch (method) {\n case \"wallet_sendTransaction\": {\n const feature = wallet.features[\n \"solana:signAndSendTransaction\"\n ] as SolanaSignAndSendTx | undefined;\n if (!feature) {\n throw new DecaneError(\n DecaneErrorCode.METHOD_NOT_SUPPORTED,\n \"Wallet does not support solana:signAndSendTransaction\",\n );\n }\n const walletAccount = wallet.accounts.find(\n (a) => base58.encode(a.publicKey) === account,\n );\n if (!walletAccount) {\n throw new DecaneError(\n DecaneErrorCode.SCOPE_MISMATCH,\n `Account ${account} not found`,\n );\n }\n const tx = deserializeSolanaTransaction(payload);\n const [result] = await feature.signAndSendTransaction({\n transaction: tx,\n account: walletAccount,\n });\n return result.signature;\n }\n\n case \"wallet_signMessage\": {\n const feature = wallet.features[\n \"solana:signMessage\"\n ] as SolanaSignMessage | undefined;\n if (!feature) {\n throw new DecaneError(\n DecaneErrorCode.METHOD_NOT_SUPPORTED,\n \"Wallet does not support solana:signMessage\",\n );\n }\n const walletAccount = wallet.accounts.find(\n (a) => base58.encode(a.publicKey) === account,\n );\n if (!walletAccount) {\n throw new DecaneError(\n DecaneErrorCode.SCOPE_MISMATCH,\n `Account ${account} not found`,\n );\n }\n const messageBytes =\n typeof payload === \"string\"\n ? new TextEncoder().encode(payload)\n : (payload as Uint8Array);\n const [result] = await feature.signMessage({\n message: messageBytes,\n account: walletAccount,\n });\n return base58.encode(result.signature);\n }\n\n default:\n throw new DecaneError(\n DecaneErrorCode.METHOD_NOT_SUPPORTED,\n `Solana adapter: unsupported method ${method}`,\n );\n }\n}\n\nexport async function getSolanaAddress(\n wallet: StandardWallet,\n): Promise<string> {\n const connectFeature = wallet.features[\n \"standard:connect\"\n ] as StandardConnect | undefined;\n if (!connectFeature) {\n throw new DecaneError(\n DecaneErrorCode.METHOD_NOT_SUPPORTED,\n \"Wallet does not support standard:connect\",\n );\n }\n const { accounts } = await connectFeature.connect();\n if (!accounts?.[0]) {\n throw new DecaneError(\n DecaneErrorCode.USER_REJECTED,\n \"No Solana accounts returned\",\n );\n }\n return base58.encode(accounts[0].publicKey);\n}\n","import type {\n CAIP25Method,\n CAIP25SessionRequest,\n CAIP25SessionResult,\n ChainScope,\n ActiveSession,\n} from \"../types\";\nimport { DecaneError, DecaneErrorCode } from \"../errors\";\nimport {\n getChainType,\n toCAIP10,\n EVM_METHODS,\n SOLANA_METHODS,\n} from \"../constants\";\nimport { getEvmAddress, addEthereumChain } from \"../evm/adapter\";\nimport { getSolanaAddress } from \"../solana/adapter\";\nimport { eip1193Request } from \"../evm/adapter\";\nimport { walletStandardRequest } from \"../solana/adapter\";\nimport type { Registry } from \"./registry\";\nimport type { SessionManager } from \"./session\";\nimport type { ChainStore } from \"./chainStore\";\n\nexport interface Router {\n request(args: { method: string; params?: unknown[] }): Promise<unknown>;\n}\n\nexport function createRouter(opts: {\n registry: Registry;\n session: SessionManager;\n chainStore: ChainStore;\n}): Router {\n const { registry, session, chainStore } = opts;\n\n async function request(args: {\n method: string;\n params?: unknown[];\n }): Promise<unknown> {\n switch (args.method) {\n case \"wallet_requestPermissions\":\n return handleRequestPermissions(\n args.params as [CAIP25SessionRequest],\n );\n\n case \"wallet_revokePermissions\":\n return handleRevokePermissions();\n\n case \"wallet_getPermissions\":\n return handleGetPermissions();\n\n case \"wallet_sendTransaction\":\n case \"wallet_signMessage\":\n case \"wallet_signTypedData\":\n return handleSigning(args.method, args.params);\n\n default:\n throw new DecaneError(\n DecaneErrorCode.METHOD_NOT_SUPPORTED,\n `Unknown CAIP-25 method: ${args.method}`,\n );\n }\n }\n\n async function handleRequestPermissions([\n req,\n walletIdHint,\n ]: [CAIP25SessionRequest, string?]): Promise<CAIP25SessionResult> {\n const connectedWallet =\n (walletIdHint ? registry.get.byId(walletIdHint) : undefined) ??\n registry.get.all().find((w) => w.id === session.get()?.walletId) ??\n registry.get.all()[0];\n\n if (!connectedWallet) {\n throw new DecaneError(\n DecaneErrorCode.NO_WALLET_CONNECTED,\n \"No wallet connected\",\n );\n }\n\n const allScopes = { ...req.requiredScopes, ...req.optionalScopes };\n const grantedScopes: Record<string, ChainScope> = {};\n\n for (const [chainId, scope] of Object.entries(allScopes)) {\n const chain = chainStore.get(chainId);\n if (!chain) {\n throw new DecaneError(\n DecaneErrorCode.UNSUPPORTED_CHAIN,\n `Unknown chain: ${chainId}`,\n );\n }\n\n const chainType = getChainType(chainId);\n\n if (chainType === \"evm\" && !connectedWallet.evmProvider) continue;\n if (chainType === \"solana\" && !connectedWallet.solanaProvider) continue;\n\n let address: string;\n if (chainType === \"evm\") {\n address = await getEvmAddress(connectedWallet.evmProvider!);\n if (chain.isCustom) {\n await addEthereumChain(\n connectedWallet.evmProvider!,\n chain,\n ).catch(() => {\n // wallet_addEthereumChain may reject if chain already added — ignore\n });\n }\n } else {\n address = await getSolanaAddress(connectedWallet.solanaProvider!);\n }\n\n const methodSet = chainType === \"evm\" ? EVM_METHODS : SOLANA_METHODS;\n const grantedMethods = (scope?.methods ?? []).filter((m) =>\n methodSet.has(m),\n ) as CAIP25Method[];\n\n grantedScopes[chainId] = {\n methods: grantedMethods,\n accounts: [toCAIP10(chainId, address)],\n events: scope?.events ?? [],\n };\n }\n\n // Verify all required scopes were granted\n for (const chainId of Object.keys(req.requiredScopes)) {\n if (!grantedScopes[chainId]) {\n throw new DecaneError(\n DecaneErrorCode.UNSUPPORTED_CHAIN,\n `Required chain ${chainId} could not be granted`,\n );\n }\n }\n\n const newSession: ActiveSession = {\n sessionId: crypto.randomUUID(),\n grantedScopes,\n walletId: connectedWallet.id,\n walletType:\n connectedWallet.chainSupport.length === 2\n ? \"multi\"\n : connectedWallet.chainSupport[0],\n createdAt: Date.now(),\n };\n session.set(newSession);\n\n return { sessionId: newSession.sessionId, grantedScopes };\n }\n\n async function handleRevokePermissions(): Promise<null> {\n session.clear();\n return null;\n }\n\n async function handleGetPermissions(): Promise<CAIP25SessionResult | null> {\n const s = session.get();\n if (!s) return null;\n return { sessionId: s.sessionId, grantedScopes: s.grantedScopes };\n }\n\n function extractSigningContext(\n method: string,\n params: unknown[] | undefined,\n ): { chainId: string; account: string; payload: unknown } {\n if (!params || params.length < 3) {\n throw new DecaneError(\n DecaneErrorCode.METHOD_NOT_SUPPORTED,\n `${method} requires [chainId, account, payload] params`,\n );\n }\n return {\n chainId: params[0] as string,\n account: params[1] as string,\n payload: params[2],\n };\n }\n\n async function handleSigning(\n method: string,\n params: unknown[] | undefined,\n ): Promise<string> {\n const s = session.get();\n if (!s) {\n throw new DecaneError(\n DecaneErrorCode.NO_ACTIVE_SESSION,\n \"No active session. Call wallet_requestPermissions first.\",\n );\n }\n\n const { chainId, account, payload } = extractSigningContext(\n method,\n params,\n );\n const chainType = getChainType(chainId);\n\n session.assertChainInScope(chainId);\n session.assertAccountInScope(chainId, account);\n\n if (method === \"wallet_signTypedData\" && chainType !== \"evm\") {\n throw new DecaneError(\n DecaneErrorCode.EVM_ONLY_METHOD,\n \"wallet_signTypedData is only supported on EVM chains\",\n );\n }\n\n const wallet = registry.get.byId(s.walletId);\n if (!wallet) {\n throw new DecaneError(\n DecaneErrorCode.NO_WALLET_CONNECTED,\n \"Connected wallet not found\",\n );\n }\n\n if (chainType === \"evm\") {\n return eip1193Request(\n wallet.evmProvider!,\n method as CAIP25Method,\n payload,\n account,\n );\n } else {\n return walletStandardRequest(\n wallet.solanaProvider!,\n method as CAIP25Method,\n payload,\n account,\n );\n }\n }\n\n return { request };\n}\n","import type {\n DecaneProvider,\n DecaneConfig,\n UnifiedWalletAccount,\n ChainDescriptor,\n ChainType,\n ActiveSession,\n} from \"./types\";\nimport { DecaneError, DecaneErrorCode } from \"./errors\";\nimport { validateCustomChain } from \"./constants\";\nimport { addEthereumChain } from \"./evm/adapter\";\nimport type { Registry } from \"./core/registry\";\nimport type { SessionManager } from \"./core/session\";\nimport type { ChainStore } from \"./core/chainStore\";\nimport type { Emitter } from \"./core/emitter\";\nimport type { Router } from \"./core/router\";\n\nexport function createProvider(opts: {\n config: DecaneConfig;\n registry: Registry;\n session: SessionManager;\n chainStore: ChainStore;\n router: Router;\n emitter: Emitter;\n}): DecaneProvider {\n const { config, registry, session, chainStore, router, emitter } = opts;\n\n let _connectedWallet: UnifiedWalletAccount | null = null;\n let _activeChain: string | null = config.defaultChain ?? null;\n\n // Restore connected wallet from a persisted session after discovery\n function tryRestoreWallet(w: UnifiedWalletAccount): void {\n const s = session.get();\n if (!s || _connectedWallet) return;\n if (w.id !== s.walletId) return;\n _connectedWallet = w;\n const granted = Object.keys(s.grantedScopes);\n if (!_activeChain || !granted.includes(_activeChain)) {\n _activeChain = granted[0] ?? null;\n }\n emitter.emit(\"connect\", w);\n }\n\n emitter.on(\"walletRegistered\", (w) => tryRestoreWallet(w as UnifiedWalletAccount));\n // Also handle the case where the Solana provider merges in after EVM is already registered\n emitter.on(\"walletUpdated\", (w) => {\n const wallet = w as UnifiedWalletAccount;\n if (_connectedWallet?.id === wallet.id) {\n _connectedWallet = wallet; // keep reference fresh after merge\n } else {\n tryRestoreWallet(wallet);\n }\n });\n\n const provider: DecaneProvider = {\n // ── CAIP-25 request gateway ─────────────────────────────────────────────\n\n request(args) {\n return router.request(args);\n },\n\n on(event, handler) {\n emitter.on(event, handler);\n },\n\n off(event, handler) {\n emitter.off(event, handler);\n },\n\n // ── Registry views ──────────────────────────────────────────────────────\n\n get wallets() {\n return registry.get.all();\n },\n\n get evmWallets() {\n return registry.get.evm();\n },\n\n get solanaWallets() {\n return registry.get.solana();\n },\n\n get multiChainWallets() {\n return registry.get.multiChain();\n },\n\n // ── Connection ──────────────────────────────────────────────────────────\n\n async connect(wallet: UnifiedWalletAccount, preferredChain?: ChainType): Promise<void> {\n if (session.get()) {\n session.clear();\n emitter.emit(\"disconnect\");\n }\n\n _connectedWallet = wallet;\n\n const support = wallet.chainSupport as readonly string[];\n if (support.includes(\"evm\") && (preferredChain !== \"solana\")) {\n _activeChain = config.defaultChain?.startsWith(\"eip155:\")\n ? config.defaultChain\n : \"eip155:1\";\n } else {\n _activeChain = \"solana:mainnet\";\n }\n\n const hasEvm = support.includes(\"evm\") && preferredChain !== \"solana\";\n const hasSol = support.includes(\"solana\") && preferredChain !== \"evm\";\n\n const required: Record<string, { methods: string[]; accounts: string[]; events: string[] }> = {};\n const optional: Record<string, { methods: string[]; accounts: string[]; events: string[] }> = {};\n\n if (hasEvm) {\n required[_activeChain ?? \"eip155:1\"] = {\n methods: [\"wallet_sendTransaction\", \"wallet_signMessage\", \"wallet_signTypedData\"],\n accounts: [],\n events: [\"chainChanged\", \"accountsChanged\"],\n };\n }\n if (hasSol) {\n const solChain = \"solana:mainnet\";\n const scope = {\n methods: [\"wallet_sendTransaction\", \"wallet_signMessage\"],\n accounts: [],\n events: [],\n };\n if (hasEvm) {\n optional[solChain] = scope;\n } else {\n required[solChain] = scope;\n _activeChain = solChain;\n }\n }\n\n await router.request({\n method: \"wallet_requestPermissions\",\n params: [{ requiredScopes: required, optionalScopes: optional }, wallet.id],\n });\n\n const s = session.get();\n if (s) {\n const granted = Object.keys(s.grantedScopes);\n if (_activeChain && !granted.includes(_activeChain)) {\n _activeChain = granted[0] ?? null;\n }\n }\n\n emitter.emit(\"connect\", wallet);\n },\n\n async disconnect(): Promise<void> {\n session.clear();\n _connectedWallet = null;\n _activeChain = null;\n emitter.emit(\"disconnect\");\n },\n\n // ── Custom chain management ─────────────────────────────────────────────\n\n addChain(chain: ChainDescriptor): void {\n if (!validateCustomChain(chain)) {\n throw new DecaneError(\n DecaneErrorCode.INVALID_CHAIN_CONFIG,\n \"Invalid chain descriptor\",\n );\n }\n chainStore.add(chain);\n\n if (_connectedWallet?.evmProvider && chain.type === \"evm\") {\n addEthereumChain(_connectedWallet.evmProvider, chain).catch(() => {});\n }\n\n emitter.emit(\"chainAdded\", chain);\n },\n\n removeChain(chainId: string): void {\n chainStore.remove(chainId);\n\n const s = session.get();\n if (s?.grantedScopes[chainId]) {\n delete (s.grantedScopes as Record<string, unknown>)[chainId];\n session.set(s);\n }\n\n if (_activeChain === chainId) {\n const remaining = Object.keys(session.get()?.grantedScopes ?? {});\n _activeChain = remaining[0] ?? null;\n }\n\n emitter.emit(\"chainRemoved\", chainId);\n },\n\n getChain(chainId: string): ChainDescriptor | undefined {\n return chainStore.get(chainId);\n },\n\n get chains(): ChainDescriptor[] {\n return chainStore.getAll();\n },\n\n // ── State ───────────────────────────────────────────────────────────────\n\n get connectedWallet(): UnifiedWalletAccount | null {\n return _connectedWallet;\n },\n\n get activeSession(): ActiveSession | null {\n return session.get();\n },\n\n get activeChain(): string | null {\n return _activeChain;\n },\n };\n\n return provider;\n}\n","import type { EIP6963AnnounceProviderEvent } from \"../types\";\nimport type { Registry } from \"../core/registry\";\n\nexport function startEvmDiscovery(registry: Registry): void {\n if (typeof window === \"undefined\") return; // SSR guard\n\n const seenUuids = new Set<string>();\n\n window.addEventListener(\n \"eip6963:announceProvider\",\n (event: Event) => {\n const e = event as EIP6963AnnounceProviderEvent;\n const { info, provider } = e.detail;\n\n if (seenUuids.has(info.uuid)) return;\n seenUuids.add(info.uuid);\n\n registry.registerOrMerge({\n chain: \"evm\",\n name: info.name,\n icon: info.icon,\n rdns: info.rdns,\n uuid: info.uuid,\n provider,\n });\n },\n );\n\n window.dispatchEvent(new CustomEvent(\"eip6963:requestProvider\"));\n\n // Re-request after 100ms to catch wallets that load slightly after the SDK\n setTimeout(\n () => window.dispatchEvent(new CustomEvent(\"eip6963:requestProvider\")),\n 100,\n );\n}\n","import { getWallets } from \"@wallet-standard/app\";\nimport type { StandardWallet, WalletWithRdns } from \"../types\";\nimport type { Registry } from \"../core/registry\";\n\nexport function startSolanaDiscovery(registry: Registry): void {\n if (typeof window === \"undefined\") return; // SSR guard\n\n const { get, on } = getWallets();\n\n function register(wallet: StandardWallet): void {\n const required = [\n \"standard:connect\",\n \"solana:signTransaction\",\n \"solana:signMessage\",\n ];\n if (!required.every((f) => f in wallet.features)) return;\n\n registry.registerOrMerge({\n chain: \"solana\",\n name: wallet.name,\n icon: wallet.icon,\n rdns: (wallet as WalletWithRdns).rdns ?? undefined,\n provider: wallet,\n });\n }\n\n (get() as StandardWallet[]).forEach(register);\n\n on(\"register\", (...wallets) =>\n (wallets as StandardWallet[]).forEach(register),\n );\n\n on(\"unregister\", (...wallets) =>\n (wallets as StandardWallet[]).forEach((w) => registry.unregister(w)),\n );\n}\n","import { createEmitter } from \"./core/emitter\";\nimport { createRegistry } from \"./core/registry\";\nimport { createSessionManager } from \"./core/session\";\nimport { createChainStore } from \"./core/chainStore\";\nimport { createRouter } from \"./core/router\";\nimport { createProvider } from \"./provider\";\nimport { startEvmDiscovery } from \"./evm/discovery\";\nimport { startSolanaDiscovery } from \"./solana/discovery\";\nimport { BUILT_IN_CHAINS } from \"./constants\";\nimport type { DecaneConfig, DecaneProvider } from \"./types\";\n\nexport function createDecane(config: DecaneConfig = {}): DecaneProvider {\n const emitter = createEmitter();\n const registry = createRegistry(emitter);\n const session = createSessionManager();\n const builtIn = config.supportedChainIds\n ? BUILT_IN_CHAINS.filter((c) => config.supportedChainIds!.includes(c.id))\n : BUILT_IN_CHAINS;\n\n const chainStore = createChainStore([\n ...builtIn,\n ...(config.chains ?? []),\n ]);\n const router = createRouter({ registry, session, chainStore });\n\n startEvmDiscovery(registry);\n startSolanaDiscovery(registry);\n\n return createProvider({ config, registry, session, chainStore, router, emitter });\n}\n","import React, { useEffect, useCallback, useState } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport type { DecaneProvider, UnifiedWalletAccount, ChainType } from \"../types\";\nimport { CSS_VARS } from \"./styles\";\nimport { WalletIcon } from \"./icons\";\n\ninterface WalletSelectorProps {\n provider: DecaneProvider;\n open: boolean;\n onClose: () => void;\n onConnect: (wallet: UnifiedWalletAccount, preference?: ChainType) => void;\n theme?: \"light\" | \"dark\" | \"auto\";\n networks?: \"evm\" | \"solana\" | \"all\";\n}\n\ntype FilterType = \"all\" | \"evm\" | \"solana\";\n\nconst FONT_URL =\n \"https://fonts.googleapis.com/css2?family=Plus+Jakarta+Sans:wght@400;500;600;700;800&display=swap\";\n\nfunction injectTokens(theme: \"light\" | \"dark\" | \"auto\"): void {\n let resolved: \"light\" | \"dark\";\n if (theme === \"auto\") {\n resolved = window.matchMedia(\"(prefers-color-scheme: dark)\").matches\n ? \"dark\"\n : \"light\";\n } else {\n resolved = theme;\n }\n let styleEl = document.getElementById(\"decane-tokens\") as HTMLStyleElement | null;\n if (!styleEl) {\n styleEl = document.createElement(\"style\");\n styleEl.id = \"decane-tokens\";\n document.head.appendChild(styleEl);\n }\n styleEl.textContent = `:root { ${CSS_VARS[resolved]} }`;\n}\n\nfunction injectFont(): void {\n if (document.getElementById(\"decane-font\")) return;\n const link = document.createElement(\"link\");\n link.id = \"decane-font\";\n link.rel = \"stylesheet\";\n link.href = FONT_URL;\n document.head.appendChild(link);\n}\n\nconst badgeBase: React.CSSProperties = {\n display: \"inline-flex\",\n alignItems: \"center\",\n padding: \"3px 8px\",\n borderRadius: 20,\n fontSize: 10,\n fontWeight: 700,\n letterSpacing: \"0.04em\",\n textTransform: \"uppercase\",\n};\n\nfunction ChainBadges({ chainSupport }: { chainSupport: readonly string[] }) {\n const hasEvm = chainSupport.includes(\"evm\");\n const hasSol = chainSupport.includes(\"solana\");\n return (\n <div style={{ display: \"flex\", gap: 4 }}>\n {hasEvm && (\n <span style={{ ...badgeBase, background: \"var(--dc-badge-evm)\", color: \"var(--dc-badge-evm-text)\" }}>\n EVM\n </span>\n )}\n {hasSol && (\n <span style={{ ...badgeBase, background: \"var(--dc-badge-sol)\", color: \"var(--dc-badge-sol-text)\", border: \"1px solid var(--dc-border)\" }}>\n SVM\n </span>\n )}\n </div>\n );\n}\n\ninterface WalletRowProps {\n wallet: UnifiedWalletAccount;\n onClick: () => void;\n}\n\nfunction WalletRow({ wallet, onClick }: WalletRowProps) {\n const [hovered, setHovered] = useState(false);\n const [focused, setFocused] = useState(false);\n\n return (\n <button\n onClick={onClick}\n onMouseEnter={() => setHovered(true)}\n onMouseLeave={() => setHovered(false)}\n onFocus={() => setFocused(true)}\n onBlur={() => setFocused(false)}\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: 12,\n width: \"100%\",\n padding: \"11px 14px\",\n background: hovered ? \"var(--dc-surface-hover)\" : \"transparent\",\n border: focused ? \"1px solid var(--dc-border-accent)\" : \"1px solid transparent\",\n borderRadius: 10,\n cursor: \"pointer\",\n textAlign: \"left\",\n transition: \"background 0.12s, border-color 0.12s\",\n outline: \"none\",\n fontFamily: \"inherit\",\n }}\n >\n <WalletIcon src={wallet.icon || undefined} name={wallet.name} size={38} />\n <span style={{ flex: 1, fontSize: 14, fontWeight: 600, color: \"var(--dc-text)\", letterSpacing: \"-0.01em\" }}>\n {wallet.name}\n </span>\n <ChainBadges chainSupport={wallet.chainSupport} />\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\"\n style={{ color: hovered ? \"var(--dc-text-secondary)\" : \"var(--dc-text-muted)\", flexShrink: 0, transition: \"color 0.12s\" }}>\n <path d=\"M5 2.5L9.5 7L5 11.5\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n </button>\n );\n}\n\ninterface FilterTabProps {\n label: string;\n active: boolean;\n onClick: () => void;\n}\n\nfunction FilterTab({ label, active, onClick }: FilterTabProps) {\n const [hovered, setHovered] = useState(false);\n return (\n <button\n onClick={onClick}\n onMouseEnter={() => setHovered(true)}\n onMouseLeave={() => setHovered(false)}\n style={{\n flex: 1,\n padding: \"6px 8px\",\n borderRadius: 8,\n border: active ? \"1px solid var(--dc-border-accent)\" : \"1px solid transparent\",\n background: active ? \"rgba(245,200,0,0.1)\" : hovered ? \"var(--dc-surface-hover)\" : \"transparent\",\n color: active ? \"var(--dc-accent)\" : \"var(--dc-text-muted)\",\n fontSize: 11,\n fontWeight: 700,\n letterSpacing: \"0.04em\",\n textTransform: \"uppercase\",\n cursor: \"pointer\",\n transition: \"all 0.12s\",\n fontFamily: \"inherit\",\n outline: \"none\",\n }}\n >\n {label}\n </button>\n );\n}\n\ninterface ChainOptionProps {\n label: string;\n description: string;\n badges: React.ReactNode;\n onClick: () => void;\n}\n\nfunction ChainOption({ label, description, badges, onClick }: ChainOptionProps) {\n const [hovered, setHovered] = useState(false);\n return (\n <button\n onClick={onClick}\n onMouseEnter={() => setHovered(true)}\n onMouseLeave={() => setHovered(false)}\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"flex-start\",\n gap: 6,\n width: \"100%\",\n padding: \"14px 16px\",\n background: hovered ? \"var(--dc-surface-hover)\" : \"var(--dc-surface)\",\n border: hovered ? \"1px solid var(--dc-border-accent)\" : \"1px solid var(--dc-border)\",\n borderRadius: 12,\n cursor: \"pointer\",\n textAlign: \"left\",\n transition: \"all 0.12s\",\n fontFamily: \"inherit\",\n outline: \"none\",\n }}\n >\n {badges}\n <span style={{ fontSize: 13, fontWeight: 700, color: \"var(--dc-text)\" }}>{label}</span>\n <span style={{ fontSize: 11, color: \"var(--dc-text-muted)\", lineHeight: 1.4 }}>{description}</span>\n </button>\n );\n}\n\nexport function WalletSelector({\n provider,\n open,\n onClose,\n onConnect,\n theme = \"auto\",\n networks = \"all\",\n}: WalletSelectorProps) {\n const [search, setSearch] = useState(\"\");\n const [filter, setFilter] = useState<FilterType>(\"all\");\n const [pendingWallet, setPendingWallet] = useState<UnifiedWalletAccount | null>(null);\n\n useEffect(() => {\n if (!open) return;\n injectFont();\n injectTokens(theme);\n if (theme !== \"auto\") return;\n const mq = window.matchMedia(\"(prefers-color-scheme: dark)\");\n const handler = () => injectTokens(\"auto\");\n mq.addEventListener(\"change\", handler);\n return () => mq.removeEventListener(\"change\", handler);\n }, [open, theme]);\n\n useEffect(() => {\n if (!open) {\n setSearch(\"\");\n setFilter(\"all\");\n setPendingWallet(null);\n return;\n }\n return () => {\n document.getElementById(\"decane-tokens\")?.remove();\n };\n }, [open]);\n\n const handleKey = useCallback(\n (e: KeyboardEvent) => {\n if (e.key === \"Escape\") {\n if (pendingWallet) {\n setPendingWallet(null);\n } else {\n onClose();\n }\n }\n },\n [onClose, pendingWallet],\n );\n\n useEffect(() => {\n if (!open) return;\n document.addEventListener(\"keydown\", handleKey);\n return () => document.removeEventListener(\"keydown\", handleKey);\n }, [open, handleKey]);\n\n if (!open) return null;\n\n const q = search.toLowerCase();\n\n // Pre-filter by configured networks before anything else\n const networkWallets = provider.wallets.filter((w) => {\n const cs = w.chainSupport as string[];\n if (networks === \"evm\") return cs.includes(\"evm\");\n if (networks === \"solana\") return cs.includes(\"solana\");\n return true;\n });\n\n const baseWallets =\n filter === \"evm\"\n ? networkWallets.filter((w) => (w.chainSupport as string[]).includes(\"evm\"))\n : filter === \"solana\"\n ? networkWallets.filter((w) => (w.chainSupport as string[]).includes(\"solana\"))\n : networkWallets;\n const filtered = q\n ? baseWallets.filter((w) => w.name.toLowerCase().includes(q))\n : baseWallets;\n\n function handleWalletClick(wallet: UnifiedWalletAccount) {\n const cs = wallet.chainSupport as string[];\n const isMulti = cs.includes(\"evm\") && cs.includes(\"solana\");\n if (isMulti && networks === \"all\") {\n // Show chain picker only when the dApp supports both network types\n setPendingWallet(wallet);\n } else {\n const preference: ChainType | undefined =\n networks === \"evm\" ? \"evm\" :\n networks === \"solana\" ? \"solana\" :\n undefined;\n onConnect(wallet, preference);\n onClose();\n }\n }\n\n function handleChainChoice(preference?: ChainType) {\n if (!pendingWallet) return;\n onConnect(pendingWallet, preference);\n onClose();\n }\n\n const modal = (\n <div\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label=\"Connect wallet\"\n style={{\n position: \"fixed\",\n inset: 0,\n zIndex: 9999,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n padding: \"16px\",\n fontFamily: \"var(--dc-font-sans)\",\n }}\n >\n {/* Backdrop */}\n <div\n onClick={() => {\n if (pendingWallet) {\n setPendingWallet(null);\n } else {\n onClose();\n }\n }}\n style={{\n position: \"absolute\",\n inset: 0,\n background: \"var(--dc-bg-overlay)\",\n backdropFilter: \"blur(8px)\",\n WebkitBackdropFilter: \"blur(8px)\",\n }}\n />\n\n {/* Modal card */}\n <div\n style={{\n position: \"relative\",\n background: \"var(--dc-bg)\",\n border: \"1px solid var(--dc-border)\",\n borderRadius: 20,\n width: \"100%\",\n maxWidth: 400,\n maxHeight: \"85vh\",\n display: \"flex\",\n flexDirection: \"column\",\n boxShadow: \"0 24px 64px rgba(0,0,0,0.6), 0 0 0 1px rgba(255,255,255,0.04)\",\n overflow: \"hidden\",\n }}\n >\n {/* Gold top accent */}\n <div\n style={{\n height: 2,\n background: \"linear-gradient(90deg, transparent, var(--dc-accent) 30%, var(--dc-accent) 70%, transparent)\",\n }}\n />\n\n {pendingWallet ? (\n /* ── Chain picker step ───────────────────────────────────────── */\n <>\n {/* Header */}\n <div style={{ padding: \"18px 20px 16px\", display: \"flex\", alignItems: \"center\", gap: 10 }}>\n <button\n onClick={() => setPendingWallet(null)}\n aria-label=\"Back\"\n style={{\n background: \"var(--dc-surface)\",\n border: \"1px solid var(--dc-border)\",\n borderRadius: 8,\n width: 28,\n height: 28,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n cursor: \"pointer\",\n color: \"var(--dc-text-muted)\",\n flexShrink: 0,\n fontFamily: \"inherit\",\n padding: 0,\n }}\n >\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\">\n <path d=\"M7.5 2L3 6l4.5 4\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n </button>\n <h2 style={{ margin: 0, fontSize: 16, fontWeight: 800, color: \"var(--dc-text)\", letterSpacing: \"-0.02em\" }}>\n Choose networks\n </h2>\n <button\n onClick={onClose}\n aria-label=\"Close\"\n style={{\n marginLeft: \"auto\",\n background: \"var(--dc-surface)\",\n border: \"1px solid var(--dc-border)\",\n borderRadius: 8,\n width: 28,\n height: 28,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n cursor: \"pointer\",\n color: \"var(--dc-text-muted)\",\n flexShrink: 0,\n fontFamily: \"inherit\",\n padding: 0,\n }}\n >\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\">\n <path d=\"M1.5 1.5L10.5 10.5M10.5 1.5L1.5 10.5\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n </svg>\n </button>\n </div>\n\n {/* Wallet preview */}\n <div\n style={{\n margin: \"0 20px 16px\",\n padding: \"12px 14px\",\n background: \"var(--dc-surface)\",\n border: \"1px solid var(--dc-border)\",\n borderRadius: 12,\n display: \"flex\",\n alignItems: \"center\",\n gap: 12,\n }}\n >\n <WalletIcon src={pendingWallet.icon || undefined} name={pendingWallet.name} size={36} />\n <div>\n <div style={{ fontSize: 14, fontWeight: 700, color: \"var(--dc-text)\" }}>{pendingWallet.name}</div>\n <div style={{ fontSize: 11, color: \"var(--dc-text-muted)\", marginTop: 2 }}>Multi-chain wallet detected</div>\n </div>\n </div>\n\n {/* Options */}\n <div style={{ padding: \"0 12px 20px\", display: \"flex\", flexDirection: \"column\", gap: 8 }}>\n <ChainOption\n label=\"EVM networks\"\n description=\"Connect your Ethereum-compatible address only\"\n badges={\n <span style={{ ...badgeBase, background: \"var(--dc-badge-evm)\", color: \"var(--dc-badge-evm-text)\" }}>EVM</span>\n }\n onClick={() => handleChainChoice(\"evm\")}\n />\n <ChainOption\n label=\"Solana network\"\n description=\"Connect your Solana address only\"\n badges={\n <span style={{ ...badgeBase, background: \"var(--dc-badge-sol)\", color: \"var(--dc-badge-sol-text)\", border: \"1px solid var(--dc-border)\" }}>SVM</span>\n }\n onClick={() => handleChainChoice(\"solana\")}\n />\n <ChainOption\n label=\"Both networks\"\n description=\"Connect EVM and Solana addresses together\"\n badges={\n <div style={{ display: \"flex\", gap: 4 }}>\n <span style={{ ...badgeBase, background: \"var(--dc-badge-evm)\", color: \"var(--dc-badge-evm-text)\" }}>EVM</span>\n <span style={{ ...badgeBase, background: \"var(--dc-badge-sol)\", color: \"var(--dc-badge-sol-text)\", border: \"1px solid var(--dc-border)\" }}>SVM</span>\n </div>\n }\n onClick={() => handleChainChoice(undefined)}\n />\n </div>\n </>\n ) : (\n /* ── Wallet list step ────────────────────────────────────────── */\n <>\n {/* Header */}\n <div style={{ padding: \"18px 20px 0\" }}>\n <div style={{ display: \"flex\", alignItems: \"flex-start\", justifyContent: \"space-between\", marginBottom: 14 }}>\n <div>\n <h2 style={{ margin: 0, fontSize: 17, fontWeight: 800, color: \"var(--dc-text)\", letterSpacing: \"-0.02em\", lineHeight: 1.2 }}>\n Connect wallet\n </h2>\n {networkWallets.length > 0 && (\n <p style={{ margin: \"3px 0 0\", fontSize: 12, color: \"var(--dc-text-muted)\" }}>\n {networkWallets.length} wallet{networkWallets.length !== 1 ? \"s\" : \"\"} detected\n </p>\n )}\n </div>\n <button\n onClick={onClose}\n aria-label=\"Close\"\n style={{\n background: \"var(--dc-surface)\",\n border: \"1px solid var(--dc-border)\",\n cursor: \"pointer\",\n padding: 0,\n width: 28,\n height: 28,\n borderRadius: 8,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n color: \"var(--dc-text-muted)\",\n flexShrink: 0,\n transition: \"background 0.12s, color 0.12s\",\n fontFamily: \"inherit\",\n }}\n onMouseEnter={(e) => {\n (e.currentTarget as HTMLButtonElement).style.background = \"var(--dc-surface-hover)\";\n (e.currentTarget as HTMLButtonElement).style.color = \"var(--dc-text)\";\n }}\n onMouseLeave={(e) => {\n (e.currentTarget as HTMLButtonElement).style.background = \"var(--dc-surface)\";\n (e.currentTarget as HTMLButtonElement).style.color = \"var(--dc-text-muted)\";\n }}\n >\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\">\n <path d=\"M1.5 1.5L10.5 10.5M10.5 1.5L1.5 10.5\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n </svg>\n </button>\n </div>\n\n {/* Search */}\n <div style={{ position: \"relative\", marginBottom: 10 }}>\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\"\n style={{ position: \"absolute\", left: 10, top: \"50%\", transform: \"translateY(-50%)\", color: \"var(--dc-text-muted)\", pointerEvents: \"none\" }}>\n <circle cx=\"6\" cy=\"6\" r=\"4\" stroke=\"currentColor\" strokeWidth=\"1.4\" />\n <path d=\"M9.5 9.5L12 12\" stroke=\"currentColor\" strokeWidth=\"1.4\" strokeLinecap=\"round\" />\n </svg>\n <input\n type=\"text\"\n placeholder=\"Search wallets…\"\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n style={{\n width: \"100%\",\n background: \"var(--dc-surface)\",\n border: \"1px solid var(--dc-border)\",\n borderRadius: 10,\n color: \"var(--dc-text)\",\n fontSize: 13,\n padding: \"8px 12px 8px 32px\",\n outline: \"none\",\n fontFamily: \"var(--dc-font-sans)\",\n transition: \"border-color 0.15s\",\n boxSizing: \"border-box\",\n }}\n onFocus={(e) => { e.currentTarget.style.borderColor = \"var(--dc-border-accent)\"; }}\n onBlur={(e) => { e.currentTarget.style.borderColor = \"var(--dc-border)\"; }}\n />\n </div>\n\n {/* Filter tabs — hidden when dApp is locked to one network type */}\n {networks === \"all\" && (\n <div style={{ display: \"flex\", gap: 4, marginBottom: 10 }}>\n <FilterTab label=\"All\" active={filter === \"all\"} onClick={() => setFilter(\"all\")} />\n <FilterTab label=\"EVM\" active={filter === \"evm\"} onClick={() => setFilter(\"evm\")} />\n <FilterTab label=\"Solana\" active={filter === \"solana\"} onClick={() => setFilter(\"solana\")} />\n </div>\n )}\n </div>\n\n {/* Scrollable wallet list */}\n <div style={{ overflowY: \"auto\", flex: 1, padding: \"0 12px 20px\" }}>\n {filtered.length > 0 ? (\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: 2 }}>\n {filtered.map((w) => (\n <WalletRow key={w.id} wallet={w} onClick={() => handleWalletClick(w)} />\n ))}\n </div>\n ) : (\n <div style={{ textAlign: \"center\", padding: \"32px 16px\", color: \"var(--dc-text-muted)\", fontSize: 13 }}>\n {q ? `No wallets matching \"${q}\"` : \"No wallets detected\"}\n </div>\n )}\n </div>\n\n {/* Footer */}\n <div style={{ padding: \"10px 20px 14px\", borderTop: \"1px solid var(--dc-border)\", textAlign: \"center\", fontSize: 11, color: \"var(--dc-text-muted)\" }}>\n Don't see your wallet? Make sure it's installed and unlocked\n </div>\n </>\n )}\n </div>\n </div>\n );\n\n return createPortal(modal, document.body);\n}\n","export const tokens = {\n // ── Gold palette ──────────────────────────────────────────────────────────\n gold: {\n 50: \"#FFFDF0\",\n 100: \"#FFF8D6\",\n 200: \"#FFEF99\",\n 300: \"#FFE04D\",\n 400: \"#F5C800\", // primary gold — buttons, accents\n 500: \"#D4A800\", // darker gold — hover states\n 600: \"#A37F00\", // deep gold — borders, active\n 700: \"#7A5E00\",\n 800: \"#4D3B00\",\n 900: \"#261D00\",\n },\n\n // ── Black / dark palette ──────────────────────────────────────────────────\n black: {\n 0: \"#FFFFFF\",\n 50: \"#F9F9F7\",\n 100: \"#F0EFEB\",\n 200: \"#DDDCDA\",\n 300: \"#BDBBB8\",\n 400: \"#8A8884\",\n 500: \"#5C5A57\",\n 600: \"#3D3C39\",\n 700: \"#2A2927\",\n 800: \"#1A1917\",\n 900: \"#0D0D0B\",\n 950: \"#070706\",\n },\n\n // ── Semantic tokens — light mode ──────────────────────────────────────────\n light: {\n bg: \"#FFFFFF\",\n bgOverlay: \"rgba(0, 0, 0, 0.55)\",\n surface: \"#F9F9F7\",\n surfaceHover: \"#F0EFEB\",\n border: \"#DDDCDA\",\n borderAccent: \"#F5C800\",\n text: \"#0D0D0B\",\n textSecondary: \"#5C5A57\",\n textMuted: \"#8A8884\",\n accent: \"#F5C800\",\n accentHover: \"#D4A800\",\n accentText: \"#0D0D0B\",\n badgeEvm: \"#1A1917\",\n badgeEvmText: \"#F5C800\",\n badgeSolana: \"#F5C800\",\n badgeSolanaText: \"#0D0D0B\",\n danger: \"#CC3300\",\n },\n\n // ── Semantic tokens — dark mode ───────────────────────────────────────────\n dark: {\n bg: \"#0D0D0B\",\n bgOverlay: \"rgba(0, 0, 0, 0.75)\",\n surface: \"#1A1917\",\n surfaceHover: \"#2A2927\",\n border: \"#3D3C39\",\n borderAccent: \"#F5C800\",\n text: \"#F9F9F7\",\n textSecondary: \"#BDBBB8\",\n textMuted: \"#8A8884\",\n accent: \"#F5C800\",\n accentHover: \"#FFE04D\",\n accentText: \"#0D0D0B\",\n badgeEvm: \"#F5C800\",\n badgeEvmText: \"#0D0D0B\",\n badgeSolana: \"#1A1917\",\n badgeSolanaText: \"#F5C800\",\n danger: \"#FF5533\",\n },\n} as const;\n\n// Font stacks — used by the modal container and all child elements via var()\nexport const FONT_SANS = \"'Plus Jakarta Sans', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif\";\nexport const FONT_MONO = \"'JetBrains Mono', 'Fira Code', ui-monospace, monospace\";\n\nexport const CSS_VARS = {\n light: `\n --dc-font-sans: ${FONT_SANS};\n --dc-font-mono: ${FONT_MONO};\n --dc-bg: ${tokens.light.bg};\n --dc-bg-overlay: ${tokens.light.bgOverlay};\n --dc-surface: ${tokens.light.surface};\n --dc-surface-hover: ${tokens.light.surfaceHover};\n --dc-border: ${tokens.light.border};\n --dc-border-accent: ${tokens.light.borderAccent};\n --dc-text: ${tokens.light.text};\n --dc-text-secondary: ${tokens.light.textSecondary};\n --dc-text-muted: ${tokens.light.textMuted};\n --dc-accent: ${tokens.light.accent};\n --dc-accent-hover: ${tokens.light.accentHover};\n --dc-accent-text: ${tokens.light.accentText};\n --dc-badge-evm: ${tokens.light.badgeEvm};\n --dc-badge-evm-text: ${tokens.light.badgeEvmText};\n --dc-badge-sol: ${tokens.light.badgeSolana};\n --dc-badge-sol-text: ${tokens.light.badgeSolanaText};\n --dc-danger: ${tokens.light.danger};\n `,\n dark: `\n --dc-font-sans: ${FONT_SANS};\n --dc-font-mono: ${FONT_MONO};\n --dc-bg: ${tokens.dark.bg};\n --dc-bg-overlay: ${tokens.dark.bgOverlay};\n --dc-surface: ${tokens.dark.surface};\n --dc-surface-hover: ${tokens.dark.surfaceHover};\n --dc-border: ${tokens.dark.border};\n --dc-border-accent: ${tokens.dark.borderAccent};\n --dc-text: ${tokens.dark.text};\n --dc-text-secondary: ${tokens.dark.textSecondary};\n --dc-text-muted: ${tokens.dark.textMuted};\n --dc-accent: ${tokens.dark.accent};\n --dc-accent-hover: ${tokens.dark.accentHover};\n --dc-accent-text: ${tokens.dark.accentText};\n --dc-badge-evm: ${tokens.dark.badgeEvm};\n --dc-badge-evm-text: ${tokens.dark.badgeEvmText};\n --dc-badge-sol: ${tokens.dark.badgeSolana};\n --dc-badge-sol-text: ${tokens.dark.badgeSolanaText};\n --dc-danger: ${tokens.dark.danger};\n `,\n} as const;\n","import React from \"react\";\n\ninterface WalletIconProps {\n src?: string;\n name: string;\n size?: number;\n}\n\nexport function WalletIcon({ src, name, size = 36 }: WalletIconProps) {\n if (src) {\n return (\n <img\n src={src}\n alt={name}\n width={size}\n height={size}\n style={{ borderRadius: size * 0.25, objectFit: \"cover\", flexShrink: 0 }}\n />\n );\n }\n\n const initial = name.charAt(0).toUpperCase();\n return (\n <div\n style={{\n width: size,\n height: size,\n borderRadius: size * 0.25,\n background: \"linear-gradient(135deg, var(--dc-surface-hover), var(--dc-surface-active, var(--dc-surface-hover)))\",\n border: \"1px solid var(--dc-border)\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n fontSize: size * 0.38,\n fontWeight: 800,\n color: \"var(--dc-accent)\",\n flexShrink: 0,\n fontFamily: \"var(--dc-font-sans)\",\n letterSpacing: \"-0.02em\",\n }}\n >\n {initial}\n </div>\n );\n}\n","import React, {\n createContext,\n useCallback,\n useContext,\n useRef,\n useState,\n type ReactNode,\n} from \"react\";\nimport { createDecane } from \"../factory\";\nimport { WalletSelector } from \"./WalletSelector\";\nimport type { DecaneProvider, DecaneConfig, UnifiedWalletAccount, ChainType } from \"../types\";\n\nexport type Theme = \"light\" | \"dark\" | \"auto\";\n\ninterface DecaneContextValue {\n provider: DecaneProvider;\n selectorOpen: boolean;\n openSelector: () => void;\n closeSelector: () => void;\n theme: Theme;\n setTheme: (t: Theme) => void;\n}\n\nconst DecaneContext = createContext<DecaneContextValue | null>(null);\n\ninterface DecaneKitProps {\n config?: DecaneConfig;\n children: ReactNode;\n}\n\nexport function DecaneKit({ config, children }: DecaneKitProps) {\n const ref = useRef<DecaneProvider | null>(null);\n if (!ref.current) {\n ref.current = createDecane(config);\n }\n\n const [selectorOpen, setSelectorOpen] = useState(false);\n const [theme, setTheme] = useState<Theme>(config?.theme ?? \"auto\");\n\n const openSelector = useCallback(() => setSelectorOpen(true), []);\n const closeSelector = useCallback(() => setSelectorOpen(false), []);\n\n const handleConnect = useCallback(\n (wallet: UnifiedWalletAccount, preference?: ChainType) => {\n ref.current!.connect(wallet, preference).catch(console.error);\n },\n [],\n );\n\n return (\n <DecaneContext.Provider\n value={{ provider: ref.current, selectorOpen, openSelector, closeSelector, theme, setTheme }}\n >\n {children}\n <WalletSelector\n provider={ref.current}\n open={selectorOpen}\n onClose={closeSelector}\n onConnect={handleConnect}\n theme={theme}\n networks={config?.networks ?? \"all\"}\n />\n </DecaneContext.Provider>\n );\n}\n\nexport function useDecaneContext(): DecaneContextValue {\n const ctx = useContext(DecaneContext);\n if (!ctx) {\n throw new Error(\n \"Decane hooks must be called inside <DecaneKit>. \" +\n \"Wrap your app: <DecaneKit config={...}><App /></DecaneKit>\",\n );\n }\n return ctx;\n}\n","import { useState, useEffect, useCallback } from \"react\";\nimport { useDecaneContext } from \"./context\";\nimport type { DecaneProvider, UnifiedWalletAccount, ChainType, ChainDescriptor } from \"../types\";\nimport { DecaneError, DecaneErrorCode } from \"../errors\";\n\n// ── useDecane ─────────────────────────────────────────────────────────────────\n\nexport function useDecane() {\n const { provider, theme, setTheme } = useDecaneContext();\n const [, forceUpdate] = useState(0);\n\n useEffect(() => {\n const refresh = () => forceUpdate((n) => n + 1);\n const events = [\n \"connect\", \"disconnect\",\n \"walletRegistered\", \"walletUpdated\", \"walletUnregistered\",\n \"chainAdded\", \"chainRemoved\",\n ] as const;\n events.forEach((e) => provider.on(e, refresh));\n return () => events.forEach((e) => provider.off(e, refresh));\n }, [provider]);\n\n return {\n provider,\n wallets: provider.wallets,\n evmWallets: provider.evmWallets,\n solanaWallets: provider.solanaWallets,\n multiChainWallets: provider.multiChainWallets,\n chains: provider.chains,\n connectedWallet: provider.connectedWallet,\n activeSession: provider.activeSession,\n activeChain: provider.activeChain,\n isConnected: !!provider.connectedWallet,\n theme,\n setTheme,\n connect: (wallet: UnifiedWalletAccount, preference?: ChainType) =>\n provider.connect(wallet, preference),\n disconnect: () => provider.disconnect(),\n addChain: (chain: ChainDescriptor) => provider.addChain(chain),\n removeChain: (chainId: string) => provider.removeChain(chainId),\n };\n}\n\n// ── useWalletSelector ─────────────────────────────────────────────────────────\n// Modal is owned by <DecaneKit> — this hook just exposes open/close controls.\n\nexport function useWalletSelector() {\n const { selectorOpen, openSelector, closeSelector } = useDecaneContext();\n return { isOpen: selectorOpen, open: openSelector, close: closeSelector };\n}\n\n// ── useChainSwitch ────────────────────────────────────────────────────────────\n\nexport function useChainSwitch() {\n const { provider } = useDecaneContext();\n const [, forceUpdate] = useState(0);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<DecaneError | null>(null);\n\n useEffect(() => {\n const refresh = () => forceUpdate((n) => n + 1);\n provider.on(\"connect\", refresh);\n provider.on(\"disconnect\", refresh);\n return () => {\n provider.off(\"connect\", refresh);\n provider.off(\"disconnect\", refresh);\n };\n }, [provider]);\n\n const switchChain = useCallback(\n async (chainId: string): Promise<void> => {\n setLoading(true);\n setError(null);\n try {\n const existingScope = provider.activeSession?.grantedScopes[chainId];\n await provider.request({\n method: \"wallet_requestPermissions\",\n params: [\n {\n requiredScopes: {\n [chainId]: existingScope ?? {\n methods: [\"wallet_sendTransaction\", \"wallet_signMessage\"],\n accounts: [],\n events: [],\n },\n },\n optionalScopes: {},\n },\n ],\n });\n forceUpdate((n) => n + 1);\n } catch (err) {\n const e = err instanceof DecaneError\n ? err\n : new DecaneError(DecaneErrorCode.PROVIDER_ERROR, String(err));\n setError(e);\n throw err;\n } finally {\n setLoading(false);\n }\n },\n [provider],\n );\n\n return {\n switchChain,\n loading,\n error,\n activeChain: provider.activeChain,\n grantedChains: provider.activeSession\n ? Object.keys(provider.activeSession.grantedScopes)\n : [],\n };\n}\n\n// ── internal: resolve chain + account from active session ─────────────────────\n\nfunction resolveScope(\n provider: DecaneProvider,\n chainId?: string,\n account?: string,\n): { chain: string; account: string } {\n const chain = chainId ?? provider.activeChain;\n if (!chain) {\n throw new DecaneError(\n DecaneErrorCode.NO_ACTIVE_SESSION,\n \"No active chain — connect a wallet first.\",\n );\n }\n const scope = provider.activeSession?.grantedScopes[chain];\n const resolved = account ?? scope?.accounts[0]?.split(\":\").pop() ?? \"\";\n return { chain, account: resolved };\n}\n\n// ── useSignMessage ────────────────────────────────────────────────────────────\n\nexport function useSignMessage() {\n const { provider } = useDecaneContext();\n const [signature, setSignature] = useState<string | null>(null);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<DecaneError | null>(null);\n\n const signMessage = useCallback(\n async (\n message: string,\n options?: { chainId?: string; account?: string },\n ): Promise<string> => {\n const { chain, account } = resolveScope(\n provider, options?.chainId, options?.account,\n );\n setLoading(true);\n setError(null);\n try {\n const sig = (await provider.request({\n method: \"wallet_signMessage\",\n params: [chain, account, message],\n })) as string;\n setSignature(sig);\n return sig;\n } catch (err) {\n const e = err instanceof DecaneError\n ? err\n : new DecaneError(DecaneErrorCode.PROVIDER_ERROR, String(err));\n setError(e);\n throw err;\n } finally {\n setLoading(false);\n }\n },\n [provider],\n );\n\n const reset = useCallback(() => { setSignature(null); setError(null); }, []);\n return { signMessage, signature, loading, error, reset };\n}\n\n// ── useSendTransaction ────────────────────────────────────────────────────────\n\nexport interface TxParams {\n to: string;\n value?: string; // decimal wei (\"1000000\") or hex (\"0x0f4240\")\n data?: string;\n gas?: string;\n gasPrice?: string;\n}\n\nexport function useSendTransaction() {\n const { provider } = useDecaneContext();\n const [txHash, setTxHash] = useState<string | null>(null);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<DecaneError | null>(null);\n\n const sendTransaction = useCallback(\n async (\n tx: TxParams,\n options?: { chainId?: string; from?: string },\n ): Promise<string> => {\n const { chain, account } = resolveScope(\n provider, options?.chainId, options?.from,\n );\n const value = tx.value\n ? tx.value.startsWith(\"0x\")\n ? tx.value\n : `0x${parseInt(tx.value, 10).toString(16)}`\n : \"0x0\";\n\n setLoading(true);\n setError(null);\n try {\n const hash = (await provider.request({\n method: \"wallet_sendTransaction\",\n params: [chain, account, { ...tx, value }],\n })) as string;\n setTxHash(hash);\n return hash;\n } catch (err) {\n const e = err instanceof DecaneError\n ? err\n : new DecaneError(DecaneErrorCode.PROVIDER_ERROR, String(err));\n setError(e);\n throw err;\n } finally {\n setLoading(false);\n }\n },\n [provider],\n );\n\n const reset = useCallback(() => { setTxHash(null); setError(null); }, []);\n return { sendTransaction, txHash, loading, error, reset };\n}\n\n// ── useSignTypedData ──────────────────────────────────────────────────────────\n// EVM only — throws EVM_ONLY_METHOD if called on a Solana chain.\n\nexport function useSignTypedData() {\n const { provider } = useDecaneContext();\n const [signature, setSignature] = useState<string | null>(null);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<DecaneError | null>(null);\n\n const signTypedData = useCallback(\n async (\n typedData: { domain: unknown; types: unknown; message: unknown },\n options?: { chainId?: string; account?: string },\n ): Promise<string> => {\n const { chain, account } = resolveScope(\n provider, options?.chainId, options?.account,\n );\n setLoading(true);\n setError(null);\n try {\n const sig = (await provider.request({\n method: \"wallet_signTypedData\",\n params: [chain, account, typedData],\n })) as string;\n setSignature(sig);\n return sig;\n } catch (err) {\n const e = err instanceof DecaneError\n ? err\n : new DecaneError(DecaneErrorCode.PROVIDER_ERROR, String(err));\n setError(e);\n throw err;\n } finally {\n setLoading(false);\n }\n },\n [provider],\n );\n\n const reset = useCallback(() => { setSignature(null); setError(null); }, []);\n return { signTypedData, signature, loading, error, reset };\n}\n"],"mappings":"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","names":["DecaneErrorCode","import_react","React","React","import_react","React","import_react"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/core/emitter.ts","../src/core/registry.ts","../src/errors.ts","../src/constants.ts","../src/core/session.ts","../src/core/chainStore.ts","../src/evm/adapter.ts","../src/solana/adapter.ts","../src/tron/adapter.ts","../src/bitcoin/adapter.ts","../src/core/router.ts","../src/provider.ts","../src/evm/bitcoinSnap.ts","../src/evm/discovery.ts","../src/solana/discovery.ts","../src/tron/discovery.ts","../src/bitcoin/discovery.ts","../src/factory.ts","../src/ui/WalletSelector.tsx","../src/ui/styles.ts","../src/ui/icons.tsx","../src/ui/context.tsx","../src/ui/hooks.ts"],"sourcesContent":["export { createDecane } from \"./factory\";\n\n// Public type exports\nexport type {\n DecaneProvider,\n DecaneConfig,\n UnifiedWalletAccount,\n ChainDescriptor,\n ChainSupport,\n ChainType,\n ActiveSession,\n CAIP25SessionRequest,\n CAIP25SessionResult,\n ChainScope,\n CAIP25Method,\n} from \"./types\";\n\n// Public value exports\nexport { DecaneError, DecaneErrorCode } from \"./errors\";\nexport { BUILT_IN_CHAINS, CHAINS } from \"./constants\";\nexport type { ChainId } from \"./constants\";\n\n// UI\nexport { WalletSelector } from \"./ui/WalletSelector\";\nexport { DecaneKit } from \"./ui/context\";\nexport type { Theme } from \"./ui/context\";\n\n// React hooks\nexport {\n useDecane,\n useWalletSelector,\n useChainSwitch,\n useSignMessage,\n useSendTransaction,\n useSignTypedData,\n type TxParams,\n} from \"./ui/hooks\";\n","type Handler = (...args: unknown[]) => void;\n\nexport interface Emitter {\n on(event: string, handler: Handler): void;\n off(event: string, handler: Handler): void;\n emit(event: string, ...args: unknown[]): void;\n}\n\nexport function createEmitter(): Emitter {\n const listeners = new Map<string, Set<Handler>>();\n\n return {\n on(event, handler) {\n if (!listeners.has(event)) listeners.set(event, new Set());\n listeners.get(event)!.add(handler);\n },\n\n off(event, handler) {\n listeners.get(event)?.delete(handler);\n },\n\n emit(event, ...args) {\n listeners.get(event)?.forEach((h) => h(...args));\n },\n };\n}\n","import type {\n RawWalletEntry,\n UnifiedWalletAccount,\n ChainSupport,\n EIP1193Provider,\n StandardWallet,\n TronProvider,\n BitcoinProvider,\n} from \"../types\";\nimport type { Emitter } from \"./emitter\";\n\nexport interface Registry {\n registerOrMerge(incoming: RawWalletEntry): void;\n unregister(provider: StandardWallet): void;\n get: {\n all(): UnifiedWalletAccount[];\n evm(): UnifiedWalletAccount[];\n solana(): UnifiedWalletAccount[];\n tron(): UnifiedWalletAccount[];\n bitcoin(): UnifiedWalletAccount[];\n multiChain(): UnifiedWalletAccount[];\n byId(id: string): UnifiedWalletAccount | undefined;\n };\n}\n\nexport function createRegistry(emitter: Emitter): Registry {\n const wallets: UnifiedWalletAccount[] = [];\n\n function normaliseName(name: string): string {\n return name\n .toLowerCase()\n .replace(/\\s+/g, \"\")\n .replace(/wallet$/, \"\");\n }\n\n function toUnified(incoming: RawWalletEntry): UnifiedWalletAccount {\n const id =\n incoming.rdns ??\n incoming.uuid ??\n normaliseName(incoming.name);\n\n const account: UnifiedWalletAccount = {\n id,\n name: incoming.name,\n icon: incoming.icon,\n rdns: incoming.rdns,\n chainSupport: [incoming.chain] as unknown as ChainSupport,\n };\n\n if (incoming.chain === \"evm\") {\n account.evmProvider = incoming.provider as EIP1193Provider;\n } else if (incoming.chain === \"solana\") {\n account.solanaProvider = incoming.provider as StandardWallet;\n } else if (incoming.chain === \"tron\") {\n account.tronProvider = incoming.provider as TronProvider;\n } else if (incoming.chain === \"bitcoin\") {\n account.bitcoinProvider = incoming.provider as BitcoinProvider;\n }\n\n return account;\n }\n\n function mergeInto(\n existing: UnifiedWalletAccount,\n incoming: RawWalletEntry,\n ): void {\n if (!existing.chainSupport.includes(incoming.chain)) {\n existing.chainSupport = [\n ...existing.chainSupport,\n incoming.chain,\n ].sort() as ChainSupport;\n }\n if (incoming.chain === \"evm\") existing.evmProvider = incoming.provider as EIP1193Provider;\n if (incoming.chain === \"solana\") existing.solanaProvider = incoming.provider as StandardWallet;\n if (incoming.chain === \"tron\") existing.tronProvider = incoming.provider as TronProvider;\n if (incoming.chain === \"bitcoin\") existing.bitcoinProvider = incoming.provider as BitcoinProvider;\n if (!existing.icon && incoming.icon) existing.icon = incoming.icon;\n }\n\n function registerOrMerge(incoming: RawWalletEntry): void {\n // 1. Match by rdns (primary merge key — both sides have rdns and it matches)\n if (incoming.rdns) {\n const existing = wallets.find((w) => w.rdns === incoming.rdns);\n if (existing) {\n mergeInto(existing, incoming);\n emitter.emit(\"walletUpdated\", existing);\n return;\n }\n }\n\n // 2. Match by normalised name — fallback for when rdns didn't match or\n // the incoming entry (typically a Solana Wallet Standard wallet) has no\n // rdns. Solana wallets rarely expose rdns, so this is the normal merge\n // path for multi-chain wallets like Backpack, Phantom, MetaMask.\n if (!incoming.rdns) {\n const norm = normaliseName(incoming.name);\n const existing = wallets.find(\n (w) => normaliseName(w.name) === norm,\n );\n if (existing) {\n mergeInto(existing, incoming);\n emitter.emit(\"walletUpdated\", existing);\n return;\n }\n }\n\n // 3. New wallet\n const account = toUnified(incoming);\n wallets.push(account);\n emitter.emit(\"walletRegistered\", account);\n }\n\n function unregister(provider: StandardWallet): void {\n const idx = wallets.findIndex((w) => w.solanaProvider === provider);\n if (idx === -1) return;\n const entry = wallets[idx];\n if (entry.chainSupport.length === 1) {\n wallets.splice(idx, 1);\n emitter.emit(\"walletUnregistered\", entry);\n } else {\n entry.chainSupport = [\"evm\"];\n entry.solanaProvider = undefined;\n emitter.emit(\"walletUpdated\", entry);\n }\n }\n\n return {\n registerOrMerge,\n unregister,\n get: {\n all: () => [...wallets],\n evm: () => wallets.filter((w) => (w.chainSupport as string[]).includes(\"evm\")),\n solana: () => wallets.filter((w) => (w.chainSupport as string[]).includes(\"solana\")),\n tron: () => wallets.filter((w) => (w.chainSupport as string[]).includes(\"tron\")),\n bitcoin: () => wallets.filter((w) => (w.chainSupport as string[]).includes(\"bitcoin\")),\n multiChain: () => wallets.filter((w) => w.chainSupport.length >= 2),\n byId: (id) => wallets.find((w) => w.id === id),\n },\n };\n}\n","export class DecaneError extends Error {\n constructor(\n public code: DecaneErrorCode,\n message: string,\n ) {\n super(message);\n this.name = \"DecaneError\";\n }\n}\n\nexport enum DecaneErrorCode {\n // CAIP-25 standard codes\n USER_REJECTED = 4001,\n UNAUTHORIZED = 4100,\n\n // Session\n NO_ACTIVE_SESSION = 5001,\n SCOPE_MISMATCH = 5002,\n SESSION_EXPIRED = 5003,\n\n // Chain\n UNSUPPORTED_CHAIN = 5010,\n CHAIN_NOT_IN_SCOPE = 5011,\n INVALID_CHAIN_CONFIG = 5012,\n\n // Wallet\n NO_WALLET_CONNECTED = 5020,\n WALLET_DISCONNECTED = 5021,\n PROVIDER_ERROR = 5022,\n\n // Method\n METHOD_NOT_SUPPORTED = 5030,\n EVM_ONLY_METHOD = 5031,\n}\n","import type { ChainDescriptor, ChainType } from \"./types\";\n\n// ── Built-in chains ───────────────────────────────────────────────────────────\n\nconst ETH = { name: \"Ether\", symbol: \"ETH\", decimals: 18 };\nconst SOL = { name: \"SOL\", symbol: \"SOL\", decimals: 9 };\n\nexport const BUILT_IN_CHAINS: ChainDescriptor[] = [\n // ── Tier-1 EVM ──────────────────────────────────────────────────────────────\n {\n id: \"eip155:1\",\n type: \"evm\",\n name: \"Ethereum\",\n chainId: 1,\n nativeCurrency: ETH,\n rpcUrl: \"https://cloudflare-eth.com\",\n blockExplorerUrl: \"https://etherscan.io\",\n },\n {\n id: \"eip155:8453\",\n type: \"evm\",\n name: \"Base\",\n chainId: 8453,\n nativeCurrency: ETH,\n rpcUrl: \"https://mainnet.base.org\",\n blockExplorerUrl: \"https://basescan.org\",\n },\n {\n id: \"eip155:42161\",\n type: \"evm\",\n name: \"Arbitrum One\",\n chainId: 42161,\n nativeCurrency: ETH,\n rpcUrl: \"https://arb1.arbitrum.io/rpc\",\n blockExplorerUrl: \"https://arbiscan.io\",\n },\n {\n id: \"eip155:10\",\n type: \"evm\",\n name: \"Optimism\",\n chainId: 10,\n nativeCurrency: ETH,\n rpcUrl: \"https://mainnet.optimism.io\",\n blockExplorerUrl: \"https://optimistic.etherscan.io\",\n },\n {\n id: \"eip155:56\",\n type: \"evm\",\n name: \"BNB Chain\",\n chainId: 56,\n nativeCurrency: { name: \"BNB\", symbol: \"BNB\", decimals: 18 },\n rpcUrl: \"https://bsc-dataseed.binance.org\",\n blockExplorerUrl: \"https://bscscan.com\",\n },\n {\n id: \"eip155:137\",\n type: \"evm\",\n name: \"Polygon\",\n chainId: 137,\n nativeCurrency: { name: \"MATIC\", symbol: \"MATIC\", decimals: 18 },\n rpcUrl: \"https://polygon-rpc.com\",\n blockExplorerUrl: \"https://polygonscan.com\",\n },\n\n // ── Extended EVM ecosystem ───────────────────────────────────────────────────\n {\n id: \"eip155:2741\",\n type: \"evm\",\n name: \"Abstract\",\n chainId: 2741,\n nativeCurrency: ETH,\n rpcUrl: \"https://api.mainnet.abs.xyz\",\n blockExplorerUrl: \"https://abscan.org\",\n },\n {\n id: \"eip155:888888888\",\n type: \"evm\",\n name: \"Ancient8\",\n chainId: 888888888,\n nativeCurrency: ETH,\n rpcUrl: \"https://rpc.ancient8.gg\",\n blockExplorerUrl: \"https://scan.ancient8.gg\",\n },\n {\n id: \"eip155:69000\",\n type: \"evm\",\n name: \"Animechain\",\n chainId: 69000,\n nativeCurrency: { name: \"Anime\", symbol: \"ANIME\", decimals: 18 },\n rpcUrl: \"https://rpc.animechain.ai\",\n blockExplorerUrl: \"https://explorer.animechain.ai\",\n },\n {\n id: \"eip155:33139\",\n type: \"evm\",\n name: \"ApeChain\",\n chainId: 33139,\n nativeCurrency: { name: \"ApeCoin\", symbol: \"APE\", decimals: 18 },\n rpcUrl: \"https://rpc.apechain.com/http\",\n blockExplorerUrl: \"https://apescan.io\",\n },\n {\n id: \"eip155:42170\",\n type: \"evm\",\n name: \"Arbitrum Nova\",\n chainId: 42170,\n nativeCurrency: ETH,\n rpcUrl: \"https://nova.arbitrum.io/rpc\",\n blockExplorerUrl: \"https://nova.arbiscan.io\",\n },\n {\n id: \"eip155:43114\",\n type: \"evm\",\n name: \"Avalanche\",\n chainId: 43114,\n nativeCurrency: { name: \"Avalanche\", symbol: \"AVAX\", decimals: 18 },\n rpcUrl: \"https://api.avax.network/ext/bc/C/rpc\",\n blockExplorerUrl: \"https://snowtrace.io\",\n },\n {\n id: \"eip155:8333\",\n type: \"evm\",\n name: \"B3\",\n chainId: 8333,\n nativeCurrency: ETH,\n rpcUrl: \"https://mainnet-rpc.b3.fun/http\",\n blockExplorerUrl: \"https://explorer.b3.fun\",\n },\n {\n id: \"eip155:80094\",\n type: \"evm\",\n name: \"Berachain\",\n chainId: 80094,\n nativeCurrency: { name: \"BERA\", symbol: \"BERA\", decimals: 18 },\n rpcUrl: \"https://rpc.berachain.com\",\n blockExplorerUrl: \"https://berascan.com\",\n },\n {\n id: \"eip155:81457\",\n type: \"evm\",\n name: \"Blast\",\n chainId: 81457,\n nativeCurrency: ETH,\n rpcUrl: \"https://rpc.blast.io\",\n blockExplorerUrl: \"https://blastscan.io\",\n },\n {\n id: \"eip155:60808\",\n type: \"evm\",\n name: \"BOB\",\n chainId: 60808,\n nativeCurrency: ETH,\n rpcUrl: \"https://rpc.gobob.xyz\",\n blockExplorerUrl: \"https://explorer.gobob.xyz\",\n },\n {\n id: \"eip155:288\",\n type: \"evm\",\n name: \"Boba Network\",\n chainId: 288,\n nativeCurrency: ETH,\n rpcUrl: \"https://mainnet.boba.network\",\n blockExplorerUrl: \"https://bobascan.com\",\n },\n {\n id: \"eip155:42220\",\n type: \"evm\",\n name: \"Celo\",\n chainId: 42220,\n nativeCurrency: { name: \"CELO\", symbol: \"CELO\", decimals: 18 },\n rpcUrl: \"https://forno.celo.org\",\n blockExplorerUrl: \"https://celoscan.io\",\n },\n {\n id: \"eip155:21000000\",\n type: \"evm\",\n name: \"Corn\",\n chainId: 21000000,\n nativeCurrency: { name: \"Bitcorn\", symbol: \"BTCN\", decimals: 18 },\n rpcUrl: \"https://mainnet.corn-rpc.com\",\n blockExplorerUrl: \"https://cornscan.io\",\n },\n {\n id: \"eip155:25\",\n type: \"evm\",\n name: \"Cronos\",\n chainId: 25,\n nativeCurrency: { name: \"Cronos\", symbol: \"CRO\", decimals: 18 },\n rpcUrl: \"https://evm.cronos.org\",\n blockExplorerUrl: \"https://cronoscan.com\",\n },\n {\n id: \"eip155:7560\",\n type: \"evm\",\n name: \"Cyber\",\n chainId: 7560,\n nativeCurrency: ETH,\n rpcUrl: \"https://rpc.cyber.co\",\n blockExplorerUrl: \"https://cyberscan.co\",\n },\n {\n id: \"eip155:666666666\",\n type: \"evm\",\n name: \"Degen\",\n chainId: 666666666,\n nativeCurrency: { name: \"Degen\", symbol: \"DEGEN\", decimals: 18 },\n rpcUrl: \"https://rpc.degen.tips\",\n blockExplorerUrl: \"https://explorer.degen.tips\",\n },\n {\n id: \"eip155:747\",\n type: \"evm\",\n name: \"Flow EVM\",\n chainId: 747,\n nativeCurrency: { name: \"Flow\", symbol: \"FLOW\", decimals: 18 },\n rpcUrl: \"https://mainnet.evm.nodes.onflow.org\",\n blockExplorerUrl: \"https://flowdiver.io\",\n },\n {\n id: \"eip155:100\",\n type: \"evm\",\n name: \"Gnosis\",\n chainId: 100,\n nativeCurrency: { name: \"xDai\", symbol: \"xDAI\", decimals: 18 },\n rpcUrl: \"https://rpc.gnosischain.com\",\n blockExplorerUrl: \"https://gnosisscan.io\",\n },\n {\n id: \"eip155:49321\",\n type: \"evm\",\n name: \"Gunz\",\n chainId: 49321,\n nativeCurrency: ETH,\n rpcUrl: \"https://rpc.gunz.dev/ext/bc/evm\",\n blockExplorerUrl: \"https://explorer.gunz.dev\",\n },\n {\n id: \"eip155:43111\",\n type: \"evm\",\n name: \"Hemi\",\n chainId: 43111,\n nativeCurrency: ETH,\n rpcUrl: \"https://rpc.hemi.network/rpc\",\n blockExplorerUrl: \"https://explorer.hemi.xyz\",\n },\n {\n id: \"eip155:999\",\n type: \"evm\",\n name: \"HyperEVM\",\n chainId: 999,\n nativeCurrency: { name: \"HYPE\", symbol: \"HYPE\", decimals: 18 },\n rpcUrl: \"https://rpc.hyperliquid.xyz/evm\",\n blockExplorerUrl: \"https://hyperevm-explorer.hyperliquid.xyz\",\n },\n {\n id: \"eip155:57073\",\n type: \"evm\",\n name: \"Ink\",\n chainId: 57073,\n nativeCurrency: ETH,\n rpcUrl: \"https://rpc-gel.inkonchain.com\",\n blockExplorerUrl: \"https://explorer.inkonchain.com\",\n },\n {\n id: \"eip155:59144\",\n type: \"evm\",\n name: \"Linea\",\n chainId: 59144,\n nativeCurrency: ETH,\n rpcUrl: \"https://rpc.linea.build\",\n blockExplorerUrl: \"https://lineascan.build\",\n },\n {\n id: \"eip155:1135\",\n type: \"evm\",\n name: \"Lisk\",\n chainId: 1135,\n nativeCurrency: ETH,\n rpcUrl: \"https://rpc.api.lisk.com\",\n blockExplorerUrl: \"https://blockscout.lisk.com\",\n },\n {\n id: \"eip155:169\",\n type: \"evm\",\n name: \"Manta Pacific\",\n chainId: 169,\n nativeCurrency: ETH,\n rpcUrl: \"https://pacific-rpc.manta.network/http\",\n blockExplorerUrl: \"https://pacific-explorer.manta.network\",\n },\n {\n id: \"eip155:5000\",\n type: \"evm\",\n name: \"Mantle\",\n chainId: 5000,\n nativeCurrency: { name: \"MNT\", symbol: \"MNT\", decimals: 18 },\n rpcUrl: \"https://rpc.mantle.xyz\",\n blockExplorerUrl: \"https://explorer.mantle.xyz\",\n },\n {\n id: \"eip155:6342\",\n type: \"evm\",\n name: \"MegaETH\",\n chainId: 6342,\n nativeCurrency: ETH,\n rpcUrl: \"https://carrot.megaeth.com\",\n blockExplorerUrl: \"https://megaexplorer.xyz\",\n },\n {\n id: \"eip155:1088\",\n type: \"evm\",\n name: \"Metis\",\n chainId: 1088,\n nativeCurrency: { name: \"Metis\", symbol: \"METIS\", decimals: 18 },\n rpcUrl: \"https://andromeda.metis.io/?owner=1088\",\n blockExplorerUrl: \"https://andromeda-explorer.metis.io\",\n },\n {\n id: \"eip155:34443\",\n type: \"evm\",\n name: \"Mode\",\n chainId: 34443,\n nativeCurrency: ETH,\n rpcUrl: \"https://mainnet.mode.network\",\n blockExplorerUrl: \"https://modescan.io\",\n },\n {\n id: \"eip155:10143\",\n type: \"evm\",\n name: \"Monad\",\n chainId: 10143,\n nativeCurrency: { name: \"MON\", symbol: \"MON\", decimals: 18 },\n rpcUrl: \"https://testnet-rpc.monad.xyz\",\n blockExplorerUrl: \"https://testnet.monadexplorer.com\",\n },\n {\n id: \"eip155:2818\",\n type: \"evm\",\n name: \"Morph\",\n chainId: 2818,\n nativeCurrency: ETH,\n rpcUrl: \"https://rpc-quicknode.morphl2.io\",\n blockExplorerUrl: \"https://explorer.morphl2.io\",\n },\n {\n id: \"eip155:98866\",\n type: \"evm\",\n name: \"Plume\",\n chainId: 98866,\n nativeCurrency: { name: \"Plume\", symbol: \"PLUME\", decimals: 18 },\n rpcUrl: \"https://rpc.plume.org\",\n blockExplorerUrl: \"https://explorer.plume.org\",\n },\n {\n id: \"eip155:1380012617\",\n type: \"evm\",\n name: \"RARI\",\n chainId: 1380012617,\n nativeCurrency: ETH,\n rpcUrl: \"https://mainnet.rpc.rarichain.org/ext/bc/C/rpc\",\n blockExplorerUrl: \"https://mainnet.explorer.rarichain.org\",\n },\n {\n id: \"eip155:690\",\n type: \"evm\",\n name: \"Redstone\",\n chainId: 690,\n nativeCurrency: ETH,\n rpcUrl: \"https://rpc.redstonechain.com\",\n blockExplorerUrl: \"https://explorer.redstone.xyz\",\n },\n {\n id: \"eip155:2020\",\n type: \"evm\",\n name: \"Ronin\",\n chainId: 2020,\n nativeCurrency: { name: \"RON\", symbol: \"RON\", decimals: 18 },\n rpcUrl: \"https://api.roninchain.com/rpc\",\n blockExplorerUrl: \"https://app.roninchain.com\",\n },\n {\n id: \"eip155:534352\",\n type: \"evm\",\n name: \"Scroll\",\n chainId: 534352,\n nativeCurrency: ETH,\n rpcUrl: \"https://rpc.scroll.io\",\n blockExplorerUrl: \"https://scrollscan.com\",\n },\n {\n id: \"eip155:1329\",\n type: \"evm\",\n name: \"Sei\",\n chainId: 1329,\n nativeCurrency: { name: \"Sei\", symbol: \"SEI\", decimals: 18 },\n rpcUrl: \"https://evm-rpc.sei-apis.com\",\n blockExplorerUrl: \"https://seistream.app\",\n },\n {\n id: \"eip155:360\",\n type: \"evm\",\n name: \"Shape\",\n chainId: 360,\n nativeCurrency: ETH,\n rpcUrl: \"https://mainnet.shape.network\",\n blockExplorerUrl: \"https://shapescan.xyz\",\n },\n {\n id: \"eip155:50312\",\n type: \"evm\",\n name: \"Somnia\",\n chainId: 50312,\n nativeCurrency: { name: \"STT\", symbol: \"STT\", decimals: 18 },\n rpcUrl: \"https://dream-rpc.somnia.network\",\n blockExplorerUrl: \"https://shannon-explorer.somnia.network\",\n },\n {\n id: \"eip155:1868\",\n type: \"evm\",\n name: \"Soneium\",\n chainId: 1868,\n nativeCurrency: ETH,\n rpcUrl: \"https://rpc.soneium.org\",\n blockExplorerUrl: \"https://soneium.blockscout.com\",\n },\n {\n id: \"eip155:146\",\n type: \"evm\",\n name: \"Sonic\",\n chainId: 146,\n nativeCurrency: { name: \"Sonic\", symbol: \"S\", decimals: 18 },\n rpcUrl: \"https://rpc.soniclabs.com\",\n blockExplorerUrl: \"https://sonicscan.org\",\n },\n {\n id: \"eip155:1514\",\n type: \"evm\",\n name: \"Story\",\n chainId: 1514,\n nativeCurrency: { name: \"IP\", symbol: \"IP\", decimals: 18 },\n rpcUrl: \"https://mainnet.storyrpc.io\",\n blockExplorerUrl: \"https://storyscan.xyz\",\n },\n {\n id: \"eip155:55244\",\n type: \"evm\",\n name: \"Superposition\",\n chainId: 55244,\n nativeCurrency: ETH,\n rpcUrl: \"https://rpc.superposition.so\",\n blockExplorerUrl: \"https://explorer.superposition.so\",\n },\n {\n id: \"eip155:5330\",\n type: \"evm\",\n name: \"Superseed\",\n chainId: 5330,\n nativeCurrency: ETH,\n rpcUrl: \"https://mainnet.superseed.xyz\",\n blockExplorerUrl: \"https://explorer.superseed.xyz\",\n },\n {\n id: \"eip155:1923\",\n type: \"evm\",\n name: \"SwellChain\",\n chainId: 1923,\n nativeCurrency: ETH,\n rpcUrl: \"https://swell-mainnet.alt.technology\",\n blockExplorerUrl: \"https://explorer.swellnetwork.io\",\n },\n {\n id: \"eip155:167000\",\n type: \"evm\",\n name: \"Taiko\",\n chainId: 167000,\n nativeCurrency: ETH,\n rpcUrl: \"https://rpc.mainnet.taiko.xyz\",\n blockExplorerUrl: \"https://taikoscan.io\",\n },\n {\n id: \"eip155:130\",\n type: \"evm\",\n name: \"Unichain\",\n chainId: 130,\n nativeCurrency: ETH,\n rpcUrl: \"https://mainnet.unichain.org\",\n blockExplorerUrl: \"https://uniscan.xyz\",\n },\n {\n id: \"eip155:480\",\n type: \"evm\",\n name: \"World Chain\",\n chainId: 480,\n nativeCurrency: ETH,\n rpcUrl: \"https://worldchain-mainnet.g.alchemy.com/public\",\n blockExplorerUrl: \"https://worldchain-mainnet.explorer.alchemy.com\",\n },\n {\n id: \"eip155:543210\",\n type: \"evm\",\n name: \"ZERO\",\n chainId: 543210,\n nativeCurrency: ETH,\n rpcUrl: \"https://rpc.zerion.io/v1/zero\",\n blockExplorerUrl: \"https://explorer.zero.network\",\n },\n {\n id: \"eip155:48900\",\n type: \"evm\",\n name: \"Zircuit\",\n chainId: 48900,\n nativeCurrency: ETH,\n rpcUrl: \"https://zircuit1-mainnet.p2pify.com\",\n blockExplorerUrl: \"https://explorer.zircuit.com\",\n },\n {\n id: \"eip155:324\",\n type: \"evm\",\n name: \"zkSync Era\",\n chainId: 324,\n nativeCurrency: ETH,\n rpcUrl: \"https://mainnet.era.zksync.io\",\n blockExplorerUrl: \"https://explorer.zksync.io\",\n },\n {\n id: \"eip155:7777777\",\n type: \"evm\",\n name: \"Zora\",\n chainId: 7777777,\n nativeCurrency: ETH,\n rpcUrl: \"https://rpc.zora.energy\",\n blockExplorerUrl: \"https://explorer.zora.energy\",\n },\n\n // ── Dev / local ──────────────────────────────────────────────────────────────\n {\n id: \"eip155:31337\",\n type: \"evm\",\n name: \"Localhost\",\n chainId: 31337,\n nativeCurrency: ETH,\n rpcUrl: \"http://localhost:8545\",\n isCustom: true,\n },\n\n // ── Solana ───────────────────────────────────────────────────────────────────\n {\n id: \"solana:mainnet\",\n type: \"solana\",\n name: \"Solana\",\n nativeCurrency: SOL,\n blockExplorerUrl: \"https://solscan.io\",\n },\n {\n id: \"solana:devnet\",\n type: \"solana\",\n name: \"Solana Devnet\",\n nativeCurrency: SOL,\n blockExplorerUrl: \"https://solscan.io/?cluster=devnet\",\n },\n\n // ── Tron ─────────────────────────────────────────────────────────────────────\n {\n id: \"tron:mainnet\",\n type: \"tron\",\n name: \"Tron\",\n nativeCurrency: { name: \"Tronix\", symbol: \"TRX\", decimals: 6 },\n blockExplorerUrl: \"https://tronscan.org\",\n },\n {\n id: \"tron:shasta\",\n type: \"tron\",\n name: \"Tron Shasta Testnet\",\n nativeCurrency: { name: \"Tronix\", symbol: \"TRX\", decimals: 6 },\n blockExplorerUrl: \"https://shasta.tronscan.org\",\n isCustom: true,\n },\n\n // ── Bitcoin ───────────────────────────────────────────────────────────────────\n {\n id: \"bip122:mainnet\",\n type: \"bitcoin\",\n name: \"Bitcoin\",\n nativeCurrency: { name: \"Bitcoin\", symbol: \"BTC\", decimals: 8 },\n blockExplorerUrl: \"https://blockstream.info\",\n },\n];\n\n// ── CAIP-2 helpers ────────────────────────────────────────────────────────────\n\nexport function toCAIP2(type: \"evm\", chainId: number): string;\nexport function toCAIP2(type: \"solana\", network: \"mainnet\" | \"devnet\"): string;\nexport function toCAIP2(type: string, id: string | number): string {\n if (type === \"evm\") return `eip155:${id}`;\n if (type === \"solana\") return `solana:${id}`;\n throw new Error(`Unknown chain type: ${type}`);\n}\n\nexport function getChainType(caip2Id: string): ChainType {\n if (caip2Id.startsWith(\"eip155:\")) return \"evm\";\n if (caip2Id.startsWith(\"solana:\")) return \"solana\";\n if (caip2Id.startsWith(\"tron:\")) return \"tron\";\n if (caip2Id.startsWith(\"bip122:\")) return \"bitcoin\";\n throw new Error(`Cannot determine chain type from: ${caip2Id}`);\n}\n\n// ── CAIP-10 helpers ───────────────────────────────────────────────────────────\n\nexport function toCAIP10(chainId: string, address: string): string {\n return `${chainId}:${address}`;\n}\n\nexport function fromCAIP10(account: string): { chainId: string; address: string } {\n const i = account.lastIndexOf(\":\");\n return { chainId: account.slice(0, i), address: account.slice(i + 1) };\n}\n\n// ── Method sets ───────────────────────────────────────────────────────────────\n\nexport const EVM_METHODS = new Set([\n \"wallet_sendTransaction\",\n \"wallet_signMessage\",\n \"wallet_signTypedData\",\n]);\n\nexport const SOLANA_METHODS = new Set([\n \"wallet_sendTransaction\",\n \"wallet_signMessage\",\n // wallet_signTypedData is EVM-only — never included here\n]);\n\nexport const TRON_METHODS = new Set([\n \"wallet_sendTransaction\",\n \"wallet_signMessage\",\n]);\n\nexport const BITCOIN_METHODS = new Set([\n \"wallet_sendTransaction\",\n \"wallet_signMessage\",\n]);\n\n// ── Named chain ID constants ──────────────────────────────────────────────────\n\nexport const CHAINS = {\n // Tier-1\n ETHEREUM: \"eip155:1\",\n BASE: \"eip155:8453\",\n ARBITRUM: \"eip155:42161\",\n OPTIMISM: \"eip155:10\",\n BNB: \"eip155:56\",\n POLYGON: \"eip155:137\",\n // Extended EVM\n ABSTRACT: \"eip155:2741\",\n ANCIENT8: \"eip155:888888888\",\n ANIMECHAIN: \"eip155:69000\",\n APE_CHAIN: \"eip155:33139\",\n ARBITRUM_NOVA: \"eip155:42170\",\n AVALANCHE: \"eip155:43114\",\n B3: \"eip155:8333\",\n BERACHAIN: \"eip155:80094\",\n BLAST: \"eip155:81457\",\n BOB: \"eip155:60808\",\n BOBA: \"eip155:288\",\n CELO: \"eip155:42220\",\n CORN: \"eip155:21000000\",\n CRONOS: \"eip155:25\",\n CYBER: \"eip155:7560\",\n DEGEN: \"eip155:666666666\",\n FLOW_EVM: \"eip155:747\",\n GNOSIS: \"eip155:100\",\n GUNZ: \"eip155:49321\",\n HEMI: \"eip155:43111\",\n HYPER_EVM: \"eip155:999\",\n INK: \"eip155:57073\",\n LINEA: \"eip155:59144\",\n LISK: \"eip155:1135\",\n MANTA_PACIFIC: \"eip155:169\",\n MANTLE: \"eip155:5000\",\n MEGA_ETH: \"eip155:6342\",\n METIS: \"eip155:1088\",\n MODE: \"eip155:34443\",\n MONAD: \"eip155:10143\",\n MORPH: \"eip155:2818\",\n PLUME: \"eip155:98866\",\n RARI: \"eip155:1380012617\",\n REDSTONE: \"eip155:690\",\n RONIN: \"eip155:2020\",\n SCROLL: \"eip155:534352\",\n SEI: \"eip155:1329\",\n SHAPE: \"eip155:360\",\n SOMNIA: \"eip155:50312\",\n SONEIUM: \"eip155:1868\",\n SONIC: \"eip155:146\",\n STORY: \"eip155:1514\",\n SUPERPOSITION: \"eip155:55244\",\n SUPERSEED: \"eip155:5330\",\n SWELL_CHAIN: \"eip155:1923\",\n TAIKO: \"eip155:167000\",\n UNICHAIN: \"eip155:130\",\n WORLD_CHAIN: \"eip155:480\",\n ZERO: \"eip155:543210\",\n ZIRCUIT: \"eip155:48900\",\n ZKSYNC_ERA: \"eip155:324\",\n ZORA: \"eip155:7777777\",\n // Dev\n LOCALHOST: \"eip155:31337\",\n // Solana\n SOLANA: \"solana:mainnet\",\n SOLANA_DEVNET: \"solana:devnet\",\n // Tron\n TRON: \"tron:mainnet\",\n // Bitcoin\n BITCOIN: \"bip122:mainnet\",\n} as const;\n\nexport type ChainId = typeof CHAINS[keyof typeof CHAINS];\n\n// ── Custom chain validation ───────────────────────────────────────────────────\n\nexport function validateCustomChain(chain: unknown): chain is ChainDescriptor {\n if (!chain || typeof chain !== \"object\") return false;\n const c = chain as Record<string, unknown>;\n if (typeof c.id !== \"string\" || !c.id) return false;\n if (c.type !== \"evm\" && c.type !== \"solana\" && c.type !== \"tron\" && c.type !== \"bitcoin\") return false;\n if (typeof c.name !== \"string\" || !c.name) return false;\n if (!c.nativeCurrency || typeof c.nativeCurrency !== \"object\") return false;\n if (c.type === \"evm\" && (typeof c.chainId !== \"number\" || !c.id.startsWith(\"eip155:\")))\n return false;\n if (c.type === \"solana\" && !c.id.startsWith(\"solana:\")) return false;\n return true;\n}\n","import type { ActiveSession } from \"../types\";\nimport { DecaneError, DecaneErrorCode } from \"../errors\";\nimport { toCAIP10 } from \"../constants\";\n\nconst STORAGE_KEY = \"decane:session\";\n\nfunction loadFromStorage(): ActiveSession | null {\n if (typeof localStorage === \"undefined\") return null;\n try {\n const raw = localStorage.getItem(STORAGE_KEY);\n return raw ? (JSON.parse(raw) as ActiveSession) : null;\n } catch {\n return null;\n }\n}\n\nfunction saveToStorage(session: ActiveSession | null): void {\n if (typeof localStorage === \"undefined\") return;\n try {\n if (session) {\n localStorage.setItem(STORAGE_KEY, JSON.stringify(session));\n } else {\n localStorage.removeItem(STORAGE_KEY);\n }\n } catch {\n // Storage quota exceeded or private browsing — silently skip\n }\n}\n\nexport interface SessionManager {\n get(): ActiveSession | null;\n set(s: ActiveSession | null): void;\n clear(): void;\n isChainGranted(chainId: string): boolean;\n isAccountGranted(chainId: string, address: string): boolean;\n assertChainInScope(chainId: string): void;\n assertAccountInScope(chainId: string, address: string): void;\n}\n\nexport function createSessionManager(): SessionManager {\n // Restore persisted session on SDK init\n let _session: ActiveSession | null = loadFromStorage();\n\n return {\n get: () => _session,\n\n set(s) {\n _session = s;\n saveToStorage(s);\n },\n\n clear() {\n _session = null;\n saveToStorage(null);\n },\n\n isChainGranted(chainId) {\n return !!_session?.grantedScopes[chainId];\n },\n\n isAccountGranted(chainId, address) {\n const scope = _session?.grantedScopes[chainId];\n if (!scope) return false;\n return scope.accounts.includes(toCAIP10(chainId, address));\n },\n\n assertChainInScope(chainId) {\n if (!this.isChainGranted(chainId)) {\n throw new DecaneError(\n DecaneErrorCode.CHAIN_NOT_IN_SCOPE,\n `Chain ${chainId} is not in the current session scope. Call wallet_requestPermissions first.`,\n );\n }\n },\n\n assertAccountInScope(chainId, address) {\n if (!this.isAccountGranted(chainId, address)) {\n throw new DecaneError(\n DecaneErrorCode.SCOPE_MISMATCH,\n `Account ${address} on chain ${chainId} is not in the current session scope.`,\n );\n }\n },\n };\n}\n","import type { ChainDescriptor } from \"../types\";\nimport { DecaneError, DecaneErrorCode } from \"../errors\";\n\nexport interface ChainStore {\n get(id: string): ChainDescriptor | undefined;\n getAll(): ChainDescriptor[];\n add(chain: ChainDescriptor): void;\n remove(id: string): void;\n}\n\nexport function createChainStore(initial: ChainDescriptor[]): ChainStore {\n const chains = new Map<string, ChainDescriptor>(\n initial.map((c) => [c.id, c]),\n );\n\n return {\n get(id) {\n return chains.get(id);\n },\n\n getAll() {\n return [...chains.values()];\n },\n\n add(chain) {\n if (chains.has(chain.id)) {\n throw new DecaneError(\n DecaneErrorCode.INVALID_CHAIN_CONFIG,\n `Chain ${chain.id} is already registered`,\n );\n }\n chains.set(chain.id, chain);\n },\n\n remove(id) {\n const chain = chains.get(id);\n if (!chain) return;\n if (!chain.isCustom) {\n throw new DecaneError(\n DecaneErrorCode.INVALID_CHAIN_CONFIG,\n `Cannot remove built-in chain ${id}`,\n );\n }\n chains.delete(id);\n },\n };\n}\n","import type { EIP1193Provider, CAIP25Method, ChainDescriptor } from \"../types\";\nimport { DecaneError, DecaneErrorCode } from \"../errors\";\n\nexport async function eip1193Request(\n provider: EIP1193Provider,\n method: CAIP25Method,\n payload: unknown,\n account: string,\n): Promise<string> {\n switch (method) {\n case \"wallet_sendTransaction\":\n return provider.request({\n method: \"eth_sendTransaction\",\n params: [{ ...(payload as object), from: account }],\n }) as Promise<string>;\n\n case \"wallet_signMessage\":\n // personal_sign prepends EIP-191 prefix: \"\\x19Ethereum Signed Message:\\n\"\n return provider.request({\n method: \"personal_sign\",\n params: [payload, account],\n }) as Promise<string>;\n\n case \"wallet_signTypedData\":\n // EIP-712 typed data\n return provider.request({\n method: \"eth_signTypedData_v4\",\n params: [account, JSON.stringify(payload)],\n }) as Promise<string>;\n\n default:\n throw new DecaneError(\n DecaneErrorCode.METHOD_NOT_SUPPORTED,\n `EVM adapter: unsupported method ${method}`,\n );\n }\n}\n\nexport async function getEvmAddress(\n provider: EIP1193Provider,\n): Promise<string> {\n const accounts = (await provider.request({\n method: \"eth_requestAccounts\",\n })) as string[];\n if (!accounts?.[0]) {\n throw new DecaneError(\n DecaneErrorCode.USER_REJECTED,\n \"No EVM accounts returned\",\n );\n }\n return accounts[0];\n}\n\n// EIP-3085 — supported by MetaMask and most EVM wallets\nexport async function addEthereumChain(\n provider: EIP1193Provider,\n chain: ChainDescriptor,\n): Promise<void> {\n await provider.request({\n method: \"wallet_addEthereumChain\",\n params: [\n {\n chainId: `0x${chain.chainId!.toString(16)}`,\n chainName: chain.name,\n nativeCurrency: chain.nativeCurrency,\n rpcUrls: chain.rpcUrl ? [chain.rpcUrl] : [],\n blockExplorerUrls: chain.blockExplorerUrl\n ? [chain.blockExplorerUrl]\n : [],\n },\n ],\n });\n}\n","import { base58 } from \"@scure/base\";\nimport type { StandardWallet, CAIP25Method, StandardWalletAccount } from \"../types\";\nimport { DecaneError, DecaneErrorCode } from \"../errors\";\n\ninterface SolanaSignAndSendTx {\n signAndSendTransaction(args: {\n transaction: unknown;\n account: StandardWalletAccount;\n }): Promise<Array<{ signature: string }>>;\n}\n\ninterface SolanaSignMessage {\n signMessage(args: {\n message: Uint8Array;\n account: StandardWalletAccount;\n }): Promise<Array<{ signature: Uint8Array }>>;\n}\n\ninterface StandardConnect {\n connect(opts?: { silent?: boolean }): Promise<{\n accounts: Array<{ publicKey: Uint8Array; chains?: string[] }>;\n }>;\n}\n\nfunction deserializeSolanaTransaction(data: unknown): unknown {\n // Passthrough — wallet handles actual deserialization\n return data;\n}\n\nexport async function walletStandardRequest(\n wallet: StandardWallet,\n method: CAIP25Method,\n payload: unknown,\n account: string,\n): Promise<string> {\n switch (method) {\n case \"wallet_sendTransaction\": {\n const feature = wallet.features[\n \"solana:signAndSendTransaction\"\n ] as SolanaSignAndSendTx | undefined;\n if (!feature) {\n throw new DecaneError(\n DecaneErrorCode.METHOD_NOT_SUPPORTED,\n \"Wallet does not support solana:signAndSendTransaction\",\n );\n }\n const walletAccount = wallet.accounts.find(\n (a) => base58.encode(a.publicKey) === account,\n );\n if (!walletAccount) {\n throw new DecaneError(\n DecaneErrorCode.SCOPE_MISMATCH,\n `Account ${account} not found`,\n );\n }\n const tx = deserializeSolanaTransaction(payload);\n const [result] = await feature.signAndSendTransaction({\n transaction: tx,\n account: walletAccount,\n });\n return result.signature;\n }\n\n case \"wallet_signMessage\": {\n const feature = wallet.features[\n \"solana:signMessage\"\n ] as SolanaSignMessage | undefined;\n if (!feature) {\n throw new DecaneError(\n DecaneErrorCode.METHOD_NOT_SUPPORTED,\n \"Wallet does not support solana:signMessage\",\n );\n }\n const walletAccount = wallet.accounts.find(\n (a) => base58.encode(a.publicKey) === account,\n );\n if (!walletAccount) {\n throw new DecaneError(\n DecaneErrorCode.SCOPE_MISMATCH,\n `Account ${account} not found`,\n );\n }\n const messageBytes =\n typeof payload === \"string\"\n ? new TextEncoder().encode(payload)\n : (payload as Uint8Array);\n const [result] = await feature.signMessage({\n message: messageBytes,\n account: walletAccount,\n });\n return base58.encode(result.signature);\n }\n\n default:\n throw new DecaneError(\n DecaneErrorCode.METHOD_NOT_SUPPORTED,\n `Solana adapter: unsupported method ${method}`,\n );\n }\n}\n\nfunction isSolanaAccount(a: { chains?: string[] }): boolean {\n return !a.chains?.length || a.chains.some((c) => c.startsWith(\"solana:\"));\n}\n\nexport async function getSolanaAddress(\n wallet: StandardWallet,\n): Promise<string> {\n // Use pre-connected accounts first — avoids triggering multi-chain connect\n // flows that fail for unsupported chains (e.g. tron:728126428 on Backpack)\n const pre = (wallet.accounts as StandardWalletAccount[]).find(isSolanaAccount);\n if (pre) return base58.encode(pre.publicKey);\n\n const connectFeature = wallet.features[\n \"standard:connect\"\n ] as StandardConnect | undefined;\n if (!connectFeature) {\n throw new DecaneError(\n DecaneErrorCode.METHOD_NOT_SUPPORTED,\n \"Wallet does not support standard:connect\",\n );\n }\n const { accounts } = await connectFeature.connect();\n const solanaAccount = accounts.find(isSolanaAccount);\n if (!solanaAccount) {\n throw new DecaneError(\n DecaneErrorCode.USER_REJECTED,\n \"No Solana accounts returned\",\n );\n }\n return base58.encode(solanaAccount.publicKey);\n}\n","import type { TronProvider, CAIP25Method } from \"../types\";\nimport { DecaneError, DecaneErrorCode } from \"../errors\";\n\ninterface TronWeb {\n transactionBuilder?: {\n sendTrx(to: string, amount: number, from: string): Promise<object>;\n triggerSmartContract(\n contractAddress: string,\n functionSelector: string,\n options: object,\n parameters: unknown[],\n issuerAddress: string,\n ): Promise<{ transaction: object }>;\n };\n trx?: {\n sign(transaction: object): Promise<object>;\n sendRawTransaction(signedTx: object): Promise<{ txid?: string; result?: boolean }>;\n };\n defaultAddress?: { base58?: string };\n fullNode?: { host?: string };\n}\n\ntype TronWin = Window & { tronWeb?: TronWeb; tronLink?: { tronWeb?: TronWeb } };\n\nfunction getTronWeb(): TronWeb | undefined {\n if (typeof window === \"undefined\") return undefined;\n const win = window as TronWin;\n return win.tronLink?.tronWeb ?? win.tronWeb;\n}\n\nexport async function getTronAddress(provider: TronProvider): Promise<string> {\n // tronLink.tronWeb is the fully-initialized instance; window.tronWeb may be a stub\n const addr = getTronWeb()?.defaultAddress?.base58;\n if (addr) return addr;\n\n try {\n const result = await provider.request({ method: \"tron_requestAccounts\" });\n const accounts = result as string[];\n if (accounts?.[0]) return accounts[0];\n } catch {\n // fallback below\n }\n const result2 = await provider.request({ method: \"tron_accounts\" }).catch(() => null);\n const accounts2 = result2 as string[] | null;\n if (accounts2?.[0]) return accounts2[0];\n throw new DecaneError(DecaneErrorCode.USER_REJECTED, \"No Tron accounts returned\");\n}\n\nexport async function tronRequest(\n provider: TronProvider,\n method: CAIP25Method,\n payload: unknown,\n account: string,\n): Promise<string> {\n switch (method) {\n case \"wallet_signMessage\":\n return provider.request({\n method: \"tron_signMessage\",\n params: { message: payload as string },\n }) as Promise<string>;\n\n case \"wallet_sendTransaction\": {\n const tronWeb = getTronWeb();\n const p = payload as { to: string; value?: number | string; data?: string };\n const toAddress = p.to;\n const sunAmount =\n typeof p.value === \"string\" ? parseInt(p.value, 10) : (p.value ?? 0);\n\n // ── Step 1: build unsigned transaction ───────────────────────────────\n let unsignedTx: object;\n\n if (tronWeb?.transactionBuilder?.sendTrx) {\n // transactionBuilder available — use it directly\n if (p.data && p.data !== \"0x\") {\n const res = await tronWeb.transactionBuilder.triggerSmartContract!(\n toAddress,\n \"transfer(address,uint256)\",\n { callValue: 0, feeLimit: 100_000_000 },\n [],\n account,\n );\n unsignedTx = res.transaction;\n } else {\n unsignedTx = await tronWeb.transactionBuilder.sendTrx(toAddress, sunAmount, account);\n }\n } else {\n // transactionBuilder not available — build via Tron HTTP API\n const host = tronWeb?.fullNode?.host ?? \"https://api.trongrid.io\";\n const endpoint = p.data && p.data !== \"0x\"\n ? `${host}/wallet/triggersmartcontract`\n : `${host}/wallet/createtransaction`;\n const body = p.data && p.data !== \"0x\"\n ? {\n owner_address: account,\n contract_address: toAddress,\n function_selector: \"transfer(address,uint256)\",\n fee_limit: 100_000_000,\n call_value: 0,\n visible: true,\n }\n : {\n owner_address: account,\n to_address: toAddress,\n amount: sunAmount,\n visible: true,\n };\n\n const res = await fetch(endpoint, {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify(body),\n });\n if (!res.ok) {\n throw new DecaneError(\n DecaneErrorCode.PROVIDER_ERROR,\n `Failed to build Tron transaction: ${res.statusText}`,\n );\n }\n const json = await res.json() as { transaction?: object } & object;\n // triggersmartcontract wraps result in { transaction: {...} }\n unsignedTx = (json as { transaction?: object }).transaction ?? json;\n }\n\n // ── Step 2: sign ─────────────────────────────────────────────────────\n // TronLink expects the transaction object directly as params (not wrapped)\n let signedTx: object;\n if (tronWeb?.trx?.sign) {\n signedTx = await tronWeb.trx.sign(unsignedTx);\n } else {\n signedTx = await provider.request({\n method: \"tron_signTransaction\",\n params: unsignedTx as Record<string, unknown>,\n }) as object;\n }\n\n // ── Step 3: broadcast ─────────────────────────────────────────────────\n // Same — signed transaction is passed directly as params\n let txid: string | undefined;\n if (tronWeb?.trx?.sendRawTransaction) {\n const result = await tronWeb.trx.sendRawTransaction(signedTx);\n txid = result?.txid;\n } else {\n const result = await provider.request({\n method: \"tron_sendRawTransaction\",\n params: signedTx as Record<string, unknown>,\n }) as { txid?: string };\n txid = result?.txid;\n }\n\n if (!txid) {\n throw new DecaneError(DecaneErrorCode.PROVIDER_ERROR, \"Tron transaction broadcast failed\");\n }\n return txid;\n }\n\n default:\n throw new DecaneError(\n DecaneErrorCode.METHOD_NOT_SUPPORTED,\n `Tron adapter: unsupported method ${method}`,\n );\n }\n}\n","import type { BitcoinProvider, CAIP25Method } from \"../types\";\nimport { DecaneError, DecaneErrorCode } from \"../errors\";\n\nexport async function getBitcoinAddress(provider: BitcoinProvider): Promise<string> {\n const result = await provider.requestAccounts();\n if (!result || result.length === 0) {\n throw new DecaneError(DecaneErrorCode.USER_REJECTED, \"No Bitcoin accounts returned\");\n }\n const first = result[0];\n // Unisat returns string[]; OKX returns {address: string}[]\n return typeof first === \"string\" ? first : (first as { address: string }).address;\n}\n\nexport async function bitcoinRequest(\n provider: BitcoinProvider,\n method: CAIP25Method,\n payload: unknown,\n account: string,\n): Promise<string> {\n switch (method) {\n case \"wallet_signMessage\":\n return provider.signMessage(payload as string);\n\n case \"wallet_sendTransaction\": {\n const { to, value } = payload as { to: string; value: number };\n if (provider.sendBitcoin) {\n return provider.sendBitcoin(to, value);\n }\n // Fallback for wallets that use a generic send method\n if (provider.send) {\n return provider.send({ to, value, from: account }) as Promise<string>;\n }\n throw new DecaneError(\n DecaneErrorCode.METHOD_NOT_SUPPORTED,\n \"Bitcoin wallet does not support sendBitcoin\",\n );\n }\n\n default:\n throw new DecaneError(\n DecaneErrorCode.METHOD_NOT_SUPPORTED,\n `Bitcoin adapter: unsupported method ${method}`,\n );\n }\n}\n","import type {\n CAIP25Method,\n CAIP25SessionRequest,\n CAIP25SessionResult,\n ChainScope,\n ActiveSession,\n} from \"../types\";\nimport { DecaneError, DecaneErrorCode } from \"../errors\";\nimport {\n getChainType,\n toCAIP10,\n EVM_METHODS,\n SOLANA_METHODS,\n TRON_METHODS,\n BITCOIN_METHODS,\n} from \"../constants\";\nimport { getEvmAddress, addEthereumChain, eip1193Request } from \"../evm/adapter\";\nimport { getSolanaAddress, walletStandardRequest } from \"../solana/adapter\";\nimport { getTronAddress, tronRequest } from \"../tron/adapter\";\nimport { getBitcoinAddress, bitcoinRequest } from \"../bitcoin/adapter\";\nimport type { Registry } from \"./registry\";\nimport type { SessionManager } from \"./session\";\nimport type { ChainStore } from \"./chainStore\";\n\nexport interface Router {\n request(args: { method: string; params?: unknown[] }): Promise<unknown>;\n}\n\nexport function createRouter(opts: {\n registry: Registry;\n session: SessionManager;\n chainStore: ChainStore;\n}): Router {\n const { registry, session, chainStore } = opts;\n\n async function request(args: {\n method: string;\n params?: unknown[];\n }): Promise<unknown> {\n switch (args.method) {\n case \"wallet_requestPermissions\":\n return handleRequestPermissions(\n args.params as [CAIP25SessionRequest],\n );\n\n case \"wallet_revokePermissions\":\n return handleRevokePermissions();\n\n case \"wallet_getPermissions\":\n return handleGetPermissions();\n\n case \"wallet_sendTransaction\":\n case \"wallet_signMessage\":\n case \"wallet_signTypedData\":\n return handleSigning(args.method, args.params);\n\n default:\n throw new DecaneError(\n DecaneErrorCode.METHOD_NOT_SUPPORTED,\n `Unknown CAIP-25 method: ${args.method}`,\n );\n }\n }\n\n async function handleRequestPermissions([\n req,\n walletIdHint,\n ]: [CAIP25SessionRequest, string?]): Promise<CAIP25SessionResult> {\n const connectedWallet =\n (walletIdHint ? registry.get.byId(walletIdHint) : undefined) ??\n registry.get.all().find((w) => w.id === session.get()?.walletId) ??\n registry.get.all()[0];\n\n if (!connectedWallet) {\n throw new DecaneError(\n DecaneErrorCode.NO_WALLET_CONNECTED,\n \"No wallet connected\",\n );\n }\n\n const allScopes = { ...req.requiredScopes, ...req.optionalScopes };\n const grantedScopes: Record<string, ChainScope> = {};\n\n for (const [chainId, scope] of Object.entries(allScopes)) {\n const chain = chainStore.get(chainId);\n if (!chain) {\n throw new DecaneError(\n DecaneErrorCode.UNSUPPORTED_CHAIN,\n `Unknown chain: ${chainId}`,\n );\n }\n\n const chainType = getChainType(chainId);\n\n if (chainType === \"evm\" && !connectedWallet.evmProvider) continue;\n if (chainType === \"solana\" && !connectedWallet.solanaProvider) continue;\n if (chainType === \"tron\" && !connectedWallet.tronProvider) continue;\n if (chainType === \"bitcoin\" && !connectedWallet.bitcoinProvider) continue;\n\n let address: string;\n if (chainType === \"evm\") {\n address = await getEvmAddress(connectedWallet.evmProvider!);\n if (chain.isCustom) {\n await addEthereumChain(connectedWallet.evmProvider!, chain).catch(() => {});\n }\n } else if (chainType === \"solana\") {\n address = await getSolanaAddress(connectedWallet.solanaProvider!);\n } else if (chainType === \"tron\") {\n address = await getTronAddress(connectedWallet.tronProvider!);\n } else {\n address = await getBitcoinAddress(connectedWallet.bitcoinProvider!);\n }\n\n const methodSet =\n chainType === \"evm\" ? EVM_METHODS :\n chainType === \"solana\" ? SOLANA_METHODS :\n chainType === \"tron\" ? TRON_METHODS :\n BITCOIN_METHODS;\n const grantedMethods = (scope?.methods ?? []).filter((m) =>\n methodSet.has(m),\n ) as CAIP25Method[];\n\n grantedScopes[chainId] = {\n methods: grantedMethods,\n accounts: [toCAIP10(chainId, address)],\n events: scope?.events ?? [],\n };\n }\n\n // Verify all required scopes were granted\n for (const chainId of Object.keys(req.requiredScopes)) {\n if (!grantedScopes[chainId]) {\n throw new DecaneError(\n DecaneErrorCode.UNSUPPORTED_CHAIN,\n `Required chain ${chainId} could not be granted`,\n );\n }\n }\n\n const newSession: ActiveSession = {\n sessionId: crypto.randomUUID(),\n grantedScopes,\n walletId: connectedWallet.id,\n walletType:\n connectedWallet.chainSupport.length === 2\n ? \"multi\"\n : connectedWallet.chainSupport[0],\n createdAt: Date.now(),\n };\n session.set(newSession);\n\n return { sessionId: newSession.sessionId, grantedScopes };\n }\n\n async function handleRevokePermissions(): Promise<null> {\n session.clear();\n return null;\n }\n\n async function handleGetPermissions(): Promise<CAIP25SessionResult | null> {\n const s = session.get();\n if (!s) return null;\n return { sessionId: s.sessionId, grantedScopes: s.grantedScopes };\n }\n\n function extractSigningContext(\n method: string,\n params: unknown[] | undefined,\n ): { chainId: string; account: string; payload: unknown } {\n if (!params || params.length < 3) {\n throw new DecaneError(\n DecaneErrorCode.METHOD_NOT_SUPPORTED,\n `${method} requires [chainId, account, payload] params`,\n );\n }\n return {\n chainId: params[0] as string,\n account: params[1] as string,\n payload: params[2],\n };\n }\n\n async function handleSigning(\n method: string,\n params: unknown[] | undefined,\n ): Promise<string> {\n const s = session.get();\n if (!s) {\n throw new DecaneError(\n DecaneErrorCode.NO_ACTIVE_SESSION,\n \"No active session. Call wallet_requestPermissions first.\",\n );\n }\n\n const { chainId, account, payload } = extractSigningContext(\n method,\n params,\n );\n const chainType = getChainType(chainId);\n\n session.assertChainInScope(chainId);\n session.assertAccountInScope(chainId, account);\n\n if (method === \"wallet_signTypedData\" && chainType !== \"evm\") {\n throw new DecaneError(\n DecaneErrorCode.EVM_ONLY_METHOD,\n \"wallet_signTypedData is only supported on EVM chains\",\n );\n }\n\n const wallet = registry.get.byId(s.walletId);\n if (!wallet) {\n throw new DecaneError(\n DecaneErrorCode.NO_WALLET_CONNECTED,\n \"Connected wallet not found\",\n );\n }\n\n if (chainType === \"evm\") {\n return eip1193Request(wallet.evmProvider!, method as CAIP25Method, payload, account);\n } else if (chainType === \"solana\") {\n return walletStandardRequest(wallet.solanaProvider!, method as CAIP25Method, payload, account);\n } else if (chainType === \"tron\") {\n return tronRequest(wallet.tronProvider!, method as CAIP25Method, payload, account);\n } else {\n return bitcoinRequest(wallet.bitcoinProvider!, method as CAIP25Method, payload, account);\n }\n }\n\n return { request };\n}\n","import type {\n DecaneProvider,\n DecaneConfig,\n UnifiedWalletAccount,\n ChainDescriptor,\n ChainType,\n ActiveSession,\n} from \"./types\";\nimport { DecaneError, DecaneErrorCode } from \"./errors\";\nimport { validateCustomChain } from \"./constants\";\nimport { addEthereumChain } from \"./evm/adapter\";\nimport type { Registry } from \"./core/registry\";\nimport type { SessionManager } from \"./core/session\";\nimport type { ChainStore } from \"./core/chainStore\";\nimport type { Emitter } from \"./core/emitter\";\nimport type { Router } from \"./core/router\";\n\nexport function createProvider(opts: {\n config: DecaneConfig;\n registry: Registry;\n session: SessionManager;\n chainStore: ChainStore;\n router: Router;\n emitter: Emitter;\n}): DecaneProvider {\n const { config, registry, session, chainStore, router, emitter } = opts;\n\n let _connectedWallet: UnifiedWalletAccount | null = null;\n let _activeChain: string | null = config.defaultChain ?? null;\n\n // Restore connected wallet from a persisted session after discovery\n function tryRestoreWallet(w: UnifiedWalletAccount): void {\n const s = session.get();\n if (!s || _connectedWallet) return;\n if (w.id !== s.walletId) return;\n _connectedWallet = w;\n const granted = Object.keys(s.grantedScopes);\n if (!_activeChain || !granted.includes(_activeChain)) {\n _activeChain = granted[0] ?? null;\n }\n emitter.emit(\"connect\", w);\n }\n\n emitter.on(\"walletRegistered\", (w) => tryRestoreWallet(w as UnifiedWalletAccount));\n // Also handle the case where the Solana provider merges in after EVM is already registered\n emitter.on(\"walletUpdated\", (w) => {\n const wallet = w as UnifiedWalletAccount;\n if (_connectedWallet?.id === wallet.id) {\n _connectedWallet = wallet; // keep reference fresh after merge\n } else {\n tryRestoreWallet(wallet);\n }\n });\n\n const provider: DecaneProvider = {\n // ── CAIP-25 request gateway ─────────────────────────────────────────────\n\n request(args) {\n return router.request(args);\n },\n\n on(event, handler) {\n emitter.on(event, handler);\n },\n\n off(event, handler) {\n emitter.off(event, handler);\n },\n\n // ── Registry views ──────────────────────────────────────────────────────\n\n get wallets() {\n return registry.get.all();\n },\n\n get evmWallets() {\n return registry.get.evm();\n },\n\n get solanaWallets() {\n return registry.get.solana();\n },\n\n get multiChainWallets() {\n return registry.get.multiChain();\n },\n\n get tronWallets() {\n return registry.get.tron();\n },\n\n get bitcoinWallets() {\n return registry.get.bitcoin();\n },\n\n // ── Connection ──────────────────────────────────────────────────────────\n\n async connect(wallet: UnifiedWalletAccount, preferredChain?: ChainType): Promise<void> {\n if (session.get()) {\n session.clear();\n emitter.emit(\"disconnect\");\n }\n\n _connectedWallet = wallet;\n\n const support = wallet.chainSupport as readonly string[];\n\n const hasEvm = support.includes(\"evm\") && preferredChain !== \"solana\" && preferredChain !== \"tron\" && preferredChain !== \"bitcoin\";\n const hasSol = support.includes(\"solana\") && preferredChain !== \"evm\" && preferredChain !== \"tron\" && preferredChain !== \"bitcoin\";\n const hasTron = support.includes(\"tron\") && preferredChain !== \"evm\" && preferredChain !== \"solana\" && preferredChain !== \"bitcoin\";\n const hasBitcoin = support.includes(\"bitcoin\") && preferredChain !== \"evm\" && preferredChain !== \"solana\" && preferredChain !== \"tron\";\n\n // Set active chain based on preference priority\n if (hasEvm) {\n _activeChain = config.defaultChain?.startsWith(\"eip155:\")\n ? config.defaultChain\n : \"eip155:1\";\n } else if (hasSol) {\n _activeChain = \"solana:mainnet\";\n } else if (hasTron) {\n _activeChain = \"tron:mainnet\";\n } else if (hasBitcoin) {\n _activeChain = \"bip122:mainnet\";\n }\n\n const required: Record<string, { methods: string[]; accounts: string[]; events: string[] }> = {};\n const optional: Record<string, { methods: string[]; accounts: string[]; events: string[] }> = {};\n\n if (hasEvm) {\n required[_activeChain ?? \"eip155:1\"] = {\n methods: [\"wallet_sendTransaction\", \"wallet_signMessage\", \"wallet_signTypedData\"],\n accounts: [],\n events: [\"chainChanged\", \"accountsChanged\"],\n };\n }\n if (hasSol) {\n const solChain = \"solana:mainnet\";\n const scope = {\n methods: [\"wallet_sendTransaction\", \"wallet_signMessage\"],\n accounts: [],\n events: [],\n };\n if (hasEvm) {\n optional[solChain] = scope;\n } else {\n required[solChain] = scope;\n _activeChain = solChain;\n }\n }\n if (hasTron) {\n const tronChain = \"tron:mainnet\";\n const scope = {\n methods: [\"wallet_sendTransaction\", \"wallet_signMessage\"],\n accounts: [],\n events: [],\n };\n if (hasEvm || hasSol) {\n optional[tronChain] = scope;\n } else {\n required[tronChain] = scope;\n _activeChain = tronChain;\n }\n }\n if (hasBitcoin) {\n const btcChain = \"bip122:mainnet\";\n const scope = {\n methods: [\"wallet_sendTransaction\", \"wallet_signMessage\"],\n accounts: [],\n events: [],\n };\n if (hasEvm || hasSol || hasTron) {\n optional[btcChain] = scope;\n } else {\n required[btcChain] = scope;\n _activeChain = btcChain;\n }\n }\n\n await router.request({\n method: \"wallet_requestPermissions\",\n params: [{ requiredScopes: required, optionalScopes: optional }, wallet.id],\n });\n\n const s = session.get();\n if (s) {\n const granted = Object.keys(s.grantedScopes);\n if (_activeChain && !granted.includes(_activeChain)) {\n _activeChain = granted[0] ?? null;\n }\n }\n\n emitter.emit(\"connect\", wallet);\n },\n\n async disconnect(): Promise<void> {\n session.clear();\n _connectedWallet = null;\n _activeChain = null;\n emitter.emit(\"disconnect\");\n },\n\n // ── Custom chain management ─────────────────────────────────────────────\n\n addChain(chain: ChainDescriptor): void {\n if (!validateCustomChain(chain)) {\n throw new DecaneError(\n DecaneErrorCode.INVALID_CHAIN_CONFIG,\n \"Invalid chain descriptor\",\n );\n }\n chainStore.add(chain);\n\n if (_connectedWallet?.evmProvider && chain.type === \"evm\") {\n addEthereumChain(_connectedWallet.evmProvider, chain).catch(() => {});\n }\n\n emitter.emit(\"chainAdded\", chain);\n },\n\n removeChain(chainId: string): void {\n chainStore.remove(chainId);\n\n const s = session.get();\n if (s?.grantedScopes[chainId]) {\n delete (s.grantedScopes as Record<string, unknown>)[chainId];\n session.set(s);\n }\n\n if (_activeChain === chainId) {\n const remaining = Object.keys(session.get()?.grantedScopes ?? {});\n _activeChain = remaining[0] ?? null;\n }\n\n emitter.emit(\"chainRemoved\", chainId);\n },\n\n getChain(chainId: string): ChainDescriptor | undefined {\n return chainStore.get(chainId);\n },\n\n get chains(): ChainDescriptor[] {\n return chainStore.getAll();\n },\n\n // ── State ───────────────────────────────────────────────────────────────\n\n get connectedWallet(): UnifiedWalletAccount | null {\n return _connectedWallet;\n },\n\n get activeSession(): ActiveSession | null {\n return session.get();\n },\n\n get activeChain(): string | null {\n return _activeChain;\n },\n };\n\n return provider;\n}\n","import type { EIP1193Provider, BitcoinProvider } from \"../types\";\nimport type { Registry } from \"../core/registry\";\n\n// Known Bitcoin snap IDs — checked in order, first match wins\nconst BITCOIN_SNAP_IDS = [\n \"npm:@metamask/bitcoin-snap\",\n \"npm:@consensys/btc-snap\",\n] as const;\n\ntype SnapMap = Record<string, { enabled?: boolean; blocked?: boolean } | undefined>;\n\nasync function detectBitcoinSnap(provider: EIP1193Provider): Promise<string | null> {\n try {\n const snaps = (await provider.request({ method: \"wallet_getSnaps\" })) as SnapMap | null;\n if (!snaps) return null;\n for (const id of BITCOIN_SNAP_IDS) {\n const snap = snaps[id];\n if (snap && snap.blocked !== true) return id;\n }\n return null;\n } catch {\n return null;\n }\n}\n\nfunction makeBitcoinSnapProvider(snapId: string, evmProvider: EIP1193Provider): BitcoinProvider {\n function invoke(method: string, params?: unknown): Promise<unknown> {\n return evmProvider.request({\n method: \"wallet_invokeSnap\",\n params: [{ snapId, request: { method, params } }],\n });\n }\n\n return {\n async requestAccounts() {\n // Different snap versions use different method names — try both\n const result = await invoke(\"btc_getAddress\").catch(() => invoke(\"btc_getPublicKey\"));\n if (typeof result === \"string\") return [result];\n if (Array.isArray(result)) return result as string[];\n return [];\n },\n async signMessage(message: string) {\n return invoke(\"btc_signMessage\", [message]) as Promise<string>;\n },\n async sendBitcoin(to: string, value: number) {\n return invoke(\"btc_sendBitcoin\", [{ to, satoshis: value }]) as Promise<string>;\n },\n };\n}\n\nexport async function tryRegisterBitcoinSnap(\n registry: Registry,\n name: string,\n icon: string,\n rdns: string | undefined,\n evmProvider: EIP1193Provider,\n): Promise<void> {\n const snapId = await detectBitcoinSnap(evmProvider);\n if (!snapId) return;\n\n registry.registerOrMerge({\n chain: \"bitcoin\",\n name,\n icon,\n rdns,\n provider: makeBitcoinSnapProvider(snapId, evmProvider),\n });\n}\n","import type { EIP6963AnnounceProviderEvent, EIP1193Provider } from \"../types\";\nimport type { Registry } from \"../core/registry\";\nimport { tryRegisterBitcoinSnap } from \"./bitcoinSnap\";\n\nexport function startEvmDiscovery(registry: Registry): void {\n if (typeof window === \"undefined\") return; // SSR guard\n\n const seenUuids = new Set<string>();\n\n window.addEventListener(\n \"eip6963:announceProvider\",\n (event: Event) => {\n const e = event as EIP6963AnnounceProviderEvent;\n const { info, provider } = e.detail;\n\n if (seenUuids.has(info.uuid)) return;\n seenUuids.add(info.uuid);\n\n registry.registerOrMerge({\n chain: \"evm\",\n name: info.name,\n icon: info.icon,\n rdns: info.rdns,\n uuid: info.uuid,\n provider,\n });\n\n // Async: check for an installed Bitcoin snap on this wallet (fire-and-forget)\n tryRegisterBitcoinSnap(\n registry,\n info.name,\n info.icon,\n info.rdns,\n provider as EIP1193Provider,\n ).catch(() => {});\n },\n );\n\n window.dispatchEvent(new CustomEvent(\"eip6963:requestProvider\"));\n\n // Re-request after 100ms to catch wallets that load slightly after the SDK\n setTimeout(\n () => window.dispatchEvent(new CustomEvent(\"eip6963:requestProvider\")),\n 100,\n );\n}\n","import { getWallets } from \"@wallet-standard/app\";\nimport type { StandardWallet, WalletWithRdns } from \"../types\";\nimport type { Registry } from \"../core/registry\";\n\nexport function startSolanaDiscovery(registry: Registry): void {\n if (typeof window === \"undefined\") return; // SSR guard\n\n const { get, on } = getWallets();\n\n function register(wallet: StandardWallet): void {\n const required = [\n \"standard:connect\",\n \"solana:signTransaction\",\n \"solana:signMessage\",\n ];\n if (!required.every((f) => f in wallet.features)) return;\n\n registry.registerOrMerge({\n chain: \"solana\",\n name: wallet.name,\n icon: wallet.icon,\n rdns: (wallet as WalletWithRdns).rdns ?? undefined,\n provider: wallet,\n });\n }\n\n (get() as unknown as StandardWallet[]).forEach(register);\n\n on(\"register\", (...wallets) =>\n (wallets as unknown as StandardWallet[]).forEach(register),\n );\n\n on(\"unregister\", (...wallets) =>\n (wallets as unknown as StandardWallet[]).forEach((w) => registry.unregister(w)),\n );\n}\n","import type { Registry } from \"../core/registry\";\nimport type { TronProvider } from \"../types\";\n\ndeclare global {\n interface Window {\n tronLink?: TronProvider;\n tronWeb?: { defaultAddress?: { base58?: string }; ready?: boolean };\n }\n}\n\nconst TRONLINK_RDNS = \"link.tron.tronlink\";\n\n// Base64 encoded SVG of TronLink icon (red circle with play triangle)\nconst TRONLINK_ICON =\n \"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMiAzMiI+PGNpcmNsZSBjeD0iMTYiIGN5PSIxNiIgcj0iMTYiIGZpbGw9IiNGRjAwMTMiLz48cG9seWdvbiBwb2ludHM9IjEyLDkgMjMsMTYgMTIsMjMiIGZpbGw9IndoaXRlIi8+PC9zdmc+\";\n\nexport function startTronDiscovery(registry: Registry): void {\n let registered = false;\n\n function tryRegister() {\n if (registered || !window.tronLink) return;\n registered = true;\n registry.registerOrMerge({\n chain: \"tron\",\n name: \"TronLink\",\n icon: TRONLINK_ICON,\n rdns: TRONLINK_RDNS,\n provider: window.tronLink,\n });\n }\n\n tryRegister();\n // TronLink fires this event when the extension finishes injecting\n window.addEventListener(\"tronLink#initialized\", tryRegister, { once: true });\n\n // Short poll to catch TronLink loading slightly after the SDK\n const start = Date.now();\n const poll = setInterval(() => {\n tryRegister();\n if (registered || Date.now() - start > 3000) clearInterval(poll);\n }, 200);\n}\n","import type { Registry } from \"../core/registry\";\nimport type { BitcoinProvider } from \"../types\";\n\ndeclare global {\n interface Window {\n unisat?: BitcoinProvider;\n okxwallet?: { bitcoin?: BitcoinProvider };\n // Some wallets inject as BitcoinProvider\n BitcoinProvider?: BitcoinProvider;\n }\n}\n\n// Base64 SVG: orange circle with ₿\nconst BTC_ICON =\n \"data:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHZpZXdCb3g9IjAgMCAzMiAzMiI+PGNpcmNsZSBjeD0iMTYiIGN5PSIxNiIgcj0iMTYiIGZpbGw9IiNGNzkzMUEiLz48dGV4dCB4PSIxNi41IiB5PSIyMiIgdGV4dC1hbmNob3I9Im1pZGRsZSIgZm9udC1zaXplPSIxNiIgZm9udC13ZWlnaHQ9IjcwMCIgZmlsbD0id2hpdGUiIGZvbnQtZmFtaWx5PSJBcmlhbCxzeXN0ZW0tdWkiPuKmojwvdGV4dD48L3N2Zz4=\";\n\ninterface CandidateDef {\n name: string;\n rdns: string;\n provider: BitcoinProvider | null | undefined;\n}\n\nexport function startBitcoinDiscovery(registry: Registry): void {\n // Delay slightly so wallet extensions have time to inject\n setTimeout(() => {\n const candidates: CandidateDef[] = [\n { name: \"Unisat\", rdns: \"io.unisat.wallet\", provider: window.unisat },\n // OKX shares rdns with its EVM provider — merges into the EVM entry automatically\n { name: \"OKX Wallet\", rdns: \"com.okex.okxwallet\", provider: window.okxwallet?.bitcoin },\n ];\n\n for (const { name, rdns, provider } of candidates) {\n if (!provider) continue;\n registry.registerOrMerge({\n chain: \"bitcoin\",\n name,\n icon: BTC_ICON,\n rdns,\n provider,\n });\n }\n }, 150);\n}\n","import { createEmitter } from \"./core/emitter\";\nimport { createRegistry } from \"./core/registry\";\nimport { createSessionManager } from \"./core/session\";\nimport { createChainStore } from \"./core/chainStore\";\nimport { createRouter } from \"./core/router\";\nimport { createProvider } from \"./provider\";\nimport { startEvmDiscovery } from \"./evm/discovery\";\nimport { startSolanaDiscovery } from \"./solana/discovery\";\nimport { startTronDiscovery } from \"./tron/discovery\";\nimport { startBitcoinDiscovery } from \"./bitcoin/discovery\";\nimport { BUILT_IN_CHAINS } from \"./constants\";\nimport type { DecaneConfig, DecaneProvider } from \"./types\";\n\nexport function createDecane(config: DecaneConfig = {}): DecaneProvider {\n const emitter = createEmitter();\n const registry = createRegistry(emitter);\n const session = createSessionManager();\n const builtIn = config.supportedChainIds\n ? BUILT_IN_CHAINS.filter((c) => config.supportedChainIds!.includes(c.id))\n : BUILT_IN_CHAINS;\n\n const chainStore = createChainStore([\n ...builtIn,\n ...(config.chains ?? []),\n ]);\n const router = createRouter({ registry, session, chainStore });\n\n startEvmDiscovery(registry);\n startSolanaDiscovery(registry);\n startTronDiscovery(registry);\n startBitcoinDiscovery(registry);\n\n return createProvider({ config, registry, session, chainStore, router, emitter });\n}\n","import React, { useEffect, useCallback, useState } from \"react\";\nimport { createPortal } from \"react-dom\";\nimport type { DecaneProvider, UnifiedWalletAccount, ChainType } from \"../types\";\nimport { CSS_VARS } from \"./styles\";\nimport { WalletIcon, ChainIconStack } from \"./icons\";\n\ninterface WalletSelectorProps {\n provider: DecaneProvider;\n open: boolean;\n onClose: () => void;\n onConnect: (wallet: UnifiedWalletAccount, preference?: ChainType) => void;\n theme?: \"light\" | \"dark\" | \"auto\";\n networks?: \"evm\" | \"solana\" | \"tron\" | \"bitcoin\" | \"all\";\n}\n\ntype FilterType = \"all\" | \"evm\" | \"solana\" | \"tron\" | \"bitcoin\";\n\nconst FONT_URL =\n \"https://fonts.googleapis.com/css2?family=Plus+Jakarta+Sans:wght@400;500;600;700;800&display=swap\";\n\nfunction injectTokens(theme: \"light\" | \"dark\" | \"auto\"): void {\n let resolved: \"light\" | \"dark\";\n if (theme === \"auto\") {\n resolved = window.matchMedia(\"(prefers-color-scheme: dark)\").matches\n ? \"dark\"\n : \"light\";\n } else {\n resolved = theme;\n }\n let styleEl = document.getElementById(\"decane-tokens\") as HTMLStyleElement | null;\n if (!styleEl) {\n styleEl = document.createElement(\"style\");\n styleEl.id = \"decane-tokens\";\n document.head.appendChild(styleEl);\n }\n styleEl.textContent = `:root { ${CSS_VARS[resolved]} }`;\n}\n\nfunction injectFont(): void {\n if (document.getElementById(\"decane-font\")) return;\n const link = document.createElement(\"link\");\n link.id = \"decane-font\";\n link.rel = \"stylesheet\";\n link.href = FONT_URL;\n document.head.appendChild(link);\n}\n\n\ninterface WalletRowProps {\n wallet: UnifiedWalletAccount;\n onClick: () => void;\n}\n\nfunction WalletRow({ wallet, onClick }: WalletRowProps) {\n const [hovered, setHovered] = useState(false);\n const [focused, setFocused] = useState(false);\n\n return (\n <button\n onClick={onClick}\n onMouseEnter={() => setHovered(true)}\n onMouseLeave={() => setHovered(false)}\n onFocus={() => setFocused(true)}\n onBlur={() => setFocused(false)}\n style={{\n display: \"flex\",\n alignItems: \"center\",\n gap: 12,\n width: \"100%\",\n padding: \"11px 14px\",\n background: hovered ? \"var(--dc-surface-hover)\" : \"transparent\",\n border: focused ? \"1px solid var(--dc-border-accent)\" : \"1px solid transparent\",\n borderRadius: 10,\n cursor: \"pointer\",\n textAlign: \"left\",\n transition: \"background 0.12s, border-color 0.12s\",\n outline: \"none\",\n fontFamily: \"inherit\",\n }}\n >\n <WalletIcon src={wallet.icon || undefined} name={wallet.name} size={38} />\n <span style={{ flex: 1, fontSize: 14, fontWeight: 600, color: \"var(--dc-text)\", letterSpacing: \"-0.01em\" }}>\n {wallet.name}\n </span>\n <ChainIconStack support={wallet.chainSupport} size={16} />\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\"\n style={{ color: hovered ? \"var(--dc-text-secondary)\" : \"var(--dc-text-muted)\", flexShrink: 0, transition: \"color 0.12s\" }}>\n <path d=\"M5 2.5L9.5 7L5 11.5\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n </button>\n );\n}\n\ninterface FilterTabProps {\n label: string;\n active: boolean;\n onClick: () => void;\n}\n\nfunction FilterTab({ label, active, onClick }: FilterTabProps) {\n const [hovered, setHovered] = useState(false);\n return (\n <button\n onClick={onClick}\n onMouseEnter={() => setHovered(true)}\n onMouseLeave={() => setHovered(false)}\n style={{\n flex: 1,\n padding: \"6px 8px\",\n borderRadius: 8,\n border: active ? \"1px solid var(--dc-border-accent)\" : \"1px solid transparent\",\n background: active ? \"rgba(245,200,0,0.1)\" : hovered ? \"var(--dc-surface-hover)\" : \"transparent\",\n color: active ? \"var(--dc-accent)\" : \"var(--dc-text-muted)\",\n fontSize: 11,\n fontWeight: 700,\n letterSpacing: \"0.04em\",\n textTransform: \"uppercase\",\n cursor: \"pointer\",\n transition: \"all 0.12s\",\n fontFamily: \"inherit\",\n outline: \"none\",\n }}\n >\n {label}\n </button>\n );\n}\n\ninterface ChainOptionProps {\n label: string;\n description: string;\n badges: React.ReactNode;\n onClick: () => void;\n}\n\nfunction ChainOption({ label, description, badges, onClick }: ChainOptionProps) {\n const [hovered, setHovered] = useState(false);\n return (\n <button\n onClick={onClick}\n onMouseEnter={() => setHovered(true)}\n onMouseLeave={() => setHovered(false)}\n style={{\n display: \"flex\",\n flexDirection: \"column\",\n alignItems: \"flex-start\",\n gap: 6,\n width: \"100%\",\n padding: \"14px 16px\",\n background: hovered ? \"var(--dc-surface-hover)\" : \"var(--dc-surface)\",\n border: hovered ? \"1px solid var(--dc-border-accent)\" : \"1px solid var(--dc-border)\",\n borderRadius: 12,\n cursor: \"pointer\",\n textAlign: \"left\",\n transition: \"all 0.12s\",\n fontFamily: \"inherit\",\n outline: \"none\",\n }}\n >\n {badges}\n <span style={{ fontSize: 13, fontWeight: 700, color: \"var(--dc-text)\" }}>{label}</span>\n <span style={{ fontSize: 11, color: \"var(--dc-text-muted)\", lineHeight: 1.4 }}>{description}</span>\n </button>\n );\n}\n\nexport function WalletSelector({\n provider,\n open,\n onClose,\n onConnect,\n theme = \"auto\",\n networks = \"all\",\n}: WalletSelectorProps) {\n const [search, setSearch] = useState(\"\");\n const [filter, setFilter] = useState<FilterType>(\"all\");\n const [pendingWallet, setPendingWallet] = useState<UnifiedWalletAccount | null>(null);\n\n useEffect(() => {\n if (!open) return;\n injectFont();\n injectTokens(theme);\n if (theme !== \"auto\") return;\n const mq = window.matchMedia(\"(prefers-color-scheme: dark)\");\n const handler = () => injectTokens(\"auto\");\n mq.addEventListener(\"change\", handler);\n return () => mq.removeEventListener(\"change\", handler);\n }, [open, theme]);\n\n useEffect(() => {\n if (!open) {\n setSearch(\"\");\n setFilter(\"all\");\n setPendingWallet(null);\n return;\n }\n return () => {\n document.getElementById(\"decane-tokens\")?.remove();\n };\n }, [open]);\n\n const handleKey = useCallback(\n (e: KeyboardEvent) => {\n if (e.key === \"Escape\") {\n if (pendingWallet) {\n setPendingWallet(null);\n } else {\n onClose();\n }\n }\n },\n [onClose, pendingWallet],\n );\n\n useEffect(() => {\n if (!open) return;\n document.addEventListener(\"keydown\", handleKey);\n return () => document.removeEventListener(\"keydown\", handleKey);\n }, [open, handleKey]);\n\n if (!open) return null;\n\n const q = search.toLowerCase();\n\n // Pre-filter by configured networks before anything else\n const networkWallets = provider.wallets.filter((w) => {\n const cs = w.chainSupport as string[];\n if (networks === \"evm\") return cs.includes(\"evm\");\n if (networks === \"solana\") return cs.includes(\"solana\");\n if (networks === \"tron\") return cs.includes(\"tron\");\n if (networks === \"bitcoin\") return cs.includes(\"bitcoin\");\n return true;\n });\n\n const baseWallets =\n filter === \"evm\"\n ? networkWallets.filter((w) => (w.chainSupport as string[]).includes(\"evm\"))\n : filter === \"solana\"\n ? networkWallets.filter((w) => (w.chainSupport as string[]).includes(\"solana\"))\n : filter === \"tron\"\n ? networkWallets.filter((w) => (w.chainSupport as string[]).includes(\"tron\"))\n : filter === \"bitcoin\"\n ? networkWallets.filter((w) => (w.chainSupport as string[]).includes(\"bitcoin\"))\n : networkWallets;\n const filtered = q\n ? baseWallets.filter((w) => w.name.toLowerCase().includes(q))\n : baseWallets;\n\n function handleWalletClick(wallet: UnifiedWalletAccount) {\n const cs = wallet.chainSupport as string[];\n const isMulti = cs.length >= 2;\n if (isMulti && networks === \"all\") {\n // Show chain picker only when the dApp supports all network types\n setPendingWallet(wallet);\n } else {\n const preference: ChainType | undefined =\n networks === \"evm\" ? \"evm\" :\n networks === \"solana\" ? \"solana\" :\n networks === \"tron\" ? \"tron\" :\n networks === \"bitcoin\" ? \"bitcoin\" :\n undefined;\n onConnect(wallet, preference);\n onClose();\n }\n }\n\n function handleChainChoice(preference?: ChainType) {\n if (!pendingWallet) return;\n onConnect(pendingWallet, preference);\n onClose();\n }\n\n const modal = (\n <div\n role=\"dialog\"\n aria-modal=\"true\"\n aria-label=\"Connect wallet\"\n style={{\n position: \"fixed\",\n inset: 0,\n zIndex: 9999,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n padding: \"16px\",\n fontFamily: \"var(--dc-font-sans)\",\n }}\n >\n {/* Backdrop */}\n <div\n onClick={() => {\n if (pendingWallet) {\n setPendingWallet(null);\n } else {\n onClose();\n }\n }}\n style={{\n position: \"absolute\",\n inset: 0,\n background: \"var(--dc-bg-overlay)\",\n backdropFilter: \"blur(8px)\",\n WebkitBackdropFilter: \"blur(8px)\",\n }}\n />\n\n {/* Modal card */}\n <div\n style={{\n position: \"relative\",\n background: \"var(--dc-bg)\",\n border: \"1px solid var(--dc-border)\",\n borderRadius: 20,\n width: \"100%\",\n maxWidth: 400,\n maxHeight: \"85vh\",\n display: \"flex\",\n flexDirection: \"column\",\n boxShadow: \"0 24px 64px rgba(0,0,0,0.6), 0 0 0 1px rgba(255,255,255,0.04)\",\n overflow: \"hidden\",\n }}\n >\n {/* Gold top accent */}\n <div\n style={{\n height: 2,\n background: \"linear-gradient(90deg, transparent, var(--dc-accent) 30%, var(--dc-accent) 70%, transparent)\",\n }}\n />\n\n {pendingWallet ? (\n /* ── Chain picker step ───────────────────────────────────────── */\n <>\n {/* Header */}\n <div style={{ padding: \"18px 20px 16px\", display: \"flex\", alignItems: \"center\", gap: 10 }}>\n <button\n onClick={() => setPendingWallet(null)}\n aria-label=\"Back\"\n style={{\n background: \"var(--dc-surface)\",\n border: \"1px solid var(--dc-border)\",\n borderRadius: 8,\n width: 28,\n height: 28,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n cursor: \"pointer\",\n color: \"var(--dc-text-muted)\",\n flexShrink: 0,\n fontFamily: \"inherit\",\n padding: 0,\n }}\n >\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\">\n <path d=\"M7.5 2L3 6l4.5 4\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n </button>\n <h2 style={{ margin: 0, fontSize: 16, fontWeight: 800, color: \"var(--dc-text)\", letterSpacing: \"-0.02em\" }}>\n Choose networks\n </h2>\n <button\n onClick={onClose}\n aria-label=\"Close\"\n style={{\n marginLeft: \"auto\",\n background: \"var(--dc-surface)\",\n border: \"1px solid var(--dc-border)\",\n borderRadius: 8,\n width: 28,\n height: 28,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n cursor: \"pointer\",\n color: \"var(--dc-text-muted)\",\n flexShrink: 0,\n fontFamily: \"inherit\",\n padding: 0,\n }}\n >\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\">\n <path d=\"M1.5 1.5L10.5 10.5M10.5 1.5L1.5 10.5\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n </svg>\n </button>\n </div>\n\n {/* Wallet preview */}\n <div\n style={{\n margin: \"0 20px 16px\",\n padding: \"12px 14px\",\n background: \"var(--dc-surface)\",\n border: \"1px solid var(--dc-border)\",\n borderRadius: 12,\n display: \"flex\",\n alignItems: \"center\",\n gap: 12,\n }}\n >\n <WalletIcon src={pendingWallet.icon || undefined} name={pendingWallet.name} size={36} />\n <div>\n <div style={{ fontSize: 14, fontWeight: 700, color: \"var(--dc-text)\" }}>{pendingWallet.name}</div>\n <div style={{ fontSize: 11, color: \"var(--dc-text-muted)\", marginTop: 2 }}>Multi-chain wallet detected</div>\n </div>\n </div>\n\n {/* Options — dynamic per wallet's chainSupport */}\n <div style={{ padding: \"0 12px 20px\", display: \"flex\", flexDirection: \"column\", gap: 8 }}>\n {(pendingWallet.chainSupport as string[]).includes(\"evm\") && (\n <ChainOption\n label=\"EVM networks\"\n description=\"Connect your Ethereum-compatible address only\"\n badges={<ChainIconStack support={[\"evm\"]} size={18} />}\n onClick={() => handleChainChoice(\"evm\")}\n />\n )}\n {(pendingWallet.chainSupport as string[]).includes(\"solana\") && (\n <ChainOption\n label=\"Solana network\"\n description=\"Connect your Solana address only\"\n badges={<ChainIconStack support={[\"solana\"]} size={18} />}\n onClick={() => handleChainChoice(\"solana\")}\n />\n )}\n {(pendingWallet.chainSupport as string[]).includes(\"tron\") && (\n <ChainOption\n label=\"Tron network\"\n description=\"Connect your Tron address only\"\n badges={<ChainIconStack support={[\"tron\"]} size={18} />}\n onClick={() => handleChainChoice(\"tron\")}\n />\n )}\n {(pendingWallet.chainSupport as string[]).includes(\"bitcoin\") && (\n <ChainOption\n label=\"Bitcoin network\"\n description=\"Connect your Bitcoin address only\"\n badges={<ChainIconStack support={[\"bitcoin\"]} size={18} />}\n onClick={() => handleChainChoice(\"bitcoin\")}\n />\n )}\n <ChainOption\n label=\"All networks\"\n description=\"Connect all supported addresses together\"\n badges={<ChainIconStack support={pendingWallet.chainSupport} size={18} />}\n onClick={() => handleChainChoice(undefined)}\n />\n </div>\n </>\n ) : (\n /* ── Wallet list step ────────────────────────────────────────── */\n <>\n {/* Header */}\n <div style={{ padding: \"18px 20px 0\" }}>\n <div style={{ display: \"flex\", alignItems: \"flex-start\", justifyContent: \"space-between\", marginBottom: 14 }}>\n <div>\n <h2 style={{ margin: 0, fontSize: 17, fontWeight: 800, color: \"var(--dc-text)\", letterSpacing: \"-0.02em\", lineHeight: 1.2 }}>\n Connect wallet\n </h2>\n {networkWallets.length > 0 && (\n <p style={{ margin: \"3px 0 0\", fontSize: 12, color: \"var(--dc-text-muted)\" }}>\n {networkWallets.length} wallet{networkWallets.length !== 1 ? \"s\" : \"\"} detected\n </p>\n )}\n </div>\n <button\n onClick={onClose}\n aria-label=\"Close\"\n style={{\n background: \"var(--dc-surface)\",\n border: \"1px solid var(--dc-border)\",\n cursor: \"pointer\",\n padding: 0,\n width: 28,\n height: 28,\n borderRadius: 8,\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n color: \"var(--dc-text-muted)\",\n flexShrink: 0,\n transition: \"background 0.12s, color 0.12s\",\n fontFamily: \"inherit\",\n }}\n onMouseEnter={(e) => {\n (e.currentTarget as HTMLButtonElement).style.background = \"var(--dc-surface-hover)\";\n (e.currentTarget as HTMLButtonElement).style.color = \"var(--dc-text)\";\n }}\n onMouseLeave={(e) => {\n (e.currentTarget as HTMLButtonElement).style.background = \"var(--dc-surface)\";\n (e.currentTarget as HTMLButtonElement).style.color = \"var(--dc-text-muted)\";\n }}\n >\n <svg width=\"12\" height=\"12\" viewBox=\"0 0 12 12\" fill=\"none\">\n <path d=\"M1.5 1.5L10.5 10.5M10.5 1.5L1.5 10.5\" stroke=\"currentColor\" strokeWidth=\"1.5\" strokeLinecap=\"round\" />\n </svg>\n </button>\n </div>\n\n {/* Search */}\n <div style={{ position: \"relative\", marginBottom: 10 }}>\n <svg width=\"14\" height=\"14\" viewBox=\"0 0 14 14\" fill=\"none\"\n style={{ position: \"absolute\", left: 10, top: \"50%\", transform: \"translateY(-50%)\", color: \"var(--dc-text-muted)\", pointerEvents: \"none\" }}>\n <circle cx=\"6\" cy=\"6\" r=\"4\" stroke=\"currentColor\" strokeWidth=\"1.4\" />\n <path d=\"M9.5 9.5L12 12\" stroke=\"currentColor\" strokeWidth=\"1.4\" strokeLinecap=\"round\" />\n </svg>\n <input\n type=\"text\"\n placeholder=\"Search wallets…\"\n value={search}\n onChange={(e) => setSearch(e.target.value)}\n style={{\n width: \"100%\",\n background: \"var(--dc-surface)\",\n border: \"1px solid var(--dc-border)\",\n borderRadius: 10,\n color: \"var(--dc-text)\",\n fontSize: 13,\n padding: \"8px 12px 8px 32px\",\n outline: \"none\",\n fontFamily: \"var(--dc-font-sans)\",\n transition: \"border-color 0.15s\",\n boxSizing: \"border-box\",\n }}\n onFocus={(e) => { e.currentTarget.style.borderColor = \"var(--dc-border-accent)\"; }}\n onBlur={(e) => { e.currentTarget.style.borderColor = \"var(--dc-border)\"; }}\n />\n </div>\n\n {/* Filter tabs — hidden when dApp is locked to one network type */}\n {networks === \"all\" && (\n <div style={{ display: \"flex\", gap: 4, marginBottom: 10 }}>\n <FilterTab label=\"All\" active={filter === \"all\"} onClick={() => setFilter(\"all\")} />\n <FilterTab label=\"EVM\" active={filter === \"evm\"} onClick={() => setFilter(\"evm\")} />\n <FilterTab label=\"Solana\" active={filter === \"solana\"} onClick={() => setFilter(\"solana\")} />\n {provider.tronWallets && provider.tronWallets.length > 0 && (\n <FilterTab label=\"Tron\" active={filter === \"tron\"} onClick={() => setFilter(\"tron\")} />\n )}\n {provider.bitcoinWallets && provider.bitcoinWallets.length > 0 && (\n <FilterTab label=\"Bitcoin\" active={filter === \"bitcoin\"} onClick={() => setFilter(\"bitcoin\")} />\n )}\n </div>\n )}\n </div>\n\n {/* Scrollable wallet list */}\n <div style={{ overflowY: \"auto\", flex: 1, padding: \"0 12px 20px\" }}>\n {filtered.length > 0 ? (\n <div style={{ display: \"flex\", flexDirection: \"column\", gap: 2 }}>\n {filtered.map((w) => (\n <WalletRow key={w.id} wallet={w} onClick={() => handleWalletClick(w)} />\n ))}\n </div>\n ) : (\n <div style={{ textAlign: \"center\", padding: \"32px 16px\", color: \"var(--dc-text-muted)\", fontSize: 13 }}>\n {q ? `No wallets matching \"${q}\"` : \"No wallets detected\"}\n </div>\n )}\n </div>\n\n {/* Footer */}\n <div style={{ padding: \"10px 20px 14px\", borderTop: \"1px solid var(--dc-border)\", textAlign: \"center\", fontSize: 11, color: \"var(--dc-text-muted)\" }}>\n Don't see your wallet? Make sure it's installed and unlocked\n </div>\n </>\n )}\n </div>\n </div>\n );\n\n return createPortal(modal, document.body);\n}\n","export const tokens = {\n // ── Gold palette ──────────────────────────────────────────────────────────\n gold: {\n 50: \"#FFFDF0\",\n 100: \"#FFF8D6\",\n 200: \"#FFEF99\",\n 300: \"#FFE04D\",\n 400: \"#F5C800\", // primary gold — buttons, accents\n 500: \"#D4A800\", // darker gold — hover states\n 600: \"#A37F00\", // deep gold — borders, active\n 700: \"#7A5E00\",\n 800: \"#4D3B00\",\n 900: \"#261D00\",\n },\n\n // ── Black / dark palette ──────────────────────────────────────────────────\n black: {\n 0: \"#FFFFFF\",\n 50: \"#F9F9F7\",\n 100: \"#F0EFEB\",\n 200: \"#DDDCDA\",\n 300: \"#BDBBB8\",\n 400: \"#8A8884\",\n 500: \"#5C5A57\",\n 600: \"#3D3C39\",\n 700: \"#2A2927\",\n 800: \"#1A1917\",\n 900: \"#0D0D0B\",\n 950: \"#070706\",\n },\n\n // ── Semantic tokens — light mode ──────────────────────────────────────────\n light: {\n bg: \"#FFFFFF\",\n bgOverlay: \"rgba(0, 0, 0, 0.55)\",\n surface: \"#F9F9F7\",\n surfaceHover: \"#F0EFEB\",\n border: \"#DDDCDA\",\n borderAccent: \"#F5C800\",\n text: \"#0D0D0B\",\n textSecondary: \"#5C5A57\",\n textMuted: \"#8A8884\",\n accent: \"#F5C800\",\n accentHover: \"#D4A800\",\n accentText: \"#0D0D0B\",\n badgeEvm: \"#1A1917\",\n badgeEvmText: \"#F5C800\",\n badgeSolana: \"#F5C800\",\n badgeSolanaText: \"#0D0D0B\",\n danger: \"#CC3300\",\n },\n\n // ── Semantic tokens — dark mode ───────────────────────────────────────────\n dark: {\n bg: \"#0D0D0B\",\n bgOverlay: \"rgba(0, 0, 0, 0.75)\",\n surface: \"#1A1917\",\n surfaceHover: \"#2A2927\",\n border: \"#3D3C39\",\n borderAccent: \"#F5C800\",\n text: \"#F9F9F7\",\n textSecondary: \"#BDBBB8\",\n textMuted: \"#8A8884\",\n accent: \"#F5C800\",\n accentHover: \"#FFE04D\",\n accentText: \"#0D0D0B\",\n badgeEvm: \"#F5C800\",\n badgeEvmText: \"#0D0D0B\",\n badgeSolana: \"#1A1917\",\n badgeSolanaText: \"#F5C800\",\n danger: \"#FF5533\",\n },\n} as const;\n\n// Font stacks — used by the modal container and all child elements via var()\nexport const FONT_SANS = \"'Plus Jakarta Sans', -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif\";\nexport const FONT_MONO = \"'JetBrains Mono', 'Fira Code', ui-monospace, monospace\";\n\nexport const CSS_VARS = {\n light: `\n --dc-font-sans: ${FONT_SANS};\n --dc-font-mono: ${FONT_MONO};\n --dc-bg: ${tokens.light.bg};\n --dc-bg-overlay: ${tokens.light.bgOverlay};\n --dc-surface: ${tokens.light.surface};\n --dc-surface-hover: ${tokens.light.surfaceHover};\n --dc-border: ${tokens.light.border};\n --dc-border-accent: ${tokens.light.borderAccent};\n --dc-text: ${tokens.light.text};\n --dc-text-secondary: ${tokens.light.textSecondary};\n --dc-text-muted: ${tokens.light.textMuted};\n --dc-accent: ${tokens.light.accent};\n --dc-accent-hover: ${tokens.light.accentHover};\n --dc-accent-text: ${tokens.light.accentText};\n --dc-badge-evm: ${tokens.light.badgeEvm};\n --dc-badge-evm-text: ${tokens.light.badgeEvmText};\n --dc-badge-sol: ${tokens.light.badgeSolana};\n --dc-badge-sol-text: ${tokens.light.badgeSolanaText};\n --dc-danger: ${tokens.light.danger};\n `,\n dark: `\n --dc-font-sans: ${FONT_SANS};\n --dc-font-mono: ${FONT_MONO};\n --dc-bg: ${tokens.dark.bg};\n --dc-bg-overlay: ${tokens.dark.bgOverlay};\n --dc-surface: ${tokens.dark.surface};\n --dc-surface-hover: ${tokens.dark.surfaceHover};\n --dc-border: ${tokens.dark.border};\n --dc-border-accent: ${tokens.dark.borderAccent};\n --dc-text: ${tokens.dark.text};\n --dc-text-secondary: ${tokens.dark.textSecondary};\n --dc-text-muted: ${tokens.dark.textMuted};\n --dc-accent: ${tokens.dark.accent};\n --dc-accent-hover: ${tokens.dark.accentHover};\n --dc-accent-text: ${tokens.dark.accentText};\n --dc-badge-evm: ${tokens.dark.badgeEvm};\n --dc-badge-evm-text: ${tokens.dark.badgeEvmText};\n --dc-badge-sol: ${tokens.dark.badgeSolana};\n --dc-badge-sol-text: ${tokens.dark.badgeSolanaText};\n --dc-danger: ${tokens.dark.danger};\n `,\n} as const;\n","import React from \"react\";\nimport type { ChainType } from \"../types\";\n\ninterface WalletIconProps {\n src?: string;\n name: string;\n size?: number;\n}\n\nexport function WalletIcon({ src, name, size = 36 }: WalletIconProps) {\n if (src) {\n return (\n <img\n src={src}\n alt={name}\n width={size}\n height={size}\n style={{ borderRadius: size * 0.25, objectFit: \"cover\", flexShrink: 0 }}\n />\n );\n }\n\n const initial = name.charAt(0).toUpperCase();\n return (\n <div\n style={{\n width: size,\n height: size,\n borderRadius: size * 0.25,\n background: \"linear-gradient(135deg, var(--dc-surface-hover), var(--dc-surface-active, var(--dc-surface-hover)))\",\n border: \"1px solid var(--dc-border)\",\n display: \"flex\",\n alignItems: \"center\",\n justifyContent: \"center\",\n fontSize: size * 0.38,\n fontWeight: 800,\n color: \"var(--dc-accent)\",\n flexShrink: 0,\n fontFamily: \"var(--dc-font-sans)\",\n letterSpacing: \"-0.02em\",\n }}\n >\n {initial}\n </div>\n );\n}\n\nfunction EthCircle({ size }: { size: number }) {\n const s = size;\n return (\n <svg width={s} height={s} viewBox=\"0 0 16 16\" fill=\"none\">\n <circle cx=\"8\" cy=\"8\" r=\"8\" fill=\"#627EEA\" />\n {/* Ethereum diamond */}\n <polygon points=\"8,2.5 11.5,8 8,9.8 4.5,8\" fill=\"white\" fillOpacity=\"0.9\" />\n <polygon points=\"8,9.8 11.5,8 8,13.5\" fill=\"white\" fillOpacity=\"0.6\" />\n <polygon points=\"8,9.8 4.5,8 8,13.5\" fill=\"white\" fillOpacity=\"0.8\" />\n <polygon points=\"8,2.5 8,9.8 4.5,8\" fill=\"white\" fillOpacity=\"0.6\" />\n </svg>\n );\n}\n\nfunction SolCircle({ size }: { size: number }) {\n const s = size;\n return (\n <svg width={s} height={s} viewBox=\"0 0 16 16\" fill=\"none\">\n <circle cx=\"8\" cy=\"8\" r=\"8\" fill=\"#9945FF\" />\n {/* Solana 3 bars */}\n <rect x=\"4\" y=\"4.5\" width=\"7\" height=\"1.5\" rx=\"0.75\" fill=\"white\" fillOpacity=\"0.95\" />\n <rect x=\"4\" y=\"7.25\" width=\"7\" height=\"1.5\" rx=\"0.75\" fill=\"white\" fillOpacity=\"0.95\" />\n <rect x=\"4\" y=\"10\" width=\"5.5\" height=\"1.5\" rx=\"0.75\" fill=\"white\" fillOpacity=\"0.95\" />\n </svg>\n );\n}\n\nfunction TronCircle({ size }: { size: number }) {\n const s = size;\n return (\n <svg width={s} height={s} viewBox=\"0 0 16 16\" fill=\"none\">\n <circle cx=\"8\" cy=\"8\" r=\"8\" fill=\"#FF0013\" />\n {/* Play triangle */}\n <polygon points=\"6,4.5 12,8 6,11.5\" fill=\"white\" fillOpacity=\"0.95\" />\n </svg>\n );\n}\n\nfunction BitcoinCircle({ size }: { size: number }) {\n const s = size;\n return (\n <svg width={s} height={s} viewBox=\"0 0 16 16\" fill=\"none\">\n <circle cx=\"8\" cy=\"8\" r=\"8\" fill=\"#F7931A\" />\n {/* ₿ symbol */}\n <text\n x=\"8.3\"\n y=\"11.5\"\n textAnchor=\"middle\"\n fontSize=\"8\"\n fontWeight=\"700\"\n fill=\"white\"\n fontFamily=\"Arial, system-ui\"\n >\n ₿\n </text>\n </svg>\n );\n}\n\nfunction ChainCircleIcon({ chain, size }: { chain: ChainType; size: number }) {\n switch (chain) {\n case \"evm\": return <EthCircle size={size} />;\n case \"solana\": return <SolCircle size={size} />;\n case \"tron\": return <TronCircle size={size} />;\n case \"bitcoin\": return <BitcoinCircle size={size} />;\n }\n}\n\nconst CHAIN_ORDER: ChainType[] = [\"evm\", \"solana\", \"tron\", \"bitcoin\"];\n\ninterface ChainIconStackProps {\n support: readonly string[];\n size?: number;\n}\n\nexport function ChainIconStack({ support, size = 16 }: ChainIconStackProps) {\n const ordered = CHAIN_ORDER.filter((c) => support.includes(c));\n if (ordered.length === 0) return null;\n const overlap = Math.round(size * 0.35);\n\n return (\n <div style={{ display: \"flex\", alignItems: \"center\", flexShrink: 0 }}>\n {ordered.map((chain, i) => (\n <div\n key={chain}\n style={{\n marginLeft: i === 0 ? 0 : `-${overlap}px`,\n zIndex: ordered.length - i,\n position: \"relative\",\n borderRadius: \"50%\",\n lineHeight: 0,\n boxShadow: i > 0 ? `0 0 0 1.5px var(--dc-bg, #fff)` : undefined,\n }}\n >\n <ChainCircleIcon chain={chain} size={size} />\n </div>\n ))}\n </div>\n );\n}\n","import React, {\n createContext,\n useCallback,\n useContext,\n useRef,\n useState,\n type ReactNode,\n} from \"react\";\nimport { createDecane } from \"../factory\";\nimport { WalletSelector } from \"./WalletSelector\";\nimport type { DecaneProvider, DecaneConfig, UnifiedWalletAccount, ChainType } from \"../types\";\n\nexport type Theme = \"light\" | \"dark\" | \"auto\";\n\ninterface DecaneContextValue {\n provider: DecaneProvider;\n selectorOpen: boolean;\n openSelector: () => void;\n closeSelector: () => void;\n theme: Theme;\n setTheme: (t: Theme) => void;\n}\n\nconst DecaneContext = createContext<DecaneContextValue | null>(null);\n\ninterface DecaneKitProps {\n config?: DecaneConfig;\n children: ReactNode;\n}\n\nexport function DecaneKit({ config, children }: DecaneKitProps) {\n const ref = useRef<DecaneProvider | null>(null);\n if (!ref.current) {\n ref.current = createDecane(config);\n }\n\n const [selectorOpen, setSelectorOpen] = useState(false);\n const [theme, setTheme] = useState<Theme>(config?.theme ?? \"auto\");\n\n const openSelector = useCallback(() => setSelectorOpen(true), []);\n const closeSelector = useCallback(() => setSelectorOpen(false), []);\n\n const handleConnect = useCallback(\n (wallet: UnifiedWalletAccount, preference?: ChainType) => {\n ref.current!.connect(wallet, preference).catch(console.error);\n },\n [],\n );\n\n return (\n <DecaneContext.Provider\n value={{ provider: ref.current, selectorOpen, openSelector, closeSelector, theme, setTheme }}\n >\n {children}\n <WalletSelector\n provider={ref.current}\n open={selectorOpen}\n onClose={closeSelector}\n onConnect={handleConnect}\n theme={theme}\n networks={config?.networks ?? \"all\"}\n />\n </DecaneContext.Provider>\n );\n}\n\nexport function useDecaneContext(): DecaneContextValue {\n const ctx = useContext(DecaneContext);\n if (!ctx) {\n throw new Error(\n \"Decane hooks must be called inside <DecaneKit>. \" +\n \"Wrap your app: <DecaneKit config={...}><App /></DecaneKit>\",\n );\n }\n return ctx;\n}\n","import { useState, useEffect, useCallback } from \"react\";\nimport { useDecaneContext } from \"./context\";\nimport type { DecaneProvider, UnifiedWalletAccount, ChainType, ChainDescriptor } from \"../types\";\nimport { DecaneError, DecaneErrorCode } from \"../errors\";\n\nfunction toDecaneError(err: unknown): DecaneError {\n if (err instanceof DecaneError) return err;\n // Wallet providers (EIP-1193, TronLink, Unisat, etc.) throw plain objects\n // with a `message` field — extract it before falling back to String()\n const msg =\n err instanceof Error\n ? err.message\n : (err as { message?: unknown })?.message != null\n ? String((err as { message: unknown }).message)\n : String(err);\n return new DecaneError(DecaneErrorCode.PROVIDER_ERROR, msg);\n}\n\n// ── useDecane ─────────────────────────────────────────────────────────────────\n\nexport function useDecane() {\n const { provider, theme, setTheme } = useDecaneContext();\n const [, forceUpdate] = useState(0);\n\n useEffect(() => {\n const refresh = () => forceUpdate((n) => n + 1);\n const events = [\n \"connect\", \"disconnect\",\n \"walletRegistered\", \"walletUpdated\", \"walletUnregistered\",\n \"chainAdded\", \"chainRemoved\",\n ] as const;\n events.forEach((e) => provider.on(e, refresh));\n return () => events.forEach((e) => provider.off(e, refresh));\n }, [provider]);\n\n return {\n provider,\n wallets: provider.wallets,\n evmWallets: provider.evmWallets,\n solanaWallets: provider.solanaWallets,\n multiChainWallets: provider.multiChainWallets,\n chains: provider.chains,\n connectedWallet: provider.connectedWallet,\n activeSession: provider.activeSession,\n activeChain: provider.activeChain,\n isConnected: !!provider.connectedWallet,\n theme,\n setTheme,\n connect: (wallet: UnifiedWalletAccount, preference?: ChainType) =>\n provider.connect(wallet, preference),\n disconnect: () => provider.disconnect(),\n addChain: (chain: ChainDescriptor) => provider.addChain(chain),\n removeChain: (chainId: string) => provider.removeChain(chainId),\n };\n}\n\n// ── useWalletSelector ─────────────────────────────────────────────────────────\n// Modal is owned by <DecaneKit> — this hook just exposes open/close controls.\n\nexport function useWalletSelector() {\n const { selectorOpen, openSelector, closeSelector } = useDecaneContext();\n return { isOpen: selectorOpen, open: openSelector, close: closeSelector };\n}\n\n// ── useChainSwitch ────────────────────────────────────────────────────────────\n\nexport function useChainSwitch() {\n const { provider } = useDecaneContext();\n const [, forceUpdate] = useState(0);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<DecaneError | null>(null);\n\n useEffect(() => {\n const refresh = () => forceUpdate((n) => n + 1);\n provider.on(\"connect\", refresh);\n provider.on(\"disconnect\", refresh);\n return () => {\n provider.off(\"connect\", refresh);\n provider.off(\"disconnect\", refresh);\n };\n }, [provider]);\n\n const switchChain = useCallback(\n async (chainId: string): Promise<void> => {\n setLoading(true);\n setError(null);\n try {\n const existingScope = provider.activeSession?.grantedScopes[chainId];\n await provider.request({\n method: \"wallet_requestPermissions\",\n params: [\n {\n requiredScopes: {\n [chainId]: existingScope ?? {\n methods: [\"wallet_sendTransaction\", \"wallet_signMessage\"],\n accounts: [],\n events: [],\n },\n },\n optionalScopes: {},\n },\n ],\n });\n forceUpdate((n) => n + 1);\n } catch (err) {\n const e = toDecaneError(err);\n setError(e);\n throw err;\n } finally {\n setLoading(false);\n }\n },\n [provider],\n );\n\n return {\n switchChain,\n loading,\n error,\n activeChain: provider.activeChain,\n grantedChains: provider.activeSession\n ? Object.keys(provider.activeSession.grantedScopes)\n : [],\n };\n}\n\n// ── internal: resolve chain + account from active session ─────────────────────\n\nfunction resolveScope(\n provider: DecaneProvider,\n chainId?: string,\n account?: string,\n): { chain: string; account: string } {\n const chain = chainId ?? provider.activeChain;\n if (!chain) {\n throw new DecaneError(\n DecaneErrorCode.NO_ACTIVE_SESSION,\n \"No active chain — connect a wallet first.\",\n );\n }\n const scope = provider.activeSession?.grantedScopes[chain];\n const resolved = account ?? scope?.accounts[0]?.split(\":\").pop() ?? \"\";\n return { chain, account: resolved };\n}\n\n// ── useSignMessage ────────────────────────────────────────────────────────────\n\nexport function useSignMessage() {\n const { provider } = useDecaneContext();\n const [signature, setSignature] = useState<string | null>(null);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<DecaneError | null>(null);\n\n const signMessage = useCallback(\n async (\n message: string,\n options?: { chainId?: string; account?: string },\n ): Promise<string> => {\n const { chain, account } = resolveScope(\n provider, options?.chainId, options?.account,\n );\n setLoading(true);\n setError(null);\n try {\n const sig = (await provider.request({\n method: \"wallet_signMessage\",\n params: [chain, account, message],\n })) as string;\n setSignature(sig);\n return sig;\n } catch (err) {\n const e = toDecaneError(err);\n setError(e);\n throw err;\n } finally {\n setLoading(false);\n }\n },\n [provider],\n );\n\n const reset = useCallback(() => { setSignature(null); setError(null); }, []);\n return { signMessage, signature, loading, error, reset };\n}\n\n// ── useSendTransaction ────────────────────────────────────────────────────────\n\nexport interface TxParams {\n to: string;\n value?: string; // decimal wei (\"1000000\") or hex (\"0x0f4240\")\n data?: string;\n gas?: string;\n gasPrice?: string;\n}\n\nexport function useSendTransaction() {\n const { provider } = useDecaneContext();\n const [txHash, setTxHash] = useState<string | null>(null);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<DecaneError | null>(null);\n\n const sendTransaction = useCallback(\n async (\n tx: TxParams,\n options?: { chainId?: string; from?: string },\n ): Promise<string> => {\n const { chain, account } = resolveScope(\n provider, options?.chainId, options?.from,\n );\n const value = tx.value\n ? tx.value.startsWith(\"0x\")\n ? tx.value\n : `0x${parseInt(tx.value, 10).toString(16)}`\n : \"0x0\";\n\n setLoading(true);\n setError(null);\n try {\n const hash = (await provider.request({\n method: \"wallet_sendTransaction\",\n params: [chain, account, { ...tx, value }],\n })) as string;\n setTxHash(hash);\n return hash;\n } catch (err) {\n const e = toDecaneError(err);\n setError(e);\n throw err;\n } finally {\n setLoading(false);\n }\n },\n [provider],\n );\n\n const reset = useCallback(() => { setTxHash(null); setError(null); }, []);\n return { sendTransaction, txHash, loading, error, reset };\n}\n\n// ── useSignTypedData ──────────────────────────────────────────────────────────\n// EVM only — throws EVM_ONLY_METHOD if called on a Solana chain.\n\nexport function useSignTypedData() {\n const { provider } = useDecaneContext();\n const [signature, setSignature] = useState<string | null>(null);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState<DecaneError | null>(null);\n\n const signTypedData = useCallback(\n async (\n typedData: { domain: unknown; types: unknown; message: unknown },\n options?: { chainId?: string; account?: string },\n ): Promise<string> => {\n const { chain, account } = resolveScope(\n provider, options?.chainId, options?.account,\n );\n setLoading(true);\n setError(null);\n try {\n const sig = (await provider.request({\n method: \"wallet_signTypedData\",\n params: [chain, account, typedData],\n })) as string;\n setSignature(sig);\n return sig;\n } catch (err) {\n const e = toDecaneError(err);\n setError(e);\n throw err;\n } finally {\n setLoading(false);\n }\n },\n [provider],\n );\n\n const reset = useCallback(() => { setSignature(null); setError(null); }, []);\n return { signTypedData, signature, loading, error, reset };\n}\n"],"mappings":"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","names":["DecaneErrorCode","import_react","React","React","import_react","React","import_react"]}