@kwespay/widget 1.0.1 → 1.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/kwespay-widget.esm.js +17 -40
- package/dist/kwespay-widget.min.js +536 -536
- package/package.json +4 -4
- package/dist/kwespay-widget.esm.js.map +0 -1
- package/dist/kwespay-widget.js +0 -78152
- package/dist/kwespay-widget.js.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"kwespay-widget.esm.js","sources":["../src/config/constants.js","../src/services/walletService.js","../node_modules/.pnpm/@kwespay+client@0.1.10/node_modules/@kwespay/client/dist/esm/index.js","../src/services/paymentService.js","../src/ui/styles.js","../src/ui/template.js","../src/utils/helpers.js","../src/core/kwespayWidget.js","../src/index.js"],"sourcesContent":["export const SUPPORTED_CURRENCIES = {\n USD: \"USD\",\n GHS: \"GHS\",\n};\n\nexport const STABLECOIN_SYMBOLS = [\"USDT\", \"USDC\", \"DAI\", \"BUSD\", \"USDc\"];\n\nexport const DEFAULT_CONFIG = {\n projectId: \"3a2347dfc8ba5a336fe715a34644f490\",\n graphqlEndpoint: \"https://8284-154-161-98-26.ngrok-free.app\",\n currency: SUPPORTED_CURRENCIES.USD,\n};\n\nexport const NETWORK_CONFIGS = {\n ethereum: {\n name: \"Ethereum\",\n chainId: 1,\n rpcUrl: \"https://eth.llamarpc.com\",\n contractAddress: \"\",\n logo: \"https://arthuremma2.github.io/img-hosting/ethereum-eth.svg\",\n explorer: \"https://etherscan.io/tx/\",\n type: \"mainnet\",\n },\n polygon: {\n name: \"Polygon\",\n chainId: 137,\n rpcUrl: \"https://polygon-rpc.com\",\n contractAddress: \"\",\n logo: \"https://arthuremma2.github.io/img-hosting/Polygon_Icon.png\",\n explorer: \"https://polygonscan.com/tx/\",\n type: \"mainnet\",\n },\n base: {\n name: \"Base\",\n chainId: 8453,\n rpcUrl: \"https://mainnet.base.org\",\n contractAddress: \"\",\n logo: \"https://arthuremma2.github.io/img-hosting/base23.png\",\n explorer: \"https://basescan.org/tx/\",\n type: \"mainnet\",\n },\n lisk: {\n name: \"Lisk\",\n chainId: 1135,\n rpcUrl: \"https://rpc.api.lisk.com\",\n contractAddress: \"\",\n logo: \"https://arthuremma2.github.io/img-hosting/liskt.png\",\n explorer: \"https://blockscout.lisk.com/tx/\",\n type: \"mainnet\",\n },\n sepolia: {\n name: \"Sepolia\",\n chainId: 11155111,\n rpcUrl: \"https://rpc.sepolia.org\",\n contractAddress: \"0x39bE436D6A34d0990cb71c9cBD24a5361d85e00B\",\n logo: \"https://arthuremma2.github.io/img-hosting/ethereum-eth.svg\",\n explorer: \"https://sepolia.etherscan.io/tx/\",\n type: \"testnet\",\n },\n polygonAmoy: {\n name: \"Polygon Amoy\",\n chainId: 80002,\n rpcUrl: \"https://rpc-amoy.polygon.technology\",\n contractAddress: \"0xD31dF3eBd220Fd3e190A346F8927819295d28980\",\n logo: \"https://arthuremma2.github.io/img-hosting/Polygon_Icon.png\",\n explorer: \"https://amoy.polygonscan.com/tx/\",\n type: \"testnet\",\n },\n baseSepolia: {\n name: \"Base Sepolia\",\n chainId: 84532,\n rpcUrl: \"https://sepolia.base.org\",\n contractAddress: \"0x7515b1b1BcA33E7a9ccBd5E2b93771884654De77\",\n logo: \"https://arthuremma2.github.io/img-hosting/base23.png\",\n explorer: \"https://sepolia.basescan.org/tx/\",\n type: \"testnet\",\n },\n liskTestnet: {\n name: \"Lisk Sepolia\",\n chainId: 4202,\n rpcUrl: \"https://rpc.sepolia-api.lisk.com\",\n contractAddress: \"0xd04A78a998146EBAD04c2b68E020C06Dc3b3717f\",\n logo: \"https://arthuremma2.github.io/img-hosting/liskt.png\",\n explorer: \"https://sepolia-blockscout.lisk.com/tx/\",\n type: \"testnet\",\n },\n};\n\nexport const TOKEN_CONFIGS = {\n ethereum: [\n {\n symbol: \"ETH\",\n name: \"Ethereum\",\n icon: \"https://arthuremma2.github.io/img-hosting/ethereum-eth.svg\",\n address: \"0x0000000000000000000000000000000000000000\",\n decimals: 18,\n coingeckoId: \"ethereum\",\n binanceSymbol: \"ETHUSDT\",\n },\n {\n symbol: \"USDT\",\n name: \"Tether USD\",\n icon: \"https://move-flow.github.io/assets/tether-usdt-logo.svg\",\n address: \"0xdAC17F958D2ee523a2206206994597C13D831ec7\",\n decimals: 6,\n coingeckoId: \"tether\",\n binanceSymbol: \"USDTUSDT\",\n },\n {\n symbol: \"USDC\",\n name: \"USD Coin\",\n icon: \"https://move-flow.github.io/assets/usd-coin-usdc-logo.svg\",\n address: \"0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48\",\n decimals: 6,\n coingeckoId: \"usd-coin\",\n binanceSymbol: \"USDCUSDT\",\n },\n ],\n polygon: [\n {\n symbol: \"MATIC\",\n name: \"Polygon\",\n icon: \"https://arthuremma2.github.io/img-hosting/Polygon_Icon.png\",\n address: \"0x0000000000000000000000000000000000000000\",\n decimals: 18,\n coingeckoId: \"matic-network\",\n binanceSymbol: \"MATICUSDT\",\n },\n {\n symbol: \"USDT\",\n name: \"Tether USD\",\n icon: \"https://move-flow.github.io/assets/tether-usdt-logo.svg\",\n address: \"0xc2132D05D31c914a87C6611C10748AEb04B58e8F\",\n decimals: 6,\n coingeckoId: \"tether\",\n binanceSymbol: \"USDTUSDT\",\n },\n ],\n base: [\n {\n symbol: \"ETH\",\n name: \"Ethereum\",\n icon: \"https://arthuremma2.github.io/img-hosting/ethereum-eth.svg\",\n address: \"0x0000000000000000000000000000000000000000\",\n decimals: 18,\n coingeckoId: \"ethereum\",\n binanceSymbol: \"ETHUSDT\",\n },\n {\n symbol: \"USDC\",\n name: \"USD Coin\",\n icon: \"https://move-flow.github.io/assets/usd-coin-usdc-logo.svg\",\n address: \"0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913\",\n decimals: 6,\n coingeckoId: \"usd-coin\",\n binanceSymbol: \"USDCUSDT\",\n },\n ],\n lisk: [\n {\n symbol: \"ETH\",\n name: \"Lisk\",\n icon: \"https://arthuremma2.github.io/img-hosting/liskt.png\",\n address: \"0x0000000000000000000000000000000000000000\",\n decimals: 18,\n coingeckoId: \"ethereum\",\n binanceSymbol: \"ETHUSDT\",\n },\n ],\n sepolia: [\n {\n symbol: \"ETH\",\n name: \"Sepolia ETH\",\n icon: \"https://arthuremma2.github.io/img-hosting/ethereum-eth.svg\",\n address: \"0x0000000000000000000000000000000000000000\",\n decimals: 18,\n coingeckoId: \"ethereum\",\n binanceSymbol: \"ETHUSDT\",\n },\n {\n symbol: \"USDT\",\n name: \"Mock USDT\",\n icon: \"https://move-flow.github.io/assets/tether-usdt-logo.svg\",\n address: \"0x261322E2378467dd1cF5ac60A66817223db68fA3\",\n decimals: 18,\n coingeckoId: \"tether\",\n binanceSymbol: \"USDTUSDT\",\n },\n ],\n polygonAmoy: [\n {\n symbol: \"MATIC\",\n name: \"Amoy MATIC\",\n icon: \"https://arthuremma2.github.io/img-hosting/Polygon_Icon.png\",\n address: \"0x0000000000000000000000000000000000000000\",\n decimals: 18,\n coingeckoId: \"matic-network\",\n binanceSymbol: \"MATICUSDT\",\n },\n {\n symbol: \"USDc\",\n name: \"Mock USDT\",\n icon: \"https://move-flow.github.io/assets/tether-usdt-logo.svg\",\n address: \"0x8B0180f2101c8260d49339abfEe87927412494B4\",\n decimals: 6,\n coingeckoId: \"tether\",\n binanceSymbol: \"USDTUSDT\",\n },\n ],\n baseSepolia: [\n {\n symbol: \"ETH\",\n name: \"Base Sepolia ETH\",\n icon: \"https://arthuremma2.github.io/img-hosting/ethereum-eth.svg\",\n address: \"0x0000000000000000000000000000000000000000\",\n decimals: 18,\n coingeckoId: \"ethereum\",\n binanceSymbol: \"ETHUSDT\",\n },\n {\n symbol: \"USDC\",\n name: \"USD Coin\",\n icon: \"https://move-flow.github.io/assets/usd-coin-usdc-logo.svg\",\n address: \"0x036CbD53842c5426634e7929541eC2318f3dCF7e\",\n decimals: 6,\n coingeckoId: \"usd-coin\",\n binanceSymbol: \"USDCUSDT\",\n },\n ],\n liskTestnet: [\n {\n symbol: \"ETH\",\n name: \"Lisk Sepolia\",\n icon: \"https://arthuremma2.github.io/img-hosting/lisk-logo.png\",\n address: \"0x0000000000000000000000000000000000000000\",\n decimals: 18,\n coingeckoId: \"ethereum\",\n binanceSymbol: \"ETHUSDT\",\n },\n {\n symbol: \"LSK\",\n name: \"Lisk\",\n icon: \"https://arthuremma2.github.io/img-hosting/liskt.png\",\n address: \"0x8a21CF9Ba08Ae709D64Cb25AfAA951183EC9FF6D\",\n decimals: 18,\n coingeckoId: \"LSK\",\n binanceSymbol: \"LSK\",\n },\n ],\n};\n","import { EthereumProvider } from \"@walletconnect/ethereum-provider\";\nimport { NETWORK_CONFIGS } from \"../config/constants.js\";\n\nconst WC_PROJECT_ID = \"3a2347dfc8ba5a336fe715a34644f490\";\n\nconst MOBILE_WALLETS = [\n {\n name: \"MetaMask\",\n icon: \"https://upload.wikimedia.org/wikipedia/commons/3/36/MetaMask_Fox.svg\",\n universalLink: (uri) =>\n `https://metamask.app.link/wc?uri=${encodeURIComponent(uri)}`,\n },\n {\n name: \"Trust Wallet\",\n icon: \"https://trustwallet.com/assets/images/favicon.png\",\n universalLink: (uri) =>\n `https://link.trustwallet.com/wc?uri=${encodeURIComponent(uri)}`,\n },\n {\n name: \"Rainbow\",\n icon: \"https://rainbow.me/favicon.ico\",\n universalLink: (uri) =>\n `https://rnbwapp.com/wc?uri=${encodeURIComponent(uri)}`,\n },\n {\n name: \"Coinbase Wallet\",\n icon: \"https://www.coinbase.com/favicon.ico\",\n universalLink: (uri) =>\n `https://go.cb-w.com/wc?uri=${encodeURIComponent(uri)}`,\n },\n];\n\nclass WalletService {\n constructor() {\n this.injectedProviders = [];\n this.selectedProvider = null;\n this.wcProvider = null;\n this.connectedAddress = null;\n this.connectionType = null; // \"injected\" | \"walletconnect\"\n\n // True only after the WC \"connect\" event fires and session is stable.\n // All chain/account reads are unsafe before this is true.\n this._wcSessionReady = false;\n\n this._accountsChangedHandler = null;\n this._chainChangedHandler = null;\n this._wcSessionRequestSentHandler = null;\n this._onWCUri = null;\n this._onWCConnected = null;\n this._onWCDisconnected = null;\n\n const methods = [\n \"isMobile\",\n \"isIOS\",\n \"discoverInjectedWallets\",\n \"connectInjected\",\n \"initWalletConnect\",\n \"connectWalletConnect\",\n \"getActiveChainId\",\n \"getApprovedChainIds\",\n \"isSessionAlive\",\n \"switchNetwork\",\n \"disconnect\",\n \"_openWalletForApproval\",\n \"_attachProviderListeners\",\n \"_cleanupWC\",\n \"_connectionResult\",\n \"isConnected\",\n \"getAddress\",\n \"getProvider\",\n \"getMobileWallets\",\n ];\n methods.forEach((m) => {\n this[m] = this[m].bind(this);\n });\n }\n\n // ── Device detection ────────────────────────────────────────────────────────\n\n isMobile() {\n return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(\n navigator.userAgent\n );\n }\n\n isIOS() {\n return /iPhone|iPad|iPod/i.test(navigator.userAgent);\n }\n\n // ── Chain reading ───────────────────────────────────────────────────────────\n\n /**\n * Live active chain from the wallet via eth_chainId RPC.\n *\n * This is the ONLY reliable source of truth for the active chain.\n * Session namespace account ordering is wallet-defined (MetaMask puts\n * Mainnet first regardless of active chain) and must NOT be used to\n * infer the active chain.\n *\n * @returns {Promise<number|null>}\n */\n async getActiveChainId() {\n const provider = this.selectedProvider;\n if (!provider) return null;\n\n try {\n const raw = await provider.request({ method: \"eth_chainId\" });\n const chainId = parseInt(raw, 16);\n console.log(\"[WalletService] eth_chainId RPC →\", chainId);\n return chainId;\n } catch (err) {\n console.error(\"[WalletService] eth_chainId RPC failed:\", err.message);\n return null;\n }\n }\n\n /**\n * All chain IDs the wallet approved in this WC session.\n * Parsed from session.namespaces.eip155.accounts (CAIP-10).\n * For informational / logging use only.\n *\n * @returns {number[]}\n */\n getApprovedChainIds() {\n if (!this._wcSessionReady) return [];\n\n const accounts =\n this.wcProvider?.session?.namespaces?.eip155?.accounts ?? [];\n const ids = new Set();\n\n for (const acct of accounts) {\n const parts = acct.split(\":\");\n const chainId = parseInt(parts[1], 10);\n if (parts.length >= 3 && !isNaN(chainId) && chainId > 0) {\n ids.add(chainId);\n }\n }\n\n return [...ids];\n }\n\n /**\n * Quick liveness check — sends eth_chainId and returns true if it\n * resolves. A stale or disconnected WC session will throw here.\n *\n * @returns {Promise<boolean>}\n */\n async isSessionAlive() {\n if (!this.selectedProvider) return false;\n try {\n await this.selectedProvider.request({ method: \"eth_chainId\" });\n return true;\n } catch {\n return false;\n }\n }\n\n // ── EIP-6963 injected wallet discovery ─────────────────────────────────────\n\n discoverInjectedWallets() {\n return new Promise((resolve) => {\n this.injectedProviders = [];\n\n const handler = (event) => {\n const { info, provider } = event.detail ?? {};\n if (!info || !provider) return;\n const dup = this.injectedProviders.some(\n (p) => p.info.uuid === info.uuid\n );\n if (!dup) this.injectedProviders.push({ info, provider });\n };\n\n window.addEventListener(\"eip6963:announceProvider\", handler);\n window.dispatchEvent(new Event(\"eip6963:requestProvider\"));\n\n setTimeout(() => {\n window.removeEventListener(\"eip6963:announceProvider\", handler);\n\n if (this.injectedProviders.length === 0 && window.ethereum) {\n this.injectedProviders.push({\n info: {\n uuid: \"legacy\",\n name: window.ethereum.isMetaMask ? \"MetaMask\" : \"Browser Wallet\",\n icon: window.ethereum.isMetaMask\n ? \"https://upload.wikimedia.org/wikipedia/commons/3/36/MetaMask_Fox.svg\"\n : null,\n },\n provider: window.ethereum,\n });\n }\n\n console.log(\n `[WalletService] Injected providers found (${this.injectedProviders.length}):`,\n this.injectedProviders.map((p) => p.info.name)\n );\n resolve(this.injectedProviders);\n }, 300);\n });\n }\n\n // ── Injected wallet connection ──────────────────────────────────────────────\n\n async connectInjected(index) {\n const entry = this.injectedProviders[index];\n if (!entry)\n throw new Error(`[WalletService] No injected provider at index ${index}`);\n\n console.log(`[WalletService] Connecting injected: ${entry.info.name}`);\n\n let accounts;\n try {\n accounts = await entry.provider.request({\n method: \"eth_requestAccounts\",\n });\n } catch (err) {\n if (err.code === 4001) {\n const e = new Error(\"User rejected the connection\");\n e.code = \"USER_CANCELLED\";\n throw e;\n }\n throw err;\n }\n\n if (!accounts?.length) {\n const e = new Error(\"No accounts returned\");\n e.code = \"USER_CANCELLED\";\n throw e;\n }\n\n this.selectedProvider = entry.provider;\n this.connectedAddress = accounts[0];\n this.connectionType = \"injected\";\n this._wcSessionReady = false;\n\n this._attachProviderListeners(entry.provider);\n\n const activeChain = await this.getActiveChainId();\n console.log(\n `[WalletService] Injected connected — address: ${this.connectedAddress} | chain: ${activeChain}`\n );\n\n return this._connectionResult();\n }\n\n // ── WalletConnect ───────────────────────────────────────────────────────────\n\n async initWalletConnect(onUri, onConnected, onDisconnected) {\n // Tear down any existing provider before creating a new one\n if (this.wcProvider) {\n try {\n await this.wcProvider.disconnect();\n } catch (_) {}\n this.wcProvider = null;\n }\n\n this._wcSessionReady = false;\n\n const allChainIds = Object.values(NETWORK_CONFIGS).map((n) => n.chainId);\n const rpcMap = {};\n Object.values(NETWORK_CONFIGS).forEach((n) => {\n rpcMap[n.chainId] = n.rpcUrl;\n });\n\n console.log(\n \"[WalletService] Initializing WalletConnect — supported chains:\",\n allChainIds\n );\n\n const provider = await EthereumProvider.init({\n projectId: WC_PROJECT_ID,\n optionalChains: allChainIds,\n showQrModal: false,\n rpcMap,\n metadata: {\n name: \"KwesPay\",\n description: \"Crypto payment widget\",\n url: window.location.origin,\n icons: [\"https://arthuremma2.github.io/img-hosting/kwespay-icon.png\"],\n },\n });\n\n this._onWCUri = onUri;\n this._onWCConnected = onConnected;\n this._onWCDisconnected = onDisconnected;\n\n // ── display_uri — deep-link / QR is ready ─────────────────────────────────\n provider.on(\"display_uri\", (uri) => {\n if (this._onWCUri) this._onWCUri(uri);\n });\n\n // ── connect — session fully established ───────────────────────────────────\n provider.on(\"connect\", async () => {\n const session = provider.session;\n const accounts = session?.namespaces?.eip155?.accounts ?? [];\n\n if (accounts.length === 0) {\n console.error(\n \"[WalletService] WC connected but session has no accounts\"\n );\n return;\n }\n\n // Parse address from CAIP-10: \"eip155:<chainId>:<address>\"\n const address = accounts[0].split(\":\")[2];\n\n this.wcProvider = provider;\n this.selectedProvider = provider;\n this.connectedAddress = address;\n this.connectionType = \"walletconnect\";\n this._wcSessionReady = true;\n\n this._attachProviderListeners(provider);\n\n // Use live RPC — session account ordering is NOT reliable for active chain\n const activeChain = await this.getActiveChainId();\n const approvedChains = this.getApprovedChainIds();\n\n console.log(\n `[WalletService] WC session ready — address: ${address} | active chain: ${activeChain} | approved chains: [${approvedChains}]`\n );\n\n if (this._onWCConnected) this._onWCConnected();\n });\n\n // ── disconnect ────────────────────────────────────────────────────────────\n provider.on(\"disconnect\", () => {\n console.log(\"[WalletService] WC session disconnected\");\n this._cleanupWC();\n if (this._onWCDisconnected) this._onWCDisconnected();\n });\n\n // ── chainChanged — informational only ─────────────────────────────────────\n // We never cache this value. getActiveChainId() always does a live RPC read.\n provider.on(\"chainChanged\", (chainId) => {\n if (this._wcSessionReady) {\n console.log(\n \"[WalletService] WC chainChanged event — new chain:\",\n parseInt(chainId, 16)\n );\n }\n });\n\n // ── session_request_sent — foreground wallet on mobile ────────────────────\n this._wcSessionRequestSentHandler = () => {\n if (!this.isMobile()) return;\n console.log(\n \"[WalletService] session_request_sent — opening wallet for approval\"\n );\n this._openWalletForApproval();\n };\n provider.on(\"session_request_sent\", this._wcSessionRequestSentHandler);\n\n this.wcProvider = provider;\n return provider;\n }\n\n /**\n * Start the WalletConnect handshake.\n *\n * targetChainId is passed as optionalNamespaces so the wallet starts\n * the session on the correct chain. Without this hint, MetaMask defaults\n * to its last-used WC chain (usually Mainnet) regardless of the wallet's\n * current active chain — causing WRONG_NETWORK errors even when the user\n * is visually on the right network.\n *\n * @param {number} targetChainId The chain the payment will be made on\n */\n async connectWalletConnect(targetChainId) {\n if (!this.wcProvider)\n throw new Error(\"[WalletService] Call initWalletConnect first\");\n\n if (!targetChainId) {\n throw new Error(\n \"[WalletService] targetChainId is required for connectWalletConnect\"\n );\n }\n\n console.log(\n `[WalletService] Starting WC handshake — requesting session on chain ${targetChainId}`\n );\n\n await this.wcProvider.connect({\n optionalNamespaces: {\n eip155: {\n methods: [\n \"eth_sendTransaction\",\n \"eth_signTransaction\",\n \"eth_sign\",\n \"personal_sign\",\n \"eth_signTypedData\",\n ],\n chains: [`eip155:${targetChainId}`],\n events: [\"chainChanged\", \"accountsChanged\"],\n },\n },\n });\n }\n\n /**\n * Open the wallet app on mobile to bring it to the foreground.\n * Uses redirect URIs from the WC session peer metadata.\n */\n _openWalletForApproval() {\n const session = this.wcProvider?.session;\n const native = session?.peer?.metadata?.redirect?.native;\n const universal = session?.peer?.metadata?.redirect?.universal;\n const target = native || universal;\n\n if (!target) {\n console.warn(\n \"[WalletService] No redirect URI in session metadata — user must switch manually\"\n );\n return;\n }\n\n if (this.isIOS()) {\n // window.open is blocked by Safari outside a user gesture — use href instead\n window.location.href = target;\n } else {\n window.open(target, \"_blank\", \"noreferrer noopener\");\n }\n }\n\n // ── Network switching — desktop / injected only ─────────────────────────────\n\n async switchNetwork(\n chainId,\n networkName,\n rpcUrl,\n tokenSymbol,\n tokenDecimals\n ) {\n const provider = this.selectedProvider;\n if (!provider) throw new Error(\"[WalletService] No provider connected\");\n\n const targetHex = \"0x\" + chainId.toString(16);\n\n try {\n await provider.request({\n method: \"wallet_switchEthereumChain\",\n params: [{ chainId: targetHex }],\n });\n } catch (err) {\n if (err.code === 4902 || err.code === -32603) {\n // Chain not known to wallet — add it first\n console.log(\n `[WalletService] Chain ${networkName} unknown to wallet — adding it`\n );\n await provider.request({\n method: \"wallet_addEthereumChain\",\n params: [\n {\n chainId: targetHex,\n chainName: networkName,\n rpcUrls: [rpcUrl],\n nativeCurrency: {\n name: tokenSymbol,\n symbol: tokenSymbol,\n decimals: tokenDecimals,\n },\n },\n ],\n });\n console.log(`[WalletService] Chain ${networkName} added and switched`);\n } else {\n throw err;\n }\n }\n }\n\n // ── Provider event listeners ────────────────────────────────────────────────\n\n _attachProviderListeners(provider) {\n this._accountsChangedHandler = (accounts) => {\n console.log(\"[WalletService] accountsChanged →\", accounts[0] ?? \"none\");\n this.connectedAddress = accounts[0] ?? null;\n };\n\n this._chainChangedHandler = (chain) => {\n // Only log for injected — WC chainChanged is already logged above\n if (this.connectionType === \"injected\") {\n console.log(\n \"[WalletService] chainChanged (injected) →\",\n parseInt(chain, 16)\n );\n }\n };\n\n provider.on(\"accountsChanged\", this._accountsChangedHandler);\n provider.on(\"chainChanged\", this._chainChangedHandler);\n }\n\n // ── Disconnect / cleanup ────────────────────────────────────────────────────\n\n async disconnect() {\n if (this.selectedProvider) {\n try {\n this.selectedProvider.removeListener?.(\n \"accountsChanged\",\n this._accountsChangedHandler\n );\n } catch (_) {}\n try {\n this.selectedProvider.removeListener?.(\n \"chainChanged\",\n this._chainChangedHandler\n );\n } catch (_) {}\n }\n\n this._cleanupWC();\n\n this.selectedProvider = null;\n this.connectedAddress = null;\n this.connectionType = null;\n this._wcSessionReady = false;\n\n console.log(\"[WalletService] Disconnected\");\n }\n\n _cleanupWC() {\n if (this.wcProvider) {\n try {\n this.wcProvider.removeListener?.(\"display_uri\", this._onWCUri);\n } catch (_) {}\n try {\n this.wcProvider.removeListener?.(\"connect\", this._onWCConnected);\n } catch (_) {}\n try {\n this.wcProvider.removeListener?.(\"disconnect\", this._onWCDisconnected);\n } catch (_) {}\n try {\n this.wcProvider.removeListener?.(\n \"session_request_sent\",\n this._wcSessionRequestSentHandler\n );\n } catch (_) {}\n try {\n this.wcProvider.disconnect();\n } catch (_) {}\n this.wcProvider = null;\n }\n\n this._wcSessionReady = false;\n this._onWCUri = null;\n this._onWCConnected = null;\n this._onWCDisconnected = null;\n this._wcSessionRequestSentHandler = null;\n }\n\n // ── Helpers ─────────────────────────────────────────────────────────────────\n\n _connectionResult() {\n return {\n address: this.connectedAddress,\n shortAddress: this._truncate(this.connectedAddress),\n provider: this.selectedProvider,\n connectionType: this.connectionType,\n };\n }\n\n _truncate(addr) {\n if (!addr) return \"\";\n return `${addr.slice(0, 6)}...${addr.slice(-4)}`;\n }\n\n isConnected() {\n return !!this.connectedAddress;\n }\n getAddress() {\n return this.connectedAddress;\n }\n getProvider() {\n return this.selectedProvider;\n }\n getMobileWallets() {\n return MOBILE_WALLETS;\n }\n}\n\nexport default WalletService;\n","class KwesPayError extends Error {\n constructor(message, code, cause) {\n super(message);\n this.name = \"KwesPayError\";\n this.code = code;\n this.cause = cause;\n }\n}\n\nconst ENDPOINT = \"https://d502-154-161-98-26.ngrok-free.app/graphql\";\nconst TESTNET_CONTRACTS = {\n sepolia: \"0x39bE436D6A34d0990cb71c9cBD24a5361d85e00B\",\n baseSepolia: \"0x7515b1b1BcA33E7a9ccBd5E2b93771884654De77\",\n polygonAmoy: \"0xD31dF3eBd220Fd3e190A346F8927819295d28980\",\n liskTestnet: \"0xd04A78a998146EBAD04c2b68E020C06Dc3b3717f\",\n};\nconst MAINNET_CONTRACTS = {\n// lisk: \"0x...\",\n};\nconst CONTRACT_ADDRESSES = {\n ...TESTNET_CONTRACTS,\n ...MAINNET_CONTRACTS,\n};\nfunction resolveContractAddress(network) {\n const addr = CONTRACT_ADDRESSES[network];\n if (!addr)\n throw new Error(`No contract deployed on network: ${network}`);\n return addr;\n}\n\nasync function gqlRequest(query, variables, apiKey) {\n const headers = {\n \"Content-Type\": \"application/json\",\n };\n if (apiKey)\n headers[\"X-API-Key\"] = apiKey;\n let response;\n try {\n response = await fetch(ENDPOINT, {\n method: \"POST\",\n headers,\n body: JSON.stringify({ query, variables }),\n });\n }\n catch (err) {\n throw new KwesPayError(\"Network request failed — check your connectivity\", \"NETWORK_ERROR\", err);\n }\n if (!response.ok) {\n throw new KwesPayError(`HTTP ${response.status}: ${response.statusText}`, \"NETWORK_ERROR\");\n }\n const json = await response.json();\n if (json.errors?.length) {\n throw new KwesPayError(json.errors[0]?.message ?? \"GraphQL error\", \"UNKNOWN\");\n }\n if (!json.data) {\n throw new KwesPayError(\"Empty response from server\", \"UNKNOWN\");\n }\n return json.data;\n}\n\nconst GQL_VALIDATE_KEY = `\n query ValidateAccessKey($accessKey: String!) {\n validateAccessKey(accessKey: $accessKey) {\n isValid\n keyId\n keyLabel\n activeFlag\n expirationDate\n vendorInfo {\n vendorPk\n vendorIdentifier\n businessName\n }\n allowedVendors\n allowedNetworks\n allowedTokens\n error\n }\n }\n`;\nconst GQL_CREATE_QUOTE = `\n mutation CreateQuote($input: CreateQuoteInput!) {\n createQuote(input: $input) {\n success\n message\n quoteId\n quoteReference\n cryptoCurrency\n tokenAddress\n amountBaseUnits\n displayAmount\n network\n chainId\n expiresAt\n }\n }\n`;\nconst GQL_CREATE_TRANSACTION = `\n mutation CreateTransaction($input: CreateTransactionInput!) {\n createTransaction(input: $input) {\n success\n message\n paymentIdBytes32\n backendSignature\n tokenAddress\n amountBaseUnits\n chainId\n expiresAt\n transaction {\n transactionReference\n transactionStatus\n }\n }\n }\n`;\nconst GQL_TRANSACTION_STATUS = `\n query GetTransactionStatus($transactionReference: String!) {\n getTransactionStatus(transactionReference: $transactionReference) {\n transactionReference\n transactionStatus\n blockchainHash\n blockchainNetwork\n displayAmount\n cryptoCurrency\n payerWalletAddress\n initiatedAt\n }\n }\n`;\n\nconst version$1 = '1.2.3';\n\nlet BaseError$1 = class BaseError extends Error {\n constructor(shortMessage, args = {}) {\n const details = args.cause instanceof BaseError\n ? args.cause.details\n : args.cause?.message\n ? args.cause.message\n : args.details;\n const docsPath = args.cause instanceof BaseError\n ? args.cause.docsPath || args.docsPath\n : args.docsPath;\n const message = [\n shortMessage || 'An error occurred.',\n '',\n ...(args.metaMessages ? [...args.metaMessages, ''] : []),\n ...(docsPath ? [`Docs: https://abitype.dev${docsPath}`] : []),\n ...(details ? [`Details: ${details}`] : []),\n `Version: abitype@${version$1}`,\n ].join('\\n');\n super(message);\n Object.defineProperty(this, \"details\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"docsPath\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"metaMessages\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"shortMessage\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"name\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 'AbiTypeError'\n });\n if (args.cause)\n this.cause = args.cause;\n this.details = details;\n this.docsPath = docsPath;\n this.metaMessages = args.metaMessages;\n this.shortMessage = shortMessage;\n }\n};\n\n// TODO: This looks cool. Need to check the performance of `new RegExp` versus defined inline though.\n// https://twitter.com/GabrielVergnaud/status/1622906834343366657\nfunction execTyped(regex, string) {\n const match = regex.exec(string);\n return match?.groups;\n}\n// `bytes<M>`: binary type of `M` bytes, `0 < M <= 32`\n// https://regexr.com/6va55\nconst bytesRegex = /^bytes([1-9]|1[0-9]|2[0-9]|3[0-2])?$/;\n// `(u)int<M>`: (un)signed integer type of `M` bits, `0 < M <= 256`, `M % 8 == 0`\n// https://regexr.com/6v8hp\nconst integerRegex$1 = /^u?int(8|16|24|32|40|48|56|64|72|80|88|96|104|112|120|128|136|144|152|160|168|176|184|192|200|208|216|224|232|240|248|256)?$/;\nconst isTupleRegex = /^\\(.+?\\).*?$/;\n\n// https://regexr.com/7f7rv\nconst tupleRegex = /^tuple(?<array>(\\[(\\d*)\\])*)$/;\n/**\n * Formats {@link AbiParameter} to human-readable ABI parameter.\n *\n * @param abiParameter - ABI parameter\n * @returns Human-readable ABI parameter\n *\n * @example\n * const result = formatAbiParameter({ type: 'address', name: 'from' })\n * // ^? const result: 'address from'\n */\nfunction formatAbiParameter(abiParameter) {\n let type = abiParameter.type;\n if (tupleRegex.test(abiParameter.type) && 'components' in abiParameter) {\n type = '(';\n const length = abiParameter.components.length;\n for (let i = 0; i < length; i++) {\n const component = abiParameter.components[i];\n type += formatAbiParameter(component);\n if (i < length - 1)\n type += ', ';\n }\n const result = execTyped(tupleRegex, abiParameter.type);\n type += `)${result?.array || ''}`;\n return formatAbiParameter({\n ...abiParameter,\n type,\n });\n }\n // Add `indexed` to type if in `abiParameter`\n if ('indexed' in abiParameter && abiParameter.indexed)\n type = `${type} indexed`;\n // Return human-readable ABI parameter\n if (abiParameter.name)\n return `${type} ${abiParameter.name}`;\n return type;\n}\n\n/**\n * Formats {@link AbiParameter}s to human-readable ABI parameters.\n *\n * @param abiParameters - ABI parameters\n * @returns Human-readable ABI parameters\n *\n * @example\n * const result = formatAbiParameters([\n * // ^? const result: 'address from, uint256 tokenId'\n * { type: 'address', name: 'from' },\n * { type: 'uint256', name: 'tokenId' },\n * ])\n */\nfunction formatAbiParameters(abiParameters) {\n let params = '';\n const length = abiParameters.length;\n for (let i = 0; i < length; i++) {\n const abiParameter = abiParameters[i];\n params += formatAbiParameter(abiParameter);\n if (i !== length - 1)\n params += ', ';\n }\n return params;\n}\n\n/**\n * Formats ABI item (e.g. error, event, function) into human-readable ABI item\n *\n * @param abiItem - ABI item\n * @returns Human-readable ABI item\n */\nfunction formatAbiItem$1(abiItem) {\n if (abiItem.type === 'function')\n return `function ${abiItem.name}(${formatAbiParameters(abiItem.inputs)})${abiItem.stateMutability && abiItem.stateMutability !== 'nonpayable'\n ? ` ${abiItem.stateMutability}`\n : ''}${abiItem.outputs?.length\n ? ` returns (${formatAbiParameters(abiItem.outputs)})`\n : ''}`;\n if (abiItem.type === 'event')\n return `event ${abiItem.name}(${formatAbiParameters(abiItem.inputs)})`;\n if (abiItem.type === 'error')\n return `error ${abiItem.name}(${formatAbiParameters(abiItem.inputs)})`;\n if (abiItem.type === 'constructor')\n return `constructor(${formatAbiParameters(abiItem.inputs)})${abiItem.stateMutability === 'payable' ? ' payable' : ''}`;\n if (abiItem.type === 'fallback')\n return `fallback() external${abiItem.stateMutability === 'payable' ? ' payable' : ''}`;\n return 'receive() external payable';\n}\n\n// https://regexr.com/7gmok\nconst errorSignatureRegex = /^error (?<name>[a-zA-Z$_][a-zA-Z0-9$_]*)\\((?<parameters>.*?)\\)$/;\nfunction isErrorSignature(signature) {\n return errorSignatureRegex.test(signature);\n}\nfunction execErrorSignature(signature) {\n return execTyped(errorSignatureRegex, signature);\n}\n// https://regexr.com/7gmoq\nconst eventSignatureRegex = /^event (?<name>[a-zA-Z$_][a-zA-Z0-9$_]*)\\((?<parameters>.*?)\\)$/;\nfunction isEventSignature(signature) {\n return eventSignatureRegex.test(signature);\n}\nfunction execEventSignature(signature) {\n return execTyped(eventSignatureRegex, signature);\n}\n// https://regexr.com/7gmot\nconst functionSignatureRegex = /^function (?<name>[a-zA-Z$_][a-zA-Z0-9$_]*)\\((?<parameters>.*?)\\)(?: (?<scope>external|public{1}))?(?: (?<stateMutability>pure|view|nonpayable|payable{1}))?(?: returns\\s?\\((?<returns>.*?)\\))?$/;\nfunction isFunctionSignature(signature) {\n return functionSignatureRegex.test(signature);\n}\nfunction execFunctionSignature(signature) {\n return execTyped(functionSignatureRegex, signature);\n}\n// https://regexr.com/7gmp3\nconst structSignatureRegex = /^struct (?<name>[a-zA-Z$_][a-zA-Z0-9$_]*) \\{(?<properties>.*?)\\}$/;\nfunction isStructSignature(signature) {\n return structSignatureRegex.test(signature);\n}\nfunction execStructSignature(signature) {\n return execTyped(structSignatureRegex, signature);\n}\n// https://regexr.com/78u01\nconst constructorSignatureRegex = /^constructor\\((?<parameters>.*?)\\)(?:\\s(?<stateMutability>payable{1}))?$/;\nfunction isConstructorSignature(signature) {\n return constructorSignatureRegex.test(signature);\n}\nfunction execConstructorSignature(signature) {\n return execTyped(constructorSignatureRegex, signature);\n}\n// https://regexr.com/7srtn\nconst fallbackSignatureRegex = /^fallback\\(\\) external(?:\\s(?<stateMutability>payable{1}))?$/;\nfunction isFallbackSignature(signature) {\n return fallbackSignatureRegex.test(signature);\n}\nfunction execFallbackSignature(signature) {\n return execTyped(fallbackSignatureRegex, signature);\n}\n// https://regexr.com/78u1k\nconst receiveSignatureRegex = /^receive\\(\\) external payable$/;\nfunction isReceiveSignature(signature) {\n return receiveSignatureRegex.test(signature);\n}\nconst eventModifiers = new Set(['indexed']);\nconst functionModifiers = new Set([\n 'calldata',\n 'memory',\n 'storage',\n]);\n\nclass UnknownTypeError extends BaseError$1 {\n constructor({ type }) {\n super('Unknown type.', {\n metaMessages: [\n `Type \"${type}\" is not a valid ABI type. Perhaps you forgot to include a struct signature?`,\n ],\n });\n Object.defineProperty(this, \"name\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 'UnknownTypeError'\n });\n }\n}\nclass UnknownSolidityTypeError extends BaseError$1 {\n constructor({ type }) {\n super('Unknown type.', {\n metaMessages: [`Type \"${type}\" is not a valid ABI type.`],\n });\n Object.defineProperty(this, \"name\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 'UnknownSolidityTypeError'\n });\n }\n}\n\nclass InvalidParameterError extends BaseError$1 {\n constructor({ param }) {\n super('Invalid ABI parameter.', {\n details: param,\n });\n Object.defineProperty(this, \"name\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 'InvalidParameterError'\n });\n }\n}\nclass SolidityProtectedKeywordError extends BaseError$1 {\n constructor({ param, name }) {\n super('Invalid ABI parameter.', {\n details: param,\n metaMessages: [\n `\"${name}\" is a protected Solidity keyword. More info: https://docs.soliditylang.org/en/latest/cheatsheet.html`,\n ],\n });\n Object.defineProperty(this, \"name\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 'SolidityProtectedKeywordError'\n });\n }\n}\nclass InvalidModifierError extends BaseError$1 {\n constructor({ param, type, modifier, }) {\n super('Invalid ABI parameter.', {\n details: param,\n metaMessages: [\n `Modifier \"${modifier}\" not allowed${type ? ` in \"${type}\" type` : ''}.`,\n ],\n });\n Object.defineProperty(this, \"name\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 'InvalidModifierError'\n });\n }\n}\nclass InvalidFunctionModifierError extends BaseError$1 {\n constructor({ param, type, modifier, }) {\n super('Invalid ABI parameter.', {\n details: param,\n metaMessages: [\n `Modifier \"${modifier}\" not allowed${type ? ` in \"${type}\" type` : ''}.`,\n `Data location can only be specified for array, struct, or mapping types, but \"${modifier}\" was given.`,\n ],\n });\n Object.defineProperty(this, \"name\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 'InvalidFunctionModifierError'\n });\n }\n}\nclass InvalidAbiTypeParameterError extends BaseError$1 {\n constructor({ abiParameter, }) {\n super('Invalid ABI parameter.', {\n details: JSON.stringify(abiParameter, null, 2),\n metaMessages: ['ABI parameter type is invalid.'],\n });\n Object.defineProperty(this, \"name\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 'InvalidAbiTypeParameterError'\n });\n }\n}\n\nclass InvalidSignatureError extends BaseError$1 {\n constructor({ signature, type, }) {\n super(`Invalid ${type} signature.`, {\n details: signature,\n });\n Object.defineProperty(this, \"name\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 'InvalidSignatureError'\n });\n }\n}\nclass UnknownSignatureError extends BaseError$1 {\n constructor({ signature }) {\n super('Unknown signature.', {\n details: signature,\n });\n Object.defineProperty(this, \"name\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 'UnknownSignatureError'\n });\n }\n}\nclass InvalidStructSignatureError extends BaseError$1 {\n constructor({ signature }) {\n super('Invalid struct signature.', {\n details: signature,\n metaMessages: ['No properties exist.'],\n });\n Object.defineProperty(this, \"name\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 'InvalidStructSignatureError'\n });\n }\n}\n\nclass CircularReferenceError extends BaseError$1 {\n constructor({ type }) {\n super('Circular reference detected.', {\n metaMessages: [`Struct \"${type}\" is a circular reference.`],\n });\n Object.defineProperty(this, \"name\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 'CircularReferenceError'\n });\n }\n}\n\nclass InvalidParenthesisError extends BaseError$1 {\n constructor({ current, depth }) {\n super('Unbalanced parentheses.', {\n metaMessages: [\n `\"${current.trim()}\" has too many ${depth > 0 ? 'opening' : 'closing'} parentheses.`,\n ],\n details: `Depth \"${depth}\"`,\n });\n Object.defineProperty(this, \"name\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 'InvalidParenthesisError'\n });\n }\n}\n\n/**\n * Gets {@link parameterCache} cache key namespaced by {@link type} and {@link structs}. This prevents parameters from being accessible to types that don't allow them (e.g. `string indexed foo` not allowed outside of `type: 'event'`) and ensures different struct definitions with the same name are cached separately.\n * @param param ABI parameter string\n * @param type ABI parameter type\n * @param structs Struct definitions to include in cache key\n * @returns Cache key for {@link parameterCache}\n */\nfunction getParameterCacheKey(param, type, structs) {\n let structKey = '';\n if (structs)\n for (const struct of Object.entries(structs)) {\n if (!struct)\n continue;\n let propertyKey = '';\n for (const property of struct[1]) {\n propertyKey += `[${property.type}${property.name ? `:${property.name}` : ''}]`;\n }\n structKey += `(${struct[0]}{${propertyKey}})`;\n }\n if (type)\n return `${type}:${param}${structKey}`;\n return `${param}${structKey}`;\n}\n/**\n * Basic cache seeded with common ABI parameter strings.\n *\n * **Note: When seeding more parameters, make sure you benchmark performance. The current number is the ideal balance between performance and having an already existing cache.**\n */\nconst parameterCache = new Map([\n // Unnamed\n ['address', { type: 'address' }],\n ['bool', { type: 'bool' }],\n ['bytes', { type: 'bytes' }],\n ['bytes32', { type: 'bytes32' }],\n ['int', { type: 'int256' }],\n ['int256', { type: 'int256' }],\n ['string', { type: 'string' }],\n ['uint', { type: 'uint256' }],\n ['uint8', { type: 'uint8' }],\n ['uint16', { type: 'uint16' }],\n ['uint24', { type: 'uint24' }],\n ['uint32', { type: 'uint32' }],\n ['uint64', { type: 'uint64' }],\n ['uint96', { type: 'uint96' }],\n ['uint112', { type: 'uint112' }],\n ['uint160', { type: 'uint160' }],\n ['uint192', { type: 'uint192' }],\n ['uint256', { type: 'uint256' }],\n // Named\n ['address owner', { type: 'address', name: 'owner' }],\n ['address to', { type: 'address', name: 'to' }],\n ['bool approved', { type: 'bool', name: 'approved' }],\n ['bytes _data', { type: 'bytes', name: '_data' }],\n ['bytes data', { type: 'bytes', name: 'data' }],\n ['bytes signature', { type: 'bytes', name: 'signature' }],\n ['bytes32 hash', { type: 'bytes32', name: 'hash' }],\n ['bytes32 r', { type: 'bytes32', name: 'r' }],\n ['bytes32 root', { type: 'bytes32', name: 'root' }],\n ['bytes32 s', { type: 'bytes32', name: 's' }],\n ['string name', { type: 'string', name: 'name' }],\n ['string symbol', { type: 'string', name: 'symbol' }],\n ['string tokenURI', { type: 'string', name: 'tokenURI' }],\n ['uint tokenId', { type: 'uint256', name: 'tokenId' }],\n ['uint8 v', { type: 'uint8', name: 'v' }],\n ['uint256 balance', { type: 'uint256', name: 'balance' }],\n ['uint256 tokenId', { type: 'uint256', name: 'tokenId' }],\n ['uint256 value', { type: 'uint256', name: 'value' }],\n // Indexed\n [\n 'event:address indexed from',\n { type: 'address', name: 'from', indexed: true },\n ],\n ['event:address indexed to', { type: 'address', name: 'to', indexed: true }],\n [\n 'event:uint indexed tokenId',\n { type: 'uint256', name: 'tokenId', indexed: true },\n ],\n [\n 'event:uint256 indexed tokenId',\n { type: 'uint256', name: 'tokenId', indexed: true },\n ],\n]);\n\nfunction parseSignature(signature, structs = {}) {\n if (isFunctionSignature(signature))\n return parseFunctionSignature(signature, structs);\n if (isEventSignature(signature))\n return parseEventSignature(signature, structs);\n if (isErrorSignature(signature))\n return parseErrorSignature(signature, structs);\n if (isConstructorSignature(signature))\n return parseConstructorSignature(signature, structs);\n if (isFallbackSignature(signature))\n return parseFallbackSignature(signature);\n if (isReceiveSignature(signature))\n return {\n type: 'receive',\n stateMutability: 'payable',\n };\n throw new UnknownSignatureError({ signature });\n}\nfunction parseFunctionSignature(signature, structs = {}) {\n const match = execFunctionSignature(signature);\n if (!match)\n throw new InvalidSignatureError({ signature, type: 'function' });\n const inputParams = splitParameters(match.parameters);\n const inputs = [];\n const inputLength = inputParams.length;\n for (let i = 0; i < inputLength; i++) {\n inputs.push(parseAbiParameter(inputParams[i], {\n modifiers: functionModifiers,\n structs,\n type: 'function',\n }));\n }\n const outputs = [];\n if (match.returns) {\n const outputParams = splitParameters(match.returns);\n const outputLength = outputParams.length;\n for (let i = 0; i < outputLength; i++) {\n outputs.push(parseAbiParameter(outputParams[i], {\n modifiers: functionModifiers,\n structs,\n type: 'function',\n }));\n }\n }\n return {\n name: match.name,\n type: 'function',\n stateMutability: match.stateMutability ?? 'nonpayable',\n inputs,\n outputs,\n };\n}\nfunction parseEventSignature(signature, structs = {}) {\n const match = execEventSignature(signature);\n if (!match)\n throw new InvalidSignatureError({ signature, type: 'event' });\n const params = splitParameters(match.parameters);\n const abiParameters = [];\n const length = params.length;\n for (let i = 0; i < length; i++)\n abiParameters.push(parseAbiParameter(params[i], {\n modifiers: eventModifiers,\n structs,\n type: 'event',\n }));\n return { name: match.name, type: 'event', inputs: abiParameters };\n}\nfunction parseErrorSignature(signature, structs = {}) {\n const match = execErrorSignature(signature);\n if (!match)\n throw new InvalidSignatureError({ signature, type: 'error' });\n const params = splitParameters(match.parameters);\n const abiParameters = [];\n const length = params.length;\n for (let i = 0; i < length; i++)\n abiParameters.push(parseAbiParameter(params[i], { structs, type: 'error' }));\n return { name: match.name, type: 'error', inputs: abiParameters };\n}\nfunction parseConstructorSignature(signature, structs = {}) {\n const match = execConstructorSignature(signature);\n if (!match)\n throw new InvalidSignatureError({ signature, type: 'constructor' });\n const params = splitParameters(match.parameters);\n const abiParameters = [];\n const length = params.length;\n for (let i = 0; i < length; i++)\n abiParameters.push(parseAbiParameter(params[i], { structs, type: 'constructor' }));\n return {\n type: 'constructor',\n stateMutability: match.stateMutability ?? 'nonpayable',\n inputs: abiParameters,\n };\n}\nfunction parseFallbackSignature(signature) {\n const match = execFallbackSignature(signature);\n if (!match)\n throw new InvalidSignatureError({ signature, type: 'fallback' });\n return {\n type: 'fallback',\n stateMutability: match.stateMutability ?? 'nonpayable',\n };\n}\nconst abiParameterWithoutTupleRegex = /^(?<type>[a-zA-Z$_][a-zA-Z0-9$_]*(?:\\spayable)?)(?<array>(?:\\[\\d*?\\])+?)?(?:\\s(?<modifier>calldata|indexed|memory|storage{1}))?(?:\\s(?<name>[a-zA-Z$_][a-zA-Z0-9$_]*))?$/;\nconst abiParameterWithTupleRegex = /^\\((?<type>.+?)\\)(?<array>(?:\\[\\d*?\\])+?)?(?:\\s(?<modifier>calldata|indexed|memory|storage{1}))?(?:\\s(?<name>[a-zA-Z$_][a-zA-Z0-9$_]*))?$/;\nconst dynamicIntegerRegex = /^u?int$/;\nfunction parseAbiParameter(param, options) {\n // optional namespace cache by `type`\n const parameterCacheKey = getParameterCacheKey(param, options?.type, options?.structs);\n if (parameterCache.has(parameterCacheKey))\n return parameterCache.get(parameterCacheKey);\n const isTuple = isTupleRegex.test(param);\n const match = execTyped(isTuple ? abiParameterWithTupleRegex : abiParameterWithoutTupleRegex, param);\n if (!match)\n throw new InvalidParameterError({ param });\n if (match.name && isSolidityKeyword(match.name))\n throw new SolidityProtectedKeywordError({ param, name: match.name });\n const name = match.name ? { name: match.name } : {};\n const indexed = match.modifier === 'indexed' ? { indexed: true } : {};\n const structs = options?.structs ?? {};\n let type;\n let components = {};\n if (isTuple) {\n type = 'tuple';\n const params = splitParameters(match.type);\n const components_ = [];\n const length = params.length;\n for (let i = 0; i < length; i++) {\n // remove `modifiers` from `options` to prevent from being added to tuple components\n components_.push(parseAbiParameter(params[i], { structs }));\n }\n components = { components: components_ };\n }\n else if (match.type in structs) {\n type = 'tuple';\n components = { components: structs[match.type] };\n }\n else if (dynamicIntegerRegex.test(match.type)) {\n type = `${match.type}256`;\n }\n else if (match.type === 'address payable') {\n type = 'address';\n }\n else {\n type = match.type;\n if (!(options?.type === 'struct') && !isSolidityType(type))\n throw new UnknownSolidityTypeError({ type });\n }\n if (match.modifier) {\n // Check if modifier exists, but is not allowed (e.g. `indexed` in `functionModifiers`)\n if (!options?.modifiers?.has?.(match.modifier))\n throw new InvalidModifierError({\n param,\n type: options?.type,\n modifier: match.modifier,\n });\n // Check if resolved `type` is valid if there is a function modifier\n if (functionModifiers.has(match.modifier) &&\n !isValidDataLocation(type, !!match.array))\n throw new InvalidFunctionModifierError({\n param,\n type: options?.type,\n modifier: match.modifier,\n });\n }\n const abiParameter = {\n type: `${type}${match.array ?? ''}`,\n ...name,\n ...indexed,\n ...components,\n };\n parameterCache.set(parameterCacheKey, abiParameter);\n return abiParameter;\n}\n// s/o latika for this\nfunction splitParameters(params, result = [], current = '', depth = 0) {\n const length = params.trim().length;\n // biome-ignore lint/correctness/noUnreachable: recursive\n for (let i = 0; i < length; i++) {\n const char = params[i];\n const tail = params.slice(i + 1);\n switch (char) {\n case ',':\n return depth === 0\n ? splitParameters(tail, [...result, current.trim()])\n : splitParameters(tail, result, `${current}${char}`, depth);\n case '(':\n return splitParameters(tail, result, `${current}${char}`, depth + 1);\n case ')':\n return splitParameters(tail, result, `${current}${char}`, depth - 1);\n default:\n return splitParameters(tail, result, `${current}${char}`, depth);\n }\n }\n if (current === '')\n return result;\n if (depth !== 0)\n throw new InvalidParenthesisError({ current, depth });\n result.push(current.trim());\n return result;\n}\nfunction isSolidityType(type) {\n return (type === 'address' ||\n type === 'bool' ||\n type === 'function' ||\n type === 'string' ||\n bytesRegex.test(type) ||\n integerRegex$1.test(type));\n}\nconst protectedKeywordsRegex = /^(?:after|alias|anonymous|apply|auto|byte|calldata|case|catch|constant|copyof|default|defined|error|event|external|false|final|function|immutable|implements|in|indexed|inline|internal|let|mapping|match|memory|mutable|null|of|override|partial|private|promise|public|pure|reference|relocatable|return|returns|sizeof|static|storage|struct|super|supports|switch|this|true|try|typedef|typeof|var|view|virtual)$/;\n/** @internal */\nfunction isSolidityKeyword(name) {\n return (name === 'address' ||\n name === 'bool' ||\n name === 'function' ||\n name === 'string' ||\n name === 'tuple' ||\n bytesRegex.test(name) ||\n integerRegex$1.test(name) ||\n protectedKeywordsRegex.test(name));\n}\n/** @internal */\nfunction isValidDataLocation(type, isArray) {\n return isArray || type === 'bytes' || type === 'string' || type === 'tuple';\n}\n\nfunction parseStructs(signatures) {\n // Create \"shallow\" version of each struct (and filter out non-structs or invalid structs)\n const shallowStructs = {};\n const signaturesLength = signatures.length;\n for (let i = 0; i < signaturesLength; i++) {\n const signature = signatures[i];\n if (!isStructSignature(signature))\n continue;\n const match = execStructSignature(signature);\n if (!match)\n throw new InvalidSignatureError({ signature, type: 'struct' });\n const properties = match.properties.split(';');\n const components = [];\n const propertiesLength = properties.length;\n for (let k = 0; k < propertiesLength; k++) {\n const property = properties[k];\n const trimmed = property.trim();\n if (!trimmed)\n continue;\n const abiParameter = parseAbiParameter(trimmed, {\n type: 'struct',\n });\n components.push(abiParameter);\n }\n if (!components.length)\n throw new InvalidStructSignatureError({ signature });\n shallowStructs[match.name] = components;\n }\n // Resolve nested structs inside each parameter\n const resolvedStructs = {};\n const entries = Object.entries(shallowStructs);\n const entriesLength = entries.length;\n for (let i = 0; i < entriesLength; i++) {\n const [name, parameters] = entries[i];\n resolvedStructs[name] = resolveStructs(parameters, shallowStructs);\n }\n return resolvedStructs;\n}\nconst typeWithoutTupleRegex = /^(?<type>[a-zA-Z$_][a-zA-Z0-9$_]*)(?<array>(?:\\[\\d*?\\])+?)?$/;\nfunction resolveStructs(abiParameters = [], structs = {}, ancestors = new Set()) {\n const components = [];\n const length = abiParameters.length;\n for (let i = 0; i < length; i++) {\n const abiParameter = abiParameters[i];\n const isTuple = isTupleRegex.test(abiParameter.type);\n if (isTuple)\n components.push(abiParameter);\n else {\n const match = execTyped(typeWithoutTupleRegex, abiParameter.type);\n if (!match?.type)\n throw new InvalidAbiTypeParameterError({ abiParameter });\n const { array, type } = match;\n if (type in structs) {\n if (ancestors.has(type))\n throw new CircularReferenceError({ type });\n components.push({\n ...abiParameter,\n type: `tuple${array ?? ''}`,\n components: resolveStructs(structs[type], structs, new Set([...ancestors, type])),\n });\n }\n else {\n if (isSolidityType(type))\n components.push(abiParameter);\n else\n throw new UnknownTypeError({ type });\n }\n }\n }\n return components;\n}\n\n/**\n * Parses human-readable ABI into JSON {@link Abi}\n *\n * @param signatures - Human-Readable ABI\n * @returns Parsed {@link Abi}\n *\n * @example\n * const abi = parseAbi([\n * // ^? const abi: readonly [{ name: \"balanceOf\"; type: \"function\"; stateMutability:...\n * 'function balanceOf(address owner) view returns (uint256)',\n * 'event Transfer(address indexed from, address indexed to, uint256 amount)',\n * ])\n */\nfunction parseAbi(signatures) {\n const structs = parseStructs(signatures);\n const abi = [];\n const length = signatures.length;\n for (let i = 0; i < length; i++) {\n const signature = signatures[i];\n if (isStructSignature(signature))\n continue;\n abi.push(parseSignature(signature, structs));\n }\n return abi;\n}\n\nfunction formatAbiItem(abiItem, { includeName = false } = {}) {\n if (abiItem.type !== 'function' &&\n abiItem.type !== 'event' &&\n abiItem.type !== 'error')\n throw new InvalidDefinitionTypeError(abiItem.type);\n return `${abiItem.name}(${formatAbiParams(abiItem.inputs, { includeName })})`;\n}\nfunction formatAbiParams(params, { includeName = false } = {}) {\n if (!params)\n return '';\n return params\n .map((param) => formatAbiParam(param, { includeName }))\n .join(includeName ? ', ' : ',');\n}\nfunction formatAbiParam(param, { includeName }) {\n if (param.type.startsWith('tuple')) {\n return `(${formatAbiParams(param.components, { includeName })})${param.type.slice('tuple'.length)}`;\n }\n return param.type + (includeName && param.name ? ` ${param.name}` : '');\n}\n\nfunction isHex(value, { strict = true } = {}) {\n if (!value)\n return false;\n if (typeof value !== 'string')\n return false;\n return strict ? /^0x[0-9a-fA-F]*$/.test(value) : value.startsWith('0x');\n}\n\n/**\n * @description Retrieves the size of the value (in bytes).\n *\n * @param value The value (hex or byte array) to retrieve the size of.\n * @returns The size of the value (in bytes).\n */\nfunction size(value) {\n if (isHex(value, { strict: false }))\n return Math.ceil((value.length - 2) / 2);\n return value.length;\n}\n\nconst version = '2.47.10';\n\nlet errorConfig = {\n getDocsUrl: ({ docsBaseUrl, docsPath = '', docsSlug, }) => docsPath\n ? `${docsBaseUrl ?? 'https://viem.sh'}${docsPath}${docsSlug ? `#${docsSlug}` : ''}`\n : undefined,\n version: `viem@${version}`,\n};\nclass BaseError extends Error {\n constructor(shortMessage, args = {}) {\n const details = (() => {\n if (args.cause instanceof BaseError)\n return args.cause.details;\n if (args.cause?.message)\n return args.cause.message;\n return args.details;\n })();\n const docsPath = (() => {\n if (args.cause instanceof BaseError)\n return args.cause.docsPath || args.docsPath;\n return args.docsPath;\n })();\n const docsUrl = errorConfig.getDocsUrl?.({ ...args, docsPath });\n const message = [\n shortMessage || 'An error occurred.',\n '',\n ...(args.metaMessages ? [...args.metaMessages, ''] : []),\n ...(docsUrl ? [`Docs: ${docsUrl}`] : []),\n ...(details ? [`Details: ${details}`] : []),\n ...(errorConfig.version ? [`Version: ${errorConfig.version}`] : []),\n ].join('\\n');\n super(message, args.cause ? { cause: args.cause } : undefined);\n Object.defineProperty(this, \"details\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"docsPath\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"metaMessages\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"shortMessage\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"version\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"name\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 'BaseError'\n });\n this.details = details;\n this.docsPath = docsPath;\n this.metaMessages = args.metaMessages;\n this.name = args.name ?? this.name;\n this.shortMessage = shortMessage;\n this.version = version;\n }\n walk(fn) {\n return walk(this, fn);\n }\n}\nfunction walk(err, fn) {\n if (fn?.(err))\n return err;\n if (err &&\n typeof err === 'object' &&\n 'cause' in err &&\n err.cause !== undefined)\n return walk(err.cause, fn);\n return fn ? null : err;\n}\n\nclass AbiEncodingArrayLengthMismatchError extends BaseError {\n constructor({ expectedLength, givenLength, type, }) {\n super([\n `ABI encoding array length mismatch for type ${type}.`,\n `Expected length: ${expectedLength}`,\n `Given length: ${givenLength}`,\n ].join('\\n'), { name: 'AbiEncodingArrayLengthMismatchError' });\n }\n}\nclass AbiEncodingBytesSizeMismatchError extends BaseError {\n constructor({ expectedSize, value }) {\n super(`Size of bytes \"${value}\" (bytes${size(value)}) does not match expected size (bytes${expectedSize}).`, { name: 'AbiEncodingBytesSizeMismatchError' });\n }\n}\nclass AbiEncodingLengthMismatchError extends BaseError {\n constructor({ expectedLength, givenLength, }) {\n super([\n 'ABI encoding params/values length mismatch.',\n `Expected length (params): ${expectedLength}`,\n `Given length (values): ${givenLength}`,\n ].join('\\n'), { name: 'AbiEncodingLengthMismatchError' });\n }\n}\nclass AbiFunctionNotFoundError extends BaseError {\n constructor(functionName, { docsPath } = {}) {\n super([\n `Function ${functionName ? `\"${functionName}\" ` : ''}not found on ABI.`,\n 'Make sure you are using the correct ABI and that the function exists on it.',\n ].join('\\n'), {\n docsPath,\n name: 'AbiFunctionNotFoundError',\n });\n }\n}\nclass AbiItemAmbiguityError extends BaseError {\n constructor(x, y) {\n super('Found ambiguous types in overloaded ABI items.', {\n metaMessages: [\n `\\`${x.type}\\` in \\`${formatAbiItem(x.abiItem)}\\`, and`,\n `\\`${y.type}\\` in \\`${formatAbiItem(y.abiItem)}\\``,\n '',\n 'These types encode differently and cannot be distinguished at runtime.',\n 'Remove one of the ambiguous items in the ABI.',\n ],\n name: 'AbiItemAmbiguityError',\n });\n }\n}\nclass InvalidAbiEncodingTypeError extends BaseError {\n constructor(type, { docsPath }) {\n super([\n `Type \"${type}\" is not a valid encoding type.`,\n 'Please provide a valid ABI type.',\n ].join('\\n'), { docsPath, name: 'InvalidAbiEncodingType' });\n }\n}\nclass InvalidArrayError extends BaseError {\n constructor(value) {\n super([`Value \"${value}\" is not a valid array.`].join('\\n'), {\n name: 'InvalidArrayError',\n });\n }\n}\nclass InvalidDefinitionTypeError extends BaseError {\n constructor(type) {\n super([\n `\"${type}\" is not a valid definition type.`,\n 'Valid types: \"function\", \"event\", \"error\"',\n ].join('\\n'), { name: 'InvalidDefinitionTypeError' });\n }\n}\n\nclass SliceOffsetOutOfBoundsError extends BaseError {\n constructor({ offset, position, size, }) {\n super(`Slice ${position === 'start' ? 'starting' : 'ending'} at offset \"${offset}\" is out-of-bounds (size: ${size}).`, { name: 'SliceOffsetOutOfBoundsError' });\n }\n}\nclass SizeExceedsPaddingSizeError extends BaseError {\n constructor({ size, targetSize, type, }) {\n super(`${type.charAt(0).toUpperCase()}${type\n .slice(1)\n .toLowerCase()} size (${size}) exceeds padding size (${targetSize}).`, { name: 'SizeExceedsPaddingSizeError' });\n }\n}\n\nfunction pad(hexOrBytes, { dir, size = 32 } = {}) {\n if (typeof hexOrBytes === 'string')\n return padHex(hexOrBytes, { dir, size });\n return padBytes(hexOrBytes, { dir, size });\n}\nfunction padHex(hex_, { dir, size = 32 } = {}) {\n if (size === null)\n return hex_;\n const hex = hex_.replace('0x', '');\n if (hex.length > size * 2)\n throw new SizeExceedsPaddingSizeError({\n size: Math.ceil(hex.length / 2),\n targetSize: size,\n type: 'hex',\n });\n return `0x${hex[dir === 'right' ? 'padEnd' : 'padStart'](size * 2, '0')}`;\n}\nfunction padBytes(bytes, { dir, size = 32 } = {}) {\n if (size === null)\n return bytes;\n if (bytes.length > size)\n throw new SizeExceedsPaddingSizeError({\n size: bytes.length,\n targetSize: size,\n type: 'bytes',\n });\n const paddedBytes = new Uint8Array(size);\n for (let i = 0; i < size; i++) {\n const padEnd = dir === 'right';\n paddedBytes[padEnd ? i : size - i - 1] =\n bytes[padEnd ? i : bytes.length - i - 1];\n }\n return paddedBytes;\n}\n\nclass IntegerOutOfRangeError extends BaseError {\n constructor({ max, min, signed, size, value, }) {\n super(`Number \"${value}\" is not in safe ${size ? `${size * 8}-bit ${signed ? 'signed' : 'unsigned'} ` : ''}integer range ${max ? `(${min} to ${max})` : `(above ${min})`}`, { name: 'IntegerOutOfRangeError' });\n }\n}\nclass SizeOverflowError extends BaseError {\n constructor({ givenSize, maxSize }) {\n super(`Size cannot exceed ${maxSize} bytes. Given size: ${givenSize} bytes.`, { name: 'SizeOverflowError' });\n }\n}\n\nfunction assertSize(hexOrBytes, { size: size$1 }) {\n if (size(hexOrBytes) > size$1)\n throw new SizeOverflowError({\n givenSize: size(hexOrBytes),\n maxSize: size$1,\n });\n}\n\nconst hexes = /*#__PURE__*/ Array.from({ length: 256 }, (_v, i) => i.toString(16).padStart(2, '0'));\n/**\n * Encodes a string, number, bigint, or ByteArray into a hex string\n *\n * - Docs: https://viem.sh/docs/utilities/toHex\n * - Example: https://viem.sh/docs/utilities/toHex#usage\n *\n * @param value Value to encode.\n * @param opts Options.\n * @returns Hex value.\n *\n * @example\n * import { toHex } from 'viem'\n * const data = toHex('Hello world')\n * // '0x48656c6c6f20776f726c6421'\n *\n * @example\n * import { toHex } from 'viem'\n * const data = toHex(420)\n * // '0x1a4'\n *\n * @example\n * import { toHex } from 'viem'\n * const data = toHex('Hello world', { size: 32 })\n * // '0x48656c6c6f20776f726c64210000000000000000000000000000000000000000'\n */\nfunction toHex(value, opts = {}) {\n if (typeof value === 'number' || typeof value === 'bigint')\n return numberToHex(value, opts);\n if (typeof value === 'string') {\n return stringToHex(value, opts);\n }\n if (typeof value === 'boolean')\n return boolToHex(value, opts);\n return bytesToHex(value, opts);\n}\n/**\n * Encodes a boolean into a hex string\n *\n * - Docs: https://viem.sh/docs/utilities/toHex#booltohex\n *\n * @param value Value to encode.\n * @param opts Options.\n * @returns Hex value.\n *\n * @example\n * import { boolToHex } from 'viem'\n * const data = boolToHex(true)\n * // '0x1'\n *\n * @example\n * import { boolToHex } from 'viem'\n * const data = boolToHex(false)\n * // '0x0'\n *\n * @example\n * import { boolToHex } from 'viem'\n * const data = boolToHex(true, { size: 32 })\n * // '0x0000000000000000000000000000000000000000000000000000000000000001'\n */\nfunction boolToHex(value, opts = {}) {\n const hex = `0x${Number(value)}`;\n if (typeof opts.size === 'number') {\n assertSize(hex, { size: opts.size });\n return pad(hex, { size: opts.size });\n }\n return hex;\n}\n/**\n * Encodes a bytes array into a hex string\n *\n * - Docs: https://viem.sh/docs/utilities/toHex#bytestohex\n *\n * @param value Value to encode.\n * @param opts Options.\n * @returns Hex value.\n *\n * @example\n * import { bytesToHex } from 'viem'\n * const data = bytesToHex(Uint8Array.from([72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100, 33])\n * // '0x48656c6c6f20576f726c6421'\n *\n * @example\n * import { bytesToHex } from 'viem'\n * const data = bytesToHex(Uint8Array.from([72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100, 33]), { size: 32 })\n * // '0x48656c6c6f20576f726c64210000000000000000000000000000000000000000'\n */\nfunction bytesToHex(value, opts = {}) {\n let string = '';\n for (let i = 0; i < value.length; i++) {\n string += hexes[value[i]];\n }\n const hex = `0x${string}`;\n if (typeof opts.size === 'number') {\n assertSize(hex, { size: opts.size });\n return pad(hex, { dir: 'right', size: opts.size });\n }\n return hex;\n}\n/**\n * Encodes a number or bigint into a hex string\n *\n * - Docs: https://viem.sh/docs/utilities/toHex#numbertohex\n *\n * @param value Value to encode.\n * @param opts Options.\n * @returns Hex value.\n *\n * @example\n * import { numberToHex } from 'viem'\n * const data = numberToHex(420)\n * // '0x1a4'\n *\n * @example\n * import { numberToHex } from 'viem'\n * const data = numberToHex(420, { size: 32 })\n * // '0x00000000000000000000000000000000000000000000000000000000000001a4'\n */\nfunction numberToHex(value_, opts = {}) {\n const { signed, size } = opts;\n const value = BigInt(value_);\n let maxValue;\n if (size) {\n if (signed)\n maxValue = (1n << (BigInt(size) * 8n - 1n)) - 1n;\n else\n maxValue = 2n ** (BigInt(size) * 8n) - 1n;\n }\n else if (typeof value_ === 'number') {\n maxValue = BigInt(Number.MAX_SAFE_INTEGER);\n }\n const minValue = typeof maxValue === 'bigint' && signed ? -maxValue - 1n : 0;\n if ((maxValue && value > maxValue) || value < minValue) {\n const suffix = typeof value_ === 'bigint' ? 'n' : '';\n throw new IntegerOutOfRangeError({\n max: maxValue ? `${maxValue}${suffix}` : undefined,\n min: `${minValue}${suffix}`,\n signed,\n size,\n value: `${value_}${suffix}`,\n });\n }\n const hex = `0x${(signed && value < 0 ? (1n << BigInt(size * 8)) + BigInt(value) : value).toString(16)}`;\n if (size)\n return pad(hex, { size });\n return hex;\n}\nconst encoder$1 = /*#__PURE__*/ new TextEncoder();\n/**\n * Encodes a UTF-8 string into a hex string\n *\n * - Docs: https://viem.sh/docs/utilities/toHex#stringtohex\n *\n * @param value Value to encode.\n * @param opts Options.\n * @returns Hex value.\n *\n * @example\n * import { stringToHex } from 'viem'\n * const data = stringToHex('Hello World!')\n * // '0x48656c6c6f20576f726c6421'\n *\n * @example\n * import { stringToHex } from 'viem'\n * const data = stringToHex('Hello World!', { size: 32 })\n * // '0x48656c6c6f20576f726c64210000000000000000000000000000000000000000'\n */\nfunction stringToHex(value_, opts = {}) {\n const value = encoder$1.encode(value_);\n return bytesToHex(value, opts);\n}\n\nconst encoder = /*#__PURE__*/ new TextEncoder();\n/**\n * Encodes a UTF-8 string, hex value, bigint, number or boolean to a byte array.\n *\n * - Docs: https://viem.sh/docs/utilities/toBytes\n * - Example: https://viem.sh/docs/utilities/toBytes#usage\n *\n * @param value Value to encode.\n * @param opts Options.\n * @returns Byte array value.\n *\n * @example\n * import { toBytes } from 'viem'\n * const data = toBytes('Hello world')\n * // Uint8Array([72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100, 33])\n *\n * @example\n * import { toBytes } from 'viem'\n * const data = toBytes(420)\n * // Uint8Array([1, 164])\n *\n * @example\n * import { toBytes } from 'viem'\n * const data = toBytes(420, { size: 4 })\n * // Uint8Array([0, 0, 1, 164])\n */\nfunction toBytes$1(value, opts = {}) {\n if (typeof value === 'number' || typeof value === 'bigint')\n return numberToBytes(value, opts);\n if (typeof value === 'boolean')\n return boolToBytes(value, opts);\n if (isHex(value))\n return hexToBytes(value, opts);\n return stringToBytes(value, opts);\n}\n/**\n * Encodes a boolean into a byte array.\n *\n * - Docs: https://viem.sh/docs/utilities/toBytes#booltobytes\n *\n * @param value Boolean value to encode.\n * @param opts Options.\n * @returns Byte array value.\n *\n * @example\n * import { boolToBytes } from 'viem'\n * const data = boolToBytes(true)\n * // Uint8Array([1])\n *\n * @example\n * import { boolToBytes } from 'viem'\n * const data = boolToBytes(true, { size: 32 })\n * // Uint8Array([0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1])\n */\nfunction boolToBytes(value, opts = {}) {\n const bytes = new Uint8Array(1);\n bytes[0] = Number(value);\n if (typeof opts.size === 'number') {\n assertSize(bytes, { size: opts.size });\n return pad(bytes, { size: opts.size });\n }\n return bytes;\n}\n// We use very optimized technique to convert hex string to byte array\nconst charCodeMap = {\n zero: 48,\n nine: 57,\n A: 65,\n F: 70,\n a: 97,\n f: 102,\n};\nfunction charCodeToBase16(char) {\n if (char >= charCodeMap.zero && char <= charCodeMap.nine)\n return char - charCodeMap.zero;\n if (char >= charCodeMap.A && char <= charCodeMap.F)\n return char - (charCodeMap.A - 10);\n if (char >= charCodeMap.a && char <= charCodeMap.f)\n return char - (charCodeMap.a - 10);\n return undefined;\n}\n/**\n * Encodes a hex string into a byte array.\n *\n * - Docs: https://viem.sh/docs/utilities/toBytes#hextobytes\n *\n * @param hex Hex string to encode.\n * @param opts Options.\n * @returns Byte array value.\n *\n * @example\n * import { hexToBytes } from 'viem'\n * const data = hexToBytes('0x48656c6c6f20776f726c6421')\n * // Uint8Array([72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100, 33])\n *\n * @example\n * import { hexToBytes } from 'viem'\n * const data = hexToBytes('0x48656c6c6f20776f726c6421', { size: 32 })\n * // Uint8Array([72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])\n */\nfunction hexToBytes(hex_, opts = {}) {\n let hex = hex_;\n if (opts.size) {\n assertSize(hex, { size: opts.size });\n hex = pad(hex, { dir: 'right', size: opts.size });\n }\n let hexString = hex.slice(2);\n if (hexString.length % 2)\n hexString = `0${hexString}`;\n const length = hexString.length / 2;\n const bytes = new Uint8Array(length);\n for (let index = 0, j = 0; index < length; index++) {\n const nibbleLeft = charCodeToBase16(hexString.charCodeAt(j++));\n const nibbleRight = charCodeToBase16(hexString.charCodeAt(j++));\n if (nibbleLeft === undefined || nibbleRight === undefined) {\n throw new BaseError(`Invalid byte sequence (\"${hexString[j - 2]}${hexString[j - 1]}\" in \"${hexString}\").`);\n }\n bytes[index] = nibbleLeft * 16 + nibbleRight;\n }\n return bytes;\n}\n/**\n * Encodes a number into a byte array.\n *\n * - Docs: https://viem.sh/docs/utilities/toBytes#numbertobytes\n *\n * @param value Number to encode.\n * @param opts Options.\n * @returns Byte array value.\n *\n * @example\n * import { numberToBytes } from 'viem'\n * const data = numberToBytes(420)\n * // Uint8Array([1, 164])\n *\n * @example\n * import { numberToBytes } from 'viem'\n * const data = numberToBytes(420, { size: 4 })\n * // Uint8Array([0, 0, 1, 164])\n */\nfunction numberToBytes(value, opts) {\n const hex = numberToHex(value, opts);\n return hexToBytes(hex);\n}\n/**\n * Encodes a UTF-8 string into a byte array.\n *\n * - Docs: https://viem.sh/docs/utilities/toBytes#stringtobytes\n *\n * @param value String to encode.\n * @param opts Options.\n * @returns Byte array value.\n *\n * @example\n * import { stringToBytes } from 'viem'\n * const data = stringToBytes('Hello world!')\n * // Uint8Array([72, 101, 108, 108, 111, 32, 119, 111, 114, 108, 100, 33])\n *\n * @example\n * import { stringToBytes } from 'viem'\n * const data = stringToBytes('Hello world!', { size: 32 })\n * // Uint8Array([72, 101, 108, 108, 111, 32, 87, 111, 114, 108, 100, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])\n */\nfunction stringToBytes(value, opts = {}) {\n const bytes = encoder.encode(value);\n if (typeof opts.size === 'number') {\n assertSize(bytes, { size: opts.size });\n return pad(bytes, { dir: 'right', size: opts.size });\n }\n return bytes;\n}\n\n/**\n * Internal helpers for u64. BigUint64Array is too slow as per 2025, so we implement it using Uint32Array.\n * @todo re-check https://issues.chromium.org/issues/42212588\n * @module\n */\nconst U32_MASK64 = /* @__PURE__ */ BigInt(2 ** 32 - 1);\nconst _32n = /* @__PURE__ */ BigInt(32);\nfunction fromBig(n, le = false) {\n if (le)\n return { h: Number(n & U32_MASK64), l: Number((n >> _32n) & U32_MASK64) };\n return { h: Number((n >> _32n) & U32_MASK64) | 0, l: Number(n & U32_MASK64) | 0 };\n}\nfunction split(lst, le = false) {\n const len = lst.length;\n let Ah = new Uint32Array(len);\n let Al = new Uint32Array(len);\n for (let i = 0; i < len; i++) {\n const { h, l } = fromBig(lst[i], le);\n [Ah[i], Al[i]] = [h, l];\n }\n return [Ah, Al];\n}\n// Left rotate for Shift in [1, 32)\nconst rotlSH = (h, l, s) => (h << s) | (l >>> (32 - s));\nconst rotlSL = (h, l, s) => (l << s) | (h >>> (32 - s));\n// Left rotate for Shift in (32, 64), NOTE: 32 is special case.\nconst rotlBH = (h, l, s) => (l << (s - 32)) | (h >>> (64 - s));\nconst rotlBL = (h, l, s) => (h << (s - 32)) | (l >>> (64 - s));\n\n/**\n * Utilities for hex, bytes, CSPRNG.\n * @module\n */\n/*! noble-hashes - MIT License (c) 2022 Paul Miller (paulmillr.com) */\n// We use WebCrypto aka globalThis.crypto, which exists in browsers and node.js 16+.\n// node.js versions earlier than v19 don't declare it in global scope.\n// For node.js, package.json#exports field mapping rewrites import\n// from `crypto` to `cryptoNode`, which imports native module.\n// Makes the utils un-importable in browsers without a bundler.\n// Once node.js 18 is deprecated (2025-04-30), we can just drop the import.\n/** Checks if something is Uint8Array. Be careful: nodejs Buffer will return true. */\nfunction isBytes(a) {\n return a instanceof Uint8Array || (ArrayBuffer.isView(a) && a.constructor.name === 'Uint8Array');\n}\n/** Asserts something is positive integer. */\nfunction anumber(n) {\n if (!Number.isSafeInteger(n) || n < 0)\n throw new Error('positive integer expected, got ' + n);\n}\n/** Asserts something is Uint8Array. */\nfunction abytes(b, ...lengths) {\n if (!isBytes(b))\n throw new Error('Uint8Array expected');\n if (lengths.length > 0 && !lengths.includes(b.length))\n throw new Error('Uint8Array expected of length ' + lengths + ', got length=' + b.length);\n}\n/** Asserts a hash instance has not been destroyed / finished */\nfunction aexists(instance, checkFinished = true) {\n if (instance.destroyed)\n throw new Error('Hash instance has been destroyed');\n if (checkFinished && instance.finished)\n throw new Error('Hash#digest() has already been called');\n}\n/** Asserts output is properly-sized byte array */\nfunction aoutput(out, instance) {\n abytes(out);\n const min = instance.outputLen;\n if (out.length < min) {\n throw new Error('digestInto() expects output buffer of length at least ' + min);\n }\n}\n/** Cast u8 / u16 / u32 to u32. */\nfunction u32(arr) {\n return new Uint32Array(arr.buffer, arr.byteOffset, Math.floor(arr.byteLength / 4));\n}\n/** Zeroize a byte array. Warning: JS provides no guarantees. */\nfunction clean(...arrays) {\n for (let i = 0; i < arrays.length; i++) {\n arrays[i].fill(0);\n }\n}\n/** Is current platform little-endian? Most are. Big-Endian platform: IBM */\nconst isLE = /* @__PURE__ */ (() => new Uint8Array(new Uint32Array([0x11223344]).buffer)[0] === 0x44)();\n/** The byte swap operation for uint32 */\nfunction byteSwap(word) {\n return (((word << 24) & 0xff000000) |\n ((word << 8) & 0xff0000) |\n ((word >>> 8) & 0xff00) |\n ((word >>> 24) & 0xff));\n}\n/** In place byte swap for Uint32Array */\nfunction byteSwap32(arr) {\n for (let i = 0; i < arr.length; i++) {\n arr[i] = byteSwap(arr[i]);\n }\n return arr;\n}\nconst swap32IfBE = isLE\n ? (u) => u\n : byteSwap32;\n/**\n * Converts string to bytes using UTF8 encoding.\n * @example utf8ToBytes('abc') // Uint8Array.from([97, 98, 99])\n */\nfunction utf8ToBytes(str) {\n if (typeof str !== 'string')\n throw new Error('string expected');\n return new Uint8Array(new TextEncoder().encode(str)); // https://bugzil.la/1681809\n}\n/**\n * Normalizes (non-hex) string or Uint8Array to Uint8Array.\n * Warning: when Uint8Array is passed, it would NOT get copied.\n * Keep in mind for future mutable operations.\n */\nfunction toBytes(data) {\n if (typeof data === 'string')\n data = utf8ToBytes(data);\n abytes(data);\n return data;\n}\n/** For runtime check if class implements interface */\nclass Hash {\n}\n/** Wraps hash function, creating an interface on top of it */\nfunction createHasher(hashCons) {\n const hashC = (msg) => hashCons().update(toBytes(msg)).digest();\n const tmp = hashCons();\n hashC.outputLen = tmp.outputLen;\n hashC.blockLen = tmp.blockLen;\n hashC.create = () => hashCons();\n return hashC;\n}\n\n/**\n * SHA3 (keccak) hash function, based on a new \"Sponge function\" design.\n * Different from older hashes, the internal state is bigger than output size.\n *\n * Check out [FIPS-202](https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.202.pdf),\n * [Website](https://keccak.team/keccak.html),\n * [the differences between SHA-3 and Keccak](https://crypto.stackexchange.com/questions/15727/what-are-the-key-differences-between-the-draft-sha-3-standard-and-the-keccak-sub).\n *\n * Check out `sha3-addons` module for cSHAKE, k12, and others.\n * @module\n */\n// No __PURE__ annotations in sha3 header:\n// EVERYTHING is in fact used on every export.\n// Various per round constants calculations\nconst _0n = BigInt(0);\nconst _1n = BigInt(1);\nconst _2n = BigInt(2);\nconst _7n = BigInt(7);\nconst _256n = BigInt(256);\nconst _0x71n = BigInt(0x71);\nconst SHA3_PI = [];\nconst SHA3_ROTL = [];\nconst _SHA3_IOTA = [];\nfor (let round = 0, R = _1n, x = 1, y = 0; round < 24; round++) {\n // Pi\n [x, y] = [y, (2 * x + 3 * y) % 5];\n SHA3_PI.push(2 * (5 * y + x));\n // Rotational\n SHA3_ROTL.push((((round + 1) * (round + 2)) / 2) % 64);\n // Iota\n let t = _0n;\n for (let j = 0; j < 7; j++) {\n R = ((R << _1n) ^ ((R >> _7n) * _0x71n)) % _256n;\n if (R & _2n)\n t ^= _1n << ((_1n << /* @__PURE__ */ BigInt(j)) - _1n);\n }\n _SHA3_IOTA.push(t);\n}\nconst IOTAS = split(_SHA3_IOTA, true);\nconst SHA3_IOTA_H = IOTAS[0];\nconst SHA3_IOTA_L = IOTAS[1];\n// Left rotation (without 0, 32, 64)\nconst rotlH = (h, l, s) => (s > 32 ? rotlBH(h, l, s) : rotlSH(h, l, s));\nconst rotlL = (h, l, s) => (s > 32 ? rotlBL(h, l, s) : rotlSL(h, l, s));\n/** `keccakf1600` internal function, additionally allows to adjust round count. */\nfunction keccakP(s, rounds = 24) {\n const B = new Uint32Array(5 * 2);\n // NOTE: all indices are x2 since we store state as u32 instead of u64 (bigints to slow in js)\n for (let round = 24 - rounds; round < 24; round++) {\n // Theta θ\n for (let x = 0; x < 10; x++)\n B[x] = s[x] ^ s[x + 10] ^ s[x + 20] ^ s[x + 30] ^ s[x + 40];\n for (let x = 0; x < 10; x += 2) {\n const idx1 = (x + 8) % 10;\n const idx0 = (x + 2) % 10;\n const B0 = B[idx0];\n const B1 = B[idx0 + 1];\n const Th = rotlH(B0, B1, 1) ^ B[idx1];\n const Tl = rotlL(B0, B1, 1) ^ B[idx1 + 1];\n for (let y = 0; y < 50; y += 10) {\n s[x + y] ^= Th;\n s[x + y + 1] ^= Tl;\n }\n }\n // Rho (ρ) and Pi (π)\n let curH = s[2];\n let curL = s[3];\n for (let t = 0; t < 24; t++) {\n const shift = SHA3_ROTL[t];\n const Th = rotlH(curH, curL, shift);\n const Tl = rotlL(curH, curL, shift);\n const PI = SHA3_PI[t];\n curH = s[PI];\n curL = s[PI + 1];\n s[PI] = Th;\n s[PI + 1] = Tl;\n }\n // Chi (χ)\n for (let y = 0; y < 50; y += 10) {\n for (let x = 0; x < 10; x++)\n B[x] = s[y + x];\n for (let x = 0; x < 10; x++)\n s[y + x] ^= ~B[(x + 2) % 10] & B[(x + 4) % 10];\n }\n // Iota (ι)\n s[0] ^= SHA3_IOTA_H[round];\n s[1] ^= SHA3_IOTA_L[round];\n }\n clean(B);\n}\n/** Keccak sponge function. */\nclass Keccak extends Hash {\n // NOTE: we accept arguments in bytes instead of bits here.\n constructor(blockLen, suffix, outputLen, enableXOF = false, rounds = 24) {\n super();\n this.pos = 0;\n this.posOut = 0;\n this.finished = false;\n this.destroyed = false;\n this.enableXOF = false;\n this.blockLen = blockLen;\n this.suffix = suffix;\n this.outputLen = outputLen;\n this.enableXOF = enableXOF;\n this.rounds = rounds;\n // Can be passed from user as dkLen\n anumber(outputLen);\n // 1600 = 5x5 matrix of 64bit. 1600 bits === 200 bytes\n // 0 < blockLen < 200\n if (!(0 < blockLen && blockLen < 200))\n throw new Error('only keccak-f1600 function is supported');\n this.state = new Uint8Array(200);\n this.state32 = u32(this.state);\n }\n clone() {\n return this._cloneInto();\n }\n keccak() {\n swap32IfBE(this.state32);\n keccakP(this.state32, this.rounds);\n swap32IfBE(this.state32);\n this.posOut = 0;\n this.pos = 0;\n }\n update(data) {\n aexists(this);\n data = toBytes(data);\n abytes(data);\n const { blockLen, state } = this;\n const len = data.length;\n for (let pos = 0; pos < len;) {\n const take = Math.min(blockLen - this.pos, len - pos);\n for (let i = 0; i < take; i++)\n state[this.pos++] ^= data[pos++];\n if (this.pos === blockLen)\n this.keccak();\n }\n return this;\n }\n finish() {\n if (this.finished)\n return;\n this.finished = true;\n const { state, suffix, pos, blockLen } = this;\n // Do the padding\n state[pos] ^= suffix;\n if ((suffix & 0x80) !== 0 && pos === blockLen - 1)\n this.keccak();\n state[blockLen - 1] ^= 0x80;\n this.keccak();\n }\n writeInto(out) {\n aexists(this, false);\n abytes(out);\n this.finish();\n const bufferOut = this.state;\n const { blockLen } = this;\n for (let pos = 0, len = out.length; pos < len;) {\n if (this.posOut >= blockLen)\n this.keccak();\n const take = Math.min(blockLen - this.posOut, len - pos);\n out.set(bufferOut.subarray(this.posOut, this.posOut + take), pos);\n this.posOut += take;\n pos += take;\n }\n return out;\n }\n xofInto(out) {\n // Sha3/Keccak usage with XOF is probably mistake, only SHAKE instances can do XOF\n if (!this.enableXOF)\n throw new Error('XOF is not possible for this instance');\n return this.writeInto(out);\n }\n xof(bytes) {\n anumber(bytes);\n return this.xofInto(new Uint8Array(bytes));\n }\n digestInto(out) {\n aoutput(out, this);\n if (this.finished)\n throw new Error('digest() was already called');\n this.writeInto(out);\n this.destroy();\n return out;\n }\n digest() {\n return this.digestInto(new Uint8Array(this.outputLen));\n }\n destroy() {\n this.destroyed = true;\n clean(this.state);\n }\n _cloneInto(to) {\n const { blockLen, suffix, outputLen, rounds, enableXOF } = this;\n to || (to = new Keccak(blockLen, suffix, outputLen, enableXOF, rounds));\n to.state32.set(this.state32);\n to.pos = this.pos;\n to.posOut = this.posOut;\n to.finished = this.finished;\n to.rounds = rounds;\n // Suffix can change in cSHAKE\n to.suffix = suffix;\n to.outputLen = outputLen;\n to.enableXOF = enableXOF;\n to.destroyed = this.destroyed;\n return to;\n }\n}\nconst gen = (suffix, blockLen, outputLen) => createHasher(() => new Keccak(blockLen, suffix, outputLen));\n/** keccak-256 hash function. Different from SHA3-256. */\nconst keccak_256 = /* @__PURE__ */ (() => gen(0x01, 136, 256 / 8))();\n\nfunction keccak256(value, to_) {\n const to = to_ || 'hex';\n const bytes = keccak_256(isHex(value, { strict: false }) ? toBytes$1(value) : value);\n if (to === 'bytes')\n return bytes;\n return toHex(bytes);\n}\n\nconst hash = (value) => keccak256(toBytes$1(value));\nfunction hashSignature(sig) {\n return hash(sig);\n}\n\nfunction normalizeSignature(signature) {\n let active = true;\n let current = '';\n let level = 0;\n let result = '';\n let valid = false;\n for (let i = 0; i < signature.length; i++) {\n const char = signature[i];\n // If the character is a separator, we want to reactivate.\n if (['(', ')', ','].includes(char))\n active = true;\n // If the character is a \"level\" token, we want to increment/decrement.\n if (char === '(')\n level++;\n if (char === ')')\n level--;\n // If we aren't active, we don't want to mutate the result.\n if (!active)\n continue;\n // If level === 0, we are at the definition level.\n if (level === 0) {\n if (char === ' ' && ['event', 'function', ''].includes(result))\n result = '';\n else {\n result += char;\n // If we are at the end of the definition, we must be finished.\n if (char === ')') {\n valid = true;\n break;\n }\n }\n continue;\n }\n // Ignore spaces\n if (char === ' ') {\n // If the previous character is a separator, and the current section isn't empty, we want to deactivate.\n if (signature[i - 1] !== ',' && current !== ',' && current !== ',(') {\n current = '';\n active = false;\n }\n continue;\n }\n result += char;\n current += char;\n }\n if (!valid)\n throw new BaseError('Unable to normalize signature.');\n return result;\n}\n\n/**\n * Returns the signature for a given function or event definition.\n *\n * @example\n * const signature = toSignature('function ownerOf(uint256 tokenId)')\n * // 'ownerOf(uint256)'\n *\n * @example\n * const signature_3 = toSignature({\n * name: 'ownerOf',\n * type: 'function',\n * inputs: [{ name: 'tokenId', type: 'uint256' }],\n * outputs: [],\n * stateMutability: 'view',\n * })\n * // 'ownerOf(uint256)'\n */\nconst toSignature = (def) => {\n const def_ = (() => {\n if (typeof def === 'string')\n return def;\n return formatAbiItem$1(def);\n })();\n return normalizeSignature(def_);\n};\n\n/**\n * Returns the hash (of the function/event signature) for a given event or function definition.\n */\nfunction toSignatureHash(fn) {\n return hashSignature(toSignature(fn));\n}\n\n/**\n * Returns the event selector for a given event definition.\n *\n * @example\n * const selector = toEventSelector('Transfer(address indexed from, address indexed to, uint256 amount)')\n * // 0xddf252ad1be2c89b69c2b068fc378daa952ba7f163c4a11628f55a4df523b3ef\n */\nconst toEventSelector = toSignatureHash;\n\nclass InvalidAddressError extends BaseError {\n constructor({ address }) {\n super(`Address \"${address}\" is invalid.`, {\n metaMessages: [\n '- Address must be a hex value of 20 bytes (40 hex characters).',\n '- Address must match its checksum counterpart.',\n ],\n name: 'InvalidAddressError',\n });\n }\n}\n\n/**\n * Map with a LRU (Least recently used) policy.\n *\n * @link https://en.wikipedia.org/wiki/Cache_replacement_policies#LRU\n */\nclass LruMap extends Map {\n constructor(size) {\n super();\n Object.defineProperty(this, \"maxSize\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n this.maxSize = size;\n }\n get(key) {\n const value = super.get(key);\n if (super.has(key)) {\n super.delete(key);\n super.set(key, value);\n }\n return value;\n }\n set(key, value) {\n if (super.has(key))\n super.delete(key);\n super.set(key, value);\n if (this.maxSize && this.size > this.maxSize) {\n const firstKey = super.keys().next().value;\n if (firstKey !== undefined)\n super.delete(firstKey);\n }\n return this;\n }\n}\n\nconst checksumAddressCache = /*#__PURE__*/ new LruMap(8192);\nfunction checksumAddress(address_, \n/**\n * Warning: EIP-1191 checksum addresses are generally not backwards compatible with the\n * wider Ethereum ecosystem, meaning it will break when validated against an application/tool\n * that relies on EIP-55 checksum encoding (checksum without chainId).\n *\n * It is highly recommended to not use this feature unless you\n * know what you are doing.\n *\n * See more: https://github.com/ethereum/EIPs/issues/1121\n */\nchainId) {\n if (checksumAddressCache.has(`${address_}.${chainId}`))\n return checksumAddressCache.get(`${address_}.${chainId}`);\n const hexAddress = address_.substring(2).toLowerCase();\n const hash = keccak256(stringToBytes(hexAddress), 'bytes');\n const address = (hexAddress).split('');\n for (let i = 0; i < 40; i += 2) {\n if (hash[i >> 1] >> 4 >= 8 && address[i]) {\n address[i] = address[i].toUpperCase();\n }\n if ((hash[i >> 1] & 0x0f) >= 8 && address[i + 1]) {\n address[i + 1] = address[i + 1].toUpperCase();\n }\n }\n const result = `0x${address.join('')}`;\n checksumAddressCache.set(`${address_}.${chainId}`, result);\n return result;\n}\n\nconst addressRegex = /^0x[a-fA-F0-9]{40}$/;\n/** @internal */\nconst isAddressCache = /*#__PURE__*/ new LruMap(8192);\nfunction isAddress(address, options) {\n const { strict = true } = options ?? {};\n const cacheKey = `${address}.${strict}`;\n if (isAddressCache.has(cacheKey))\n return isAddressCache.get(cacheKey);\n const result = (() => {\n if (!addressRegex.test(address))\n return false;\n if (address.toLowerCase() === address)\n return true;\n if (strict)\n return checksumAddress(address) === address;\n return true;\n })();\n isAddressCache.set(cacheKey, result);\n return result;\n}\n\nfunction concat(values) {\n if (typeof values[0] === 'string')\n return concatHex(values);\n return concatBytes(values);\n}\nfunction concatBytes(values) {\n let length = 0;\n for (const arr of values) {\n length += arr.length;\n }\n const result = new Uint8Array(length);\n let offset = 0;\n for (const arr of values) {\n result.set(arr, offset);\n offset += arr.length;\n }\n return result;\n}\nfunction concatHex(values) {\n return `0x${values.reduce((acc, x) => acc + x.replace('0x', ''), '')}`;\n}\n\n/**\n * @description Returns a section of the hex or byte array given a start/end bytes offset.\n *\n * @param value The hex or byte array to slice.\n * @param start The start offset (in bytes).\n * @param end The end offset (in bytes).\n */\nfunction slice(value, start, end, { strict } = {}) {\n if (isHex(value, { strict: false }))\n return sliceHex(value, start, end, {\n strict,\n });\n return sliceBytes(value, start, end, {\n strict,\n });\n}\nfunction assertStartOffset(value, start) {\n if (typeof start === 'number' && start > 0 && start > size(value) - 1)\n throw new SliceOffsetOutOfBoundsError({\n offset: start,\n position: 'start',\n size: size(value),\n });\n}\nfunction assertEndOffset(value, start, end) {\n if (typeof start === 'number' &&\n typeof end === 'number' &&\n size(value) !== end - start) {\n throw new SliceOffsetOutOfBoundsError({\n offset: end,\n position: 'end',\n size: size(value),\n });\n }\n}\n/**\n * @description Returns a section of the byte array given a start/end bytes offset.\n *\n * @param value The byte array to slice.\n * @param start The start offset (in bytes).\n * @param end The end offset (in bytes).\n */\nfunction sliceBytes(value_, start, end, { strict } = {}) {\n assertStartOffset(value_, start);\n const value = value_.slice(start, end);\n if (strict)\n assertEndOffset(value, start, end);\n return value;\n}\n/**\n * @description Returns a section of the hex value given a start/end bytes offset.\n *\n * @param value The hex value to slice.\n * @param start The start offset (in bytes).\n * @param end The end offset (in bytes).\n */\nfunction sliceHex(value_, start, end, { strict } = {}) {\n assertStartOffset(value_, start);\n const value = `0x${value_\n .replace('0x', '')\n .slice((start ?? 0) * 2, (end ?? value_.length) * 2)}`;\n if (strict)\n assertEndOffset(value, start, end);\n return value;\n}\n\n// `(u)int<M>`: (un)signed integer type of `M` bits, `0 < M <= 256`, `M % 8 == 0`\n// https://regexr.com/6v8hp\nconst integerRegex = /^(u?int)(8|16|24|32|40|48|56|64|72|80|88|96|104|112|120|128|136|144|152|160|168|176|184|192|200|208|216|224|232|240|248|256)?$/;\n\n/**\n * @description Encodes a list of primitive values into an ABI-encoded hex value.\n *\n * - Docs: https://viem.sh/docs/abi/encodeAbiParameters#encodeabiparameters\n *\n * Generates ABI encoded data using the [ABI specification](https://docs.soliditylang.org/en/latest/abi-spec), given a set of ABI parameters (inputs/outputs) and their corresponding values.\n *\n * @param params - a set of ABI Parameters (params), that can be in the shape of the inputs or outputs attribute of an ABI Item.\n * @param values - a set of values (values) that correspond to the given params.\n * @example\n * ```typescript\n * import { encodeAbiParameters } from 'viem'\n *\n * const encodedData = encodeAbiParameters(\n * [\n * { name: 'x', type: 'string' },\n * { name: 'y', type: 'uint' },\n * { name: 'z', type: 'bool' }\n * ],\n * ['wagmi', 420n, true]\n * )\n * ```\n *\n * You can also pass in Human Readable parameters with the parseAbiParameters utility.\n *\n * @example\n * ```typescript\n * import { encodeAbiParameters, parseAbiParameters } from 'viem'\n *\n * const encodedData = encodeAbiParameters(\n * parseAbiParameters('string x, uint y, bool z'),\n * ['wagmi', 420n, true]\n * )\n * ```\n */\nfunction encodeAbiParameters(params, values) {\n if (params.length !== values.length)\n throw new AbiEncodingLengthMismatchError({\n expectedLength: params.length,\n givenLength: values.length,\n });\n // Prepare the parameters to determine dynamic types to encode.\n const preparedParams = prepareParams({\n params: params,\n values: values,\n });\n const data = encodeParams(preparedParams);\n if (data.length === 0)\n return '0x';\n return data;\n}\nfunction prepareParams({ params, values, }) {\n const preparedParams = [];\n for (let i = 0; i < params.length; i++) {\n preparedParams.push(prepareParam({ param: params[i], value: values[i] }));\n }\n return preparedParams;\n}\nfunction prepareParam({ param, value, }) {\n const arrayComponents = getArrayComponents(param.type);\n if (arrayComponents) {\n const [length, type] = arrayComponents;\n return encodeArray(value, { length, param: { ...param, type } });\n }\n if (param.type === 'tuple') {\n return encodeTuple(value, {\n param: param,\n });\n }\n if (param.type === 'address') {\n return encodeAddress(value);\n }\n if (param.type === 'bool') {\n return encodeBool(value);\n }\n if (param.type.startsWith('uint') || param.type.startsWith('int')) {\n const signed = param.type.startsWith('int');\n const [, , size = '256'] = integerRegex.exec(param.type) ?? [];\n return encodeNumber(value, {\n signed,\n size: Number(size),\n });\n }\n if (param.type.startsWith('bytes')) {\n return encodeBytes(value, { param });\n }\n if (param.type === 'string') {\n return encodeString(value);\n }\n throw new InvalidAbiEncodingTypeError(param.type, {\n docsPath: '/docs/contract/encodeAbiParameters',\n });\n}\nfunction encodeParams(preparedParams) {\n // 1. Compute the size of the static part of the parameters.\n let staticSize = 0;\n for (let i = 0; i < preparedParams.length; i++) {\n const { dynamic, encoded } = preparedParams[i];\n if (dynamic)\n staticSize += 32;\n else\n staticSize += size(encoded);\n }\n // 2. Split the parameters into static and dynamic parts.\n const staticParams = [];\n const dynamicParams = [];\n let dynamicSize = 0;\n for (let i = 0; i < preparedParams.length; i++) {\n const { dynamic, encoded } = preparedParams[i];\n if (dynamic) {\n staticParams.push(numberToHex(staticSize + dynamicSize, { size: 32 }));\n dynamicParams.push(encoded);\n dynamicSize += size(encoded);\n }\n else {\n staticParams.push(encoded);\n }\n }\n // 3. Concatenate static and dynamic parts.\n return concat([...staticParams, ...dynamicParams]);\n}\nfunction encodeAddress(value) {\n if (!isAddress(value))\n throw new InvalidAddressError({ address: value });\n return { dynamic: false, encoded: padHex(value.toLowerCase()) };\n}\nfunction encodeArray(value, { length, param, }) {\n const dynamic = length === null;\n if (!Array.isArray(value))\n throw new InvalidArrayError(value);\n if (!dynamic && value.length !== length)\n throw new AbiEncodingArrayLengthMismatchError({\n expectedLength: length,\n givenLength: value.length,\n type: `${param.type}[${length}]`,\n });\n let dynamicChild = false;\n const preparedParams = [];\n for (let i = 0; i < value.length; i++) {\n const preparedParam = prepareParam({ param, value: value[i] });\n if (preparedParam.dynamic)\n dynamicChild = true;\n preparedParams.push(preparedParam);\n }\n if (dynamic || dynamicChild) {\n const data = encodeParams(preparedParams);\n if (dynamic) {\n const length = numberToHex(preparedParams.length, { size: 32 });\n return {\n dynamic: true,\n encoded: preparedParams.length > 0 ? concat([length, data]) : length,\n };\n }\n if (dynamicChild)\n return { dynamic: true, encoded: data };\n }\n return {\n dynamic: false,\n encoded: concat(preparedParams.map(({ encoded }) => encoded)),\n };\n}\nfunction encodeBytes(value, { param }) {\n const [, paramSize] = param.type.split('bytes');\n const bytesSize = size(value);\n if (!paramSize) {\n let value_ = value;\n // If the size is not divisible by 32 bytes, pad the end\n // with empty bytes to the ceiling 32 bytes.\n if (bytesSize % 32 !== 0)\n value_ = padHex(value_, {\n dir: 'right',\n size: Math.ceil((value.length - 2) / 2 / 32) * 32,\n });\n return {\n dynamic: true,\n encoded: concat([padHex(numberToHex(bytesSize, { size: 32 })), value_]),\n };\n }\n if (bytesSize !== Number.parseInt(paramSize, 10))\n throw new AbiEncodingBytesSizeMismatchError({\n expectedSize: Number.parseInt(paramSize, 10),\n value,\n });\n return { dynamic: false, encoded: padHex(value, { dir: 'right' }) };\n}\nfunction encodeBool(value) {\n if (typeof value !== 'boolean')\n throw new BaseError(`Invalid boolean value: \"${value}\" (type: ${typeof value}). Expected: \\`true\\` or \\`false\\`.`);\n return { dynamic: false, encoded: padHex(boolToHex(value)) };\n}\nfunction encodeNumber(value, { signed, size = 256 }) {\n if (typeof size === 'number') {\n const max = 2n ** (BigInt(size) - (signed ? 1n : 0n)) - 1n;\n const min = signed ? -max - 1n : 0n;\n if (value > max || value < min)\n throw new IntegerOutOfRangeError({\n max: max.toString(),\n min: min.toString(),\n signed,\n size: size / 8,\n value: value.toString(),\n });\n }\n return {\n dynamic: false,\n encoded: numberToHex(value, {\n size: 32,\n signed,\n }),\n };\n}\nfunction encodeString(value) {\n const hexValue = stringToHex(value);\n const partsLength = Math.ceil(size(hexValue) / 32);\n const parts = [];\n for (let i = 0; i < partsLength; i++) {\n parts.push(padHex(slice(hexValue, i * 32, (i + 1) * 32), {\n dir: 'right',\n }));\n }\n return {\n dynamic: true,\n encoded: concat([\n padHex(numberToHex(size(hexValue), { size: 32 })),\n ...parts,\n ]),\n };\n}\nfunction encodeTuple(value, { param }) {\n let dynamic = false;\n const preparedParams = [];\n for (let i = 0; i < param.components.length; i++) {\n const param_ = param.components[i];\n const index = Array.isArray(value) ? i : param_.name;\n const preparedParam = prepareParam({\n param: param_,\n value: value[index],\n });\n preparedParams.push(preparedParam);\n if (preparedParam.dynamic)\n dynamic = true;\n }\n return {\n dynamic,\n encoded: dynamic\n ? encodeParams(preparedParams)\n : concat(preparedParams.map(({ encoded }) => encoded)),\n };\n}\nfunction getArrayComponents(type) {\n const matches = type.match(/^(.*)\\[(\\d+)?\\]$/);\n return matches\n ? // Return `null` if the array is dynamic.\n [matches[2] ? Number(matches[2]) : null, matches[1]]\n : undefined;\n}\n\n/**\n * Returns the function selector for a given function definition.\n *\n * @example\n * const selector = toFunctionSelector('function ownerOf(uint256 tokenId)')\n * // 0x6352211e\n */\nconst toFunctionSelector = (fn) => slice(toSignatureHash(fn), 0, 4);\n\nfunction getAbiItem(parameters) {\n const { abi, args = [], name } = parameters;\n const isSelector = isHex(name, { strict: false });\n const abiItems = abi.filter((abiItem) => {\n if (isSelector) {\n if (abiItem.type === 'function')\n return toFunctionSelector(abiItem) === name;\n if (abiItem.type === 'event')\n return toEventSelector(abiItem) === name;\n return false;\n }\n return 'name' in abiItem && abiItem.name === name;\n });\n if (abiItems.length === 0)\n return undefined;\n if (abiItems.length === 1)\n return abiItems[0];\n let matchedAbiItem;\n for (const abiItem of abiItems) {\n if (!('inputs' in abiItem))\n continue;\n if (!args || args.length === 0) {\n if (!abiItem.inputs || abiItem.inputs.length === 0)\n return abiItem;\n continue;\n }\n if (!abiItem.inputs)\n continue;\n if (abiItem.inputs.length === 0)\n continue;\n if (abiItem.inputs.length !== args.length)\n continue;\n const matched = args.every((arg, index) => {\n const abiParameter = 'inputs' in abiItem && abiItem.inputs[index];\n if (!abiParameter)\n return false;\n return isArgOfType(arg, abiParameter);\n });\n if (matched) {\n // Check for ambiguity against already matched parameters (e.g. `address` vs `bytes20`).\n if (matchedAbiItem &&\n 'inputs' in matchedAbiItem &&\n matchedAbiItem.inputs) {\n const ambiguousTypes = getAmbiguousTypes(abiItem.inputs, matchedAbiItem.inputs, args);\n if (ambiguousTypes)\n throw new AbiItemAmbiguityError({\n abiItem,\n type: ambiguousTypes[0],\n }, {\n abiItem: matchedAbiItem,\n type: ambiguousTypes[1],\n });\n }\n matchedAbiItem = abiItem;\n }\n }\n if (matchedAbiItem)\n return matchedAbiItem;\n return abiItems[0];\n}\n/** @internal */\nfunction isArgOfType(arg, abiParameter) {\n const argType = typeof arg;\n const abiParameterType = abiParameter.type;\n switch (abiParameterType) {\n case 'address':\n return isAddress(arg, { strict: false });\n case 'bool':\n return argType === 'boolean';\n case 'function':\n return argType === 'string';\n case 'string':\n return argType === 'string';\n default: {\n if (abiParameterType === 'tuple' && 'components' in abiParameter)\n return Object.values(abiParameter.components).every((component, index) => {\n return (argType === 'object' &&\n isArgOfType(Object.values(arg)[index], component));\n });\n // `(u)int<M>`: (un)signed integer type of `M` bits, `0 < M <= 256`, `M % 8 == 0`\n // https://regexr.com/6v8hp\n if (/^u?int(8|16|24|32|40|48|56|64|72|80|88|96|104|112|120|128|136|144|152|160|168|176|184|192|200|208|216|224|232|240|248|256)?$/.test(abiParameterType))\n return argType === 'number' || argType === 'bigint';\n // `bytes<M>`: binary type of `M` bytes, `0 < M <= 32`\n // https://regexr.com/6va55\n if (/^bytes([1-9]|1[0-9]|2[0-9]|3[0-2])?$/.test(abiParameterType))\n return argType === 'string' || arg instanceof Uint8Array;\n // fixed-length (`<type>[M]`) and dynamic (`<type>[]`) arrays\n // https://regexr.com/6va6i\n if (/[a-z]+[1-9]{0,3}(\\[[0-9]{0,}\\])+$/.test(abiParameterType)) {\n return (Array.isArray(arg) &&\n arg.every((x) => isArgOfType(x, {\n ...abiParameter,\n // Pop off `[]` or `[M]` from end of type\n type: abiParameterType.replace(/(\\[[0-9]{0,}\\])$/, ''),\n })));\n }\n return false;\n }\n }\n}\n/** @internal */\nfunction getAmbiguousTypes(sourceParameters, targetParameters, args) {\n for (const parameterIndex in sourceParameters) {\n const sourceParameter = sourceParameters[parameterIndex];\n const targetParameter = targetParameters[parameterIndex];\n if (sourceParameter.type === 'tuple' &&\n targetParameter.type === 'tuple' &&\n 'components' in sourceParameter &&\n 'components' in targetParameter)\n return getAmbiguousTypes(sourceParameter.components, targetParameter.components, args[parameterIndex]);\n const types = [sourceParameter.type, targetParameter.type];\n const ambiguous = (() => {\n if (types.includes('address') && types.includes('bytes20'))\n return true;\n if (types.includes('address') && types.includes('string'))\n return isAddress(args[parameterIndex], { strict: false });\n if (types.includes('address') && types.includes('bytes'))\n return isAddress(args[parameterIndex], { strict: false });\n return false;\n })();\n if (ambiguous)\n return types;\n }\n return;\n}\n\nconst docsPath = '/docs/contract/encodeFunctionData';\nfunction prepareEncodeFunctionData(parameters) {\n const { abi, args, functionName } = parameters;\n let abiItem = abi[0];\n if (functionName) {\n const item = getAbiItem({\n abi,\n args,\n name: functionName,\n });\n if (!item)\n throw new AbiFunctionNotFoundError(functionName, { docsPath });\n abiItem = item;\n }\n if (abiItem.type !== 'function')\n throw new AbiFunctionNotFoundError(undefined, { docsPath });\n return {\n abi: [abiItem],\n functionName: toFunctionSelector(formatAbiItem(abiItem)),\n };\n}\n\nfunction encodeFunctionData(parameters) {\n const { args } = parameters;\n const { abi, functionName } = (() => {\n if (parameters.abi.length === 1 &&\n parameters.functionName?.startsWith('0x'))\n return parameters;\n return prepareEncodeFunctionData(parameters);\n })();\n const abiItem = abi[0];\n const signature = functionName;\n const data = 'inputs' in abiItem && abiItem.inputs\n ? encodeAbiParameters(abiItem.inputs, args ?? [])\n : undefined;\n return concatHex([signature, data ?? '0x']);\n}\n\nconst ZERO_ADDRESS$1 = \"0x0000000000000000000000000000000000000000\";\nconst PAYMENT_ABI = parseAbi([\n \"function createPayment(bytes32 paymentId, string vendorId, address token, uint256 amount, bytes backendSignature) external payable\",\n]);\nconst ERC20_ABI = parseAbi([\n \"function allowance(address owner, address spender) view returns (uint256)\",\n \"function approve(address spender, uint256 amount) returns (bool)\",\n]);\nfunction ensure0x(hex) {\n return (hex.startsWith(\"0x\") ? hex : `0x${hex}`);\n}\nclass ContractService {\n constructor(provider) {\n this.provider = provider;\n }\n async getAddress() {\n const accounts = (await this.provider.request({\n method: \"eth_requestAccounts\",\n }));\n if (!accounts[0]) {\n throw new KwesPayError(\"No wallet account available\", \"WALLET_REJECTED\");\n }\n return accounts[0];\n }\n async waitForReceipt(txHash, timeoutMs = 120000) {\n const deadline = Date.now() + timeoutMs;\n while (Date.now() < deadline) {\n const receipt = (await this.provider.request({\n method: \"eth_getTransactionReceipt\",\n params: [txHash],\n }));\n if (receipt) {\n return {\n blockNumber: parseInt(receipt.blockNumber, 16),\n status: parseInt(receipt.status, 16),\n };\n }\n await new Promise((r) => setTimeout(r, 2000));\n }\n throw new KwesPayError(\"Transaction receipt timeout — check wallet or block explorer\", \"CONTRACT_ERROR\");\n }\n async ensureApproval(tokenAddress, amountBaseUnits, contractAddress, chainId, onStatus) {\n if (tokenAddress === ZERO_ADDRESS$1)\n return;\n onStatus?.(\"Checking approval\", \"Verifying token allowance…\");\n const owner = await this.getAddress();\n const amount = BigInt(amountBaseUnits);\n const allowanceData = encodeFunctionData({\n abi: ERC20_ABI,\n functionName: \"allowance\",\n args: [owner, ensure0x(contractAddress)],\n });\n const rawAllowance = (await this.provider.request({\n method: \"eth_call\",\n params: [{ to: ensure0x(tokenAddress), data: allowanceData }, \"latest\"],\n }));\n const allowance = rawAllowance && rawAllowance !== \"0x\" ? BigInt(rawAllowance) : 0n;\n if (allowance >= amount)\n return;\n onStatus?.(\"Approve token\", \"Please approve in your wallet\");\n const approveData = encodeFunctionData({\n abi: ERC20_ABI,\n functionName: \"approve\",\n args: [ensure0x(contractAddress), amount * 2n],\n });\n let txHash;\n try {\n txHash = (await this.provider.request({\n method: \"eth_sendTransaction\",\n params: [\n { from: owner, to: ensure0x(tokenAddress), data: approveData },\n ],\n }));\n }\n catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n if (msg.includes(\"rejected\") ||\n msg.includes(\"denied\") ||\n msg.includes(\"ACTION_REJECTED\")) {\n throw new KwesPayError(\"Token approval cancelled by user\", \"APPROVAL_REJECTED\", err);\n }\n throw new KwesPayError(`Token approval failed: ${msg}`, \"CONTRACT_ERROR\", err);\n }\n onStatus?.(\"Waiting for approval\", `Tx: ${txHash.slice(0, 10)}…`);\n const receipt = await this.waitForReceipt(txHash);\n if (receipt.status !== 1) {\n throw new KwesPayError(\"Approval transaction reverted\", \"CONTRACT_ERROR\");\n }\n await new Promise((r) => setTimeout(r, 1000));\n }\n async createPayment(params, onStatus) {\n const from = await this.getAddress();\n const amount = BigInt(params.amountBaseUnits);\n const isNative = params.tokenAddress === ZERO_ADDRESS$1;\n const data = encodeFunctionData({\n abi: PAYMENT_ABI,\n functionName: \"createPayment\",\n args: [\n ensure0x(params.paymentIdBytes32),\n params.vendorIdentifier,\n ensure0x(params.tokenAddress),\n amount,\n ensure0x(params.backendSignature),\n ],\n });\n onStatus?.(\"Confirm payment\", \"Please approve in your wallet\");\n const txParams = {\n from,\n to: ensure0x(params.contractAddress),\n data,\n };\n if (isNative)\n txParams[\"value\"] = `0x${amount.toString(16)}`;\n let txHash;\n try {\n txHash = (await this.provider.request({\n method: \"eth_sendTransaction\",\n params: [txParams],\n }));\n }\n catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n if (msg.includes(\"rejected\") ||\n msg.includes(\"denied\") ||\n msg.includes(\"ACTION_REJECTED\") ||\n msg.includes(\"User denied\")) {\n throw new KwesPayError(\"Transaction cancelled by user\", \"WALLET_REJECTED\", err);\n }\n throw new KwesPayError(`Contract call failed: ${msg}`, \"CONTRACT_ERROR\", err);\n }\n onStatus?.(\"Waiting for confirmation\", `Tx: ${txHash.slice(0, 10)}…`);\n const receipt = await this.waitForReceipt(txHash);\n if (receipt.status !== 1) {\n throw new KwesPayError(\"Payment transaction reverted\", \"CONTRACT_ERROR\");\n }\n return { txHash, blockNumber: receipt.blockNumber };\n }\n}\n\nconst ZERO_ADDRESS = \"0x0000000000000000000000000000000000000000\";\nconst GAS_BUFFER = 300000n * 2000000000n;\nclass PaymentService {\n constructor(provider) {\n this.provider = provider;\n this.contractService = new ContractService(provider);\n }\n async ensureCorrectNetwork(expectedChainId, expectedNetwork, onStatus) {\n const raw = (await this.provider.request({\n method: \"eth_chainId\",\n }));\n const current = parseInt(raw, 16);\n if (current === expectedChainId)\n return;\n onStatus?.(\"Switching network\", `Switching to ${expectedNetwork} (chain ${expectedChainId})…`);\n try {\n await this.provider.request({\n method: \"wallet_switchEthereumChain\",\n params: [{ chainId: \"0x\" + expectedChainId.toString(16) }],\n });\n }\n catch (switchErr) {\n const errAny = switchErr;\n if (errAny?.code === 4902) {\n throw new KwesPayError(`Network ${expectedNetwork} (chain ${expectedChainId}) is not added to your wallet. Please add it manually and retry.`, \"WRONG_NETWORK\");\n }\n const msg = errAny?.message ?? String(switchErr);\n if (msg.includes(\"rejected\") ||\n msg.includes(\"denied\") ||\n msg.includes(\"ACTION_REJECTED\")) {\n throw new KwesPayError(`Network switch to ${expectedNetwork} was rejected. Please switch manually and retry.`, \"WRONG_NETWORK\");\n }\n throw new KwesPayError(`Failed to switch to ${expectedNetwork}: ${msg}`, \"WRONG_NETWORK\");\n }\n const confirmedRaw = (await this.provider.request({\n method: \"eth_chainId\",\n }));\n const confirmed = parseInt(confirmedRaw, 16);\n if (confirmed !== expectedChainId) {\n throw new KwesPayError(`Wallet is on chain ${confirmed} but payment requires chain ${expectedChainId} (${expectedNetwork}). Please switch your network and retry.`, \"WRONG_NETWORK\");\n }\n }\n async ensureSufficientBalance(walletAddress, tokenAddress, amountBaseUnits, onStatus) {\n const amount = BigInt(amountBaseUnits);\n const isNative = tokenAddress === ZERO_ADDRESS;\n onStatus?.(\"Checking balance\", \"Verifying wallet balance…\");\n const nativeRaw = (await this.provider.request({\n method: \"eth_getBalance\",\n params: [walletAddress, \"latest\"],\n }));\n const nativeBalance = nativeRaw && nativeRaw !== \"0x\" ? BigInt(nativeRaw) : 0n;\n if (isNative) {\n const required = amount + GAS_BUFFER;\n if (nativeBalance < required) {\n throw new KwesPayError(`Insufficient native balance. Required ~${(Number(required) / 1e18).toFixed(8)} ETH (payment + gas), available: ${(Number(nativeBalance) / 1e18).toFixed(8)} ETH.`, \"INSUFFICIENT_BALANCE\");\n }\n return;\n }\n if (nativeBalance < GAS_BUFFER) {\n throw new KwesPayError(`Insufficient gas balance. Need at least ${(Number(GAS_BUFFER) / 1e18).toFixed(8)} ETH for gas, available: ${(Number(nativeBalance) / 1e18).toFixed(8)} ETH.`, \"INSUFFICIENT_BALANCE\");\n }\n const balanceData = \"0x70a08231\" + walletAddress.slice(2).toLowerCase().padStart(64, \"0\");\n const raw = (await this.provider.request({\n method: \"eth_call\",\n params: [{ to: tokenAddress, data: balanceData }, \"latest\"],\n }));\n const tokenBalance = raw && raw !== \"0x\" ? BigInt(raw) : 0n;\n if (tokenBalance < amount) {\n throw new KwesPayError(`Insufficient token balance. Required: ${amount.toString()}, available: ${tokenBalance.toString()} (base units).`, \"INSUFFICIENT_BALANCE\");\n }\n }\n async pay(params) {\n const { provider, payload, onStatus } = params;\n if (!payload.paymentIdBytes32 || !payload.backendSignature) {\n throw new KwesPayError(\"Invalid transaction payload — missing paymentIdBytes32 or backendSignature\", \"TRANSACTION_FAILED\");\n }\n if (!payload.vendorIdentifier) {\n throw new KwesPayError(\"Invalid transaction payload — missing vendorIdentifier\", \"TRANSACTION_FAILED\");\n }\n await this.ensureCorrectNetwork(payload.chainId, payload.network, onStatus);\n const accounts = (await this.provider.request({\n method: \"eth_requestAccounts\",\n }));\n const walletAddress = accounts[0];\n await this.ensureSufficientBalance(walletAddress, payload.tokenAddress, payload.amountBaseUnits, onStatus);\n const contractAddress = resolveContractAddress(payload.network);\n await this.contractService.ensureApproval(payload.tokenAddress, payload.amountBaseUnits, contractAddress, payload.chainId, onStatus);\n const { txHash, blockNumber } = await this.contractService.createPayment({\n paymentIdBytes32: payload.paymentIdBytes32,\n vendorIdentifier: payload.vendorIdentifier,\n tokenAddress: payload.tokenAddress,\n amountBaseUnits: payload.amountBaseUnits,\n backendSignature: payload.backendSignature,\n contractAddress,\n chainId: payload.chainId,\n }, onStatus);\n return {\n txHash,\n blockNumber,\n transactionReference: payload.transactionReference,\n paymentIdBytes32: payload.paymentIdBytes32,\n };\n }\n}\n\nclass KwesPayClient {\n constructor(config) {\n if (!config.apiKey)\n throw new KwesPayError(\"apiKey is required\", \"INVALID_KEY\");\n this.apiKey = config.apiKey;\n }\n async validateKey() {\n const data = await gqlRequest(GQL_VALIDATE_KEY, {\n accessKey: this.apiKey,\n });\n const r = data.validateAccessKey;\n if (!r.isValid) {\n return {\n isValid: false,\n error: r.error ?? \"Invalid access key\",\n };\n }\n return {\n isValid: true,\n keyId: r.keyId,\n keyLabel: r.keyLabel,\n activeFlag: r.activeFlag,\n expirationDate: r.expirationDate,\n vendorInfo: r.vendorInfo,\n scope: {\n allowedVendors: r.allowedVendors ?? null,\n allowedNetworks: r.allowedNetworks ?? null,\n allowedTokens: r.allowedTokens ?? null,\n },\n };\n }\n async getQuote(params) {\n const data = await gqlRequest(GQL_CREATE_QUOTE, {\n input: {\n vendorIdentifier: params.vendorIdentifier,\n fiatAmount: params.fiatAmount,\n fiatCurrency: params.fiatCurrency ?? \"USD\",\n cryptoCurrency: params.cryptoCurrency,\n network: params.network,\n },\n }, this.apiKey);\n const q = data.createQuote;\n if (!q.success) {\n const msg = q.message ?? \"Quote creation failed\";\n const code = msg.toLowerCase().includes(\"expired\")\n ? \"QUOTE_EXPIRED\"\n : msg.toLowerCase().includes(\"key\")\n ? \"INVALID_KEY\"\n : \"UNKNOWN\";\n throw new KwesPayError(msg, code);\n }\n return {\n quoteId: q.quoteId,\n cryptoCurrency: q.cryptoCurrency,\n tokenAddress: q.tokenAddress,\n amountBaseUnits: q.amountBaseUnits,\n displayAmount: q.displayAmount,\n network: q.network,\n chainId: q.chainId,\n expiresAt: q.expiresAt,\n };\n }\n async quote(params) {\n const quoteData = await gqlRequest(GQL_CREATE_QUOTE, {\n input: {\n vendorIdentifier: params.vendorIdentifier,\n fiatAmount: params.fiatAmount,\n fiatCurrency: params.fiatCurrency ?? \"USD\",\n cryptoCurrency: params.cryptoCurrency,\n network: params.network,\n },\n }, this.apiKey);\n const q = quoteData.createQuote;\n if (!q.success) {\n const msg = q.message ?? \"Quote creation failed\";\n const code = msg.toLowerCase().includes(\"expired\")\n ? \"QUOTE_EXPIRED\"\n : msg.toLowerCase().includes(\"key\")\n ? \"INVALID_KEY\"\n : \"UNKNOWN\";\n throw new KwesPayError(msg, code);\n }\n const txData = await gqlRequest(GQL_CREATE_TRANSACTION, {\n input: {\n quoteId: q.quoteId,\n payerWalletAddress: params.payerWalletAddress,\n },\n }, this.apiKey);\n const t = txData.createTransaction;\n if (!t.success) {\n const msg = t.message ?? \"Transaction creation failed\";\n const code = msg.toLowerCase().includes(\"expired\")\n ? \"QUOTE_EXPIRED\"\n : msg.toLowerCase().includes(\"already been used\")\n ? \"QUOTE_USED\"\n : msg.toLowerCase().includes(\"not found\")\n ? \"QUOTE_NOT_FOUND\"\n : msg.toLowerCase().includes(\"key\")\n ? \"INVALID_KEY\"\n : \"UNKNOWN\";\n throw new KwesPayError(msg, code);\n }\n return {\n paymentIdBytes32: t.paymentIdBytes32,\n backendSignature: t.backendSignature,\n tokenAddress: t.tokenAddress,\n amountBaseUnits: t.amountBaseUnits,\n chainId: t.chainId,\n expiresAt: t.expiresAt,\n transactionReference: t.transaction.transactionReference,\n transactionStatus: t.transaction.transactionStatus,\n network: params.network,\n vendorIdentifier: params.vendorIdentifier,\n };\n }\n async pay(params) {\n return new PaymentService(params.provider).pay(params);\n }\n async getTransactionStatus(transactionReference) {\n const data = await gqlRequest(GQL_TRANSACTION_STATUS, {\n transactionReference,\n });\n const r = data.getTransactionStatus;\n return {\n transactionReference: r.transactionReference,\n transactionStatus: r.transactionStatus,\n blockchainHash: r.blockchainHash,\n blockchainNetwork: r.blockchainNetwork,\n displayAmount: r.displayAmount,\n cryptoCurrency: r.cryptoCurrency,\n payerWalletAddress: r.payerWalletAddress,\n initiatedAt: r.initiatedAt,\n };\n }\n async pollTransactionStatus(transactionReference, options = {}) {\n const { onStatus, intervalMs = 4000, maxAttempts = 60 } = options;\n let attempts = 0;\n const terminal = [\n \"completed\",\n \"failed\",\n \"expired\",\n \"underpaid\",\n \"overpaid\",\n \"refunded\",\n ];\n return new Promise((resolve, reject) => {\n const id = setInterval(async () => {\n attempts++;\n try {\n const status = await this.getTransactionStatus(transactionReference);\n onStatus?.(status.transactionStatus);\n if (terminal.includes(status.transactionStatus)) {\n clearInterval(id);\n resolve(status);\n }\n else if (attempts >= maxAttempts) {\n clearInterval(id);\n reject(new KwesPayError(\"Status polling timed out\", \"UNKNOWN\"));\n }\n }\n catch (err) {\n if (attempts >= maxAttempts) {\n clearInterval(id);\n reject(err);\n }\n }\n }, intervalMs);\n });\n }\n}\n\nexport { KwesPayClient, KwesPayError };\n//# sourceMappingURL=index.js.map\n","import { KwesPayClient } from \"@kwespay/client\";\n\nclass PaymentService {\n constructor(apiKey, graphqlEndpoint) {\n this.apiKey = apiKey;\n this.graphqlEndpoint = graphqlEndpoint;\n this.client = null;\n\n console.log(\"[KwesPay] PaymentService initialized\", {\n apiKey: this.apiKey?.slice(0, 6) + \"...\",\n });\n }\n\n _initClient() {\n if (this.client) return;\n\n console.log(\"[KwesPay] Initializing SDK client...\");\n this.client = new KwesPayClient({ apiKey: this.apiKey });\n\n console.log(\"[KwesPay] SDK client ready\");\n }\n\n async validateAPIKey() {\n try {\n this._initClient();\n\n const result = await this.client.validateKey();\n\n if (!result.isValid) {\n console.error(\"[KwesPay] Invalid API key:\", result.error);\n return { valid: false, error: result.error ?? \"Invalid access key\" };\n }\n\n return {\n valid: true,\n keyId: result.keyId,\n vendorInfo: result.vendorInfo,\n allowedVendors: result.scope.allowedVendors ?? null,\n allowedNetworks: result.scope.allowedNetworks ?? null,\n allowedTokens: result.scope.allowedTokens ?? null,\n };\n } catch (err) {\n console.error(\"[KwesPay] API key validation error:\", err);\n return { valid: false, error: err.message };\n }\n }\n\n async getQuote(params) {\n this._initClient();\n\n console.log(\"[KwesPay] Requesting quote...\", params);\n\n const quote = await this.client.quote({\n vendorIdentifier: params.vendorId,\n fiatAmount: params.fiatAmount,\n fiatCurrency: params.fiatCurrency || \"USD\",\n cryptoCurrency: params.cryptoCurrency,\n network: params.network,\n payerWalletAddress: params.payerWalletAddress,\n });\n\n console.log(\"[KwesPay] Quote received:\", quote);\n\n return quote;\n }\n\n async createPayment({ payload, walletProvider, onStatusUpdate }) {\n this._initClient();\n\n console.log(\"[KwesPay] 💳 createPayment called\", {\n payloadKeys: payload ? Object.keys(payload) : null,\n amountBaseUnits: payload?.amountBaseUnits,\n contractAddress: payload?.contractAddress,\n paymentId: payload?.paymentId,\n vendorAddress: payload?.vendorAddress,\n expiresAt: payload?.expiresAt,\n providerType: walletProvider?.constructor?.name,\n });\n\n try {\n const result = await this.client.pay({\n provider: walletProvider,\n payload,\n onStatus: (status) => {\n console.log(\"[KwesPay] 📋 Payment status update:\", status);\n onStatusUpdate?.(status);\n },\n });\n\n console.log(\"[KwesPay] ✅ Payment completed:\", result);\n\n return {\n hash: result.txHash,\n blockNumber: result.blockNumber,\n transactionReference: result.transactionReference,\n paymentIdBytes32: result.paymentIdBytes32,\n };\n } catch (err) {\n console.error(\"[KwesPay] ❌ createPayment error:\", {\n message: err?.message,\n code: err?.code,\n reason: err?.reason,\n data: err?.data,\n transaction: err?.transaction\n ? {\n to: err.transaction?.to,\n from: err.transaction?.from,\n value: err.transaction?.value?.toString(),\n gasLimit: err.transaction?.gasLimit?.toString(),\n data: err.transaction?.data,\n }\n : undefined,\n receipt: err?.receipt\n ? {\n status: err.receipt?.status,\n gasUsed: err.receipt?.gasUsed?.toString(),\n blockNumber: err.receipt?.blockNumber,\n transactionHash: err.receipt?.transactionHash,\n }\n : undefined,\n stack: err?.stack,\n raw: err,\n });\n throw err;\n }\n }\n\n async getTransactionStatus(transactionReference) {\n this._initClient();\n\n console.log(\"[KwesPay] Fetching transaction status:\", transactionReference);\n\n const status = await this.client.getTransactionStatus(transactionReference);\n\n console.log(\"[KwesPay] Transaction status:\", status);\n\n return status;\n }\n\n async pollTransactionStatus(\n transactionReference,\n { onStatus, intervalMs = 4000, maxAttempts = 60 } = {}\n ) {\n this._initClient();\n\n console.log(\"[KwesPay] Starting polling...\", {\n transactionReference,\n intervalMs,\n });\n\n let attempts = 0;\n\n return new Promise((resolve, reject) => {\n const id = setInterval(async () => {\n attempts++;\n\n try {\n const status = await this.getTransactionStatus(transactionReference);\n\n console.log(\n `[KwesPay] Poll attempt ${attempts}:`,\n status.transactionStatus\n );\n\n onStatus?.(status.transactionStatus);\n\n const terminal = [\n \"completed\",\n \"failed\",\n \"expired\",\n \"underpaid\",\n \"overpaid\",\n \"refunded\",\n ];\n\n if (terminal.includes(status.transactionStatus)) {\n console.log(\n \"[KwesPay] Final status reached:\",\n status.transactionStatus\n );\n clearInterval(id);\n resolve(status);\n } else if (attempts >= maxAttempts) {\n console.error(\"[KwesPay] Polling timeout\");\n clearInterval(id);\n reject(new Error(\"Transaction status polling timed out.\"));\n }\n } catch (err) {\n console.error(\"[KwesPay] Polling error:\", err);\n\n if (attempts >= maxAttempts) {\n clearInterval(id);\n reject(err);\n }\n }\n }, intervalMs);\n });\n }\n}\n\nexport default PaymentService;\n","export const WIDGET_STYLES = `\n @import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap');\n\n * { margin: 0; padding: 0; box-sizing: border-box; }\n\n :root {\n --kp-bg: #0a0a0f;\n --kp-surface: #0f0f18;\n --kp-surface-2: #16161f;\n --kp-border: rgba(255,255,255,0.06);\n --kp-border-active: rgba(99,102,241,0.5);\n --kp-accent: #6366f1;\n --kp-accent-dim: rgba(99,102,241,0.1);\n --kp-accent-glow: rgba(99,102,241,0.25);\n --kp-green: #10b981;\n --kp-red: #f43f5e;\n --kp-text: #f1f0ff;\n --kp-muted: #6b6a80;\n --kp-mono: 'Inter', monospace;\n --kp-sans: 'Inter', sans-serif;\n }\n\n body.kwespay-open {\n overflow: hidden;\n touch-action: none;\n }\n\n .kwespay-overlay {\n position: fixed;\n top: 0; left: 0; right: 0; bottom: 0;\n background: rgba(0,0,0,0.75);\n backdrop-filter: blur(8px) saturate(1.2);\n display: none;\n align-items: center;\n justify-content: center;\n z-index: 999999;\n padding: 20px;\n font-family: var(--kp-sans);\n }\n\n .kwespay-overlay.open { display: flex; }\n\n .kwespay-close-btn {\n position: absolute;\n top: 20px; right: 20px;\n background: rgba(255,255,255,0.06);\n border: 1px solid var(--kp-border);\n color: var(--kp-muted);\n width: 34px; height: 34px;\n border-radius: 8px;\n cursor: pointer;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 18px;\n transition: all 0.15s;\n z-index: 1000000;\n }\n\n .kwespay-close-btn:hover {\n background: rgba(255,255,255,0.1);\n color: var(--kp-text);\n border-color: var(--kp-border-active);\n }\n\n .material-symbols-outlined {\n font-variation-settings: \"FILL\" 0, \"wght\" 400, \"GRAD\" 0, \"opsz\" 24;\n }\n\n .kwespay-container {\n position: relative;\n display: flex;\n height: 640px;\n max-height: 92vh;\n min-height: 520px;\n width: 100%;\n max-width: 390px;\n flex-direction: column;\n background: var(--kp-bg);\n border: 1px solid var(--kp-border);\n box-shadow:\n 0 0 0 1px rgba(255,255,255,0.03),\n 0 32px 64px rgba(0,0,0,0.9),\n 0 0 80px rgba(99,102,241,0.06);\n overflow: hidden;\n border-radius: 20px;\n font-family: var(--kp-sans);\n animation: kpSlideUp 0.3s cubic-bezier(0.16, 1, 0.3, 1) forwards;\n }\n\n @keyframes kpSlideUp {\n from { opacity: 0; transform: translateY(20px) scale(0.98); }\n to { opacity: 1; transform: translateY(0) scale(1); }\n }\n\n .step {\n position: absolute;\n top: 0; left: 0; right: 0; bottom: 0;\n display: none;\n opacity: 0;\n }\n\n .step.active {\n display: flex;\n flex-direction: column;\n overflow: hidden;\n animation: kpFadeIn 0.2s ease forwards;\n }\n\n .step.exiting {\n animation: kpFadeOut 0.15s ease forwards;\n }\n\n @keyframes kpFadeIn {\n from { opacity: 0; transform: translateY(6px); }\n to { opacity: 1; transform: translateY(0); }\n }\n\n @keyframes kpFadeOut {\n from { opacity: 1; }\n to { opacity: 0; }\n }\n\n .kp-topbar {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 16px 20px;\n border-bottom: 1px solid var(--kp-border);\n flex-shrink: 0;\n }\n\n .kp-topbar-brand {\n display: flex;\n align-items: center;\n gap: 8px;\n }\n\n .kp-back-btn {\n display: flex;\n align-items: center;\n justify-content: center;\n width: 28px;\n height: 28px;\n border-radius: 7px;\n background: rgba(255,255,255,0.04);\n border: 1px solid var(--kp-border);\n color: var(--kp-muted);\n cursor: pointer;\n transition: all 0.15s;\n flex-shrink: 0;\n margin-right: 4px;\n }\n\n .kp-back-btn:hover {\n background: rgba(255,255,255,0.08);\n color: var(--kp-text);\n border-color: rgba(255,255,255,0.12);\n }\n\n .kp-back-btn .material-symbols-outlined { font-size: 16px; }\n\n .kp-topbar-dot {\n width: 7px; height: 7px;\n border-radius: 50%;\n background: var(--kp-accent);\n box-shadow: 0 0 8px var(--kp-accent-glow);\n animation: kpPulse 2s ease infinite;\n }\n\n @keyframes kpPulse {\n 0%, 100% { opacity: 1; }\n 50% { opacity: 0.5; }\n }\n\n .kp-topbar-name {\n font-size: 13px;\n font-weight: 600;\n color: var(--kp-text);\n letter-spacing: -0.01em;\n }\n\n .kp-topbar-secure {\n display: flex;\n align-items: center;\n gap: 5px;\n font-family: var(--kp-mono);\n font-size: 10px;\n color: var(--kp-muted);\n letter-spacing: 0.04em;\n font-weight: 500;\n }\n\n .kp-topbar-secure .material-symbols-outlined {\n font-size: 13px;\n color: var(--kp-green);\n }\n\n .kp-amount-block {\n padding: 20px 20px 16px;\n border-bottom: 1px solid var(--kp-border);\n flex-shrink: 0;\n }\n\n .kp-amount-label {\n font-family: var(--kp-mono);\n font-size: 10px;\n color: var(--kp-muted);\n letter-spacing: 0.08em;\n text-transform: uppercase;\n margin-bottom: 6px;\n font-weight: 500;\n }\n\n .kp-amount-value {\n font-size: 32px;\n font-weight: 700;\n color: var(--kp-text);\n letter-spacing: -0.03em;\n line-height: 1;\n }\n\n .kp-amount-hint {\n font-family: var(--kp-mono);\n font-size: 11px;\n color: var(--kp-muted);\n margin-top: 6px;\n min-height: 16px;\n font-weight: 400;\n }\n\n .kp-amount-crypto {\n font-family: var(--kp-mono);\n font-size: 12px;\n color: var(--kp-accent);\n margin-top: 6px;\n min-height: 16px;\n transition: opacity 0.2s;\n font-weight: 500;\n }\n\n .kp-amount-crypto.loading { opacity: 0.4; }\n\n .progress-section {\n padding: 14px 20px 12px;\n border-bottom: 1px solid var(--kp-border);\n flex-shrink: 0;\n }\n\n .progress-info {\n display: flex;\n align-items: center;\n justify-content: space-between;\n margin-bottom: 8px;\n }\n\n .progress-step {\n font-family: var(--kp-mono);\n font-size: 10px;\n color: var(--kp-muted);\n letter-spacing: 0.06em;\n font-weight: 500;\n }\n\n .progress-label {\n font-size: 11px;\n font-weight: 600;\n color: var(--kp-accent);\n letter-spacing: 0.02em;\n text-transform: uppercase;\n }\n\n .progress-bars { display: flex; width: 100%; gap: 5px; }\n\n .progress-bar {\n height: 2px;\n flex: 1;\n border-radius: 999px;\n background: var(--kp-surface-2);\n transition: background 0.3s ease;\n }\n\n .progress-bar.active {\n background: var(--kp-accent);\n box-shadow: 0 0 8px var(--kp-accent-glow);\n }\n\n .section-hint {\n font-size: 12px;\n color: var(--kp-muted);\n margin-bottom: 14px;\n line-height: 1.6;\n font-weight: 400;\n }\n\n .content-scroll {\n flex: 1;\n overflow-y: auto;\n overflow-x: hidden;\n padding: 16px 20px;\n -webkit-overflow-scrolling: touch;\n }\n\n .content-scroll::-webkit-scrollbar { width: 3px; }\n .content-scroll::-webkit-scrollbar-track { background: transparent; }\n .content-scroll::-webkit-scrollbar-thumb {\n background: rgba(99,102,241,0.2);\n border-radius: 10px;\n }\n\n .item-list {\n display: flex;\n flex-direction: column;\n gap: 6px;\n margin-bottom: 6px;\n }\n\n .kp-testnet-section { margin-top: 20px; }\n\n .kp-section-divider {\n font-family: var(--kp-mono);\n font-size: 10px;\n color: var(--kp-muted);\n letter-spacing: 0.08em;\n text-transform: uppercase;\n margin-bottom: 10px;\n padding-bottom: 8px;\n border-bottom: 1px solid var(--kp-border);\n font-weight: 500;\n }\n\n .list-item {\n display: flex;\n align-items: center;\n gap: 12px;\n background: var(--kp-surface);\n padding: 12px 14px;\n border-radius: 12px;\n border: 1px solid var(--kp-border);\n cursor: pointer;\n transition: all 0.15s;\n }\n\n .list-item:hover {\n border-color: var(--kp-border-active);\n background: var(--kp-accent-dim);\n transform: translateX(2px);\n }\n\n .item-icon {\n width: 36px; height: 36px;\n border-radius: 10px;\n display: flex; align-items: center; justify-content: center;\n background: var(--kp-surface-2);\n overflow: hidden;\n border: 1px solid var(--kp-border);\n flex-shrink: 0;\n }\n\n .item-icon img { width: 22px; height: 22px; object-fit: contain; }\n .item-info { display: flex; flex-direction: column; flex: 1; }\n .item-name-row { display: flex; align-items: center; gap: 7px; }\n\n .item-name {\n font-size: 13px;\n font-weight: 600;\n color: var(--kp-text);\n }\n\n .item-badge {\n padding: 1px 6px;\n border-radius: 4px;\n font-size: 9px;\n font-weight: 600;\n font-family: var(--kp-mono);\n letter-spacing: 0.04em;\n text-transform: uppercase;\n }\n\n .badge-testnet {\n background: rgba(251,146,60,0.08);\n color: #fb923c;\n border: 1px solid rgba(251,146,60,0.2);\n }\n\n .item-desc {\n font-family: var(--kp-mono);\n font-size: 10px;\n color: var(--kp-muted);\n margin-top: 3px;\n font-weight: 400;\n }\n\n .item-chevron { color: var(--kp-muted); font-size: 16px; }\n\n .token-item {\n display: flex;\n align-items: center;\n gap: 12px;\n padding: 13px 14px;\n cursor: pointer;\n transition: all 0.15s;\n border: 1px solid var(--kp-border);\n border-radius: 12px;\n margin-bottom: 6px;\n background: var(--kp-surface);\n position: relative;\n overflow: hidden;\n }\n\n .token-item:last-child { margin-bottom: 0; }\n .token-item:hover { border-color: var(--kp-border-active); background: var(--kp-accent-dim); }\n .token-item.selected { background: var(--kp-accent-dim); border-color: var(--kp-accent); }\n .token-item.selected::after {\n content: '';\n position: absolute; inset: 0;\n background: linear-gradient(90deg, rgba(99,102,241,0.08) 0%, transparent 100%);\n pointer-events: none;\n }\n .token-item.selected .token-symbol { color: var(--kp-accent); }\n\n .token-left { display: flex; align-items: center; gap: 12px; flex: 1; }\n\n .token-icon {\n width: 36px; height: 36px;\n border-radius: 10px;\n background: var(--kp-surface-2);\n border: 1px solid var(--kp-border);\n overflow: hidden;\n flex-shrink: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n }\n\n .token-icon img { width: 22px; height: 22px; object-fit: contain; }\n .token-info { display: flex; flex-direction: column; justify-content: center; }\n\n .token-symbol {\n color: var(--kp-text);\n font-size: 13px;\n font-weight: 600;\n line-height: 1;\n margin-bottom: 3px;\n transition: color 0.15s;\n }\n\n .token-name {\n font-family: var(--kp-mono);\n color: var(--kp-muted);\n font-size: 10px;\n line-height: 1;\n font-weight: 400;\n }\n\n .token-chevron { color: var(--kp-muted); font-size: 16px; flex-shrink: 0; }\n #kwespay-tokenList { display: flex; flex-direction: column; }\n\n .bottom-action {\n padding: 12px 20px 16px;\n background: var(--kp-bg);\n border-top: 1px solid var(--kp-border);\n flex-shrink: 0;\n }\n\n .action-btn {\n width: 100%;\n padding: 13px;\n border-radius: 12px;\n background: var(--kp-accent);\n color: white;\n font-weight: 600;\n font-size: 14px;\n border: none;\n cursor: pointer;\n transition: all 0.15s;\n font-family: var(--kp-sans);\n letter-spacing: -0.01em;\n position: relative;\n overflow: hidden;\n }\n\n .action-btn::before {\n content: '';\n position: absolute; inset: 0;\n background: linear-gradient(135deg, rgba(255,255,255,0.1) 0%, transparent 60%);\n pointer-events: none;\n }\n\n .action-btn:hover { background: #5254cc; box-shadow: 0 0 20px var(--kp-accent-glow); }\n .action-btn:active { transform: scale(0.99); }\n\n .action-btn.secondary {\n background: var(--kp-surface);\n border: 1px solid var(--kp-border);\n color: var(--kp-muted);\n }\n\n .action-btn.secondary::before { display: none; }\n .action-btn.secondary:hover {\n background: var(--kp-surface-2);\n border-color: var(--kp-border-active);\n color: var(--kp-text);\n box-shadow: none;\n }\n\n .action-btn:disabled { opacity: 0.3; cursor: not-allowed; box-shadow: none; }\n\n .kp-footer {\n padding: 10px 20px 12px;\n background: var(--kp-bg);\n border-top: 1px solid var(--kp-border);\n display: flex;\n align-items: center;\n justify-content: center;\n gap: 6px;\n flex-shrink: 0;\n }\n\n .kp-footer-lock { font-size: 11px; color: var(--kp-green); }\n\n .kp-footer-text {\n font-family: var(--kp-mono);\n font-size: 10px;\n color: var(--kp-muted);\n letter-spacing: 0.02em;\n font-weight: 400;\n }\n\n .kp-footer-text span { color: var(--kp-text); font-weight: 500; }\n\n .loading-container {\n display: flex;\n flex-direction: column;\n align-items: center;\n justify-content: center;\n padding: 24px 20px;\n flex: 1;\n }\n\n .spinner-wrapper {\n position: relative;\n width: 64px; height: 64px;\n display: flex; align-items: center; justify-content: center;\n margin-bottom: 20px;\n }\n\n .spinner-ring {\n position: absolute;\n width: 64px; height: 64px;\n border-radius: 50%;\n border: 2px solid transparent;\n border-top-color: var(--kp-accent);\n animation: kpSpin 0.85s linear infinite;\n }\n\n .spinner-ring-2 {\n position: absolute;\n width: 48px; height: 48px;\n border-radius: 50%;\n border: 2px solid transparent;\n border-bottom-color: rgba(99,102,241,0.3);\n animation: kpSpin 1.2s linear infinite reverse;\n }\n\n @keyframes kpSpin { to { transform: rotate(360deg); } }\n\n .spinner-icon {\n z-index: 10;\n width: 32px; height: 32px;\n background: var(--kp-accent-dim);\n border-radius: 8px;\n display: flex; align-items: center; justify-content: center;\n border: 1px solid rgba(99,102,241,0.2);\n }\n\n .spinner-icon .material-symbols-outlined { font-size: 18px; color: var(--kp-accent); }\n\n .headline {\n color: var(--kp-text);\n font-size: 18px;\n font-weight: 700;\n line-height: 1.3;\n text-align: center;\n margin-bottom: 8px;\n letter-spacing: -0.02em;\n }\n\n .body-text {\n color: var(--kp-muted);\n font-size: 13px;\n line-height: 1.6;\n text-align: center;\n padding: 0 8px;\n margin-bottom: 8px;\n font-weight: 400;\n }\n\n .success-icon {\n width: 64px; height: 64px;\n border-radius: 16px;\n background: rgba(16,185,129,0.1);\n border: 1px solid rgba(16,185,129,0.2);\n display: flex; align-items: center; justify-content: center;\n margin-bottom: 16px;\n }\n\n .success-icon .material-symbols-outlined { font-size: 36px; color: var(--kp-green); }\n\n .error-icon {\n width: 64px; height: 64px;\n border-radius: 16px;\n background: rgba(244,63,94,0.1);\n border: 1px solid rgba(244,63,94,0.2);\n display: flex; align-items: center; justify-content: center;\n margin-bottom: 16px;\n }\n\n .error-icon .material-symbols-outlined { font-size: 36px; color: var(--kp-red); }\n\n .network-status { padding: 14px 20px 0; }\n\n .status-card {\n display: flex;\n align-items: center;\n gap: 10px;\n background: var(--kp-accent-dim);\n border: 1px solid rgba(99,102,241,0.2);\n border-radius: 10px;\n padding: 10px 14px;\n }\n\n .status-icon {\n width: 24px; height: 24px;\n border-radius: 6px;\n background: var(--kp-surface-2);\n overflow: hidden; flex-shrink: 0;\n display: flex; align-items: center; justify-content: center;\n }\n\n .status-icon img { width: 16px; height: 16px; object-fit: contain; }\n .status-text { color: var(--kp-accent); font-size: 12px; font-weight: 600; flex: 1; }\n\n .kp-review-body { flex: 1; overflow-y: auto; padding: 16px 20px; }\n .kp-review-body::-webkit-scrollbar { width: 3px; }\n .kp-review-body::-webkit-scrollbar-thumb { background: rgba(99,102,241,0.2); border-radius: 10px; }\n\n .kp-review-amount {\n background: var(--kp-surface);\n border: 1px solid var(--kp-border);\n border-radius: 14px;\n padding: 18px;\n margin-bottom: 12px;\n text-align: center;\n }\n\n .kp-review-fiat {\n font-size: 28px;\n font-weight: 700;\n color: var(--kp-text);\n letter-spacing: -0.03em;\n line-height: 1;\n margin-bottom: 6px;\n }\n\n .kp-review-crypto-line {\n font-family: var(--kp-mono);\n font-size: 13px;\n color: var(--kp-accent);\n font-weight: 500;\n }\n\n .kp-review-crypto-line.loading { opacity: 0.4; }\n\n .kp-detail-block {\n background: var(--kp-surface);\n border: 1px solid var(--kp-border);\n border-radius: 14px;\n overflow: hidden;\n margin-bottom: 10px;\n }\n\n .kp-detail-row {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 11px 16px;\n border-bottom: 1px solid var(--kp-border);\n }\n\n .kp-detail-row:last-child { border-bottom: none; }\n\n .kp-detail-key {\n font-family: var(--kp-mono);\n font-size: 11px;\n color: var(--kp-muted);\n letter-spacing: 0.02em;\n font-weight: 400;\n }\n\n .kp-detail-val {\n font-family: var(--kp-mono);\n font-size: 11px;\n color: var(--kp-text);\n font-weight: 500;\n text-align: right;\n }\n\n .kp-detail-val.accent { color: var(--kp-accent); }\n .kp-detail-val.green { color: var(--kp-green); }\n\n .kp-fee-block {\n background: rgba(16,185,129,0.04);\n border: 1px solid rgba(16,185,129,0.1);\n border-radius: 14px;\n overflow: hidden;\n margin-bottom: 10px;\n }\n\n .kp-fee-block .kp-detail-row { border-bottom-color: rgba(16,185,129,0.08); }\n\n .kp-fee-header {\n padding: 10px 16px;\n background: rgba(16,185,129,0.06);\n border-bottom: 1px solid rgba(16,185,129,0.1);\n display: flex; align-items: center; gap: 6px;\n }\n\n .kp-fee-header-text {\n font-family: var(--kp-mono);\n font-size: 10px;\n color: var(--kp-green);\n letter-spacing: 0.06em;\n text-transform: uppercase;\n font-weight: 500;\n }\n\n .kp-fee-header .material-symbols-outlined { font-size: 13px; color: var(--kp-green); }\n\n .tx-details {\n width: 100%;\n background: var(--kp-surface);\n border: 1px solid var(--kp-border);\n border-radius: 14px;\n overflow: hidden;\n margin-top: 16px;\n }\n\n .tx-row {\n display: flex;\n justify-content: space-between;\n align-items: center;\n padding: 10px 16px;\n border-bottom: 1px solid var(--kp-border);\n }\n\n .tx-row:last-child { border-bottom: none; }\n\n .tx-label { font-family: var(--kp-mono); color: var(--kp-muted); font-size: 10px; letter-spacing: 0.02em; font-weight: 400; }\n .tx-value { color: var(--kp-text); font-size: 11px; font-weight: 500; font-family: var(--kp-mono); }\n .tx-hash-row { display: flex; align-items: center; gap: 8px; }\n\n .explorer-link {\n display: flex; align-items: center; justify-content: center;\n width: 24px; height: 24px;\n background: var(--kp-accent-dim);\n border: 1px solid rgba(99,102,241,0.2);\n border-radius: 6px;\n cursor: pointer;\n transition: all 0.15s;\n flex-shrink: 0;\n }\n\n .explorer-link:hover { background: rgba(99,102,241,0.2); }\n .explorer-link .material-symbols-outlined { font-size: 12px; color: var(--kp-accent); }\n\n .mobile-instruction {\n background: var(--kp-accent-dim);\n border: 1px solid rgba(99,102,241,0.2);\n border-radius: 10px;\n padding: 12px;\n margin: 12px 0 0;\n display: flex;\n align-items: flex-start;\n gap: 10px;\n }\n\n .mobile-instruction-icon { color: var(--kp-accent); font-size: 18px; flex-shrink: 0; margin-top: 1px; }\n .mobile-instruction-text { flex: 1; }\n .mobile-instruction-title { color: var(--kp-text); font-size: 12px; font-weight: 600; margin-bottom: 3px; }\n .mobile-instruction-desc { color: var(--kp-muted); font-size: 11px; line-height: 1.5; font-weight: 400; }\n\n .kp-quote-timer {\n display: flex;\n align-items: center;\n gap: 5px;\n font-family: var(--kp-mono);\n font-size: 10px;\n color: var(--kp-muted);\n margin-top: 6px;\n font-weight: 400;\n }\n\n .kp-quote-timer .material-symbols-outlined { font-size: 12px; }\n .kp-quote-timer.urgent { color: #fb923c; }\n .kp-quote-timer.expired { color: var(--kp-red); }\n\n @media (max-width: 480px) {\n .kwespay-overlay {\n padding: 0;\n align-items: flex-end;\n background: rgba(0,0,0,0.6);\n }\n\n .kwespay-close-btn { top: 14px; right: 14px; }\n\n .kwespay-container {\n width: 100vw;\n max-width: 100vw;\n height: calc(100vh - 120px);\n max-height: calc(100vh - 120px);\n min-height: 60vh;\n border-radius: 20px 20px 0 0;\n animation: kpSheetUp 0.32s cubic-bezier(0.16, 1, 0.3, 1) forwards;\n border-bottom: none;\n }\n\n .kwespay-container.closing {\n animation: kpSheetDown 0.28s ease forwards;\n }\n\n .kwespay-container::before {\n content: '';\n display: block;\n position: absolute;\n top: 8px; left: 50%;\n transform: translateX(-50%);\n width: 28px; height: 3px;\n border-radius: 2px;\n background: rgba(255,255,255,0.12);\n z-index: 10;\n }\n }\n\n\n.kp-mobile-connect-status {\n display: flex;\n align-items: center;\n gap: 12px;\n background: var(--kp-accent-dim);\n border: 1px solid rgba(99,102,241,0.2);\n border-radius: 12px;\n padding: 14px 16px;\n margin-bottom: 4px;\n}\n\n.kp-mobile-status-icon {\n width: 28px; height: 28px;\n display: flex; align-items: center; justify-content: center;\n flex-shrink: 0;\n}\n\n.kp-mobile-status-text { flex: 1; }\n\n.kp-mobile-status-title {\n font-size: 13px;\n font-weight: 600;\n color: var(--kp-text);\n margin-bottom: 2px;\n}\n\n.kp-mobile-status-desc {\n font-family: var(--kp-mono);\n font-size: 11px;\n color: var(--kp-muted);\n}\n\n.kp-wallet-option:active {\n transform: scale(0.98);\n background: var(--kp-accent-dim);\n border-color: var(--kp-border-active);\n}\n\n\n @keyframes kpSheetUp {\n from { transform: translateY(100%); opacity: 0.8; }\n to { transform: translateY(0); opacity: 1; }\n }\n\n @keyframes kpSheetDown {\n from { transform: translateY(0); opacity: 1; }\n to { transform: translateY(100%); opacity: 0; }\n }\n`;\n","export function getStepTemplates(fiatAmount, currency) {\n return `\n <div class=\"step active\" id=\"kwespay-step0\">\n <div class=\"kp-topbar\">\n <div class=\"kp-topbar-brand\">\n <div class=\"kp-topbar-dot\"></div>\n <span class=\"kp-topbar-name\">KwesPay Checkout</span>\n </div>\n \n </div>\n <div class=\"loading-container\" style=\"flex:1\">\n <div class=\"spinner-wrapper\">\n <div class=\"spinner-ring\"></div>\n <div class=\"spinner-ring-2\"></div>\n <div class=\"spinner-icon\">\n <span class=\"material-symbols-outlined\">shield_lock</span>\n </div>\n </div>\n <h2 class=\"headline\">Initializing</h2>\n <p class=\"body-text\">Establishing a secure payment session.</p>\n </div>\n <div class=\"kp-footer\">\n <span class=\"material-symbols-outlined kp-footer-lock\" style=\"font-size:12px\">lock</span>\n <span class=\"kp-footer-text\">Powered by · <span>KwesPay</span></span>\n </div>\n </div>\n\n <div class=\"step\" id=\"kwespay-step0-invalid\">\n <div class=\"kp-topbar\">\n <div class=\"kp-topbar-brand\">\n <div class=\"kp-topbar-dot\" style=\"background:var(--kp-red);box-shadow:none;animation:none\"></div>\n <span class=\"kp-topbar-name\">KwesPay Checkout</span>\n </div>\n </div>\n <div class=\"loading-container\" style=\"flex:1\">\n <div class=\"error-icon\">\n <span class=\"material-symbols-outlined\">wifi_off</span>\n </div>\n <h2 class=\"headline\">Payment Unavailable</h2>\n <p class=\"body-text\">We couldn't start your payment session. Please try again or contact the store for help.</p>\n </div>\n <div class=\"bottom-action\">\n <button class=\"action-btn\" id=\"kwespay-retryInitBtn\">Try Again</button>\n </div>\n </div>\n\n <div class=\"step\" id=\"kwespay-step1\">\n <div class=\"kp-topbar\">\n <div class=\"kp-topbar-brand\">\n <div class=\"kp-topbar-dot\"></div>\n <span class=\"kp-topbar-name\">KwesPay Checkout</span>\n </div>\n \n </div>\n <div class=\"kp-amount-block\">\n <div class=\"kp-amount-label\">Total due</div>\n <div class=\"kp-amount-value\" id=\"kwespay-paymentAmount\">${fiatAmount} ${currency}</div>\n <div class=\"kp-amount-hint\">Select a network to continue</div>\n </div>\n <div class=\"progress-section\">\n <div class=\"progress-info\">\n <span class=\"progress-step\">01 / 03</span>\n <span class=\"progress-label\">Select Network</span>\n </div>\n <div class=\"progress-bars\">\n <div class=\"progress-bar active\"></div>\n <div class=\"progress-bar\"></div>\n <div class=\"progress-bar\"></div>\n </div>\n </div>\n <div class=\"content-scroll\">\n <p class=\"section-hint\">Choose the blockchain network you want to pay on.</p>\n <div class=\"item-list\" id=\"kwespay-mainnetList\"></div>\n <div class=\"kp-testnet-section\" id=\"kwespay-testnetSection\" style=\"display:none\">\n <div class=\"kp-section-divider\">Testnets</div>\n <div class=\"item-list\" id=\"kwespay-testnetList\"></div>\n </div>\n </div>\n </div>\n\n <div class=\"step\" id=\"kwespay-step2\">\n <div class=\"kp-topbar\">\n <div class=\"kp-topbar-brand\">\n <button class=\"kp-back-btn\" id=\"kwespay-back2\">\n <span class=\"material-symbols-outlined\">arrow_back</span>\n </button>\n <div class=\"kp-topbar-dot\"></div>\n <span class=\"kp-topbar-name\">KwesPay Checkout</span>\n </div>\n \n </div>\n <div class=\"kp-amount-block\">\n <div class=\"kp-amount-label\">Total due</div>\n <div class=\"kp-amount-value\">${fiatAmount} ${currency}</div>\n <div class=\"kp-amount-hint\">Select a token — exact amount shown at review</div>\n </div>\n <div class=\"progress-section\">\n <div class=\"progress-info\">\n <span class=\"progress-step\">02 / 03</span>\n <span class=\"progress-label\">Select Token</span>\n </div>\n <div class=\"progress-bars\">\n <div class=\"progress-bar active\"></div>\n <div class=\"progress-bar active\"></div>\n <div class=\"progress-bar\"></div>\n </div>\n </div>\n <div class=\"network-status\">\n <div class=\"status-card\">\n <div class=\"status-icon\" id=\"kwespay-selectedNetworkIcon\"></div>\n <p class=\"status-text\" id=\"kwespay-selectedNetworkName\">—</p>\n <span class=\"material-symbols-outlined\" style=\"color:var(--kp-accent);font-size:15px\">check_circle</span>\n </div>\n </div>\n <div class=\"content-scroll\" style=\"padding-top:10px\">\n <p class=\"section-hint\">Select the token you want to pay with. The exact crypto amount will be confirmed on the next screen.</p>\n <div id=\"kwespay-tokenList\"></div>\n </div>\n <div class=\"bottom-action\">\n <button class=\"action-btn\" id=\"kwespay-continueToWalletConnect\" disabled>Connect Wallet</button>\n </div>\n </div>\n\n <div class=\"step\" id=\"kwespay-step3\">\n <div class=\"kp-topbar\">\n <div class=\"kp-topbar-brand\">\n <button class=\"kp-back-btn\" id=\"kwespay-back3\">\n <span class=\"material-symbols-outlined\">arrow_back</span>\n </button>\n <div class=\"kp-topbar-dot\"></div>\n <span class=\"kp-topbar-name\">KwesPay Checkout</span>\n </div>\n \n </div>\n <div class=\"progress-section\">\n <div class=\"progress-info\">\n <span class=\"progress-step\">03 / 03</span>\n <span class=\"progress-label\">Review & Pay</span>\n </div>\n <div class=\"progress-bars\">\n <div class=\"progress-bar active\"></div>\n <div class=\"progress-bar active\"></div>\n <div class=\"progress-bar active\"></div>\n </div>\n </div>\n <div class=\"kp-review-body\">\n <div class=\"kp-review-amount\">\n <div class=\"kp-review-fiat\" id=\"kwespay-reviewFiatAmount\">${fiatAmount} ${currency}</div>\n <div class=\"kp-review-crypto-line\" id=\"kwespay-reviewCryptoLine\">Fetching live quote…</div>\n <div class=\"kp-quote-timer\" id=\"kwespay-quoteTimer\" style=\"display:none;justify-content:center\">\n <span class=\"material-symbols-outlined\">schedule</span>\n <span id=\"kwespay-quoteTimerText\">—</span>\n </div>\n </div>\n\n <div class=\"kp-detail-block\">\n <div class=\"kp-detail-row\">\n <span class=\"kp-detail-key\">wallet</span>\n <span class=\"kp-detail-val\" id=\"kwespay-connectedWalletAddress\">—</span>\n </div>\n <div class=\"kp-detail-row\">\n <span class=\"kp-detail-key\">network</span>\n <span class=\"kp-detail-val\" id=\"kwespay-summaryNetwork\">—</span>\n </div>\n <div class=\"kp-detail-row\">\n <span class=\"kp-detail-key\">token</span>\n <span class=\"kp-detail-val accent\" id=\"kwespay-summaryToken\">—</span>\n </div>\n </div>\n\n <div class=\"kp-fee-block\">\n <div class=\"kp-fee-header\">\n <span class=\"material-symbols-outlined\">receipt_long</span>\n <span class=\"kp-fee-header-text\">Fee Breakdown</span>\n </div>\n <div class=\"kp-detail-row\">\n <span class=\"kp-detail-key\">payment amount</span>\n <span class=\"kp-detail-val\" id=\"kwespay-feePaymentAmount\">—</span>\n </div>\n <div class=\"kp-detail-row\">\n <span class=\"kp-detail-key\">platform fee (0.25%)</span>\n <span class=\"kp-detail-val\" id=\"kwespay-feePlatformFee\">—</span>\n </div>\n <div class=\"kp-detail-row\">\n <span class=\"kp-detail-key\">vendor receives</span>\n <span class=\"kp-detail-val green\" id=\"kwespay-feeVendorAmount\">—</span>\n </div>\n </div>\n </div>\n <div class=\"bottom-action\">\n <button class=\"action-btn\" id=\"kwespay-proceedToPayment\">Pay Now</button>\n <button class=\"action-btn secondary\" style=\"margin-top:8px\" id=\"kwespay-cancelConnection\">Cancel</button>\n </div>\n </div>\n\n <div class=\"step\" id=\"kwespay-step4\">\n <div class=\"kp-topbar\">\n <div class=\"kp-topbar-brand\">\n <div class=\"kp-topbar-dot\"></div>\n <span class=\"kp-topbar-name\">KwesPay Checkout</span>\n </div>\n </div>\n <div class=\"loading-container\" style=\"flex:1\">\n <div class=\"spinner-wrapper\">\n <div class=\"spinner-ring\"></div>\n <div class=\"spinner-ring-2\"></div>\n <div class=\"spinner-icon\">\n <span class=\"material-symbols-outlined\">payments</span>\n </div>\n </div>\n <h2 class=\"headline\" id=\"kwespay-processingTitle\">Processing Payment</h2>\n <p class=\"body-text\" id=\"kwespay-processingText\">Waiting for wallet confirmation.</p>\n <div class=\"mobile-instruction\" id=\"kwespay-mobileTransactionInstruction\" style=\"display:none\">\n <span class=\"material-symbols-outlined mobile-instruction-icon\">phone_iphone</span>\n <div class=\"mobile-instruction-text\">\n <div class=\"mobile-instruction-title\">Check Your Wallet App</div>\n <div class=\"mobile-instruction-desc\">A confirmation request has been sent to your wallet. Tap Approve to complete the payment.</div>\n </div>\n </div>\n </div>\n </div>\n\n <div class=\"step\" id=\"kwespay-step5\">\n <div class=\"kp-topbar\">\n <div class=\"kp-topbar-brand\">\n <div class=\"kp-topbar-dot\" style=\"background:var(--kp-green);box-shadow:0 0 8px rgba(16,185,129,0.4);animation:none\"></div>\n <span class=\"kp-topbar-name\">Payment Complete</span>\n </div>\n <div class=\"kp-topbar-secure\">\n <span class=\"material-symbols-outlined\" style=\"color:var(--kp-green)\">check_circle</span>\n CONFIRMED\n </div>\n </div>\n <div class=\"loading-container\" style=\"flex:1\">\n <div class=\"success-icon\">\n <span class=\"material-symbols-outlined\">check_circle</span>\n </div>\n <h2 class=\"headline\">Payment Successful</h2>\n <p class=\"body-text\">Your transaction has been confirmed on-chain.</p>\n <div class=\"tx-details\">\n <div class=\"tx-row\">\n <span class=\"tx-label\">tx hash</span>\n <div class=\"tx-hash-row\">\n <span class=\"tx-value\" id=\"kwespay-txHash\">—</span>\n <a class=\"explorer-link\" id=\"kwespay-explorerLink\" target=\"_blank\" rel=\"noopener noreferrer\">\n <span class=\"material-symbols-outlined\">open_in_new</span>\n </a>\n </div>\n </div>\n <div class=\"tx-row\">\n <span class=\"tx-label\">amount paid</span>\n <span class=\"tx-value\" id=\"kwespay-txFiatAmount\">${fiatAmount} ${currency}</span>\n </div>\n <div class=\"tx-row\">\n <span class=\"tx-label\">crypto amount</span>\n <span class=\"tx-value\" id=\"kwespay-txCryptoAmount\">—</span>\n </div>\n <div class=\"tx-row\">\n <span class=\"tx-label\">network</span>\n <span class=\"tx-value\" id=\"kwespay-txNetwork\">—</span>\n </div>\n </div>\n </div>\n <div class=\"bottom-action\">\n <button class=\"action-btn\" id=\"kwespay-closeSuccessBtn\">Done</button>\n </div>\n <div class=\"kp-footer\">\n <span class=\"material-symbols-outlined kp-footer-lock\" style=\"font-size:12px\">lock</span>\n <span class=\"kp-footer-text\">Secured by <span>KwesPay</span> · On-chain verified</span>\n </div>\n </div>\n\n <div class=\"step\" id=\"kwespay-step6\">\n <div class=\"kp-topbar\">\n <div class=\"kp-topbar-brand\">\n <div class=\"kp-topbar-dot\" style=\"background:var(--kp-red);box-shadow:none;animation:none\"></div>\n <span class=\"kp-topbar-name\">Payment Failed</span>\n </div>\n </div>\n <div class=\"loading-container\" style=\"flex:1\">\n <div class=\"error-icon\">\n <span class=\"material-symbols-outlined\">error</span>\n </div>\n <h2 class=\"headline\" id=\"kwespay-errorTitle\">Something went wrong</h2>\n <p class=\"body-text\" id=\"kwespay-errorMessage\">An error occurred while processing your payment.</p>\n </div>\n <div class=\"bottom-action\">\n <button class=\"action-btn\" id=\"kwespay-retryPayment\">Try Again</button>\n <button class=\"action-btn secondary\" style=\"margin-top:8px\" id=\"kwespay-backToStartBtn\">Start Over</button>\n </div>\n </div>\n `;\n}\n","export function isMobileDevice() {\n return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(\n navigator.userAgent\n );\n}\n\nexport function isIOSDevice() {\n return /iPhone|iPad|iPod/i.test(navigator.userAgent);\n}\n\nexport function dispatchWidgetEvent(eventName, detail = {}) {\n const event = new CustomEvent(`kwespay:${eventName}`, {\n detail,\n bubbles: true,\n cancelable: true,\n });\n window.dispatchEvent(event);\n}\n\nexport function validateAmount(amount) {\n const num = parseFloat(amount);\n return !isNaN(num) && num > 0;\n}\n\nexport function delay(ms) {\n return new Promise((resolve) => setTimeout(resolve, ms));\n}\n\nexport function safeJSONParse(str, fallback = null) {\n try {\n return JSON.parse(str);\n } catch {\n return fallback;\n }\n}\n\nexport function truncateAddress(address, startChars = 6, endChars = 4) {\n if (!address) return \"\";\n return `${address.slice(0, startChars)}...${address.slice(-endChars)}`;\n}\n\nexport function truncateHash(hash, startChars = 10, endChars = 8) {\n if (!hash) return \"\";\n return `${hash.slice(0, startChars)}...${hash.slice(-endChars)}`;\n}\n\nexport function formatFiatAmount(amount, currency) {\n const num = parseFloat(amount);\n if (isNaN(num)) return `0 ${currency}`;\n return `${num.toFixed(2)} ${currency}`;\n}\n\nexport function getErrorType(error) {\n const msg = error?.message ?? \"\";\n if (\n error?.code === 4001 ||\n error?.code === \"ACTION_REJECTED\" ||\n msg.includes(\"rejected\") ||\n msg.includes(\"denied\") ||\n msg.includes(\"cancelled\")\n )\n return \"USER_REJECTED\";\n if (msg.toLowerCase().includes(\"insufficient\")) return \"INSUFFICIENT_BALANCE\";\n if (\n msg.includes(\"User rejected\") ||\n msg.includes(\"User closed modal\") ||\n msg.includes(\"Connection request reset\")\n )\n return \"CONNECTION_REJECTED\";\n if (msg.includes(\"timeout\")) return \"TIMEOUT\";\n return \"UNKNOWN\";\n}\n\nexport function getErrorMessage(error, context = {}) {\n const type = getErrorType(error);\n\n console.error(\"[KwesPay] Payment error breakdown:\", {\n errorType: type,\n message: error?.message,\n code: error?.code,\n data: error?.data,\n reason: error?.reason,\n stack: error?.stack,\n raw: error,\n context,\n });\n\n if (error?.data) console.error(\"[KwesPay] Contract revert data:\", error.data);\n if (error?.transaction)\n console.error(\"[KwesPay] Failed tx details:\", error.transaction);\n if (error?.receipt) console.error(\"[KwesPay] Tx receipt:\", error.receipt);\n\n switch (type) {\n case \"USER_REJECTED\":\n return \"You cancelled the transaction in your wallet.\";\n case \"INSUFFICIENT_BALANCE\":\n return `Not enough ${context.token || \"funds\"} to complete this payment.`;\n case \"CONNECTION_REJECTED\":\n return \"Wallet connection was cancelled.\";\n case \"TIMEOUT\":\n return \"Connection timed out. Please try again.\";\n default:\n return (\n error?.reason ||\n error?.message ||\n \"Something went wrong while processing your payment.\"\n );\n }\n}\n","import {\n NETWORK_CONFIGS,\n TOKEN_CONFIGS,\n DEFAULT_CONFIG,\n SUPPORTED_CURRENCIES,\n STABLECOIN_SYMBOLS,\n} from \"../config/constants.js\";\nimport WalletService from \"../services/walletService.js\";\nimport PaymentService from \"../services/paymentService.js\";\nimport { WIDGET_STYLES } from \"../ui/styles.js\";\nimport { getStepTemplates } from \"../ui/template.js\";\nimport {\n dispatchWidgetEvent,\n truncateHash,\n getErrorType,\n getErrorMessage,\n} from \"../utils/helpers.js\";\n\nconst PLATFORM_FEE_BPS = 25;\n\n// ── Utilities ─────────────────────────────────────────────────────────────────\n\nfunction formatUnits(rawBigInt, decimals) {\n const divisor = BigInt(10 ** decimals);\n const whole = rawBigInt / divisor;\n const remainder = rawBigInt % divisor;\n\n if (remainder === 0n) return `${whole}`;\n\n const fracFull = remainder.toString().padStart(decimals, \"0\");\n\n if (whole > 0n) {\n const frac = fracFull.slice(0, 4).replace(/0+$/, \"\");\n return frac ? `${whole}.${frac}` : `${whole}`;\n }\n\n let firstSig = -1;\n for (let i = 0; i < fracFull.length; i++) {\n if (fracFull[i] !== \"0\") {\n firstSig = i;\n break;\n }\n }\n if (firstSig === -1) return `${whole}`;\n\n const sigSlice = fracFull.slice(firstSig, firstSig + 4).replace(/0+$/, \"\");\n return `0.${fracFull.slice(0, firstSig) + sigSlice}`;\n}\n\nfunction resolveAcceptedTokens(input) {\n if (!input) return null;\n if (input === \"stablecoins\") return STABLECOIN_SYMBOLS;\n if (Array.isArray(input) && input.length)\n return input.map((t) => t.toUpperCase());\n return null;\n}\n\nfunction isMobileDevice() {\n return /iPhone|iPad|iPod|Android/i.test(navigator.userAgent);\n}\n\n// ── Widget ────────────────────────────────────────────────────────────────────\n\nclass KwesPayWidget {\n constructor(config) {\n if (!config.apiKey) throw new Error(\"[KwesPayWidget] apiKey is required\");\n if (!config.vendorId)\n throw new Error(\"[KwesPayWidget] vendorId is required\");\n if (!config.amount || parseFloat(config.amount) <= 0)\n throw new Error(\"[KwesPayWidget] Valid amount is required\");\n\n this.config = {\n apiKey: config.apiKey,\n vendorId: config.vendorId,\n amount: parseFloat(config.amount),\n currency: config.currency || DEFAULT_CONFIG.currency,\n graphqlEndpoint: DEFAULT_CONFIG.graphqlEndpoint,\n acceptedTokens: resolveAcceptedTokens(config.acceptedTokens),\n };\n\n if (!Object.values(SUPPORTED_CURRENCIES).includes(this.config.currency)) {\n throw new Error(\n `[KwesPayWidget] Unsupported currency: ${this.config.currency}`\n );\n }\n\n this.walletService = new WalletService();\n this.paymentService = new PaymentService(\n this.config.apiKey,\n this.config.graphqlEndpoint\n );\n\n this.state = {\n isOpen: false,\n currentStep: 0,\n selectedNetwork: null,\n selectedNetworkName: \"\",\n selectedChainId: null,\n selectedRpcUrl: null,\n selectedContractAddress: null,\n selectedToken: null,\n selectedTokenConfig: null,\n vendorInfo: null,\n keyAllowedNetworks: null,\n keyAllowedTokens: null,\n currentPayload: null,\n quoteTimerInterval: null,\n wcUri: null,\n };\n\n this._init();\n }\n\n // ── Bootstrap ───────────────────────────────────────────────────────────────\n\n _init() {\n this._injectFonts();\n this._injectStyles();\n this._createWidgetDOM();\n }\n\n _injectFonts() {\n if (\n !document.querySelector(\n 'link[href*=\"fonts.googleapis.com/css2?family=Syne\"]'\n )\n ) {\n const link = document.createElement(\"link\");\n link.href =\n \"https://fonts.googleapis.com/css2?family=Syne:wght@400;500;600;700;800&family=DM+Mono:wght@300;400;500&family=Material+Symbols+Outlined:wght,FILL@100..700,0..1&display=swap\";\n link.rel = \"stylesheet\";\n document.head.appendChild(link);\n }\n }\n\n _injectStyles() {\n if (!document.getElementById(\"kwespay-widget-styles\")) {\n const style = document.createElement(\"style\");\n style.id = \"kwespay-widget-styles\";\n style.textContent = WIDGET_STYLES;\n document.head.appendChild(style);\n }\n }\n\n _createWidgetDOM() {\n document.getElementById(\"kwespay-widget-overlay\")?.remove();\n\n const overlay = document.createElement(\"div\");\n overlay.className = \"kwespay-overlay\";\n overlay.id = \"kwespay-widget-overlay\";\n\n const closeBtn = document.createElement(\"button\");\n closeBtn.className = \"kwespay-close-btn\";\n closeBtn.innerHTML = \"×\";\n closeBtn.onclick = () => this.close();\n overlay.appendChild(closeBtn);\n\n const container = document.createElement(\"div\");\n container.className = \"kwespay-container\";\n container.id = \"kwespay-widget-container\";\n container.innerHTML = getStepTemplates(\n this.config.amount,\n this.config.currency\n );\n\n overlay.appendChild(container);\n document.body.appendChild(overlay);\n\n this._setupEventListeners();\n\n overlay.addEventListener(\"click\", (e) => {\n if (e.target === overlay) this.close();\n });\n\n // Swipe-down to close on mobile\n let _touchStartY = 0,\n _touchCurrentY = 0,\n _isDragging = false;\n container.addEventListener(\n \"touchstart\",\n (e) => {\n const touch = e.touches[0];\n const offset = touch.clientY - container.getBoundingClientRect().top;\n if (offset <= 40) {\n _touchStartY = touch.clientY;\n _touchCurrentY = touch.clientY;\n _isDragging = true;\n container.style.transition = \"none\";\n }\n },\n { passive: true }\n );\n container.addEventListener(\n \"touchmove\",\n (e) => {\n if (!_isDragging) return;\n _touchCurrentY = e.touches[0].clientY;\n const delta = _touchCurrentY - _touchStartY;\n if (delta > 0) container.style.transform = `translateY(${delta}px)`;\n },\n { passive: true }\n );\n container.addEventListener(\"touchend\", () => {\n if (!_isDragging) return;\n _isDragging = false;\n container.style.transition = \"\";\n const delta = _touchCurrentY - _touchStartY;\n if (delta > 120) this.close();\n else container.style.transform = \"translateY(0)\";\n });\n }\n\n _setupEventListeners() {\n document\n .getElementById(\"kwespay-retryInitBtn\")\n ?.addEventListener(\"click\", () => this._validateAPIKey());\n\n this._renderNetworkList();\n\n document.getElementById(\"kwespay-back2\")?.addEventListener(\"click\", () => {\n this.state.selectedToken = null;\n this.state.selectedTokenConfig = null;\n const btn = document.getElementById(\"kwespay-continueToWalletConnect\");\n if (btn) btn.disabled = true;\n this._goToStep(1);\n });\n\n document\n .getElementById(\"kwespay-back3\")\n ?.addEventListener(\"click\", async () => {\n await this.walletService.disconnect();\n this._clearQuoteTimer();\n this._goToStep(2);\n });\n\n document\n .getElementById(\"kwespay-continueToWalletConnect\")\n ?.addEventListener(\"click\", async () => {\n await this._handleWalletConnection();\n });\n\n document\n .getElementById(\"kwespay-proceedToPayment\")\n ?.addEventListener(\"click\", async () => {\n await this._handlePaymentProcessing();\n });\n\n document\n .getElementById(\"kwespay-cancelConnection\")\n ?.addEventListener(\"click\", async () => {\n await this.walletService.disconnect();\n this._clearQuoteTimer();\n dispatchWidgetEvent(\"paymentCancelled\", {\n reason: \"user_cancelled_review\",\n });\n this._goToStep(1);\n });\n\n document\n .getElementById(\"kwespay-retryPayment\")\n ?.addEventListener(\"click\", async () => {\n if (this.walletService.isConnected()) {\n await this._loadReviewStep();\n this._goToStep(3);\n } else {\n await this._handleWalletConnection();\n }\n });\n\n document\n .getElementById(\"kwespay-closeSuccessBtn\")\n ?.addEventListener(\"click\", () => this.close());\n\n document\n .getElementById(\"kwespay-backToStartBtn\")\n ?.addEventListener(\"click\", () => {\n dispatchWidgetEvent(\"paymentCancelled\", {\n reason: \"user_started_over\",\n });\n this._reset();\n this._goToStep(1);\n });\n\n const networkSearch = document.getElementById(\"kwespay-networkSearch\");\n if (networkSearch) {\n networkSearch.addEventListener(\"input\", (e) => {\n const term = e.target.value.toLowerCase();\n document\n .querySelectorAll(\".kwespay-container .list-item\")\n .forEach((item) => {\n const name = item\n .querySelector(\".item-name\")\n ?.textContent.toLowerCase();\n if (name)\n item.style.display = name.includes(term) ? \"flex\" : \"none\";\n });\n });\n }\n\n const tokenSearch = document.getElementById(\"kwespay-tokenSearch\");\n if (tokenSearch) {\n tokenSearch.addEventListener(\"input\", (e) => {\n const term = e.target.value.toLowerCase();\n document\n .querySelectorAll(\"#kwespay-tokenList .token-item\")\n .forEach((item) => {\n const name = item\n .querySelector(\".token-name\")\n ?.textContent.toLowerCase();\n const symbol = item\n .querySelector(\".token-symbol\")\n ?.textContent.toLowerCase();\n if (name && symbol) {\n item.style.display =\n name.includes(term) || symbol.includes(term) ? \"flex\" : \"none\";\n }\n });\n });\n }\n }\n\n // ── Network / token list rendering ──────────────────────────────────────────\n\n _renderNetworkList() {\n const mainnetList = document.getElementById(\"kwespay-mainnetList\");\n const testnetList = document.getElementById(\"kwespay-testnetList\");\n const testnetSection = document.getElementById(\"kwespay-testnetSection\");\n if (!mainnetList || !testnetList) return;\n\n mainnetList.innerHTML = \"\";\n testnetList.innerHTML = \"\";\n\n const scopeNetworks = this.state.keyAllowedNetworks\n ? new Set(this.state.keyAllowedNetworks.map((n) => n.toLowerCase()))\n : null;\n const scopeTokens = this._effectiveAllowedTokens();\n\n let hasTestnet = false;\n\n Object.entries(NETWORK_CONFIGS).forEach(([key, network]) => {\n if (scopeNetworks && !scopeNetworks.has(key.toLowerCase())) return;\n if (scopeTokens) {\n const networkTokens = (TOKEN_CONFIGS[key] || []).map((t) =>\n t.symbol.toUpperCase()\n );\n if (!scopeTokens.some((t) => networkTokens.includes(t))) return;\n }\n\n const listItem = document.createElement(\"div\");\n listItem.className = \"list-item\";\n listItem.innerHTML = `\n <div class=\"item-icon\"><img src=\"${network.logo}\" alt=\"${\n network.name\n }\" /></div>\n <div class=\"item-info\">\n <div class=\"item-name-row\">\n <p class=\"item-name\">${network.name}</p>\n ${\n network.type === \"testnet\"\n ? '<span class=\"item-badge badge-testnet\">Testnet</span>'\n : \"\"\n }\n </div>\n <p class=\"item-desc\">${\n network.type === \"mainnet\"\n ? \"Mainnet · Production\"\n : \"Testnet · Development\"\n }</p>\n </div>\n <span class=\"material-symbols-outlined item-chevron\">chevron_right</span>\n `;\n listItem.addEventListener(\"click\", () =>\n this._handleNetworkSelection(key, network)\n );\n\n if (network.type === \"mainnet\") mainnetList.appendChild(listItem);\n else {\n testnetList.appendChild(listItem);\n hasTestnet = true;\n }\n });\n\n if (testnetSection)\n testnetSection.style.display = hasTestnet ? \"block\" : \"none\";\n }\n\n _renderTokenList() {\n if (!this.state.selectedNetwork) return;\n const tokenList = document.getElementById(\"kwespay-tokenList\");\n if (!tokenList) return;\n\n const scopeTokens = this._effectiveAllowedTokens();\n let tokens = TOKEN_CONFIGS[this.state.selectedNetwork] || [];\n if (scopeTokens)\n tokens = tokens.filter((t) =>\n scopeTokens.includes(t.symbol.toUpperCase())\n );\n\n tokenList.innerHTML = \"\";\n if (tokens.length === 0) {\n tokenList.innerHTML = `<div style=\"text-align:center;padding:24px;font-family:var(--kp-mono);font-size:11px;color:var(--kp-muted)\">No accepted tokens on this network.</div>`;\n return;\n }\n\n tokens.forEach((token) => {\n const tokenItem = document.createElement(\"div\");\n tokenItem.className = \"token-item\";\n tokenItem.setAttribute(\"data-token-symbol\", token.symbol);\n tokenItem.innerHTML = `\n <div class=\"token-left\">\n <div class=\"token-icon\"><img src=\"${token.icon}\" alt=\"${token.symbol}\" /></div>\n <div class=\"token-info\">\n <p class=\"token-symbol\">${token.symbol}</p>\n <p class=\"token-name\">${token.name}</p>\n </div>\n </div>\n <span class=\"material-symbols-outlined token-chevron\">chevron_right</span>\n `;\n tokenItem.addEventListener(\"click\", () =>\n this._handleTokenSelection(token)\n );\n tokenList.appendChild(tokenItem);\n });\n }\n\n _effectiveAllowedTokens() {\n const keyTokens =\n this.state.keyAllowedTokens?.map((t) => t.toUpperCase()) ?? null;\n const configTokens = this.config.acceptedTokens;\n if (!keyTokens && !configTokens) return null;\n if (!keyTokens) return configTokens;\n if (!configTokens) return keyTokens;\n return keyTokens.filter((t) => configTokens.includes(t));\n }\n\n // ── Wallet connection flow ───────────────────────────────────────────────────\n\n async _handleWalletConnection() {\n if (!this.state.selectedToken || !this.state.selectedTokenConfig) {\n alert(\"Please select a token first\");\n return;\n }\n this._renderWalletPickerStep();\n }\n\n _renderWalletPickerStep() {\n this._removeCustomStep(\"kwespay-step-wallet-picker\");\n\n const container = document.getElementById(\"kwespay-widget-container\");\n const step = document.createElement(\"div\");\n step.className = \"step\";\n step.id = \"kwespay-step-wallet-picker\";\n\n step.innerHTML = `\n <div class=\"kp-topbar\">\n <div class=\"kp-topbar-brand\">\n <button class=\"kp-back-btn\" id=\"kwespay-picker-back\">\n <span class=\"material-symbols-outlined\">arrow_back</span>\n </button>\n <div class=\"kp-topbar-dot\"></div>\n <span class=\"kp-topbar-name\">Connect Wallet</span>\n </div>\n </div>\n <div class=\"content-scroll\" style=\"padding-top:16px\">\n <p class=\"section-hint\">Choose how to connect your wallet.</p>\n <div class=\"item-list\" id=\"kwespay-injected-list\">\n <div style=\"text-align:center;padding:12px;font-family:var(--kp-mono);font-size:11px;color:var(--kp-muted)\">Detecting wallets…</div>\n </div>\n <div class=\"kp-section-divider\" style=\"margin-top:20px\">Or scan QR code</div>\n <div class=\"item-list\" id=\"kwespay-wc-list\">\n <div class=\"list-item\" id=\"kwespay-wc-option\" style=\"cursor:pointer\">\n <div class=\"item-icon\" style=\"background:transparent\">\n <svg width=\"22\" height=\"22\" viewBox=\"0 0 22 22\" fill=\"none\">\n <path d=\"M4 4C7.3 1 14.7 1 18 4C18 4 15 7.5 11 7.5C7 7.5 4 4 4 4Z\" fill=\"#3396FF\"/>\n <path d=\"M4 4C4 4 6.5 9 11 9C15.5 9 18 4 18 4\" stroke=\"#3396FF\" stroke-width=\"1.5\" fill=\"none\"/>\n <path d=\"M7.5 10L9.5 14L11 11L12.5 14L14.5 10\" stroke=\"#3396FF\" stroke-width=\"1.5\" stroke-linecap=\"round\" stroke-linejoin=\"round\"/>\n </svg>\n </div>\n <div class=\"item-info\">\n <div class=\"item-name-row\"><p class=\"item-name\">WalletConnect</p></div>\n <p class=\"item-desc\">${\n isMobileDevice()\n ? \"Open your mobile wallet\"\n : \"Scan QR with any wallet\"\n }</p>\n </div>\n <span class=\"material-symbols-outlined item-chevron\">chevron_right</span>\n </div>\n </div>\n </div>\n `;\n\n container.appendChild(step);\n\n step\n .querySelector(\"#kwespay-picker-back\")\n ?.addEventListener(\"click\", () => {\n this._removeCustomStep(\"kwespay-step-wallet-picker\");\n this._goToStep(2);\n });\n\n step.querySelector(\"#kwespay-wc-option\")?.addEventListener(\"click\", () => {\n this._removeCustomStep(\"kwespay-step-wallet-picker\");\n this._startWalletConnect();\n });\n\n this._goToStep(\"wallet-picker\");\n\n this.walletService.discoverInjectedWallets().then((providers) => {\n const list = document.getElementById(\"kwespay-injected-list\");\n if (!list) return;\n list.innerHTML = \"\";\n\n if (providers.length === 0) {\n list.innerHTML = `<div style=\"text-align:center;padding:12px;font-family:var(--kp-mono);font-size:11px;color:var(--kp-muted)\">No browser wallet detected.</div>`;\n return;\n }\n\n providers.forEach((entry, index) => {\n const iconHtml = entry.info.icon\n ? `<img src=\"${entry.info.icon}\" alt=\"${entry.info.name}\" style=\"width:22px;height:22px;object-fit:contain;border-radius:6px\">`\n : `<span class=\"material-symbols-outlined\" style=\"font-size:18px;color:var(--kp-accent)\">account_balance_wallet</span>`;\n\n const item = document.createElement(\"div\");\n item.className = \"list-item\";\n item.style.cursor = \"pointer\";\n item.innerHTML = `\n <div class=\"item-icon\">${iconHtml}</div>\n <div class=\"item-info\">\n <div class=\"item-name-row\"><p class=\"item-name\">${entry.info.name}</p></div>\n <p class=\"item-desc\">Browser extension</p>\n </div>\n <span class=\"material-symbols-outlined item-chevron\">chevron_right</span>\n `;\n item.addEventListener(\"click\", async () => {\n this._removeCustomStep(\"kwespay-step-wallet-picker\");\n await this._connectInjectedProvider(index);\n });\n list.appendChild(item);\n });\n });\n }\n\n async _connectInjectedProvider(index) {\n try {\n const connection = await this.walletService.connectInjected(index);\n await this._onWalletConnected(connection);\n } catch (err) {\n if (err.code === \"USER_CANCELLED\" || err.code === 4001) return;\n console.error(\"[KwesPayWidget] Injected connect error:\", err.message);\n this._showError(\n \"Connection Failed\",\n err.message || \"Could not connect wallet.\"\n );\n dispatchWidgetEvent(\"walletConnectionError\", { error: err.message });\n }\n }\n\n async _startWalletConnect() {\n this._renderWCStep();\n\n try {\n await this.walletService.initWalletConnect(\n (uri) => this._onWCUri(uri),\n () => this._onWCConnected(),\n () => this._onWCDisconnected()\n );\n\n if (isMobileDevice()) {\n this._renderWCMobileStep();\n }\n\n // Pass the target chain so MetaMask starts the WC session on the right\n // network — without this it defaults to its last-used WC chain (Mainnet).\n await this.walletService.connectWalletConnect(this.state.selectedChainId);\n } catch (err) {\n if (\n err.message?.includes(\"User rejected\") ||\n err.message?.includes(\"cancelled\")\n )\n return;\n console.error(\"[KwesPayWidget] WC connect error:\", err.message);\n this._showError(\n \"Connection Failed\",\n err.message || \"WalletConnect failed.\"\n );\n }\n }\n\n // ── WalletConnect UI ─────────────────────────────────────────────────────────\n\n _renderWCStep() {\n this._removeCustomStep(\"kwespay-step-wc\");\n const container = document.getElementById(\"kwespay-widget-container\");\n const step = document.createElement(\"div\");\n step.className = \"step\";\n step.id = \"kwespay-step-wc\";\n step.innerHTML = isMobileDevice()\n ? this._wcMobileHTML()\n : this._wcDesktopHTML();\n container.appendChild(step);\n\n step\n .querySelector(\"#kwespay-wc-back\")\n ?.addEventListener(\"click\", async () => {\n await this.walletService.disconnect();\n this._removeCustomStep(\"kwespay-step-wc\");\n this._renderWalletPickerStep();\n });\n\n step.querySelector(\"#kwespay-wc-copy\")?.addEventListener(\"click\", () => {\n if (this.state.wcUri) {\n navigator.clipboard.writeText(this.state.wcUri).catch(() => {});\n const btn = document.getElementById(\"kwespay-wc-copy\");\n if (btn) btn.textContent = \"Copied!\";\n setTimeout(() => {\n if (btn) btn.textContent = \"Copy URI\";\n }, 2000);\n }\n });\n\n this._goToStep(\"wc\");\n }\n\n _wcDesktopHTML() {\n return `\n <div class=\"kp-topbar\">\n <div class=\"kp-topbar-brand\">\n <button class=\"kp-back-btn\" id=\"kwespay-wc-back\">\n <span class=\"material-symbols-outlined\">arrow_back</span>\n </button>\n <div class=\"kp-topbar-dot\"></div>\n <span class=\"kp-topbar-name\">Scan QR Code</span>\n </div>\n </div>\n <div class=\"content-scroll\" style=\"padding-top:16px;display:flex;flex-direction:column;align-items:center;gap:16px\">\n <p class=\"section-hint\" style=\"text-align:center\">Open any WalletConnect-compatible wallet app and scan the code below.</p>\n <div id=\"kwespay-qr-canvas\" style=\"width:220px;height:220px;background:white;border-radius:12px;display:flex;align-items:center;justify-content:center;border:1px solid var(--kp-border)\">\n <p style=\"font-size:11px;color:#888;font-family:var(--kp-mono)\">Generating QR…</p>\n </div>\n <button class=\"action-btn secondary\" id=\"kwespay-wc-copy\" style=\"width:auto;padding:8px 20px;font-size:12px\">Copy URI</button>\n <p style=\"font-size:11px;color:var(--kp-muted);font-family:var(--kp-mono);text-align:center\">Waiting for wallet connection…</p>\n </div>\n `;\n }\n\n _wcMobileHTML() {\n const wallets = this.walletService.getMobileWallets();\n const walletButtons = wallets\n .map(\n (w, i) => `\n <div class=\"list-item kp-wallet-option\" data-index=\"${i}\" style=\"cursor:pointer\">\n <div class=\"item-icon\">\n <img src=\"${w.icon}\" alt=\"${w.name}\" style=\"width:22px;height:22px;object-fit:contain;border-radius:6px\" onerror=\"this.style.display='none'\">\n </div>\n <div class=\"item-info\">\n <div class=\"item-name-row\"><p class=\"item-name\">${w.name}</p></div>\n <p class=\"item-desc\">Tap to open and approve</p>\n </div>\n <span class=\"material-symbols-outlined item-chevron\">open_in_new</span>\n </div>\n `\n )\n .join(\"\");\n\n return `\n <div class=\"kp-topbar\">\n <div class=\"kp-topbar-brand\">\n <button class=\"kp-back-btn\" id=\"kwespay-wc-back\">\n <span class=\"material-symbols-outlined\">arrow_back</span>\n </button>\n <div class=\"kp-topbar-dot\"></div>\n <span class=\"kp-topbar-name\">Connect Wallet</span>\n </div>\n </div>\n <div class=\"content-scroll\" style=\"padding-top:16px\">\n <div class=\"kp-mobile-connect-status\" id=\"kwespay-wc-status-card\">\n <div class=\"kp-mobile-status-icon\">\n <div class=\"spinner-ring\" style=\"width:20px;height:20px;border-width:2px\"></div>\n </div>\n <div class=\"kp-mobile-status-text\">\n <p class=\"kp-mobile-status-title\">Preparing connection</p>\n <p class=\"kp-mobile-status-desc\" id=\"kwespay-wc-status\">This only takes a moment…</p>\n </div>\n </div>\n <p class=\"section-hint\" style=\"margin-top:16px\">Choose your wallet app to connect.</p>\n <div class=\"item-list\" id=\"kwespay-mobile-wallet-list\">${walletButtons}</div>\n <p style=\"font-size:10px;color:var(--kp-muted);font-family:var(--kp-mono);text-align:center;margin-top:16px;line-height:1.6\">\n After approving in your wallet, return here to complete payment.\n </p>\n </div>\n `;\n }\n\n _renderWCMobileStep() {\n const list = document.getElementById(\"kwespay-mobile-wallet-list\");\n if (!list) return;\n\n list.querySelectorAll(\".kp-wallet-option\").forEach((item) => {\n const index = parseInt(item.getAttribute(\"data-index\"), 10);\n const wallet = this.walletService.getMobileWallets()[index];\n\n item.addEventListener(\"click\", () => {\n if (!this.state.wcUri) {\n const status = document.getElementById(\"kwespay-wc-status\");\n if (status) status.textContent = \"Still connecting — please wait…\";\n return;\n }\n const url = wallet.universalLink(this.state.wcUri);\n if (this.walletService.isIOS()) {\n window.location.href = url;\n } else {\n window.open(url, \"_blank\", \"noreferrer noopener\");\n }\n });\n });\n }\n\n _onWCUri(uri) {\n this.state.wcUri = uri;\n\n if (isMobileDevice()) {\n const statusDesc = document.getElementById(\"kwespay-wc-status\");\n const statusTitle = document.querySelector(\".kp-mobile-status-title\");\n const statusIcon = document.querySelector(\".kp-mobile-status-icon\");\n if (statusDesc)\n statusDesc.textContent = \"Ready. Tap a wallet below to connect.\";\n if (statusTitle) statusTitle.textContent = \"Connection ready\";\n if (statusIcon)\n statusIcon.innerHTML = `<span class=\"material-symbols-outlined\" style=\"font-size:18px;color:var(--kp-accent)\">check_circle</span>`;\n } else {\n this._renderQRCode(uri);\n }\n }\n\n _renderQRCode(uri) {\n const canvas = document.getElementById(\"kwespay-qr-canvas\");\n if (!canvas) return;\n\n if (typeof QRCode !== \"undefined\") {\n canvas.innerHTML = \"\";\n new QRCode(canvas, {\n text: uri,\n width: 200,\n height: 200,\n colorDark: \"#000000\",\n colorLight: \"#ffffff\",\n correctLevel: QRCode.CorrectLevel.M,\n });\n return;\n }\n if (typeof window.qrcode !== \"undefined\") {\n const qr = window.qrcode(0, \"M\");\n qr.addData(uri);\n qr.make();\n canvas.innerHTML = qr.createImgTag(3);\n return;\n }\n\n canvas.innerHTML = `\n <div style=\"display:flex;flex-direction:column;align-items:center;gap:8px;padding:12px\">\n <p style=\"font-size:10px;color:#888;font-family:monospace;word-break:break-all;text-align:center;max-width:180px\">${uri.slice(\n 0,\n 80\n )}…</p>\n <p style=\"font-size:10px;color:#888;font-family:monospace\">Use Copy URI button</p>\n </div>\n `;\n }\n\n _onWCConnected() {\n const connection = this.walletService._connectionResult();\n this._removeCustomStep(\"kwespay-step-wc\");\n this._onWalletConnected(connection);\n }\n\n _onWCDisconnected() {\n this._removeCustomStep(\"kwespay-step-wc\");\n this._goToStep(2);\n }\n\n async _onWalletConnected(connection) {\n const addressEl = document.getElementById(\"kwespay-connectedWalletAddress\");\n if (addressEl) addressEl.textContent = connection.shortAddress;\n\n const networkEl = document.getElementById(\"kwespay-summaryNetwork\");\n if (networkEl) networkEl.textContent = this.state.selectedNetworkName;\n\n const tokenEl = document.getElementById(\"kwespay-summaryToken\");\n if (tokenEl) tokenEl.textContent = this.state.selectedToken;\n\n const cryptoLine = document.getElementById(\"kwespay-reviewCryptoLine\");\n const timerEl = document.getElementById(\"kwespay-quoteTimer\");\n const proceedBtn = document.getElementById(\"kwespay-proceedToPayment\");\n\n if (cryptoLine) {\n cryptoLine.textContent = \"Getting the best rate for you…\";\n cryptoLine.classList.add(\"loading\");\n }\n if (timerEl) timerEl.style.display = \"none\";\n if (proceedBtn) proceedBtn.disabled = true;\n\n this._goToStep(3);\n\n try {\n await this._loadReviewStep();\n } catch (err) {\n console.error(\n \"[KwesPayWidget] Quote load failed after wallet connect:\",\n err.message\n );\n if (cryptoLine) {\n cryptoLine.textContent = \"Could not load rate — please try again.\";\n cryptoLine.classList.remove(\"loading\");\n }\n }\n\n dispatchWidgetEvent(\"walletConnected\", { address: connection.address });\n }\n\n // ── API key validation ───────────────────────────────────────────────────────\n\n async _validateAPIKey() {\n try {\n const validation = await this.paymentService.validateAPIKey();\n if (validation.valid) {\n this.state.vendorInfo = validation.vendorInfo;\n this.state.keyAllowedNetworks = validation.allowedNetworks ?? null;\n this.state.keyAllowedTokens = validation.allowedTokens ?? null;\n this._goToStep(1);\n dispatchWidgetEvent(\"apiKeyValidated\", {\n vendorInfo: this.state.vendorInfo,\n });\n } else {\n this._goToStep(0.5);\n dispatchWidgetEvent(\"apiKeyInvalid\", {});\n }\n } catch (err) {\n console.error(\"[KwesPayWidget] API key validation error:\", err.message);\n this._goToStep(0.5);\n dispatchWidgetEvent(\"apiKeyError\", { error: err.message });\n }\n }\n\n // ── Network / token selection ────────────────────────────────────────────────\n\n async _handleNetworkSelection(key, network) {\n this.state.selectedNetwork = key;\n this.state.selectedNetworkName = network.name;\n this.state.selectedChainId = network.chainId;\n this.state.selectedRpcUrl = network.rpcUrl;\n this.state.selectedContractAddress = network.contractAddress;\n this.state.selectedToken = null;\n this.state.selectedTokenConfig = null;\n\n const nameEl = document.getElementById(\"kwespay-selectedNetworkName\");\n if (nameEl)\n nameEl.textContent = `${network.name} ${\n network.type === \"mainnet\" ? \"Mainnet\" : \"Testnet\"\n }`;\n\n const iconEl = document.getElementById(\"kwespay-selectedNetworkIcon\");\n if (iconEl)\n iconEl.innerHTML = `<img src=\"${network.logo}\" alt=\"${network.name}\" />`;\n\n const continueBtn = document.getElementById(\n \"kwespay-continueToWalletConnect\"\n );\n if (continueBtn) continueBtn.disabled = true;\n\n this._renderTokenList();\n this._goToStep(2);\n }\n\n _handleTokenSelection(token) {\n document\n .querySelectorAll(\"#kwespay-tokenList .token-item\")\n .forEach((item) => item.classList.remove(\"selected\"));\n document\n .querySelector(\n `#kwespay-tokenList .token-item[data-token-symbol=\"${token.symbol}\"]`\n )\n ?.classList.add(\"selected\");\n\n this.state.selectedToken = token.symbol;\n this.state.selectedTokenConfig = token;\n\n const continueBtn = document.getElementById(\n \"kwespay-continueToWalletConnect\"\n );\n if (continueBtn) continueBtn.disabled = false;\n }\n\n // ── Quote / review step ──────────────────────────────────────────────────────\n\n async _loadReviewStep() {\n this._clearQuoteTimer();\n\n const cryptoLine = document.getElementById(\"kwespay-reviewCryptoLine\");\n const timerEl = document.getElementById(\"kwespay-quoteTimer\");\n const feeAmount = document.getElementById(\"kwespay-feePaymentAmount\");\n const feePlatform = document.getElementById(\"kwespay-feePlatformFee\");\n const feeVendor = document.getElementById(\"kwespay-feeVendorAmount\");\n const proceedBtn = document.getElementById(\"kwespay-proceedToPayment\");\n\n if (cryptoLine) {\n cryptoLine.textContent = \"Getting the best rate for you…\";\n cryptoLine.classList.add(\"loading\");\n }\n if (timerEl) timerEl.style.display = \"none\";\n if (proceedBtn) proceedBtn.disabled = true;\n\n try {\n const payload = await this.paymentService.getQuote({\n vendorId: this.config.vendorId,\n cryptoCurrency: this.state.selectedToken,\n fiatAmount: this.config.amount,\n fiatCurrency: this.config.currency,\n network: this.state.selectedNetwork,\n payerWalletAddress: this.walletService.getAddress(),\n });\n\n this.state.currentPayload = payload;\n\n const decimals = this.state.selectedTokenConfig?.decimals ?? 6;\n const amountBig = BigInt(payload.amountBaseUnits);\n const feeNum = (Number(amountBig) * PLATFORM_FEE_BPS) / 10000;\n const feeBig = BigInt(Math.max(1, Math.round(feeNum)));\n const vendorBig = amountBig - feeBig;\n const sym = this.state.selectedToken;\n const fmt = (n) => `${formatUnits(n, decimals)} ${sym}`;\n\n if (cryptoLine) {\n cryptoLine.textContent = fmt(amountBig);\n cryptoLine.classList.remove(\"loading\");\n }\n if (feeAmount) feeAmount.textContent = fmt(amountBig);\n if (feePlatform) feePlatform.textContent = fmt(feeBig);\n if (feeVendor)\n feeVendor.textContent = fmt(vendorBig < 0n ? 0n : vendorBig);\n if (proceedBtn) proceedBtn.disabled = false;\n\n this._startQuoteTimer(payload.expiresAt);\n } catch (err) {\n console.error(\"[KwesPayWidget] Quote fetch failed:\", err.message);\n if (cryptoLine) {\n cryptoLine.textContent = \"Could not load rate — please try again.\";\n cryptoLine.classList.remove(\"loading\");\n }\n if (proceedBtn) proceedBtn.disabled = true;\n }\n }\n\n _startQuoteTimer(expiresAt) {\n const timerEl = document.getElementById(\"kwespay-quoteTimer\");\n const timerText = document.getElementById(\"kwespay-quoteTimerText\");\n if (!timerEl || !timerText) return;\n timerEl.style.display = \"flex\";\n\n const update = () => {\n const remaining = Math.max(0, new Date(expiresAt).getTime() - Date.now());\n const secs = Math.ceil(remaining / 1000);\n const mins = Math.floor(secs / 60);\n const s = secs % 60;\n timerText.textContent = `Price locks in ${mins}:${String(s).padStart(\n 2,\n \"0\"\n )}`;\n timerEl.className =\n \"kp-quote-timer\" +\n (secs <= 30 ? \" urgent\" : \"\") +\n (secs <= 0 ? \" expired\" : \"\");\n if (secs <= 0) {\n timerText.textContent = \"Refreshing your rate…\";\n const proceedBtn = document.getElementById(\"kwespay-proceedToPayment\");\n if (proceedBtn) proceedBtn.disabled = true;\n this._clearQuoteTimer();\n this._loadReviewStep();\n }\n };\n update();\n this.state.quoteTimerInterval = setInterval(update, 1000);\n }\n\n _clearQuoteTimer() {\n if (this.state.quoteTimerInterval) {\n clearInterval(this.state.quoteTimerInterval);\n this.state.quoteTimerInterval = null;\n }\n }\n\n // ── Payment processing ───────────────────────────────────────────────────────\n\n async _handlePaymentProcessing() {\n if (!this.state.currentPayload) {\n this._showError(\n \"Payment Error\",\n \"Something went wrong. Please go back and try again.\"\n );\n return;\n }\n\n try {\n this._clearQuoteTimer();\n this._goToStep(4);\n\n const setStatus = (title, text) => {\n const titleEl = document.getElementById(\"kwespay-processingTitle\");\n const textEl = document.getElementById(\"kwespay-processingText\");\n if (titleEl) titleEl.textContent = title;\n if (textEl) textEl.textContent = text;\n };\n\n const isWC = this.walletService.connectionType === \"walletconnect\";\n const isMobile = this.walletService.isMobile();\n const strictMobile = isWC && isMobile; // mobile WC path — no network switching, no RPC shortcuts\n const provider = this.walletService.getProvider();\n const targetChainId = this.state.selectedChainId;\n\n if (!provider) throw new Error(\"No wallet provider\");\n\n // ── Session liveness check ───────────────────────────────────────────────\n // Must come first — a stale WC session throws on any RPC call, and we want\n // a clean \"reconnect\" error rather than a cryptic provider error downstream.\n const alive = await this.walletService.isSessionAlive();\n if (!alive) {\n console.error(\n \"[KwesPay] Session liveness check failed — session appears stale\"\n );\n await this.walletService.disconnect();\n const err = new Error(\n \"Your wallet session expired. Please reconnect your wallet.\"\n );\n err.code = \"SESSION_EXPIRED\";\n throw err;\n }\n\n // ── Show mobile helper banner ────────────────────────────────────────────\n if (isMobile) {\n document\n .getElementById(\"kwespay-mobileTransactionInstruction\")\n ?.style.setProperty(\"display\", \"flex\");\n }\n\n // ── Chain validation ─────────────────────────────────────────────────────\n if (strictMobile) {\n // On mobile WC, eth_chainId goes to the wallet via the WC relay and\n // reflects the wallet's actual active chain — always call it live.\n // Never rely on session namespace account ordering (MetaMask puts\n // Mainnet first regardless of which chain the user is on).\n await this._assertMobileChain(provider, targetChainId);\n } else {\n // Desktop / injected — eth_chainId is reliable, switch if needed\n const rawChain = await provider.request({ method: \"eth_chainId\" });\n const currentChainId = parseInt(rawChain, 16);\n\n console.log(\"[KwesPay] Desktop chain check —\", {\n currentChainId,\n targetChainId,\n });\n\n if (currentChainId !== targetChainId) {\n setStatus(\n \"Switching network…\",\n \"Approve the network change in your wallet.\"\n );\n await this._switchNetworkSafe(\n targetChainId,\n this.state.selectedNetworkName,\n this.state.selectedRpcUrl,\n this.state.selectedToken,\n this.state.selectedTokenConfig.decimals\n );\n console.log(\"[KwesPay] Network switched ✅\");\n }\n }\n\n // ── Open wallet BEFORE sending tx (mobile WC only) ──────────────────────\n // We deep-link to the wallet before the JSON-RPC request lands so the\n // approval prompt appears immediately without the user having to manually\n // switch apps.\n if (strictMobile) {\n setStatus(\n \"Opening your wallet…\",\n \"Approve the payment in your wallet.\"\n );\n this.walletService._openWalletForApproval();\n // Give the OS time to foreground the wallet app before the RPC lands\n await new Promise((r) => setTimeout(r, 700));\n } else {\n setStatus(\n \"Waiting for approval…\",\n \"Confirm the transaction in your wallet.\"\n );\n }\n\n // ── Send transaction ─────────────────────────────────────────────────────\n const receipt = await this.paymentService.createPayment({\n payload: this.state.currentPayload,\n walletProvider: provider,\n onStatusUpdate: setStatus,\n });\n\n // ── Cleanup ──────────────────────────────────────────────────────────────\n document\n .getElementById(\"kwespay-mobileTransactionInstruction\")\n ?.style.setProperty(\"display\", \"none\");\n\n // ── Success UI ───────────────────────────────────────────────────────────\n const decimals = this.state.selectedTokenConfig?.decimals ?? 6;\n const amountBig = BigInt(this.state.currentPayload.amountBaseUnits);\n const cryptoDisplay = `${formatUnits(amountBig, decimals)} ${\n this.state.selectedToken\n }`;\n\n document.getElementById(\"kwespay-txHash\").textContent = truncateHash(\n receipt.hash\n );\n document.getElementById(\n \"kwespay-txFiatAmount\"\n ).textContent = `${this.config.amount} ${this.config.currency}`;\n document.getElementById(\"kwespay-txCryptoAmount\").textContent =\n cryptoDisplay;\n document.getElementById(\"kwespay-txNetwork\").textContent =\n this.state.selectedNetworkName;\n document.getElementById(\"kwespay-explorerLink\").href =\n NETWORK_CONFIGS[this.state.selectedNetwork].explorer + receipt.hash;\n\n this._goToStep(5);\n\n dispatchWidgetEvent(\"paymentSuccess\", {\n transactionReference: receipt.transactionReference,\n paymentIdBytes32: receipt.paymentIdBytes32,\n transactionHash: receipt.hash,\n fiatAmount: this.config.amount,\n currency: this.config.currency,\n token: this.state.selectedToken,\n network: this.state.selectedNetwork,\n });\n } catch (error) {\n console.error(\n \"[KwesPay] Payment error —\",\n error.code ?? \"UNKNOWN\",\n \":\",\n error.message\n );\n\n document\n .getElementById(\"kwespay-mobileTransactionInstruction\")\n ?.style.setProperty(\"display\", \"none\");\n\n const errorType = getErrorType(error);\n let title = \"Payment Failed\";\n let message = getErrorMessage(error, { token: this.state.selectedToken });\n\n if (error.code === \"SESSION_EXPIRED\") {\n title = \"Session Expired\";\n message = error.message;\n } else if (error.code === \"WRONG_NETWORK\") {\n title = \"Wrong Network\";\n message = error.message;\n } else if (errorType === \"USER_REJECTED\") {\n title = \"Transaction Cancelled\";\n message = \"You rejected the transaction in your wallet.\";\n } else if (errorType === \"INSUFFICIENT_BALANCE\") {\n title = \"Insufficient Balance\";\n }\n\n this._showError(title, message);\n dispatchWidgetEvent(\"paymentError\", { error: message, errorType });\n }\n }\n\n /**\n * Confirm the wallet is on the target chain before sending a transaction.\n * Retries up to 3 times with 1s delay to handle WC relay propagation lag.\n * Throws WRONG_NETWORK if the chain never matches.\n *\n * MOBILE WC ONLY — never call this on desktop/injected.\n *\n * @param {object} provider\n * @param {number} targetChainId\n */\n async _assertMobileChain(provider, targetChainId) {\n const MAX_ATTEMPTS = 3;\n const DELAY_MS = 1000;\n\n for (let attempt = 1; attempt <= MAX_ATTEMPTS; attempt++) {\n let currentChainId = null;\n\n try {\n const raw = await provider.request({ method: \"eth_chainId\" });\n currentChainId = parseInt(raw, 16);\n } catch (err) {\n console.error(\n `[KwesPay] eth_chainId RPC failed (attempt ${attempt}/${MAX_ATTEMPTS}):`,\n err.message\n );\n }\n\n console.log(\n `[KwesPay] Chain check attempt ${attempt}/${MAX_ATTEMPTS} —`,\n { currentChainId, targetChainId }\n );\n\n if (currentChainId === targetChainId) {\n console.log(\"[KwesPay] Chain confirmed ✅\", currentChainId);\n return;\n }\n\n if (attempt < MAX_ATTEMPTS) {\n await new Promise((r) => setTimeout(r, DELAY_MS));\n }\n }\n\n // All attempts failed — wallet is on wrong chain\n const err = new Error(\n `Please switch to ${this.state.selectedNetworkName} in your wallet and try again.`\n );\n err.code = \"WRONG_NETWORK\";\n throw err;\n }\n\n /**\n * Switch network for desktop/injected providers and poll until confirmed.\n * MUST NOT be called in strictMobile mode (mobile WC doesn't support\n * wallet_switchEthereumChain reliably).\n *\n * @param {number} chainId\n * @param {string} networkName\n * @param {string} rpcUrl\n * @param {string} tokenSymbol\n * @param {number} tokenDecimals\n */\n async _switchNetworkSafe(\n chainId,\n networkName,\n rpcUrl,\n tokenSymbol,\n tokenDecimals\n ) {\n // Capture before any async boundary — prevents `this` loss in callbacks\n const switchNetwork = this.walletService.switchNetwork;\n const provider = this.walletService.getProvider();\n\n if (!provider) throw new Error(\"[WalletService] No provider connected\");\n\n const toHex = (val) => {\n if (val == null) return null;\n try {\n const n =\n typeof val === \"string\"\n ? val.startsWith(\"0x\")\n ? parseInt(val, 16)\n : parseInt(val, 10)\n : Number(val);\n return isNaN(n) ? null : \"0x\" + n.toString(16);\n } catch {\n return null;\n }\n };\n\n const targetHex = toHex(chainId);\n\n // Check current chain — skip if already correct\n try {\n const currentHex = toHex(\n await provider.request({ method: \"eth_chainId\" })\n );\n if (currentHex && currentHex === targetHex) return; // already correct, silent return\n } catch (err) {\n console.warn(\n \"[KwesPay] Could not read chainId before switch:\",\n err.message\n );\n }\n\n // Issue the switch\n try {\n await switchNetwork(\n chainId,\n networkName,\n rpcUrl,\n tokenSymbol,\n tokenDecimals\n );\n } catch (err) {\n if (err.code === 4001) throw err; // user rejected\n // Some wallets throw even on success — continue to verify below\n console.warn(\n \"[KwesPay] switchNetwork threw (verifying anyway):\",\n err.message\n );\n }\n\n // Poll until confirmed or 15s timeout\n const POLL_MS = 500;\n const TIMEOUT_MS = 15_000;\n const started = Date.now();\n\n while (Date.now() - started < TIMEOUT_MS) {\n await new Promise((r) => setTimeout(r, POLL_MS));\n try {\n const currentHex = toHex(\n await provider.request({ method: \"eth_chainId\" })\n );\n if (currentHex && currentHex === targetHex) {\n console.log(\n `[KwesPay] Network switch confirmed after ${\n Date.now() - started\n }ms ✅`\n );\n return;\n }\n } catch (err) {\n console.warn(\"[KwesPay] Poll eth_chainId error:\", err.message);\n }\n }\n\n throw new Error(\n `Could not confirm network switch to ${networkName} after 15s. ` +\n `Please switch manually in your wallet and try again.`\n );\n }\n\n // ── Step navigation ──────────────────────────────────────────────────────────\n\n _goToStep(stepNumber) {\n document\n .querySelectorAll(\".kwespay-container .step\")\n .forEach((s) => s.classList.remove(\"active\", \"exiting\"));\n this._activateStep(stepNumber);\n this.state.currentStep = stepNumber;\n }\n\n _activateStep(stepNumber) {\n let targetStep;\n if (stepNumber === 0.5)\n targetStep = document.getElementById(\"kwespay-step0-invalid\");\n else if (typeof stepNumber === \"string\")\n targetStep = document.getElementById(`kwespay-step-${stepNumber}`);\n else targetStep = document.getElementById(`kwespay-step${stepNumber}`);\n\n if (targetStep) targetStep.classList.add(\"active\");\n else console.warn(`[KwesPayWidget] Step not found: ${stepNumber}`);\n }\n\n _removeCustomStep(id) {\n document.getElementById(id)?.remove();\n }\n\n _showError(title, message) {\n const titleEl = document.getElementById(\"kwespay-errorTitle\");\n const msgEl = document.getElementById(\"kwespay-errorMessage\");\n if (titleEl) titleEl.textContent = title;\n if (msgEl) msgEl.textContent = message;\n this._goToStep(6);\n }\n\n // ── Public API ───────────────────────────────────────────────────────────────\n\n async open() {\n const overlay = document.getElementById(\"kwespay-widget-overlay\");\n const container = document.getElementById(\"kwespay-widget-container\");\n if (!overlay || !container) return;\n\n container.classList.remove(\"closing\");\n overlay.classList.add(\"open\");\n document.body.classList.add(\"kwespay-open\");\n this.state.isOpen = true;\n\n await this._validateAPIKey();\n dispatchWidgetEvent(\"widgetOpened\", {});\n }\n\n close() {\n const overlay = document.getElementById(\"kwespay-widget-overlay\");\n const container = document.getElementById(\"kwespay-widget-container\");\n if (!overlay || !container) return;\n\n this._clearQuoteTimer();\n const closedAfterSuccess = this.state.currentStep === 5;\n const mobile = window.innerWidth <= 480;\n\n if (mobile) {\n container.classList.add(\"closing\");\n setTimeout(() => {\n container.classList.remove(\"closing\");\n overlay.classList.remove(\"open\");\n document.body.classList.remove(\"kwespay-open\");\n this.state.isOpen = false;\n dispatchWidgetEvent(\"widgetClosed\", {\n completedPayment: closedAfterSuccess,\n });\n }, 300);\n } else {\n overlay.classList.remove(\"open\");\n document.body.classList.remove(\"kwespay-open\");\n this.state.isOpen = false;\n dispatchWidgetEvent(\"widgetClosed\", {\n completedPayment: closedAfterSuccess,\n });\n }\n }\n\n isOpen() {\n return this.state.isOpen;\n }\n\n updateAmount(newAmount, newCurrency) {\n const amount = parseFloat(newAmount);\n if (isNaN(amount) || amount <= 0) return;\n this.config.amount = amount;\n if (\n newCurrency &&\n Object.values(SUPPORTED_CURRENCIES).includes(newCurrency)\n ) {\n this.config.currency = newCurrency;\n }\n document\n .querySelectorAll(\n '[id*=\"paymentAmount\"], [id*=\"summaryFiatAmount\"], [id*=\"txFiatAmount\"], [id*=\"reviewFiatAmount\"]'\n )\n .forEach((el) => {\n el.textContent = `${this.config.amount} ${this.config.currency}`;\n });\n dispatchWidgetEvent(\"amountUpdated\", {\n amount: this.config.amount,\n currency: this.config.currency,\n });\n }\n\n getState() {\n return { ...this.state, config: { ...this.config } };\n }\n\n _reset() {\n this._clearQuoteTimer();\n this._removeCustomStep(\"kwespay-step-wallet-picker\");\n this._removeCustomStep(\"kwespay-step-wc\");\n this.state.selectedNetwork = null;\n this.state.selectedNetworkName = \"\";\n this.state.selectedChainId = null;\n this.state.selectedRpcUrl = null;\n this.state.selectedContractAddress = null;\n this.state.selectedToken = null;\n this.state.selectedTokenConfig = null;\n this.state.currentPayload = null;\n this.state.wcUri = null;\n }\n\n destroy() {\n this._clearQuoteTimer();\n document.body.classList.remove(\"kwespay-open\");\n this.walletService?.disconnect();\n document.getElementById(\"kwespay-widget-overlay\")?.remove();\n document.getElementById(\"kwespay-widget-styles\")?.remove();\n this.state = null;\n this.config = null;\n this.walletService = null;\n this.paymentService = null;\n dispatchWidgetEvent(\"widgetDestroyed\", {});\n }\n}\n\nexport default KwesPayWidget;\n","/**\n * KwesPay Widget - Main entry point\n * @module @kwespay/widget\n */\n\nimport KwesPayWidget from \"./core/kwespayWidget.js\";\n\nexport default KwesPayWidget;\n"],"names":["PaymentService"],"mappings":"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A;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;;AAEA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;;;AAGA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA,CAAC;;AC73BM,SAAS,gBAAgB,CAAC,UAAU,EAAE,QAAQ,EAAE;AACvD,EAAE,OAAO;AACT;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,gEAAgE,EAAE,UAAU,CAAC,CAAC,EAAE,QAAQ,CAAC;AACzF;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,qCAAqC,EAAE,UAAU,CAAC,CAAC,EAAE,QAAQ,CAAC;AAC9D;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,oEAAoE,EAAE,UAAU,CAAC,CAAC,EAAE,QAAQ,CAAC;AAC7F;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;;AAEA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,6DAA6D,EAAE,UAAU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","x_google_ignoreList":[2]}
|