coinley-test 0.1.21 → 0.1.23
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/index.esm.js +5343 -16
- package/dist/index.esm.js.map +1 -1
- package/dist/index.umd.js +6 -50
- package/dist/index.umd.js.map +1 -1
- package/dist/style.css +1 -1
- package/dist/vanilla/coinley-vanilla.umd.js +8 -52
- package/dist/vanilla/coinley-vanilla.umd.js.map +1 -1
- package/dist/vanilla/style.css +1 -1
- package/package.json +2 -1
- package/dist/browser-DHO2FbBz.mjs +0 -449
- package/dist/browser-DHO2FbBz.mjs.map +0 -1
- package/dist/ccip-CTWZvyt_.mjs +0 -164
- package/dist/ccip-CTWZvyt_.mjs.map +0 -1
- package/dist/hooks.module-Bfcqh_BB.mjs +0 -505
- package/dist/hooks.module-Bfcqh_BB.mjs.map +0 -1
- package/dist/index-7kjDlBax.mjs +0 -21873
- package/dist/index-7kjDlBax.mjs.map +0 -1
- package/dist/index-C-uwckkC.mjs +0 -11407
- package/dist/index-C-uwckkC.mjs.map +0 -1
- package/dist/index-gav4-Rkv.mjs +0 -21884
- package/dist/index-gav4-Rkv.mjs.map +0 -1
- package/dist/metamask-sdk-DsnqfOjb.mjs +0 -15553
- package/dist/metamask-sdk-DsnqfOjb.mjs.map +0 -1
- package/dist/secp256k1-VR3K94eb.mjs +0 -1890
- package/dist/secp256k1-VR3K94eb.mjs.map +0 -1
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index-C-uwckkC.mjs","sources":["../node_modules/react/cjs/react-jsx-runtime.production.min.js","../node_modules/react/jsx-runtime.js","../node_modules/viem/_esm/errors/version.js","../node_modules/viem/_esm/errors/base.js","../node_modules/viem/_esm/errors/encoding.js","../node_modules/viem/_esm/errors/data.js","../node_modules/viem/_esm/utils/data/pad.js","../node_modules/viem/_esm/utils/data/isHex.js","../node_modules/viem/_esm/utils/data/size.js","../node_modules/viem/_esm/utils/data/trim.js","../node_modules/viem/_esm/utils/encoding/toBytes.js","../node_modules/viem/_esm/utils/encoding/fromHex.js","../node_modules/viem/_esm/utils/encoding/toHex.js","../node_modules/viem/_esm/utils/data/concat.js","../node_modules/viem/_esm/errors/address.js","../node_modules/viem/_esm/utils/lru.js","../node_modules/viem/node_modules/@noble/hashes/esm/_u64.js","../node_modules/viem/node_modules/@noble/hashes/esm/crypto.js","../node_modules/viem/node_modules/@noble/hashes/esm/utils.js","../node_modules/viem/node_modules/@noble/hashes/esm/sha3.js","../node_modules/viem/_esm/utils/hash/keccak256.js","../node_modules/viem/_esm/utils/address/getAddress.js","../node_modules/viem/_esm/utils/address/isAddress.js","../node_modules/viem/_esm/utils/data/slice.js","../node_modules/viem/_esm/accounts/utils/parseAccount.js","../node_modules/viem/_esm/errors/account.js","../node_modules/viem/_esm/accounts/utils/publicKeyToAddress.js","../node_modules/viem/_esm/utils/signature/recoverPublicKey.js","../node_modules/viem/_esm/utils/signature/recoverAddress.js","../node_modules/viem/_esm/errors/cursor.js","../node_modules/viem/_esm/utils/cursor.js","../node_modules/viem/_esm/utils/encoding/toRlp.js","../node_modules/viem/_esm/utils/authorization/hashAuthorization.js","../node_modules/viem/_esm/utils/authorization/recoverAuthorizationAddress.js","../node_modules/viem/_esm/errors/chain.js","../node_modules/viem/_esm/utils/chain/assertCurrentChain.js","../node_modules/viem/_esm/constants/unit.js","../node_modules/viem/_esm/utils/unit/formatUnits.js","../node_modules/viem/_esm/utils/unit/formatGwei.js","../node_modules/viem/_esm/errors/node.js","../node_modules/viem/_esm/utils/unit/formatEther.js","../node_modules/viem/_esm/errors/transaction.js","../node_modules/viem/_esm/utils/stringify.js","../node_modules/viem/_esm/errors/utils.js","../node_modules/viem/_esm/errors/request.js","../node_modules/viem/_esm/errors/rpc.js","../node_modules/viem/_esm/utils/errors/getNodeError.js","../node_modules/viem/_esm/utils/errors/getTransactionError.js","../node_modules/viem/_esm/utils/formatters/extract.js","../node_modules/viem/_esm/utils/formatters/formatter.js","../node_modules/viem/_esm/utils/formatters/transactionRequest.js","../node_modules/viem/_esm/utils/getAction.js","../node_modules/viem/_esm/constants/number.js","../node_modules/viem/_esm/utils/transaction/assertRequest.js","../node_modules/viem/_esm/actions/public/getChainId.js","../node_modules/viem/_esm/errors/fee.js","../node_modules/viem/_esm/errors/block.js","../node_modules/viem/_esm/utils/formatters/transaction.js","../node_modules/viem/_esm/utils/formatters/block.js","../node_modules/viem/_esm/actions/public/getBlock.js","../node_modules/viem/_esm/actions/public/getGasPrice.js","../node_modules/viem/_esm/actions/public/estimateMaxPriorityFeePerGas.js","../node_modules/viem/_esm/actions/public/estimateFeesPerGas.js","../node_modules/viem/_esm/errors/estimateGas.js","../node_modules/viem/_esm/utils/errors/getEstimateGasError.js","../node_modules/viem/_esm/errors/stateOverride.js","../node_modules/viem/_esm/utils/stateOverride.js","../node_modules/viem/_esm/actions/public/getBalance.js","../node_modules/viem/_esm/actions/public/estimateGas.js","../node_modules/viem/_esm/actions/public/getTransactionCount.js","../node_modules/viem/_esm/utils/blob/blobsToCommitments.js","../node_modules/viem/_esm/utils/blob/blobsToProofs.js","../node_modules/viem/node_modules/@noble/hashes/esm/_md.js","../node_modules/viem/node_modules/@noble/hashes/esm/sha2.js","../node_modules/viem/node_modules/@noble/hashes/esm/sha256.js","../node_modules/viem/_esm/utils/hash/sha256.js","../node_modules/viem/_esm/utils/blob/commitmentToVersionedHash.js","../node_modules/viem/_esm/utils/blob/commitmentsToVersionedHashes.js","../node_modules/viem/_esm/constants/blob.js","../node_modules/viem/_esm/constants/kzg.js","../node_modules/viem/_esm/errors/blob.js","../node_modules/viem/_esm/utils/blob/toBlobs.js","../node_modules/viem/_esm/utils/blob/toBlobSidecars.js","../node_modules/viem/_esm/utils/transaction/getTransactionType.js","../node_modules/viem/_esm/actions/wallet/prepareTransactionRequest.js","../node_modules/viem/_esm/actions/wallet/sendRawTransaction.js","../node_modules/viem/_esm/actions/wallet/sendTransaction.js","../node_modules/viem/_esm/utils/promise/withResolvers.js","../node_modules/viem/_esm/utils/promise/createBatchScheduler.js","../node_modules/viem/_esm/utils/formatters/log.js","../node_modules/viem/_esm/utils/formatters/transactionReceipt.js","../node_modules/viem/_esm/utils/promise/withDedupe.js","../node_modules/viem/_esm/utils/wait.js","../node_modules/viem/_esm/utils/promise/withRetry.js","../node_modules/viem/_esm/utils/buildRequest.js","../node_modules/viem/_esm/utils/chain/defineChain.js","../node_modules/viem/_esm/utils/promise/withTimeout.js","../node_modules/viem/_esm/utils/rpc/id.js","../node_modules/viem/_esm/utils/rpc/http.js","../node_modules/viem/_esm/utils/transaction/assertTransaction.js","../node_modules/viem/_esm/utils/transaction/serializeAccessList.js","../node_modules/viem/_esm/utils/transaction/serializeTransaction.js","../node_modules/viem/_esm/utils/authorization/serializeAuthorizationList.js","../node_modules/@wagmi/core/dist/esm/utils/getAction.js","../node_modules/@wagmi/core/dist/esm/version.js","../node_modules/@wagmi/core/dist/esm/utils/getVersion.js","../node_modules/@wagmi/core/dist/esm/errors/base.js","../node_modules/@wagmi/core/dist/esm/errors/config.js","../node_modules/@wagmi/core/dist/esm/actions/connect.js","../node_modules/viem/_esm/utils/uid.js","../node_modules/viem/_esm/clients/createClient.js","../node_modules/viem/_esm/clients/transports/createTransport.js","../node_modules/viem/_esm/clients/transports/custom.js","../node_modules/viem/_esm/errors/transport.js","../node_modules/viem/_esm/clients/transports/http.js","../node_modules/@wagmi/core/dist/esm/actions/getConnectorClient.js","../node_modules/@wagmi/core/dist/esm/actions/disconnect.js","../node_modules/@wagmi/core/dist/esm/actions/getAccount.js","../node_modules/@wagmi/core/dist/esm/actions/sendTransaction.js","../node_modules/@wagmi/core/dist/esm/errors/connector.js","../node_modules/@wagmi/core/dist/esm/actions/switchChain.js","../node_modules/@wagmi/core/dist/esm/connectors/createConnector.js","../node_modules/@wagmi/core/dist/esm/connectors/injected.js","../node_modules/mipd/dist/esm/utils.js","../node_modules/mipd/dist/esm/store.js","../node_modules/@wagmi/core/node_modules/zustand/esm/middleware.mjs","../node_modules/@wagmi/core/node_modules/zustand/esm/vanilla.mjs","../node_modules/eventemitter3/index.js","../node_modules/@wagmi/core/dist/esm/createEmitter.js","../node_modules/@wagmi/core/dist/esm/utils/deserialize.js","../node_modules/@wagmi/core/dist/esm/utils/serialize.js","../node_modules/@wagmi/core/dist/esm/createStorage.js","../node_modules/@wagmi/core/dist/esm/utils/uid.js","../node_modules/@wagmi/core/dist/esm/createConfig.js","../node_modules/@wagmi/core/dist/esm/utils/extractRpcUrls.js","../node_modules/viem/_esm/op-stack/contracts.js","../node_modules/viem/_esm/op-stack/formatters.js","../node_modules/viem/_esm/op-stack/serializers.js","../node_modules/viem/_esm/op-stack/chainConfig.js","../node_modules/viem/_esm/chains/definitions/arbitrum.js","../node_modules/viem/_esm/chains/definitions/avalanche.js","../node_modules/viem/_esm/chains/definitions/bsc.js","../node_modules/viem/_esm/chains/definitions/mainnet.js","../node_modules/viem/_esm/chains/definitions/optimism.js","../node_modules/viem/_esm/chains/definitions/polygon.js","../node_modules/@wagmi/connectors/dist/esm/coinbaseWallet.js","../node_modules/@wagmi/connectors/dist/esm/metaMask.js","../src/assets/Logomark.png","../src/utils/MobileUtils.js","../src/components/EnhancedSimpleCoinleyPayment.jsx","../src/CoinleyProvider.jsx","../src/PaymentAPI.js","../src/CoinleyPayment.jsx","../src/components/SimpleCoinleyPayment.jsx","../node_modules/react-dom/client.js","../src/vanilla/index.js","../src/index.js"],"sourcesContent":["/**\n * @license React\n * react-jsx-runtime.production.min.js\n *\n * Copyright (c) Facebook, Inc. and its affiliates.\n *\n * This source code is licensed under the MIT license found in the\n * LICENSE file in the root directory of this source tree.\n */\n'use strict';var f=require(\"react\"),k=Symbol.for(\"react.element\"),l=Symbol.for(\"react.fragment\"),m=Object.prototype.hasOwnProperty,n=f.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED.ReactCurrentOwner,p={key:!0,ref:!0,__self:!0,__source:!0};\nfunction q(c,a,g){var b,d={},e=null,h=null;void 0!==g&&(e=\"\"+g);void 0!==a.key&&(e=\"\"+a.key);void 0!==a.ref&&(h=a.ref);for(b in a)m.call(a,b)&&!p.hasOwnProperty(b)&&(d[b]=a[b]);if(c&&c.defaultProps)for(b in a=c.defaultProps,a)void 0===d[b]&&(d[b]=a[b]);return{$$typeof:k,type:c,key:e,ref:h,props:d,_owner:n.current}}exports.Fragment=l;exports.jsx=q;exports.jsxs=q;\n","'use strict';\n\nif (process.env.NODE_ENV === 'production') {\n module.exports = require('./cjs/react-jsx-runtime.production.min.js');\n} else {\n module.exports = require('./cjs/react-jsx-runtime.development.js');\n}\n","export const version = '2.34.0';\n//# sourceMappingURL=version.js.map","import { version } from './version.js';\nlet errorConfig = {\n getDocsUrl: ({ docsBaseUrl, docsPath = '', docsSlug, }) => docsPath\n ? `${docsBaseUrl ?? 'https://viem.sh'}${docsPath}${docsSlug ? `#${docsSlug}` : ''}`\n : undefined,\n version: `viem@${version}`,\n};\nexport function setErrorConfig(config) {\n errorConfig = config;\n}\nexport class 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//# sourceMappingURL=base.js.map","import { BaseError } from './base.js';\nexport class 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}\nexport class InvalidBytesBooleanError extends BaseError {\n constructor(bytes) {\n super(`Bytes value \"${bytes}\" is not a valid boolean. The bytes array must contain a single byte of either a 0 or 1 value.`, {\n name: 'InvalidBytesBooleanError',\n });\n }\n}\nexport class InvalidHexBooleanError extends BaseError {\n constructor(hex) {\n super(`Hex value \"${hex}\" is not a valid boolean. The hex value must be \"0x0\" (false) or \"0x1\" (true).`, { name: 'InvalidHexBooleanError' });\n }\n}\nexport class InvalidHexValueError extends BaseError {\n constructor(value) {\n super(`Hex value \"${value}\" is an odd length (${value.length}). It must be an even length.`, { name: 'InvalidHexValueError' });\n }\n}\nexport class SizeOverflowError extends BaseError {\n constructor({ givenSize, maxSize }) {\n super(`Size cannot exceed ${maxSize} bytes. Given size: ${givenSize} bytes.`, { name: 'SizeOverflowError' });\n }\n}\n//# sourceMappingURL=encoding.js.map","import { BaseError } from './base.js';\nexport class 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}\nexport class 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}\nexport class InvalidBytesLengthError extends BaseError {\n constructor({ size, targetSize, type, }) {\n super(`${type.charAt(0).toUpperCase()}${type\n .slice(1)\n .toLowerCase()} is expected to be ${targetSize} ${type} long, but is ${size} ${type} long.`, { name: 'InvalidBytesLengthError' });\n }\n}\n//# sourceMappingURL=data.js.map","import { SizeExceedsPaddingSizeError, } from '../../errors/data.js';\nexport function pad(hexOrBytes, { dir, size = 32 } = {}) {\n if (typeof hexOrBytes === 'string')\n return padHex(hexOrBytes, { dir, size });\n return padBytes(hexOrBytes, { dir, size });\n}\nexport function 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}\nexport function 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//# sourceMappingURL=pad.js.map","export function 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//# sourceMappingURL=isHex.js.map","import { isHex } from './isHex.js';\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 */\nexport function size(value) {\n if (isHex(value, { strict: false }))\n return Math.ceil((value.length - 2) / 2);\n return value.length;\n}\n//# sourceMappingURL=size.js.map","export function trim(hexOrBytes, { dir = 'left' } = {}) {\n let data = typeof hexOrBytes === 'string' ? hexOrBytes.replace('0x', '') : hexOrBytes;\n let sliceLength = 0;\n for (let i = 0; i < data.length - 1; i++) {\n if (data[dir === 'left' ? i : data.length - i - 1].toString() === '0')\n sliceLength++;\n else\n break;\n }\n data =\n dir === 'left'\n ? data.slice(sliceLength)\n : data.slice(0, data.length - sliceLength);\n if (typeof hexOrBytes === 'string') {\n if (data.length === 1 && dir === 'right')\n data = `${data}0`;\n return `0x${data.length % 2 === 1 ? `0${data}` : data}`;\n }\n return data;\n}\n//# sourceMappingURL=trim.js.map","import { BaseError } from '../../errors/base.js';\nimport { isHex } from '../data/isHex.js';\nimport { pad } from '../data/pad.js';\nimport { assertSize } from './fromHex.js';\nimport { numberToHex, } from './toHex.js';\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 */\nexport function toBytes(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 */\nexport function 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 */\nexport function 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 */\nexport function 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 */\nexport function 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//# sourceMappingURL=toBytes.js.map","import { InvalidHexBooleanError, SizeOverflowError, } from '../../errors/encoding.js';\nimport { size as size_ } from '../data/size.js';\nimport { trim } from '../data/trim.js';\nimport { hexToBytes } from './toBytes.js';\nexport function assertSize(hexOrBytes, { size }) {\n if (size_(hexOrBytes) > size)\n throw new SizeOverflowError({\n givenSize: size_(hexOrBytes),\n maxSize: size,\n });\n}\n/**\n * Decodes a hex string into a string, number, bigint, boolean, or byte array.\n *\n * - Docs: https://viem.sh/docs/utilities/fromHex\n * - Example: https://viem.sh/docs/utilities/fromHex#usage\n *\n * @param hex Hex string to decode.\n * @param toOrOpts Type to convert to or options.\n * @returns Decoded value.\n *\n * @example\n * import { fromHex } from 'viem'\n * const data = fromHex('0x1a4', 'number')\n * // 420\n *\n * @example\n * import { fromHex } from 'viem'\n * const data = fromHex('0x48656c6c6f20576f726c6421', 'string')\n * // 'Hello world'\n *\n * @example\n * import { fromHex } from 'viem'\n * const data = fromHex('0x48656c6c6f20576f726c64210000000000000000000000000000000000000000', {\n * size: 32,\n * to: 'string'\n * })\n * // 'Hello world'\n */\nexport function fromHex(hex, toOrOpts) {\n const opts = typeof toOrOpts === 'string' ? { to: toOrOpts } : toOrOpts;\n const to = opts.to;\n if (to === 'number')\n return hexToNumber(hex, opts);\n if (to === 'bigint')\n return hexToBigInt(hex, opts);\n if (to === 'string')\n return hexToString(hex, opts);\n if (to === 'boolean')\n return hexToBool(hex, opts);\n return hexToBytes(hex, opts);\n}\n/**\n * Decodes a hex value into a bigint.\n *\n * - Docs: https://viem.sh/docs/utilities/fromHex#hextobigint\n *\n * @param hex Hex value to decode.\n * @param opts Options.\n * @returns BigInt value.\n *\n * @example\n * import { hexToBigInt } from 'viem'\n * const data = hexToBigInt('0x1a4', { signed: true })\n * // 420n\n *\n * @example\n * import { hexToBigInt } from 'viem'\n * const data = hexToBigInt('0x00000000000000000000000000000000000000000000000000000000000001a4', { size: 32 })\n * // 420n\n */\nexport function hexToBigInt(hex, opts = {}) {\n const { signed } = opts;\n if (opts.size)\n assertSize(hex, { size: opts.size });\n const value = BigInt(hex);\n if (!signed)\n return value;\n const size = (hex.length - 2) / 2;\n const max = (1n << (BigInt(size) * 8n - 1n)) - 1n;\n if (value <= max)\n return value;\n return value - BigInt(`0x${'f'.padStart(size * 2, 'f')}`) - 1n;\n}\n/**\n * Decodes a hex value into a boolean.\n *\n * - Docs: https://viem.sh/docs/utilities/fromHex#hextobool\n *\n * @param hex Hex value to decode.\n * @param opts Options.\n * @returns Boolean value.\n *\n * @example\n * import { hexToBool } from 'viem'\n * const data = hexToBool('0x01')\n * // true\n *\n * @example\n * import { hexToBool } from 'viem'\n * const data = hexToBool('0x0000000000000000000000000000000000000000000000000000000000000001', { size: 32 })\n * // true\n */\nexport function hexToBool(hex_, opts = {}) {\n let hex = hex_;\n if (opts.size) {\n assertSize(hex, { size: opts.size });\n hex = trim(hex);\n }\n if (trim(hex) === '0x00')\n return false;\n if (trim(hex) === '0x01')\n return true;\n throw new InvalidHexBooleanError(hex);\n}\n/**\n * Decodes a hex string into a number.\n *\n * - Docs: https://viem.sh/docs/utilities/fromHex#hextonumber\n *\n * @param hex Hex value to decode.\n * @param opts Options.\n * @returns Number value.\n *\n * @example\n * import { hexToNumber } from 'viem'\n * const data = hexToNumber('0x1a4')\n * // 420\n *\n * @example\n * import { hexToNumber } from 'viem'\n * const data = hexToBigInt('0x00000000000000000000000000000000000000000000000000000000000001a4', { size: 32 })\n * // 420\n */\nexport function hexToNumber(hex, opts = {}) {\n return Number(hexToBigInt(hex, opts));\n}\n/**\n * Decodes a hex value into a UTF-8 string.\n *\n * - Docs: https://viem.sh/docs/utilities/fromHex#hextostring\n *\n * @param hex Hex value to decode.\n * @param opts Options.\n * @returns String value.\n *\n * @example\n * import { hexToString } from 'viem'\n * const data = hexToString('0x48656c6c6f20576f726c6421')\n * // 'Hello world!'\n *\n * @example\n * import { hexToString } from 'viem'\n * const data = hexToString('0x48656c6c6f20576f726c64210000000000000000000000000000000000000000', {\n * size: 32,\n * })\n * // 'Hello world'\n */\nexport function hexToString(hex, opts = {}) {\n let bytes = hexToBytes(hex);\n if (opts.size) {\n assertSize(bytes, { size: opts.size });\n bytes = trim(bytes, { dir: 'right' });\n }\n return new TextDecoder().decode(bytes);\n}\n//# sourceMappingURL=fromHex.js.map","import { IntegerOutOfRangeError, } from '../../errors/encoding.js';\nimport { pad } from '../data/pad.js';\nimport { assertSize } from './fromHex.js';\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 */\nexport function 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 */\nexport function 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 */\nexport function 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 */\nexport function 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 = /*#__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 */\nexport function stringToHex(value_, opts = {}) {\n const value = encoder.encode(value_);\n return bytesToHex(value, opts);\n}\n//# sourceMappingURL=toHex.js.map","export function concat(values) {\n if (typeof values[0] === 'string')\n return concatHex(values);\n return concatBytes(values);\n}\nexport function 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}\nexport function concatHex(values) {\n return `0x${values.reduce((acc, x) => acc + x.replace('0x', ''), '')}`;\n}\n//# sourceMappingURL=concat.js.map","import { BaseError } from './base.js';\nexport class 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//# sourceMappingURL=address.js.map","/**\n * Map with a LRU (Least recently used) policy.\n *\n * @link https://en.wikipedia.org/wiki/Cache_replacement_policies#LRU\n */\nexport class 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) && value !== undefined) {\n this.delete(key);\n super.set(key, value);\n }\n return value;\n }\n set(key, value) {\n super.set(key, value);\n if (this.maxSize && this.size > this.maxSize) {\n const firstKey = this.keys().next().value;\n if (firstKey)\n this.delete(firstKey);\n }\n return this;\n }\n}\n//# sourceMappingURL=lru.js.map","/**\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}\nconst toBig = (h, l) => (BigInt(h >>> 0) << _32n) | BigInt(l >>> 0);\n// for Shift in [0, 32)\nconst shrSH = (h, _l, s) => h >>> s;\nconst shrSL = (h, l, s) => (h << (32 - s)) | (l >>> s);\n// Right rotate for Shift in [1, 32)\nconst rotrSH = (h, l, s) => (h >>> s) | (l << (32 - s));\nconst rotrSL = (h, l, s) => (h << (32 - s)) | (l >>> s);\n// Right rotate for Shift in (32, 64), NOTE: 32 is special case.\nconst rotrBH = (h, l, s) => (h << (64 - s)) | (l >>> (s - 32));\nconst rotrBL = (h, l, s) => (h >>> (s - 32)) | (l << (64 - s));\n// Right rotate for shift===32 (just swaps l&h)\nconst rotr32H = (_h, l) => l;\nconst rotr32L = (h, _l) => h;\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// JS uses 32-bit signed integers for bitwise operations which means we cannot\n// simple take carry out of low bit sum by shift, we need to use division.\nfunction add(Ah, Al, Bh, Bl) {\n const l = (Al >>> 0) + (Bl >>> 0);\n return { h: (Ah + Bh + ((l / 2 ** 32) | 0)) | 0, l: l | 0 };\n}\n// Addition with more than 2 elements\nconst add3L = (Al, Bl, Cl) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0);\nconst add3H = (low, Ah, Bh, Ch) => (Ah + Bh + Ch + ((low / 2 ** 32) | 0)) | 0;\nconst add4L = (Al, Bl, Cl, Dl) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0);\nconst add4H = (low, Ah, Bh, Ch, Dh) => (Ah + Bh + Ch + Dh + ((low / 2 ** 32) | 0)) | 0;\nconst add5L = (Al, Bl, Cl, Dl, El) => (Al >>> 0) + (Bl >>> 0) + (Cl >>> 0) + (Dl >>> 0) + (El >>> 0);\nconst add5H = (low, Ah, Bh, Ch, Dh, Eh) => (Ah + Bh + Ch + Dh + Eh + ((low / 2 ** 32) | 0)) | 0;\n// prettier-ignore\nexport { add, add3H, add3L, add4H, add4L, add5H, add5L, fromBig, rotlBH, rotlBL, rotlSH, rotlSL, rotr32H, rotr32L, rotrBH, rotrBL, rotrSH, rotrSL, shrSH, shrSL, split, toBig };\n// prettier-ignore\nconst u64 = {\n fromBig, split, toBig,\n shrSH, shrSL,\n rotrSH, rotrSL, rotrBH, rotrBL,\n rotr32H, rotr32L,\n rotlSH, rotlSL, rotlBH, rotlBL,\n add, add3L, add3H, add4L, add4H, add5H, add5L,\n};\nexport default u64;\n//# sourceMappingURL=_u64.js.map","export const crypto = typeof globalThis === 'object' && 'crypto' in globalThis ? globalThis.crypto : undefined;\n//# sourceMappingURL=crypto.js.map","/**\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.\nimport { crypto } from '@noble/hashes/crypto';\n/** Checks if something is Uint8Array. Be careful: nodejs Buffer will return true. */\nexport function isBytes(a) {\n return a instanceof Uint8Array || (ArrayBuffer.isView(a) && a.constructor.name === 'Uint8Array');\n}\n/** Asserts something is positive integer. */\nexport function anumber(n) {\n if (!Number.isSafeInteger(n) || n < 0)\n throw new Error('positive integer expected, got ' + n);\n}\n/** Asserts something is Uint8Array. */\nexport function 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 something is hash */\nexport function ahash(h) {\n if (typeof h !== 'function' || typeof h.create !== 'function')\n throw new Error('Hash should be wrapped by utils.createHasher');\n anumber(h.outputLen);\n anumber(h.blockLen);\n}\n/** Asserts a hash instance has not been destroyed / finished */\nexport function 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 */\nexport function 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 u8. */\nexport function u8(arr) {\n return new Uint8Array(arr.buffer, arr.byteOffset, arr.byteLength);\n}\n/** Cast u8 / u16 / u32 to u32. */\nexport function 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. */\nexport function clean(...arrays) {\n for (let i = 0; i < arrays.length; i++) {\n arrays[i].fill(0);\n }\n}\n/** Create DataView of an array for easy byte-level manipulation. */\nexport function createView(arr) {\n return new DataView(arr.buffer, arr.byteOffset, arr.byteLength);\n}\n/** The rotate right (circular right shift) operation for uint32 */\nexport function rotr(word, shift) {\n return (word << (32 - shift)) | (word >>> shift);\n}\n/** The rotate left (circular left shift) operation for uint32 */\nexport function rotl(word, shift) {\n return (word << shift) | ((word >>> (32 - shift)) >>> 0);\n}\n/** Is current platform little-endian? Most are. Big-Endian platform: IBM */\nexport const isLE = /* @__PURE__ */ (() => new Uint8Array(new Uint32Array([0x11223344]).buffer)[0] === 0x44)();\n/** The byte swap operation for uint32 */\nexport function byteSwap(word) {\n return (((word << 24) & 0xff000000) |\n ((word << 8) & 0xff0000) |\n ((word >>> 8) & 0xff00) |\n ((word >>> 24) & 0xff));\n}\n/** Conditionally byte swap if on a big-endian platform */\nexport const swap8IfBE = isLE\n ? (n) => n\n : (n) => byteSwap(n);\n/** @deprecated */\nexport const byteSwapIfBE = swap8IfBE;\n/** In place byte swap for Uint32Array */\nexport function byteSwap32(arr) {\n for (let i = 0; i < arr.length; i++) {\n arr[i] = byteSwap(arr[i]);\n }\n return arr;\n}\nexport const swap32IfBE = isLE\n ? (u) => u\n : byteSwap32;\n// Built-in hex conversion https://caniuse.com/mdn-javascript_builtins_uint8array_fromhex\nconst hasHexBuiltin = /* @__PURE__ */ (() => \n// @ts-ignore\ntypeof Uint8Array.from([]).toHex === 'function' && typeof Uint8Array.fromHex === 'function')();\n// Array where index 0xf0 (240) is mapped to string 'f0'\nconst hexes = /* @__PURE__ */ Array.from({ length: 256 }, (_, i) => i.toString(16).padStart(2, '0'));\n/**\n * Convert byte array to hex string. Uses built-in function, when available.\n * @example bytesToHex(Uint8Array.from([0xca, 0xfe, 0x01, 0x23])) // 'cafe0123'\n */\nexport function bytesToHex(bytes) {\n abytes(bytes);\n // @ts-ignore\n if (hasHexBuiltin)\n return bytes.toHex();\n // pre-caching improves the speed 6x\n let hex = '';\n for (let i = 0; i < bytes.length; i++) {\n hex += hexes[bytes[i]];\n }\n return hex;\n}\n// We use optimized technique to convert hex string to byte array\nconst asciis = { _0: 48, _9: 57, A: 65, F: 70, a: 97, f: 102 };\nfunction asciiToBase16(ch) {\n if (ch >= asciis._0 && ch <= asciis._9)\n return ch - asciis._0; // '2' => 50-48\n if (ch >= asciis.A && ch <= asciis.F)\n return ch - (asciis.A - 10); // 'B' => 66-(65-10)\n if (ch >= asciis.a && ch <= asciis.f)\n return ch - (asciis.a - 10); // 'b' => 98-(97-10)\n return;\n}\n/**\n * Convert hex string to byte array. Uses built-in function, when available.\n * @example hexToBytes('cafe0123') // Uint8Array.from([0xca, 0xfe, 0x01, 0x23])\n */\nexport function hexToBytes(hex) {\n if (typeof hex !== 'string')\n throw new Error('hex string expected, got ' + typeof hex);\n // @ts-ignore\n if (hasHexBuiltin)\n return Uint8Array.fromHex(hex);\n const hl = hex.length;\n const al = hl / 2;\n if (hl % 2)\n throw new Error('hex string expected, got unpadded hex of length ' + hl);\n const array = new Uint8Array(al);\n for (let ai = 0, hi = 0; ai < al; ai++, hi += 2) {\n const n1 = asciiToBase16(hex.charCodeAt(hi));\n const n2 = asciiToBase16(hex.charCodeAt(hi + 1));\n if (n1 === undefined || n2 === undefined) {\n const char = hex[hi] + hex[hi + 1];\n throw new Error('hex string expected, got non-hex character \"' + char + '\" at index ' + hi);\n }\n array[ai] = n1 * 16 + n2; // multiply first octet, e.g. 'a3' => 10*16+3 => 160 + 3 => 163\n }\n return array;\n}\n/**\n * There is no setImmediate in browser and setTimeout is slow.\n * Call of async fn will return Promise, which will be fullfiled only on\n * next scheduler queue processing step and this is exactly what we need.\n */\nexport const nextTick = async () => { };\n/** Returns control to thread each 'tick' ms to avoid blocking. */\nexport async function asyncLoop(iters, tick, cb) {\n let ts = Date.now();\n for (let i = 0; i < iters; i++) {\n cb(i);\n // Date.now() is not monotonic, so in case if clock goes backwards we return return control too\n const diff = Date.now() - ts;\n if (diff >= 0 && diff < tick)\n continue;\n await nextTick();\n ts += diff;\n }\n}\n/**\n * Converts string to bytes using UTF8 encoding.\n * @example utf8ToBytes('abc') // Uint8Array.from([97, 98, 99])\n */\nexport function 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 * Converts bytes to string using UTF8 encoding.\n * @example bytesToUtf8(Uint8Array.from([97, 98, 99])) // 'abc'\n */\nexport function bytesToUtf8(bytes) {\n return new TextDecoder().decode(bytes);\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 */\nexport function toBytes(data) {\n if (typeof data === 'string')\n data = utf8ToBytes(data);\n abytes(data);\n return data;\n}\n/**\n * Helper for KDFs: consumes uint8array or string.\n * When string is passed, does utf8 decoding, using TextDecoder.\n */\nexport function kdfInputToBytes(data) {\n if (typeof data === 'string')\n data = utf8ToBytes(data);\n abytes(data);\n return data;\n}\n/** Copies several Uint8Arrays into one. */\nexport function concatBytes(...arrays) {\n let sum = 0;\n for (let i = 0; i < arrays.length; i++) {\n const a = arrays[i];\n abytes(a);\n sum += a.length;\n }\n const res = new Uint8Array(sum);\n for (let i = 0, pad = 0; i < arrays.length; i++) {\n const a = arrays[i];\n res.set(a, pad);\n pad += a.length;\n }\n return res;\n}\nexport function checkOpts(defaults, opts) {\n if (opts !== undefined && {}.toString.call(opts) !== '[object Object]')\n throw new Error('options should be object or undefined');\n const merged = Object.assign(defaults, opts);\n return merged;\n}\n/** For runtime check if class implements interface */\nexport class Hash {\n}\n/** Wraps hash function, creating an interface on top of it */\nexport function 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}\nexport function createOptHasher(hashCons) {\n const hashC = (msg, opts) => hashCons(opts).update(toBytes(msg)).digest();\n const tmp = hashCons({});\n hashC.outputLen = tmp.outputLen;\n hashC.blockLen = tmp.blockLen;\n hashC.create = (opts) => hashCons(opts);\n return hashC;\n}\nexport function createXOFer(hashCons) {\n const hashC = (msg, opts) => hashCons(opts).update(toBytes(msg)).digest();\n const tmp = hashCons({});\n hashC.outputLen = tmp.outputLen;\n hashC.blockLen = tmp.blockLen;\n hashC.create = (opts) => hashCons(opts);\n return hashC;\n}\nexport const wrapConstructor = createHasher;\nexport const wrapConstructorWithOpts = createOptHasher;\nexport const wrapXOFConstructorWithOpts = createXOFer;\n/** Cryptographically secure PRNG. Uses internal OS-level `crypto.getRandomValues`. */\nexport function randomBytes(bytesLength = 32) {\n if (crypto && typeof crypto.getRandomValues === 'function') {\n return crypto.getRandomValues(new Uint8Array(bytesLength));\n }\n // Legacy Node.js compatibility\n if (crypto && typeof crypto.randomBytes === 'function') {\n return Uint8Array.from(crypto.randomBytes(bytesLength));\n }\n throw new Error('crypto.getRandomValues must be defined');\n}\n//# sourceMappingURL=utils.js.map","/**\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 */\nimport { rotlBH, rotlBL, rotlSH, rotlSL, split } from \"./_u64.js\";\n// prettier-ignore\nimport { abytes, aexists, anumber, aoutput, clean, createHasher, createXOFer, Hash, swap32IfBE, toBytes, u32 } from \"./utils.js\";\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. */\nexport function 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. */\nexport class 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/** SHA3-224 hash function. */\nexport const sha3_224 = /* @__PURE__ */ (() => gen(0x06, 144, 224 / 8))();\n/** SHA3-256 hash function. Different from keccak-256. */\nexport const sha3_256 = /* @__PURE__ */ (() => gen(0x06, 136, 256 / 8))();\n/** SHA3-384 hash function. */\nexport const sha3_384 = /* @__PURE__ */ (() => gen(0x06, 104, 384 / 8))();\n/** SHA3-512 hash function. */\nexport const sha3_512 = /* @__PURE__ */ (() => gen(0x06, 72, 512 / 8))();\n/** keccak-224 hash function. */\nexport const keccak_224 = /* @__PURE__ */ (() => gen(0x01, 144, 224 / 8))();\n/** keccak-256 hash function. Different from SHA3-256. */\nexport const keccak_256 = /* @__PURE__ */ (() => gen(0x01, 136, 256 / 8))();\n/** keccak-384 hash function. */\nexport const keccak_384 = /* @__PURE__ */ (() => gen(0x01, 104, 384 / 8))();\n/** keccak-512 hash function. */\nexport const keccak_512 = /* @__PURE__ */ (() => gen(0x01, 72, 512 / 8))();\nconst genShake = (suffix, blockLen, outputLen) => createXOFer((opts = {}) => new Keccak(blockLen, suffix, opts.dkLen === undefined ? outputLen : opts.dkLen, true));\n/** SHAKE128 XOF with 128-bit security. */\nexport const shake128 = /* @__PURE__ */ (() => genShake(0x1f, 168, 128 / 8))();\n/** SHAKE256 XOF with 256-bit security. */\nexport const shake256 = /* @__PURE__ */ (() => genShake(0x1f, 136, 256 / 8))();\n//# sourceMappingURL=sha3.js.map","import { keccak_256 } from '@noble/hashes/sha3';\nimport { isHex } from '../data/isHex.js';\nimport { toBytes } from '../encoding/toBytes.js';\nimport { toHex } from '../encoding/toHex.js';\nexport function keccak256(value, to_) {\n const to = to_ || 'hex';\n const bytes = keccak_256(isHex(value, { strict: false }) ? toBytes(value) : value);\n if (to === 'bytes')\n return bytes;\n return toHex(bytes);\n}\n//# sourceMappingURL=keccak256.js.map","import { InvalidAddressError } from '../../errors/address.js';\nimport { stringToBytes, } from '../encoding/toBytes.js';\nimport { keccak256 } from '../hash/keccak256.js';\nimport { LruMap } from '../lru.js';\nimport { isAddress } from './isAddress.js';\nconst checksumAddressCache = /*#__PURE__*/ new LruMap(8192);\nexport function 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 = chainId\n ? `${chainId}${address_.toLowerCase()}`\n : address_.substring(2).toLowerCase();\n const hash = keccak256(stringToBytes(hexAddress), 'bytes');\n const address = (chainId ? hexAddress.substring(`${chainId}0x`.length) : 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}\nexport function getAddress(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 (!isAddress(address, { strict: false }))\n throw new InvalidAddressError({ address });\n return checksumAddress(address, chainId);\n}\n//# sourceMappingURL=getAddress.js.map","import { LruMap } from '../lru.js';\nimport { checksumAddress } from './getAddress.js';\nconst addressRegex = /^0x[a-fA-F0-9]{40}$/;\n/** @internal */\nexport const isAddressCache = /*#__PURE__*/ new LruMap(8192);\nexport function 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//# sourceMappingURL=isAddress.js.map","import { SliceOffsetOutOfBoundsError, } from '../../errors/data.js';\nimport { isHex } from './isHex.js';\nimport { size } from './size.js';\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 */\nexport function 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 */\nexport function 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 */\nexport function 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//# sourceMappingURL=slice.js.map","export function parseAccount(account) {\n if (typeof account === 'string')\n return { address: account, type: 'json-rpc' };\n return account;\n}\n//# sourceMappingURL=parseAccount.js.map","import { BaseError } from './base.js';\nexport class AccountNotFoundError extends BaseError {\n constructor({ docsPath } = {}) {\n super([\n 'Could not find an Account to execute with this Action.',\n 'Please provide an Account with the `account` argument on the Action, or by supplying an `account` to the Client.',\n ].join('\\n'), {\n docsPath,\n docsSlug: 'account',\n name: 'AccountNotFoundError',\n });\n }\n}\nexport class AccountTypeNotSupportedError extends BaseError {\n constructor({ docsPath, metaMessages, type, }) {\n super(`Account type \"${type}\" is not supported.`, {\n docsPath,\n metaMessages,\n name: 'AccountTypeNotSupportedError',\n });\n }\n}\n//# sourceMappingURL=account.js.map","import { checksumAddress, } from '../../utils/address/getAddress.js';\nimport { keccak256, } from '../../utils/hash/keccak256.js';\n/**\n * @description Converts an ECDSA public key to an address.\n *\n * @param publicKey The public key to convert.\n *\n * @returns The address.\n */\nexport function publicKeyToAddress(publicKey) {\n const address = keccak256(`0x${publicKey.substring(4)}`).substring(26);\n return checksumAddress(`0x${address}`);\n}\n//# sourceMappingURL=publicKeyToAddress.js.map","import { isHex } from '../data/isHex.js';\nimport { size } from '../data/size.js';\nimport { hexToBigInt, hexToNumber, } from '../encoding/fromHex.js';\nimport { toHex } from '../encoding/toHex.js';\nexport async function recoverPublicKey({ hash, signature, }) {\n const hashHex = isHex(hash) ? hash : toHex(hash);\n const { secp256k1 } = await import('@noble/curves/secp256k1');\n const signature_ = (() => {\n // typeof signature: `Signature`\n if (typeof signature === 'object' && 'r' in signature && 's' in signature) {\n const { r, s, v, yParity } = signature;\n const yParityOrV = Number(yParity ?? v);\n const recoveryBit = toRecoveryBit(yParityOrV);\n return new secp256k1.Signature(hexToBigInt(r), hexToBigInt(s)).addRecoveryBit(recoveryBit);\n }\n // typeof signature: `Hex | ByteArray`\n const signatureHex = isHex(signature) ? signature : toHex(signature);\n if (size(signatureHex) !== 65)\n throw new Error('invalid signature length');\n const yParityOrV = hexToNumber(`0x${signatureHex.slice(130)}`);\n const recoveryBit = toRecoveryBit(yParityOrV);\n return secp256k1.Signature.fromCompact(signatureHex.substring(2, 130)).addRecoveryBit(recoveryBit);\n })();\n const publicKey = signature_\n .recoverPublicKey(hashHex.substring(2))\n .toHex(false);\n return `0x${publicKey}`;\n}\nfunction toRecoveryBit(yParityOrV) {\n if (yParityOrV === 0 || yParityOrV === 1)\n return yParityOrV;\n if (yParityOrV === 27)\n return 0;\n if (yParityOrV === 28)\n return 1;\n throw new Error('Invalid yParityOrV value');\n}\n//# sourceMappingURL=recoverPublicKey.js.map","import { publicKeyToAddress } from '../../accounts/utils/publicKeyToAddress.js';\nimport { recoverPublicKey } from './recoverPublicKey.js';\nexport async function recoverAddress({ hash, signature, }) {\n return publicKeyToAddress(await recoverPublicKey({ hash, signature }));\n}\n//# sourceMappingURL=recoverAddress.js.map","import { BaseError } from './base.js';\nexport class NegativeOffsetError extends BaseError {\n constructor({ offset }) {\n super(`Offset \\`${offset}\\` cannot be negative.`, {\n name: 'NegativeOffsetError',\n });\n }\n}\nexport class PositionOutOfBoundsError extends BaseError {\n constructor({ length, position }) {\n super(`Position \\`${position}\\` is out of bounds (\\`0 < position < ${length}\\`).`, { name: 'PositionOutOfBoundsError' });\n }\n}\nexport class RecursiveReadLimitExceededError extends BaseError {\n constructor({ count, limit }) {\n super(`Recursive read limit of \\`${limit}\\` exceeded (recursive read count: \\`${count}\\`).`, { name: 'RecursiveReadLimitExceededError' });\n }\n}\n//# sourceMappingURL=cursor.js.map","import { NegativeOffsetError, PositionOutOfBoundsError, RecursiveReadLimitExceededError, } from '../errors/cursor.js';\nconst staticCursor = {\n bytes: new Uint8Array(),\n dataView: new DataView(new ArrayBuffer(0)),\n position: 0,\n positionReadCount: new Map(),\n recursiveReadCount: 0,\n recursiveReadLimit: Number.POSITIVE_INFINITY,\n assertReadLimit() {\n if (this.recursiveReadCount >= this.recursiveReadLimit)\n throw new RecursiveReadLimitExceededError({\n count: this.recursiveReadCount + 1,\n limit: this.recursiveReadLimit,\n });\n },\n assertPosition(position) {\n if (position < 0 || position > this.bytes.length - 1)\n throw new PositionOutOfBoundsError({\n length: this.bytes.length,\n position,\n });\n },\n decrementPosition(offset) {\n if (offset < 0)\n throw new NegativeOffsetError({ offset });\n const position = this.position - offset;\n this.assertPosition(position);\n this.position = position;\n },\n getReadCount(position) {\n return this.positionReadCount.get(position || this.position) || 0;\n },\n incrementPosition(offset) {\n if (offset < 0)\n throw new NegativeOffsetError({ offset });\n const position = this.position + offset;\n this.assertPosition(position);\n this.position = position;\n },\n inspectByte(position_) {\n const position = position_ ?? this.position;\n this.assertPosition(position);\n return this.bytes[position];\n },\n inspectBytes(length, position_) {\n const position = position_ ?? this.position;\n this.assertPosition(position + length - 1);\n return this.bytes.subarray(position, position + length);\n },\n inspectUint8(position_) {\n const position = position_ ?? this.position;\n this.assertPosition(position);\n return this.bytes[position];\n },\n inspectUint16(position_) {\n const position = position_ ?? this.position;\n this.assertPosition(position + 1);\n return this.dataView.getUint16(position);\n },\n inspectUint24(position_) {\n const position = position_ ?? this.position;\n this.assertPosition(position + 2);\n return ((this.dataView.getUint16(position) << 8) +\n this.dataView.getUint8(position + 2));\n },\n inspectUint32(position_) {\n const position = position_ ?? this.position;\n this.assertPosition(position + 3);\n return this.dataView.getUint32(position);\n },\n pushByte(byte) {\n this.assertPosition(this.position);\n this.bytes[this.position] = byte;\n this.position++;\n },\n pushBytes(bytes) {\n this.assertPosition(this.position + bytes.length - 1);\n this.bytes.set(bytes, this.position);\n this.position += bytes.length;\n },\n pushUint8(value) {\n this.assertPosition(this.position);\n this.bytes[this.position] = value;\n this.position++;\n },\n pushUint16(value) {\n this.assertPosition(this.position + 1);\n this.dataView.setUint16(this.position, value);\n this.position += 2;\n },\n pushUint24(value) {\n this.assertPosition(this.position + 2);\n this.dataView.setUint16(this.position, value >> 8);\n this.dataView.setUint8(this.position + 2, value & ~4294967040);\n this.position += 3;\n },\n pushUint32(value) {\n this.assertPosition(this.position + 3);\n this.dataView.setUint32(this.position, value);\n this.position += 4;\n },\n readByte() {\n this.assertReadLimit();\n this._touch();\n const value = this.inspectByte();\n this.position++;\n return value;\n },\n readBytes(length, size) {\n this.assertReadLimit();\n this._touch();\n const value = this.inspectBytes(length);\n this.position += size ?? length;\n return value;\n },\n readUint8() {\n this.assertReadLimit();\n this._touch();\n const value = this.inspectUint8();\n this.position += 1;\n return value;\n },\n readUint16() {\n this.assertReadLimit();\n this._touch();\n const value = this.inspectUint16();\n this.position += 2;\n return value;\n },\n readUint24() {\n this.assertReadLimit();\n this._touch();\n const value = this.inspectUint24();\n this.position += 3;\n return value;\n },\n readUint32() {\n this.assertReadLimit();\n this._touch();\n const value = this.inspectUint32();\n this.position += 4;\n return value;\n },\n get remaining() {\n return this.bytes.length - this.position;\n },\n setPosition(position) {\n const oldPosition = this.position;\n this.assertPosition(position);\n this.position = position;\n return () => (this.position = oldPosition);\n },\n _touch() {\n if (this.recursiveReadLimit === Number.POSITIVE_INFINITY)\n return;\n const count = this.getReadCount();\n this.positionReadCount.set(this.position, count + 1);\n if (count > 0)\n this.recursiveReadCount++;\n },\n};\nexport function createCursor(bytes, { recursiveReadLimit = 8_192 } = {}) {\n const cursor = Object.create(staticCursor);\n cursor.bytes = bytes;\n cursor.dataView = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength);\n cursor.positionReadCount = new Map();\n cursor.recursiveReadLimit = recursiveReadLimit;\n return cursor;\n}\n//# sourceMappingURL=cursor.js.map","import { BaseError } from '../../errors/base.js';\nimport { createCursor, } from '../cursor.js';\nimport { hexToBytes } from './toBytes.js';\nimport { bytesToHex } from './toHex.js';\nexport function toRlp(bytes, to = 'hex') {\n const encodable = getEncodable(bytes);\n const cursor = createCursor(new Uint8Array(encodable.length));\n encodable.encode(cursor);\n if (to === 'hex')\n return bytesToHex(cursor.bytes);\n return cursor.bytes;\n}\nexport function bytesToRlp(bytes, to = 'bytes') {\n return toRlp(bytes, to);\n}\nexport function hexToRlp(hex, to = 'hex') {\n return toRlp(hex, to);\n}\nfunction getEncodable(bytes) {\n if (Array.isArray(bytes))\n return getEncodableList(bytes.map((x) => getEncodable(x)));\n return getEncodableBytes(bytes);\n}\nfunction getEncodableList(list) {\n const bodyLength = list.reduce((acc, x) => acc + x.length, 0);\n const sizeOfBodyLength = getSizeOfLength(bodyLength);\n const length = (() => {\n if (bodyLength <= 55)\n return 1 + bodyLength;\n return 1 + sizeOfBodyLength + bodyLength;\n })();\n return {\n length,\n encode(cursor) {\n if (bodyLength <= 55) {\n cursor.pushByte(0xc0 + bodyLength);\n }\n else {\n cursor.pushByte(0xc0 + 55 + sizeOfBodyLength);\n if (sizeOfBodyLength === 1)\n cursor.pushUint8(bodyLength);\n else if (sizeOfBodyLength === 2)\n cursor.pushUint16(bodyLength);\n else if (sizeOfBodyLength === 3)\n cursor.pushUint24(bodyLength);\n else\n cursor.pushUint32(bodyLength);\n }\n for (const { encode } of list) {\n encode(cursor);\n }\n },\n };\n}\nfunction getEncodableBytes(bytesOrHex) {\n const bytes = typeof bytesOrHex === 'string' ? hexToBytes(bytesOrHex) : bytesOrHex;\n const sizeOfBytesLength = getSizeOfLength(bytes.length);\n const length = (() => {\n if (bytes.length === 1 && bytes[0] < 0x80)\n return 1;\n if (bytes.length <= 55)\n return 1 + bytes.length;\n return 1 + sizeOfBytesLength + bytes.length;\n })();\n return {\n length,\n encode(cursor) {\n if (bytes.length === 1 && bytes[0] < 0x80) {\n cursor.pushBytes(bytes);\n }\n else if (bytes.length <= 55) {\n cursor.pushByte(0x80 + bytes.length);\n cursor.pushBytes(bytes);\n }\n else {\n cursor.pushByte(0x80 + 55 + sizeOfBytesLength);\n if (sizeOfBytesLength === 1)\n cursor.pushUint8(bytes.length);\n else if (sizeOfBytesLength === 2)\n cursor.pushUint16(bytes.length);\n else if (sizeOfBytesLength === 3)\n cursor.pushUint24(bytes.length);\n else\n cursor.pushUint32(bytes.length);\n cursor.pushBytes(bytes);\n }\n },\n };\n}\nfunction getSizeOfLength(length) {\n if (length < 2 ** 8)\n return 1;\n if (length < 2 ** 16)\n return 2;\n if (length < 2 ** 24)\n return 3;\n if (length < 2 ** 32)\n return 4;\n throw new BaseError('Length is too large.');\n}\n//# sourceMappingURL=toRlp.js.map","import { concatHex } from '../data/concat.js';\nimport { hexToBytes } from '../encoding/toBytes.js';\nimport { numberToHex } from '../encoding/toHex.js';\nimport { toRlp } from '../encoding/toRlp.js';\nimport { keccak256 } from '../hash/keccak256.js';\n/**\n * Computes an Authorization hash in [EIP-7702 format](https://eips.ethereum.org/EIPS/eip-7702): `keccak256('0x05' || rlp([chain_id, address, nonce]))`.\n */\nexport function hashAuthorization(parameters) {\n const { chainId, nonce, to } = parameters;\n const address = parameters.contractAddress ?? parameters.address;\n const hash = keccak256(concatHex([\n '0x05',\n toRlp([\n chainId ? numberToHex(chainId) : '0x',\n address,\n nonce ? numberToHex(nonce) : '0x',\n ]),\n ]));\n if (to === 'bytes')\n return hexToBytes(hash);\n return hash;\n}\n//# sourceMappingURL=hashAuthorization.js.map","import { recoverAddress, } from '../signature/recoverAddress.js';\nimport { hashAuthorization, } from './hashAuthorization.js';\nexport async function recoverAuthorizationAddress(parameters) {\n const { authorization, signature } = parameters;\n return recoverAddress({\n hash: hashAuthorization(authorization),\n signature: (signature ?? authorization),\n });\n}\n//# sourceMappingURL=recoverAuthorizationAddress.js.map","import { BaseError } from './base.js';\nexport class ChainDoesNotSupportContract extends BaseError {\n constructor({ blockNumber, chain, contract, }) {\n super(`Chain \"${chain.name}\" does not support contract \"${contract.name}\".`, {\n metaMessages: [\n 'This could be due to any of the following:',\n ...(blockNumber &&\n contract.blockCreated &&\n contract.blockCreated > blockNumber\n ? [\n `- The contract \"${contract.name}\" was not deployed until block ${contract.blockCreated} (current block ${blockNumber}).`,\n ]\n : [\n `- The chain does not have the contract \"${contract.name}\" configured.`,\n ]),\n ],\n name: 'ChainDoesNotSupportContract',\n });\n }\n}\nexport class ChainMismatchError extends BaseError {\n constructor({ chain, currentChainId, }) {\n super(`The current chain of the wallet (id: ${currentChainId}) does not match the target chain for the transaction (id: ${chain.id} – ${chain.name}).`, {\n metaMessages: [\n `Current Chain ID: ${currentChainId}`,\n `Expected Chain ID: ${chain.id} – ${chain.name}`,\n ],\n name: 'ChainMismatchError',\n });\n }\n}\nexport class ChainNotFoundError extends BaseError {\n constructor() {\n super([\n 'No chain was provided to the request.',\n 'Please provide a chain with the `chain` argument on the Action, or by supplying a `chain` to WalletClient.',\n ].join('\\n'), {\n name: 'ChainNotFoundError',\n });\n }\n}\nexport class ClientChainNotConfiguredError extends BaseError {\n constructor() {\n super('No chain was provided to the Client.', {\n name: 'ClientChainNotConfiguredError',\n });\n }\n}\nexport class InvalidChainIdError extends BaseError {\n constructor({ chainId }) {\n super(typeof chainId === 'number'\n ? `Chain ID \"${chainId}\" is invalid.`\n : 'Chain ID is invalid.', { name: 'InvalidChainIdError' });\n }\n}\n//# sourceMappingURL=chain.js.map","import { ChainMismatchError, ChainNotFoundError, } from '../../errors/chain.js';\nexport function assertCurrentChain({ chain, currentChainId, }) {\n if (!chain)\n throw new ChainNotFoundError();\n if (currentChainId !== chain.id)\n throw new ChainMismatchError({ chain, currentChainId });\n}\n//# sourceMappingURL=assertCurrentChain.js.map","export const etherUnits = {\n gwei: 9,\n wei: 18,\n};\nexport const gweiUnits = {\n ether: -9,\n wei: 9,\n};\nexport const weiUnits = {\n ether: -18,\n gwei: -9,\n};\n//# sourceMappingURL=unit.js.map","/**\n * Divides a number by a given exponent of base 10 (10exponent), and formats it into a string representation of the number..\n *\n * - Docs: https://viem.sh/docs/utilities/formatUnits\n *\n * @example\n * import { formatUnits } from 'viem'\n *\n * formatUnits(420000000000n, 9)\n * // '420'\n */\nexport function formatUnits(value, decimals) {\n let display = value.toString();\n const negative = display.startsWith('-');\n if (negative)\n display = display.slice(1);\n display = display.padStart(decimals, '0');\n let [integer, fraction] = [\n display.slice(0, display.length - decimals),\n display.slice(display.length - decimals),\n ];\n fraction = fraction.replace(/(0+)$/, '');\n return `${negative ? '-' : ''}${integer || '0'}${fraction ? `.${fraction}` : ''}`;\n}\n//# sourceMappingURL=formatUnits.js.map","import { gweiUnits } from '../../constants/unit.js';\nimport { formatUnits } from './formatUnits.js';\n/**\n * Converts numerical wei to a string representation of gwei.\n *\n * - Docs: https://viem.sh/docs/utilities/formatGwei\n *\n * @example\n * import { formatGwei } from 'viem'\n *\n * formatGwei(1000000000n)\n * // '1'\n */\nexport function formatGwei(wei, unit = 'wei') {\n return formatUnits(wei, gweiUnits[unit]);\n}\n//# sourceMappingURL=formatGwei.js.map","import { formatGwei } from '../utils/unit/formatGwei.js';\nimport { BaseError } from './base.js';\nexport class ExecutionRevertedError extends BaseError {\n constructor({ cause, message, } = {}) {\n const reason = message\n ?.replace('execution reverted: ', '')\n ?.replace('execution reverted', '');\n super(`Execution reverted ${reason ? `with reason: ${reason}` : 'for an unknown reason'}.`, {\n cause,\n name: 'ExecutionRevertedError',\n });\n }\n}\nObject.defineProperty(ExecutionRevertedError, \"code\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 3\n});\nObject.defineProperty(ExecutionRevertedError, \"nodeMessage\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: /execution reverted/\n});\nexport class FeeCapTooHighError extends BaseError {\n constructor({ cause, maxFeePerGas, } = {}) {\n super(`The fee cap (\\`maxFeePerGas\\`${maxFeePerGas ? ` = ${formatGwei(maxFeePerGas)} gwei` : ''}) cannot be higher than the maximum allowed value (2^256-1).`, {\n cause,\n name: 'FeeCapTooHighError',\n });\n }\n}\nObject.defineProperty(FeeCapTooHighError, \"nodeMessage\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: /max fee per gas higher than 2\\^256-1|fee cap higher than 2\\^256-1/\n});\nexport class FeeCapTooLowError extends BaseError {\n constructor({ cause, maxFeePerGas, } = {}) {\n super(`The fee cap (\\`maxFeePerGas\\`${maxFeePerGas ? ` = ${formatGwei(maxFeePerGas)}` : ''} gwei) cannot be lower than the block base fee.`, {\n cause,\n name: 'FeeCapTooLowError',\n });\n }\n}\nObject.defineProperty(FeeCapTooLowError, \"nodeMessage\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: /max fee per gas less than block base fee|fee cap less than block base fee|transaction is outdated/\n});\nexport class NonceTooHighError extends BaseError {\n constructor({ cause, nonce, } = {}) {\n super(`Nonce provided for the transaction ${nonce ? `(${nonce}) ` : ''}is higher than the next one expected.`, { cause, name: 'NonceTooHighError' });\n }\n}\nObject.defineProperty(NonceTooHighError, \"nodeMessage\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: /nonce too high/\n});\nexport class NonceTooLowError extends BaseError {\n constructor({ cause, nonce, } = {}) {\n super([\n `Nonce provided for the transaction ${nonce ? `(${nonce}) ` : ''}is lower than the current nonce of the account.`,\n 'Try increasing the nonce or find the latest nonce with `getTransactionCount`.',\n ].join('\\n'), { cause, name: 'NonceTooLowError' });\n }\n}\nObject.defineProperty(NonceTooLowError, \"nodeMessage\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: /nonce too low|transaction already imported|already known/\n});\nexport class NonceMaxValueError extends BaseError {\n constructor({ cause, nonce, } = {}) {\n super(`Nonce provided for the transaction ${nonce ? `(${nonce}) ` : ''}exceeds the maximum allowed nonce.`, { cause, name: 'NonceMaxValueError' });\n }\n}\nObject.defineProperty(NonceMaxValueError, \"nodeMessage\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: /nonce has max value/\n});\nexport class InsufficientFundsError extends BaseError {\n constructor({ cause } = {}) {\n super([\n 'The total cost (gas * gas fee + value) of executing this transaction exceeds the balance of the account.',\n ].join('\\n'), {\n cause,\n metaMessages: [\n 'This error could arise when the account does not have enough funds to:',\n ' - pay for the total gas fee,',\n ' - pay for the value to send.',\n ' ',\n 'The cost of the transaction is calculated as `gas * gas fee + value`, where:',\n ' - `gas` is the amount of gas needed for transaction to execute,',\n ' - `gas fee` is the gas fee,',\n ' - `value` is the amount of ether to send to the recipient.',\n ],\n name: 'InsufficientFundsError',\n });\n }\n}\nObject.defineProperty(InsufficientFundsError, \"nodeMessage\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: /insufficient funds|exceeds transaction sender account balance/\n});\nexport class IntrinsicGasTooHighError extends BaseError {\n constructor({ cause, gas, } = {}) {\n super(`The amount of gas ${gas ? `(${gas}) ` : ''}provided for the transaction exceeds the limit allowed for the block.`, {\n cause,\n name: 'IntrinsicGasTooHighError',\n });\n }\n}\nObject.defineProperty(IntrinsicGasTooHighError, \"nodeMessage\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: /intrinsic gas too high|gas limit reached/\n});\nexport class IntrinsicGasTooLowError extends BaseError {\n constructor({ cause, gas, } = {}) {\n super(`The amount of gas ${gas ? `(${gas}) ` : ''}provided for the transaction is too low.`, {\n cause,\n name: 'IntrinsicGasTooLowError',\n });\n }\n}\nObject.defineProperty(IntrinsicGasTooLowError, \"nodeMessage\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: /intrinsic gas too low/\n});\nexport class TransactionTypeNotSupportedError extends BaseError {\n constructor({ cause }) {\n super('The transaction type is not supported for this chain.', {\n cause,\n name: 'TransactionTypeNotSupportedError',\n });\n }\n}\nObject.defineProperty(TransactionTypeNotSupportedError, \"nodeMessage\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: /transaction type not valid/\n});\nexport class TipAboveFeeCapError extends BaseError {\n constructor({ cause, maxPriorityFeePerGas, maxFeePerGas, } = {}) {\n super([\n `The provided tip (\\`maxPriorityFeePerGas\\`${maxPriorityFeePerGas\n ? ` = ${formatGwei(maxPriorityFeePerGas)} gwei`\n : ''}) cannot be higher than the fee cap (\\`maxFeePerGas\\`${maxFeePerGas ? ` = ${formatGwei(maxFeePerGas)} gwei` : ''}).`,\n ].join('\\n'), {\n cause,\n name: 'TipAboveFeeCapError',\n });\n }\n}\nObject.defineProperty(TipAboveFeeCapError, \"nodeMessage\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: /max priority fee per gas higher than max fee per gas|tip higher than fee cap/\n});\nexport class UnknownNodeError extends BaseError {\n constructor({ cause }) {\n super(`An error occurred while executing: ${cause?.shortMessage}`, {\n cause,\n name: 'UnknownNodeError',\n });\n }\n}\n//# sourceMappingURL=node.js.map","import { etherUnits } from '../../constants/unit.js';\nimport { formatUnits } from './formatUnits.js';\n/**\n * Converts numerical wei to a string representation of ether.\n *\n * - Docs: https://viem.sh/docs/utilities/formatEther\n *\n * @example\n * import { formatEther } from 'viem'\n *\n * formatEther(1000000000000000000n)\n * // '1'\n */\nexport function formatEther(wei, unit = 'wei') {\n return formatUnits(wei, etherUnits[unit]);\n}\n//# sourceMappingURL=formatEther.js.map","import { formatEther } from '../utils/unit/formatEther.js';\nimport { formatGwei } from '../utils/unit/formatGwei.js';\nimport { BaseError } from './base.js';\nexport function prettyPrint(args) {\n const entries = Object.entries(args)\n .map(([key, value]) => {\n if (value === undefined || value === false)\n return null;\n return [key, value];\n })\n .filter(Boolean);\n const maxLength = entries.reduce((acc, [key]) => Math.max(acc, key.length), 0);\n return entries\n .map(([key, value]) => ` ${`${key}:`.padEnd(maxLength + 1)} ${value}`)\n .join('\\n');\n}\nexport class FeeConflictError extends BaseError {\n constructor() {\n super([\n 'Cannot specify both a `gasPrice` and a `maxFeePerGas`/`maxPriorityFeePerGas`.',\n 'Use `maxFeePerGas`/`maxPriorityFeePerGas` for EIP-1559 compatible networks, and `gasPrice` for others.',\n ].join('\\n'), { name: 'FeeConflictError' });\n }\n}\nexport class InvalidLegacyVError extends BaseError {\n constructor({ v }) {\n super(`Invalid \\`v\\` value \"${v}\". Expected 27 or 28.`, {\n name: 'InvalidLegacyVError',\n });\n }\n}\nexport class InvalidSerializableTransactionError extends BaseError {\n constructor({ transaction }) {\n super('Cannot infer a transaction type from provided transaction.', {\n metaMessages: [\n 'Provided Transaction:',\n '{',\n prettyPrint(transaction),\n '}',\n '',\n 'To infer the type, either provide:',\n '- a `type` to the Transaction, or',\n '- an EIP-1559 Transaction with `maxFeePerGas`, or',\n '- an EIP-2930 Transaction with `gasPrice` & `accessList`, or',\n '- an EIP-4844 Transaction with `blobs`, `blobVersionedHashes`, `sidecars`, or',\n '- an EIP-7702 Transaction with `authorizationList`, or',\n '- a Legacy Transaction with `gasPrice`',\n ],\n name: 'InvalidSerializableTransactionError',\n });\n }\n}\nexport class InvalidSerializedTransactionTypeError extends BaseError {\n constructor({ serializedType }) {\n super(`Serialized transaction type \"${serializedType}\" is invalid.`, {\n name: 'InvalidSerializedTransactionType',\n });\n Object.defineProperty(this, \"serializedType\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n this.serializedType = serializedType;\n }\n}\nexport class InvalidSerializedTransactionError extends BaseError {\n constructor({ attributes, serializedTransaction, type, }) {\n const missing = Object.entries(attributes)\n .map(([key, value]) => (typeof value === 'undefined' ? key : undefined))\n .filter(Boolean);\n super(`Invalid serialized transaction of type \"${type}\" was provided.`, {\n metaMessages: [\n `Serialized Transaction: \"${serializedTransaction}\"`,\n missing.length > 0 ? `Missing Attributes: ${missing.join(', ')}` : '',\n ].filter(Boolean),\n name: 'InvalidSerializedTransactionError',\n });\n Object.defineProperty(this, \"serializedTransaction\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"type\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n this.serializedTransaction = serializedTransaction;\n this.type = type;\n }\n}\nexport class InvalidStorageKeySizeError extends BaseError {\n constructor({ storageKey }) {\n super(`Size for storage key \"${storageKey}\" is invalid. Expected 32 bytes. Got ${Math.floor((storageKey.length - 2) / 2)} bytes.`, { name: 'InvalidStorageKeySizeError' });\n }\n}\nexport class TransactionExecutionError extends BaseError {\n constructor(cause, { account, docsPath, chain, data, gas, gasPrice, maxFeePerGas, maxPriorityFeePerGas, nonce, to, value, }) {\n const prettyArgs = prettyPrint({\n chain: chain && `${chain?.name} (id: ${chain?.id})`,\n from: account?.address,\n to,\n value: typeof value !== 'undefined' &&\n `${formatEther(value)} ${chain?.nativeCurrency?.symbol || 'ETH'}`,\n data,\n gas,\n gasPrice: typeof gasPrice !== 'undefined' && `${formatGwei(gasPrice)} gwei`,\n maxFeePerGas: typeof maxFeePerGas !== 'undefined' &&\n `${formatGwei(maxFeePerGas)} gwei`,\n maxPriorityFeePerGas: typeof maxPriorityFeePerGas !== 'undefined' &&\n `${formatGwei(maxPriorityFeePerGas)} gwei`,\n nonce,\n });\n super(cause.shortMessage, {\n cause,\n docsPath,\n metaMessages: [\n ...(cause.metaMessages ? [...cause.metaMessages, ' '] : []),\n 'Request Arguments:',\n prettyArgs,\n ].filter(Boolean),\n name: 'TransactionExecutionError',\n });\n Object.defineProperty(this, \"cause\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n this.cause = cause;\n }\n}\nexport class TransactionNotFoundError extends BaseError {\n constructor({ blockHash, blockNumber, blockTag, hash, index, }) {\n let identifier = 'Transaction';\n if (blockTag && index !== undefined)\n identifier = `Transaction at block time \"${blockTag}\" at index \"${index}\"`;\n if (blockHash && index !== undefined)\n identifier = `Transaction at block hash \"${blockHash}\" at index \"${index}\"`;\n if (blockNumber && index !== undefined)\n identifier = `Transaction at block number \"${blockNumber}\" at index \"${index}\"`;\n if (hash)\n identifier = `Transaction with hash \"${hash}\"`;\n super(`${identifier} could not be found.`, {\n name: 'TransactionNotFoundError',\n });\n }\n}\nexport class TransactionReceiptNotFoundError extends BaseError {\n constructor({ hash }) {\n super(`Transaction receipt with hash \"${hash}\" could not be found. The Transaction may not be processed on a block yet.`, {\n name: 'TransactionReceiptNotFoundError',\n });\n }\n}\nexport class WaitForTransactionReceiptTimeoutError extends BaseError {\n constructor({ hash }) {\n super(`Timed out while waiting for transaction with hash \"${hash}\" to be confirmed.`, { name: 'WaitForTransactionReceiptTimeoutError' });\n }\n}\n//# sourceMappingURL=transaction.js.map","export const stringify = (value, replacer, space) => JSON.stringify(value, (key, value_) => {\n const value = typeof value_ === 'bigint' ? value_.toString() : value_;\n return typeof replacer === 'function' ? replacer(key, value) : value;\n}, space);\n//# sourceMappingURL=stringify.js.map","export const getContractAddress = (address) => address;\nexport const getUrl = (url) => url;\n//# sourceMappingURL=utils.js.map","import { stringify } from '../utils/stringify.js';\nimport { BaseError } from './base.js';\nimport { getUrl } from './utils.js';\nexport class HttpRequestError extends BaseError {\n constructor({ body, cause, details, headers, status, url, }) {\n super('HTTP request failed.', {\n cause,\n details,\n metaMessages: [\n status && `Status: ${status}`,\n `URL: ${getUrl(url)}`,\n body && `Request body: ${stringify(body)}`,\n ].filter(Boolean),\n name: 'HttpRequestError',\n });\n Object.defineProperty(this, \"body\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"headers\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"status\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"url\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n this.body = body;\n this.headers = headers;\n this.status = status;\n this.url = url;\n }\n}\nexport class WebSocketRequestError extends BaseError {\n constructor({ body, cause, details, url, }) {\n super('WebSocket request failed.', {\n cause,\n details,\n metaMessages: [\n `URL: ${getUrl(url)}`,\n body && `Request body: ${stringify(body)}`,\n ].filter(Boolean),\n name: 'WebSocketRequestError',\n });\n }\n}\nexport class RpcRequestError extends BaseError {\n constructor({ body, error, url, }) {\n super('RPC Request failed.', {\n cause: error,\n details: error.message,\n metaMessages: [`URL: ${getUrl(url)}`, `Request body: ${stringify(body)}`],\n name: 'RpcRequestError',\n });\n Object.defineProperty(this, \"code\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n Object.defineProperty(this, \"data\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n this.code = error.code;\n this.data = error.data;\n }\n}\nexport class SocketClosedError extends BaseError {\n constructor({ url, } = {}) {\n super('The socket has been closed.', {\n metaMessages: [url && `URL: ${getUrl(url)}`].filter(Boolean),\n name: 'SocketClosedError',\n });\n }\n}\nexport class TimeoutError extends BaseError {\n constructor({ body, url, }) {\n super('The request took too long to respond.', {\n details: 'The request timed out.',\n metaMessages: [`URL: ${getUrl(url)}`, `Request body: ${stringify(body)}`],\n name: 'TimeoutError',\n });\n }\n}\n//# sourceMappingURL=request.js.map","import { BaseError } from './base.js';\nimport { RpcRequestError } from './request.js';\nconst unknownErrorCode = -1;\nexport class RpcError extends BaseError {\n constructor(cause, { code, docsPath, metaMessages, name, shortMessage, }) {\n super(shortMessage, {\n cause,\n docsPath,\n metaMessages: metaMessages || cause?.metaMessages,\n name: name || 'RpcError',\n });\n Object.defineProperty(this, \"code\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n this.name = name || cause.name;\n this.code = (cause instanceof RpcRequestError ? cause.code : (code ?? unknownErrorCode));\n }\n}\nexport class ProviderRpcError extends RpcError {\n constructor(cause, options) {\n super(cause, options);\n Object.defineProperty(this, \"data\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n this.data = options.data;\n }\n}\nexport class ParseRpcError extends RpcError {\n constructor(cause) {\n super(cause, {\n code: ParseRpcError.code,\n name: 'ParseRpcError',\n shortMessage: 'Invalid JSON was received by the server. An error occurred on the server while parsing the JSON text.',\n });\n }\n}\nObject.defineProperty(ParseRpcError, \"code\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: -32700\n});\nexport class InvalidRequestRpcError extends RpcError {\n constructor(cause) {\n super(cause, {\n code: InvalidRequestRpcError.code,\n name: 'InvalidRequestRpcError',\n shortMessage: 'JSON is not a valid request object.',\n });\n }\n}\nObject.defineProperty(InvalidRequestRpcError, \"code\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: -32600\n});\nexport class MethodNotFoundRpcError extends RpcError {\n constructor(cause, { method } = {}) {\n super(cause, {\n code: MethodNotFoundRpcError.code,\n name: 'MethodNotFoundRpcError',\n shortMessage: `The method${method ? ` \"${method}\"` : ''} does not exist / is not available.`,\n });\n }\n}\nObject.defineProperty(MethodNotFoundRpcError, \"code\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: -32601\n});\nexport class InvalidParamsRpcError extends RpcError {\n constructor(cause) {\n super(cause, {\n code: InvalidParamsRpcError.code,\n name: 'InvalidParamsRpcError',\n shortMessage: [\n 'Invalid parameters were provided to the RPC method.',\n 'Double check you have provided the correct parameters.',\n ].join('\\n'),\n });\n }\n}\nObject.defineProperty(InvalidParamsRpcError, \"code\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: -32602\n});\nexport class InternalRpcError extends RpcError {\n constructor(cause) {\n super(cause, {\n code: InternalRpcError.code,\n name: 'InternalRpcError',\n shortMessage: 'An internal error was received.',\n });\n }\n}\nObject.defineProperty(InternalRpcError, \"code\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: -32603\n});\nexport class InvalidInputRpcError extends RpcError {\n constructor(cause) {\n super(cause, {\n code: InvalidInputRpcError.code,\n name: 'InvalidInputRpcError',\n shortMessage: [\n 'Missing or invalid parameters.',\n 'Double check you have provided the correct parameters.',\n ].join('\\n'),\n });\n }\n}\nObject.defineProperty(InvalidInputRpcError, \"code\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: -32000\n});\nexport class ResourceNotFoundRpcError extends RpcError {\n constructor(cause) {\n super(cause, {\n code: ResourceNotFoundRpcError.code,\n name: 'ResourceNotFoundRpcError',\n shortMessage: 'Requested resource not found.',\n });\n Object.defineProperty(this, \"name\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 'ResourceNotFoundRpcError'\n });\n }\n}\nObject.defineProperty(ResourceNotFoundRpcError, \"code\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: -32001\n});\nexport class ResourceUnavailableRpcError extends RpcError {\n constructor(cause) {\n super(cause, {\n code: ResourceUnavailableRpcError.code,\n name: 'ResourceUnavailableRpcError',\n shortMessage: 'Requested resource not available.',\n });\n }\n}\nObject.defineProperty(ResourceUnavailableRpcError, \"code\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: -32002\n});\nexport class TransactionRejectedRpcError extends RpcError {\n constructor(cause) {\n super(cause, {\n code: TransactionRejectedRpcError.code,\n name: 'TransactionRejectedRpcError',\n shortMessage: 'Transaction creation failed.',\n });\n }\n}\nObject.defineProperty(TransactionRejectedRpcError, \"code\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: -32003\n});\nexport class MethodNotSupportedRpcError extends RpcError {\n constructor(cause, { method } = {}) {\n super(cause, {\n code: MethodNotSupportedRpcError.code,\n name: 'MethodNotSupportedRpcError',\n shortMessage: `Method${method ? ` \"${method}\"` : ''} is not supported.`,\n });\n }\n}\nObject.defineProperty(MethodNotSupportedRpcError, \"code\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: -32004\n});\nexport class LimitExceededRpcError extends RpcError {\n constructor(cause) {\n super(cause, {\n code: LimitExceededRpcError.code,\n name: 'LimitExceededRpcError',\n shortMessage: 'Request exceeds defined limit.',\n });\n }\n}\nObject.defineProperty(LimitExceededRpcError, \"code\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: -32005\n});\nexport class JsonRpcVersionUnsupportedError extends RpcError {\n constructor(cause) {\n super(cause, {\n code: JsonRpcVersionUnsupportedError.code,\n name: 'JsonRpcVersionUnsupportedError',\n shortMessage: 'Version of JSON-RPC protocol is not supported.',\n });\n }\n}\nObject.defineProperty(JsonRpcVersionUnsupportedError, \"code\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: -32006\n});\nexport class UserRejectedRequestError extends ProviderRpcError {\n constructor(cause) {\n super(cause, {\n code: UserRejectedRequestError.code,\n name: 'UserRejectedRequestError',\n shortMessage: 'User rejected the request.',\n });\n }\n}\nObject.defineProperty(UserRejectedRequestError, \"code\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 4001\n});\nexport class UnauthorizedProviderError extends ProviderRpcError {\n constructor(cause) {\n super(cause, {\n code: UnauthorizedProviderError.code,\n name: 'UnauthorizedProviderError',\n shortMessage: 'The requested method and/or account has not been authorized by the user.',\n });\n }\n}\nObject.defineProperty(UnauthorizedProviderError, \"code\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 4100\n});\nexport class UnsupportedProviderMethodError extends ProviderRpcError {\n constructor(cause, { method } = {}) {\n super(cause, {\n code: UnsupportedProviderMethodError.code,\n name: 'UnsupportedProviderMethodError',\n shortMessage: `The Provider does not support the requested method${method ? ` \" ${method}\"` : ''}.`,\n });\n }\n}\nObject.defineProperty(UnsupportedProviderMethodError, \"code\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 4200\n});\nexport class ProviderDisconnectedError extends ProviderRpcError {\n constructor(cause) {\n super(cause, {\n code: ProviderDisconnectedError.code,\n name: 'ProviderDisconnectedError',\n shortMessage: 'The Provider is disconnected from all chains.',\n });\n }\n}\nObject.defineProperty(ProviderDisconnectedError, \"code\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 4900\n});\nexport class ChainDisconnectedError extends ProviderRpcError {\n constructor(cause) {\n super(cause, {\n code: ChainDisconnectedError.code,\n name: 'ChainDisconnectedError',\n shortMessage: 'The Provider is not connected to the requested chain.',\n });\n }\n}\nObject.defineProperty(ChainDisconnectedError, \"code\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 4901\n});\nexport class SwitchChainError extends ProviderRpcError {\n constructor(cause) {\n super(cause, {\n code: SwitchChainError.code,\n name: 'SwitchChainError',\n shortMessage: 'An error occurred when attempting to switch chain.',\n });\n }\n}\nObject.defineProperty(SwitchChainError, \"code\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 4902\n});\nexport class UnsupportedNonOptionalCapabilityError extends ProviderRpcError {\n constructor(cause) {\n super(cause, {\n code: UnsupportedNonOptionalCapabilityError.code,\n name: 'UnsupportedNonOptionalCapabilityError',\n shortMessage: 'This Wallet does not support a capability that was not marked as optional.',\n });\n }\n}\nObject.defineProperty(UnsupportedNonOptionalCapabilityError, \"code\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 5700\n});\nexport class UnsupportedChainIdError extends ProviderRpcError {\n constructor(cause) {\n super(cause, {\n code: UnsupportedChainIdError.code,\n name: 'UnsupportedChainIdError',\n shortMessage: 'This Wallet does not support the requested chain ID.',\n });\n }\n}\nObject.defineProperty(UnsupportedChainIdError, \"code\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 5710\n});\nexport class DuplicateIdError extends ProviderRpcError {\n constructor(cause) {\n super(cause, {\n code: DuplicateIdError.code,\n name: 'DuplicateIdError',\n shortMessage: 'There is already a bundle submitted with this ID.',\n });\n }\n}\nObject.defineProperty(DuplicateIdError, \"code\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 5720\n});\nexport class UnknownBundleIdError extends ProviderRpcError {\n constructor(cause) {\n super(cause, {\n code: UnknownBundleIdError.code,\n name: 'UnknownBundleIdError',\n shortMessage: 'This bundle id is unknown / has not been submitted',\n });\n }\n}\nObject.defineProperty(UnknownBundleIdError, \"code\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 5730\n});\nexport class BundleTooLargeError extends ProviderRpcError {\n constructor(cause) {\n super(cause, {\n code: BundleTooLargeError.code,\n name: 'BundleTooLargeError',\n shortMessage: 'The call bundle is too large for the Wallet to process.',\n });\n }\n}\nObject.defineProperty(BundleTooLargeError, \"code\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 5740\n});\nexport class AtomicReadyWalletRejectedUpgradeError extends ProviderRpcError {\n constructor(cause) {\n super(cause, {\n code: AtomicReadyWalletRejectedUpgradeError.code,\n name: 'AtomicReadyWalletRejectedUpgradeError',\n shortMessage: 'The Wallet can support atomicity after an upgrade, but the user rejected the upgrade.',\n });\n }\n}\nObject.defineProperty(AtomicReadyWalletRejectedUpgradeError, \"code\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 5750\n});\nexport class AtomicityNotSupportedError extends ProviderRpcError {\n constructor(cause) {\n super(cause, {\n code: AtomicityNotSupportedError.code,\n name: 'AtomicityNotSupportedError',\n shortMessage: 'The wallet does not support atomic execution but the request requires it.',\n });\n }\n}\nObject.defineProperty(AtomicityNotSupportedError, \"code\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 5760\n});\nexport class UnknownRpcError extends RpcError {\n constructor(cause) {\n super(cause, {\n name: 'UnknownRpcError',\n shortMessage: 'An unknown RPC error occurred.',\n });\n }\n}\n//# sourceMappingURL=rpc.js.map","import { BaseError } from '../../errors/base.js';\nimport { ExecutionRevertedError, FeeCapTooHighError, FeeCapTooLowError, InsufficientFundsError, IntrinsicGasTooHighError, IntrinsicGasTooLowError, NonceMaxValueError, NonceTooHighError, NonceTooLowError, TipAboveFeeCapError, TransactionTypeNotSupportedError, UnknownNodeError, } from '../../errors/node.js';\nimport { RpcRequestError } from '../../errors/request.js';\nimport { InvalidInputRpcError, TransactionRejectedRpcError, } from '../../errors/rpc.js';\nexport function containsNodeError(err) {\n return (err instanceof TransactionRejectedRpcError ||\n err instanceof InvalidInputRpcError ||\n (err instanceof RpcRequestError && err.code === ExecutionRevertedError.code));\n}\nexport function getNodeError(err, args) {\n const message = (err.details || '').toLowerCase();\n const executionRevertedError = err instanceof BaseError\n ? err.walk((e) => e?.code ===\n ExecutionRevertedError.code)\n : err;\n if (executionRevertedError instanceof BaseError)\n return new ExecutionRevertedError({\n cause: err,\n message: executionRevertedError.details,\n });\n if (ExecutionRevertedError.nodeMessage.test(message))\n return new ExecutionRevertedError({\n cause: err,\n message: err.details,\n });\n if (FeeCapTooHighError.nodeMessage.test(message))\n return new FeeCapTooHighError({\n cause: err,\n maxFeePerGas: args?.maxFeePerGas,\n });\n if (FeeCapTooLowError.nodeMessage.test(message))\n return new FeeCapTooLowError({\n cause: err,\n maxFeePerGas: args?.maxFeePerGas,\n });\n if (NonceTooHighError.nodeMessage.test(message))\n return new NonceTooHighError({ cause: err, nonce: args?.nonce });\n if (NonceTooLowError.nodeMessage.test(message))\n return new NonceTooLowError({ cause: err, nonce: args?.nonce });\n if (NonceMaxValueError.nodeMessage.test(message))\n return new NonceMaxValueError({ cause: err, nonce: args?.nonce });\n if (InsufficientFundsError.nodeMessage.test(message))\n return new InsufficientFundsError({ cause: err });\n if (IntrinsicGasTooHighError.nodeMessage.test(message))\n return new IntrinsicGasTooHighError({ cause: err, gas: args?.gas });\n if (IntrinsicGasTooLowError.nodeMessage.test(message))\n return new IntrinsicGasTooLowError({ cause: err, gas: args?.gas });\n if (TransactionTypeNotSupportedError.nodeMessage.test(message))\n return new TransactionTypeNotSupportedError({ cause: err });\n if (TipAboveFeeCapError.nodeMessage.test(message))\n return new TipAboveFeeCapError({\n cause: err,\n maxFeePerGas: args?.maxFeePerGas,\n maxPriorityFeePerGas: args?.maxPriorityFeePerGas,\n });\n return new UnknownNodeError({\n cause: err,\n });\n}\n//# sourceMappingURL=getNodeError.js.map","import { UnknownNodeError } from '../../errors/node.js';\nimport { TransactionExecutionError, } from '../../errors/transaction.js';\nimport { getNodeError, } from './getNodeError.js';\nexport function getTransactionError(err, { docsPath, ...args }) {\n const cause = (() => {\n const cause = getNodeError(err, args);\n if (cause instanceof UnknownNodeError)\n return err;\n return cause;\n })();\n return new TransactionExecutionError(cause, {\n docsPath,\n ...args,\n });\n}\n//# sourceMappingURL=getTransactionError.js.map","/**\n * @description Picks out the keys from `value` that exist in the formatter..\n */\nexport function extract(value_, { format }) {\n if (!format)\n return {};\n const value = {};\n function extract_(formatted) {\n const keys = Object.keys(formatted);\n for (const key of keys) {\n if (key in value_)\n value[key] = value_[key];\n if (formatted[key] &&\n typeof formatted[key] === 'object' &&\n !Array.isArray(formatted[key]))\n extract_(formatted[key]);\n }\n }\n const formatted = format(value_ || {});\n extract_(formatted);\n return value;\n}\n//# sourceMappingURL=extract.js.map","export function defineFormatter(type, format) {\n return ({ exclude, format: overrides, }) => {\n return {\n exclude,\n format: (args) => {\n const formatted = format(args);\n if (exclude) {\n for (const key of exclude) {\n delete formatted[key];\n }\n }\n return {\n ...formatted,\n ...overrides(args),\n };\n },\n type,\n };\n };\n}\n//# sourceMappingURL=formatter.js.map","import { bytesToHex, numberToHex } from '../encoding/toHex.js';\nimport { defineFormatter } from './formatter.js';\nexport const rpcTransactionType = {\n legacy: '0x0',\n eip2930: '0x1',\n eip1559: '0x2',\n eip4844: '0x3',\n eip7702: '0x4',\n};\nexport function formatTransactionRequest(request) {\n const rpcRequest = {};\n if (typeof request.authorizationList !== 'undefined')\n rpcRequest.authorizationList = formatAuthorizationList(request.authorizationList);\n if (typeof request.accessList !== 'undefined')\n rpcRequest.accessList = request.accessList;\n if (typeof request.blobVersionedHashes !== 'undefined')\n rpcRequest.blobVersionedHashes = request.blobVersionedHashes;\n if (typeof request.blobs !== 'undefined') {\n if (typeof request.blobs[0] !== 'string')\n rpcRequest.blobs = request.blobs.map((x) => bytesToHex(x));\n else\n rpcRequest.blobs = request.blobs;\n }\n if (typeof request.data !== 'undefined')\n rpcRequest.data = request.data;\n if (typeof request.from !== 'undefined')\n rpcRequest.from = request.from;\n if (typeof request.gas !== 'undefined')\n rpcRequest.gas = numberToHex(request.gas);\n if (typeof request.gasPrice !== 'undefined')\n rpcRequest.gasPrice = numberToHex(request.gasPrice);\n if (typeof request.maxFeePerBlobGas !== 'undefined')\n rpcRequest.maxFeePerBlobGas = numberToHex(request.maxFeePerBlobGas);\n if (typeof request.maxFeePerGas !== 'undefined')\n rpcRequest.maxFeePerGas = numberToHex(request.maxFeePerGas);\n if (typeof request.maxPriorityFeePerGas !== 'undefined')\n rpcRequest.maxPriorityFeePerGas = numberToHex(request.maxPriorityFeePerGas);\n if (typeof request.nonce !== 'undefined')\n rpcRequest.nonce = numberToHex(request.nonce);\n if (typeof request.to !== 'undefined')\n rpcRequest.to = request.to;\n if (typeof request.type !== 'undefined')\n rpcRequest.type = rpcTransactionType[request.type];\n if (typeof request.value !== 'undefined')\n rpcRequest.value = numberToHex(request.value);\n return rpcRequest;\n}\nexport const defineTransactionRequest = /*#__PURE__*/ defineFormatter('transactionRequest', formatTransactionRequest);\n//////////////////////////////////////////////////////////////////////////////\nfunction formatAuthorizationList(authorizationList) {\n return authorizationList.map((authorization) => ({\n address: authorization.address,\n r: authorization.r\n ? numberToHex(BigInt(authorization.r))\n : authorization.r,\n s: authorization.s\n ? numberToHex(BigInt(authorization.s))\n : authorization.s,\n chainId: numberToHex(authorization.chainId),\n nonce: numberToHex(authorization.nonce),\n ...(typeof authorization.yParity !== 'undefined'\n ? { yParity: numberToHex(authorization.yParity) }\n : {}),\n ...(typeof authorization.v !== 'undefined' &&\n typeof authorization.yParity === 'undefined'\n ? { v: numberToHex(authorization.v) }\n : {}),\n }));\n}\n//# sourceMappingURL=transactionRequest.js.map","/**\n * Retrieves and returns an action from the client (if exists), and falls\n * back to the tree-shakable action.\n *\n * Useful for extracting overridden actions from a client (ie. if a consumer\n * wants to override the `sendTransaction` implementation).\n */\nexport function getAction(client, actionFn, \n// Some minifiers drop `Function.prototype.name`, or replace it with short letters,\n// meaning that `actionFn.name` will not always work. For that case, the consumer\n// needs to pass the name explicitly.\nname) {\n const action_implicit = client[actionFn.name];\n if (typeof action_implicit === 'function')\n return action_implicit;\n const action_explicit = client[name];\n if (typeof action_explicit === 'function')\n return action_explicit;\n return (params) => actionFn(client, params);\n}\n//# sourceMappingURL=getAction.js.map","export const maxInt8 = 2n ** (8n - 1n) - 1n;\nexport const maxInt16 = 2n ** (16n - 1n) - 1n;\nexport const maxInt24 = 2n ** (24n - 1n) - 1n;\nexport const maxInt32 = 2n ** (32n - 1n) - 1n;\nexport const maxInt40 = 2n ** (40n - 1n) - 1n;\nexport const maxInt48 = 2n ** (48n - 1n) - 1n;\nexport const maxInt56 = 2n ** (56n - 1n) - 1n;\nexport const maxInt64 = 2n ** (64n - 1n) - 1n;\nexport const maxInt72 = 2n ** (72n - 1n) - 1n;\nexport const maxInt80 = 2n ** (80n - 1n) - 1n;\nexport const maxInt88 = 2n ** (88n - 1n) - 1n;\nexport const maxInt96 = 2n ** (96n - 1n) - 1n;\nexport const maxInt104 = 2n ** (104n - 1n) - 1n;\nexport const maxInt112 = 2n ** (112n - 1n) - 1n;\nexport const maxInt120 = 2n ** (120n - 1n) - 1n;\nexport const maxInt128 = 2n ** (128n - 1n) - 1n;\nexport const maxInt136 = 2n ** (136n - 1n) - 1n;\nexport const maxInt144 = 2n ** (144n - 1n) - 1n;\nexport const maxInt152 = 2n ** (152n - 1n) - 1n;\nexport const maxInt160 = 2n ** (160n - 1n) - 1n;\nexport const maxInt168 = 2n ** (168n - 1n) - 1n;\nexport const maxInt176 = 2n ** (176n - 1n) - 1n;\nexport const maxInt184 = 2n ** (184n - 1n) - 1n;\nexport const maxInt192 = 2n ** (192n - 1n) - 1n;\nexport const maxInt200 = 2n ** (200n - 1n) - 1n;\nexport const maxInt208 = 2n ** (208n - 1n) - 1n;\nexport const maxInt216 = 2n ** (216n - 1n) - 1n;\nexport const maxInt224 = 2n ** (224n - 1n) - 1n;\nexport const maxInt232 = 2n ** (232n - 1n) - 1n;\nexport const maxInt240 = 2n ** (240n - 1n) - 1n;\nexport const maxInt248 = 2n ** (248n - 1n) - 1n;\nexport const maxInt256 = 2n ** (256n - 1n) - 1n;\nexport const minInt8 = -(2n ** (8n - 1n));\nexport const minInt16 = -(2n ** (16n - 1n));\nexport const minInt24 = -(2n ** (24n - 1n));\nexport const minInt32 = -(2n ** (32n - 1n));\nexport const minInt40 = -(2n ** (40n - 1n));\nexport const minInt48 = -(2n ** (48n - 1n));\nexport const minInt56 = -(2n ** (56n - 1n));\nexport const minInt64 = -(2n ** (64n - 1n));\nexport const minInt72 = -(2n ** (72n - 1n));\nexport const minInt80 = -(2n ** (80n - 1n));\nexport const minInt88 = -(2n ** (88n - 1n));\nexport const minInt96 = -(2n ** (96n - 1n));\nexport const minInt104 = -(2n ** (104n - 1n));\nexport const minInt112 = -(2n ** (112n - 1n));\nexport const minInt120 = -(2n ** (120n - 1n));\nexport const minInt128 = -(2n ** (128n - 1n));\nexport const minInt136 = -(2n ** (136n - 1n));\nexport const minInt144 = -(2n ** (144n - 1n));\nexport const minInt152 = -(2n ** (152n - 1n));\nexport const minInt160 = -(2n ** (160n - 1n));\nexport const minInt168 = -(2n ** (168n - 1n));\nexport const minInt176 = -(2n ** (176n - 1n));\nexport const minInt184 = -(2n ** (184n - 1n));\nexport const minInt192 = -(2n ** (192n - 1n));\nexport const minInt200 = -(2n ** (200n - 1n));\nexport const minInt208 = -(2n ** (208n - 1n));\nexport const minInt216 = -(2n ** (216n - 1n));\nexport const minInt224 = -(2n ** (224n - 1n));\nexport const minInt232 = -(2n ** (232n - 1n));\nexport const minInt240 = -(2n ** (240n - 1n));\nexport const minInt248 = -(2n ** (248n - 1n));\nexport const minInt256 = -(2n ** (256n - 1n));\nexport const maxUint8 = 2n ** 8n - 1n;\nexport const maxUint16 = 2n ** 16n - 1n;\nexport const maxUint24 = 2n ** 24n - 1n;\nexport const maxUint32 = 2n ** 32n - 1n;\nexport const maxUint40 = 2n ** 40n - 1n;\nexport const maxUint48 = 2n ** 48n - 1n;\nexport const maxUint56 = 2n ** 56n - 1n;\nexport const maxUint64 = 2n ** 64n - 1n;\nexport const maxUint72 = 2n ** 72n - 1n;\nexport const maxUint80 = 2n ** 80n - 1n;\nexport const maxUint88 = 2n ** 88n - 1n;\nexport const maxUint96 = 2n ** 96n - 1n;\nexport const maxUint104 = 2n ** 104n - 1n;\nexport const maxUint112 = 2n ** 112n - 1n;\nexport const maxUint120 = 2n ** 120n - 1n;\nexport const maxUint128 = 2n ** 128n - 1n;\nexport const maxUint136 = 2n ** 136n - 1n;\nexport const maxUint144 = 2n ** 144n - 1n;\nexport const maxUint152 = 2n ** 152n - 1n;\nexport const maxUint160 = 2n ** 160n - 1n;\nexport const maxUint168 = 2n ** 168n - 1n;\nexport const maxUint176 = 2n ** 176n - 1n;\nexport const maxUint184 = 2n ** 184n - 1n;\nexport const maxUint192 = 2n ** 192n - 1n;\nexport const maxUint200 = 2n ** 200n - 1n;\nexport const maxUint208 = 2n ** 208n - 1n;\nexport const maxUint216 = 2n ** 216n - 1n;\nexport const maxUint224 = 2n ** 224n - 1n;\nexport const maxUint232 = 2n ** 232n - 1n;\nexport const maxUint240 = 2n ** 240n - 1n;\nexport const maxUint248 = 2n ** 248n - 1n;\nexport const maxUint256 = 2n ** 256n - 1n;\n//# sourceMappingURL=number.js.map","import { parseAccount, } from '../../accounts/utils/parseAccount.js';\nimport { maxUint256 } from '../../constants/number.js';\nimport { InvalidAddressError, } from '../../errors/address.js';\nimport { FeeCapTooHighError, TipAboveFeeCapError, } from '../../errors/node.js';\nimport { FeeConflictError, } from '../../errors/transaction.js';\nimport { isAddress } from '../address/isAddress.js';\nexport function assertRequest(args) {\n const { account: account_, gasPrice, maxFeePerGas, maxPriorityFeePerGas, to, } = args;\n const account = account_ ? parseAccount(account_) : undefined;\n if (account && !isAddress(account.address))\n throw new InvalidAddressError({ address: account.address });\n if (to && !isAddress(to))\n throw new InvalidAddressError({ address: to });\n if (typeof gasPrice !== 'undefined' &&\n (typeof maxFeePerGas !== 'undefined' ||\n typeof maxPriorityFeePerGas !== 'undefined'))\n throw new FeeConflictError();\n if (maxFeePerGas && maxFeePerGas > maxUint256)\n throw new FeeCapTooHighError({ maxFeePerGas });\n if (maxPriorityFeePerGas &&\n maxFeePerGas &&\n maxPriorityFeePerGas > maxFeePerGas)\n throw new TipAboveFeeCapError({ maxFeePerGas, maxPriorityFeePerGas });\n}\n//# sourceMappingURL=assertRequest.js.map","import { hexToNumber, } from '../../utils/encoding/fromHex.js';\n/**\n * Returns the chain ID associated with the current network.\n *\n * - Docs: https://viem.sh/docs/actions/public/getChainId\n * - JSON-RPC Methods: [`eth_chainId`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_chainid)\n *\n * @param client - Client to use\n * @returns The current chain ID. {@link GetChainIdReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { getChainId } from 'viem/public'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const chainId = await getChainId(client)\n * // 1\n */\nexport async function getChainId(client) {\n const chainIdHex = await client.request({\n method: 'eth_chainId',\n }, { dedupe: true });\n return hexToNumber(chainIdHex);\n}\n//# sourceMappingURL=getChainId.js.map","import { formatGwei } from '../utils/unit/formatGwei.js';\nimport { BaseError } from './base.js';\nexport class BaseFeeScalarError extends BaseError {\n constructor() {\n super('`baseFeeMultiplier` must be greater than 1.', {\n name: 'BaseFeeScalarError',\n });\n }\n}\nexport class Eip1559FeesNotSupportedError extends BaseError {\n constructor() {\n super('Chain does not support EIP-1559 fees.', {\n name: 'Eip1559FeesNotSupportedError',\n });\n }\n}\nexport class MaxFeePerGasTooLowError extends BaseError {\n constructor({ maxPriorityFeePerGas }) {\n super(`\\`maxFeePerGas\\` cannot be less than the \\`maxPriorityFeePerGas\\` (${formatGwei(maxPriorityFeePerGas)} gwei).`, { name: 'MaxFeePerGasTooLowError' });\n }\n}\n//# sourceMappingURL=fee.js.map","import { BaseError } from './base.js';\nexport class BlockNotFoundError extends BaseError {\n constructor({ blockHash, blockNumber, }) {\n let identifier = 'Block';\n if (blockHash)\n identifier = `Block at hash \"${blockHash}\"`;\n if (blockNumber)\n identifier = `Block at number \"${blockNumber}\"`;\n super(`${identifier} could not be found.`, { name: 'BlockNotFoundError' });\n }\n}\n//# sourceMappingURL=block.js.map","import { hexToNumber } from '../encoding/fromHex.js';\nimport { defineFormatter } from './formatter.js';\nexport const transactionType = {\n '0x0': 'legacy',\n '0x1': 'eip2930',\n '0x2': 'eip1559',\n '0x3': 'eip4844',\n '0x4': 'eip7702',\n};\nexport function formatTransaction(transaction) {\n const transaction_ = {\n ...transaction,\n blockHash: transaction.blockHash ? transaction.blockHash : null,\n blockNumber: transaction.blockNumber\n ? BigInt(transaction.blockNumber)\n : null,\n chainId: transaction.chainId ? hexToNumber(transaction.chainId) : undefined,\n gas: transaction.gas ? BigInt(transaction.gas) : undefined,\n gasPrice: transaction.gasPrice ? BigInt(transaction.gasPrice) : undefined,\n maxFeePerBlobGas: transaction.maxFeePerBlobGas\n ? BigInt(transaction.maxFeePerBlobGas)\n : undefined,\n maxFeePerGas: transaction.maxFeePerGas\n ? BigInt(transaction.maxFeePerGas)\n : undefined,\n maxPriorityFeePerGas: transaction.maxPriorityFeePerGas\n ? BigInt(transaction.maxPriorityFeePerGas)\n : undefined,\n nonce: transaction.nonce ? hexToNumber(transaction.nonce) : undefined,\n to: transaction.to ? transaction.to : null,\n transactionIndex: transaction.transactionIndex\n ? Number(transaction.transactionIndex)\n : null,\n type: transaction.type\n ? transactionType[transaction.type]\n : undefined,\n typeHex: transaction.type ? transaction.type : undefined,\n value: transaction.value ? BigInt(transaction.value) : undefined,\n v: transaction.v ? BigInt(transaction.v) : undefined,\n };\n if (transaction.authorizationList)\n transaction_.authorizationList = formatAuthorizationList(transaction.authorizationList);\n transaction_.yParity = (() => {\n // If `yParity` is provided, we will use it.\n if (transaction.yParity)\n return Number(transaction.yParity);\n // If no `yParity` provided, try derive from `v`.\n if (typeof transaction_.v === 'bigint') {\n if (transaction_.v === 0n || transaction_.v === 27n)\n return 0;\n if (transaction_.v === 1n || transaction_.v === 28n)\n return 1;\n if (transaction_.v >= 35n)\n return transaction_.v % 2n === 0n ? 1 : 0;\n }\n return undefined;\n })();\n if (transaction_.type === 'legacy') {\n delete transaction_.accessList;\n delete transaction_.maxFeePerBlobGas;\n delete transaction_.maxFeePerGas;\n delete transaction_.maxPriorityFeePerGas;\n delete transaction_.yParity;\n }\n if (transaction_.type === 'eip2930') {\n delete transaction_.maxFeePerBlobGas;\n delete transaction_.maxFeePerGas;\n delete transaction_.maxPriorityFeePerGas;\n }\n if (transaction_.type === 'eip1559') {\n delete transaction_.maxFeePerBlobGas;\n }\n return transaction_;\n}\nexport const defineTransaction = /*#__PURE__*/ defineFormatter('transaction', formatTransaction);\n//////////////////////////////////////////////////////////////////////////////\nfunction formatAuthorizationList(authorizationList) {\n return authorizationList.map((authorization) => ({\n address: authorization.address,\n chainId: Number(authorization.chainId),\n nonce: Number(authorization.nonce),\n r: authorization.r,\n s: authorization.s,\n yParity: Number(authorization.yParity),\n }));\n}\n//# sourceMappingURL=transaction.js.map","import { defineFormatter } from './formatter.js';\nimport { formatTransaction } from './transaction.js';\nexport function formatBlock(block) {\n const transactions = (block.transactions ?? []).map((transaction) => {\n if (typeof transaction === 'string')\n return transaction;\n return formatTransaction(transaction);\n });\n return {\n ...block,\n baseFeePerGas: block.baseFeePerGas ? BigInt(block.baseFeePerGas) : null,\n blobGasUsed: block.blobGasUsed ? BigInt(block.blobGasUsed) : undefined,\n difficulty: block.difficulty ? BigInt(block.difficulty) : undefined,\n excessBlobGas: block.excessBlobGas\n ? BigInt(block.excessBlobGas)\n : undefined,\n gasLimit: block.gasLimit ? BigInt(block.gasLimit) : undefined,\n gasUsed: block.gasUsed ? BigInt(block.gasUsed) : undefined,\n hash: block.hash ? block.hash : null,\n logsBloom: block.logsBloom ? block.logsBloom : null,\n nonce: block.nonce ? block.nonce : null,\n number: block.number ? BigInt(block.number) : null,\n size: block.size ? BigInt(block.size) : undefined,\n timestamp: block.timestamp ? BigInt(block.timestamp) : undefined,\n transactions,\n totalDifficulty: block.totalDifficulty\n ? BigInt(block.totalDifficulty)\n : null,\n };\n}\nexport const defineBlock = /*#__PURE__*/ defineFormatter('block', formatBlock);\n//# sourceMappingURL=block.js.map","import { BlockNotFoundError, } from '../../errors/block.js';\nimport { numberToHex, } from '../../utils/encoding/toHex.js';\nimport { formatBlock, } from '../../utils/formatters/block.js';\n/**\n * Returns information about a block at a block number, hash, or tag.\n *\n * - Docs: https://viem.sh/docs/actions/public/getBlock\n * - Examples: https://stackblitz.com/github/wevm/viem/tree/main/examples/blocks_fetching-blocks\n * - JSON-RPC Methods:\n * - Calls [`eth_getBlockByNumber`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getblockbynumber) for `blockNumber` & `blockTag`.\n * - Calls [`eth_getBlockByHash`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getblockbyhash) for `blockHash`.\n *\n * @param client - Client to use\n * @param parameters - {@link GetBlockParameters}\n * @returns Information about the block. {@link GetBlockReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { getBlock } from 'viem/public'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const block = await getBlock(client)\n */\nexport async function getBlock(client, { blockHash, blockNumber, blockTag = client.experimental_blockTag ?? 'latest', includeTransactions: includeTransactions_, } = {}) {\n const includeTransactions = includeTransactions_ ?? false;\n const blockNumberHex = blockNumber !== undefined ? numberToHex(blockNumber) : undefined;\n let block = null;\n if (blockHash) {\n block = await client.request({\n method: 'eth_getBlockByHash',\n params: [blockHash, includeTransactions],\n }, { dedupe: true });\n }\n else {\n block = await client.request({\n method: 'eth_getBlockByNumber',\n params: [blockNumberHex || blockTag, includeTransactions],\n }, { dedupe: Boolean(blockNumberHex) });\n }\n if (!block)\n throw new BlockNotFoundError({ blockHash, blockNumber });\n const format = client.chain?.formatters?.block?.format || formatBlock;\n return format(block);\n}\n//# sourceMappingURL=getBlock.js.map","/**\n * Returns the current price of gas (in wei).\n *\n * - Docs: https://viem.sh/docs/actions/public/getGasPrice\n * - JSON-RPC Methods: [`eth_gasPrice`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_gasprice)\n *\n * @param client - Client to use\n * @returns The gas price (in wei). {@link GetGasPriceReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { getGasPrice } from 'viem/public'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const gasPrice = await getGasPrice(client)\n */\nexport async function getGasPrice(client) {\n const gasPrice = await client.request({\n method: 'eth_gasPrice',\n });\n return BigInt(gasPrice);\n}\n//# sourceMappingURL=getGasPrice.js.map","import { Eip1559FeesNotSupportedError, } from '../../errors/fee.js';\nimport { hexToBigInt, } from '../../utils/encoding/fromHex.js';\nimport { getAction } from '../../utils/getAction.js';\nimport { getBlock } from './getBlock.js';\nimport { getGasPrice } from './getGasPrice.js';\n/**\n * Returns an estimate for the max priority fee per gas (in wei) for a\n * transaction to be likely included in the next block.\n * Defaults to [`chain.fees.defaultPriorityFee`](/docs/clients/chains#fees-defaultpriorityfee) if set.\n *\n * - Docs: https://viem.sh/docs/actions/public/estimateMaxPriorityFeePerGas\n *\n * @param client - Client to use\n * @returns An estimate (in wei) for the max priority fee per gas. {@link EstimateMaxPriorityFeePerGasReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { estimateMaxPriorityFeePerGas } from 'viem/actions'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const maxPriorityFeePerGas = await estimateMaxPriorityFeePerGas(client)\n * // 10000000n\n */\nexport async function estimateMaxPriorityFeePerGas(client, args) {\n return internal_estimateMaxPriorityFeePerGas(client, args);\n}\nexport async function internal_estimateMaxPriorityFeePerGas(client, args) {\n const { block: block_, chain = client.chain, request } = args || {};\n try {\n const maxPriorityFeePerGas = chain?.fees?.maxPriorityFeePerGas ?? chain?.fees?.defaultPriorityFee;\n if (typeof maxPriorityFeePerGas === 'function') {\n const block = block_ || (await getAction(client, getBlock, 'getBlock')({}));\n const maxPriorityFeePerGas_ = await maxPriorityFeePerGas({\n block,\n client,\n request,\n });\n if (maxPriorityFeePerGas_ === null)\n throw new Error();\n return maxPriorityFeePerGas_;\n }\n if (typeof maxPriorityFeePerGas !== 'undefined')\n return maxPriorityFeePerGas;\n const maxPriorityFeePerGasHex = await client.request({\n method: 'eth_maxPriorityFeePerGas',\n });\n return hexToBigInt(maxPriorityFeePerGasHex);\n }\n catch {\n // If the RPC Provider does not support `eth_maxPriorityFeePerGas`\n // fall back to calculating it manually via `gasPrice - baseFeePerGas`.\n // See: https://github.com/ethereum/pm/issues/328#:~:text=eth_maxPriorityFeePerGas%20after%20London%20will%20effectively%20return%20eth_gasPrice%20%2D%20baseFee\n const [block, gasPrice] = await Promise.all([\n block_\n ? Promise.resolve(block_)\n : getAction(client, getBlock, 'getBlock')({}),\n getAction(client, getGasPrice, 'getGasPrice')({}),\n ]);\n if (typeof block.baseFeePerGas !== 'bigint')\n throw new Eip1559FeesNotSupportedError();\n const maxPriorityFeePerGas = gasPrice - block.baseFeePerGas;\n if (maxPriorityFeePerGas < 0n)\n return 0n;\n return maxPriorityFeePerGas;\n }\n}\n//# sourceMappingURL=estimateMaxPriorityFeePerGas.js.map","import { BaseFeeScalarError, Eip1559FeesNotSupportedError, } from '../../errors/fee.js';\nimport { getAction } from '../../utils/getAction.js';\nimport { internal_estimateMaxPriorityFeePerGas, } from './estimateMaxPriorityFeePerGas.js';\nimport { getBlock } from './getBlock.js';\nimport { getGasPrice } from './getGasPrice.js';\n/**\n * Returns an estimate for the fees per gas (in wei) for a\n * transaction to be likely included in the next block.\n * Defaults to [`chain.fees.estimateFeesPerGas`](/docs/clients/chains#fees-estimatefeespergas) if set.\n *\n * - Docs: https://viem.sh/docs/actions/public/estimateFeesPerGas\n *\n * @param client - Client to use\n * @param parameters - {@link EstimateFeesPerGasParameters}\n * @returns An estimate (in wei) for the fees per gas. {@link EstimateFeesPerGasReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { estimateFeesPerGas } from 'viem/actions'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const maxPriorityFeePerGas = await estimateFeesPerGas(client)\n * // { maxFeePerGas: ..., maxPriorityFeePerGas: ... }\n */\nexport async function estimateFeesPerGas(client, args) {\n return internal_estimateFeesPerGas(client, args);\n}\nexport async function internal_estimateFeesPerGas(client, args) {\n const { block: block_, chain = client.chain, request, type = 'eip1559', } = args || {};\n const baseFeeMultiplier = await (async () => {\n if (typeof chain?.fees?.baseFeeMultiplier === 'function')\n return chain.fees.baseFeeMultiplier({\n block: block_,\n client,\n request,\n });\n return chain?.fees?.baseFeeMultiplier ?? 1.2;\n })();\n if (baseFeeMultiplier < 1)\n throw new BaseFeeScalarError();\n const decimals = baseFeeMultiplier.toString().split('.')[1]?.length ?? 0;\n const denominator = 10 ** decimals;\n const multiply = (base) => (base * BigInt(Math.ceil(baseFeeMultiplier * denominator))) /\n BigInt(denominator);\n const block = block_\n ? block_\n : await getAction(client, getBlock, 'getBlock')({});\n if (typeof chain?.fees?.estimateFeesPerGas === 'function') {\n const fees = (await chain.fees.estimateFeesPerGas({\n block: block_,\n client,\n multiply,\n request,\n type,\n }));\n if (fees !== null)\n return fees;\n }\n if (type === 'eip1559') {\n if (typeof block.baseFeePerGas !== 'bigint')\n throw new Eip1559FeesNotSupportedError();\n const maxPriorityFeePerGas = typeof request?.maxPriorityFeePerGas === 'bigint'\n ? request.maxPriorityFeePerGas\n : await internal_estimateMaxPriorityFeePerGas(client, {\n block: block,\n chain,\n request,\n });\n const baseFeePerGas = multiply(block.baseFeePerGas);\n const maxFeePerGas = request?.maxFeePerGas ?? baseFeePerGas + maxPriorityFeePerGas;\n return {\n maxFeePerGas,\n maxPriorityFeePerGas,\n };\n }\n const gasPrice = request?.gasPrice ??\n multiply(await getAction(client, getGasPrice, 'getGasPrice')({}));\n return {\n gasPrice,\n };\n}\n//# sourceMappingURL=estimateFeesPerGas.js.map","import { formatEther } from '../utils/unit/formatEther.js';\nimport { formatGwei } from '../utils/unit/formatGwei.js';\nimport { BaseError } from './base.js';\nimport { prettyPrint } from './transaction.js';\nexport class EstimateGasExecutionError extends BaseError {\n constructor(cause, { account, docsPath, chain, data, gas, gasPrice, maxFeePerGas, maxPriorityFeePerGas, nonce, to, value, }) {\n const prettyArgs = prettyPrint({\n from: account?.address,\n to,\n value: typeof value !== 'undefined' &&\n `${formatEther(value)} ${chain?.nativeCurrency?.symbol || 'ETH'}`,\n data,\n gas,\n gasPrice: typeof gasPrice !== 'undefined' && `${formatGwei(gasPrice)} gwei`,\n maxFeePerGas: typeof maxFeePerGas !== 'undefined' &&\n `${formatGwei(maxFeePerGas)} gwei`,\n maxPriorityFeePerGas: typeof maxPriorityFeePerGas !== 'undefined' &&\n `${formatGwei(maxPriorityFeePerGas)} gwei`,\n nonce,\n });\n super(cause.shortMessage, {\n cause,\n docsPath,\n metaMessages: [\n ...(cause.metaMessages ? [...cause.metaMessages, ' '] : []),\n 'Estimate Gas Arguments:',\n prettyArgs,\n ].filter(Boolean),\n name: 'EstimateGasExecutionError',\n });\n Object.defineProperty(this, \"cause\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: void 0\n });\n this.cause = cause;\n }\n}\n//# sourceMappingURL=estimateGas.js.map","import { EstimateGasExecutionError, } from '../../errors/estimateGas.js';\nimport { UnknownNodeError } from '../../errors/node.js';\nimport { getNodeError, } from './getNodeError.js';\nexport function getEstimateGasError(err, { docsPath, ...args }) {\n const cause = (() => {\n const cause = getNodeError(err, args);\n if (cause instanceof UnknownNodeError)\n return err;\n return cause;\n })();\n return new EstimateGasExecutionError(cause, {\n docsPath,\n ...args,\n });\n}\n//# sourceMappingURL=getEstimateGasError.js.map","import { BaseError } from './base.js';\nexport class AccountStateConflictError extends BaseError {\n constructor({ address }) {\n super(`State for account \"${address}\" is set multiple times.`, {\n name: 'AccountStateConflictError',\n });\n }\n}\nexport class StateAssignmentConflictError extends BaseError {\n constructor() {\n super('state and stateDiff are set on the same account.', {\n name: 'StateAssignmentConflictError',\n });\n }\n}\n/** @internal */\nexport function prettyStateMapping(stateMapping) {\n return stateMapping.reduce((pretty, { slot, value }) => {\n return `${pretty} ${slot}: ${value}\\n`;\n }, '');\n}\nexport function prettyStateOverride(stateOverride) {\n return stateOverride\n .reduce((pretty, { address, ...state }) => {\n let val = `${pretty} ${address}:\\n`;\n if (state.nonce)\n val += ` nonce: ${state.nonce}\\n`;\n if (state.balance)\n val += ` balance: ${state.balance}\\n`;\n if (state.code)\n val += ` code: ${state.code}\\n`;\n if (state.state) {\n val += ' state:\\n';\n val += prettyStateMapping(state.state);\n }\n if (state.stateDiff) {\n val += ' stateDiff:\\n';\n val += prettyStateMapping(state.stateDiff);\n }\n return val;\n }, ' State Override:\\n')\n .slice(0, -1);\n}\n//# sourceMappingURL=stateOverride.js.map","import { InvalidAddressError, } from '../errors/address.js';\nimport { InvalidBytesLengthError, } from '../errors/data.js';\nimport { AccountStateConflictError, StateAssignmentConflictError, } from '../errors/stateOverride.js';\nimport { isAddress } from './address/isAddress.js';\nimport { numberToHex } from './encoding/toHex.js';\n/** @internal */\nexport function serializeStateMapping(stateMapping) {\n if (!stateMapping || stateMapping.length === 0)\n return undefined;\n return stateMapping.reduce((acc, { slot, value }) => {\n if (slot.length !== 66)\n throw new InvalidBytesLengthError({\n size: slot.length,\n targetSize: 66,\n type: 'hex',\n });\n if (value.length !== 66)\n throw new InvalidBytesLengthError({\n size: value.length,\n targetSize: 66,\n type: 'hex',\n });\n acc[slot] = value;\n return acc;\n }, {});\n}\n/** @internal */\nexport function serializeAccountStateOverride(parameters) {\n const { balance, nonce, state, stateDiff, code } = parameters;\n const rpcAccountStateOverride = {};\n if (code !== undefined)\n rpcAccountStateOverride.code = code;\n if (balance !== undefined)\n rpcAccountStateOverride.balance = numberToHex(balance);\n if (nonce !== undefined)\n rpcAccountStateOverride.nonce = numberToHex(nonce);\n if (state !== undefined)\n rpcAccountStateOverride.state = serializeStateMapping(state);\n if (stateDiff !== undefined) {\n if (rpcAccountStateOverride.state)\n throw new StateAssignmentConflictError();\n rpcAccountStateOverride.stateDiff = serializeStateMapping(stateDiff);\n }\n return rpcAccountStateOverride;\n}\n/** @internal */\nexport function serializeStateOverride(parameters) {\n if (!parameters)\n return undefined;\n const rpcStateOverride = {};\n for (const { address, ...accountState } of parameters) {\n if (!isAddress(address, { strict: false }))\n throw new InvalidAddressError({ address });\n if (rpcStateOverride[address])\n throw new AccountStateConflictError({ address: address });\n rpcStateOverride[address] = serializeAccountStateOverride(accountState);\n }\n return rpcStateOverride;\n}\n//# sourceMappingURL=stateOverride.js.map","import { numberToHex, } from '../../utils/encoding/toHex.js';\n/**\n * Returns the balance of an address in wei.\n *\n * - Docs: https://viem.sh/docs/actions/public/getBalance\n * - JSON-RPC Methods: [`eth_getBalance`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_getbalance)\n *\n * You can convert the balance to ether units with [`formatEther`](https://viem.sh/docs/utilities/formatEther).\n *\n * ```ts\n * const balance = await getBalance(client, {\n * address: '0xA0Cf798816D4b9b9866b5330EEa46a18382f251e',\n * blockTag: 'safe'\n * })\n * const balanceAsEther = formatEther(balance)\n * // \"6.942\"\n * ```\n *\n * @param client - Client to use\n * @param parameters - {@link GetBalanceParameters}\n * @returns The balance of the address in wei. {@link GetBalanceReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { getBalance } from 'viem/public'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const balance = await getBalance(client, {\n * address: '0xA0Cf798816D4b9b9866b5330EEa46a18382f251e',\n * })\n * // 10000000000000000000000n (wei)\n */\nexport async function getBalance(client, { address, blockNumber, blockTag = client.experimental_blockTag ?? 'latest', }) {\n const blockNumberHex = typeof blockNumber === 'bigint' ? numberToHex(blockNumber) : undefined;\n const balance = await client.request({\n method: 'eth_getBalance',\n params: [address, blockNumberHex || blockTag],\n });\n return BigInt(balance);\n}\n//# sourceMappingURL=getBalance.js.map","import { parseAccount, } from '../../accounts/utils/parseAccount.js';\nimport { BaseError } from '../../errors/base.js';\nimport { recoverAuthorizationAddress, } from '../../utils/authorization/recoverAuthorizationAddress.js';\nimport { numberToHex, } from '../../utils/encoding/toHex.js';\nimport { getEstimateGasError, } from '../../utils/errors/getEstimateGasError.js';\nimport { extract } from '../../utils/formatters/extract.js';\nimport { formatTransactionRequest, } from '../../utils/formatters/transactionRequest.js';\nimport { serializeStateOverride } from '../../utils/stateOverride.js';\nimport { assertRequest, } from '../../utils/transaction/assertRequest.js';\nimport { prepareTransactionRequest, } from '../wallet/prepareTransactionRequest.js';\nimport { getBalance } from './getBalance.js';\n/**\n * Estimates the gas necessary to complete a transaction without submitting it to the network.\n *\n * - Docs: https://viem.sh/docs/actions/public/estimateGas\n * - JSON-RPC Methods: [`eth_estimateGas`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_estimategas)\n *\n * @param client - Client to use\n * @param parameters - {@link EstimateGasParameters}\n * @returns The gas estimate (in gas units). {@link EstimateGasReturnType}\n *\n * @example\n * import { createPublicClient, http, parseEther } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { estimateGas } from 'viem/public'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const gasEstimate = await estimateGas(client, {\n * account: '0xA0Cf798816D4b9b9866b5330EEa46a18382f251e',\n * to: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8',\n * value: parseEther('1'),\n * })\n */\nexport async function estimateGas(client, args) {\n const { account: account_ = client.account } = args;\n const account = account_ ? parseAccount(account_) : undefined;\n try {\n const { accessList, authorizationList, blobs, blobVersionedHashes, blockNumber, blockTag, data, gas, gasPrice, maxFeePerBlobGas, maxFeePerGas, maxPriorityFeePerGas, nonce, value, stateOverride, ...rest } = (await prepareTransactionRequest(client, {\n ...args,\n parameters: \n // Some RPC Providers do not compute versioned hashes from blobs. We will need\n // to compute them.\n account?.type === 'local' ? undefined : ['blobVersionedHashes'],\n }));\n const blockNumberHex = typeof blockNumber === 'bigint' ? numberToHex(blockNumber) : undefined;\n const block = blockNumberHex || blockTag;\n const rpcStateOverride = serializeStateOverride(stateOverride);\n const to = await (async () => {\n // If `to` exists on the parameters, use that.\n if (rest.to)\n return rest.to;\n // If no `to` exists, and we are sending a EIP-7702 transaction, use the\n // address of the first authorization in the list.\n if (authorizationList && authorizationList.length > 0)\n return await recoverAuthorizationAddress({\n authorization: authorizationList[0],\n }).catch(() => {\n throw new BaseError('`to` is required. Could not infer from `authorizationList`');\n });\n // Otherwise, we are sending a deployment transaction.\n return undefined;\n })();\n assertRequest(args);\n const chainFormat = client.chain?.formatters?.transactionRequest?.format;\n const format = chainFormat || formatTransactionRequest;\n const request = format({\n // Pick out extra data that might exist on the chain's transaction request type.\n ...extract(rest, { format: chainFormat }),\n from: account?.address,\n accessList,\n authorizationList,\n blobs,\n blobVersionedHashes,\n data,\n gas,\n gasPrice,\n maxFeePerBlobGas,\n maxFeePerGas,\n maxPriorityFeePerGas,\n nonce,\n to,\n value,\n });\n function estimateGas_rpc(parameters) {\n const { block, request, rpcStateOverride } = parameters;\n return client.request({\n method: 'eth_estimateGas',\n params: rpcStateOverride\n ? [\n request,\n block ?? client.experimental_blockTag ?? 'latest',\n rpcStateOverride,\n ]\n : block\n ? [request, block]\n : [request],\n });\n }\n let estimate = BigInt(await estimateGas_rpc({ block, request, rpcStateOverride }));\n // TODO(7702): Remove this once https://github.com/ethereum/execution-apis/issues/561 is resolved.\n // Authorization list schema is not implemented on JSON-RPC spec yet, so we need to\n // manually estimate the gas.\n if (authorizationList) {\n const value = await getBalance(client, { address: request.from });\n const estimates = await Promise.all(authorizationList.map(async (authorization) => {\n const { address } = authorization;\n const estimate = await estimateGas_rpc({\n block,\n request: {\n authorizationList: undefined,\n data,\n from: account?.address,\n to: address,\n value: numberToHex(value),\n },\n rpcStateOverride,\n }).catch(() => 100000n);\n return 2n * BigInt(estimate);\n }));\n estimate += estimates.reduce((acc, curr) => acc + curr, 0n);\n }\n return estimate;\n }\n catch (err) {\n throw getEstimateGasError(err, {\n ...args,\n account,\n chain: client.chain,\n });\n }\n}\n//# sourceMappingURL=estimateGas.js.map","import { hexToNumber, } from '../../utils/encoding/fromHex.js';\nimport { numberToHex, } from '../../utils/encoding/toHex.js';\n/**\n * Returns the number of [Transactions](https://viem.sh/docs/glossary/terms#transaction) an Account has sent.\n *\n * - Docs: https://viem.sh/docs/actions/public/getTransactionCount\n * - JSON-RPC Methods: [`eth_getTransactionCount`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_gettransactioncount)\n *\n * @param client - Client to use\n * @param parameters - {@link GetTransactionCountParameters}\n * @returns The number of transactions an account has sent. {@link GetTransactionCountReturnType}\n *\n * @example\n * import { createPublicClient, http } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { getTransactionCount } from 'viem/public'\n *\n * const client = createPublicClient({\n * chain: mainnet,\n * transport: http(),\n * })\n * const transactionCount = await getTransactionCount(client, {\n * address: '0xA0Cf798816D4b9b9866b5330EEa46a18382f251e',\n * })\n */\nexport async function getTransactionCount(client, { address, blockTag = 'latest', blockNumber }) {\n const count = await client.request({\n method: 'eth_getTransactionCount',\n params: [\n address,\n typeof blockNumber === 'bigint' ? numberToHex(blockNumber) : blockTag,\n ],\n }, {\n dedupe: Boolean(blockNumber),\n });\n return hexToNumber(count);\n}\n//# sourceMappingURL=getTransactionCount.js.map","import { hexToBytes } from '../encoding/toBytes.js';\nimport { bytesToHex } from '../encoding/toHex.js';\n/**\n * Compute commitments from a list of blobs.\n *\n * @example\n * ```ts\n * import { blobsToCommitments, toBlobs } from 'viem'\n * import { kzg } from './kzg'\n *\n * const blobs = toBlobs({ data: '0x1234' })\n * const commitments = blobsToCommitments({ blobs, kzg })\n * ```\n */\nexport function blobsToCommitments(parameters) {\n const { kzg } = parameters;\n const to = parameters.to ?? (typeof parameters.blobs[0] === 'string' ? 'hex' : 'bytes');\n const blobs = (typeof parameters.blobs[0] === 'string'\n ? parameters.blobs.map((x) => hexToBytes(x))\n : parameters.blobs);\n const commitments = [];\n for (const blob of blobs)\n commitments.push(Uint8Array.from(kzg.blobToKzgCommitment(blob)));\n return (to === 'bytes'\n ? commitments\n : commitments.map((x) => bytesToHex(x)));\n}\n//# sourceMappingURL=blobsToCommitments.js.map","import { hexToBytes } from '../encoding/toBytes.js';\nimport { bytesToHex } from '../encoding/toHex.js';\n/**\n * Compute the proofs for a list of blobs and their commitments.\n *\n * @example\n * ```ts\n * import {\n * blobsToCommitments,\n * toBlobs\n * } from 'viem'\n * import { kzg } from './kzg'\n *\n * const blobs = toBlobs({ data: '0x1234' })\n * const commitments = blobsToCommitments({ blobs, kzg })\n * const proofs = blobsToProofs({ blobs, commitments, kzg })\n * ```\n */\nexport function blobsToProofs(parameters) {\n const { kzg } = parameters;\n const to = parameters.to ?? (typeof parameters.blobs[0] === 'string' ? 'hex' : 'bytes');\n const blobs = (typeof parameters.blobs[0] === 'string'\n ? parameters.blobs.map((x) => hexToBytes(x))\n : parameters.blobs);\n const commitments = (typeof parameters.commitments[0] === 'string'\n ? parameters.commitments.map((x) => hexToBytes(x))\n : parameters.commitments);\n const proofs = [];\n for (let i = 0; i < blobs.length; i++) {\n const blob = blobs[i];\n const commitment = commitments[i];\n proofs.push(Uint8Array.from(kzg.computeBlobKzgProof(blob, commitment)));\n }\n return (to === 'bytes'\n ? proofs\n : proofs.map((x) => bytesToHex(x)));\n}\n//# sourceMappingURL=blobsToProofs.js.map","/**\n * Internal Merkle-Damgard hash utils.\n * @module\n */\nimport { Hash, abytes, aexists, aoutput, clean, createView, toBytes } from \"./utils.js\";\n/** Polyfill for Safari 14. https://caniuse.com/mdn-javascript_builtins_dataview_setbiguint64 */\nexport function setBigUint64(view, byteOffset, value, isLE) {\n if (typeof view.setBigUint64 === 'function')\n return view.setBigUint64(byteOffset, value, isLE);\n const _32n = BigInt(32);\n const _u32_max = BigInt(0xffffffff);\n const wh = Number((value >> _32n) & _u32_max);\n const wl = Number(value & _u32_max);\n const h = isLE ? 4 : 0;\n const l = isLE ? 0 : 4;\n view.setUint32(byteOffset + h, wh, isLE);\n view.setUint32(byteOffset + l, wl, isLE);\n}\n/** Choice: a ? b : c */\nexport function Chi(a, b, c) {\n return (a & b) ^ (~a & c);\n}\n/** Majority function, true if any two inputs is true. */\nexport function Maj(a, b, c) {\n return (a & b) ^ (a & c) ^ (b & c);\n}\n/**\n * Merkle-Damgard hash construction base class.\n * Could be used to create MD5, RIPEMD, SHA1, SHA2.\n */\nexport class HashMD extends Hash {\n constructor(blockLen, outputLen, padOffset, isLE) {\n super();\n this.finished = false;\n this.length = 0;\n this.pos = 0;\n this.destroyed = false;\n this.blockLen = blockLen;\n this.outputLen = outputLen;\n this.padOffset = padOffset;\n this.isLE = isLE;\n this.buffer = new Uint8Array(blockLen);\n this.view = createView(this.buffer);\n }\n update(data) {\n aexists(this);\n data = toBytes(data);\n abytes(data);\n const { view, buffer, blockLen } = this;\n const len = data.length;\n for (let pos = 0; pos < len;) {\n const take = Math.min(blockLen - this.pos, len - pos);\n // Fast path: we have at least one block in input, cast it to view and process\n if (take === blockLen) {\n const dataView = createView(data);\n for (; blockLen <= len - pos; pos += blockLen)\n this.process(dataView, pos);\n continue;\n }\n buffer.set(data.subarray(pos, pos + take), this.pos);\n this.pos += take;\n pos += take;\n if (this.pos === blockLen) {\n this.process(view, 0);\n this.pos = 0;\n }\n }\n this.length += data.length;\n this.roundClean();\n return this;\n }\n digestInto(out) {\n aexists(this);\n aoutput(out, this);\n this.finished = true;\n // Padding\n // We can avoid allocation of buffer for padding completely if it\n // was previously not allocated here. But it won't change performance.\n const { buffer, view, blockLen, isLE } = this;\n let { pos } = this;\n // append the bit '1' to the message\n buffer[pos++] = 0b10000000;\n clean(this.buffer.subarray(pos));\n // we have less than padOffset left in buffer, so we cannot put length in\n // current block, need process it and pad again\n if (this.padOffset > blockLen - pos) {\n this.process(view, 0);\n pos = 0;\n }\n // Pad until full block byte with zeros\n for (let i = pos; i < blockLen; i++)\n buffer[i] = 0;\n // Note: sha512 requires length to be 128bit integer, but length in JS will overflow before that\n // You need to write around 2 exabytes (u64_max / 8 / (1024**6)) for this to happen.\n // So we just write lowest 64 bits of that value.\n setBigUint64(view, blockLen - 8, BigInt(this.length * 8), isLE);\n this.process(view, 0);\n const oview = createView(out);\n const len = this.outputLen;\n // NOTE: we do division by 4 later, which should be fused in single op with modulo by JIT\n if (len % 4)\n throw new Error('_sha2: outputLen should be aligned to 32bit');\n const outLen = len / 4;\n const state = this.get();\n if (outLen > state.length)\n throw new Error('_sha2: outputLen bigger than state');\n for (let i = 0; i < outLen; i++)\n oview.setUint32(4 * i, state[i], isLE);\n }\n digest() {\n const { buffer, outputLen } = this;\n this.digestInto(buffer);\n const res = buffer.slice(0, outputLen);\n this.destroy();\n return res;\n }\n _cloneInto(to) {\n to || (to = new this.constructor());\n to.set(...this.get());\n const { blockLen, buffer, length, finished, destroyed, pos } = this;\n to.destroyed = destroyed;\n to.finished = finished;\n to.length = length;\n to.pos = pos;\n if (length % blockLen)\n to.buffer.set(buffer);\n return to;\n }\n clone() {\n return this._cloneInto();\n }\n}\n/**\n * Initial SHA-2 state: fractional parts of square roots of first 16 primes 2..53.\n * Check out `test/misc/sha2-gen-iv.js` for recomputation guide.\n */\n/** Initial SHA256 state. Bits 0..32 of frac part of sqrt of primes 2..19 */\nexport const SHA256_IV = /* @__PURE__ */ Uint32Array.from([\n 0x6a09e667, 0xbb67ae85, 0x3c6ef372, 0xa54ff53a, 0x510e527f, 0x9b05688c, 0x1f83d9ab, 0x5be0cd19,\n]);\n/** Initial SHA224 state. Bits 32..64 of frac part of sqrt of primes 23..53 */\nexport const SHA224_IV = /* @__PURE__ */ Uint32Array.from([\n 0xc1059ed8, 0x367cd507, 0x3070dd17, 0xf70e5939, 0xffc00b31, 0x68581511, 0x64f98fa7, 0xbefa4fa4,\n]);\n/** Initial SHA384 state. Bits 0..64 of frac part of sqrt of primes 23..53 */\nexport const SHA384_IV = /* @__PURE__ */ Uint32Array.from([\n 0xcbbb9d5d, 0xc1059ed8, 0x629a292a, 0x367cd507, 0x9159015a, 0x3070dd17, 0x152fecd8, 0xf70e5939,\n 0x67332667, 0xffc00b31, 0x8eb44a87, 0x68581511, 0xdb0c2e0d, 0x64f98fa7, 0x47b5481d, 0xbefa4fa4,\n]);\n/** Initial SHA512 state. Bits 0..64 of frac part of sqrt of primes 2..19 */\nexport const SHA512_IV = /* @__PURE__ */ Uint32Array.from([\n 0x6a09e667, 0xf3bcc908, 0xbb67ae85, 0x84caa73b, 0x3c6ef372, 0xfe94f82b, 0xa54ff53a, 0x5f1d36f1,\n 0x510e527f, 0xade682d1, 0x9b05688c, 0x2b3e6c1f, 0x1f83d9ab, 0xfb41bd6b, 0x5be0cd19, 0x137e2179,\n]);\n//# sourceMappingURL=_md.js.map","/**\n * SHA2 hash function. A.k.a. sha256, sha384, sha512, sha512_224, sha512_256.\n * SHA256 is the fastest hash implementable in JS, even faster than Blake3.\n * Check out [RFC 4634](https://datatracker.ietf.org/doc/html/rfc4634) and\n * [FIPS 180-4](https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.180-4.pdf).\n * @module\n */\nimport { Chi, HashMD, Maj, SHA224_IV, SHA256_IV, SHA384_IV, SHA512_IV } from \"./_md.js\";\nimport * as u64 from \"./_u64.js\";\nimport { clean, createHasher, rotr } from \"./utils.js\";\n/**\n * Round constants:\n * First 32 bits of fractional parts of the cube roots of the first 64 primes 2..311)\n */\n// prettier-ignore\nconst SHA256_K = /* @__PURE__ */ Uint32Array.from([\n 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5, 0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,\n 0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3, 0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,\n 0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc, 0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,\n 0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7, 0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,\n 0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13, 0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,\n 0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3, 0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,\n 0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5, 0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,\n 0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208, 0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2\n]);\n/** Reusable temporary buffer. \"W\" comes straight from spec. */\nconst SHA256_W = /* @__PURE__ */ new Uint32Array(64);\nexport class SHA256 extends HashMD {\n constructor(outputLen = 32) {\n super(64, outputLen, 8, false);\n // We cannot use array here since array allows indexing by variable\n // which means optimizer/compiler cannot use registers.\n this.A = SHA256_IV[0] | 0;\n this.B = SHA256_IV[1] | 0;\n this.C = SHA256_IV[2] | 0;\n this.D = SHA256_IV[3] | 0;\n this.E = SHA256_IV[4] | 0;\n this.F = SHA256_IV[5] | 0;\n this.G = SHA256_IV[6] | 0;\n this.H = SHA256_IV[7] | 0;\n }\n get() {\n const { A, B, C, D, E, F, G, H } = this;\n return [A, B, C, D, E, F, G, H];\n }\n // prettier-ignore\n set(A, B, C, D, E, F, G, H) {\n this.A = A | 0;\n this.B = B | 0;\n this.C = C | 0;\n this.D = D | 0;\n this.E = E | 0;\n this.F = F | 0;\n this.G = G | 0;\n this.H = H | 0;\n }\n process(view, offset) {\n // Extend the first 16 words into the remaining 48 words w[16..63] of the message schedule array\n for (let i = 0; i < 16; i++, offset += 4)\n SHA256_W[i] = view.getUint32(offset, false);\n for (let i = 16; i < 64; i++) {\n const W15 = SHA256_W[i - 15];\n const W2 = SHA256_W[i - 2];\n const s0 = rotr(W15, 7) ^ rotr(W15, 18) ^ (W15 >>> 3);\n const s1 = rotr(W2, 17) ^ rotr(W2, 19) ^ (W2 >>> 10);\n SHA256_W[i] = (s1 + SHA256_W[i - 7] + s0 + SHA256_W[i - 16]) | 0;\n }\n // Compression function main loop, 64 rounds\n let { A, B, C, D, E, F, G, H } = this;\n for (let i = 0; i < 64; i++) {\n const sigma1 = rotr(E, 6) ^ rotr(E, 11) ^ rotr(E, 25);\n const T1 = (H + sigma1 + Chi(E, F, G) + SHA256_K[i] + SHA256_W[i]) | 0;\n const sigma0 = rotr(A, 2) ^ rotr(A, 13) ^ rotr(A, 22);\n const T2 = (sigma0 + Maj(A, B, C)) | 0;\n H = G;\n G = F;\n F = E;\n E = (D + T1) | 0;\n D = C;\n C = B;\n B = A;\n A = (T1 + T2) | 0;\n }\n // Add the compressed chunk to the current hash value\n A = (A + this.A) | 0;\n B = (B + this.B) | 0;\n C = (C + this.C) | 0;\n D = (D + this.D) | 0;\n E = (E + this.E) | 0;\n F = (F + this.F) | 0;\n G = (G + this.G) | 0;\n H = (H + this.H) | 0;\n this.set(A, B, C, D, E, F, G, H);\n }\n roundClean() {\n clean(SHA256_W);\n }\n destroy() {\n this.set(0, 0, 0, 0, 0, 0, 0, 0);\n clean(this.buffer);\n }\n}\nexport class SHA224 extends SHA256 {\n constructor() {\n super(28);\n this.A = SHA224_IV[0] | 0;\n this.B = SHA224_IV[1] | 0;\n this.C = SHA224_IV[2] | 0;\n this.D = SHA224_IV[3] | 0;\n this.E = SHA224_IV[4] | 0;\n this.F = SHA224_IV[5] | 0;\n this.G = SHA224_IV[6] | 0;\n this.H = SHA224_IV[7] | 0;\n }\n}\n// SHA2-512 is slower than sha256 in js because u64 operations are slow.\n// Round contants\n// First 32 bits of the fractional parts of the cube roots of the first 80 primes 2..409\n// prettier-ignore\nconst K512 = /* @__PURE__ */ (() => u64.split([\n '0x428a2f98d728ae22', '0x7137449123ef65cd', '0xb5c0fbcfec4d3b2f', '0xe9b5dba58189dbbc',\n '0x3956c25bf348b538', '0x59f111f1b605d019', '0x923f82a4af194f9b', '0xab1c5ed5da6d8118',\n '0xd807aa98a3030242', '0x12835b0145706fbe', '0x243185be4ee4b28c', '0x550c7dc3d5ffb4e2',\n '0x72be5d74f27b896f', '0x80deb1fe3b1696b1', '0x9bdc06a725c71235', '0xc19bf174cf692694',\n '0xe49b69c19ef14ad2', '0xefbe4786384f25e3', '0x0fc19dc68b8cd5b5', '0x240ca1cc77ac9c65',\n '0x2de92c6f592b0275', '0x4a7484aa6ea6e483', '0x5cb0a9dcbd41fbd4', '0x76f988da831153b5',\n '0x983e5152ee66dfab', '0xa831c66d2db43210', '0xb00327c898fb213f', '0xbf597fc7beef0ee4',\n '0xc6e00bf33da88fc2', '0xd5a79147930aa725', '0x06ca6351e003826f', '0x142929670a0e6e70',\n '0x27b70a8546d22ffc', '0x2e1b21385c26c926', '0x4d2c6dfc5ac42aed', '0x53380d139d95b3df',\n '0x650a73548baf63de', '0x766a0abb3c77b2a8', '0x81c2c92e47edaee6', '0x92722c851482353b',\n '0xa2bfe8a14cf10364', '0xa81a664bbc423001', '0xc24b8b70d0f89791', '0xc76c51a30654be30',\n '0xd192e819d6ef5218', '0xd69906245565a910', '0xf40e35855771202a', '0x106aa07032bbd1b8',\n '0x19a4c116b8d2d0c8', '0x1e376c085141ab53', '0x2748774cdf8eeb99', '0x34b0bcb5e19b48a8',\n '0x391c0cb3c5c95a63', '0x4ed8aa4ae3418acb', '0x5b9cca4f7763e373', '0x682e6ff3d6b2b8a3',\n '0x748f82ee5defb2fc', '0x78a5636f43172f60', '0x84c87814a1f0ab72', '0x8cc702081a6439ec',\n '0x90befffa23631e28', '0xa4506cebde82bde9', '0xbef9a3f7b2c67915', '0xc67178f2e372532b',\n '0xca273eceea26619c', '0xd186b8c721c0c207', '0xeada7dd6cde0eb1e', '0xf57d4f7fee6ed178',\n '0x06f067aa72176fba', '0x0a637dc5a2c898a6', '0x113f9804bef90dae', '0x1b710b35131c471b',\n '0x28db77f523047d84', '0x32caab7b40c72493', '0x3c9ebe0a15c9bebc', '0x431d67c49c100d4c',\n '0x4cc5d4becb3e42b6', '0x597f299cfc657e2a', '0x5fcb6fab3ad6faec', '0x6c44198c4a475817'\n].map(n => BigInt(n))))();\nconst SHA512_Kh = /* @__PURE__ */ (() => K512[0])();\nconst SHA512_Kl = /* @__PURE__ */ (() => K512[1])();\n// Reusable temporary buffers\nconst SHA512_W_H = /* @__PURE__ */ new Uint32Array(80);\nconst SHA512_W_L = /* @__PURE__ */ new Uint32Array(80);\nexport class SHA512 extends HashMD {\n constructor(outputLen = 64) {\n super(128, outputLen, 16, false);\n // We cannot use array here since array allows indexing by variable\n // which means optimizer/compiler cannot use registers.\n // h -- high 32 bits, l -- low 32 bits\n this.Ah = SHA512_IV[0] | 0;\n this.Al = SHA512_IV[1] | 0;\n this.Bh = SHA512_IV[2] | 0;\n this.Bl = SHA512_IV[3] | 0;\n this.Ch = SHA512_IV[4] | 0;\n this.Cl = SHA512_IV[5] | 0;\n this.Dh = SHA512_IV[6] | 0;\n this.Dl = SHA512_IV[7] | 0;\n this.Eh = SHA512_IV[8] | 0;\n this.El = SHA512_IV[9] | 0;\n this.Fh = SHA512_IV[10] | 0;\n this.Fl = SHA512_IV[11] | 0;\n this.Gh = SHA512_IV[12] | 0;\n this.Gl = SHA512_IV[13] | 0;\n this.Hh = SHA512_IV[14] | 0;\n this.Hl = SHA512_IV[15] | 0;\n }\n // prettier-ignore\n get() {\n const { Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl } = this;\n return [Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl];\n }\n // prettier-ignore\n set(Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl) {\n this.Ah = Ah | 0;\n this.Al = Al | 0;\n this.Bh = Bh | 0;\n this.Bl = Bl | 0;\n this.Ch = Ch | 0;\n this.Cl = Cl | 0;\n this.Dh = Dh | 0;\n this.Dl = Dl | 0;\n this.Eh = Eh | 0;\n this.El = El | 0;\n this.Fh = Fh | 0;\n this.Fl = Fl | 0;\n this.Gh = Gh | 0;\n this.Gl = Gl | 0;\n this.Hh = Hh | 0;\n this.Hl = Hl | 0;\n }\n process(view, offset) {\n // Extend the first 16 words into the remaining 64 words w[16..79] of the message schedule array\n for (let i = 0; i < 16; i++, offset += 4) {\n SHA512_W_H[i] = view.getUint32(offset);\n SHA512_W_L[i] = view.getUint32((offset += 4));\n }\n for (let i = 16; i < 80; i++) {\n // s0 := (w[i-15] rightrotate 1) xor (w[i-15] rightrotate 8) xor (w[i-15] rightshift 7)\n const W15h = SHA512_W_H[i - 15] | 0;\n const W15l = SHA512_W_L[i - 15] | 0;\n const s0h = u64.rotrSH(W15h, W15l, 1) ^ u64.rotrSH(W15h, W15l, 8) ^ u64.shrSH(W15h, W15l, 7);\n const s0l = u64.rotrSL(W15h, W15l, 1) ^ u64.rotrSL(W15h, W15l, 8) ^ u64.shrSL(W15h, W15l, 7);\n // s1 := (w[i-2] rightrotate 19) xor (w[i-2] rightrotate 61) xor (w[i-2] rightshift 6)\n const W2h = SHA512_W_H[i - 2] | 0;\n const W2l = SHA512_W_L[i - 2] | 0;\n const s1h = u64.rotrSH(W2h, W2l, 19) ^ u64.rotrBH(W2h, W2l, 61) ^ u64.shrSH(W2h, W2l, 6);\n const s1l = u64.rotrSL(W2h, W2l, 19) ^ u64.rotrBL(W2h, W2l, 61) ^ u64.shrSL(W2h, W2l, 6);\n // SHA256_W[i] = s0 + s1 + SHA256_W[i - 7] + SHA256_W[i - 16];\n const SUMl = u64.add4L(s0l, s1l, SHA512_W_L[i - 7], SHA512_W_L[i - 16]);\n const SUMh = u64.add4H(SUMl, s0h, s1h, SHA512_W_H[i - 7], SHA512_W_H[i - 16]);\n SHA512_W_H[i] = SUMh | 0;\n SHA512_W_L[i] = SUMl | 0;\n }\n let { Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl } = this;\n // Compression function main loop, 80 rounds\n for (let i = 0; i < 80; i++) {\n // S1 := (e rightrotate 14) xor (e rightrotate 18) xor (e rightrotate 41)\n const sigma1h = u64.rotrSH(Eh, El, 14) ^ u64.rotrSH(Eh, El, 18) ^ u64.rotrBH(Eh, El, 41);\n const sigma1l = u64.rotrSL(Eh, El, 14) ^ u64.rotrSL(Eh, El, 18) ^ u64.rotrBL(Eh, El, 41);\n //const T1 = (H + sigma1 + Chi(E, F, G) + SHA256_K[i] + SHA256_W[i]) | 0;\n const CHIh = (Eh & Fh) ^ (~Eh & Gh);\n const CHIl = (El & Fl) ^ (~El & Gl);\n // T1 = H + sigma1 + Chi(E, F, G) + SHA512_K[i] + SHA512_W[i]\n // prettier-ignore\n const T1ll = u64.add5L(Hl, sigma1l, CHIl, SHA512_Kl[i], SHA512_W_L[i]);\n const T1h = u64.add5H(T1ll, Hh, sigma1h, CHIh, SHA512_Kh[i], SHA512_W_H[i]);\n const T1l = T1ll | 0;\n // S0 := (a rightrotate 28) xor (a rightrotate 34) xor (a rightrotate 39)\n const sigma0h = u64.rotrSH(Ah, Al, 28) ^ u64.rotrBH(Ah, Al, 34) ^ u64.rotrBH(Ah, Al, 39);\n const sigma0l = u64.rotrSL(Ah, Al, 28) ^ u64.rotrBL(Ah, Al, 34) ^ u64.rotrBL(Ah, Al, 39);\n const MAJh = (Ah & Bh) ^ (Ah & Ch) ^ (Bh & Ch);\n const MAJl = (Al & Bl) ^ (Al & Cl) ^ (Bl & Cl);\n Hh = Gh | 0;\n Hl = Gl | 0;\n Gh = Fh | 0;\n Gl = Fl | 0;\n Fh = Eh | 0;\n Fl = El | 0;\n ({ h: Eh, l: El } = u64.add(Dh | 0, Dl | 0, T1h | 0, T1l | 0));\n Dh = Ch | 0;\n Dl = Cl | 0;\n Ch = Bh | 0;\n Cl = Bl | 0;\n Bh = Ah | 0;\n Bl = Al | 0;\n const All = u64.add3L(T1l, sigma0l, MAJl);\n Ah = u64.add3H(All, T1h, sigma0h, MAJh);\n Al = All | 0;\n }\n // Add the compressed chunk to the current hash value\n ({ h: Ah, l: Al } = u64.add(this.Ah | 0, this.Al | 0, Ah | 0, Al | 0));\n ({ h: Bh, l: Bl } = u64.add(this.Bh | 0, this.Bl | 0, Bh | 0, Bl | 0));\n ({ h: Ch, l: Cl } = u64.add(this.Ch | 0, this.Cl | 0, Ch | 0, Cl | 0));\n ({ h: Dh, l: Dl } = u64.add(this.Dh | 0, this.Dl | 0, Dh | 0, Dl | 0));\n ({ h: Eh, l: El } = u64.add(this.Eh | 0, this.El | 0, Eh | 0, El | 0));\n ({ h: Fh, l: Fl } = u64.add(this.Fh | 0, this.Fl | 0, Fh | 0, Fl | 0));\n ({ h: Gh, l: Gl } = u64.add(this.Gh | 0, this.Gl | 0, Gh | 0, Gl | 0));\n ({ h: Hh, l: Hl } = u64.add(this.Hh | 0, this.Hl | 0, Hh | 0, Hl | 0));\n this.set(Ah, Al, Bh, Bl, Ch, Cl, Dh, Dl, Eh, El, Fh, Fl, Gh, Gl, Hh, Hl);\n }\n roundClean() {\n clean(SHA512_W_H, SHA512_W_L);\n }\n destroy() {\n clean(this.buffer);\n this.set(0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0);\n }\n}\nexport class SHA384 extends SHA512 {\n constructor() {\n super(48);\n this.Ah = SHA384_IV[0] | 0;\n this.Al = SHA384_IV[1] | 0;\n this.Bh = SHA384_IV[2] | 0;\n this.Bl = SHA384_IV[3] | 0;\n this.Ch = SHA384_IV[4] | 0;\n this.Cl = SHA384_IV[5] | 0;\n this.Dh = SHA384_IV[6] | 0;\n this.Dl = SHA384_IV[7] | 0;\n this.Eh = SHA384_IV[8] | 0;\n this.El = SHA384_IV[9] | 0;\n this.Fh = SHA384_IV[10] | 0;\n this.Fl = SHA384_IV[11] | 0;\n this.Gh = SHA384_IV[12] | 0;\n this.Gl = SHA384_IV[13] | 0;\n this.Hh = SHA384_IV[14] | 0;\n this.Hl = SHA384_IV[15] | 0;\n }\n}\n/**\n * Truncated SHA512/256 and SHA512/224.\n * SHA512_IV is XORed with 0xa5a5a5a5a5a5a5a5, then used as \"intermediary\" IV of SHA512/t.\n * Then t hashes string to produce result IV.\n * See `test/misc/sha2-gen-iv.js`.\n */\n/** SHA512/224 IV */\nconst T224_IV = /* @__PURE__ */ Uint32Array.from([\n 0x8c3d37c8, 0x19544da2, 0x73e19966, 0x89dcd4d6, 0x1dfab7ae, 0x32ff9c82, 0x679dd514, 0x582f9fcf,\n 0x0f6d2b69, 0x7bd44da8, 0x77e36f73, 0x04c48942, 0x3f9d85a8, 0x6a1d36c8, 0x1112e6ad, 0x91d692a1,\n]);\n/** SHA512/256 IV */\nconst T256_IV = /* @__PURE__ */ Uint32Array.from([\n 0x22312194, 0xfc2bf72c, 0x9f555fa3, 0xc84c64c2, 0x2393b86b, 0x6f53b151, 0x96387719, 0x5940eabd,\n 0x96283ee2, 0xa88effe3, 0xbe5e1e25, 0x53863992, 0x2b0199fc, 0x2c85b8aa, 0x0eb72ddc, 0x81c52ca2,\n]);\nexport class SHA512_224 extends SHA512 {\n constructor() {\n super(28);\n this.Ah = T224_IV[0] | 0;\n this.Al = T224_IV[1] | 0;\n this.Bh = T224_IV[2] | 0;\n this.Bl = T224_IV[3] | 0;\n this.Ch = T224_IV[4] | 0;\n this.Cl = T224_IV[5] | 0;\n this.Dh = T224_IV[6] | 0;\n this.Dl = T224_IV[7] | 0;\n this.Eh = T224_IV[8] | 0;\n this.El = T224_IV[9] | 0;\n this.Fh = T224_IV[10] | 0;\n this.Fl = T224_IV[11] | 0;\n this.Gh = T224_IV[12] | 0;\n this.Gl = T224_IV[13] | 0;\n this.Hh = T224_IV[14] | 0;\n this.Hl = T224_IV[15] | 0;\n }\n}\nexport class SHA512_256 extends SHA512 {\n constructor() {\n super(32);\n this.Ah = T256_IV[0] | 0;\n this.Al = T256_IV[1] | 0;\n this.Bh = T256_IV[2] | 0;\n this.Bl = T256_IV[3] | 0;\n this.Ch = T256_IV[4] | 0;\n this.Cl = T256_IV[5] | 0;\n this.Dh = T256_IV[6] | 0;\n this.Dl = T256_IV[7] | 0;\n this.Eh = T256_IV[8] | 0;\n this.El = T256_IV[9] | 0;\n this.Fh = T256_IV[10] | 0;\n this.Fl = T256_IV[11] | 0;\n this.Gh = T256_IV[12] | 0;\n this.Gl = T256_IV[13] | 0;\n this.Hh = T256_IV[14] | 0;\n this.Hl = T256_IV[15] | 0;\n }\n}\n/**\n * SHA2-256 hash function from RFC 4634.\n *\n * It is the fastest JS hash, even faster than Blake3.\n * To break sha256 using birthday attack, attackers need to try 2^128 hashes.\n * BTC network is doing 2^70 hashes/sec (2^95 hashes/year) as per 2025.\n */\nexport const sha256 = /* @__PURE__ */ createHasher(() => new SHA256());\n/** SHA2-224 hash function from RFC 4634 */\nexport const sha224 = /* @__PURE__ */ createHasher(() => new SHA224());\n/** SHA2-512 hash function from RFC 4634. */\nexport const sha512 = /* @__PURE__ */ createHasher(() => new SHA512());\n/** SHA2-384 hash function from RFC 4634. */\nexport const sha384 = /* @__PURE__ */ createHasher(() => new SHA384());\n/**\n * SHA2-512/256 \"truncated\" hash function, with improved resistance to length extension attacks.\n * See the paper on [truncated SHA512](https://eprint.iacr.org/2010/548.pdf).\n */\nexport const sha512_256 = /* @__PURE__ */ createHasher(() => new SHA512_256());\n/**\n * SHA2-512/224 \"truncated\" hash function, with improved resistance to length extension attacks.\n * See the paper on [truncated SHA512](https://eprint.iacr.org/2010/548.pdf).\n */\nexport const sha512_224 = /* @__PURE__ */ createHasher(() => new SHA512_224());\n//# sourceMappingURL=sha2.js.map","/**\n * SHA2-256 a.k.a. sha256. In JS, it is the fastest hash, even faster than Blake3.\n *\n * To break sha256 using birthday attack, attackers need to try 2^128 hashes.\n * BTC network is doing 2^70 hashes/sec (2^95 hashes/year) as per 2025.\n *\n * Check out [FIPS 180-4](https://nvlpubs.nist.gov/nistpubs/FIPS/NIST.FIPS.180-4.pdf).\n * @module\n * @deprecated\n */\nimport { SHA224 as SHA224n, sha224 as sha224n, SHA256 as SHA256n, sha256 as sha256n, } from \"./sha2.js\";\n/** @deprecated Use import from `noble/hashes/sha2` module */\nexport const SHA256 = SHA256n;\n/** @deprecated Use import from `noble/hashes/sha2` module */\nexport const sha256 = sha256n;\n/** @deprecated Use import from `noble/hashes/sha2` module */\nexport const SHA224 = SHA224n;\n/** @deprecated Use import from `noble/hashes/sha2` module */\nexport const sha224 = sha224n;\n//# sourceMappingURL=sha256.js.map","import { sha256 as noble_sha256 } from '@noble/hashes/sha256';\nimport { isHex } from '../data/isHex.js';\nimport { toBytes } from '../encoding/toBytes.js';\nimport { toHex } from '../encoding/toHex.js';\nexport function sha256(value, to_) {\n const to = to_ || 'hex';\n const bytes = noble_sha256(isHex(value, { strict: false }) ? toBytes(value) : value);\n if (to === 'bytes')\n return bytes;\n return toHex(bytes);\n}\n//# sourceMappingURL=sha256.js.map","import { bytesToHex } from '../encoding/toHex.js';\nimport { sha256 } from '../hash/sha256.js';\n/**\n * Transform a commitment to it's versioned hash.\n *\n * @example\n * ```ts\n * import {\n * blobsToCommitments,\n * commitmentToVersionedHash,\n * toBlobs\n * } from 'viem'\n * import { kzg } from './kzg'\n *\n * const blobs = toBlobs({ data: '0x1234' })\n * const [commitment] = blobsToCommitments({ blobs, kzg })\n * const versionedHash = commitmentToVersionedHash({ commitment })\n * ```\n */\nexport function commitmentToVersionedHash(parameters) {\n const { commitment, version = 1 } = parameters;\n const to = parameters.to ?? (typeof commitment === 'string' ? 'hex' : 'bytes');\n const versionedHash = sha256(commitment, 'bytes');\n versionedHash.set([version], 0);\n return (to === 'bytes' ? versionedHash : bytesToHex(versionedHash));\n}\n//# sourceMappingURL=commitmentToVersionedHash.js.map","import { commitmentToVersionedHash, } from './commitmentToVersionedHash.js';\n/**\n * Transform a list of commitments to their versioned hashes.\n *\n * @example\n * ```ts\n * import {\n * blobsToCommitments,\n * commitmentsToVersionedHashes,\n * toBlobs\n * } from 'viem'\n * import { kzg } from './kzg'\n *\n * const blobs = toBlobs({ data: '0x1234' })\n * const commitments = blobsToCommitments({ blobs, kzg })\n * const versionedHashes = commitmentsToVersionedHashes({ commitments })\n * ```\n */\nexport function commitmentsToVersionedHashes(parameters) {\n const { commitments, version } = parameters;\n const to = parameters.to ?? (typeof commitments[0] === 'string' ? 'hex' : 'bytes');\n const hashes = [];\n for (const commitment of commitments) {\n hashes.push(commitmentToVersionedHash({\n commitment,\n to,\n version,\n }));\n }\n return hashes;\n}\n//# sourceMappingURL=commitmentsToVersionedHashes.js.map","// https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md#parameters\n/** Blob limit per transaction. */\nconst blobsPerTransaction = 6;\n/** The number of bytes in a BLS scalar field element. */\nexport const bytesPerFieldElement = 32;\n/** The number of field elements in a blob. */\nexport const fieldElementsPerBlob = 4096;\n/** The number of bytes in a blob. */\nexport const bytesPerBlob = bytesPerFieldElement * fieldElementsPerBlob;\n/** Blob bytes limit per transaction. */\nexport const maxBytesPerTransaction = bytesPerBlob * blobsPerTransaction -\n // terminator byte (0x80).\n 1 -\n // zero byte (0x00) appended to each field element.\n 1 * fieldElementsPerBlob * blobsPerTransaction;\n//# sourceMappingURL=blob.js.map","// https://github.com/ethereum/EIPs/blob/master/EIPS/eip-4844.md#parameters\nexport const versionedHashVersionKzg = 1;\n//# sourceMappingURL=kzg.js.map","import { versionedHashVersionKzg } from '../constants/kzg.js';\nimport { BaseError } from './base.js';\nexport class BlobSizeTooLargeError extends BaseError {\n constructor({ maxSize, size }) {\n super('Blob size is too large.', {\n metaMessages: [`Max: ${maxSize} bytes`, `Given: ${size} bytes`],\n name: 'BlobSizeTooLargeError',\n });\n }\n}\nexport class EmptyBlobError extends BaseError {\n constructor() {\n super('Blob data must not be empty.', { name: 'EmptyBlobError' });\n }\n}\nexport class InvalidVersionedHashSizeError extends BaseError {\n constructor({ hash, size, }) {\n super(`Versioned hash \"${hash}\" size is invalid.`, {\n metaMessages: ['Expected: 32', `Received: ${size}`],\n name: 'InvalidVersionedHashSizeError',\n });\n }\n}\nexport class InvalidVersionedHashVersionError extends BaseError {\n constructor({ hash, version, }) {\n super(`Versioned hash \"${hash}\" version is invalid.`, {\n metaMessages: [\n `Expected: ${versionedHashVersionKzg}`,\n `Received: ${version}`,\n ],\n name: 'InvalidVersionedHashVersionError',\n });\n }\n}\n//# sourceMappingURL=blob.js.map","import { bytesPerBlob, bytesPerFieldElement, fieldElementsPerBlob, maxBytesPerTransaction, } from '../../constants/blob.js';\nimport { BlobSizeTooLargeError, EmptyBlobError, } from '../../errors/blob.js';\nimport { createCursor } from '../cursor.js';\nimport { size } from '../data/size.js';\nimport { hexToBytes } from '../encoding/toBytes.js';\nimport { bytesToHex } from '../encoding/toHex.js';\n/**\n * Transforms arbitrary data to blobs.\n *\n * @example\n * ```ts\n * import { toBlobs, stringToHex } from 'viem'\n *\n * const blobs = toBlobs({ data: stringToHex('hello world') })\n * ```\n */\nexport function toBlobs(parameters) {\n const to = parameters.to ?? (typeof parameters.data === 'string' ? 'hex' : 'bytes');\n const data = (typeof parameters.data === 'string'\n ? hexToBytes(parameters.data)\n : parameters.data);\n const size_ = size(data);\n if (!size_)\n throw new EmptyBlobError();\n if (size_ > maxBytesPerTransaction)\n throw new BlobSizeTooLargeError({\n maxSize: maxBytesPerTransaction,\n size: size_,\n });\n const blobs = [];\n let active = true;\n let position = 0;\n while (active) {\n const blob = createCursor(new Uint8Array(bytesPerBlob));\n let size = 0;\n while (size < fieldElementsPerBlob) {\n const bytes = data.slice(position, position + (bytesPerFieldElement - 1));\n // Push a zero byte so the field element doesn't overflow the BLS modulus.\n blob.pushByte(0x00);\n // Push the current segment of data bytes.\n blob.pushBytes(bytes);\n // If we detect that the current segment of data bytes is less than 31 bytes,\n // we can stop processing and push a terminator byte to indicate the end of the blob.\n if (bytes.length < 31) {\n blob.pushByte(0x80);\n active = false;\n break;\n }\n size++;\n position += 31;\n }\n blobs.push(blob);\n }\n return (to === 'bytes'\n ? blobs.map((x) => x.bytes)\n : blobs.map((x) => bytesToHex(x.bytes)));\n}\n//# sourceMappingURL=toBlobs.js.map","import { blobsToCommitments, } from './blobsToCommitments.js';\nimport { blobsToProofs } from './blobsToProofs.js';\nimport { toBlobs } from './toBlobs.js';\n/**\n * Transforms arbitrary data (or blobs, commitments, & proofs) into a sidecar array.\n *\n * @example\n * ```ts\n * import { toBlobSidecars, stringToHex } from 'viem'\n *\n * const sidecars = toBlobSidecars({ data: stringToHex('hello world') })\n * ```\n *\n * @example\n * ```ts\n * import {\n * blobsToCommitments,\n * toBlobs,\n * blobsToProofs,\n * toBlobSidecars,\n * stringToHex\n * } from 'viem'\n *\n * const blobs = toBlobs({ data: stringToHex('hello world') })\n * const commitments = blobsToCommitments({ blobs, kzg })\n * const proofs = blobsToProofs({ blobs, commitments, kzg })\n *\n * const sidecars = toBlobSidecars({ blobs, commitments, proofs })\n * ```\n */\nexport function toBlobSidecars(parameters) {\n const { data, kzg, to } = parameters;\n const blobs = parameters.blobs ?? toBlobs({ data: data, to });\n const commitments = parameters.commitments ?? blobsToCommitments({ blobs, kzg: kzg, to });\n const proofs = parameters.proofs ?? blobsToProofs({ blobs, commitments, kzg: kzg, to });\n const sidecars = [];\n for (let i = 0; i < blobs.length; i++)\n sidecars.push({\n blob: blobs[i],\n commitment: commitments[i],\n proof: proofs[i],\n });\n return sidecars;\n}\n//# sourceMappingURL=toBlobSidecars.js.map","import { InvalidSerializableTransactionError, } from '../../errors/transaction.js';\nexport function getTransactionType(transaction) {\n if (transaction.type)\n return transaction.type;\n if (typeof transaction.authorizationList !== 'undefined')\n return 'eip7702';\n if (typeof transaction.blobs !== 'undefined' ||\n typeof transaction.blobVersionedHashes !== 'undefined' ||\n typeof transaction.maxFeePerBlobGas !== 'undefined' ||\n typeof transaction.sidecars !== 'undefined')\n return 'eip4844';\n if (typeof transaction.maxFeePerGas !== 'undefined' ||\n typeof transaction.maxPriorityFeePerGas !== 'undefined') {\n return 'eip1559';\n }\n if (typeof transaction.gasPrice !== 'undefined') {\n if (typeof transaction.accessList !== 'undefined')\n return 'eip2930';\n return 'legacy';\n }\n throw new InvalidSerializableTransactionError({ transaction });\n}\n//# sourceMappingURL=getTransactionType.js.map","import { parseAccount, } from '../../accounts/utils/parseAccount.js';\nimport { internal_estimateFeesPerGas, } from '../../actions/public/estimateFeesPerGas.js';\nimport { estimateGas, } from '../../actions/public/estimateGas.js';\nimport { getBlock as getBlock_, } from '../../actions/public/getBlock.js';\nimport { getTransactionCount, } from '../../actions/public/getTransactionCount.js';\nimport { Eip1559FeesNotSupportedError, MaxFeePerGasTooLowError, } from '../../errors/fee.js';\nimport { blobsToCommitments } from '../../utils/blob/blobsToCommitments.js';\nimport { blobsToProofs } from '../../utils/blob/blobsToProofs.js';\nimport { commitmentsToVersionedHashes } from '../../utils/blob/commitmentsToVersionedHashes.js';\nimport { toBlobSidecars } from '../../utils/blob/toBlobSidecars.js';\nimport { getAction } from '../../utils/getAction.js';\nimport { assertRequest, } from '../../utils/transaction/assertRequest.js';\nimport { getTransactionType, } from '../../utils/transaction/getTransactionType.js';\nimport { getChainId as getChainId_ } from '../public/getChainId.js';\nexport const defaultParameters = [\n 'blobVersionedHashes',\n 'chainId',\n 'fees',\n 'gas',\n 'nonce',\n 'type',\n];\n/** @internal */\nexport const eip1559NetworkCache = /*#__PURE__*/ new Map();\n/**\n * Prepares a transaction request for signing.\n *\n * - Docs: https://viem.sh/docs/actions/wallet/prepareTransactionRequest\n *\n * @param args - {@link PrepareTransactionRequestParameters}\n * @returns The transaction request. {@link PrepareTransactionRequestReturnType}\n *\n * @example\n * import { createWalletClient, custom } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { prepareTransactionRequest } from 'viem/actions'\n *\n * const client = createWalletClient({\n * chain: mainnet,\n * transport: custom(window.ethereum),\n * })\n * const request = await prepareTransactionRequest(client, {\n * account: '0xA0Cf798816D4b9b9866b5330EEa46a18382f251e',\n * to: '0x0000000000000000000000000000000000000000',\n * value: 1n,\n * })\n *\n * @example\n * // Account Hoisting\n * import { createWalletClient, http } from 'viem'\n * import { privateKeyToAccount } from 'viem/accounts'\n * import { mainnet } from 'viem/chains'\n * import { prepareTransactionRequest } from 'viem/actions'\n *\n * const client = createWalletClient({\n * account: privateKeyToAccount('0x…'),\n * chain: mainnet,\n * transport: custom(window.ethereum),\n * })\n * const request = await prepareTransactionRequest(client, {\n * to: '0x0000000000000000000000000000000000000000',\n * value: 1n,\n * })\n */\nexport async function prepareTransactionRequest(client, args) {\n const { account: account_ = client.account, blobs, chain, gas, kzg, nonce, nonceManager, parameters = defaultParameters, type, } = args;\n const account = account_ ? parseAccount(account_) : account_;\n const request = { ...args, ...(account ? { from: account?.address } : {}) };\n let block;\n async function getBlock() {\n if (block)\n return block;\n block = await getAction(client, getBlock_, 'getBlock')({ blockTag: 'latest' });\n return block;\n }\n let chainId;\n async function getChainId() {\n if (chainId)\n return chainId;\n if (chain)\n return chain.id;\n if (typeof args.chainId !== 'undefined')\n return args.chainId;\n const chainId_ = await getAction(client, getChainId_, 'getChainId')({});\n chainId = chainId_;\n return chainId;\n }\n if (parameters.includes('nonce') && typeof nonce === 'undefined' && account) {\n if (nonceManager) {\n const chainId = await getChainId();\n request.nonce = await nonceManager.consume({\n address: account.address,\n chainId,\n client,\n });\n }\n else {\n request.nonce = await getAction(client, getTransactionCount, 'getTransactionCount')({\n address: account.address,\n blockTag: 'pending',\n });\n }\n }\n if ((parameters.includes('blobVersionedHashes') ||\n parameters.includes('sidecars')) &&\n blobs &&\n kzg) {\n const commitments = blobsToCommitments({ blobs, kzg });\n if (parameters.includes('blobVersionedHashes')) {\n const versionedHashes = commitmentsToVersionedHashes({\n commitments,\n to: 'hex',\n });\n request.blobVersionedHashes = versionedHashes;\n }\n if (parameters.includes('sidecars')) {\n const proofs = blobsToProofs({ blobs, commitments, kzg });\n const sidecars = toBlobSidecars({\n blobs,\n commitments,\n proofs,\n to: 'hex',\n });\n request.sidecars = sidecars;\n }\n }\n if (parameters.includes('chainId'))\n request.chainId = await getChainId();\n if ((parameters.includes('fees') || parameters.includes('type')) &&\n typeof type === 'undefined') {\n try {\n request.type = getTransactionType(request);\n }\n catch {\n let isEip1559Network = eip1559NetworkCache.get(client.uid);\n if (typeof isEip1559Network === 'undefined') {\n const block = await getBlock();\n isEip1559Network = typeof block?.baseFeePerGas === 'bigint';\n eip1559NetworkCache.set(client.uid, isEip1559Network);\n }\n request.type = isEip1559Network ? 'eip1559' : 'legacy';\n }\n }\n if (parameters.includes('fees')) {\n // TODO(4844): derive blob base fees once https://github.com/ethereum/execution-apis/pull/486 is merged.\n if (request.type !== 'legacy' && request.type !== 'eip2930') {\n // EIP-1559 fees\n if (typeof request.maxFeePerGas === 'undefined' ||\n typeof request.maxPriorityFeePerGas === 'undefined') {\n const block = await getBlock();\n const { maxFeePerGas, maxPriorityFeePerGas } = await internal_estimateFeesPerGas(client, {\n block: block,\n chain,\n request: request,\n });\n if (typeof args.maxPriorityFeePerGas === 'undefined' &&\n args.maxFeePerGas &&\n args.maxFeePerGas < maxPriorityFeePerGas)\n throw new MaxFeePerGasTooLowError({\n maxPriorityFeePerGas,\n });\n request.maxPriorityFeePerGas = maxPriorityFeePerGas;\n request.maxFeePerGas = maxFeePerGas;\n }\n }\n else {\n // Legacy fees\n if (typeof args.maxFeePerGas !== 'undefined' ||\n typeof args.maxPriorityFeePerGas !== 'undefined')\n throw new Eip1559FeesNotSupportedError();\n if (typeof args.gasPrice === 'undefined') {\n const block = await getBlock();\n const { gasPrice: gasPrice_ } = await internal_estimateFeesPerGas(client, {\n block: block,\n chain,\n request: request,\n type: 'legacy',\n });\n request.gasPrice = gasPrice_;\n }\n }\n }\n if (parameters.includes('gas') && typeof gas === 'undefined')\n request.gas = await getAction(client, estimateGas, 'estimateGas')({\n ...request,\n account: account\n ? { address: account.address, type: 'json-rpc' }\n : account,\n });\n assertRequest(request);\n delete request.parameters;\n return request;\n}\n//# sourceMappingURL=prepareTransactionRequest.js.map","/**\n * Sends a **signed** transaction to the network\n *\n * - Docs: https://viem.sh/docs/actions/wallet/sendRawTransaction\n * - JSON-RPC Method: [`eth_sendRawTransaction`](https://ethereum.github.io/execution-apis/api-documentation/)\n *\n * @param client - Client to use\n * @param parameters - {@link SendRawTransactionParameters}\n * @returns The transaction hash. {@link SendRawTransactionReturnType}\n *\n * @example\n * import { createWalletClient, custom } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { sendRawTransaction } from 'viem/wallet'\n *\n * const client = createWalletClient({\n * chain: mainnet,\n * transport: custom(window.ethereum),\n * })\n *\n * const hash = await sendRawTransaction(client, {\n * serializedTransaction: '0x02f850018203118080825208808080c080a04012522854168b27e5dc3d5839bab5e6b39e1a0ffd343901ce1622e3d64b48f1a04e00902ae0502c4728cbf12156290df99c3ed7de85b1dbfe20b5c36931733a33'\n * })\n */\nexport async function sendRawTransaction(client, { serializedTransaction }) {\n return client.request({\n method: 'eth_sendRawTransaction',\n params: [serializedTransaction],\n }, { retryCount: 0 });\n}\n//# sourceMappingURL=sendRawTransaction.js.map","import { parseAccount, } from '../../accounts/utils/parseAccount.js';\nimport { AccountNotFoundError, AccountTypeNotSupportedError, } from '../../errors/account.js';\nimport { BaseError } from '../../errors/base.js';\nimport { recoverAuthorizationAddress, } from '../../utils/authorization/recoverAuthorizationAddress.js';\nimport { assertCurrentChain, } from '../../utils/chain/assertCurrentChain.js';\nimport { getTransactionError, } from '../../utils/errors/getTransactionError.js';\nimport { extract } from '../../utils/formatters/extract.js';\nimport { formatTransactionRequest, } from '../../utils/formatters/transactionRequest.js';\nimport { getAction } from '../../utils/getAction.js';\nimport { LruMap } from '../../utils/lru.js';\nimport { assertRequest, } from '../../utils/transaction/assertRequest.js';\nimport { getChainId } from '../public/getChainId.js';\nimport { defaultParameters, prepareTransactionRequest, } from './prepareTransactionRequest.js';\nimport { sendRawTransaction, } from './sendRawTransaction.js';\nconst supportsWalletNamespace = new LruMap(128);\n/**\n * Creates, signs, and sends a new transaction to the network.\n *\n * - Docs: https://viem.sh/docs/actions/wallet/sendTransaction\n * - Examples: https://stackblitz.com/github/wevm/viem/tree/main/examples/transactions_sending-transactions\n * - JSON-RPC Methods:\n * - JSON-RPC Accounts: [`eth_sendTransaction`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_sendtransaction)\n * - Local Accounts: [`eth_sendRawTransaction`](https://ethereum.org/en/developers/docs/apis/json-rpc/#eth_sendrawtransaction)\n *\n * @param client - Client to use\n * @param parameters - {@link SendTransactionParameters}\n * @returns The [Transaction](https://viem.sh/docs/glossary/terms#transaction) hash. {@link SendTransactionReturnType}\n *\n * @example\n * import { createWalletClient, custom } from 'viem'\n * import { mainnet } from 'viem/chains'\n * import { sendTransaction } from 'viem/wallet'\n *\n * const client = createWalletClient({\n * chain: mainnet,\n * transport: custom(window.ethereum),\n * })\n * const hash = await sendTransaction(client, {\n * account: '0xA0Cf798816D4b9b9866b5330EEa46a18382f251e',\n * to: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8',\n * value: 1000000000000000000n,\n * })\n *\n * @example\n * // Account Hoisting\n * import { createWalletClient, http } from 'viem'\n * import { privateKeyToAccount } from 'viem/accounts'\n * import { mainnet } from 'viem/chains'\n * import { sendTransaction } from 'viem/wallet'\n *\n * const client = createWalletClient({\n * account: privateKeyToAccount('0x…'),\n * chain: mainnet,\n * transport: http(),\n * })\n * const hash = await sendTransaction(client, {\n * to: '0x70997970c51812dc3a010c7d01b50e0d17dc79c8',\n * value: 1000000000000000000n,\n * })\n */\nexport async function sendTransaction(client, parameters) {\n const { account: account_ = client.account, chain = client.chain, accessList, authorizationList, blobs, data, gas, gasPrice, maxFeePerBlobGas, maxFeePerGas, maxPriorityFeePerGas, nonce, type, value, ...rest } = parameters;\n if (typeof account_ === 'undefined')\n throw new AccountNotFoundError({\n docsPath: '/docs/actions/wallet/sendTransaction',\n });\n const account = account_ ? parseAccount(account_) : null;\n try {\n assertRequest(parameters);\n const to = await (async () => {\n // If `to` exists on the parameters, use that.\n if (parameters.to)\n return parameters.to;\n // If `to` is null, we are sending a deployment transaction.\n if (parameters.to === null)\n return undefined;\n // If no `to` exists, and we are sending a EIP-7702 transaction, use the\n // address of the first authorization in the list.\n if (authorizationList && authorizationList.length > 0)\n return await recoverAuthorizationAddress({\n authorization: authorizationList[0],\n }).catch(() => {\n throw new BaseError('`to` is required. Could not infer from `authorizationList`.');\n });\n // Otherwise, we are sending a deployment transaction.\n return undefined;\n })();\n if (account?.type === 'json-rpc' || account === null) {\n let chainId;\n if (chain !== null) {\n chainId = await getAction(client, getChainId, 'getChainId')({});\n assertCurrentChain({\n currentChainId: chainId,\n chain,\n });\n }\n const chainFormat = client.chain?.formatters?.transactionRequest?.format;\n const format = chainFormat || formatTransactionRequest;\n const request = format({\n // Pick out extra data that might exist on the chain's transaction request type.\n ...extract(rest, { format: chainFormat }),\n accessList,\n authorizationList,\n blobs,\n chainId,\n data,\n from: account?.address,\n gas,\n gasPrice,\n maxFeePerBlobGas,\n maxFeePerGas,\n maxPriorityFeePerGas,\n nonce,\n to,\n type,\n value,\n });\n const isWalletNamespaceSupported = supportsWalletNamespace.get(client.uid);\n const method = isWalletNamespaceSupported\n ? 'wallet_sendTransaction'\n : 'eth_sendTransaction';\n try {\n return await client.request({\n method,\n params: [request],\n }, { retryCount: 0 });\n }\n catch (e) {\n if (isWalletNamespaceSupported === false)\n throw e;\n const error = e;\n // If the transport does not support the method or input, attempt to use the\n // `wallet_sendTransaction` method.\n if (error.name === 'InvalidInputRpcError' ||\n error.name === 'InvalidParamsRpcError' ||\n error.name === 'MethodNotFoundRpcError' ||\n error.name === 'MethodNotSupportedRpcError') {\n return await client\n .request({\n method: 'wallet_sendTransaction',\n params: [request],\n }, { retryCount: 0 })\n .then((hash) => {\n supportsWalletNamespace.set(client.uid, true);\n return hash;\n })\n .catch((e) => {\n const walletNamespaceError = e;\n if (walletNamespaceError.name === 'MethodNotFoundRpcError' ||\n walletNamespaceError.name === 'MethodNotSupportedRpcError') {\n supportsWalletNamespace.set(client.uid, false);\n throw error;\n }\n throw walletNamespaceError;\n });\n }\n throw error;\n }\n }\n if (account?.type === 'local') {\n // Prepare the request for signing (assign appropriate fees, etc.)\n const request = await getAction(client, prepareTransactionRequest, 'prepareTransactionRequest')({\n account,\n accessList,\n authorizationList,\n blobs,\n chain,\n data,\n gas,\n gasPrice,\n maxFeePerBlobGas,\n maxFeePerGas,\n maxPriorityFeePerGas,\n nonce,\n nonceManager: account.nonceManager,\n parameters: [...defaultParameters, 'sidecars'],\n type,\n value,\n ...rest,\n to,\n });\n const serializer = chain?.serializers?.transaction;\n const serializedTransaction = (await account.signTransaction(request, {\n serializer,\n }));\n return await getAction(client, sendRawTransaction, 'sendRawTransaction')({\n serializedTransaction,\n });\n }\n if (account?.type === 'smart')\n throw new AccountTypeNotSupportedError({\n metaMessages: [\n 'Consider using the `sendUserOperation` Action instead.',\n ],\n docsPath: '/docs/actions/bundler/sendUserOperation',\n type: 'smart',\n });\n throw new AccountTypeNotSupportedError({\n docsPath: '/docs/actions/wallet/sendTransaction',\n type: account?.type,\n });\n }\n catch (err) {\n if (err instanceof AccountTypeNotSupportedError)\n throw err;\n throw getTransactionError(err, {\n ...parameters,\n account,\n chain: parameters.chain || undefined,\n });\n }\n}\n//# sourceMappingURL=sendTransaction.js.map","/** @internal */\nexport function withResolvers() {\n let resolve = () => undefined;\n let reject = () => undefined;\n const promise = new Promise((resolve_, reject_) => {\n resolve = resolve_;\n reject = reject_;\n });\n return { promise, resolve, reject };\n}\n//# sourceMappingURL=withResolvers.js.map","import { withResolvers } from './withResolvers.js';\nconst schedulerCache = /*#__PURE__*/ new Map();\n/** @internal */\nexport function createBatchScheduler({ fn, id, shouldSplitBatch, wait = 0, sort, }) {\n const exec = async () => {\n const scheduler = getScheduler();\n flush();\n const args = scheduler.map(({ args }) => args);\n if (args.length === 0)\n return;\n fn(args)\n .then((data) => {\n if (sort && Array.isArray(data))\n data.sort(sort);\n for (let i = 0; i < scheduler.length; i++) {\n const { resolve } = scheduler[i];\n resolve?.([data[i], data]);\n }\n })\n .catch((err) => {\n for (let i = 0; i < scheduler.length; i++) {\n const { reject } = scheduler[i];\n reject?.(err);\n }\n });\n };\n const flush = () => schedulerCache.delete(id);\n const getBatchedArgs = () => getScheduler().map(({ args }) => args);\n const getScheduler = () => schedulerCache.get(id) || [];\n const setScheduler = (item) => schedulerCache.set(id, [...getScheduler(), item]);\n return {\n flush,\n async schedule(args) {\n const { promise, resolve, reject } = withResolvers();\n const split = shouldSplitBatch?.([...getBatchedArgs(), args]);\n if (split)\n exec();\n const hasActiveScheduler = getScheduler().length > 0;\n if (hasActiveScheduler) {\n setScheduler({ args, resolve, reject });\n return promise;\n }\n setScheduler({ args, resolve, reject });\n setTimeout(exec, wait);\n return promise;\n },\n };\n}\n//# sourceMappingURL=createBatchScheduler.js.map","export function formatLog(log, { args, eventName, } = {}) {\n return {\n ...log,\n blockHash: log.blockHash ? log.blockHash : null,\n blockNumber: log.blockNumber ? BigInt(log.blockNumber) : null,\n logIndex: log.logIndex ? Number(log.logIndex) : null,\n transactionHash: log.transactionHash ? log.transactionHash : null,\n transactionIndex: log.transactionIndex\n ? Number(log.transactionIndex)\n : null,\n ...(eventName ? { args, eventName } : {}),\n };\n}\n//# sourceMappingURL=log.js.map","import { hexToNumber } from '../encoding/fromHex.js';\nimport { defineFormatter } from './formatter.js';\nimport { formatLog } from './log.js';\nimport { transactionType } from './transaction.js';\nexport const receiptStatuses = {\n '0x0': 'reverted',\n '0x1': 'success',\n};\nexport function formatTransactionReceipt(transactionReceipt) {\n const receipt = {\n ...transactionReceipt,\n blockNumber: transactionReceipt.blockNumber\n ? BigInt(transactionReceipt.blockNumber)\n : null,\n contractAddress: transactionReceipt.contractAddress\n ? transactionReceipt.contractAddress\n : null,\n cumulativeGasUsed: transactionReceipt.cumulativeGasUsed\n ? BigInt(transactionReceipt.cumulativeGasUsed)\n : null,\n effectiveGasPrice: transactionReceipt.effectiveGasPrice\n ? BigInt(transactionReceipt.effectiveGasPrice)\n : null,\n gasUsed: transactionReceipt.gasUsed\n ? BigInt(transactionReceipt.gasUsed)\n : null,\n logs: transactionReceipt.logs\n ? transactionReceipt.logs.map((log) => formatLog(log))\n : null,\n to: transactionReceipt.to ? transactionReceipt.to : null,\n transactionIndex: transactionReceipt.transactionIndex\n ? hexToNumber(transactionReceipt.transactionIndex)\n : null,\n status: transactionReceipt.status\n ? receiptStatuses[transactionReceipt.status]\n : null,\n type: transactionReceipt.type\n ? transactionType[transactionReceipt.type] || transactionReceipt.type\n : null,\n };\n if (transactionReceipt.blobGasPrice)\n receipt.blobGasPrice = BigInt(transactionReceipt.blobGasPrice);\n if (transactionReceipt.blobGasUsed)\n receipt.blobGasUsed = BigInt(transactionReceipt.blobGasUsed);\n return receipt;\n}\nexport const defineTransactionReceipt = /*#__PURE__*/ defineFormatter('transactionReceipt', formatTransactionReceipt);\n//# sourceMappingURL=transactionReceipt.js.map","import { LruMap } from '../lru.js';\n/** @internal */\nexport const promiseCache = /*#__PURE__*/ new LruMap(8192);\n/** Deduplicates in-flight promises. */\nexport function withDedupe(fn, { enabled = true, id }) {\n if (!enabled || !id)\n return fn();\n if (promiseCache.get(id))\n return promiseCache.get(id);\n const promise = fn().finally(() => promiseCache.delete(id));\n promiseCache.set(id, promise);\n return promise;\n}\n//# sourceMappingURL=withDedupe.js.map","export async function wait(time) {\n return new Promise((res) => setTimeout(res, time));\n}\n//# sourceMappingURL=wait.js.map","import { wait } from '../wait.js';\nexport function withRetry(fn, { delay: delay_ = 100, retryCount = 2, shouldRetry = () => true, } = {}) {\n return new Promise((resolve, reject) => {\n const attemptRetry = async ({ count = 0 } = {}) => {\n const retry = async ({ error }) => {\n const delay = typeof delay_ === 'function' ? delay_({ count, error }) : delay_;\n if (delay)\n await wait(delay);\n attemptRetry({ count: count + 1 });\n };\n try {\n const data = await fn();\n resolve(data);\n }\n catch (err) {\n if (count < retryCount &&\n (await shouldRetry({ count, error: err })))\n return retry({ error: err });\n reject(err);\n }\n };\n attemptRetry();\n });\n}\n//# sourceMappingURL=withRetry.js.map","import { BaseError } from '../errors/base.js';\nimport { HttpRequestError, } from '../errors/request.js';\nimport { AtomicReadyWalletRejectedUpgradeError, AtomicityNotSupportedError, BundleTooLargeError, ChainDisconnectedError, DuplicateIdError, InternalRpcError, InvalidInputRpcError, InvalidParamsRpcError, InvalidRequestRpcError, JsonRpcVersionUnsupportedError, LimitExceededRpcError, MethodNotFoundRpcError, MethodNotSupportedRpcError, ParseRpcError, ProviderDisconnectedError, ResourceNotFoundRpcError, ResourceUnavailableRpcError, SwitchChainError, TransactionRejectedRpcError, UnauthorizedProviderError, UnknownBundleIdError, UnknownRpcError, UnsupportedChainIdError, UnsupportedNonOptionalCapabilityError, UnsupportedProviderMethodError, UserRejectedRequestError, } from '../errors/rpc.js';\nimport { stringToHex } from './encoding/toHex.js';\nimport { withDedupe } from './promise/withDedupe.js';\nimport { withRetry } from './promise/withRetry.js';\nimport { stringify } from './stringify.js';\nexport function buildRequest(request, options = {}) {\n return async (args, overrideOptions = {}) => {\n const { dedupe = false, methods, retryDelay = 150, retryCount = 3, uid, } = {\n ...options,\n ...overrideOptions,\n };\n const { method } = args;\n if (methods?.exclude?.includes(method))\n throw new MethodNotSupportedRpcError(new Error('method not supported'), {\n method,\n });\n if (methods?.include && !methods.include.includes(method))\n throw new MethodNotSupportedRpcError(new Error('method not supported'), {\n method,\n });\n const requestId = dedupe\n ? stringToHex(`${uid}.${stringify(args)}`)\n : undefined;\n return withDedupe(() => withRetry(async () => {\n try {\n return await request(args);\n }\n catch (err_) {\n const err = err_;\n switch (err.code) {\n // -32700\n case ParseRpcError.code:\n throw new ParseRpcError(err);\n // -32600\n case InvalidRequestRpcError.code:\n throw new InvalidRequestRpcError(err);\n // -32601\n case MethodNotFoundRpcError.code:\n throw new MethodNotFoundRpcError(err, { method: args.method });\n // -32602\n case InvalidParamsRpcError.code:\n throw new InvalidParamsRpcError(err);\n // -32603\n case InternalRpcError.code:\n throw new InternalRpcError(err);\n // -32000\n case InvalidInputRpcError.code:\n throw new InvalidInputRpcError(err);\n // -32001\n case ResourceNotFoundRpcError.code:\n throw new ResourceNotFoundRpcError(err);\n // -32002\n case ResourceUnavailableRpcError.code:\n throw new ResourceUnavailableRpcError(err);\n // -32003\n case TransactionRejectedRpcError.code:\n throw new TransactionRejectedRpcError(err);\n // -32004\n case MethodNotSupportedRpcError.code:\n throw new MethodNotSupportedRpcError(err, {\n method: args.method,\n });\n // -32005\n case LimitExceededRpcError.code:\n throw new LimitExceededRpcError(err);\n // -32006\n case JsonRpcVersionUnsupportedError.code:\n throw new JsonRpcVersionUnsupportedError(err);\n // 4001\n case UserRejectedRequestError.code:\n throw new UserRejectedRequestError(err);\n // 4100\n case UnauthorizedProviderError.code:\n throw new UnauthorizedProviderError(err);\n // 4200\n case UnsupportedProviderMethodError.code:\n throw new UnsupportedProviderMethodError(err);\n // 4900\n case ProviderDisconnectedError.code:\n throw new ProviderDisconnectedError(err);\n // 4901\n case ChainDisconnectedError.code:\n throw new ChainDisconnectedError(err);\n // 4902\n case SwitchChainError.code:\n throw new SwitchChainError(err);\n // 5700\n case UnsupportedNonOptionalCapabilityError.code:\n throw new UnsupportedNonOptionalCapabilityError(err);\n // 5710\n case UnsupportedChainIdError.code:\n throw new UnsupportedChainIdError(err);\n // 5720\n case DuplicateIdError.code:\n throw new DuplicateIdError(err);\n // 5730\n case UnknownBundleIdError.code:\n throw new UnknownBundleIdError(err);\n // 5740\n case BundleTooLargeError.code:\n throw new BundleTooLargeError(err);\n // 5750\n case AtomicReadyWalletRejectedUpgradeError.code:\n throw new AtomicReadyWalletRejectedUpgradeError(err);\n // 5760\n case AtomicityNotSupportedError.code:\n throw new AtomicityNotSupportedError(err);\n // CAIP-25: User Rejected Error\n // https://docs.walletconnect.com/2.0/specs/clients/sign/error-codes#rejected-caip-25\n case 5000:\n throw new UserRejectedRequestError(err);\n default:\n if (err_ instanceof BaseError)\n throw err_;\n throw new UnknownRpcError(err);\n }\n }\n }, {\n delay: ({ count, error }) => {\n // If we find a Retry-After header, let's retry after the given time.\n if (error && error instanceof HttpRequestError) {\n const retryAfter = error?.headers?.get('Retry-After');\n if (retryAfter?.match(/\\d/))\n return Number.parseInt(retryAfter) * 1000;\n }\n // Otherwise, let's retry with an exponential backoff.\n return ~~(1 << count) * retryDelay;\n },\n retryCount,\n shouldRetry: ({ error }) => shouldRetry(error),\n }), { enabled: dedupe, id: requestId });\n };\n}\n/** @internal */\nexport function shouldRetry(error) {\n if ('code' in error && typeof error.code === 'number') {\n if (error.code === -1)\n return true; // Unknown error\n if (error.code === LimitExceededRpcError.code)\n return true;\n if (error.code === InternalRpcError.code)\n return true;\n return false;\n }\n if (error instanceof HttpRequestError && error.status) {\n // Forbidden\n if (error.status === 403)\n return true;\n // Request Timeout\n if (error.status === 408)\n return true;\n // Request Entity Too Large\n if (error.status === 413)\n return true;\n // Too Many Requests\n if (error.status === 429)\n return true;\n // Internal Server Error\n if (error.status === 500)\n return true;\n // Bad Gateway\n if (error.status === 502)\n return true;\n // Service Unavailable\n if (error.status === 503)\n return true;\n // Gateway Timeout\n if (error.status === 504)\n return true;\n return false;\n }\n return true;\n}\n//# sourceMappingURL=buildRequest.js.map","export function defineChain(chain) {\n return {\n formatters: undefined,\n fees: undefined,\n serializers: undefined,\n ...chain,\n };\n}\n//# sourceMappingURL=defineChain.js.map","export function withTimeout(fn, { errorInstance = new Error('timed out'), timeout, signal, }) {\n return new Promise((resolve, reject) => {\n ;\n (async () => {\n let timeoutId;\n try {\n const controller = new AbortController();\n if (timeout > 0) {\n timeoutId = setTimeout(() => {\n if (signal) {\n controller.abort();\n }\n else {\n reject(errorInstance);\n }\n }, timeout); // need to cast because bun globals.d.ts overrides @types/node\n }\n resolve(await fn({ signal: controller?.signal || null }));\n }\n catch (err) {\n if (err?.name === 'AbortError')\n reject(errorInstance);\n reject(err);\n }\n finally {\n clearTimeout(timeoutId);\n }\n })();\n });\n}\n//# sourceMappingURL=withTimeout.js.map","function createIdStore() {\n return {\n current: 0,\n take() {\n return this.current++;\n },\n reset() {\n this.current = 0;\n },\n };\n}\nexport const idCache = /*#__PURE__*/ createIdStore();\n//# sourceMappingURL=id.js.map","import { HttpRequestError, TimeoutError, } from '../../errors/request.js';\nimport { withTimeout, } from '../promise/withTimeout.js';\nimport { stringify } from '../stringify.js';\nimport { idCache } from './id.js';\nexport function getHttpRpcClient(url, options = {}) {\n return {\n async request(params) {\n const { body, onRequest = options.onRequest, onResponse = options.onResponse, timeout = options.timeout ?? 10_000, } = params;\n const fetchOptions = {\n ...(options.fetchOptions ?? {}),\n ...(params.fetchOptions ?? {}),\n };\n const { headers, method, signal: signal_ } = fetchOptions;\n try {\n const response = await withTimeout(async ({ signal }) => {\n const init = {\n ...fetchOptions,\n body: Array.isArray(body)\n ? stringify(body.map((body) => ({\n jsonrpc: '2.0',\n id: body.id ?? idCache.take(),\n ...body,\n })))\n : stringify({\n jsonrpc: '2.0',\n id: body.id ?? idCache.take(),\n ...body,\n }),\n headers: {\n 'Content-Type': 'application/json',\n ...headers,\n },\n method: method || 'POST',\n signal: signal_ || (timeout > 0 ? signal : null),\n };\n const request = new Request(url, init);\n const args = (await onRequest?.(request, init)) ?? { ...init, url };\n const response = await fetch(args.url ?? url, args);\n return response;\n }, {\n errorInstance: new TimeoutError({ body, url }),\n timeout,\n signal: true,\n });\n if (onResponse)\n await onResponse(response);\n let data;\n if (response.headers.get('Content-Type')?.startsWith('application/json'))\n data = await response.json();\n else {\n data = await response.text();\n try {\n data = JSON.parse(data || '{}');\n }\n catch (err) {\n if (response.ok)\n throw err;\n data = { error: data };\n }\n }\n if (!response.ok) {\n throw new HttpRequestError({\n body,\n details: stringify(data.error) || response.statusText,\n headers: response.headers,\n status: response.status,\n url,\n });\n }\n return data;\n }\n catch (err) {\n if (err instanceof HttpRequestError)\n throw err;\n if (err instanceof TimeoutError)\n throw err;\n throw new HttpRequestError({\n body,\n cause: err,\n url,\n });\n }\n },\n };\n}\n//# sourceMappingURL=http.js.map","import { versionedHashVersionKzg } from '../../constants/kzg.js';\nimport { maxUint256 } from '../../constants/number.js';\nimport { InvalidAddressError, } from '../../errors/address.js';\nimport { BaseError } from '../../errors/base.js';\nimport { EmptyBlobError, InvalidVersionedHashSizeError, InvalidVersionedHashVersionError, } from '../../errors/blob.js';\nimport { InvalidChainIdError, } from '../../errors/chain.js';\nimport { FeeCapTooHighError, TipAboveFeeCapError, } from '../../errors/node.js';\nimport { isAddress } from '../address/isAddress.js';\nimport { size } from '../data/size.js';\nimport { slice } from '../data/slice.js';\nimport { hexToNumber } from '../encoding/fromHex.js';\nexport function assertTransactionEIP7702(transaction) {\n const { authorizationList } = transaction;\n if (authorizationList) {\n for (const authorization of authorizationList) {\n const { chainId } = authorization;\n const address = authorization.address;\n if (!isAddress(address))\n throw new InvalidAddressError({ address });\n if (chainId < 0)\n throw new InvalidChainIdError({ chainId });\n }\n }\n assertTransactionEIP1559(transaction);\n}\nexport function assertTransactionEIP4844(transaction) {\n const { blobVersionedHashes } = transaction;\n if (blobVersionedHashes) {\n if (blobVersionedHashes.length === 0)\n throw new EmptyBlobError();\n for (const hash of blobVersionedHashes) {\n const size_ = size(hash);\n const version = hexToNumber(slice(hash, 0, 1));\n if (size_ !== 32)\n throw new InvalidVersionedHashSizeError({ hash, size: size_ });\n if (version !== versionedHashVersionKzg)\n throw new InvalidVersionedHashVersionError({\n hash,\n version,\n });\n }\n }\n assertTransactionEIP1559(transaction);\n}\nexport function assertTransactionEIP1559(transaction) {\n const { chainId, maxPriorityFeePerGas, maxFeePerGas, to } = transaction;\n if (chainId <= 0)\n throw new InvalidChainIdError({ chainId });\n if (to && !isAddress(to))\n throw new InvalidAddressError({ address: to });\n if (maxFeePerGas && maxFeePerGas > maxUint256)\n throw new FeeCapTooHighError({ maxFeePerGas });\n if (maxPriorityFeePerGas &&\n maxFeePerGas &&\n maxPriorityFeePerGas > maxFeePerGas)\n throw new TipAboveFeeCapError({ maxFeePerGas, maxPriorityFeePerGas });\n}\nexport function assertTransactionEIP2930(transaction) {\n const { chainId, maxPriorityFeePerGas, gasPrice, maxFeePerGas, to } = transaction;\n if (chainId <= 0)\n throw new InvalidChainIdError({ chainId });\n if (to && !isAddress(to))\n throw new InvalidAddressError({ address: to });\n if (maxPriorityFeePerGas || maxFeePerGas)\n throw new BaseError('`maxFeePerGas`/`maxPriorityFeePerGas` is not a valid EIP-2930 Transaction attribute.');\n if (gasPrice && gasPrice > maxUint256)\n throw new FeeCapTooHighError({ maxFeePerGas: gasPrice });\n}\nexport function assertTransactionLegacy(transaction) {\n const { chainId, maxPriorityFeePerGas, gasPrice, maxFeePerGas, to } = transaction;\n if (to && !isAddress(to))\n throw new InvalidAddressError({ address: to });\n if (typeof chainId !== 'undefined' && chainId <= 0)\n throw new InvalidChainIdError({ chainId });\n if (maxPriorityFeePerGas || maxFeePerGas)\n throw new BaseError('`maxFeePerGas`/`maxPriorityFeePerGas` is not a valid Legacy Transaction attribute.');\n if (gasPrice && gasPrice > maxUint256)\n throw new FeeCapTooHighError({ maxFeePerGas: gasPrice });\n}\n//# sourceMappingURL=assertTransaction.js.map","import { InvalidAddressError, } from '../../errors/address.js';\nimport { InvalidStorageKeySizeError, } from '../../errors/transaction.js';\nimport { isAddress } from '../address/isAddress.js';\n/*\n * Serialize an EIP-2930 access list\n * @remarks\n * Use to create a transaction serializer with support for EIP-2930 access lists\n *\n * @param accessList - Array of objects of address and arrays of Storage Keys\n * @throws InvalidAddressError, InvalidStorageKeySizeError\n * @returns Array of hex strings\n */\nexport function serializeAccessList(accessList) {\n if (!accessList || accessList.length === 0)\n return [];\n const serializedAccessList = [];\n for (let i = 0; i < accessList.length; i++) {\n const { address, storageKeys } = accessList[i];\n for (let j = 0; j < storageKeys.length; j++) {\n if (storageKeys[j].length - 2 !== 64) {\n throw new InvalidStorageKeySizeError({ storageKey: storageKeys[j] });\n }\n }\n if (!isAddress(address, { strict: false })) {\n throw new InvalidAddressError({ address });\n }\n serializedAccessList.push([address, storageKeys]);\n }\n return serializedAccessList;\n}\n//# sourceMappingURL=serializeAccessList.js.map","import { InvalidLegacyVError, } from '../../errors/transaction.js';\nimport { serializeAuthorizationList, } from '../authorization/serializeAuthorizationList.js';\nimport { blobsToCommitments, } from '../blob/blobsToCommitments.js';\nimport { blobsToProofs, } from '../blob/blobsToProofs.js';\nimport { commitmentsToVersionedHashes, } from '../blob/commitmentsToVersionedHashes.js';\nimport { toBlobSidecars, } from '../blob/toBlobSidecars.js';\nimport { concatHex } from '../data/concat.js';\nimport { trim } from '../data/trim.js';\nimport { bytesToHex, numberToHex, } from '../encoding/toHex.js';\nimport { toRlp } from '../encoding/toRlp.js';\nimport { assertTransactionEIP1559, assertTransactionEIP2930, assertTransactionEIP4844, assertTransactionEIP7702, assertTransactionLegacy, } from './assertTransaction.js';\nimport { getTransactionType, } from './getTransactionType.js';\nimport { serializeAccessList, } from './serializeAccessList.js';\nexport function serializeTransaction(transaction, signature) {\n const type = getTransactionType(transaction);\n if (type === 'eip1559')\n return serializeTransactionEIP1559(transaction, signature);\n if (type === 'eip2930')\n return serializeTransactionEIP2930(transaction, signature);\n if (type === 'eip4844')\n return serializeTransactionEIP4844(transaction, signature);\n if (type === 'eip7702')\n return serializeTransactionEIP7702(transaction, signature);\n return serializeTransactionLegacy(transaction, signature);\n}\nfunction serializeTransactionEIP7702(transaction, signature) {\n const { authorizationList, chainId, gas, nonce, to, value, maxFeePerGas, maxPriorityFeePerGas, accessList, data, } = transaction;\n assertTransactionEIP7702(transaction);\n const serializedAccessList = serializeAccessList(accessList);\n const serializedAuthorizationList = serializeAuthorizationList(authorizationList);\n return concatHex([\n '0x04',\n toRlp([\n numberToHex(chainId),\n nonce ? numberToHex(nonce) : '0x',\n maxPriorityFeePerGas ? numberToHex(maxPriorityFeePerGas) : '0x',\n maxFeePerGas ? numberToHex(maxFeePerGas) : '0x',\n gas ? numberToHex(gas) : '0x',\n to ?? '0x',\n value ? numberToHex(value) : '0x',\n data ?? '0x',\n serializedAccessList,\n serializedAuthorizationList,\n ...toYParitySignatureArray(transaction, signature),\n ]),\n ]);\n}\nfunction serializeTransactionEIP4844(transaction, signature) {\n const { chainId, gas, nonce, to, value, maxFeePerBlobGas, maxFeePerGas, maxPriorityFeePerGas, accessList, data, } = transaction;\n assertTransactionEIP4844(transaction);\n let blobVersionedHashes = transaction.blobVersionedHashes;\n let sidecars = transaction.sidecars;\n // If `blobs` are passed, we will need to compute the KZG commitments & proofs.\n if (transaction.blobs &&\n (typeof blobVersionedHashes === 'undefined' ||\n typeof sidecars === 'undefined')) {\n const blobs = (typeof transaction.blobs[0] === 'string'\n ? transaction.blobs\n : transaction.blobs.map((x) => bytesToHex(x)));\n const kzg = transaction.kzg;\n const commitments = blobsToCommitments({\n blobs,\n kzg,\n });\n if (typeof blobVersionedHashes === 'undefined')\n blobVersionedHashes = commitmentsToVersionedHashes({\n commitments,\n });\n if (typeof sidecars === 'undefined') {\n const proofs = blobsToProofs({ blobs, commitments, kzg });\n sidecars = toBlobSidecars({ blobs, commitments, proofs });\n }\n }\n const serializedAccessList = serializeAccessList(accessList);\n const serializedTransaction = [\n numberToHex(chainId),\n nonce ? numberToHex(nonce) : '0x',\n maxPriorityFeePerGas ? numberToHex(maxPriorityFeePerGas) : '0x',\n maxFeePerGas ? numberToHex(maxFeePerGas) : '0x',\n gas ? numberToHex(gas) : '0x',\n to ?? '0x',\n value ? numberToHex(value) : '0x',\n data ?? '0x',\n serializedAccessList,\n maxFeePerBlobGas ? numberToHex(maxFeePerBlobGas) : '0x',\n blobVersionedHashes ?? [],\n ...toYParitySignatureArray(transaction, signature),\n ];\n const blobs = [];\n const commitments = [];\n const proofs = [];\n if (sidecars)\n for (let i = 0; i < sidecars.length; i++) {\n const { blob, commitment, proof } = sidecars[i];\n blobs.push(blob);\n commitments.push(commitment);\n proofs.push(proof);\n }\n return concatHex([\n '0x03',\n sidecars\n ? // If sidecars are enabled, envelope turns into a \"wrapper\":\n toRlp([serializedTransaction, blobs, commitments, proofs])\n : // If sidecars are disabled, standard envelope is used:\n toRlp(serializedTransaction),\n ]);\n}\nfunction serializeTransactionEIP1559(transaction, signature) {\n const { chainId, gas, nonce, to, value, maxFeePerGas, maxPriorityFeePerGas, accessList, data, } = transaction;\n assertTransactionEIP1559(transaction);\n const serializedAccessList = serializeAccessList(accessList);\n const serializedTransaction = [\n numberToHex(chainId),\n nonce ? numberToHex(nonce) : '0x',\n maxPriorityFeePerGas ? numberToHex(maxPriorityFeePerGas) : '0x',\n maxFeePerGas ? numberToHex(maxFeePerGas) : '0x',\n gas ? numberToHex(gas) : '0x',\n to ?? '0x',\n value ? numberToHex(value) : '0x',\n data ?? '0x',\n serializedAccessList,\n ...toYParitySignatureArray(transaction, signature),\n ];\n return concatHex([\n '0x02',\n toRlp(serializedTransaction),\n ]);\n}\nfunction serializeTransactionEIP2930(transaction, signature) {\n const { chainId, gas, data, nonce, to, value, accessList, gasPrice } = transaction;\n assertTransactionEIP2930(transaction);\n const serializedAccessList = serializeAccessList(accessList);\n const serializedTransaction = [\n numberToHex(chainId),\n nonce ? numberToHex(nonce) : '0x',\n gasPrice ? numberToHex(gasPrice) : '0x',\n gas ? numberToHex(gas) : '0x',\n to ?? '0x',\n value ? numberToHex(value) : '0x',\n data ?? '0x',\n serializedAccessList,\n ...toYParitySignatureArray(transaction, signature),\n ];\n return concatHex([\n '0x01',\n toRlp(serializedTransaction),\n ]);\n}\nfunction serializeTransactionLegacy(transaction, signature) {\n const { chainId = 0, gas, data, nonce, to, value, gasPrice } = transaction;\n assertTransactionLegacy(transaction);\n let serializedTransaction = [\n nonce ? numberToHex(nonce) : '0x',\n gasPrice ? numberToHex(gasPrice) : '0x',\n gas ? numberToHex(gas) : '0x',\n to ?? '0x',\n value ? numberToHex(value) : '0x',\n data ?? '0x',\n ];\n if (signature) {\n const v = (() => {\n // EIP-155 (inferred chainId)\n if (signature.v >= 35n) {\n const inferredChainId = (signature.v - 35n) / 2n;\n if (inferredChainId > 0)\n return signature.v;\n return 27n + (signature.v === 35n ? 0n : 1n);\n }\n // EIP-155 (explicit chainId)\n if (chainId > 0)\n return BigInt(chainId * 2) + BigInt(35n + signature.v - 27n);\n // Pre-EIP-155 (no chainId)\n const v = 27n + (signature.v === 27n ? 0n : 1n);\n if (signature.v !== v)\n throw new InvalidLegacyVError({ v: signature.v });\n return v;\n })();\n const r = trim(signature.r);\n const s = trim(signature.s);\n serializedTransaction = [\n ...serializedTransaction,\n numberToHex(v),\n r === '0x00' ? '0x' : r,\n s === '0x00' ? '0x' : s,\n ];\n }\n else if (chainId > 0) {\n serializedTransaction = [\n ...serializedTransaction,\n numberToHex(chainId),\n '0x',\n '0x',\n ];\n }\n return toRlp(serializedTransaction);\n}\nexport function toYParitySignatureArray(transaction, signature_) {\n const signature = signature_ ?? transaction;\n const { v, yParity } = signature;\n if (typeof signature.r === 'undefined')\n return [];\n if (typeof signature.s === 'undefined')\n return [];\n if (typeof v === 'undefined' && typeof yParity === 'undefined')\n return [];\n const r = trim(signature.r);\n const s = trim(signature.s);\n const yParity_ = (() => {\n if (typeof yParity === 'number')\n return yParity ? numberToHex(1) : '0x';\n if (v === 0n)\n return '0x';\n if (v === 1n)\n return numberToHex(1);\n return v === 27n ? '0x' : numberToHex(1);\n })();\n return [yParity_, r === '0x00' ? '0x' : r, s === '0x00' ? '0x' : s];\n}\n//# sourceMappingURL=serializeTransaction.js.map","import { toHex } from '../encoding/toHex.js';\nimport { toYParitySignatureArray } from '../transaction/serializeTransaction.js';\n/*\n * Serializes an EIP-7702 authorization list.\n */\nexport function serializeAuthorizationList(authorizationList) {\n if (!authorizationList || authorizationList.length === 0)\n return [];\n const serializedAuthorizationList = [];\n for (const authorization of authorizationList) {\n const { chainId, nonce, ...signature } = authorization;\n const contractAddress = authorization.address;\n serializedAuthorizationList.push([\n chainId ? toHex(chainId) : '0x',\n contractAddress,\n nonce ? toHex(nonce) : '0x',\n ...toYParitySignatureArray({}, signature),\n ]);\n }\n return serializedAuthorizationList;\n}\n//# sourceMappingURL=serializeAuthorizationList.js.map","/**\n * Retrieves and returns an action from the client (if exists), and falls\n * back to the tree-shakable action.\n *\n * Useful for extracting overridden actions from a client (ie. if a consumer\n * wants to override the `sendTransaction` implementation).\n */\nexport function getAction(client, actionFn, \n// Some minifiers drop `Function.prototype.name`, or replace it with short letters,\n// meaning that `actionFn.name` will not always work. For that case, the consumer\n// needs to pass the name explicitly.\nname) {\n const action_implicit = client[actionFn.name];\n if (typeof action_implicit === 'function')\n return action_implicit;\n const action_explicit = client[name];\n if (typeof action_explicit === 'function')\n return action_explicit;\n return (params) => actionFn(client, params);\n}\n//# sourceMappingURL=getAction.js.map","export const version = '2.19.0';\n//# sourceMappingURL=version.js.map","import { version } from '../version.js';\nexport const getVersion = () => `@wagmi/core@${version}`;\n//# sourceMappingURL=getVersion.js.map","var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {\n if (kind === \"a\" && !f) throw new TypeError(\"Private accessor was defined without a getter\");\n if (typeof state === \"function\" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError(\"Cannot read private member from an object whose class did not declare it\");\n return kind === \"m\" ? f : kind === \"a\" ? f.call(receiver) : f ? f.value : state.get(receiver);\n};\nvar _BaseError_instances, _BaseError_walk;\nimport { getVersion } from '../utils/getVersion.js';\nexport class BaseError extends Error {\n get docsBaseUrl() {\n return 'https://wagmi.sh/core';\n }\n get version() {\n return getVersion();\n }\n constructor(shortMessage, options = {}) {\n super();\n _BaseError_instances.add(this);\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: 'WagmiCoreError'\n });\n const details = options.cause instanceof BaseError\n ? options.cause.details\n : options.cause?.message\n ? options.cause.message\n : options.details;\n const docsPath = options.cause instanceof BaseError\n ? options.cause.docsPath || options.docsPath\n : options.docsPath;\n this.message = [\n shortMessage || 'An error occurred.',\n '',\n ...(options.metaMessages ? [...options.metaMessages, ''] : []),\n ...(docsPath\n ? [\n `Docs: ${this.docsBaseUrl}${docsPath}.html${options.docsSlug ? `#${options.docsSlug}` : ''}`,\n ]\n : []),\n ...(details ? [`Details: ${details}`] : []),\n `Version: ${this.version}`,\n ].join('\\n');\n if (options.cause)\n this.cause = options.cause;\n this.details = details;\n this.docsPath = docsPath;\n this.metaMessages = options.metaMessages;\n this.shortMessage = shortMessage;\n }\n walk(fn) {\n return __classPrivateFieldGet(this, _BaseError_instances, \"m\", _BaseError_walk).call(this, this, fn);\n }\n}\n_BaseError_instances = new WeakSet(), _BaseError_walk = function _BaseError_walk(err, fn) {\n if (fn?.(err))\n return err;\n if (err.cause)\n return __classPrivateFieldGet(this, _BaseError_instances, \"m\", _BaseError_walk).call(this, err.cause, fn);\n return err;\n};\n//# sourceMappingURL=base.js.map","import { BaseError } from './base.js';\nexport class ChainNotConfiguredError extends BaseError {\n constructor() {\n super('Chain not configured.');\n Object.defineProperty(this, \"name\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 'ChainNotConfiguredError'\n });\n }\n}\nexport class ConnectorAlreadyConnectedError extends BaseError {\n constructor() {\n super('Connector already connected.');\n Object.defineProperty(this, \"name\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 'ConnectorAlreadyConnectedError'\n });\n }\n}\nexport class ConnectorNotConnectedError extends BaseError {\n constructor() {\n super('Connector not connected.');\n Object.defineProperty(this, \"name\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 'ConnectorNotConnectedError'\n });\n }\n}\nexport class ConnectorNotFoundError extends BaseError {\n constructor() {\n super('Connector not found.');\n Object.defineProperty(this, \"name\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 'ConnectorNotFoundError'\n });\n }\n}\nexport class ConnectorAccountNotFoundError extends BaseError {\n constructor({ address, connector, }) {\n super(`Account \"${address}\" not found for connector \"${connector.name}\".`);\n Object.defineProperty(this, \"name\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 'ConnectorAccountNotFoundError'\n });\n }\n}\nexport class ConnectorChainMismatchError extends BaseError {\n constructor({ connectionChainId, connectorChainId, }) {\n super(`The current chain of the connector (id: ${connectorChainId}) does not match the connection's chain (id: ${connectionChainId}).`, {\n metaMessages: [\n `Current Chain ID: ${connectorChainId}`,\n `Expected Chain ID: ${connectionChainId}`,\n ],\n });\n Object.defineProperty(this, \"name\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 'ConnectorChainMismatchError'\n });\n }\n}\nexport class ConnectorUnavailableReconnectingError extends BaseError {\n constructor({ connector }) {\n super(`Connector \"${connector.name}\" unavailable while reconnecting.`, {\n details: [\n 'During the reconnection step, the only connector methods guaranteed to be available are: `id`, `name`, `type`, `uid`.',\n 'All other methods are not guaranteed to be available until reconnection completes and connectors are fully restored.',\n 'This error commonly occurs for connectors that asynchronously inject after reconnection has already started.',\n ].join(' '),\n });\n Object.defineProperty(this, \"name\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 'ConnectorUnavailableReconnectingError'\n });\n }\n}\n//# sourceMappingURL=config.js.map","import { ConnectorAlreadyConnectedError, } from '../errors/config.js';\n/** https://wagmi.sh/core/api/actions/connect */\nexport async function connect(config, parameters) {\n // \"Register\" connector if not already created\n let connector;\n if (typeof parameters.connector === 'function') {\n connector = config._internal.connectors.setup(parameters.connector);\n }\n else\n connector = parameters.connector;\n // Check if connector is already connected\n if (connector.uid === config.state.current)\n throw new ConnectorAlreadyConnectedError();\n try {\n config.setState((x) => ({ ...x, status: 'connecting' }));\n connector.emitter.emit('message', { type: 'connecting' });\n const { connector: _, ...rest } = parameters;\n const data = await connector.connect(rest);\n const accounts = data.accounts;\n connector.emitter.off('connect', config._internal.events.connect);\n connector.emitter.on('change', config._internal.events.change);\n connector.emitter.on('disconnect', config._internal.events.disconnect);\n await config.storage?.setItem('recentConnectorId', connector.id);\n config.setState((x) => ({\n ...x,\n connections: new Map(x.connections).set(connector.uid, {\n accounts,\n chainId: data.chainId,\n connector: connector,\n }),\n current: connector.uid,\n status: 'connected',\n }));\n return { accounts, chainId: data.chainId };\n }\n catch (error) {\n config.setState((x) => ({\n ...x,\n // Keep existing connector connected in case of error\n status: x.current ? 'connected' : 'disconnected',\n }));\n throw error;\n }\n}\n//# sourceMappingURL=connect.js.map","const size = 256;\nlet index = size;\nlet buffer;\nexport function uid(length = 11) {\n if (!buffer || index + length > size * 2) {\n buffer = '';\n index = 0;\n for (let i = 0; i < size; i++) {\n buffer += ((256 + Math.random() * 256) | 0).toString(16).substring(1);\n }\n }\n return buffer.substring(index, index++ + length);\n}\n//# sourceMappingURL=uid.js.map","import { parseAccount, } from '../accounts/utils/parseAccount.js';\nimport { uid } from '../utils/uid.js';\nexport function createClient(parameters) {\n const { batch, chain, ccipRead, key = 'base', name = 'Base Client', type = 'base', } = parameters;\n const experimental_blockTag = parameters.experimental_blockTag ??\n (typeof chain?.experimental_preconfirmationTime === 'number'\n ? 'pending'\n : undefined);\n const blockTime = chain?.blockTime ?? 12_000;\n const defaultPollingInterval = Math.min(Math.max(Math.floor(blockTime / 2), 500), 4_000);\n const pollingInterval = parameters.pollingInterval ?? defaultPollingInterval;\n const cacheTime = parameters.cacheTime ?? pollingInterval;\n const account = parameters.account\n ? parseAccount(parameters.account)\n : undefined;\n const { config, request, value } = parameters.transport({\n chain,\n pollingInterval,\n });\n const transport = { ...config, ...value };\n const client = {\n account,\n batch,\n cacheTime,\n ccipRead,\n chain,\n key,\n name,\n pollingInterval,\n request,\n transport,\n type,\n uid: uid(),\n ...(experimental_blockTag ? { experimental_blockTag } : {}),\n };\n function extend(base) {\n return (extendFn) => {\n const extended = extendFn(base);\n for (const key in client)\n delete extended[key];\n const combined = { ...base, ...extended };\n return Object.assign(combined, { extend: extend(combined) });\n };\n }\n return Object.assign(client, { extend: extend(client) });\n}\n/**\n * Defines a typed JSON-RPC schema for the client.\n * Note: This is a runtime noop function.\n */\nexport function rpcSchema() {\n return null;\n}\n//# sourceMappingURL=createClient.js.map","import { buildRequest } from '../../utils/buildRequest.js';\nimport { uid as uid_ } from '../../utils/uid.js';\n/**\n * @description Creates an transport intended to be used with a client.\n */\nexport function createTransport({ key, methods, name, request, retryCount = 3, retryDelay = 150, timeout, type, }, value) {\n const uid = uid_();\n return {\n config: {\n key,\n methods,\n name,\n request,\n retryCount,\n retryDelay,\n timeout,\n type,\n },\n request: buildRequest(request, { methods, retryCount, retryDelay, uid }),\n value,\n };\n}\n//# sourceMappingURL=createTransport.js.map","import { createTransport, } from './createTransport.js';\n/**\n * @description Creates a custom transport given an EIP-1193 compliant `request` attribute.\n */\nexport function custom(provider, config = {}) {\n const { key = 'custom', methods, name = 'Custom Provider', retryDelay, } = config;\n return ({ retryCount: defaultRetryCount }) => createTransport({\n key,\n methods,\n name,\n request: provider.request.bind(provider),\n retryCount: config.retryCount ?? defaultRetryCount,\n retryDelay,\n type: 'custom',\n });\n}\n//# sourceMappingURL=custom.js.map","import { BaseError } from './base.js';\nexport class UrlRequiredError extends BaseError {\n constructor() {\n super('No URL was provided to the Transport. Please provide a valid RPC URL to the Transport.', {\n docsPath: '/docs/clients/intro',\n name: 'UrlRequiredError',\n });\n }\n}\n//# sourceMappingURL=transport.js.map","import { RpcRequestError } from '../../errors/request.js';\nimport { UrlRequiredError, } from '../../errors/transport.js';\nimport { createBatchScheduler } from '../../utils/promise/createBatchScheduler.js';\nimport { getHttpRpcClient, } from '../../utils/rpc/http.js';\nimport { createTransport, } from './createTransport.js';\n/**\n * @description Creates a HTTP transport that connects to a JSON-RPC API.\n */\nexport function http(\n/** URL of the JSON-RPC API. Defaults to the chain's public RPC URL. */\nurl, config = {}) {\n const { batch, fetchOptions, key = 'http', methods, name = 'HTTP JSON-RPC', onFetchRequest, onFetchResponse, retryDelay, raw, } = config;\n return ({ chain, retryCount: retryCount_, timeout: timeout_ }) => {\n const { batchSize = 1000, wait = 0 } = typeof batch === 'object' ? batch : {};\n const retryCount = config.retryCount ?? retryCount_;\n const timeout = timeout_ ?? config.timeout ?? 10_000;\n const url_ = url || chain?.rpcUrls.default.http[0];\n if (!url_)\n throw new UrlRequiredError();\n const rpcClient = getHttpRpcClient(url_, {\n fetchOptions,\n onRequest: onFetchRequest,\n onResponse: onFetchResponse,\n timeout,\n });\n return createTransport({\n key,\n methods,\n name,\n async request({ method, params }) {\n const body = { method, params };\n const { schedule } = createBatchScheduler({\n id: url_,\n wait,\n shouldSplitBatch(requests) {\n return requests.length > batchSize;\n },\n fn: (body) => rpcClient.request({\n body,\n }),\n sort: (a, b) => a.id - b.id,\n });\n const fn = async (body) => batch\n ? schedule(body)\n : [\n await rpcClient.request({\n body,\n }),\n ];\n const [{ error, result }] = await fn(body);\n if (raw)\n return { error, result };\n if (error)\n throw new RpcRequestError({\n body,\n error,\n url: url_,\n });\n return result;\n },\n retryCount,\n retryDelay,\n timeout,\n type: 'http',\n }, {\n fetchOptions,\n url: url_,\n });\n };\n}\n//# sourceMappingURL=http.js.map","import { createClient, custom, } from 'viem';\nimport { getAddress, parseAccount } from 'viem/utils';\nimport { ConnectorAccountNotFoundError, ConnectorChainMismatchError, ConnectorNotConnectedError, ConnectorUnavailableReconnectingError, } from '../errors/config.js';\n/** https://wagmi.sh/core/api/actions/getConnectorClient */\nexport async function getConnectorClient(config, parameters = {}) {\n // Get connection\n let connection;\n if (parameters.connector) {\n const { connector } = parameters;\n if (config.state.status === 'reconnecting' &&\n !connector.getAccounts &&\n !connector.getChainId)\n throw new ConnectorUnavailableReconnectingError({ connector });\n const [accounts, chainId] = await Promise.all([\n connector.getAccounts().catch((e) => {\n if (parameters.account === null)\n return [];\n throw e;\n }),\n connector.getChainId(),\n ]);\n connection = {\n accounts: accounts,\n chainId,\n connector,\n };\n }\n else\n connection = config.state.connections.get(config.state.current);\n if (!connection)\n throw new ConnectorNotConnectedError();\n const chainId = parameters.chainId ?? connection.chainId;\n // Check connector using same chainId as connection\n const connectorChainId = await connection.connector.getChainId();\n if (connectorChainId !== connection.chainId)\n throw new ConnectorChainMismatchError({\n connectionChainId: connection.chainId,\n connectorChainId,\n });\n const connector = connection.connector;\n if (connector.getClient)\n return connector.getClient({ chainId });\n // Default using `custom` transport\n const account = parseAccount(parameters.account ?? connection.accounts[0]);\n if (account)\n account.address = getAddress(account.address); // TODO: Checksum address as part of `parseAccount`?\n // If account was provided, check that it exists on the connector\n if (parameters.account &&\n !connection.accounts.some((x) => x.toLowerCase() === account.address.toLowerCase()))\n throw new ConnectorAccountNotFoundError({\n address: account.address,\n connector,\n });\n const chain = config.chains.find((chain) => chain.id === chainId);\n const provider = (await connection.connector.getProvider({ chainId }));\n return createClient({\n account,\n chain,\n name: 'Connector Client',\n transport: (opts) => custom(provider)({ ...opts, retryCount: 0 }),\n });\n}\n//# sourceMappingURL=getConnectorClient.js.map","/** https://wagmi.sh/core/api/actions/disconnect */\nexport async function disconnect(config, parameters = {}) {\n let connector;\n if (parameters.connector)\n connector = parameters.connector;\n else {\n const { connections, current } = config.state;\n const connection = connections.get(current);\n connector = connection?.connector;\n }\n const connections = config.state.connections;\n if (connector) {\n await connector.disconnect();\n connector.emitter.off('change', config._internal.events.change);\n connector.emitter.off('disconnect', config._internal.events.disconnect);\n connector.emitter.on('connect', config._internal.events.connect);\n connections.delete(connector.uid);\n }\n config.setState((x) => {\n // if no connections exist, move to disconnected state\n if (connections.size === 0)\n return {\n ...x,\n connections: new Map(),\n current: null,\n status: 'disconnected',\n };\n // switch over to another connection\n const nextConnection = connections.values().next().value;\n return {\n ...x,\n connections: new Map(connections),\n current: nextConnection.connector.uid,\n };\n });\n // Set recent connector if exists\n {\n const current = config.state.current;\n if (!current)\n return;\n const connector = config.state.connections.get(current)?.connector;\n if (!connector)\n return;\n await config.storage?.setItem('recentConnectorId', connector.id);\n }\n}\n//# sourceMappingURL=disconnect.js.map","/** https://wagmi.sh/core/api/actions/getAccount */\nexport function getAccount(config) {\n const uid = config.state.current;\n const connection = config.state.connections.get(uid);\n const addresses = connection?.accounts;\n const address = addresses?.[0];\n const chain = config.chains.find((chain) => chain.id === connection?.chainId);\n const status = config.state.status;\n switch (status) {\n case 'connected':\n return {\n address: address,\n addresses: addresses,\n chain,\n chainId: connection?.chainId,\n connector: connection?.connector,\n isConnected: true,\n isConnecting: false,\n isDisconnected: false,\n isReconnecting: false,\n status,\n };\n case 'reconnecting':\n return {\n address,\n addresses,\n chain,\n chainId: connection?.chainId,\n connector: connection?.connector,\n isConnected: !!address,\n isConnecting: false,\n isDisconnected: false,\n isReconnecting: true,\n status,\n };\n case 'connecting':\n return {\n address,\n addresses,\n chain,\n chainId: connection?.chainId,\n connector: connection?.connector,\n isConnected: false,\n isConnecting: true,\n isDisconnected: false,\n isReconnecting: false,\n status,\n };\n case 'disconnected':\n return {\n address: undefined,\n addresses: undefined,\n chain: undefined,\n chainId: undefined,\n connector: undefined,\n isConnected: false,\n isConnecting: false,\n isDisconnected: true,\n isReconnecting: false,\n status,\n };\n }\n}\n//# sourceMappingURL=getAccount.js.map","import { sendTransaction as viem_sendTransaction } from 'viem/actions';\nimport { getAction } from '../utils/getAction.js';\nimport { getConnectorClient, } from './getConnectorClient.js';\n/** https://wagmi.sh/core/api/actions/sendTransaction */\nexport async function sendTransaction(config, parameters) {\n const { account, chainId, connector, ...rest } = parameters;\n let client;\n if (typeof account === 'object' && account?.type === 'local')\n client = config.getClient({ chainId });\n else\n client = await getConnectorClient(config, {\n account: account ?? undefined,\n chainId,\n connector,\n });\n const action = getAction(client, viem_sendTransaction, 'sendTransaction');\n const hash = await action({\n ...rest,\n ...(account ? { account } : {}),\n chain: chainId ? { id: chainId } : null,\n gas: rest.gas ?? undefined,\n });\n return hash;\n}\n//# sourceMappingURL=sendTransaction.js.map","import { BaseError } from './base.js';\nexport class ProviderNotFoundError extends BaseError {\n constructor() {\n super('Provider not found.');\n Object.defineProperty(this, \"name\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 'ProviderNotFoundError'\n });\n }\n}\nexport class SwitchChainNotSupportedError extends BaseError {\n constructor({ connector }) {\n super(`\"${connector.name}\" does not support programmatic chain switching.`);\n Object.defineProperty(this, \"name\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: 'SwitchChainNotSupportedError'\n });\n }\n}\n//# sourceMappingURL=connector.js.map","import { ChainNotConfiguredError, } from '../errors/config.js';\nimport { SwitchChainNotSupportedError, } from '../errors/connector.js';\n/** https://wagmi.sh/core/api/actions/switchChain */\nexport async function switchChain(config, parameters) {\n const { addEthereumChainParameter, chainId } = parameters;\n const connection = config.state.connections.get(parameters.connector?.uid ?? config.state.current);\n if (connection) {\n const connector = connection.connector;\n if (!connector.switchChain)\n throw new SwitchChainNotSupportedError({ connector });\n const chain = await connector.switchChain({\n addEthereumChainParameter,\n chainId,\n });\n return chain;\n }\n const chain = config.chains.find((x) => x.id === chainId);\n if (!chain)\n throw new ChainNotConfiguredError();\n config.setState((x) => ({ ...x, chainId }));\n return chain;\n}\n//# sourceMappingURL=switchChain.js.map","export function createConnector(createConnectorFn) {\n return createConnectorFn;\n}\n//# sourceMappingURL=createConnector.js.map","import { getAddress, numberToHex, ResourceUnavailableRpcError, SwitchChainError, UserRejectedRequestError, withRetry, withTimeout, } from 'viem';\nimport { ChainNotConfiguredError } from '../errors/config.js';\nimport { ProviderNotFoundError } from '../errors/connector.js';\nimport { createConnector } from './createConnector.js';\ninjected.type = 'injected';\nexport function injected(parameters = {}) {\n const { shimDisconnect = true, unstable_shimAsyncInject } = parameters;\n function getTarget() {\n const target = parameters.target;\n if (typeof target === 'function') {\n const result = target();\n if (result)\n return result;\n }\n if (typeof target === 'object')\n return target;\n if (typeof target === 'string')\n return {\n ...(targetMap[target] ?? {\n id: target,\n name: `${target[0].toUpperCase()}${target.slice(1)}`,\n provider: `is${target[0].toUpperCase()}${target.slice(1)}`,\n }),\n };\n return {\n id: 'injected',\n name: 'Injected',\n provider(window) {\n return window?.ethereum;\n },\n };\n }\n let accountsChanged;\n let chainChanged;\n let connect;\n let disconnect;\n return createConnector((config) => ({\n get icon() {\n return getTarget().icon;\n },\n get id() {\n return getTarget().id;\n },\n get name() {\n return getTarget().name;\n },\n /** @deprecated */\n get supportsSimulation() {\n return true;\n },\n type: injected.type,\n async setup() {\n const provider = await this.getProvider();\n // Only start listening for events if `target` is set, otherwise `injected()` will also receive events\n if (provider?.on && parameters.target) {\n if (!connect) {\n connect = this.onConnect.bind(this);\n provider.on('connect', connect);\n }\n // We shouldn't need to listen for `'accountsChanged'` here since the `'connect'` event should suffice (and wallet shouldn't be connected yet).\n // Some wallets, like MetaMask, do not implement the `'connect'` event and overload `'accountsChanged'` instead.\n if (!accountsChanged) {\n accountsChanged = this.onAccountsChanged.bind(this);\n provider.on('accountsChanged', accountsChanged);\n }\n }\n },\n async connect({ chainId, isReconnecting } = {}) {\n const provider = await this.getProvider();\n if (!provider)\n throw new ProviderNotFoundError();\n let accounts = [];\n if (isReconnecting)\n accounts = await this.getAccounts().catch(() => []);\n else if (shimDisconnect) {\n // Attempt to show another prompt for selecting account if `shimDisconnect` flag is enabled\n try {\n const permissions = await provider.request({\n method: 'wallet_requestPermissions',\n params: [{ eth_accounts: {} }],\n });\n accounts = permissions[0]?.caveats?.[0]?.value?.map((x) => getAddress(x));\n // `'wallet_requestPermissions'` can return a different order of accounts than `'eth_accounts'`\n // switch to `'eth_accounts'` ordering if more than one account is connected\n // https://github.com/wevm/wagmi/issues/4140\n if (accounts.length > 0) {\n const sortedAccounts = await this.getAccounts();\n accounts = sortedAccounts;\n }\n }\n catch (err) {\n const error = err;\n // Not all injected providers support `wallet_requestPermissions` (e.g. MetaMask iOS).\n // Only bubble up error if user rejects request\n if (error.code === UserRejectedRequestError.code)\n throw new UserRejectedRequestError(error);\n // Or prompt is already open\n if (error.code === ResourceUnavailableRpcError.code)\n throw error;\n }\n }\n try {\n if (!accounts?.length && !isReconnecting) {\n const requestedAccounts = await provider.request({\n method: 'eth_requestAccounts',\n });\n accounts = requestedAccounts.map((x) => getAddress(x));\n }\n // Manage EIP-1193 event listeners\n // https://eips.ethereum.org/EIPS/eip-1193#events\n if (connect) {\n provider.removeListener('connect', connect);\n connect = undefined;\n }\n if (!accountsChanged) {\n accountsChanged = this.onAccountsChanged.bind(this);\n provider.on('accountsChanged', accountsChanged);\n }\n if (!chainChanged) {\n chainChanged = this.onChainChanged.bind(this);\n provider.on('chainChanged', chainChanged);\n }\n if (!disconnect) {\n disconnect = this.onDisconnect.bind(this);\n provider.on('disconnect', disconnect);\n }\n // Switch to chain if provided\n let currentChainId = await this.getChainId();\n if (chainId && currentChainId !== chainId) {\n const chain = await this.switchChain({ chainId }).catch((error) => {\n if (error.code === UserRejectedRequestError.code)\n throw error;\n return { id: currentChainId };\n });\n currentChainId = chain?.id ?? currentChainId;\n }\n // Remove disconnected shim if it exists\n if (shimDisconnect)\n await config.storage?.removeItem(`${this.id}.disconnected`);\n // Add connected shim if no target exists\n if (!parameters.target)\n await config.storage?.setItem('injected.connected', true);\n return { accounts, chainId: currentChainId };\n }\n catch (err) {\n const error = err;\n if (error.code === UserRejectedRequestError.code)\n throw new UserRejectedRequestError(error);\n if (error.code === ResourceUnavailableRpcError.code)\n throw new ResourceUnavailableRpcError(error);\n throw error;\n }\n },\n async disconnect() {\n const provider = await this.getProvider();\n if (!provider)\n throw new ProviderNotFoundError();\n // Manage EIP-1193 event listeners\n if (chainChanged) {\n provider.removeListener('chainChanged', chainChanged);\n chainChanged = undefined;\n }\n if (disconnect) {\n provider.removeListener('disconnect', disconnect);\n disconnect = undefined;\n }\n if (!connect) {\n connect = this.onConnect.bind(this);\n provider.on('connect', connect);\n }\n // Experimental support for MetaMask disconnect\n // https://github.com/MetaMask/metamask-improvement-proposals/blob/main/MIPs/mip-2.md\n try {\n // Adding timeout as not all wallets support this method and can hang\n // https://github.com/wevm/wagmi/issues/4064\n await withTimeout(() => \n // TODO: Remove explicit type for viem@3\n provider.request({\n // `'wallet_revokePermissions'` added in `viem@2.10.3`\n method: 'wallet_revokePermissions',\n params: [{ eth_accounts: {} }],\n }), { timeout: 100 });\n }\n catch { }\n // Add shim signalling connector is disconnected\n if (shimDisconnect) {\n await config.storage?.setItem(`${this.id}.disconnected`, true);\n }\n if (!parameters.target)\n await config.storage?.removeItem('injected.connected');\n },\n async getAccounts() {\n const provider = await this.getProvider();\n if (!provider)\n throw new ProviderNotFoundError();\n const accounts = await provider.request({ method: 'eth_accounts' });\n return accounts.map((x) => getAddress(x));\n },\n async getChainId() {\n const provider = await this.getProvider();\n if (!provider)\n throw new ProviderNotFoundError();\n const hexChainId = await provider.request({ method: 'eth_chainId' });\n return Number(hexChainId);\n },\n async getProvider() {\n if (typeof window === 'undefined')\n return undefined;\n let provider;\n const target = getTarget();\n if (typeof target.provider === 'function')\n provider = target.provider(window);\n else if (typeof target.provider === 'string')\n provider = findProvider(window, target.provider);\n else\n provider = target.provider;\n // Some wallets do not conform to EIP-1193 (e.g. Trust Wallet)\n // https://github.com/wevm/wagmi/issues/3526#issuecomment-1912683002\n if (provider && !provider.removeListener) {\n // Try using `off` handler if it exists, otherwise noop\n if ('off' in provider && typeof provider.off === 'function')\n provider.removeListener =\n provider.off;\n else\n provider.removeListener = () => { };\n }\n return provider;\n },\n async isAuthorized() {\n try {\n const isDisconnected = shimDisconnect &&\n // If shim exists in storage, connector is disconnected\n (await config.storage?.getItem(`${this.id}.disconnected`));\n if (isDisconnected)\n return false;\n // Don't allow injected connector to connect if no target is set and it hasn't already connected\n // (e.g. flag in storage is not set). This prevents a targetless injected connector from connecting\n // automatically whenever there is a targeted connector configured.\n if (!parameters.target) {\n const connected = await config.storage?.getItem('injected.connected');\n if (!connected)\n return false;\n }\n const provider = await this.getProvider();\n if (!provider) {\n if (unstable_shimAsyncInject !== undefined &&\n unstable_shimAsyncInject !== false) {\n // If no provider is found, check for async injection\n // https://github.com/wevm/references/issues/167\n // https://github.com/MetaMask/detect-provider\n const handleEthereum = async () => {\n if (typeof window !== 'undefined')\n window.removeEventListener('ethereum#initialized', handleEthereum);\n const provider = await this.getProvider();\n return !!provider;\n };\n const timeout = typeof unstable_shimAsyncInject === 'number'\n ? unstable_shimAsyncInject\n : 1_000;\n const res = await Promise.race([\n ...(typeof window !== 'undefined'\n ? [\n new Promise((resolve) => window.addEventListener('ethereum#initialized', () => resolve(handleEthereum()), { once: true })),\n ]\n : []),\n new Promise((resolve) => setTimeout(() => resolve(handleEthereum()), timeout)),\n ]);\n if (res)\n return true;\n }\n throw new ProviderNotFoundError();\n }\n // Use retry strategy as some injected wallets (e.g. MetaMask) fail to\n // immediately resolve JSON-RPC requests on page load.\n const accounts = await withRetry(() => this.getAccounts());\n return !!accounts.length;\n }\n catch {\n return false;\n }\n },\n async switchChain({ addEthereumChainParameter, chainId }) {\n const provider = await this.getProvider();\n if (!provider)\n throw new ProviderNotFoundError();\n const chain = config.chains.find((x) => x.id === chainId);\n if (!chain)\n throw new SwitchChainError(new ChainNotConfiguredError());\n const promise = new Promise((resolve) => {\n const listener = ((data) => {\n if ('chainId' in data && data.chainId === chainId) {\n config.emitter.off('change', listener);\n resolve();\n }\n });\n config.emitter.on('change', listener);\n });\n try {\n await Promise.all([\n provider\n .request({\n method: 'wallet_switchEthereumChain',\n params: [{ chainId: numberToHex(chainId) }],\n })\n // During `'wallet_switchEthereumChain'`, MetaMask makes a `'net_version'` RPC call to the target chain.\n // If this request fails, MetaMask does not emit the `'chainChanged'` event, but will still switch the chain.\n // To counter this behavior, we request and emit the current chain ID to confirm the chain switch either via\n // this callback or an externally emitted `'chainChanged'` event.\n // https://github.com/MetaMask/metamask-extension/issues/24247\n .then(async () => {\n const currentChainId = await this.getChainId();\n if (currentChainId === chainId)\n config.emitter.emit('change', { chainId });\n }),\n promise,\n ]);\n return chain;\n }\n catch (err) {\n const error = err;\n // Indicates chain is not added to provider\n if (error.code === 4902 ||\n // Unwrapping for MetaMask Mobile\n // https://github.com/MetaMask/metamask-mobile/issues/2944#issuecomment-976988719\n error\n ?.data?.originalError?.code === 4902) {\n try {\n const { default: blockExplorer, ...blockExplorers } = chain.blockExplorers ?? {};\n let blockExplorerUrls;\n if (addEthereumChainParameter?.blockExplorerUrls)\n blockExplorerUrls = addEthereumChainParameter.blockExplorerUrls;\n else if (blockExplorer)\n blockExplorerUrls = [\n blockExplorer.url,\n ...Object.values(blockExplorers).map((x) => x.url),\n ];\n let rpcUrls;\n if (addEthereumChainParameter?.rpcUrls?.length)\n rpcUrls = addEthereumChainParameter.rpcUrls;\n else\n rpcUrls = [chain.rpcUrls.default?.http[0] ?? ''];\n const addEthereumChain = {\n blockExplorerUrls,\n chainId: numberToHex(chainId),\n chainName: addEthereumChainParameter?.chainName ?? chain.name,\n iconUrls: addEthereumChainParameter?.iconUrls,\n nativeCurrency: addEthereumChainParameter?.nativeCurrency ??\n chain.nativeCurrency,\n rpcUrls,\n };\n await Promise.all([\n provider\n .request({\n method: 'wallet_addEthereumChain',\n params: [addEthereumChain],\n })\n .then(async () => {\n const currentChainId = await this.getChainId();\n if (currentChainId === chainId)\n config.emitter.emit('change', { chainId });\n else\n throw new UserRejectedRequestError(new Error('User rejected switch after adding network.'));\n }),\n promise,\n ]);\n return chain;\n }\n catch (error) {\n throw new UserRejectedRequestError(error);\n }\n }\n if (error.code === UserRejectedRequestError.code)\n throw new UserRejectedRequestError(error);\n throw new SwitchChainError(error);\n }\n },\n async onAccountsChanged(accounts) {\n // Disconnect if there are no accounts\n if (accounts.length === 0)\n this.onDisconnect();\n // Connect if emitter is listening for connect event (e.g. is disconnected and connects through wallet interface)\n else if (config.emitter.listenerCount('connect')) {\n const chainId = (await this.getChainId()).toString();\n this.onConnect({ chainId });\n // Remove disconnected shim if it exists\n if (shimDisconnect)\n await config.storage?.removeItem(`${this.id}.disconnected`);\n }\n // Regular change event\n else\n config.emitter.emit('change', {\n accounts: accounts.map((x) => getAddress(x)),\n });\n },\n onChainChanged(chain) {\n const chainId = Number(chain);\n config.emitter.emit('change', { chainId });\n },\n async onConnect(connectInfo) {\n const accounts = await this.getAccounts();\n if (accounts.length === 0)\n return;\n const chainId = Number(connectInfo.chainId);\n config.emitter.emit('connect', { accounts, chainId });\n // Manage EIP-1193 event listeners\n const provider = await this.getProvider();\n if (provider) {\n if (connect) {\n provider.removeListener('connect', connect);\n connect = undefined;\n }\n if (!accountsChanged) {\n accountsChanged = this.onAccountsChanged.bind(this);\n provider.on('accountsChanged', accountsChanged);\n }\n if (!chainChanged) {\n chainChanged = this.onChainChanged.bind(this);\n provider.on('chainChanged', chainChanged);\n }\n if (!disconnect) {\n disconnect = this.onDisconnect.bind(this);\n provider.on('disconnect', disconnect);\n }\n }\n },\n async onDisconnect(error) {\n const provider = await this.getProvider();\n // If MetaMask emits a `code: 1013` error, wait for reconnection before disconnecting\n // https://github.com/MetaMask/providers/pull/120\n if (error && error.code === 1013) {\n if (provider && !!(await this.getAccounts()).length)\n return;\n }\n // No need to remove `${this.id}.disconnected` from storage because `onDisconnect` is typically\n // only called when the wallet is disconnected through the wallet's interface, meaning the wallet\n // actually disconnected and we don't need to simulate it.\n config.emitter.emit('disconnect');\n // Manage EIP-1193 event listeners\n if (provider) {\n if (chainChanged) {\n provider.removeListener('chainChanged', chainChanged);\n chainChanged = undefined;\n }\n if (disconnect) {\n provider.removeListener('disconnect', disconnect);\n disconnect = undefined;\n }\n if (!connect) {\n connect = this.onConnect.bind(this);\n provider.on('connect', connect);\n }\n }\n },\n }));\n}\nconst targetMap = {\n coinbaseWallet: {\n id: 'coinbaseWallet',\n name: 'Coinbase Wallet',\n provider(window) {\n if (window?.coinbaseWalletExtension)\n return window.coinbaseWalletExtension;\n return findProvider(window, 'isCoinbaseWallet');\n },\n },\n metaMask: {\n id: 'metaMask',\n name: 'MetaMask',\n provider(window) {\n return findProvider(window, (provider) => {\n if (!provider.isMetaMask)\n return false;\n // Brave tries to make itself look like MetaMask\n // Could also try RPC `web3_clientVersion` if following is unreliable\n if (provider.isBraveWallet && !provider._events && !provider._state)\n return false;\n // Other wallets that try to look like MetaMask\n const flags = [\n 'isApexWallet',\n 'isAvalanche',\n 'isBitKeep',\n 'isBlockWallet',\n 'isKuCoinWallet',\n 'isMathWallet',\n 'isOkxWallet',\n 'isOKExWallet',\n 'isOneInchIOSWallet',\n 'isOneInchAndroidWallet',\n 'isOpera',\n 'isPhantom',\n 'isPortal',\n 'isRabby',\n 'isTokenPocket',\n 'isTokenary',\n 'isUniswapWallet',\n 'isZerion',\n ];\n for (const flag of flags)\n if (provider[flag])\n return false;\n return true;\n });\n },\n },\n phantom: {\n id: 'phantom',\n name: 'Phantom',\n provider(window) {\n if (window?.phantom?.ethereum)\n return window.phantom?.ethereum;\n return findProvider(window, 'isPhantom');\n },\n },\n};\nfunction findProvider(window, select) {\n function isProvider(provider) {\n if (typeof select === 'function')\n return select(provider);\n if (typeof select === 'string')\n return provider[select];\n return true;\n }\n const ethereum = window.ethereum;\n if (ethereum?.providers)\n return ethereum.providers.find((provider) => isProvider(provider));\n if (ethereum && isProvider(ethereum))\n return ethereum;\n return undefined;\n}\n//# sourceMappingURL=injected.js.map","/**\n * Announces an EIP-1193 Provider.\n */\nexport function announceProvider(detail) {\n const event = new CustomEvent('eip6963:announceProvider', { detail: Object.freeze(detail) });\n window.dispatchEvent(event);\n const handler = () => window.dispatchEvent(event);\n window.addEventListener('eip6963:requestProvider', handler);\n return () => window.removeEventListener('eip6963:requestProvider', handler);\n}\n/**\n * Watches for EIP-1193 Providers to be announced.\n */\nexport function requestProviders(listener) {\n if (typeof window === 'undefined')\n return;\n const handler = (event) => listener(event.detail);\n window.addEventListener('eip6963:announceProvider', handler);\n window.dispatchEvent(new CustomEvent('eip6963:requestProvider'));\n return () => window.removeEventListener('eip6963:announceProvider', handler);\n}\n//# sourceMappingURL=utils.js.map","import { requestProviders } from './utils.js';\nexport function createStore() {\n const listeners = new Set();\n let providerDetails = [];\n const request = () => requestProviders((providerDetail) => {\n if (providerDetails.some(({ info }) => info.uuid === providerDetail.info.uuid))\n return;\n providerDetails = [...providerDetails, providerDetail];\n listeners.forEach((listener) => listener(providerDetails, { added: [providerDetail] }));\n });\n let unwatch = request();\n return {\n _listeners() {\n return listeners;\n },\n clear() {\n listeners.forEach((listener) => listener([], { removed: [...providerDetails] }));\n providerDetails = [];\n },\n destroy() {\n this.clear();\n listeners.clear();\n unwatch?.();\n },\n findProvider({ rdns }) {\n return providerDetails.find((providerDetail) => providerDetail.info.rdns === rdns);\n },\n getProviders() {\n return providerDetails;\n },\n reset() {\n this.clear();\n unwatch?.();\n unwatch = request();\n },\n subscribe(listener, { emitImmediately } = {}) {\n listeners.add(listener);\n if (emitImmediately)\n listener(providerDetails, { added: providerDetails });\n return () => listeners.delete(listener);\n },\n };\n}\n//# sourceMappingURL=store.js.map","const reduxImpl = (reducer, initial) => (set, _get, api) => {\n api.dispatch = (action) => {\n set((state) => reducer(state, action), false, action);\n return action;\n };\n api.dispatchFromDevtools = true;\n return { dispatch: (...a) => api.dispatch(...a), ...initial };\n};\nconst redux = reduxImpl;\n\nconst trackedConnections = /* @__PURE__ */ new Map();\nconst getTrackedConnectionState = (name) => {\n const api = trackedConnections.get(name);\n if (!api) return {};\n return Object.fromEntries(\n Object.entries(api.stores).map(([key, api2]) => [key, api2.getState()])\n );\n};\nconst extractConnectionInformation = (store, extensionConnector, options) => {\n if (store === void 0) {\n return {\n type: \"untracked\",\n connection: extensionConnector.connect(options)\n };\n }\n const existingConnection = trackedConnections.get(options.name);\n if (existingConnection) {\n return { type: \"tracked\", store, ...existingConnection };\n }\n const newConnection = {\n connection: extensionConnector.connect(options),\n stores: {}\n };\n trackedConnections.set(options.name, newConnection);\n return { type: \"tracked\", store, ...newConnection };\n};\nconst devtoolsImpl = (fn, devtoolsOptions = {}) => (set, get, api) => {\n const { enabled, anonymousActionType, store, ...options } = devtoolsOptions;\n let extensionConnector;\n try {\n extensionConnector = (enabled != null ? enabled : (import.meta.env ? import.meta.env.MODE : void 0) !== \"production\") && window.__REDUX_DEVTOOLS_EXTENSION__;\n } catch (e) {\n }\n if (!extensionConnector) {\n return fn(set, get, api);\n }\n const { connection, ...connectionInformation } = extractConnectionInformation(store, extensionConnector, options);\n let isRecording = true;\n api.setState = (state, replace, nameOrAction) => {\n const r = set(state, replace);\n if (!isRecording) return r;\n const action = nameOrAction === void 0 ? { type: anonymousActionType || \"anonymous\" } : typeof nameOrAction === \"string\" ? { type: nameOrAction } : nameOrAction;\n if (store === void 0) {\n connection == null ? void 0 : connection.send(action, get());\n return r;\n }\n connection == null ? void 0 : connection.send(\n {\n ...action,\n type: `${store}/${action.type}`\n },\n {\n ...getTrackedConnectionState(options.name),\n [store]: api.getState()\n }\n );\n return r;\n };\n const setStateFromDevtools = (...a) => {\n const originalIsRecording = isRecording;\n isRecording = false;\n set(...a);\n isRecording = originalIsRecording;\n };\n const initialState = fn(api.setState, get, api);\n if (connectionInformation.type === \"untracked\") {\n connection == null ? void 0 : connection.init(initialState);\n } else {\n connectionInformation.stores[connectionInformation.store] = api;\n connection == null ? void 0 : connection.init(\n Object.fromEntries(\n Object.entries(connectionInformation.stores).map(([key, store2]) => [\n key,\n key === connectionInformation.store ? initialState : store2.getState()\n ])\n )\n );\n }\n if (api.dispatchFromDevtools && typeof api.dispatch === \"function\") {\n let didWarnAboutReservedActionType = false;\n const originalDispatch = api.dispatch;\n api.dispatch = (...a) => {\n if ((import.meta.env ? import.meta.env.MODE : void 0) !== \"production\" && a[0].type === \"__setState\" && !didWarnAboutReservedActionType) {\n console.warn(\n '[zustand devtools middleware] \"__setState\" action type is reserved to set state from the devtools. Avoid using it.'\n );\n didWarnAboutReservedActionType = true;\n }\n originalDispatch(...a);\n };\n }\n connection.subscribe((message) => {\n var _a;\n switch (message.type) {\n case \"ACTION\":\n if (typeof message.payload !== \"string\") {\n console.error(\n \"[zustand devtools middleware] Unsupported action format\"\n );\n return;\n }\n return parseJsonThen(\n message.payload,\n (action) => {\n if (action.type === \"__setState\") {\n if (store === void 0) {\n setStateFromDevtools(action.state);\n return;\n }\n if (Object.keys(action.state).length !== 1) {\n console.error(\n `\n [zustand devtools middleware] Unsupported __setState action format.\n When using 'store' option in devtools(), the 'state' should have only one key, which is a value of 'store' that was passed in devtools(),\n and value of this only key should be a state object. Example: { \"type\": \"__setState\", \"state\": { \"abc123Store\": { \"foo\": \"bar\" } } }\n `\n );\n }\n const stateFromDevtools = action.state[store];\n if (stateFromDevtools === void 0 || stateFromDevtools === null) {\n return;\n }\n if (JSON.stringify(api.getState()) !== JSON.stringify(stateFromDevtools)) {\n setStateFromDevtools(stateFromDevtools);\n }\n return;\n }\n if (!api.dispatchFromDevtools) return;\n if (typeof api.dispatch !== \"function\") return;\n api.dispatch(action);\n }\n );\n case \"DISPATCH\":\n switch (message.payload.type) {\n case \"RESET\":\n setStateFromDevtools(initialState);\n if (store === void 0) {\n return connection == null ? void 0 : connection.init(api.getState());\n }\n return connection == null ? void 0 : connection.init(getTrackedConnectionState(options.name));\n case \"COMMIT\":\n if (store === void 0) {\n connection == null ? void 0 : connection.init(api.getState());\n return;\n }\n return connection == null ? void 0 : connection.init(getTrackedConnectionState(options.name));\n case \"ROLLBACK\":\n return parseJsonThen(message.state, (state) => {\n if (store === void 0) {\n setStateFromDevtools(state);\n connection == null ? void 0 : connection.init(api.getState());\n return;\n }\n setStateFromDevtools(state[store]);\n connection == null ? void 0 : connection.init(getTrackedConnectionState(options.name));\n });\n case \"JUMP_TO_STATE\":\n case \"JUMP_TO_ACTION\":\n return parseJsonThen(message.state, (state) => {\n if (store === void 0) {\n setStateFromDevtools(state);\n return;\n }\n if (JSON.stringify(api.getState()) !== JSON.stringify(state[store])) {\n setStateFromDevtools(state[store]);\n }\n });\n case \"IMPORT_STATE\": {\n const { nextLiftedState } = message.payload;\n const lastComputedState = (_a = nextLiftedState.computedStates.slice(-1)[0]) == null ? void 0 : _a.state;\n if (!lastComputedState) return;\n if (store === void 0) {\n setStateFromDevtools(lastComputedState);\n } else {\n setStateFromDevtools(lastComputedState[store]);\n }\n connection == null ? void 0 : connection.send(\n null,\n // FIXME no-any\n nextLiftedState\n );\n return;\n }\n case \"PAUSE_RECORDING\":\n return isRecording = !isRecording;\n }\n return;\n }\n });\n return initialState;\n};\nconst devtools = devtoolsImpl;\nconst parseJsonThen = (stringified, f) => {\n let parsed;\n try {\n parsed = JSON.parse(stringified);\n } catch (e) {\n console.error(\n \"[zustand devtools middleware] Could not parse the received json\",\n e\n );\n }\n if (parsed !== void 0) f(parsed);\n};\n\nconst subscribeWithSelectorImpl = (fn) => (set, get, api) => {\n const origSubscribe = api.subscribe;\n api.subscribe = (selector, optListener, options) => {\n let listener = selector;\n if (optListener) {\n const equalityFn = (options == null ? void 0 : options.equalityFn) || Object.is;\n let currentSlice = selector(api.getState());\n listener = (state) => {\n const nextSlice = selector(state);\n if (!equalityFn(currentSlice, nextSlice)) {\n const previousSlice = currentSlice;\n optListener(currentSlice = nextSlice, previousSlice);\n }\n };\n if (options == null ? void 0 : options.fireImmediately) {\n optListener(currentSlice, currentSlice);\n }\n }\n return origSubscribe(listener);\n };\n const initialState = fn(set, get, api);\n return initialState;\n};\nconst subscribeWithSelector = subscribeWithSelectorImpl;\n\nconst combine = (initialState, create) => (...a) => Object.assign({}, initialState, create(...a));\n\nfunction createJSONStorage(getStorage, options) {\n let storage;\n try {\n storage = getStorage();\n } catch (e) {\n return;\n }\n const persistStorage = {\n getItem: (name) => {\n var _a;\n const parse = (str2) => {\n if (str2 === null) {\n return null;\n }\n return JSON.parse(str2, options == null ? void 0 : options.reviver);\n };\n const str = (_a = storage.getItem(name)) != null ? _a : null;\n if (str instanceof Promise) {\n return str.then(parse);\n }\n return parse(str);\n },\n setItem: (name, newValue) => storage.setItem(\n name,\n JSON.stringify(newValue, options == null ? void 0 : options.replacer)\n ),\n removeItem: (name) => storage.removeItem(name)\n };\n return persistStorage;\n}\nconst toThenable = (fn) => (input) => {\n try {\n const result = fn(input);\n if (result instanceof Promise) {\n return result;\n }\n return {\n then(onFulfilled) {\n return toThenable(onFulfilled)(result);\n },\n catch(_onRejected) {\n return this;\n }\n };\n } catch (e) {\n return {\n then(_onFulfilled) {\n return this;\n },\n catch(onRejected) {\n return toThenable(onRejected)(e);\n }\n };\n }\n};\nconst persistImpl = (config, baseOptions) => (set, get, api) => {\n let options = {\n storage: createJSONStorage(() => localStorage),\n partialize: (state) => state,\n version: 0,\n merge: (persistedState, currentState) => ({\n ...currentState,\n ...persistedState\n }),\n ...baseOptions\n };\n let hasHydrated = false;\n const hydrationListeners = /* @__PURE__ */ new Set();\n const finishHydrationListeners = /* @__PURE__ */ new Set();\n let storage = options.storage;\n if (!storage) {\n return config(\n (...args) => {\n console.warn(\n `[zustand persist middleware] Unable to update item '${options.name}', the given storage is currently unavailable.`\n );\n set(...args);\n },\n get,\n api\n );\n }\n const setItem = () => {\n const state = options.partialize({ ...get() });\n return storage.setItem(options.name, {\n state,\n version: options.version\n });\n };\n const savedSetState = api.setState;\n api.setState = (state, replace) => {\n savedSetState(state, replace);\n void setItem();\n };\n const configResult = config(\n (...args) => {\n set(...args);\n void setItem();\n },\n get,\n api\n );\n api.getInitialState = () => configResult;\n let stateFromStorage;\n const hydrate = () => {\n var _a, _b;\n if (!storage) return;\n hasHydrated = false;\n hydrationListeners.forEach((cb) => {\n var _a2;\n return cb((_a2 = get()) != null ? _a2 : configResult);\n });\n const postRehydrationCallback = ((_b = options.onRehydrateStorage) == null ? void 0 : _b.call(options, (_a = get()) != null ? _a : configResult)) || void 0;\n return toThenable(storage.getItem.bind(storage))(options.name).then((deserializedStorageValue) => {\n if (deserializedStorageValue) {\n if (typeof deserializedStorageValue.version === \"number\" && deserializedStorageValue.version !== options.version) {\n if (options.migrate) {\n return [\n true,\n options.migrate(\n deserializedStorageValue.state,\n deserializedStorageValue.version\n )\n ];\n }\n console.error(\n `State loaded from storage couldn't be migrated since no migrate function was provided`\n );\n } else {\n return [false, deserializedStorageValue.state];\n }\n }\n return [false, void 0];\n }).then((migrationResult) => {\n var _a2;\n const [migrated, migratedState] = migrationResult;\n stateFromStorage = options.merge(\n migratedState,\n (_a2 = get()) != null ? _a2 : configResult\n );\n set(stateFromStorage, true);\n if (migrated) {\n return setItem();\n }\n }).then(() => {\n postRehydrationCallback == null ? void 0 : postRehydrationCallback(stateFromStorage, void 0);\n stateFromStorage = get();\n hasHydrated = true;\n finishHydrationListeners.forEach((cb) => cb(stateFromStorage));\n }).catch((e) => {\n postRehydrationCallback == null ? void 0 : postRehydrationCallback(void 0, e);\n });\n };\n api.persist = {\n setOptions: (newOptions) => {\n options = {\n ...options,\n ...newOptions\n };\n if (newOptions.storage) {\n storage = newOptions.storage;\n }\n },\n clearStorage: () => {\n storage == null ? void 0 : storage.removeItem(options.name);\n },\n getOptions: () => options,\n rehydrate: () => hydrate(),\n hasHydrated: () => hasHydrated,\n onHydrate: (cb) => {\n hydrationListeners.add(cb);\n return () => {\n hydrationListeners.delete(cb);\n };\n },\n onFinishHydration: (cb) => {\n finishHydrationListeners.add(cb);\n return () => {\n finishHydrationListeners.delete(cb);\n };\n }\n };\n if (!options.skipHydration) {\n hydrate();\n }\n return stateFromStorage || configResult;\n};\nconst persist = persistImpl;\n\nexport { combine, createJSONStorage, devtools, persist, redux, subscribeWithSelector };\n","const createStoreImpl = (createState) => {\n let state;\n const listeners = /* @__PURE__ */ new Set();\n const setState = (partial, replace) => {\n const nextState = typeof partial === \"function\" ? partial(state) : partial;\n if (!Object.is(nextState, state)) {\n const previousState = state;\n state = (replace != null ? replace : typeof nextState !== \"object\" || nextState === null) ? nextState : Object.assign({}, state, nextState);\n listeners.forEach((listener) => listener(state, previousState));\n }\n };\n const getState = () => state;\n const getInitialState = () => initialState;\n const subscribe = (listener) => {\n listeners.add(listener);\n return () => listeners.delete(listener);\n };\n const api = { setState, getState, getInitialState, subscribe };\n const initialState = state = createState(setState, getState, api);\n return api;\n};\nconst createStore = (createState) => createState ? createStoreImpl(createState) : createStoreImpl;\n\nexport { createStore };\n","'use strict';\n\nvar has = Object.prototype.hasOwnProperty\n , prefix = '~';\n\n/**\n * Constructor to create a storage for our `EE` objects.\n * An `Events` instance is a plain object whose properties are event names.\n *\n * @constructor\n * @private\n */\nfunction Events() {}\n\n//\n// We try to not inherit from `Object.prototype`. In some engines creating an\n// instance in this way is faster than calling `Object.create(null)` directly.\n// If `Object.create(null)` is not supported we prefix the event names with a\n// character to make sure that the built-in object properties are not\n// overridden or used as an attack vector.\n//\nif (Object.create) {\n Events.prototype = Object.create(null);\n\n //\n // This hack is needed because the `__proto__` property is still inherited in\n // some old browsers like Android 4, iPhone 5.1, Opera 11 and Safari 5.\n //\n if (!new Events().__proto__) prefix = false;\n}\n\n/**\n * Representation of a single event listener.\n *\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} [once=false] Specify if the listener is a one-time listener.\n * @constructor\n * @private\n */\nfunction EE(fn, context, once) {\n this.fn = fn;\n this.context = context;\n this.once = once || false;\n}\n\n/**\n * Add a listener for a given event.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} context The context to invoke the listener with.\n * @param {Boolean} once Specify if the listener is a one-time listener.\n * @returns {EventEmitter}\n * @private\n */\nfunction addListener(emitter, event, fn, context, once) {\n if (typeof fn !== 'function') {\n throw new TypeError('The listener must be a function');\n }\n\n var listener = new EE(fn, context || emitter, once)\n , evt = prefix ? prefix + event : event;\n\n if (!emitter._events[evt]) emitter._events[evt] = listener, emitter._eventsCount++;\n else if (!emitter._events[evt].fn) emitter._events[evt].push(listener);\n else emitter._events[evt] = [emitter._events[evt], listener];\n\n return emitter;\n}\n\n/**\n * Clear event by name.\n *\n * @param {EventEmitter} emitter Reference to the `EventEmitter` instance.\n * @param {(String|Symbol)} evt The Event name.\n * @private\n */\nfunction clearEvent(emitter, evt) {\n if (--emitter._eventsCount === 0) emitter._events = new Events();\n else delete emitter._events[evt];\n}\n\n/**\n * Minimal `EventEmitter` interface that is molded against the Node.js\n * `EventEmitter` interface.\n *\n * @constructor\n * @public\n */\nfunction EventEmitter() {\n this._events = new Events();\n this._eventsCount = 0;\n}\n\n/**\n * Return an array listing the events for which the emitter has registered\n * listeners.\n *\n * @returns {Array}\n * @public\n */\nEventEmitter.prototype.eventNames = function eventNames() {\n var names = []\n , events\n , name;\n\n if (this._eventsCount === 0) return names;\n\n for (name in (events = this._events)) {\n if (has.call(events, name)) names.push(prefix ? name.slice(1) : name);\n }\n\n if (Object.getOwnPropertySymbols) {\n return names.concat(Object.getOwnPropertySymbols(events));\n }\n\n return names;\n};\n\n/**\n * Return the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Array} The registered listeners.\n * @public\n */\nEventEmitter.prototype.listeners = function listeners(event) {\n var evt = prefix ? prefix + event : event\n , handlers = this._events[evt];\n\n if (!handlers) return [];\n if (handlers.fn) return [handlers.fn];\n\n for (var i = 0, l = handlers.length, ee = new Array(l); i < l; i++) {\n ee[i] = handlers[i].fn;\n }\n\n return ee;\n};\n\n/**\n * Return the number of listeners listening to a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Number} The number of listeners.\n * @public\n */\nEventEmitter.prototype.listenerCount = function listenerCount(event) {\n var evt = prefix ? prefix + event : event\n , listeners = this._events[evt];\n\n if (!listeners) return 0;\n if (listeners.fn) return 1;\n return listeners.length;\n};\n\n/**\n * Calls each of the listeners registered for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @returns {Boolean} `true` if the event had listeners, else `false`.\n * @public\n */\nEventEmitter.prototype.emit = function emit(event, a1, a2, a3, a4, a5) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return false;\n\n var listeners = this._events[evt]\n , len = arguments.length\n , args\n , i;\n\n if (listeners.fn) {\n if (listeners.once) this.removeListener(event, listeners.fn, undefined, true);\n\n switch (len) {\n case 1: return listeners.fn.call(listeners.context), true;\n case 2: return listeners.fn.call(listeners.context, a1), true;\n case 3: return listeners.fn.call(listeners.context, a1, a2), true;\n case 4: return listeners.fn.call(listeners.context, a1, a2, a3), true;\n case 5: return listeners.fn.call(listeners.context, a1, a2, a3, a4), true;\n case 6: return listeners.fn.call(listeners.context, a1, a2, a3, a4, a5), true;\n }\n\n for (i = 1, args = new Array(len -1); i < len; i++) {\n args[i - 1] = arguments[i];\n }\n\n listeners.fn.apply(listeners.context, args);\n } else {\n var length = listeners.length\n , j;\n\n for (i = 0; i < length; i++) {\n if (listeners[i].once) this.removeListener(event, listeners[i].fn, undefined, true);\n\n switch (len) {\n case 1: listeners[i].fn.call(listeners[i].context); break;\n case 2: listeners[i].fn.call(listeners[i].context, a1); break;\n case 3: listeners[i].fn.call(listeners[i].context, a1, a2); break;\n case 4: listeners[i].fn.call(listeners[i].context, a1, a2, a3); break;\n default:\n if (!args) for (j = 1, args = new Array(len -1); j < len; j++) {\n args[j - 1] = arguments[j];\n }\n\n listeners[i].fn.apply(listeners[i].context, args);\n }\n }\n }\n\n return true;\n};\n\n/**\n * Add a listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.on = function on(event, fn, context) {\n return addListener(this, event, fn, context, false);\n};\n\n/**\n * Add a one-time listener for a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn The listener function.\n * @param {*} [context=this] The context to invoke the listener with.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.once = function once(event, fn, context) {\n return addListener(this, event, fn, context, true);\n};\n\n/**\n * Remove the listeners of a given event.\n *\n * @param {(String|Symbol)} event The event name.\n * @param {Function} fn Only remove the listeners that match this function.\n * @param {*} context Only remove the listeners that have this context.\n * @param {Boolean} once Only remove one-time listeners.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeListener = function removeListener(event, fn, context, once) {\n var evt = prefix ? prefix + event : event;\n\n if (!this._events[evt]) return this;\n if (!fn) {\n clearEvent(this, evt);\n return this;\n }\n\n var listeners = this._events[evt];\n\n if (listeners.fn) {\n if (\n listeners.fn === fn &&\n (!once || listeners.once) &&\n (!context || listeners.context === context)\n ) {\n clearEvent(this, evt);\n }\n } else {\n for (var i = 0, events = [], length = listeners.length; i < length; i++) {\n if (\n listeners[i].fn !== fn ||\n (once && !listeners[i].once) ||\n (context && listeners[i].context !== context)\n ) {\n events.push(listeners[i]);\n }\n }\n\n //\n // Reset the array, or remove it completely if we have no more listeners.\n //\n if (events.length) this._events[evt] = events.length === 1 ? events[0] : events;\n else clearEvent(this, evt);\n }\n\n return this;\n};\n\n/**\n * Remove all listeners, or those of the specified event.\n *\n * @param {(String|Symbol)} [event] The event name.\n * @returns {EventEmitter} `this`.\n * @public\n */\nEventEmitter.prototype.removeAllListeners = function removeAllListeners(event) {\n var evt;\n\n if (event) {\n evt = prefix ? prefix + event : event;\n if (this._events[evt]) clearEvent(this, evt);\n } else {\n this._events = new Events();\n this._eventsCount = 0;\n }\n\n return this;\n};\n\n//\n// Alias methods names because people roll like that.\n//\nEventEmitter.prototype.off = EventEmitter.prototype.removeListener;\nEventEmitter.prototype.addListener = EventEmitter.prototype.on;\n\n//\n// Expose the prefix.\n//\nEventEmitter.prefixed = prefix;\n\n//\n// Allow `EventEmitter` to be imported as module namespace.\n//\nEventEmitter.EventEmitter = EventEmitter;\n\n//\n// Expose the module.\n//\nif ('undefined' !== typeof module) {\n module.exports = EventEmitter;\n}\n","import { EventEmitter } from 'eventemitter3';\nexport class Emitter {\n constructor(uid) {\n Object.defineProperty(this, \"uid\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: uid\n });\n Object.defineProperty(this, \"_emitter\", {\n enumerable: true,\n configurable: true,\n writable: true,\n value: new EventEmitter()\n });\n }\n on(eventName, fn) {\n this._emitter.on(eventName, fn);\n }\n once(eventName, fn) {\n this._emitter.once(eventName, fn);\n }\n off(eventName, fn) {\n this._emitter.off(eventName, fn);\n }\n emit(eventName, ...params) {\n const data = params[0];\n this._emitter.emit(eventName, { uid: this.uid, ...data });\n }\n listenerCount(eventName) {\n return this._emitter.listenerCount(eventName);\n }\n}\nexport function createEmitter(uid) {\n return new Emitter(uid);\n}\n//# sourceMappingURL=createEmitter.js.map","export function deserialize(value, reviver) {\n return JSON.parse(value, (key, value_) => {\n let value = value_;\n if (value?.__type === 'bigint')\n value = BigInt(value.value);\n if (value?.__type === 'Map')\n value = new Map(value.value);\n return reviver?.(key, value) ?? value;\n });\n}\n//# sourceMappingURL=deserialize.js.map","/**\n * Get the reference key for the circular value\n *\n * @param keys the keys to build the reference key from\n * @param cutoff the maximum number of keys to include\n * @returns the reference key\n */\nfunction getReferenceKey(keys, cutoff) {\n return keys.slice(0, cutoff).join('.') || '.';\n}\n/**\n * Faster `Array.prototype.indexOf` implementation build for slicing / splicing\n *\n * @param array the array to match the value in\n * @param value the value to match\n * @returns the matching index, or -1\n */\nfunction getCutoff(array, value) {\n const { length } = array;\n for (let index = 0; index < length; ++index) {\n if (array[index] === value) {\n return index + 1;\n }\n }\n return 0;\n}\n/**\n * Create a replacer method that handles circular values\n *\n * @param [replacer] a custom replacer to use for non-circular values\n * @param [circularReplacer] a custom replacer to use for circular methods\n * @returns the value to stringify\n */\nfunction createReplacer(replacer, circularReplacer) {\n const hasReplacer = typeof replacer === 'function';\n const hasCircularReplacer = typeof circularReplacer === 'function';\n const cache = [];\n const keys = [];\n return function replace(key, value) {\n if (typeof value === 'object') {\n if (cache.length) {\n const thisCutoff = getCutoff(cache, this);\n if (thisCutoff === 0) {\n cache[cache.length] = this;\n }\n else {\n cache.splice(thisCutoff);\n keys.splice(thisCutoff);\n }\n keys[keys.length] = key;\n const valueCutoff = getCutoff(cache, value);\n if (valueCutoff !== 0) {\n return hasCircularReplacer\n ? circularReplacer.call(this, key, value, getReferenceKey(keys, valueCutoff))\n : `[ref=${getReferenceKey(keys, valueCutoff)}]`;\n }\n }\n else {\n cache[0] = value;\n keys[0] = key;\n }\n }\n return hasReplacer ? replacer.call(this, key, value) : value;\n };\n}\n/**\n * Stringifier that handles circular values\n *\n * Forked from https://github.com/planttheidea/fast-stringify\n *\n * @param value to stringify\n * @param [replacer] a custom replacer function for handling standard values\n * @param [indent] the number of spaces to indent the output by\n * @param [circularReplacer] a custom replacer function for handling circular values\n * @returns the stringified output\n */\nexport function serialize(value, replacer, indent, circularReplacer) {\n return JSON.stringify(value, createReplacer((key, value_) => {\n let value = value_;\n if (typeof value === 'bigint')\n value = { __type: 'bigint', value: value_.toString() };\n if (value instanceof Map)\n value = { __type: 'Map', value: Array.from(value_.entries()) };\n return replacer?.(key, value) ?? value;\n }, circularReplacer), indent ?? undefined);\n}\n//# sourceMappingURL=serialize.js.map","import { deserialize as deserialize_ } from './utils/deserialize.js';\nimport { serialize as serialize_ } from './utils/serialize.js';\nexport function createStorage(parameters) {\n const { deserialize = deserialize_, key: prefix = 'wagmi', serialize = serialize_, storage = noopStorage, } = parameters;\n function unwrap(value) {\n if (value instanceof Promise)\n return value.then((x) => x).catch(() => null);\n return value;\n }\n return {\n ...storage,\n key: prefix,\n async getItem(key, defaultValue) {\n const value = storage.getItem(`${prefix}.${key}`);\n const unwrapped = await unwrap(value);\n if (unwrapped)\n return deserialize(unwrapped) ?? null;\n return (defaultValue ?? null);\n },\n async setItem(key, value) {\n const storageKey = `${prefix}.${key}`;\n if (value === null)\n await unwrap(storage.removeItem(storageKey));\n else\n await unwrap(storage.setItem(storageKey, serialize(value)));\n },\n async removeItem(key) {\n await unwrap(storage.removeItem(`${prefix}.${key}`));\n },\n };\n}\nexport const noopStorage = {\n getItem: () => null,\n setItem: () => { },\n removeItem: () => { },\n};\nexport function getDefaultStorage() {\n const storage = (() => {\n if (typeof window !== 'undefined' && window.localStorage)\n return window.localStorage;\n return noopStorage;\n })();\n return {\n getItem(key) {\n return storage.getItem(key);\n },\n removeItem(key) {\n storage.removeItem(key);\n },\n setItem(key, value) {\n try {\n storage.setItem(key, value);\n // silence errors by default (QuotaExceededError, SecurityError, etc.)\n }\n catch { }\n },\n };\n}\n//# sourceMappingURL=createStorage.js.map","const size = 256;\nlet index = size;\nlet buffer;\nexport function uid(length = 11) {\n if (!buffer || index + length > size * 2) {\n buffer = '';\n index = 0;\n for (let i = 0; i < size; i++) {\n buffer += ((256 + Math.random() * 256) | 0).toString(16).substring(1);\n }\n }\n return buffer.substring(index, index++ + length);\n}\n//# sourceMappingURL=uid.js.map","import { createStore as createMipd, } from 'mipd';\nimport { createClient, } from 'viem';\nimport { persist, subscribeWithSelector } from 'zustand/middleware';\nimport { createStore } from 'zustand/vanilla';\nimport { injected } from './connectors/injected.js';\nimport { createEmitter } from './createEmitter.js';\nimport { createStorage, getDefaultStorage, } from './createStorage.js';\nimport { ChainNotConfiguredError } from './errors/config.js';\nimport { uid } from './utils/uid.js';\nimport { version } from './version.js';\nexport function createConfig(parameters) {\n const { multiInjectedProviderDiscovery = true, storage = createStorage({\n storage: getDefaultStorage(),\n }), syncConnectedChain = true, ssr = false, ...rest } = parameters;\n /////////////////////////////////////////////////////////////////////////////////////////////////\n // Set up connectors, clients, etc.\n /////////////////////////////////////////////////////////////////////////////////////////////////\n const mipd = typeof window !== 'undefined' && multiInjectedProviderDiscovery\n ? createMipd()\n : undefined;\n const chains = createStore(() => rest.chains);\n const connectors = createStore(() => {\n const collection = [];\n const rdnsSet = new Set();\n for (const connectorFns of rest.connectors ?? []) {\n const connector = setup(connectorFns);\n collection.push(connector);\n if (!ssr && connector.rdns) {\n const rdnsValues = typeof connector.rdns === 'string' ? [connector.rdns] : connector.rdns;\n for (const rdns of rdnsValues) {\n rdnsSet.add(rdns);\n }\n }\n }\n if (!ssr && mipd) {\n const providers = mipd.getProviders();\n for (const provider of providers) {\n if (rdnsSet.has(provider.info.rdns))\n continue;\n collection.push(setup(providerDetailToConnector(provider)));\n }\n }\n return collection;\n });\n function setup(connectorFn) {\n // Set up emitter with uid and add to connector so they are \"linked\" together.\n const emitter = createEmitter(uid());\n const connector = {\n ...connectorFn({\n emitter,\n chains: chains.getState(),\n storage,\n transports: rest.transports,\n }),\n emitter,\n uid: emitter.uid,\n };\n // Start listening for `connect` events on connector setup\n // This allows connectors to \"connect\" themselves without user interaction (e.g. MetaMask's \"Manually connect to current site\")\n emitter.on('connect', connect);\n connector.setup?.();\n return connector;\n }\n function providerDetailToConnector(providerDetail) {\n const { info } = providerDetail;\n const provider = providerDetail.provider;\n return injected({ target: { ...info, id: info.rdns, provider } });\n }\n const clients = new Map();\n function getClient(config = {}) {\n const chainId = config.chainId ?? store.getState().chainId;\n const chain = chains.getState().find((x) => x.id === chainId);\n // chainId specified and not configured\n if (config.chainId && !chain)\n throw new ChainNotConfiguredError();\n {\n const client = clients.get(store.getState().chainId);\n if (client && !chain)\n return client;\n if (!chain)\n throw new ChainNotConfiguredError();\n }\n // If a memoized client exists for a chain id, use that.\n {\n const client = clients.get(chainId);\n if (client)\n return client;\n }\n let client;\n if (rest.client)\n client = rest.client({ chain });\n else {\n const chainId = chain.id;\n const chainIds = chains.getState().map((x) => x.id);\n // Grab all properties off `rest` and resolve for use in `createClient`\n const properties = {};\n const entries = Object.entries(rest);\n for (const [key, value] of entries) {\n if (key === 'chains' ||\n key === 'client' ||\n key === 'connectors' ||\n key === 'transports')\n continue;\n if (typeof value === 'object') {\n // check if value is chainId-specific since some values can be objects\n // e.g. { batch: { multicall: { batchSize: 1024 } } }\n if (chainId in value)\n properties[key] = value[chainId];\n else {\n // check if value is chainId-specific, but does not have value for current chainId\n const hasChainSpecificValue = chainIds.some((x) => x in value);\n if (hasChainSpecificValue)\n continue;\n properties[key] = value;\n }\n }\n else\n properties[key] = value;\n }\n client = createClient({\n ...properties,\n chain,\n batch: properties.batch ?? { multicall: true },\n transport: (parameters) => rest.transports[chainId]({ ...parameters, connectors }),\n });\n }\n clients.set(chainId, client);\n return client;\n }\n /////////////////////////////////////////////////////////////////////////////////////////////////\n // Create store\n /////////////////////////////////////////////////////////////////////////////////////////////////\n function getInitialState() {\n return {\n chainId: chains.getState()[0].id,\n connections: new Map(),\n current: null,\n status: 'disconnected',\n };\n }\n let currentVersion;\n const prefix = '0.0.0-canary-';\n if (version.startsWith(prefix))\n currentVersion = Number.parseInt(version.replace(prefix, ''));\n // use package major version to version store\n else\n currentVersion = Number.parseInt(version.split('.')[0] ?? '0');\n const store = createStore(subscribeWithSelector(\n // only use persist middleware if storage exists\n storage\n ? persist(getInitialState, {\n migrate(persistedState, version) {\n if (version === currentVersion)\n return persistedState;\n const initialState = getInitialState();\n const chainId = validatePersistedChainId(persistedState, initialState.chainId);\n return { ...initialState, chainId };\n },\n name: 'store',\n partialize(state) {\n // Only persist \"critical\" store properties to preserve storage size.\n return {\n connections: {\n __type: 'Map',\n value: Array.from(state.connections.entries()).map(([key, connection]) => {\n const { id, name, type, uid } = connection.connector;\n const connector = { id, name, type, uid };\n return [key, { ...connection, connector }];\n }),\n },\n chainId: state.chainId,\n current: state.current,\n };\n },\n merge(persistedState, currentState) {\n // `status` should not be persisted as it messes with reconnection\n if (typeof persistedState === 'object' &&\n persistedState &&\n 'status' in persistedState)\n delete persistedState.status;\n // Make sure persisted `chainId` is valid\n const chainId = validatePersistedChainId(persistedState, currentState.chainId);\n return {\n ...currentState,\n ...persistedState,\n chainId,\n };\n },\n skipHydration: ssr,\n storage: storage,\n version: currentVersion,\n })\n : getInitialState));\n store.setState(getInitialState());\n function validatePersistedChainId(persistedState, defaultChainId) {\n return persistedState &&\n typeof persistedState === 'object' &&\n 'chainId' in persistedState &&\n typeof persistedState.chainId === 'number' &&\n chains.getState().some((x) => x.id === persistedState.chainId)\n ? persistedState.chainId\n : defaultChainId;\n }\n /////////////////////////////////////////////////////////////////////////////////////////////////\n // Subscribe to changes\n /////////////////////////////////////////////////////////////////////////////////////////////////\n // Update default chain when connector chain changes\n if (syncConnectedChain)\n store.subscribe(({ connections, current }) => current ? connections.get(current)?.chainId : undefined, (chainId) => {\n // If chain is not configured, then don't switch over to it.\n const isChainConfigured = chains\n .getState()\n .some((x) => x.id === chainId);\n if (!isChainConfigured)\n return;\n return store.setState((x) => ({\n ...x,\n chainId: chainId ?? x.chainId,\n }));\n });\n // EIP-6963 subscribe for new wallet providers\n mipd?.subscribe((providerDetails) => {\n const connectorIdSet = new Set();\n const connectorRdnsSet = new Set();\n for (const connector of connectors.getState()) {\n connectorIdSet.add(connector.id);\n if (connector.rdns) {\n const rdnsValues = typeof connector.rdns === 'string' ? [connector.rdns] : connector.rdns;\n for (const rdns of rdnsValues) {\n connectorRdnsSet.add(rdns);\n }\n }\n }\n const newConnectors = [];\n for (const providerDetail of providerDetails) {\n if (connectorRdnsSet.has(providerDetail.info.rdns))\n continue;\n const connector = setup(providerDetailToConnector(providerDetail));\n if (connectorIdSet.has(connector.id))\n continue;\n newConnectors.push(connector);\n }\n if (storage && !store.persist.hasHydrated())\n return;\n connectors.setState((x) => [...x, ...newConnectors], true);\n });\n /////////////////////////////////////////////////////////////////////////////////////////////////\n // Emitter listeners\n /////////////////////////////////////////////////////////////////////////////////////////////////\n function change(data) {\n store.setState((x) => {\n const connection = x.connections.get(data.uid);\n if (!connection)\n return x;\n return {\n ...x,\n connections: new Map(x.connections).set(data.uid, {\n accounts: data.accounts ??\n connection.accounts,\n chainId: data.chainId ?? connection.chainId,\n connector: connection.connector,\n }),\n };\n });\n }\n function connect(data) {\n // Disable handling if reconnecting/connecting\n if (store.getState().status === 'connecting' ||\n store.getState().status === 'reconnecting')\n return;\n store.setState((x) => {\n const connector = connectors.getState().find((x) => x.uid === data.uid);\n if (!connector)\n return x;\n if (connector.emitter.listenerCount('connect'))\n connector.emitter.off('connect', change);\n if (!connector.emitter.listenerCount('change'))\n connector.emitter.on('change', change);\n if (!connector.emitter.listenerCount('disconnect'))\n connector.emitter.on('disconnect', disconnect);\n return {\n ...x,\n connections: new Map(x.connections).set(data.uid, {\n accounts: data.accounts,\n chainId: data.chainId,\n connector: connector,\n }),\n current: data.uid,\n status: 'connected',\n };\n });\n }\n function disconnect(data) {\n store.setState((x) => {\n const connection = x.connections.get(data.uid);\n if (connection) {\n const connector = connection.connector;\n if (connector.emitter.listenerCount('change'))\n connection.connector.emitter.off('change', change);\n if (connector.emitter.listenerCount('disconnect'))\n connection.connector.emitter.off('disconnect', disconnect);\n if (!connector.emitter.listenerCount('connect'))\n connection.connector.emitter.on('connect', connect);\n }\n x.connections.delete(data.uid);\n if (x.connections.size === 0)\n return {\n ...x,\n connections: new Map(),\n current: null,\n status: 'disconnected',\n };\n const nextConnection = x.connections.values().next().value;\n return {\n ...x,\n connections: new Map(x.connections),\n current: nextConnection.connector.uid,\n };\n });\n }\n return {\n get chains() {\n return chains.getState();\n },\n get connectors() {\n return connectors.getState();\n },\n storage,\n getClient,\n get state() {\n return store.getState();\n },\n setState(value) {\n let newState;\n if (typeof value === 'function')\n newState = value(store.getState());\n else\n newState = value;\n // Reset state if it got set to something not matching the base state\n const initialState = getInitialState();\n if (typeof newState !== 'object')\n newState = initialState;\n const isCorrupt = Object.keys(initialState).some((x) => !(x in newState));\n if (isCorrupt)\n newState = initialState;\n store.setState(newState, true);\n },\n subscribe(selector, listener, options) {\n return store.subscribe(selector, listener, options\n ? {\n ...options,\n fireImmediately: options.emitImmediately,\n // Workaround cast since Zustand does not support `'exactOptionalPropertyTypes'`\n }\n : undefined);\n },\n _internal: {\n mipd,\n store,\n ssr: Boolean(ssr),\n syncConnectedChain,\n transports: rest.transports,\n chains: {\n setState(value) {\n const nextChains = (typeof value === 'function' ? value(chains.getState()) : value);\n if (nextChains.length === 0)\n return;\n return chains.setState(nextChains, true);\n },\n subscribe(listener) {\n return chains.subscribe(listener);\n },\n },\n connectors: {\n providerDetailToConnector,\n setup: setup,\n setState(value) {\n return connectors.setState(typeof value === 'function' ? value(connectors.getState()) : value, true);\n },\n subscribe(listener) {\n return connectors.subscribe(listener);\n },\n },\n events: { change, connect, disconnect },\n },\n };\n}\n//# sourceMappingURL=createConfig.js.map","export function extractRpcUrls(parameters) {\n const { chain } = parameters;\n const fallbackUrl = chain.rpcUrls.default.http[0];\n if (!parameters.transports)\n return [fallbackUrl];\n const transport = parameters.transports?.[chain.id]?.({ chain });\n const transports = transport?.value?.transports || [transport];\n return transports.map(({ value }) => value?.url || fallbackUrl);\n}\n//# sourceMappingURL=extractRpcUrls.js.map","/**\n * Predeploy contracts for OP Stack.\n * @see https://github.com/ethereum-optimism/optimism/blob/develop/specs/predeploys.md\n */\nexport const contracts = {\n gasPriceOracle: { address: '0x420000000000000000000000000000000000000F' },\n l1Block: { address: '0x4200000000000000000000000000000000000015' },\n l2CrossDomainMessenger: {\n address: '0x4200000000000000000000000000000000000007',\n },\n l2Erc721Bridge: { address: '0x4200000000000000000000000000000000000014' },\n l2StandardBridge: { address: '0x4200000000000000000000000000000000000010' },\n l2ToL1MessagePasser: {\n address: '0x4200000000000000000000000000000000000016',\n },\n};\n//# sourceMappingURL=contracts.js.map","import { hexToBigInt } from '../utils/encoding/fromHex.js';\nimport { defineBlock } from '../utils/formatters/block.js';\nimport { defineTransaction, formatTransaction, } from '../utils/formatters/transaction.js';\nimport { defineTransactionReceipt } from '../utils/formatters/transactionReceipt.js';\nexport const formatters = {\n block: /*#__PURE__*/ defineBlock({\n format(args) {\n const transactions = args.transactions?.map((transaction) => {\n if (typeof transaction === 'string')\n return transaction;\n const formatted = formatTransaction(transaction);\n if (formatted.typeHex === '0x7e') {\n formatted.isSystemTx = transaction.isSystemTx;\n formatted.mint = transaction.mint\n ? hexToBigInt(transaction.mint)\n : undefined;\n formatted.sourceHash = transaction.sourceHash;\n formatted.type = 'deposit';\n }\n return formatted;\n });\n return {\n transactions,\n stateRoot: args.stateRoot,\n };\n },\n }),\n transaction: /*#__PURE__*/ defineTransaction({\n format(args) {\n const transaction = {};\n if (args.type === '0x7e') {\n transaction.isSystemTx = args.isSystemTx;\n transaction.mint = args.mint ? hexToBigInt(args.mint) : undefined;\n transaction.sourceHash = args.sourceHash;\n transaction.type = 'deposit';\n }\n return transaction;\n },\n }),\n transactionReceipt: /*#__PURE__*/ defineTransactionReceipt({\n format(args) {\n return {\n l1GasPrice: args.l1GasPrice ? hexToBigInt(args.l1GasPrice) : null,\n l1GasUsed: args.l1GasUsed ? hexToBigInt(args.l1GasUsed) : null,\n l1Fee: args.l1Fee ? hexToBigInt(args.l1Fee) : null,\n l1FeeScalar: args.l1FeeScalar ? Number(args.l1FeeScalar) : null,\n };\n },\n }),\n};\n//# sourceMappingURL=formatters.js.map","import { InvalidAddressError } from '../errors/address.js';\nimport { isAddress } from '../utils/address/isAddress.js';\nimport { concatHex } from '../utils/data/concat.js';\nimport { toHex } from '../utils/encoding/toHex.js';\nimport { toRlp } from '../utils/encoding/toRlp.js';\nimport { serializeTransaction as serializeTransaction_, } from '../utils/transaction/serializeTransaction.js';\nexport function serializeTransaction(transaction, signature) {\n if (isDeposit(transaction))\n return serializeTransactionDeposit(transaction);\n return serializeTransaction_(transaction, signature);\n}\nexport const serializers = {\n transaction: serializeTransaction,\n};\nfunction serializeTransactionDeposit(transaction) {\n assertTransactionDeposit(transaction);\n const { sourceHash, data, from, gas, isSystemTx, mint, to, value } = transaction;\n const serializedTransaction = [\n sourceHash,\n from,\n to ?? '0x',\n mint ? toHex(mint) : '0x',\n value ? toHex(value) : '0x',\n gas ? toHex(gas) : '0x',\n isSystemTx ? '0x1' : '0x',\n data ?? '0x',\n ];\n return concatHex([\n '0x7e',\n toRlp(serializedTransaction),\n ]);\n}\nfunction isDeposit(transaction) {\n if (transaction.type === 'deposit')\n return true;\n if (typeof transaction.sourceHash !== 'undefined')\n return true;\n return false;\n}\nexport function assertTransactionDeposit(transaction) {\n const { from, to } = transaction;\n if (from && !isAddress(from))\n throw new InvalidAddressError({ address: from });\n if (to && !isAddress(to))\n throw new InvalidAddressError({ address: to });\n}\n//# sourceMappingURL=serializers.js.map","import { contracts } from './contracts.js';\nimport { formatters } from './formatters.js';\nimport { serializers } from './serializers.js';\nexport const chainConfig = {\n blockTime: 2_000,\n contracts,\n formatters,\n serializers,\n};\n//# sourceMappingURL=chainConfig.js.map","import { defineChain } from '../../utils/chain/defineChain.js';\nexport const arbitrum = /*#__PURE__*/ defineChain({\n id: 42_161,\n name: 'Arbitrum One',\n nativeCurrency: { name: 'Ether', symbol: 'ETH', decimals: 18 },\n blockTime: 250,\n rpcUrls: {\n default: {\n http: ['https://arb1.arbitrum.io/rpc'],\n },\n },\n blockExplorers: {\n default: {\n name: 'Arbiscan',\n url: 'https://arbiscan.io',\n apiUrl: 'https://api.arbiscan.io/api',\n },\n },\n contracts: {\n multicall3: {\n address: '0xca11bde05977b3631167028862be2a173976ca11',\n blockCreated: 7654707,\n },\n },\n});\n//# sourceMappingURL=arbitrum.js.map","import { defineChain } from '../../utils/chain/defineChain.js';\nexport const avalanche = /*#__PURE__*/ defineChain({\n id: 43_114,\n name: 'Avalanche',\n nativeCurrency: {\n decimals: 18,\n name: 'Avalanche',\n symbol: 'AVAX',\n },\n rpcUrls: {\n default: { http: ['https://api.avax.network/ext/bc/C/rpc'] },\n },\n blockExplorers: {\n default: {\n name: 'SnowTrace',\n url: 'https://snowtrace.io',\n apiUrl: 'https://api.snowtrace.io',\n },\n },\n contracts: {\n multicall3: {\n address: '0xca11bde05977b3631167028862be2a173976ca11',\n blockCreated: 11907934,\n },\n },\n});\n//# sourceMappingURL=avalanche.js.map","import { defineChain } from '../../utils/chain/defineChain.js';\nexport const bsc = /*#__PURE__*/ defineChain({\n id: 56,\n name: 'BNB Smart Chain',\n nativeCurrency: {\n decimals: 18,\n name: 'BNB',\n symbol: 'BNB',\n },\n rpcUrls: {\n default: { http: ['https://56.rpc.thirdweb.com'] },\n },\n blockExplorers: {\n default: {\n name: 'BscScan',\n url: 'https://bscscan.com',\n apiUrl: 'https://api.bscscan.com/api',\n },\n },\n contracts: {\n multicall3: {\n address: '0xca11bde05977b3631167028862be2a173976ca11',\n blockCreated: 15921452,\n },\n },\n});\n//# sourceMappingURL=bsc.js.map","import { defineChain } from '../../utils/chain/defineChain.js';\nexport const mainnet = /*#__PURE__*/ defineChain({\n id: 1,\n name: 'Ethereum',\n nativeCurrency: { name: 'Ether', symbol: 'ETH', decimals: 18 },\n blockTime: 12_000,\n rpcUrls: {\n default: {\n http: ['https://eth.merkle.io'],\n },\n },\n blockExplorers: {\n default: {\n name: 'Etherscan',\n url: 'https://etherscan.io',\n apiUrl: 'https://api.etherscan.io/api',\n },\n },\n contracts: {\n ensRegistry: {\n address: '0x00000000000C2E074eC69A0dFb2997BA6C7d2e1e',\n },\n ensUniversalResolver: {\n address: '0xce01f8eee7E479C928F8919abD53E553a36CeF67',\n blockCreated: 19_258_213,\n },\n multicall3: {\n address: '0xca11bde05977b3631167028862be2a173976ca11',\n blockCreated: 14_353_601,\n },\n },\n});\n//# sourceMappingURL=mainnet.js.map","import { chainConfig } from '../../op-stack/chainConfig.js';\nimport { defineChain } from '../../utils/chain/defineChain.js';\nconst sourceId = 1; // mainnet\nexport const optimism = /*#__PURE__*/ defineChain({\n ...chainConfig,\n id: 10,\n name: 'OP Mainnet',\n nativeCurrency: { name: 'Ether', symbol: 'ETH', decimals: 18 },\n rpcUrls: {\n default: {\n http: ['https://mainnet.optimism.io'],\n },\n },\n blockExplorers: {\n default: {\n name: 'Optimism Explorer',\n url: 'https://optimistic.etherscan.io',\n apiUrl: 'https://api-optimistic.etherscan.io/api',\n },\n },\n contracts: {\n ...chainConfig.contracts,\n disputeGameFactory: {\n [sourceId]: {\n address: '0xe5965Ab5962eDc7477C8520243A95517CD252fA9',\n },\n },\n l2OutputOracle: {\n [sourceId]: {\n address: '0xdfe97868233d1aa22e815a266982f2cf17685a27',\n },\n },\n multicall3: {\n address: '0xca11bde05977b3631167028862be2a173976ca11',\n blockCreated: 4286263,\n },\n portal: {\n [sourceId]: {\n address: '0xbEb5Fc579115071764c7423A4f12eDde41f106Ed',\n },\n },\n l1StandardBridge: {\n [sourceId]: {\n address: '0x99C9fc46f92E8a1c0deC1b1747d010903E884bE1',\n },\n },\n },\n sourceId,\n});\n//# sourceMappingURL=optimism.js.map","import { defineChain } from '../../utils/chain/defineChain.js';\nexport const polygon = /*#__PURE__*/ defineChain({\n id: 137,\n name: 'Polygon',\n nativeCurrency: { name: 'POL', symbol: 'POL', decimals: 18 },\n rpcUrls: {\n default: {\n http: ['https://polygon-rpc.com'],\n },\n },\n blockExplorers: {\n default: {\n name: 'PolygonScan',\n url: 'https://polygonscan.com',\n apiUrl: 'https://api.polygonscan.com/api',\n },\n },\n contracts: {\n multicall3: {\n address: '0xca11bde05977b3631167028862be2a173976ca11',\n blockCreated: 25770160,\n },\n },\n});\n//# sourceMappingURL=polygon.js.map","import { ChainNotConfiguredError, createConnector, } from '@wagmi/core';\nimport { getAddress, numberToHex, SwitchChainError, UserRejectedRequestError, } from 'viem';\ncoinbaseWallet.type = 'coinbaseWallet';\nexport function coinbaseWallet(parameters = {}) {\n if (parameters.version === '3' || parameters.headlessMode)\n return version3(parameters);\n return version4(parameters);\n}\nfunction version4(parameters) {\n let walletProvider;\n let accountsChanged;\n let chainChanged;\n let disconnect;\n return createConnector((config) => ({\n id: 'coinbaseWalletSDK',\n name: 'Coinbase Wallet',\n rdns: 'com.coinbase.wallet',\n type: coinbaseWallet.type,\n async connect({ chainId, ...rest } = {}) {\n try {\n const provider = await this.getProvider();\n const accounts = (await provider.request({\n method: 'eth_requestAccounts',\n params: 'instantOnboarding' in rest && rest.instantOnboarding\n ? [{ onboarding: 'instant' }]\n : [],\n })).map((x) => getAddress(x));\n if (!accountsChanged) {\n accountsChanged = this.onAccountsChanged.bind(this);\n provider.on('accountsChanged', accountsChanged);\n }\n if (!chainChanged) {\n chainChanged = this.onChainChanged.bind(this);\n provider.on('chainChanged', chainChanged);\n }\n if (!disconnect) {\n disconnect = this.onDisconnect.bind(this);\n provider.on('disconnect', disconnect);\n }\n // Switch to chain if provided\n let currentChainId = await this.getChainId();\n if (chainId && currentChainId !== chainId) {\n const chain = await this.switchChain({ chainId }).catch((error) => {\n if (error.code === UserRejectedRequestError.code)\n throw error;\n return { id: currentChainId };\n });\n currentChainId = chain?.id ?? currentChainId;\n }\n return { accounts, chainId: currentChainId };\n }\n catch (error) {\n if (/(user closed modal|accounts received is empty|user denied account|request rejected)/i.test(error.message))\n throw new UserRejectedRequestError(error);\n throw error;\n }\n },\n async disconnect() {\n const provider = await this.getProvider();\n if (accountsChanged) {\n provider.removeListener('accountsChanged', accountsChanged);\n accountsChanged = undefined;\n }\n if (chainChanged) {\n provider.removeListener('chainChanged', chainChanged);\n chainChanged = undefined;\n }\n if (disconnect) {\n provider.removeListener('disconnect', disconnect);\n disconnect = undefined;\n }\n provider.disconnect();\n provider.close?.();\n },\n async getAccounts() {\n const provider = await this.getProvider();\n return (await provider.request({\n method: 'eth_accounts',\n })).map((x) => getAddress(x));\n },\n async getChainId() {\n const provider = await this.getProvider();\n const chainId = (await provider.request({\n method: 'eth_chainId',\n }));\n return Number(chainId);\n },\n async getProvider() {\n if (!walletProvider) {\n const preference = (() => {\n if (typeof parameters.preference === 'string')\n return { options: parameters.preference };\n return {\n ...parameters.preference,\n options: parameters.preference?.options ?? 'all',\n };\n })();\n const { createCoinbaseWalletSDK } = await import('@coinbase/wallet-sdk');\n const sdk = createCoinbaseWalletSDK({\n ...parameters,\n appChainIds: config.chains.map((x) => x.id),\n preference,\n });\n walletProvider = sdk.getProvider();\n }\n return walletProvider;\n },\n async isAuthorized() {\n try {\n const accounts = await this.getAccounts();\n return !!accounts.length;\n }\n catch {\n return false;\n }\n },\n async switchChain({ addEthereumChainParameter, chainId }) {\n const chain = config.chains.find((chain) => chain.id === chainId);\n if (!chain)\n throw new SwitchChainError(new ChainNotConfiguredError());\n const provider = await this.getProvider();\n try {\n await provider.request({\n method: 'wallet_switchEthereumChain',\n params: [{ chainId: numberToHex(chain.id) }],\n });\n return chain;\n }\n catch (error) {\n // Indicates chain is not added to provider\n if (error.code === 4902) {\n try {\n let blockExplorerUrls;\n if (addEthereumChainParameter?.blockExplorerUrls)\n blockExplorerUrls = addEthereumChainParameter.blockExplorerUrls;\n else\n blockExplorerUrls = chain.blockExplorers?.default.url\n ? [chain.blockExplorers?.default.url]\n : [];\n let rpcUrls;\n if (addEthereumChainParameter?.rpcUrls?.length)\n rpcUrls = addEthereumChainParameter.rpcUrls;\n else\n rpcUrls = [chain.rpcUrls.default?.http[0] ?? ''];\n const addEthereumChain = {\n blockExplorerUrls,\n chainId: numberToHex(chainId),\n chainName: addEthereumChainParameter?.chainName ?? chain.name,\n iconUrls: addEthereumChainParameter?.iconUrls,\n nativeCurrency: addEthereumChainParameter?.nativeCurrency ??\n chain.nativeCurrency,\n rpcUrls,\n };\n await provider.request({\n method: 'wallet_addEthereumChain',\n params: [addEthereumChain],\n });\n return chain;\n }\n catch (error) {\n throw new UserRejectedRequestError(error);\n }\n }\n throw new SwitchChainError(error);\n }\n },\n onAccountsChanged(accounts) {\n if (accounts.length === 0)\n this.onDisconnect();\n else\n config.emitter.emit('change', {\n accounts: accounts.map((x) => getAddress(x)),\n });\n },\n onChainChanged(chain) {\n const chainId = Number(chain);\n config.emitter.emit('change', { chainId });\n },\n async onDisconnect(_error) {\n config.emitter.emit('disconnect');\n const provider = await this.getProvider();\n if (accountsChanged) {\n provider.removeListener('accountsChanged', accountsChanged);\n accountsChanged = undefined;\n }\n if (chainChanged) {\n provider.removeListener('chainChanged', chainChanged);\n chainChanged = undefined;\n }\n if (disconnect) {\n provider.removeListener('disconnect', disconnect);\n disconnect = undefined;\n }\n },\n }));\n}\nfunction version3(parameters) {\n const reloadOnDisconnect = false;\n let sdk;\n let walletProvider;\n let accountsChanged;\n let chainChanged;\n let disconnect;\n return createConnector((config) => ({\n id: 'coinbaseWalletSDK',\n name: 'Coinbase Wallet',\n rdns: 'com.coinbase.wallet',\n type: coinbaseWallet.type,\n async connect({ chainId } = {}) {\n try {\n const provider = await this.getProvider();\n const accounts = (await provider.request({\n method: 'eth_requestAccounts',\n })).map((x) => getAddress(x));\n if (!accountsChanged) {\n accountsChanged = this.onAccountsChanged.bind(this);\n provider.on('accountsChanged', accountsChanged);\n }\n if (!chainChanged) {\n chainChanged = this.onChainChanged.bind(this);\n provider.on('chainChanged', chainChanged);\n }\n if (!disconnect) {\n disconnect = this.onDisconnect.bind(this);\n provider.on('disconnect', disconnect);\n }\n // Switch to chain if provided\n let currentChainId = await this.getChainId();\n if (chainId && currentChainId !== chainId) {\n const chain = await this.switchChain({ chainId }).catch((error) => {\n if (error.code === UserRejectedRequestError.code)\n throw error;\n return { id: currentChainId };\n });\n currentChainId = chain?.id ?? currentChainId;\n }\n return { accounts, chainId: currentChainId };\n }\n catch (error) {\n if (/(user closed modal|accounts received is empty|user denied account)/i.test(error.message))\n throw new UserRejectedRequestError(error);\n throw error;\n }\n },\n async disconnect() {\n const provider = await this.getProvider();\n if (accountsChanged) {\n provider.removeListener('accountsChanged', accountsChanged);\n accountsChanged = undefined;\n }\n if (chainChanged) {\n provider.removeListener('chainChanged', chainChanged);\n chainChanged = undefined;\n }\n if (disconnect) {\n provider.removeListener('disconnect', disconnect);\n disconnect = undefined;\n }\n provider.disconnect();\n provider.close();\n },\n async getAccounts() {\n const provider = await this.getProvider();\n return (await provider.request({\n method: 'eth_accounts',\n })).map((x) => getAddress(x));\n },\n async getChainId() {\n const provider = await this.getProvider();\n const chainId = await provider.request({\n method: 'eth_chainId',\n });\n return Number(chainId);\n },\n async getProvider() {\n if (!walletProvider) {\n // Unwrapping import for Vite compatibility.\n // See: https://github.com/vitejs/vite/issues/9703\n const CoinbaseWalletSDK = await (async () => {\n const { default: SDK } = await import('cbw-sdk');\n if (typeof SDK !== 'function' && typeof SDK.default === 'function')\n return SDK.default;\n return SDK;\n })();\n sdk = new CoinbaseWalletSDK({ ...parameters, reloadOnDisconnect });\n // Force types to retrieve private `walletExtension` method from the Coinbase Wallet SDK.\n const walletExtensionChainId = sdk.walletExtension?.getChainId();\n const chain = config.chains.find((chain) => parameters.chainId\n ? chain.id === parameters.chainId\n : chain.id === walletExtensionChainId) || config.chains[0];\n const chainId = parameters.chainId || chain?.id;\n const jsonRpcUrl = parameters.jsonRpcUrl || chain?.rpcUrls.default.http[0];\n walletProvider = sdk.makeWeb3Provider(jsonRpcUrl, chainId);\n }\n return walletProvider;\n },\n async isAuthorized() {\n try {\n const accounts = await this.getAccounts();\n return !!accounts.length;\n }\n catch {\n return false;\n }\n },\n async switchChain({ addEthereumChainParameter, chainId }) {\n const chain = config.chains.find((chain) => chain.id === chainId);\n if (!chain)\n throw new SwitchChainError(new ChainNotConfiguredError());\n const provider = await this.getProvider();\n try {\n await provider.request({\n method: 'wallet_switchEthereumChain',\n params: [{ chainId: numberToHex(chain.id) }],\n });\n return chain;\n }\n catch (error) {\n // Indicates chain is not added to provider\n if (error.code === 4902) {\n try {\n let blockExplorerUrls;\n if (addEthereumChainParameter?.blockExplorerUrls)\n blockExplorerUrls = addEthereumChainParameter.blockExplorerUrls;\n else\n blockExplorerUrls = chain.blockExplorers?.default.url\n ? [chain.blockExplorers?.default.url]\n : [];\n let rpcUrls;\n if (addEthereumChainParameter?.rpcUrls?.length)\n rpcUrls = addEthereumChainParameter.rpcUrls;\n else\n rpcUrls = [chain.rpcUrls.default?.http[0] ?? ''];\n const addEthereumChain = {\n blockExplorerUrls,\n chainId: numberToHex(chainId),\n chainName: addEthereumChainParameter?.chainName ?? chain.name,\n iconUrls: addEthereumChainParameter?.iconUrls,\n nativeCurrency: addEthereumChainParameter?.nativeCurrency ??\n chain.nativeCurrency,\n rpcUrls,\n };\n await provider.request({\n method: 'wallet_addEthereumChain',\n params: [addEthereumChain],\n });\n return chain;\n }\n catch (error) {\n throw new UserRejectedRequestError(error);\n }\n }\n throw new SwitchChainError(error);\n }\n },\n onAccountsChanged(accounts) {\n if (accounts.length === 0)\n this.onDisconnect();\n else\n config.emitter.emit('change', {\n accounts: accounts.map((x) => getAddress(x)),\n });\n },\n onChainChanged(chain) {\n const chainId = Number(chain);\n config.emitter.emit('change', { chainId });\n },\n async onDisconnect(_error) {\n config.emitter.emit('disconnect');\n const provider = await this.getProvider();\n if (accountsChanged) {\n provider.removeListener('accountsChanged', accountsChanged);\n accountsChanged = undefined;\n }\n if (chainChanged) {\n provider.removeListener('chainChanged', chainChanged);\n chainChanged = undefined;\n }\n if (disconnect) {\n provider.removeListener('disconnect', disconnect);\n disconnect = undefined;\n }\n },\n }));\n}\n//# sourceMappingURL=coinbaseWallet.js.map","import { ChainNotConfiguredError, createConnector, extractRpcUrls, ProviderNotFoundError, } from '@wagmi/core';\nimport { getAddress, hexToNumber, numberToHex, ResourceUnavailableRpcError, SwitchChainError, UserRejectedRequestError, withRetry, withTimeout, } from 'viem';\nmetaMask.type = 'metaMask';\nexport function metaMask(parameters = {}) {\n let sdk;\n let provider;\n let providerPromise;\n let accountsChanged;\n let chainChanged;\n let connect;\n let displayUri;\n let disconnect;\n return createConnector((config) => ({\n id: 'metaMaskSDK',\n name: 'MetaMask',\n rdns: ['io.metamask', 'io.metamask.mobile'],\n type: metaMask.type,\n async setup() {\n const provider = await this.getProvider();\n if (provider?.on) {\n if (!connect) {\n connect = this.onConnect.bind(this);\n provider.on('connect', connect);\n }\n // We shouldn't need to listen for `'accountsChanged'` here since the `'connect'` event should suffice (and wallet shouldn't be connected yet).\n // Some wallets, like MetaMask, do not implement the `'connect'` event and overload `'accountsChanged'` instead.\n if (!accountsChanged) {\n accountsChanged = this.onAccountsChanged.bind(this);\n provider.on('accountsChanged', accountsChanged);\n }\n }\n },\n async connect({ chainId, isReconnecting } = {}) {\n const provider = await this.getProvider();\n if (!displayUri) {\n displayUri = this.onDisplayUri;\n provider.on('display_uri', displayUri);\n }\n let accounts = [];\n if (isReconnecting)\n accounts = await this.getAccounts().catch(() => []);\n try {\n let signResponse;\n let connectWithResponse;\n if (!accounts?.length) {\n if (parameters.connectAndSign || parameters.connectWith) {\n if (parameters.connectAndSign)\n signResponse = await sdk.connectAndSign({\n msg: parameters.connectAndSign,\n });\n else if (parameters.connectWith)\n connectWithResponse = await sdk.connectWith({\n method: parameters.connectWith.method,\n params: parameters.connectWith.params,\n });\n accounts = await this.getAccounts();\n }\n else {\n const requestedAccounts = (await sdk.connect());\n accounts = requestedAccounts.map((x) => getAddress(x));\n }\n }\n // Switch to chain if provided\n let currentChainId = (await this.getChainId());\n if (chainId && currentChainId !== chainId) {\n const chain = await this.switchChain({ chainId }).catch((error) => {\n if (error.code === UserRejectedRequestError.code)\n throw error;\n return { id: currentChainId };\n });\n currentChainId = chain?.id ?? currentChainId;\n }\n if (displayUri) {\n provider.removeListener('display_uri', displayUri);\n displayUri = undefined;\n }\n if (signResponse)\n provider.emit('connectAndSign', {\n accounts,\n chainId: currentChainId,\n signResponse,\n });\n else if (connectWithResponse)\n provider.emit('connectWith', {\n accounts,\n chainId: currentChainId,\n connectWithResponse,\n });\n // Manage EIP-1193 event listeners\n // https://eips.ethereum.org/EIPS/eip-1193#events\n if (connect) {\n provider.removeListener('connect', connect);\n connect = undefined;\n }\n if (!accountsChanged) {\n accountsChanged = this.onAccountsChanged.bind(this);\n provider.on('accountsChanged', accountsChanged);\n }\n if (!chainChanged) {\n chainChanged = this.onChainChanged.bind(this);\n provider.on('chainChanged', chainChanged);\n }\n if (!disconnect) {\n disconnect = this.onDisconnect.bind(this);\n provider.on('disconnect', disconnect);\n }\n return { accounts, chainId: currentChainId };\n }\n catch (err) {\n const error = err;\n if (error.code === UserRejectedRequestError.code)\n throw new UserRejectedRequestError(error);\n if (error.code === ResourceUnavailableRpcError.code)\n throw new ResourceUnavailableRpcError(error);\n throw error;\n }\n },\n async disconnect() {\n const provider = await this.getProvider();\n // Manage EIP-1193 event listeners\n if (chainChanged) {\n provider.removeListener('chainChanged', chainChanged);\n chainChanged = undefined;\n }\n if (disconnect) {\n provider.removeListener('disconnect', disconnect);\n disconnect = undefined;\n }\n if (!connect) {\n connect = this.onConnect.bind(this);\n provider.on('connect', connect);\n }\n await sdk.terminate();\n },\n async getAccounts() {\n const provider = await this.getProvider();\n const accounts = (await provider.request({\n method: 'eth_accounts',\n }));\n return accounts.map((x) => getAddress(x));\n },\n async getChainId() {\n const provider = await this.getProvider();\n const chainId = provider.getChainId() ||\n (await provider?.request({ method: 'eth_chainId' }));\n return Number(chainId);\n },\n async getProvider() {\n async function initProvider() {\n // Unwrapping import for Vite compatibility.\n // See: https://github.com/vitejs/vite/issues/9703\n const MetaMaskSDK = await (async () => {\n const { default: SDK } = await import('@metamask/sdk');\n if (typeof SDK !== 'function' && typeof SDK.default === 'function')\n return SDK.default;\n return SDK;\n })();\n const readonlyRPCMap = {};\n for (const chain of config.chains)\n readonlyRPCMap[numberToHex(chain.id)] = extractRpcUrls({\n chain,\n transports: config.transports,\n })?.[0];\n sdk = new MetaMaskSDK({\n _source: 'wagmi',\n forceDeleteProvider: false,\n forceInjectProvider: false,\n injectProvider: false,\n // Workaround cast since MetaMask SDK does not support `'exactOptionalPropertyTypes'`\n ...parameters,\n readonlyRPCMap,\n dappMetadata: {\n ...parameters.dappMetadata,\n // Test if name and url are set AND not empty\n name: parameters.dappMetadata?.name\n ? parameters.dappMetadata?.name\n : 'wagmi',\n url: parameters.dappMetadata?.url\n ? parameters.dappMetadata?.url\n : typeof window !== 'undefined'\n ? window.location.origin\n : 'https://wagmi.sh',\n },\n useDeeplink: parameters.useDeeplink ?? true,\n });\n const result = await sdk.init();\n // On initial load, sometimes `sdk.getProvider` does not return provider.\n // https://github.com/wevm/wagmi/issues/4367\n // Use result of `init` call if available.\n const provider = (() => {\n if (result?.activeProvider)\n return result.activeProvider;\n return sdk.getProvider();\n })();\n if (!provider)\n throw new ProviderNotFoundError();\n return provider;\n }\n if (!provider) {\n if (!providerPromise)\n providerPromise = initProvider();\n provider = await providerPromise;\n }\n return provider;\n },\n async isAuthorized() {\n try {\n // MetaMask mobile provider sometimes fails to immediately resolve\n // JSON-RPC requests on page load\n const timeout = 200;\n const accounts = await withRetry(() => withTimeout(() => this.getAccounts(), { timeout }), {\n delay: timeout + 1,\n retryCount: 3,\n });\n return !!accounts.length;\n }\n catch {\n return false;\n }\n },\n async switchChain({ addEthereumChainParameter, chainId }) {\n const provider = await this.getProvider();\n const chain = config.chains.find((x) => x.id === chainId);\n if (!chain)\n throw new SwitchChainError(new ChainNotConfiguredError());\n try {\n await provider.request({\n method: 'wallet_switchEthereumChain',\n params: [{ chainId: numberToHex(chainId) }],\n });\n // During `'wallet_switchEthereumChain'`, MetaMask makes a `'net_version'` RPC call to the target chain.\n // If this request fails, MetaMask does not emit the `'chainChanged'` event, but will still switch the chain.\n // To counter this behavior, we request and emit the current chain ID to confirm the chain switch either via\n // this callback or an externally emitted `'chainChanged'` event.\n // https://github.com/MetaMask/metamask-extension/issues/24247\n await waitForChainIdToSync();\n await sendAndWaitForChangeEvent(chainId);\n return chain;\n }\n catch (err) {\n const error = err;\n if (error.code === UserRejectedRequestError.code)\n throw new UserRejectedRequestError(error);\n // Indicates chain is not added to provider\n if (error.code === 4902 ||\n // Unwrapping for MetaMask Mobile\n // https://github.com/MetaMask/metamask-mobile/issues/2944#issuecomment-976988719\n error\n ?.data?.originalError?.code === 4902) {\n try {\n await provider.request({\n method: 'wallet_addEthereumChain',\n params: [\n {\n blockExplorerUrls: (() => {\n const { default: blockExplorer, ...blockExplorers } = chain.blockExplorers ?? {};\n if (addEthereumChainParameter?.blockExplorerUrls)\n return addEthereumChainParameter.blockExplorerUrls;\n if (blockExplorer)\n return [\n blockExplorer.url,\n ...Object.values(blockExplorers).map((x) => x.url),\n ];\n return;\n })(),\n chainId: numberToHex(chainId),\n chainName: addEthereumChainParameter?.chainName ?? chain.name,\n iconUrls: addEthereumChainParameter?.iconUrls,\n nativeCurrency: addEthereumChainParameter?.nativeCurrency ??\n chain.nativeCurrency,\n rpcUrls: (() => {\n if (addEthereumChainParameter?.rpcUrls?.length)\n return addEthereumChainParameter.rpcUrls;\n return [chain.rpcUrls.default?.http[0] ?? ''];\n })(),\n },\n ],\n });\n await waitForChainIdToSync();\n await sendAndWaitForChangeEvent(chainId);\n return chain;\n }\n catch (err) {\n const error = err;\n if (error.code === UserRejectedRequestError.code)\n throw new UserRejectedRequestError(error);\n throw new SwitchChainError(error);\n }\n }\n throw new SwitchChainError(error);\n }\n async function waitForChainIdToSync() {\n // On mobile, there is a race condition between the result of `'wallet_addEthereumChain'` and `'eth_chainId'`.\n // To avoid this, we wait for `'eth_chainId'` to return the expected chain ID with a retry loop.\n await withRetry(async () => {\n const value = hexToNumber(\n // `'eth_chainId'` is cached by the MetaMask SDK side to avoid unnecessary deeplinks\n (await provider.request({ method: 'eth_chainId' })));\n // `value` doesn't match expected `chainId`, throw to trigger retry\n if (value !== chainId)\n throw new Error('User rejected switch after adding network.');\n return value;\n }, {\n delay: 50,\n retryCount: 20, // android device encryption is slower\n });\n }\n async function sendAndWaitForChangeEvent(chainId) {\n await new Promise((resolve) => {\n const listener = ((data) => {\n if ('chainId' in data && data.chainId === chainId) {\n config.emitter.off('change', listener);\n resolve();\n }\n });\n config.emitter.on('change', listener);\n config.emitter.emit('change', { chainId });\n });\n }\n },\n async onAccountsChanged(accounts) {\n // Disconnect if there are no accounts\n if (accounts.length === 0) {\n // ... and using browser extension\n if (sdk.isExtensionActive())\n this.onDisconnect();\n // FIXME(upstream): Mobile app sometimes emits invalid `accountsChanged` event with empty accounts array\n else\n return;\n }\n // Connect if emitter is listening for connect event (e.g. is disconnected and connects through wallet interface)\n else if (config.emitter.listenerCount('connect')) {\n const chainId = (await this.getChainId()).toString();\n this.onConnect({ chainId });\n }\n // Regular change event\n else\n config.emitter.emit('change', {\n accounts: accounts.map((x) => getAddress(x)),\n });\n },\n onChainChanged(chain) {\n const chainId = Number(chain);\n config.emitter.emit('change', { chainId });\n },\n async onConnect(connectInfo) {\n const accounts = await this.getAccounts();\n if (accounts.length === 0)\n return;\n const chainId = Number(connectInfo.chainId);\n config.emitter.emit('connect', { accounts, chainId });\n const provider = await this.getProvider();\n if (connect) {\n provider.removeListener('connect', connect);\n connect = undefined;\n }\n if (!accountsChanged) {\n accountsChanged = this.onAccountsChanged.bind(this);\n provider.on('accountsChanged', accountsChanged);\n }\n if (!chainChanged) {\n chainChanged = this.onChainChanged.bind(this);\n provider.on('chainChanged', chainChanged);\n }\n if (!disconnect) {\n disconnect = this.onDisconnect.bind(this);\n provider.on('disconnect', disconnect);\n }\n },\n async onDisconnect(error) {\n const provider = await this.getProvider();\n // If MetaMask emits a `code: 1013` error, wait for reconnection before disconnecting\n // https://github.com/MetaMask/providers/pull/120\n if (error && error.code === 1013) {\n if (provider && !!(await this.getAccounts()).length)\n return;\n }\n config.emitter.emit('disconnect');\n // Manage EIP-1193 event listeners\n if (chainChanged) {\n provider.removeListener('chainChanged', chainChanged);\n chainChanged = undefined;\n }\n if (disconnect) {\n provider.removeListener('disconnect', disconnect);\n disconnect = undefined;\n }\n if (!connect) {\n connect = this.onConnect.bind(this);\n provider.on('connect', connect);\n }\n },\n onDisplayUri(uri) {\n config.emitter.emit('message', { type: 'display_uri', data: uri });\n },\n }));\n}\n//# sourceMappingURL=metaMask.js.map","export default \"data:image/png;base64,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\"","// src/utils/MobileUtils.js\n// Mobile Detection and Utility Functions\n\nexport class MobileUtils {\n static isMobile() {\n return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);\n }\n\n static isAndroid() {\n return /Android/i.test(navigator.userAgent);\n }\n\n static isIOS() {\n return /iPhone|iPad|iPod/i.test(navigator.userAgent);\n }\n\n static getOS() {\n if (this.isIOS()) return 'ios';\n if (this.isAndroid()) return 'android';\n return 'desktop';\n }\n\n static canUseClipboard() {\n return navigator.clipboard && window.isSecureContext;\n }\n\n static async copyToClipboard(text) {\n if (this.canUseClipboard()) {\n try {\n await navigator.clipboard.writeText(text);\n return true;\n } catch (err) {\n console.error('Clipboard copy failed:', err);\n }\n }\n \n // Fallback for older browsers or non-secure contexts\n try {\n const textarea = document.createElement('textarea');\n textarea.value = text;\n textarea.style.position = 'fixed';\n textarea.style.opacity = '0';\n document.body.appendChild(textarea);\n textarea.select();\n document.execCommand('copy');\n document.body.removeChild(textarea);\n return true;\n } catch (err) {\n console.error('Fallback copy failed:', err);\n return false;\n }\n }\n\n static vibrate(pattern = [100]) {\n if (navigator.vibrate) {\n navigator.vibrate(pattern);\n }\n }\n\n static openInWalletApp(walletType, address, amount, chainId, currency) {\n const deepLinks = {\n metamask: {\n ios: `https://metamask.app.link/send/${address}@${chainId}?value=${amount}`,\n android: `https://metamask.app.link/send/${address}@${chainId}?value=${amount}`,\n desktop: `https://metamask.io/`\n },\n trust: {\n ios: `https://link.trustwallet.com/send?coin=60&address=${address}&amount=${amount}`,\n android: `https://link.trustwallet.com/send?coin=60&address=${address}&amount=${amount}`,\n desktop: `https://trustwallet.com/`\n },\n coinbase: {\n ios: `https://go.cb-w.com/send?address=${address}&amount=${amount}`,\n android: `https://go.cb-w.com/send?address=${address}&amount=${amount}`,\n desktop: `https://wallet.coinbase.com/`\n },\n rainbow: {\n ios: `https://rainbow.me/send?address=${address}&amount=${amount}`,\n android: `rainbow://send?address=${address}&amount=${amount}`,\n desktop: `https://rainbow.me/`\n }\n };\n\n const os = this.getOS();\n const links = deepLinks[walletType.toLowerCase()];\n \n if (links && links[os]) {\n window.open(links[os], '_blank');\n return true;\n }\n \n return false;\n }\n}","// //src/components/EnhancedSimpleCoinleyPayment.jsx \n// import React, { useState, useEffect, useRef } from 'react';\n// import ReactDOM from 'react-dom';\n// import { createConfig, http, connect, disconnect, getAccount, sendTransaction, switchChain, getBalance } from '@wagmi/core';\n// import { mainnet, bsc, polygon, arbitrum, optimism, avalanche } from '@wagmi/core/chains';\n// import { injected, metaMask, coinbaseWallet } from '@wagmi/connectors';\n// import logo from \"../assets/Logomark.png\"\n\n\n\n\n\n// // Wagmi Configuration\n// const wagmiConfig = createConfig({\n// chains: [mainnet, bsc, polygon, arbitrum, optimism, avalanche],\n// connectors: [\n// injected({\n// target: {\n// id: 'injected',\n// name: 'Injected Wallet',\n// provider: () => window.ethereum\n// }\n// }),\n// metaMask(),\n// coinbaseWallet({\n// appName: 'Coinley Payment',\n// appLogoUrl: logo\n// })\n// ],\n// transports: {\n// [mainnet.id]: http(),\n// [bsc.id]: http(),\n// [polygon.id]: http(),\n// [arbitrum.id]: http(),\n// [optimism.id]: http(),\n// [avalanche.id]: http(),\n// },\n// });\n\n// // Keep your existing working API class\n// class SimplePaymentAPI {\n// constructor(baseURL, apiKey, apiSecret) {\n// this.baseURL = baseURL.endsWith('/') ? baseURL.slice(0, -1) : baseURL;\n// this.apiKey = apiKey;\n// this.apiSecret = apiSecret;\n// }\n\n// async request(endpoint, options = {}) {\n// const url = `${this.baseURL}${endpoint}`;\n\n// const headers = {\n// 'Content-Type': 'application/json',\n// 'X-API-Key': this.apiKey,\n// 'X-API-Secret': this.apiSecret,\n// ...options.headers\n// };\n\n// const response = await fetch(url, {\n// ...options,\n// headers\n// });\n\n// if (!response.ok) {\n// const error = await response.json().catch(() => ({}));\n// throw new Error(error.error || `HTTP ${response.status}`);\n// }\n\n// return response.json();\n// }\n\n// async getNetworks() {\n// try {\n// return await this.request('/api/networks');\n// } catch (error) {\n// console.error('Failed to fetch networks:', error);\n// return {\n// networks: [\n// { id: '1', name: 'Ethereum', shortName: 'ethereum', chainId: '0x1', type: 'ethereum' },\n// { id: '56', name: 'BSC', shortName: 'bsc', chainId: '0x38', type: 'bsc' },\n// { id: '137', name: 'Polygon', shortName: 'polygon', chainId: '0x89', type: 'polygon' },\n// { id: '42161', name: 'Arbitrum', shortName: 'arbitrum', chainId: '0xa4b1', type: 'arbitrum' },\n// { id: '10', name: 'Optimism', shortName: 'optimism', chainId: '0xa', type: 'optimism' },\n// { id: '43114', name: 'Avalanche', shortName: 'avalanche', chainId: '0xa86a', type: 'avalanche' }\n// ]\n// };\n// }\n// }\n\n// async getTokens() {\n// try {\n// return await this.request('/api/networks/stablecoins');\n// } catch (error) {\n// console.error('Failed to fetch tokens:', error);\n// return {\n// stablecoins: [\n// {\n// id: '1', name: 'Tether USD', symbol: 'USDT',\n// contractAddress: '0xdAC17F958D2ee523a2206206994597C13D831ec7',\n// decimals: 6, networkId: '1',\n// Network: { shortName: 'ethereum', name: 'Ethereum' }\n// },\n// {\n// id: '2', name: 'USD Coin', symbol: 'USDC',\n// contractAddress: '0xA0b86a33E6441d81d0B93bF9EE0f74ca32F7e6f6',\n// decimals: 6, networkId: '1',\n// Network: { shortName: 'ethereum', name: 'Ethereum' }\n// }\n// ]\n// };\n// }\n// }\n\n// async createPayment(data) {\n// return await this.request('/api/payments/create', {\n// method: 'POST',\n// body: JSON.stringify(data)\n// });\n// }\n\n// async verifyQRPayment(paymentId) {\n// return await this.request('/api/payments/verify-qr', {\n// method: 'POST',\n// body: JSON.stringify({ paymentId })\n// });\n// }\n\n\n// async processPayment(paymentId, transactionHash, network, senderAddress) {\n// return await this.request('/api/payments/process', {\n// method: 'POST',\n// body: JSON.stringify({\n// paymentId,\n// transactionHash,\n// network,\n// senderAddress\n// })\n// });\n// }\n\n// }\n\n// // Enhanced Wagmi Wallet Manager\n// class WagmiWalletManager {\n// constructor() {\n// this.connectedWallet = null;\n// this.walletType = null;\n// }\n\n// // Detect available wallets using Wagmi and browser detection\n// getAvailableWallets() {\n// const wallets = [];\n\n// if (!window.ethereum) {\n// console.log('❌ No window.ethereum found');\n// return wallets;\n// }\n\n// // Enhanced wallet detection\n// const detectedWallets = this.detectWallets();\n\n// console.log('🔍 DEBUGGING: Detected wallets:', detectedWallets);\n\n// // Always include these popular wallets if detected\n// if (detectedWallets.metamask) {\n// wallets.push({\n// type: 'metamask',\n// name: 'MetaMask',\n// icon: '🦊',\n// description: 'Connect using MetaMask wallet',\n// color: 'orange',\n// isInstalled: true,\n// connector: 'injected'\n// });\n// }\n\n// if (detectedWallets.rabby) {\n// wallets.push({\n// type: 'rabby',\n// name: 'Rabby',\n// icon: '🐰',\n// description: 'Connect using Rabby wallet',\n// color: 'blue',\n// isInstalled: true,\n// connector: 'injected'\n// });\n// }\n\n// if (detectedWallets.zerion) {\n// wallets.push({\n// type: 'zerion',\n// name: 'Zerion',\n// icon: '⚡',\n// description: 'Connect using Zerion wallet',\n// color: 'purple',\n// isInstalled: true,\n// connector: 'injected'\n// });\n// }\n\n// if (detectedWallets.cryptocom) {\n// wallets.push({\n// type: 'cryptocom',\n// name: 'Crypto.com',\n// icon: '💎',\n// description: 'Connect using Crypto.com DeFi Wallet',\n// color: 'blue',\n// isInstalled: true,\n// connector: 'injected'\n// });\n// }\n\n// if (detectedWallets.coinbase) {\n// wallets.push({\n// type: 'coinbase',\n// name: 'Coinbase Wallet',\n// icon: '🔵',\n// description: 'Connect using Coinbase Wallet',\n// color: 'blue',\n// isInstalled: true,\n// connector: 'coinbase'\n// });\n// }\n\n// if (detectedWallets.phantom) {\n// wallets.push({\n// type: 'phantom',\n// name: 'Phantom',\n// icon: '👻',\n// description: 'Connect using Phantom wallet',\n// color: 'purple',\n// isInstalled: true,\n// connector: 'injected'\n// });\n// }\n\n// // Fallback: if no specific wallets detected but ethereum exists, show generic injected\n// if (wallets.length === 0 && window.ethereum) {\n// wallets.push({\n// type: 'injected',\n// name: 'Browser Wallet',\n// icon: '🌐',\n// description: 'Connect using your browser wallet',\n// color: 'gray',\n// isInstalled: true,\n// connector: 'injected'\n// });\n// }\n\n// console.log('🔍 Final available wallets:', wallets.map(w => w.name));\n// return wallets;\n// }\n\n// // Enhanced wallet detection method\n// detectWallets() {\n// const detected = {\n// metamask: false,\n// rabby: false,\n// zerion: false,\n// cryptocom: false,\n// coinbase: false,\n// phantom: false\n// };\n\n// if (!window.ethereum) return detected;\n\n// // Check for MetaMask\n// if (window.ethereum.isMetaMask === true) {\n// detected.metamask = true;\n// }\n\n// // Check for Rabby\n// if (window.ethereum.isRabby === true || window.rabby) {\n// detected.rabby = true;\n// }\n\n// // Check for Zerion\n// if (window.ethereum.isZerion === true || window.zerionWallet) {\n// detected.zerion = true;\n// }\n\n// // Check for Crypto.com DeFi Wallet\n// if (window.ethereum.isDefiWallet === true || window.deficonnectProvider) {\n// detected.cryptocom = true;\n// }\n\n// // Check for Coinbase Wallet\n// if (window.ethereum.isCoinbaseWallet === true || window.coinbaseWalletExtension) {\n// detected.coinbase = true;\n// }\n\n// // Check for Phantom (primarily Solana but supports Ethereum)\n// if (window.phantom?.ethereum || window.ethereum.isPhantom) {\n// detected.phantom = true;\n// }\n\n// // Check in providers array if it exists\n// if (window.ethereum.providers && Array.isArray(window.ethereum.providers)) {\n// window.ethereum.providers.forEach(provider => {\n// if (provider.isMetaMask) detected.metamask = true;\n// if (provider.isRabby) detected.rabby = true;\n// if (provider.isZerion) detected.zerion = true;\n// if (provider.isDefiWallet) detected.cryptocom = true;\n// if (provider.isCoinbaseWallet) detected.coinbase = true;\n// if (provider.isPhantom) detected.phantom = true;\n// });\n// }\n\n// return detected;\n// }\n\n// // Connect to wallet using Wagmi\n// async connect(walletType) {\n// try {\n// console.log(`🔗 Attempting to connect to ${walletType}...`);\n\n// let connector;\n\n// // Map wallet types to Wagmi connectors\n// switch (walletType) {\n// case 'metamask':\n// connector = wagmiConfig.connectors.find(c => c.id === 'metaMask');\n// break;\n// case 'coinbase':\n// connector = wagmiConfig.connectors.find(c => c.id === 'coinbaseWallet');\n// break;\n// case 'rabby':\n// case 'zerion':\n// case 'cryptocom':\n// case 'phantom':\n// case 'injected':\n// default:\n// connector = wagmiConfig.connectors.find(c => c.id === 'injected');\n// break;\n// }\n\n// if (!connector) {\n// throw new Error(`Connector not found for ${walletType}`);\n// }\n\n// // Connect using Wagmi\n// const result = await connect(wagmiConfig, { connector });\n\n// // Get account details\n// const account = getAccount(wagmiConfig);\n\n// if (!account.address) {\n// throw new Error(`No accounts found. Please unlock ${walletType} and try again.`);\n// }\n\n// // Store connection info\n// this.connectedWallet = {\n// account: account.address,\n// chainId: account.chainId,\n// walletType: walletType,\n// connector: connector\n// };\n\n// this.walletType = walletType;\n\n// console.log(`✅ ${walletType} connected successfully via Wagmi:`, {\n// account: account.address,\n// chainId: account.chainId\n// });\n\n// return this.connectedWallet;\n\n// } catch (error) {\n// console.error(`❌ ${walletType} connection failed:`, error);\n\n// // Provide user-friendly error messages\n// if (error.code === 4001 || error.message.includes('User rejected')) {\n// throw new Error(`Connection rejected. Please approve the connection in ${walletType}.`);\n// } else {\n// throw new Error(`${walletType} connection failed: ${error.message}`);\n// }\n// }\n// }\n\n// // Send transaction using Wagmi\n// async sendTransaction(txParams) {\n// if (!this.connectedWallet) {\n// throw new Error('No wallet connected');\n// }\n\n// try {\n// console.log(`📤 Sending transaction via Wagmi:`, txParams);\n\n// // Prepare transaction parameters for Wagmi\n// const wagmiTxParams = {\n// to: txParams.to,\n// value: txParams.value || 0n,\n// data: txParams.data || '0x',\n// gas: txParams.gas ? BigInt(txParams.gas) : undefined\n// };\n\n// // Send transaction using Wagmi\n// const txHash = await sendTransaction(wagmiConfig, wagmiTxParams);\n\n// console.log(`✅ Transaction sent successfully via Wagmi:`, txHash);\n// return txHash;\n\n// } catch (error) {\n// console.error(`❌ Transaction failed via Wagmi:`, error);\n\n// if (error.code === 4001) {\n// throw new Error('Transaction cancelled by user');\n// } else if (error.message.includes('insufficient funds')) {\n// throw new Error('Insufficient funds in wallet');\n// } else if (error.message.includes('gas')) {\n// throw new Error('Gas estimation failed. You may not have enough ETH for gas fees.');\n// } else {\n// throw new Error(error.message || 'Transaction failed');\n// }\n// }\n// }\n\n// // Check if wallet is connected using Wagmi\n// isConnected() {\n// const account = getAccount(wagmiConfig);\n// return account.isConnected && !!this.connectedWallet;\n// }\n\n// // Get connected wallet info\n// getConnectedWallet() {\n// const account = getAccount(wagmiConfig);\n// if (account.isConnected && this.connectedWallet) {\n// return {\n// ...this.connectedWallet,\n// account: account.address,\n// chainId: account.chainId\n// };\n// }\n// return null;\n// }\n\n// // Disconnect wallet using Wagmi\n// async disconnect() {\n// try {\n// await disconnect(wagmiConfig);\n// this.connectedWallet = null;\n// this.walletType = null;\n// console.log('✅ Wallet disconnected successfully');\n// } catch (error) {\n// console.error('❌ Disconnect failed:', error);\n// }\n// }\n\n// // Switch chain using Wagmi\n// async switchChain(chainId) {\n// try {\n// await switchChain(wagmiConfig, { chainId });\n// console.log(`✅ Switched to chain ${chainId}`);\n// } catch (error) {\n// console.error(`❌ Chain switch failed:`, error);\n// throw error;\n// }\n// }\n// }\n\n// // Your existing logo mapping and helper functions (unchanged)\n// const CMC_LOGO_BASE_URL = 'https://s2.coinmarketcap.com/static/img/coins/64x64';\n\n// const CmcIds = {\n// bitcoin: 1,\n// ethereum: 1027,\n// bsc: 1839,\n// polygon: 3890,\n// tron: 1958,\n// solana: 5426,\n// algorand: 4030,\n// cardano: 2010,\n// avalanche: 5805,\n// fantom: 3513,\n// arbitrum: 11841,\n// optimism: 11840,\n// USDT: 825,\n// USDC: 3408,\n// BUSD: 4687,\n// DAI: 4943,\n// FRAX: 6952,\n// TUSD: 2563,\n// USDP: 5992,\n// USDD: 5994,\n// FDUSD: 26081,\n// PYUSD: 28295,\n// WBTC: 3717,\n// LINK: 1975,\n// UNI: 7083,\n// AAVE: 7278,\n// COMP: 5692,\n// YFI: 5864,\n// MKR: 1518,\n// SUSHI: 6758,\n// CRV: 6538,\n// SNX: 2586,\n// UMA: 5617,\n// BAL: 5728,\n// MANA: 1966,\n// SAND: 6210,\n// APE: 18876,\n// LDO: 8000,\n// GRT: 6719,\n// ENS: 13855,\n// RPL: 2943,\n// SHIB: 5994,\n// MATIC: 3890,\n// BNB: 1839,\n// ADA: 2010,\n// SOL: 5426,\n// DOT: 6636,\n// AVAX: 5805,\n// TRX: 1958,\n// ALGO: 4030,\n// FTM: 3513,\n// ARB: 11841,\n// OP: 11840,\n// \"1INCH\": 8104,\n// DYDX: 11156,\n// ICP: 8916,\n// FIL: 2280,\n// CAKE: 7186,\n// RUNE: 4157,\n// ALPHA: 7232,\n// BNT: 1727,\n// KNC: 1982,\n// ZRX: 1896,\n// REN: 2539,\n// LRC: 1934,\n// WETH: 2396,\n// WMATIC: 3890,\n// WBNB: 1839,\n// UST: 7129,\n// USTC: 7129,\n// LUSD: 8115,\n// MIM: 9681,\n// FEI: 8642,\n// TRIBE: 8741,\n// RAI: 8525,\n// SUSD: 2927,\n// };\n\n// const getCmcLogoUrl = (symbol) => {\n// if (!symbol) return null;\n\n// const directId = CmcIds[symbol.toUpperCase()];\n// if (directId) {\n// return `${CMC_LOGO_BASE_URL}/${directId}.png`;\n// }\n\n// return null;\n// };\n\n// const NetworkLogos = {\n// ethereum: 'https://s2.coinmarketcap.com/static/img/coins/64x64/1027.png',\n// bsc: 'https://s2.coinmarketcap.com/static/img/coins/64x64/1839.png',\n// tron: 'https://s2.coinmarketcap.com/static/img/coins/64x64/1958.png',\n// algorand: 'https://s2.coinmarketcap.com/static/img/coins/64x64/4030.png',\n// solana: 'https://s2.coinmarketcap.com/static/img/coins/64x64/5426.png',\n// polygon: 'https://s2.coinmarketcap.com/static/img/coins/64x64/28321.png',\n// arbitrum: 'https://s2.coinmarketcap.com/static/img/coins/64x64/11841.png',\n// avalanche: 'https://s2.coinmarketcap.com/static/img/coins/64x64/5805.png',\n// celo: 'https://s2.coinmarketcap.com/static/img/coins/64x64/5567.png',\n// optimism: 'https://s2.coinmarketcap.com/static/img/coins/64x64/11840.png',\n// eth: 'https://s2.coinmarketcap.com/static/img/coins/64x64/1027.png',\n// bnb: 'https://s2.coinmarketcap.com/static/img/coins/64x64/1839.png',\n// trx: 'https://s2.coinmarketcap.com/static/img/coins/64x64/1958.png',\n// algo: 'https://s2.coinmarketcap.com/static/img/coins/64x64/4030.png',\n// sol: 'https://s2.coinmarketcap.com/static/img/coins/64x64/5426.png',\n// matic: 'https://s2.coinmarketcap.com/static/img/coins/64x64/28321.png',\n// arb: 'https://s2.coinmarketcap.com/static/img/coins/64x64/11841.png',\n// avax: 'https://s2.coinmarketcap.com/static/img/coins/64x64/5805.png',\n// op: 'https://s2.coinmarketcap.com/static/img/coins/64x64/11840.png'\n// };\n\n// const getTokenLogoUrl = (symbol) => {\n// return getCmcLogoUrl(symbol);\n// };\n\n// // Your existing ModernDropdown component (unchanged)\n// const ModernDropdown = ({\n// options = [],\n// value,\n// onChange,\n// placeholder,\n// renderOption,\n// getOptionKey,\n// getOptionValue,\n// getSearchableText,\n// disabled = false\n// }) => {\n// const [isOpen, setIsOpen] = useState(false);\n// const [searchTerm, setSearchTerm] = useState('');\n// const [dropdownPosition, setDropdownPosition] = useState({ top: 0, left: 0, width: 400, maxHeight: 450 });\n// const dropdownRef = useRef(null);\n// const buttonRef = useRef(null);\n\n// const filteredOptions = options.filter(option => {\n// const searchableText = getSearchableText ? getSearchableText(option) : '';\n// return searchableText.toLowerCase().includes(searchTerm.toLowerCase());\n// });\n\n// const selectedOption = options.find(option => getOptionValue(option) === value);\n\n// const updateDropdownPosition = () => {\n// if (buttonRef.current) {\n// const viewportWidth = window.innerWidth;\n// const viewportHeight = window.innerHeight;\n// const scrollTop = window.pageYOffset || document.documentElement.scrollTop;\n// const scrollLeft = window.pageXOffset || document.documentElement.scrollLeft;\n\n// const dropdownWidth = Math.min(400, viewportWidth - 40);\n// const dropdownHeight = Math.min(450, viewportHeight - 100);\n\n// const centerX = viewportWidth / 2;\n// const centerY = viewportHeight / 2;\n\n// const left = centerX - (dropdownWidth / 2);\n// const top = centerY - (dropdownHeight / 2);\n\n// setDropdownPosition({\n// top: top + scrollTop,\n// left: left + scrollLeft,\n// width: dropdownWidth,\n// maxHeight: dropdownHeight\n// });\n// }\n// };\n\n// useEffect(() => {\n// const handleClickOutside = (event) => {\n// if (dropdownRef.current && !dropdownRef.current.contains(event.target) &&\n// buttonRef.current && !buttonRef.current.contains(event.target)) {\n// setIsOpen(false);\n// setSearchTerm('');\n// }\n// };\n\n// const handleScroll = () => {\n// if (isOpen) {\n// updateDropdownPosition();\n// }\n// };\n\n// const handleResize = () => {\n// if (isOpen) {\n// updateDropdownPosition();\n// }\n// };\n\n// if (isOpen) {\n// updateDropdownPosition();\n// document.addEventListener('mousedown', handleClickOutside);\n// window.addEventListener('scroll', handleScroll, true);\n// window.addEventListener('resize', handleResize);\n// }\n\n// return () => {\n// document.removeEventListener('mousedown', handleClickOutside);\n// window.removeEventListener('scroll', handleScroll, true);\n// window.removeEventListener('resize', handleResize);\n// };\n// }, [isOpen]);\n\n// const handleToggle = () => {\n// if (!disabled) {\n// if (!isOpen) {\n// updateDropdownPosition();\n// }\n// setIsOpen(!isOpen);\n// }\n// };\n\n// const dropdownContent = isOpen && (\n// <>\n// <div\n// className=\"fixed inset-0 bg-black bg-opacity-30 transition-opacity\"\n// style={{ zIndex: 999998 }}\n// onClick={() => {\n// setIsOpen(false);\n// setSearchTerm('');\n// }}\n// />\n\n// <div\n// ref={dropdownRef}\n// className=\"fixed bg-white border-2 border-gray-200 rounded-3xl shadow-2xl overflow-hidden\"\n// style={{\n// top: dropdownPosition.top,\n// left: dropdownPosition.left,\n// width: dropdownPosition.width,\n// maxHeight: dropdownPosition.maxHeight,\n// zIndex: 999999,\n// transform: 'translateZ(0)',\n// boxShadow: '0 25px 50px -12px rgba(0, 0, 0, 0.25), 0 0 0 1px rgba(0, 0, 0, 0.05)'\n// }}\n// >\n// <div className=\"flex items-center justify-between p-4 border-b border-gray-200 bg-gradient-to-r from-[#7042D2]/10 to-purple-50\">\n// <h3 className=\"text-lg font-semibold text-[#7042D2]\" style={{ fontFamily: 'Bricolage Grotesque, sans-serif' }}>\n// {placeholder || 'Select Option'}\n// </h3>\n// <button\n// onClick={() => {\n// setIsOpen(false);\n// setSearchTerm('');\n// }}\n// className=\"text-gray-500 hover:text-gray-700 transition-colors p-1 rounded-full hover:bg-gray-100\"\n// >\n// <svg xmlns=\"http://www.w3.org/2000/svg\" className=\"h-5 w-5\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n// <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M6 18L18 6M6 6l12 12\" />\n// </svg>\n// </button>\n// </div>\n\n// <div className=\"p-4 border-b border-gray-200 bg-gray-50\">\n// <input\n// type=\"text\"\n// placeholder=\"Search networks and tokens...\"\n// value={searchTerm}\n// onChange={(e) => setSearchTerm(e.target.value)}\n// className=\"w-full p-3 border border-gray-300 rounded-xl focus:outline-none focus:ring-2 focus:ring-[#7042D2]/20 focus:border-[#7042D2] text-sm\"\n// style={{ fontFamily: 'Bricolage Grotesque, sans-serif' }}\n// autoFocus\n// />\n// </div>\n\n// <div\n// className=\"overflow-y-auto custom-scrollbar\"\n// style={{\n// maxHeight: `${(dropdownPosition.maxHeight || 450) - 180}px`,\n// minHeight: '200px'\n// }}\n// >\n// {filteredOptions.length === 0 ? (\n// <div className=\"p-8 text-gray-500 text-center\" style={{ fontFamily: 'Bricolage Grotesque, sans-serif' }}>\n// <div className=\"text-4xl mb-3\">🔍</div>\n// <div className=\"text-lg mb-2\">No options found</div>\n// <div className=\"text-sm text-gray-400\">Try a different search term</div>\n// </div>\n// ) : (\n// <>\n// <div className=\"px-4 py-3 bg-gray-50 border-b border-gray-100 text-sm text-gray-600\" style={{ fontFamily: 'Bricolage Grotesque, sans-serif' }}>\n// <span className=\"font-semibold\">{filteredOptions.length}</span> option{filteredOptions.length !== 1 ? 's' : ''} available\n// </div>\n\n// <div className=\"p-2\">\n// {filteredOptions.map((option) => (\n// <button\n// key={getOptionKey(option)}\n// type=\"button\"\n// onClick={() => {\n// onChange(getOptionValue(option));\n// setIsOpen(false);\n// setSearchTerm('');\n// }}\n// className={`w-full p-4 text-left hover:bg-[#7042D2]/10 transition-all duration-200 rounded-xl mb-2 last:mb-0 ${getOptionValue(option) === value\n// ? 'bg-[#7042D2]/20 text-[#7042D2] border-2 border-[#7042D2]/30'\n// : 'text-gray-800 border-2 border-transparent hover:border-[#7042D2]/20'\n// }`}\n// style={{ fontFamily: 'Bricolage Grotesque, sans-serif' }}\n// >\n// {renderOption(option)}\n// </button>\n// ))}\n// </div>\n// </>\n// )}\n// </div>\n\n// <div className=\"p-3 bg-gradient-to-r from-gray-50 to-gray-100 border-t border-gray-200 text-center\">\n// <div className=\"text-xs text-gray-500\" style={{ fontFamily: 'Bricolage Grotesque, sans-serif' }}>\n// {filteredOptions.length > 5 ? '↕️ Scroll to see more options' : '✨ Select your preferred option'}\n// </div>\n// </div>\n// </div>\n// </>\n// );\n\n// return (\n// <>\n// <div className=\"relative\">\n// <button\n// ref={buttonRef}\n// type=\"button\"\n// onClick={handleToggle}\n// disabled={disabled}\n// className={`w-full p-4 border-2 rounded-2xl bg-gradient-to-r from-white to-gray-50 text-left focus:outline-none focus:ring-3 focus:ring-[#7042D2]/20 focus:border-[#7042D2] transition-all duration-300 ease-out shadow-lg hover:shadow-xl ${disabled ? 'opacity-50 cursor-not-allowed' : 'hover:border-[#7042D2]/50 cursor-pointer'\n// } ${isOpen ? 'border-[#7042D2] ring-3 ring-[#7042D2]/20' : 'border-gray-200'}`}\n// style={{\n// minHeight: '60px',\n// fontFamily: 'Bricolage Grotesque, sans-serif',\n// fontSize: '16px',\n// fontWeight: '500'\n// }}\n// >\n// <div className=\"flex items-center justify-between\">\n// <div className=\"flex items-center space-x-3\">\n// {selectedOption ? renderOption(selectedOption) : (\n// <span className=\"text-gray-500\">{placeholder}</span>\n// )}\n// </div>\n// <div className={`transform transition-transform duration-200 ${isOpen ? 'rotate-180' : ''}`}>\n// <svg xmlns=\"http://www.w3.org/2000/svg\" className=\"h-5 w-5 text-[#7042D2]\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n// <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M19 9l-7 7-7-7\" />\n// </svg>\n// </div>\n// </div>\n// </button>\n// </div>\n\n// {typeof document !== 'undefined' && document.body &&\n// ReactDOM.createPortal(dropdownContent, document.body)\n// }\n\n// <style jsx>{`\n// .custom-scrollbar {\n// scrollbar-width: thin;\n// scrollbar-color: #7042D2 #f1f1f1;\n// }\n// .custom-scrollbar::-webkit-scrollbar {\n// width: 12px;\n// }\n// .custom-scrollbar::-webkit-scrollbar-track {\n// background: #f8f9fa;\n// border-radius: 10px;\n// margin: 4px;\n// }\n// .custom-scrollbar::-webkit-scrollbar-thumb {\n// background: linear-gradient(180deg, #7042D2 0%, #5b34b1 100%);\n// border-radius: 10px;\n// border: 2px solid #f8f9fa;\n// }\n// .custom-scrollbar::-webkit-scrollbar-thumb:hover {\n// background: linear-gradient(180deg, #5b34b1 0%, #4c2a93 100%);\n// }\n// .custom-scrollbar::-webkit-scrollbar-corner {\n// background: #f8f9fa;\n// }\n// `}</style>\n// </>\n// );\n// };\n\n// // Enhanced Wallet Selection Component with Beautiful Dropdown\n// const WagmiWalletSelector = ({\n// selectedNetwork,\n// onWalletSelect,\n// onConnect,\n// connectedWallet,\n// loading\n// }) => {\n// const [selectedWalletType, setSelectedWalletType] = useState(null);\n// const walletManager = useRef(new WagmiWalletManager());\n\n// const getAvailableWallets = () => {\n// if (!selectedNetwork) return [];\n\n// // Only show wallets for EVM-compatible chains\n// if (['ethereum', 'bsc', 'polygon', 'arbitrum', 'optimism', 'avalanche'].includes(selectedNetwork.shortName)) {\n// const detectedWallets = walletManager.current.getAvailableWallets();\n\n// console.log('🔍 WAGMI: Detected wallets:', detectedWallets);\n\n// return detectedWallets;\n// }\n\n// return [];\n// };\n\n// const availableWallets = getAvailableWallets();\n\n// const handleWalletSelection = async (walletType) => {\n// setSelectedWalletType(walletType);\n// onWalletSelect(walletType);\n// await onConnect(walletType);\n// };\n\n// // Render wallet option for dropdown\n// const renderWalletOption = (wallet) => {\n// return (\n// <div className=\"flex items-center space-x-3\">\n// <div className=\"text-2xl\">{wallet.icon}</div>\n// <div className=\"flex-1\">\n// <div className=\"font-semibold text-gray-800 flex items-center\">\n// {wallet.name}\n// {['rabby', 'zerion', 'phantom'].includes(wallet.type) && (\n// <span className=\"ml-2 px-2 py-1 bg-blue-100 text-blue-700 text-xs rounded-full\">\n// NEW\n// </span>\n// )}\n// {connectedWallet?.walletType === wallet.type && (\n// <span className=\"ml-2 px-2 py-1 bg-green-100 text-green-700 text-xs rounded-full\">\n// CONNECTED\n// </span>\n// )}\n// </div>\n// <div className=\"text-sm text-gray-500\">\n// {connectedWallet?.walletType === wallet.type\n// ? `Connected • ${connectedWallet.account?.slice(0, 6)}...${connectedWallet.account?.slice(-4)}`\n// : wallet.description\n// }\n// </div>\n// </div>\n// {loading && selectedWalletType === wallet.type && (\n// <div className=\"animate-spin rounded-full h-5 w-5 border-b-2 border-[#7042D2]\"></div>\n// )}\n// </div>\n// );\n// };\n\n// if (!selectedNetwork) {\n// return (\n// <div className=\"text-center p-4\">\n// <p className=\"text-gray-500\">Please select a network first</p>\n// </div>\n// );\n// }\n\n// if (availableWallets.length === 0) {\n// return (\n// <div className=\"text-center p-4\">\n// <p className=\"text-gray-500 mb-4\">No compatible wallets found for {selectedNetwork.name}</p>\n// <div className=\"p-3 bg-amber-50 rounded-lg border border-amber-200\">\n// <div className=\"text-sm text-amber-800\" style={{ fontFamily: 'Bricolage Grotesque, sans-serif' }}>\n// <div className=\"font-medium mb-2\">Install a compatible wallet:</div>\n// <div className=\"space-y-1 text-xs\">\n// <div>• <a href=\"https://metamask.io\" target=\"_blank\" rel=\"noopener noreferrer\" className=\"text-amber-700 underline hover:text-amber-900\">Install MetaMask</a></div>\n// <div>• <a href=\"https://rabby.io\" target=\"_blank\" rel=\"noopener noreferrer\" className=\"text-amber-700 underline hover:text-amber-900\">Install Rabby Wallet</a></div>\n// <div>• <a href=\"https://wallet.coinbase.com/\" target=\"_blank\" rel=\"noopener noreferrer\" className=\"text-amber-700 underline hover:text-amber-900\">Install Coinbase Wallet</a></div>\n// <div>• <a href=\"https://zerion.io/wallet\" target=\"_blank\" rel=\"noopener noreferrer\" className=\"text-amber-700 underline hover:text-amber-900\">Install Zerion Wallet</a></div>\n// </div>\n// </div>\n// </div>\n// </div>\n// );\n// }\n\n// return (\n// <div className=\"space-y-4\">\n// <label className=\"block text-sm font-medium text-gray-700\" style={{ fontFamily: 'Bricolage Grotesque, sans-serif' }}>\n// Select Wallet for {selectedNetwork.name}\n// </label>\n\n// {/* Beautiful Wallet Dropdown */}\n// <ModernDropdown\n// options={availableWallets}\n// value={connectedWallet?.walletType || selectedWalletType || ''}\n// onChange={handleWalletSelection}\n// placeholder=\"Choose your wallet...\"\n// renderOption={renderWalletOption}\n// getOptionKey={(wallet) => wallet.type}\n// getOptionValue={(wallet) => wallet.type}\n// getSearchableText={(wallet) => `${wallet.name} ${wallet.description}`}\n// disabled={loading}\n// />\n\n// {/* Connection status */}\n// {connectedWallet && (\n// <div className=\"p-3 bg-green-50 rounded-lg border border-green-200\">\n// <div className=\"text-sm text-green-800 text-center\" style={{ fontFamily: 'Bricolage Grotesque, sans-serif' }}>\n// <div className=\"font-medium\">Wallet Connected</div>\n// <div className=\"text-xs mt-1 flex items-center justify-center space-x-2\">\n// <span className=\"text-2xl\">\n// {availableWallets.find(w => w.type === connectedWallet.walletType)?.icon}\n// </span>\n// <span>\n// {connectedWallet.account?.slice(0, 6)}...{connectedWallet.account?.slice(-4)}\n// ({availableWallets.find(w => w.type === connectedWallet.walletType)?.name})\n// </span>\n// </div>\n// </div>\n// </div>\n// )}\n\n// {/* Debug info - made more compact */}\n// <div className=\"text-xs text-gray-500\" style={{ fontFamily: 'Bricolage Grotesque, sans-serif' }}>\n// {availableWallets.length} wallet(s) detected - {availableWallets.map(w => w.name).join(', ')}\n// </div>\n// </div>\n// );\n// };\n\n// // Your existing components (EnhancedQRCode, EnhancedPaymentStatus, ScreenTransition) remain unchanged...\n// const EnhancedQRCode = ({\n// walletAddress,\n// amount,\n// currency,\n// network,\n// theme = 'light'\n// }) => {\n// const [qrData, setQrData] = useState('');\n// const [isGenerating, setIsGenerating] = useState(true);\n\n// useEffect(() => {\n// const generateQRData = () => {\n// setIsGenerating(true);\n// setTimeout(() => {\n// setQrData(`${walletAddress}?amount=${amount}¤cy=${currency}&network=${network}`);\n// setIsGenerating(false);\n// }, 1000);\n// };\n\n// if (walletAddress) {\n// generateQRData();\n// }\n// }, [walletAddress, amount, currency, network]);\n\n// const formatWalletAddress = (address) => {\n// if (!address || address.length <= 16) return address;\n// return `${address.slice(0, 6)}...${address.slice(-4)}`;\n// };\n\n// return (\n// <div className=\"flex flex-col items-center\">\n// <div className=\"p-4 rounded-lg bg-white mb-3 shadow-sm border\">\n// {isGenerating ? (\n// <div className=\"flex items-center justify-center\" style={{ width: 200, height: 200 }}>\n// <div className=\"text-center\">\n// <div className=\"animate-spin rounded-full h-8 w-8 border-b-2 border-purple-600 mx-auto mb-2\"></div>\n// <div className=\"text-sm text-gray-600\">Generating QR Code...</div>\n// </div>\n// </div>\n// ) : (\n// <div className=\"flex items-center justify-center bg-gray-100 rounded-lg\" style={{ width: 200, height: 200 }}>\n// <div className=\"text-center p-4\">\n// <div className=\"text-2xl mb-2\">📱</div>\n// <div className=\"text-sm text-gray-600\">QR Code</div>\n// <div className=\"text-xs text-gray-500 mt-1\">Scan to pay</div>\n// </div>\n// </div>\n// )}\n// </div>\n\n// <div className=\"text-center text-sm text-gray-700 mb-4\">\n// <p className=\"font-semibold text-gray-800 flex items-center justify-center\">\n// <svg xmlns=\"http://www.w3.org/2000/svg\" className=\"h-4 w-4 mr-1\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n// <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M12 4v1m6 11h2m-6 0h-2v4m0-11v3m0 0h.01M12 12h4.01M12 12h-4.01M12 12V8.01\" />\n// </svg>\n// Scan to Pay with {currency}\n// </p>\n// <p className=\"text-xs text-gray-500 mt-1\">\n// Scan with your {network} wallet app\n// </p>\n// </div>\n\n// <div className=\"w-full mb-4 p-3 bg-gray-50 rounded-lg\">\n// <div className=\"flex justify-between items-center\">\n// <span className=\"text-sm font-medium text-gray-700\">Amount to Pay:</span>\n// <span className=\"text-lg font-bold text-[#7042D2]\">{amount} {currency}</span>\n// </div>\n// <div className=\"flex justify-between items-center mt-1\">\n// <span className=\"text-xs text-gray-500\">Network:</span>\n// <span className=\"text-xs font-medium text-gray-700\">{network}</span>\n// </div>\n// <div className=\"flex justify-between items-center mt-1\">\n// <span className=\"text-xs text-gray-500\">Recipient:</span>\n// <span className=\"text-xs font-mono text-gray-700\">{formatWalletAddress(walletAddress)}</span>\n// </div>\n// </div>\n\n// <div className=\"w-full\">\n// <div className=\"p-3 rounded bg-blue-50 border border-blue-200\">\n// <h4 className=\"text-sm font-medium mb-2 text-blue-800 flex items-center\">\n// <svg xmlns=\"http://www.w3.org/2000/svg\" className=\"h-4 w-4 mr-1\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n// <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z\" />\n// </svg>\n// Payment Instructions\n// </h4>\n// <ol className=\"text-xs space-y-1 text-blue-700\">\n// <li>1. Open your crypto wallet app</li>\n// <li>2. Scan the QR code above</li>\n// <li>3. Send exactly <strong>{amount} {currency}</strong></li>\n// <li>4. Click \"I have sent the payment\" button below</li>\n// </ol>\n// </div>\n// </div>\n// </div>\n// );\n// };\n\n// // Enhanced Payment Status Component with processing step\n// const EnhancedPaymentStatus = ({\n// status,\n// message,\n// theme = 'light',\n// payment = null,\n// transactionHash = null,\n// selectedPaymentMethod = null,\n// merchantName = 'Merchant',\n// onClose = null\n// }) => {\n// const [copiedHash, setCopiedHash] = useState(false);\n// const [processingProgress, setProcessingProgress] = useState(0);\n\n// // Handle processing progress animation\n// useEffect(() => {\n// if (status === 'processing') {\n// const interval = setInterval(() => {\n// setProcessingProgress(prev => {\n// if (prev >= 90) return prev; // Don't go to 100% until success\n// return prev + Math.random() * 15;\n// });\n// }, 500);\n\n// return () => clearInterval(interval);\n// }\n// }, [status]);\n\n// const copyTransactionHash = async () => {\n// if (transactionHash) {\n// try {\n// await navigator.clipboard.writeText(transactionHash);\n// setCopiedHash(true);\n// setTimeout(() => setCopiedHash(false), 2000);\n// } catch (err) {\n// console.error('Failed to copy transaction hash:', err);\n// }\n// }\n// };\n\n// const formatTransactionHash = (hash) => {\n// if (!hash) return '';\n// if (hash.length <= 16) return hash;\n// return `${hash.slice(0, 8)}...${hash.slice(-8)}`;\n// };\n\n// const renderIcon = () => {\n// switch (status) {\n// case 'processing':\n// return (\n// <div className=\"relative\">\n// <div className=\"animate-spin rounded-full h-12 w-12 border-4 border-t-[#7042D2] border-blue-500/20\"></div>\n// <div className=\"absolute inset-0 flex items-center justify-center\">\n// <div className=\"w-6 h-6 bg-[#7042D2] rounded-full animate-pulse\"></div>\n// </div>\n// </div>\n// );\n// case 'success':\n// return (\n// <div className=\"rounded-full h-16 w-16 bg-green-500 flex items-center justify-center animate-bounce\">\n// <svg\n// xmlns=\"http://www.w3.org/2000/svg\"\n// className=\"h-10 w-10 text-white\"\n// fill=\"none\"\n// viewBox=\"0 0 24 24\"\n// stroke=\"currentColor\"\n// strokeWidth={3}\n// >\n// <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M5 13l4 4L19 7\" />\n// </svg>\n// </div>\n// );\n// case 'error':\n// return (\n// <div className=\"rounded-full h-12 w-12 bg-red-100 flex items-center justify-center\">\n// <svg\n// xmlns=\"http://www.w3.org/2000/svg\"\n// className=\"h-8 w-8 text-red-500\"\n// fill=\"none\"\n// viewBox=\"0 0 24 24\"\n// stroke=\"currentColor\"\n// strokeWidth={2}\n// >\n// <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M6 18L18 6M6 6l12 12\" />\n// </svg>\n// </div>\n// );\n// default:\n// return null;\n// }\n// };\n\n// // Enhanced processing screen\n// if (status === 'processing') {\n// return (\n// <div className=\"flex flex-col items-center justify-center py-6 px-4\">\n// <div className=\"mb-6\">{renderIcon()}</div>\n\n// <h3 className=\"text-xl font-bold mb-3 text-gray-900\" style={{ fontFamily: 'Bricolage Grotesque, sans-serif' }}>\n// Processing Payment\n// </h3>\n\n// <p className=\"text-center text-gray-600 mb-6\" style={{ fontFamily: 'Bricolage Grotesque, sans-serif' }}>\n// Your transaction has been sent to the blockchain and is being processed...\n// </p>\n\n// {/* Progress Bar */}\n// <div className=\"w-full max-w-xs mb-4\">\n// <div className=\"bg-gray-200 rounded-full h-3\">\n// <div\n// className=\"bg-[#7042D2] h-3 rounded-full transition-all duration-500 ease-out\"\n// style={{ width: `${processingProgress}%` }}\n// ></div>\n// </div>\n// <div className=\"text-center mt-2 text-sm text-gray-500\" style={{ fontFamily: 'Bricolage Grotesque, sans-serif' }}>\n// Processing... {Math.round(processingProgress)}%\n// </div>\n// </div>\n\n// {/* Processing Steps */}\n// <div className=\"text-center space-y-2\">\n// <div className=\"flex items-center justify-center space-x-2\">\n// <div className=\"w-2 h-2 bg-green-500 rounded-full animate-pulse\"></div>\n// <span className=\"text-sm text-gray-600\">Transaction submitted</span>\n// </div>\n// <div className=\"flex items-center justify-center space-x-2\">\n// <div className=\"w-2 h-2 bg-yellow-500 rounded-full animate-pulse\"></div>\n// <span className=\"text-sm text-gray-600\">Confirming on blockchain...</span>\n// </div>\n// <div className=\"flex items-center justify-center space-x-2\">\n// <div className=\"w-2 h-2 bg-gray-300 rounded-full\"></div>\n// <span className=\"text-sm text-gray-400\">Finalizing payment...</span>\n// </div>\n// </div>\n\n// <div className=\"mt-6 p-3 bg-blue-50 rounded-lg border border-blue-200\">\n// <p className=\"text-xs text-blue-800 text-center\">\n// Please don't close this window. This usually takes 10-30 seconds.\n// </p>\n// </div>\n// </div>\n// );\n// }\n\n// if (status === 'success') {\n// return (\n// <div className=\"flex flex-col items-center justify-center py-6 px-4\">\n// <div className=\"mb-6\">{renderIcon()}</div>\n\n// <h3 className=\"text-2xl font-bold mb-3 text-gray-900\" style={{ fontFamily: 'Bricolage Grotesque, sans-serif' }}>\n// Payment Successful!\n// </h3>\n\n// {payment && selectedPaymentMethod && (\n// <p className=\"text-center max-w-[235px] mb-6 text-gray-600\" style={{ fontFamily: 'Bricolage Grotesque, sans-serif' }}>\n// Your payment of <span className='text-[#7042D2] font-semibold'>{payment.totalAmount || payment.amount} {selectedPaymentMethod.currency}</span> has been completed.\n// </p>\n// )}\n\n// {transactionHash && (\n// <div className=\"w-full mb-6 px-4\">\n// <p className=\"text-sm font-medium mb-2 text-gray-700\" style={{ fontFamily: 'Bricolage Grotesque, sans-serif' }}>\n// Transaction Hash\n// </p>\n// <div\n// className=\"flex items-center justify-between p-3 rounded-lg border cursor-pointer transition-colors bg-gray-50 border-gray-200 hover:bg-gray-100\"\n// onClick={copyTransactionHash}\n// >\n// <span className=\"font-mono text-sm text-gray-700\">\n// {formatTransactionHash(transactionHash)}\n// </span>\n// <div className=\"flex items-center\">\n// {copiedHash ? (\n// <span className=\"text-green-500 text-xs font-medium mr-2\">Copied!</span>\n// ) : null}\n// <svg\n// xmlns=\"http://www.w3.org/2000/svg\"\n// className=\"h-4 w-4 text-gray-500\"\n// fill=\"none\"\n// viewBox=\"0 0 24 24\"\n// stroke=\"currentColor\"\n// >\n// <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z\" />\n// </svg>\n// </div>\n// </div>\n// </div>\n// )}\n\n// {onClose && (\n// <button\n// onClick={onClose}\n// className=\"w-full py-3 px-4 bg-[#7042D2] text-white font-semibold rounded-2xl text-lg shadow-md hover:bg-[#5b34b1] transition-colors\"\n// style={{ fontFamily: 'Bricolage Grotesque, sans-serif' }}\n// >\n// Close\n// </button>\n// )}\n// </div>\n// );\n// }\n\n// return (\n// <div className=\"flex flex-col items-center justify-center py-6\">\n// <div className=\"mb-4\">{renderIcon()}</div>\n// <h3 className=\"text-xl font-bold mb-2 text-gray-900\">\n// {status === 'processing' ? 'Processing Payment' : status === 'error' ? 'Payment Failed' : 'Unknown Status'}\n// </h3>\n// <p className=\"text-center text-gray-600\">{message}</p>\n// </div>\n// );\n// };\n\n// // Screen transition wrapper\n// const ScreenTransition = ({\n// currentStep,\n// targetStep,\n// children,\n// className = \"\",\n// duration = 300\n// }) => {\n// const [isVisible, setIsVisible] = useState(currentStep === targetStep);\n// const [shouldRender, setShouldRender] = useState(currentStep === targetStep);\n\n// useEffect(() => {\n// if (currentStep === targetStep) {\n// setShouldRender(true);\n// setTimeout(() => setIsVisible(true), 10);\n// } else {\n// setIsVisible(false);\n// setTimeout(() => setShouldRender(false), duration);\n// }\n// }, [currentStep, targetStep, duration]);\n\n// if (!shouldRender) return null;\n\n// return (\n// <div\n// className={`\n// transition-all duration-300 ease-out\n// ${isVisible\n// ? 'transform translate-y-0 opacity-100'\n// : 'transform translate-y-full opacity-0'\n// }\n// ${className}\n// `}\n// style={{\n// transitionDuration: `${duration}ms`\n// }}\n// >\n// {children}\n// </div>\n// );\n// };\n\n// // Main Enhanced Component with Wagmi multi-wallet support\n// const EnhancedSimpleCoinleyPayment = ({\n// apiKey,\n// apiSecret,\n// apiUrl,\n// config,\n// onSuccess,\n// onError,\n// onClose,\n// isOpen,\n// theme = 'light'\n// }) => {\n// const [currentStep, setCurrentStep] = useState('method');\n// const [networks, setNetworks] = useState([]);\n// const [tokens, setTokens] = useState([]);\n// const [selectedNetwork, setSelectedNetwork] = useState(null);\n// const [selectedToken, setSelectedToken] = useState(null);\n// const [paymentMethod, setPaymentMethod] = useState(null);\n// const [paymentData, setPaymentData] = useState(null);\n// const [loading, setLoading] = useState(false);\n// const [error, setError] = useState('');\n\n// // Enhanced Wagmi wallet management\n// const walletManager = useRef(new WagmiWalletManager());\n// const [selectedWalletType, setSelectedWalletType] = useState(null);\n// const [connectedWallet, setConnectedWallet] = useState(null);\n\n// const [processing, setProcessing] = useState(false);\n// const [paymentType, setPaymentType] = useState('wallet');\n\n// const [actualTransactionHash, setActualTransactionHash] = useState(null);\n\n// const api = useRef(new SimplePaymentAPI(apiUrl, apiKey, apiSecret));\n\n// useEffect(() => {\n// if (isOpen) {\n// loadData();\n// resetState();\n// }\n// }, [isOpen]);\n\n// const resetState = () => {\n// setCurrentStep('method');\n// setSelectedNetwork(null);\n// setSelectedToken(null);\n// setPaymentMethod(null);\n// setPaymentData(null);\n// setError('');\n// setConnectedWallet(null);\n// setSelectedWalletType(null);\n// setProcessing(false);\n// setActualTransactionHash(null);\n\n// // Reset Wagmi wallet manager\n// walletManager.current.disconnect();\n// setPaymentType('wallet');\n// };\n\n// const loadData = async () => {\n// try {\n// setLoading(true);\n// setError('');\n\n// console.log('🔄 Loading networks and tokens...');\n// const [networksRes, tokensRes] = await Promise.all([\n// api.current.getNetworks(),\n// api.current.getTokens()\n// ]);\n\n// // Remove duplicate networks\n// const uniqueNetworks = networksRes.networks?.reduce((acc, network) => {\n// const key = `${network.id}-${network.shortName}`;\n// if (!acc.some(n => `${n.id}-${n.shortName}` === key)) {\n// acc.push(network);\n// }\n// return acc;\n// }, []) || [];\n\n// // Remove duplicate tokens\n// const uniqueTokens = tokensRes.stablecoins?.reduce((acc, token) => {\n// const key = `${token.id}-${token.symbol}-${token.networkId || token.Network?.shortName}`;\n// if (!acc.some(t => `${t.id}-${t.symbol}-${t.networkId || t.Network?.shortName}` === key)) {\n// acc.push(token);\n// }\n// return acc;\n// }, []) || [];\n\n// setNetworks(uniqueNetworks);\n// setTokens(uniqueTokens);\n\n// console.log('✅ Loaded unique networks:', uniqueNetworks.length);\n// console.log('✅ Loaded unique tokens:', uniqueTokens.length);\n\n// } catch (err) {\n// console.error('Failed to load data:', err);\n// setError('Failed to load payment options. Using fallback data.');\n// } finally {\n// setLoading(false);\n// }\n// };\n\n// // Handle wallet selection\n// const handleWalletSelection = (walletType) => {\n// setSelectedWalletType(walletType);\n// console.log(`📱 Selected wallet type: ${walletType}`);\n// };\n\n// // Connect to selected wallet using Wagmi\n// const connectWallet = async (walletType = selectedWalletType) => {\n// if (!walletType) {\n// setError('Please select a wallet type first');\n// return;\n// }\n\n// try {\n// setLoading(true);\n// setError('');\n\n// console.log(`🔗 Connecting to ${walletType} wallet ...`);\n// const connection = await walletManager.current.connect(walletType);\n\n// setConnectedWallet(connection);\n// setSelectedWalletType(walletType);\n\n// console.log(`✅ ${walletType} wallet connected successfully:`, connection.account);\n\n// } catch (err) {\n// console.error(`${walletType} wallet connection failed:`, err);\n// setError(err.message);\n// } finally {\n// setLoading(false);\n// }\n// };\n\n// const createPayment = async () => {\n// try {\n// setLoading(true);\n// setError('');\n\n// const paymentPayload = {\n// amount: config.amount,\n// currency: selectedToken.symbol,\n// network: selectedNetwork.shortName,\n// customerEmail: config.customerEmail,\n// callbackUrl: config.callbackUrl,\n// metadata: {\n// ...config.metadata,\n// merchantWalletAddresses: config.merchantWalletAddresses,\n// paymentMethod,\n// selectedNetwork: selectedNetwork.shortName,\n// selectedToken: selectedToken.symbol,\n// walletType: selectedWalletType,\n// wagmiEnabled: true\n// }\n// };\n\n// console.log('🔄 Creating payment:', paymentPayload);\n// const payment = await api.current.createPayment(paymentPayload);\n// setPaymentData(payment.payment);\n\n// console.log('✅ Payment created:', payment.payment.id);\n\n// setCurrentStep('confirm');\n\n// } catch (err) {\n// console.error('Payment creation failed:', err);\n// setError(err.message);\n// } finally {\n// setLoading(false);\n// }\n// };\n\n// // Send transaction using Wagmi\n// const sendTransaction = async () => {\n// console.log('STEP 1: sendTransaction function started');\n\n// if (!walletManager.current.isConnected()) {\n// setError('No wallet connected');\n// return;\n// }\n\n// try {\n// console.log('STEP 2: Starting transaction process');\n// setProcessing(true);\n// setError('');\n\n// const recipientAddress = paymentData.metadata?.recipientWallet ||\n// config.merchantWalletAddresses?.[selectedNetwork.shortName];\n\n// console.log('STEP 3: Recipient address found:', recipientAddress);\n\n// if (!recipientAddress) {\n// throw new Error('Merchant wallet address not found');\n// }\n\n// console.log(`Preparing transaction to:`, recipientAddress);\n\n// let txParams;\n\n// // Handle EVM transactions using Wagmi\n// if (selectedToken.contractAddress) {\n// // ERC-20 token transaction\n// const decimals = selectedToken.decimals || 6;\n// const amount = Math.floor(paymentData.totalAmount * Math.pow(10, decimals));\n\n// const methodId = '0xa9059cbb';\n// const recipientPadded = recipientAddress.slice(2).toLowerCase().padStart(64, '0');\n// const amountPadded = amount.toString(16).padStart(64, '0');\n// const data = `${methodId}${recipientPadded}${amountPadded}`;\n\n// txParams = {\n// to: selectedToken.contractAddress,\n// data: data,\n// value: '0x0'\n// };\n\n// console.log(`Wagmi ERC-20 Transaction:`, {\n// token: selectedToken.symbol,\n// amount: paymentData.totalAmount,\n// amountWithDecimals: amount,\n// to: selectedToken.contractAddress,\n// recipient: recipientAddress\n// });\n\n// } else {\n// // Native token transaction\n// const value = Math.floor(paymentData.totalAmount * Math.pow(10, 18));\n// txParams = {\n// to: recipientAddress,\n// value: `0x${value.toString(16)}`\n// };\n\n// console.log(`Wagmi Native Transaction:`, {\n// amount: paymentData.totalAmount,\n// to: recipientAddress\n// });\n// }\n\n// console.log('STEP 4: About to show processing screen');\n// // First show processing step\n// setCurrentStep('processing');\n\n// console.log('STEP 5: About to send transaction via Wagmi');\n// // Send transaction using Wagmi wallet manager\n// const txHash = await walletManager.current.sendTransaction(txParams);\n\n// console.log(`✅ REAL TRANSACTION SENT! Hash:`, txHash);\n\n// // ✅ CRITICAL: Store the real transaction hash\n// setActualTransactionHash(txHash);\n\n// console.log('STEP 6: Transaction completed, hash:', txHash);\n\n// // ✅ CRITICAL: Call processPayment API using the proper method with REAL hash\n// console.log('STEP 7: About to call processPayment API with REAL transaction hash');\n// try {\n// console.log('Calling processPayment with REAL data:', {\n// paymentId: paymentData.id,\n// transactionHash: txHash, // ✅ Using the REAL hash\n// network: selectedNetwork.shortName,\n// senderAddress: connectedWallet.account\n// });\n\n// console.log('STEP 8: Making API request with REAL transaction hash...');\n\n// console.log('🚨 ABOUT TO CALL PROCESS ENDPOINT');\n// // console.log('API URL:', `http://localhost:9000/api/payments/process`);\n// console.log('API URL:', `https://talented-mercy-production.up.railway.app/api/payments/process`);\n// console.log('Payload:', {\n// paymentId: paymentData.id,\n// transactionHash: txHash,\n// network: selectedNetwork.shortName,\n// senderAddress: connectedWallet.account\n// });\n\n\n// // Use the proper processPayment method with REAL transaction hash\n// const processResult = await api.current.processPayment(\n// paymentData.id,\n// txHash, // ✅ REAL transaction hash here\n// selectedNetwork.shortName,\n// connectedWallet.account\n// );\n\n// console.log('✅ Payment status updated on server with REAL hash:', processResult);\n\n// // Check if the response indicates success\n// if (processResult.success) {\n// console.log('✅ Server confirmed payment processing successful with REAL hash');\n// } else {\n// console.error('❌ Server returned unsuccessful response:', processResult);\n// }\n\n// console.log('STEP 9: API response received:', processResult);\n// } catch (processError) {\n// console.error('STEP 9 ERROR: API call failed:', processError);\n// console.error('❌ Failed to update payment status - FULL ERROR:', processError);\n// console.error('❌ Error message:', processError.message);\n// console.error('❌ Error stack:', processError.stack);\n// // Don't fail the payment flow since the transaction succeeded\n// }\n\n// console.log('STEP 10: About to set timeout for success screen');\n\n// // Show success screen with REAL transaction hash\n// setTimeout(() => {\n// console.log('STEP 11: Showing success screen with REAL hash and calling onSuccess');\n// setCurrentStep('success');\n\n// // Call the onSuccess callback with the REAL transaction hash\n// onSuccess?.(paymentData.id, txHash, { // ✅ REAL hash passed to callback\n// network: selectedNetwork.name,\n// currency: selectedToken.symbol,\n// amount: paymentData.totalAmount,\n// method: paymentMethod,\n// walletType: selectedWalletType,\n// wagmiEnabled: true,\n// realTransactionHash: txHash // ✅ Pass the real hash\n// });\n// }, 2000);\n\n// } catch (err) {\n// console.error('TRANSACTION ERROR:', err);\n// console.error('Wagmi transaction failed:', err);\n// setError(err.message);\n// setCurrentStep('confirm');\n// onError?.(err.message);\n// setActualTransactionHash(null);\n// } finally {\n// setProcessing(false);\n// }\n// };\n\n\n// const handleQRPaymentVerification = async () => {\n// if (!paymentData) {\n// setError('Payment information is missing');\n// return;\n// }\n\n// setCurrentStep('processing');\n// setError(null);\n\n// try {\n// console.log('🔄 Starting QR payment verification...');\n\n// const verificationResult = await api.current.verifyQRPayment(paymentData.id);\n\n// if (verificationResult.verified) {\n// console.log('✅ QR payment verified successfully:', verificationResult);\n\n// if (verificationResult.payment?.transactionHash) {\n// setActualTransactionHash(verificationResult.payment.transactionHash);\n// }\n\n\n// setCurrentStep('success');\n\n// if (onSuccess) {\n// onSuccess(paymentData.id, verificationResult.payment.transactionHash, {\n// network: selectedNetwork.name,\n// currency: selectedToken.symbol,\n// amount: verificationResult.payment.amount,\n// verificationType: 'QR_PAYMENT'\n// });\n// }\n// } else {\n// setError(verificationResult.message || 'Transaction not detected yet. Please wait a moment and try again.');\n// setCurrentStep('confirm');\n// }\n// } catch (error) {\n// console.error('QR payment verification error:', error);\n// const errorMessage = error.message || 'Failed to verify payment. Please try again.';\n// setError(errorMessage);\n// setCurrentStep('confirm');\n// if (onError) onError(errorMessage);\n// }\n// };\n\n// const formatAmount = (amount) => {\n// return parseFloat(amount).toFixed(2);\n// };\n\n// const getNetworkDisplayName = (network) => {\n// const names = {\n// ethereum: 'Ethereum',\n// bsc: 'BSC',\n// polygon: 'Polygon',\n// arbitrum: 'Arbitrum',\n// optimism: 'Optimism',\n// avalanche: 'Avalanche',\n// tron: 'Tron',\n// algorand: 'Algorand',\n// solana: 'Solana'\n// };\n// return names[network] || network;\n// };\n\n// const getWalletAddressForNetwork = () => {\n// if (!selectedNetwork) return 'No network selected';\n// const networkAddress = config.merchantWalletAddresses?.[selectedNetwork.shortName];\n// if (networkAddress) return networkAddress;\n// if (paymentData?.recipientWallet) return paymentData.recipientWallet;\n// return 'No wallet address configured for this network';\n// };\n\n// // Helper functions for modern dropdown with your specific CoinMarketCap logos\n// const renderNetworkOption = (network) => {\n// const networkLogoUrl = NetworkLogos[network.shortName?.toLowerCase()];\n\n// return (\n// <div className=\"flex items-center space-x-3\">\n// {networkLogoUrl ? (\n// <img\n// src={networkLogoUrl}\n// alt={network.name}\n// className=\"w-8 h-8 rounded-full\"\n// onLoad={() => console.log('✅ Logo loaded successfully for', network.shortName)}\n// onError={(e) => {\n// console.log('❌ Logo failed to load for', network.shortName, 'URL:', networkLogoUrl);\n// e.target.style.display = 'none';\n// e.target.nextSibling.style.display = 'flex';\n// }}\n// />\n// ) : null}\n// <div\n// className=\"w-8 h-8 rounded-full bg-gray-200 flex items-center justify-center\"\n// style={{ display: networkLogoUrl ? 'none' : 'flex' }}\n// >\n// <span className=\"text-xs font-bold text-gray-600\">{network.shortName?.slice(0, 2).toUpperCase()}</span>\n// </div>\n// <div>\n// <div className=\"font-semibold text-gray-800\">{network.name}</div>\n// <div className=\"text-sm text-gray-500\">{network.shortName?.toUpperCase()}</div>\n// </div>\n// </div>\n// );\n// };\n\n// const renderTokenOption = (token) => {\n// const tokenLogoUrl = getTokenLogoUrl(token.symbol);\n\n// return (\n// <div className=\"flex items-center space-x-3\">\n// {tokenLogoUrl ? (\n// <img\n// src={tokenLogoUrl}\n// alt={token.symbol}\n// className=\"w-8 h-8 rounded-full\"\n// onError={(e) => {\n// e.target.style.display = 'none';\n// e.target.nextSibling.style.display = 'flex';\n// }}\n// />\n// ) : null}\n// <div\n// className=\"w-8 h-8 rounded-full bg-gray-200 flex items-center justify-center\"\n// style={{ display: tokenLogoUrl ? 'none' : 'flex' }}\n// >\n// <span className=\"text-xs font-bold text-gray-600\">{token.symbol?.slice(0, 2)}</span>\n// </div>\n// <div>\n// <div className=\"font-semibold text-gray-800\">{token.name} ({token.symbol})</div>\n// <div className=\"text-sm text-gray-500\">\n// {token.Network?.name || 'Unknown Network'}\n// {token.isStablecoin && <span className=\"ml-2 text-green-600\">• Stablecoin</span>}\n// </div>\n// </div>\n// </div>\n// );\n// };\n\n// if (!isOpen) return null;\n\n// const isDark = theme === 'dark';\n\n// return (\n// <div className=\"fixed inset-0 z-50\">\n// <div className=\"fixed inset-0 bg-black bg-opacity-50 transition-opacity\" onClick={onClose} aria-hidden=\"true\" />\n// <div className=\"fixed inset-0 overflow-y-auto\" style={{ zIndex: 51 }}>\n// <div className=\"flex min-h-screen items-center justify-center p-4\">\n// <div className=\"relative pt-6 w-full max-w-md mx-auto shadow-xl bg-gray-100 rounded-3xl overflow-hidden\" style={{ zIndex: 52 }}>\n\n// {/* Modern Header with Logo */}\n// <div className=\"bg-white flex justify-between items-center mb-6 mr-3 ml-3 py-4 px-2 rounded-full\">\n// <div className=\"flex-1 flex items-center gap-2 px-4\">\n// <div className=\"w-8 h-8 rounded-full flex items-center justify-center\">\n// <img src={logo} />\n// </div>\n// <span className=\"text-lg font-semibold text-gray-800\" style={{ fontFamily: 'Bricolage Grotesque, sans-serif' }}>Payment Details</span>\n// </div>\n// {currentStep !== 'success' && currentStep !== 'processing' && (\n// <button\n// onClick={onClose}\n// className=\"text-gray-500 hover:text-gray-700 focus:outline-none\"\n// >\n// <svg xmlns=\"http://www.w3.org/2000/svg\" className=\"h-6 w-6 mr-2\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n// <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M6 18L18 6M6 6l12 12\" />\n// </svg>\n// </button>\n// )}\n// </div>\n\n// {/* Payment Summary - Show for all steps except success */}\n// {config && currentStep !== 'success' && (\n// <div className=\"mb-6\">\n// <div className=\"text-center\">\n// <div className=\"text-sm text-gray-600\">Total Amount</div>\n// <div className=\"text-4xl lg:text-5xl font-bold text-[#7042D2] mt-2 leading-tight tracking-tight\" style={{ fontFamily: 'Bricolage Grotesque, sans-serif' }}>\n// ${formatAmount(config.amount)}\n// </div>\n\n// <div className=\"mt-2 text-sm text-gray-500\">\n// No additional fees\n// </div>\n\n// <div className=\"text-sm text-gray-600 mt-4\">Payment to:</div>\n// <div className=\"text-base font-semibold mt-1 flex gap-2 items-center justify-center\" style={{ fontFamily: 'Bricolage Grotesque, sans-serif' }}>\n// <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n// <path d=\"M15.3 7.50065L15.8 10.0007H4.2L4.7 7.50065H15.3ZM16.6667 3.33398H3.33333V5.00065H16.6667V3.33398ZM16.6667 5.83398H3.33333L2.5 10.0007V11.6673H3.33333V16.6673H11.6667V11.6673H15V16.6673H16.6667V11.6673H17.5V10.0007L16.6667 5.83398ZM5 15.0007V11.6673H10V15.0007H5Z\" fill=\"#7042D2\" />\n// </svg>\n// {config.merchantName || 'Merchant'}\n// </div>\n// </div>\n// </div>\n// )}\n\n// {/* Main Content Area with Enhanced Animations */}\n// <div className=\"relative\">\n\n// {/* Step 1: Select Network & Token with Modern Dropdowns */}\n// <ScreenTransition currentStep={currentStep} targetStep=\"method\">\n// <div className=\"pb-6 pt-6 px-6 bg-white rounded-t-2xl\">\n// <h3 className=\"font-semibold text-center mb-6\" style={{ fontFamily: 'Bricolage Grotesque, sans-serif' }}>Choose Payment Method</h3>\n\n// {/* Network Selection - Modern Dropdown */}\n// <div className=\"space-y-4 mb-6\">\n// <label className=\"block text-sm font-medium text-gray-700\" style={{ fontFamily: 'Bricolage Grotesque, sans-serif' }}>Select Network</label>\n// <ModernDropdown\n// options={networks}\n// value={selectedNetwork?.id || ''}\n// onChange={(networkId) => {\n// const network = networks.find(n => n.id === networkId);\n// setSelectedNetwork(network);\n// setSelectedToken(null); // Reset token selection\n// setConnectedWallet(null); // Reset wallet connection\n// setSelectedWalletType(null); // Reset wallet type\n// walletManager.current.disconnect(); // Disconnect wallet manager\n// }}\n// placeholder=\"Choose your network...\"\n// renderOption={renderNetworkOption}\n// getOptionKey={(network) => network.id}\n// getOptionValue={(network) => network.id}\n// getSearchableText={(network) => `${network.name} ${network.shortName}`}\n// disabled={loading}\n// />\n// </div>\n\n// {/* Token Selection - Modern Dropdown */}\n// {selectedNetwork && (\n// <div className=\"space-y-4 mb-6\">\n// <label className=\"block text-sm font-medium text-gray-700\" style={{ fontFamily: 'Bricolage Grotesque, sans-serif' }}>Select Token</label>\n// <ModernDropdown\n// options={tokens.filter(token =>\n// token.Network?.shortName === selectedNetwork?.shortName ||\n// token.networkId === selectedNetwork?.id\n// )}\n// value={selectedToken?.id || ''}\n// onChange={(tokenId) => {\n// const token = tokens\n// .filter(token =>\n// token.Network?.shortName === selectedNetwork?.shortName ||\n// token.networkId === selectedNetwork?.id\n// )\n// .find(t => t.id === tokenId);\n// setSelectedToken(token);\n// }}\n// placeholder=\"Choose your token...\"\n// renderOption={renderTokenOption}\n// getOptionKey={(token) => token.id}\n// getOptionValue={(token) => token.id}\n// getSearchableText={(token) => `${token.name} ${token.symbol}`}\n// disabled={loading}\n// />\n// </div>\n// )}\n\n// {/* Show selected network and token info */}\n// {selectedNetwork && selectedToken && (\n// <div className=\"mb-6 p-4 bg-[#7042D2]/10 rounded-xl border border-[#7042D2]/20\">\n// <div className=\"flex justify-between items-center\">\n// <div className=\"flex items-center space-x-3\">\n// {NetworkLogos[selectedNetwork.shortName] ? (\n// <img\n// src={NetworkLogos[selectedNetwork.shortName]}\n// alt={selectedNetwork.name}\n// className=\"w-8 h-8 rounded-full\"\n// onError={(e) => {\n// e.target.style.display = 'none';\n// e.target.nextSibling.style.display = 'flex';\n// }}\n// />\n// ) : null}\n// <div\n// className=\"w-8 h-8 rounded-full bg-gray-200 flex items-center justify-center\"\n// style={{ display: NetworkLogos[selectedNetwork.shortName] ? 'none' : 'flex' }}\n// >\n// <span className=\"text-xs font-bold text-gray-600\">{selectedNetwork.shortName?.slice(0, 2).toUpperCase()}</span>\n// </div>\n\n// {getTokenLogoUrl(selectedToken.symbol) ? (\n// <img\n// src={getTokenLogoUrl(selectedToken.symbol)}\n// alt={selectedToken.symbol}\n// className=\"w-8 h-8 rounded-full\"\n// onError={(e) => {\n// e.target.style.display = 'none';\n// e.target.nextSibling.style.display = 'flex';\n// }}\n// />\n// ) : null}\n// <div\n// className=\"w-8 h-8 rounded-full bg-gray-200 flex items-center justify-center\"\n// style={{ display: getTokenLogoUrl(selectedToken.symbol) ? 'none' : 'flex' }}\n// >\n// <span className=\"text-xs font-bold text-gray-600\">{selectedToken.symbol?.slice(0, 2)}</span>\n// </div>\n\n// <div>\n// <p className=\"text-sm font-semibold text-[#7042D2]\" style={{ fontFamily: 'Bricolage Grotesque, sans-serif' }}>\n// {selectedNetwork.name} • {selectedToken.symbol}\n// </p>\n// <p className=\"text-xs text-[#7042D2]/80\" style={{ fontFamily: 'Bricolage Grotesque, sans-serif' }}>{selectedToken.name}</p>\n// </div>\n// </div>\n// {selectedToken.isStablecoin && (\n// <span className=\"px-3 py-1 bg-green-100 text-green-700 text-xs rounded-full font-medium\" style={{ fontFamily: 'Bricolage Grotesque, sans-serif' }}>\n// Stablecoin\n// </span>\n// )}\n// </div>\n// </div>\n// )}\n\n// {selectedNetwork && selectedToken && (\n// <button\n// onClick={createPayment}\n// disabled={loading}\n// className=\"w-full bg-[#7042D2] text-white py-4 px-4 rounded-xl hover:bg-[#5b34b1] disabled:opacity-50 font-semibold transition-all duration-200 shadow-lg hover:shadow-xl\"\n// style={{ fontFamily: 'Bricolage Grotesque, sans-serif' }}\n// >\n// {loading ? (\n// <span className=\"flex items-center justify-center\">\n// <svg className=\"animate-spin -ml-1 mr-3 h-4 w-4 text-white\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\">\n// <circle className=\"opacity-25\" cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" strokeWidth=\"4\"></circle>\n// <path className=\"opacity-75\" fill=\"currentColor\" d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"></path>\n// </svg>\n// Creating Payment...\n// </span>\n// ) : (\n// 'Continue'\n// )}\n// </button>\n// )}\n// </div>\n// </ScreenTransition>\n\n// {/* Step 2: Confirm Payment */}\n// <ScreenTransition currentStep={currentStep} targetStep=\"confirm\">\n// {selectedNetwork && selectedToken && paymentData && (\n// <div>\n// {/* Payment Method Tabs */}\n// <div className=\"mb-4 px-4\">\n// <div className=\"flex border-b border-gray-200\">\n// <button\n// onClick={() => setPaymentType('wallet')}\n// className={`py-3 px-6 text-sm font-semibold transition-all duration-200 ${paymentType === 'wallet'\n// ? 'border-b-2 border-[#7042D2] text-[#7042D2]'\n// : 'text-gray-500 hover:text-gray-700'\n// }`}\n// style={{ fontFamily: 'Bricolage Grotesque, sans-serif' }}\n// >\n// Connect Wallet\n// </button>\n// <button\n// onClick={() => setPaymentType('qrcode')}\n// className={`py-3 px-6 text-sm font-semibold transition-all duration-200 ${paymentType === 'qrcode'\n// ? 'border-b-2 border-[#7042D2] text-[#7042D2]'\n// : 'text-gray-500 hover:text-gray-700'\n// }`}\n// style={{ fontFamily: 'Bricolage Grotesque, sans-serif' }}\n// >\n// QR Code\n// </button>\n// </div>\n// </div>\n\n// {/* Payment Details */}\n// {paymentType === 'wallet' && (\n// <div className=\"p-4 rounded-2xl mb-4 bg-white\">\n// <h3 className=\"text-lg font-semibold mb-2 text-gray-800\" style={{ fontFamily: 'Bricolage Grotesque, sans-serif' }}>Payment Details</h3>\n// <div className=\"space-y-3 bg-[#7042D2]/10 p-4 rounded-xl\" style={{ fontFamily: 'Bricolage Grotesque, sans-serif' }}>\n// <div className=\"flex justify-between\">\n// <span className=\"font-semibold text-gray-700\">Currency:</span>\n// <span className=\"font-semibold text-[#7042D2] flex items-center\">\n// <span className=\"mr-2\">\n// {getTokenLogoUrl(selectedToken.symbol) ? (\n// <img\n// src={getTokenLogoUrl(selectedToken.symbol)}\n// alt={selectedToken.symbol}\n// className=\"w-5 h-5 rounded-full inline-block\"\n// onError={(e) => {\n// e.target.style.display = 'none';\n// e.target.nextSibling.style.display = 'inline-flex';\n// }}\n// />\n// ) : null}\n// <div\n// className=\"w-5 h-5 rounded-full bg-gray-200 inline-flex items-center justify-center\"\n// style={{ display: getTokenLogoUrl(selectedToken.symbol) ? 'none' : 'inline-flex' }}\n// >\n// <span className=\"text-xs font-bold text-gray-600\">{selectedToken.symbol?.slice(0, 2)}</span>\n// </div>\n// </span>\n// {selectedToken.symbol}\n// </span>\n// </div>\n// <div className=\"border-b border-gray-300\"></div>\n// <div className=\"flex justify-between\">\n// <span className=\"font-semibold text-gray-700\">Network:</span>\n// <span className=\"font-semibold text-[#7042D2] flex items-center\">\n// <span className=\"mr-2\">\n// {NetworkLogos[selectedNetwork.shortName] ? (\n// <img\n// src={NetworkLogos[selectedNetwork.shortName]}\n// alt={selectedNetwork.name}\n// className=\"w-5 h-5 rounded-full inline-block\"\n// onError={(e) => {\n// e.target.style.display = 'none';\n// e.target.nextSibling.style.display = 'inline-flex';\n// }}\n// />\n// ) : null}\n// <div\n// className=\"w-5 h-5 rounded-full bg-gray-200 inline-flex items-center justify-center\"\n// style={{ display: NetworkLogos[selectedNetwork.shortName] ? 'none' : 'inline-flex' }}\n// >\n// <span className=\"text-xs font-bold text-gray-600\">{selectedNetwork.shortName?.slice(0, 2).toUpperCase()}</span>\n// </div>\n// </span>\n// {getNetworkDisplayName(selectedNetwork.shortName)}\n// </span>\n// </div>\n// <div className=\"border-b border-gray-300\"></div>\n// <div className=\"flex justify-between border-t border-gray-400 pt-3 mt-2\">\n// <span className=\"font-bold text-gray-800\">Total:</span>\n// <span className=\"font-bold text-lg text-[#7042D2]\">${formatAmount(paymentData.totalAmount)}</span>\n// </div>\n// </div>\n// </div>\n// )}\n\n// {/* Wallet Connection or QR Code */}\n// {paymentType === 'qrcode' ? (\n// <div className=\"mb-4\">\n// <EnhancedQRCode\n// walletAddress={getWalletAddressForNetwork()}\n// amount={paymentData.totalAmount || paymentData.amount}\n// currency={selectedToken.symbol}\n// network={selectedNetwork.shortName}\n// theme={theme}\n// />\n// </div>\n// ) : (\n// <div className=\"space-y-3 mb-4 px-4\">\n// {/* Enhanced multi-wallet selector with Wagmi */}\n// <WagmiWalletSelector\n// selectedNetwork={selectedNetwork}\n// onWalletSelect={handleWalletSelection}\n// onConnect={connectWallet}\n// connectedWallet={connectedWallet}\n// loading={loading}\n// />\n// </div>\n// )}\n\n// {/* Error Display */}\n// {error && (\n// <div className=\"p-3 rounded-lg bg-red-50 mb-4 text-red-600 text-sm mx-4\">\n// {error}\n// </div>\n// )}\n\n// {/* Action Buttons */}\n// <div className=\"grid grid-cols-2 gap-3 mb-3 px-4\">\n// <button\n// type=\"button\"\n// onClick={() => setCurrentStep('method')}\n// className=\"w-full py-3 px-4 bg-gray-200 hover:bg-gray-300 text-[#7042D2] font-semibold rounded-xl transition-all duration-200\"\n// style={{ fontFamily: 'Bricolage Grotesque, sans-serif' }}\n// >\n// Back\n// </button>\n// <button\n// type=\"button\"\n// onClick={paymentType === 'qrcode' ? handleQRPaymentVerification : sendTransaction}\n// className=\"bg-green-600 text-white w-full py-3 px-4 font-semibold rounded-xl hover:bg-green-700 transition-all duration-200 shadow-lg hover:shadow-xl\"\n// disabled={paymentType === 'wallet' && !connectedWallet}\n// style={{ fontFamily: 'Bricolage Grotesque, sans-serif' }}\n// >\n// {paymentType === 'qrcode' ? 'I have sent the payment' : 'Pay Now'}\n// </button>\n// </div>\n// </div>\n// )}\n// </ScreenTransition>\n\n// {/* Step 3: Processing */}\n// <ScreenTransition currentStep={currentStep} targetStep=\"processing\">\n// <EnhancedPaymentStatus\n// status=\"processing\"\n// theme={theme}\n// message=\"Processing your payment via...\"\n// />\n// </ScreenTransition>\n\n// {/* Step 4: Success */}\n// <ScreenTransition currentStep={currentStep} targetStep=\"success\">\n// <EnhancedPaymentStatus\n// status=\"success\"\n// theme={theme}\n// message=\"Payment successful!\"\n// payment={paymentData}\n// transactionHash={actualTransactionHash} // ✅ Use the REAL hash instead of \"0x123...abc\"\n// selectedPaymentMethod={{ currency: selectedToken?.symbol }}\n// merchantName={config.merchantName || 'Merchant'}\n// onClose={onClose}\n// />\n// </ScreenTransition>\n\n// </div>\n\n// {/* Enhanced Footer */}\n// {currentStep !== 'success' && (\n// <div className=\"text-center text-xs text-gray-500 flex items-center justify-center gap-1 py-6 bg-white rounded-b-3xl\" style={{ fontFamily: 'Bricolage Grotesque, sans-serif' }}>\n// <p>Powered by <span className='text-[#7042D2] font-semibold'>Coinley</span> - Multi-Wallet Support</p>\n// <svg className=\"inline w-4 h-4 text-green-500 ml-1\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" viewBox=\"0 0 24 24\">\n// <circle cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" strokeWidth=\"2\" fill=\"none\" />\n// <path d=\"M9 12l2 2 4-4\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n// </svg>\n// </div>\n// )}\n// </div>\n// </div>\n// </div>\n// </div>\n// );\n// };\n\n// export default EnhancedSimpleCoinleyPayment;\n\n\n\n\n\n\n\n// //src/components/EnhancedSimpleCoinleyPayment.jsx \n// import React, { useState, useEffect, useRef, useCallback } from 'react';\n// import ReactDOM from 'react-dom';\n// import { createConfig, http } from '@wagmi/core';\n// import { mainnet, bsc, polygon, arbitrum, optimism, avalanche } from '@wagmi/core/chains';\n// import { injected, metaMask, coinbaseWallet } from '@wagmi/connectors';\n// import logo from \"../assets/Logomark.png\";\n\n// // Import your new utility files\n// import { MobileUtils } from '../utils/MobileUtils.js';\n// import { CustomQRCodeGenerator } from '../utils/CustomQRCodeGenerator.js';\n// import { EnhancedWalletManager } from '../utils/EnhancedWalletManager.js';\n\n// // Wagmi Configuration (same as before)\n// const wagmiConfig = createConfig({\n// chains: [mainnet, bsc, polygon, arbitrum, optimism, avalanche],\n// connectors: [\n// injected({\n// target: {\n// id: 'injected',\n// name: 'Injected Wallet',\n// provider: () => window.ethereum\n// }\n// }),\n// metaMask(),\n// coinbaseWallet({\n// appName: 'Coinley Payment',\n// appLogoUrl: logo\n// })\n// ],\n// transports: {\n// [mainnet.id]: http(),\n// [bsc.id]: http(),\n// [polygon.id]: http(),\n// [arbitrum.id]: http(),\n// [optimism.id]: http(),\n// [avalanche.id]: http(),\n// },\n// });\n\n// // Keep your existing SimplePaymentAPI class\n// class SimplePaymentAPI {\n// constructor(baseURL, apiKey, apiSecret) {\n// this.baseURL = baseURL.endsWith('/') ? baseURL.slice(0, -1) : baseURL;\n// this.apiKey = apiKey;\n// this.apiSecret = apiSecret;\n// }\n\n// async request(endpoint, options = {}) {\n// const url = `${this.baseURL}${endpoint}`;\n// const headers = {\n// 'Content-Type': 'application/json',\n// 'X-API-Key': this.apiKey,\n// 'X-API-Secret': this.apiSecret,\n// ...options.headers\n// };\n\n// const response = await fetch(url, {\n// ...options,\n// headers\n// });\n\n// if (!response.ok) {\n// const error = await response.json().catch(() => ({}));\n// throw new Error(error.error || `HTTP ${response.status}`);\n// }\n\n// return response.json();\n// }\n\n// async getNetworks() {\n// try {\n// return await this.request('/api/networks');\n// } catch (error) {\n// console.error('Failed to fetch networks:', error);\n// return {\n// networks: [\n// { id: '1', name: 'Ethereum', shortName: 'ethereum', chainId: '0x1', type: 'ethereum' },\n// { id: '56', name: 'BSC', shortName: 'bsc', chainId: '0x38', type: 'bsc' },\n// { id: '137', name: 'Polygon', shortName: 'polygon', chainId: '0x89', type: 'polygon' },\n// { id: '42161', name: 'Arbitrum', shortName: 'arbitrum', chainId: '0xa4b1', type: 'arbitrum' },\n// { id: '10', name: 'Optimism', shortName: 'optimism', chainId: '0xa', type: 'optimism' },\n// { id: '43114', name: 'Avalanche', shortName: 'avalanche', chainId: '0xa86a', type: 'avalanche' }\n// ]\n// };\n// }\n// }\n\n// async getTokens() {\n// try {\n// return await this.request('/api/networks/stablecoins');\n// } catch (error) {\n// console.error('Failed to fetch tokens:', error);\n// return {\n// stablecoins: [\n// {\n// id: '1', name: 'Tether USD', symbol: 'USDT',\n// contractAddress: '0xdAC17F958D2ee523a2206206994597C13D831ec7',\n// decimals: 6, networkId: '1',\n// Network: { shortName: 'ethereum', name: 'Ethereum' }\n// },\n// {\n// id: '2', name: 'USD Coin', symbol: 'USDC',\n// contractAddress: '0xA0b86a33E6441d81d0B93bF9EE0f74ca32F7e6f6',\n// decimals: 6, networkId: '1',\n// Network: { shortName: 'ethereum', name: 'Ethereum' }\n// }\n// ]\n// };\n// }\n// }\n\n// async createPayment(data) {\n// return await this.request('/api/payments/create', {\n// method: 'POST',\n// body: JSON.stringify(data)\n// });\n// }\n\n// async verifyQRPayment(paymentId) {\n// return await this.request('/api/payments/verify-qr', {\n// method: 'POST',\n// body: JSON.stringify({ paymentId })\n// });\n// }\n\n// // Updated processPayment method\n// async processPayment(paymentId, transactionHash, network, senderAddress) {\n// return await this.request('/api/payments/process', {\n// method: 'POST',\n// body: JSON.stringify({\n// paymentId,\n// transactionHash,\n// network,\n// senderAddress\n// })\n// });\n// }\n// }\n\n// // Payment state management hook\n// const usePaymentState = () => {\n// const [state, setState] = useState({\n// currentStep: 'method',\n// selectedNetwork: null,\n// selectedToken: null,\n// selectedWalletType: null,\n// connectedWallet: null,\n// paymentData: null,\n// paymentType: 'wallet',\n// loading: false,\n// processing: false,\n// error: null,\n// actualTransactionHash: null\n// });\n\n// const updateState = useCallback((updates) => {\n// setState(prevState => ({ ...prevState, ...updates }));\n// }, []);\n\n// const resetState = useCallback(() => {\n// setState({\n// currentStep: 'method',\n// selectedNetwork: null,\n// selectedToken: null,\n// selectedWalletType: null,\n// connectedWallet: null,\n// paymentData: null,\n// paymentType: 'wallet',\n// loading: false,\n// processing: false,\n// error: null,\n// actualTransactionHash: null\n// });\n// }, []);\n\n// const resetWalletState = useCallback(() => {\n// setState(prevState => ({\n// ...prevState,\n// selectedWalletType: null,\n// connectedWallet: null,\n// error: null\n// }));\n// }, []);\n\n// return { state, updateState, resetState, resetWalletState };\n// };\n\n// // Enhanced QR Code Component using your utility\n// const EnhancedQRCode = ({\n// walletAddress,\n// amount,\n// currency,\n// network,\n// walletType = 'generic',\n// theme = 'light'\n// }) => {\n// const [qrData, setQrData] = useState('');\n// const [isGenerating, setIsGenerating] = useState(true);\n// const [copied, setCopied] = useState(false);\n// const qrGenerator = useRef(new CustomQRCodeGenerator());\n\n// useEffect(() => {\n// const generateQRData = () => {\n// setIsGenerating(true);\n// setTimeout(() => {\n// const data = qrGenerator.current.generateSimpleQR(\n// walletAddress, \n// amount, \n// currency, \n// network, \n// walletType\n// );\n// setQrData(data);\n// setIsGenerating(false);\n// }, 1000);\n// };\n\n// if (walletAddress) {\n// generateQRData();\n// }\n// }, [walletAddress, amount, currency, network, walletType]);\n\n// const handleCopy = async () => {\n// const success = await MobileUtils.copyToClipboard(walletAddress);\n// if (success) {\n// setCopied(true);\n// MobileUtils.vibrate([50]);\n// setTimeout(() => setCopied(false), 2000);\n// }\n// };\n\n// const openInWallet = () => {\n// const chainId = qrGenerator.current.getChainId(network);\n// MobileUtils.openInWalletApp(walletType, walletAddress, amount, chainId, currency);\n// };\n\n// return (\n// <div className=\"flex flex-col items-center\">\n// <div className=\"p-4 rounded-lg bg-white mb-3 shadow-sm border\">\n// {isGenerating ? (\n// <div className=\"flex items-center justify-center\" style={{ width: 200, height: 200 }}>\n// <div className=\"text-center\">\n// <div className=\"animate-spin rounded-full h-8 w-8 border-b-2 border-purple-600 mx-auto mb-2\"></div>\n// <div className=\"text-sm text-gray-600\">Generating QR Code...</div>\n// </div>\n// </div>\n// ) : (\n// <div className=\"flex items-center justify-center bg-gray-100 rounded-lg\" style={{ width: 200, height: 200 }}>\n// <div className=\"text-center p-4\">\n// <div className=\"text-2xl mb-2\">📱</div>\n// <div className=\"text-sm text-gray-600\">QR Code</div>\n// <div className=\"text-xs text-gray-500 mt-1\">Scan to pay</div>\n// </div>\n// </div>\n// )}\n// </div>\n\n// <div className=\"text-center text-sm text-gray-700 mb-4\">\n// <p className=\"font-semibold text-gray-800\">\n// Scan to Pay with {currency}\n// </p>\n// <p className=\"text-xs text-gray-500 mt-1\">\n// Scan with your {network} wallet app\n// </p>\n// </div>\n\n// {/* Mobile action buttons */}\n// {MobileUtils.isMobile() && (\n// <div className=\"w-full mb-4 space-y-2\">\n// <button\n// onClick={openInWallet}\n// className=\"w-full bg-blue-600 text-white py-3 px-4 rounded-xl font-semibold\"\n// >\n// Open in {walletType} Wallet\n// </button>\n \n// <button\n// onClick={handleCopy}\n// className={`w-full py-2 px-4 rounded-xl font-semibold ${\n// copied \n// ? 'bg-green-600 text-white' \n// : 'bg-gray-100 text-gray-800'\n// }`}\n// >\n// {copied ? 'Address Copied!' : 'Copy Address'}\n// </button>\n// </div>\n// )}\n\n// <div className=\"w-full mb-4 p-3 bg-gray-50 rounded-lg\">\n// <div className=\"flex justify-between items-center\">\n// <span className=\"text-sm font-medium text-gray-700\">Amount:</span>\n// <span className=\"text-lg font-bold text-[#7042D2]\">{amount} {currency}</span>\n// </div>\n// <div className=\"flex justify-between items-center mt-1\">\n// <span className=\"text-xs text-gray-500\">Network:</span>\n// <span className=\"text-xs font-medium text-gray-700\">{network}</span>\n// </div>\n// <div className=\"flex justify-between items-center mt-1\">\n// <span className=\"text-xs text-gray-500\">Address:</span>\n// <span className=\"text-xs font-mono text-gray-700\">\n// {walletAddress?.slice(0, 6)}...{walletAddress?.slice(-4)}\n// </span>\n// </div>\n// </div>\n// </div>\n// );\n// };\n\n// // Enhanced Wallet Selector using your utility\n// const EnhancedWalletSelector = ({\n// selectedNetwork,\n// onWalletSelect,\n// onConnect,\n// connectedWallet,\n// loading,\n// onReset\n// }) => {\n// const [selectedWalletType, setSelectedWalletType] = useState(null);\n// const walletManager = useRef(new EnhancedWalletManager(wagmiConfig));\n\n// useEffect(() => {\n// if (!connectedWallet) {\n// setSelectedWalletType(null);\n// walletManager.current.reset();\n// }\n// }, [connectedWallet]);\n\n// const getAvailableWallets = useCallback(() => {\n// if (!selectedNetwork) return [];\n \n// const compatibleNetworks = ['ethereum', 'bsc', 'polygon', 'arbitrum', 'optimism', 'avalanche'];\n// if (compatibleNetworks.includes(selectedNetwork.shortName)) {\n// return walletManager.current.getAvailableWallets();\n// }\n \n// return [];\n// }, [selectedNetwork]);\n\n// const handleWalletSelection = async (walletType) => {\n// try {\n// setSelectedWalletType(walletType);\n// onWalletSelect(walletType);\n// await onConnect(walletType);\n// } catch (error) {\n// setSelectedWalletType(null);\n// throw error;\n// }\n// };\n\n// const availableWallets = getAvailableWallets();\n\n// if (!selectedNetwork) {\n// return (\n// <div className=\"text-center p-4\">\n// <p className=\"text-gray-500\">Please select a network first</p>\n// </div>\n// );\n// }\n\n// if (availableWallets.length === 0) {\n// return (\n// <div className=\"text-center p-4\">\n// <p className=\"text-gray-500 mb-4\">No compatible wallets found</p>\n// <div className=\"p-3 bg-amber-50 rounded-lg border border-amber-200\">\n// <div className=\"text-sm text-amber-800\">\n// <div className=\"font-medium mb-2\">Install a compatible wallet:</div>\n// <div className=\"space-y-1 text-xs\">\n// <div>• <a href=\"https://metamask.io\" target=\"_blank\" rel=\"noopener noreferrer\" className=\"text-amber-700 underline\">Install MetaMask</a></div>\n// <div>• <a href=\"https://trustwallet.com\" target=\"_blank\" rel=\"noopener noreferrer\" className=\"text-amber-700 underline\">Install Trust Wallet</a></div>\n// </div>\n// </div>\n// </div>\n// </div>\n// );\n// }\n\n// return (\n// <div className=\"space-y-4\">\n// <div className=\"flex items-center justify-between\">\n// <label className=\"block text-sm font-medium text-gray-700\">\n// Select Wallet for {selectedNetwork.name}\n// </label>\n// {connectedWallet && (\n// <button\n// onClick={onReset}\n// className=\"text-xs text-red-600 hover:text-red-800 underline\"\n// >\n// Change Wallet\n// </button>\n// )}\n// </div>\n\n// <div className=\"grid gap-2\">\n// {availableWallets.map((wallet) => (\n// <button\n// key={wallet.type}\n// onClick={() => handleWalletSelection(wallet.type)}\n// disabled={loading || !wallet.isInstalled}\n// className={`flex items-center justify-between p-3 border-2 rounded-lg transition-all ${\n// connectedWallet?.walletType === wallet.type\n// ? 'border-green-500 bg-green-50'\n// : selectedWalletType === wallet.type\n// ? 'border-blue-500 bg-blue-50'\n// : 'border-gray-200 hover:border-gray-300'\n// } ${!wallet.isInstalled ? 'opacity-50 cursor-not-allowed' : 'cursor-pointer'}`}\n// >\n// <div className=\"flex items-center space-x-3\">\n// <span className=\"text-2xl\">{wallet.icon}</span>\n// <div className=\"text-left\">\n// <div className=\"font-semibold text-sm\">{wallet.name}</div>\n// <div className=\"text-xs text-gray-500\">\n// {connectedWallet?.walletType === wallet.type\n// ? `Connected • ${connectedWallet.account?.slice(0, 6)}...${connectedWallet.account?.slice(-4)}`\n// : wallet.description\n// }\n// </div>\n// </div>\n// </div>\n \n// {loading && selectedWalletType === wallet.type ? (\n// <div className=\"animate-spin rounded-full h-4 w-4 border-b-2 border-blue-500\"></div>\n// ) : connectedWallet?.walletType === wallet.type ? (\n// <div className=\"text-green-500\">✓</div>\n// ) : null}\n// </button>\n// ))}\n// </div>\n// </div>\n// );\n// };\n\n\n\n// // Replace the placeholder ModernDropdown and ScreenTransition with these working versions\n\n// const ModernDropdown = ({\n// options = [],\n// value,\n// onChange,\n// placeholder,\n// renderOption,\n// getOptionKey,\n// getOptionValue,\n// getSearchableText,\n// disabled = false\n// }) => {\n// const [isOpen, setIsOpen] = useState(false);\n// const [searchTerm, setSearchTerm] = useState('');\n\n// const filteredOptions = options.filter(option => {\n// const searchableText = getSearchableText ? getSearchableText(option) : '';\n// return searchableText.toLowerCase().includes(searchTerm.toLowerCase());\n// });\n\n// const selectedOption = options.find(option => getOptionValue(option) === value);\n\n// return (\n// <div className=\"relative\">\n// <button\n// type=\"button\"\n// onClick={() => !disabled && setIsOpen(!isOpen)}\n// disabled={disabled}\n// className={`w-full p-4 border-2 rounded-2xl bg-gradient-to-r from-white to-gray-50 text-left focus:outline-none transition-all ${\n// disabled ? 'opacity-50 cursor-not-allowed' : 'hover:border-purple-500 cursor-pointer'\n// } ${isOpen ? 'border-purple-500' : 'border-gray-200'}`}\n// >\n// <div className=\"flex items-center justify-between\">\n// <div className=\"flex items-center space-x-3\">\n// {selectedOption ? renderOption(selectedOption) : (\n// <span className=\"text-gray-500\">{placeholder}</span>\n// )}\n// </div>\n// <div className={`transform transition-transform ${isOpen ? 'rotate-180' : ''}`}>\n// <svg className=\"h-5 w-5 text-purple-600\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n// <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M19 9l-7 7-7-7\" />\n// </svg>\n// </div>\n// </div>\n// </button>\n\n// {isOpen && (\n// <div className=\"absolute z-50 w-full mt-2 bg-white border border-gray-200 rounded-2xl shadow-xl max-h-60 overflow-y-auto\">\n// <div className=\"p-3 border-b border-gray-200\">\n// <input\n// type=\"text\"\n// placeholder=\"Search...\"\n// value={searchTerm}\n// onChange={(e) => setSearchTerm(e.target.value)}\n// className=\"w-full p-2 border border-gray-300 rounded-lg focus:outline-none focus:ring-2 focus:ring-purple-500\"\n// />\n// </div>\n \n// <div className=\"p-2\">\n// {filteredOptions.map((option) => (\n// <button\n// key={getOptionKey(option)}\n// type=\"button\"\n// onClick={() => {\n// onChange(getOptionValue(option));\n// setIsOpen(false);\n// setSearchTerm('');\n// }}\n// className={`w-full p-3 text-left hover:bg-purple-50 transition-colors rounded-xl mb-1 ${\n// getOptionValue(option) === value\n// ? 'bg-purple-100 text-purple-700'\n// : 'text-gray-800'\n// }`}\n// >\n// {renderOption(option)}\n// </button>\n// ))}\n \n// {filteredOptions.length === 0 && (\n// <div className=\"p-4 text-center text-gray-500\">\n// No options found\n// </div>\n// )}\n// </div>\n// </div>\n// )}\n// </div>\n// );\n// };\n\n// const ScreenTransition = ({\n// currentStep,\n// targetStep,\n// children,\n// className = \"\",\n// duration = 300\n// }) => {\n// const [isVisible, setIsVisible] = useState(currentStep === targetStep);\n// const [shouldRender, setShouldRender] = useState(currentStep === targetStep);\n\n// useEffect(() => {\n// if (currentStep === targetStep) {\n// setShouldRender(true);\n// setTimeout(() => setIsVisible(true), 10);\n// } else {\n// setIsVisible(false);\n// setTimeout(() => setShouldRender(false), duration);\n// }\n// }, [currentStep, targetStep, duration]);\n\n// if (!shouldRender) return null;\n\n// return (\n// <div\n// className={`transition-all duration-300 ease-out ${\n// isVisible\n// ? 'transform translate-y-0 opacity-100'\n// : 'transform translate-y-full opacity-0'\n// } ${className}`}\n// >\n// {children}\n// </div>\n// );\n// };\n\n// // Main Component\n// const EnhancedSimpleCoinleyPayment = ({\n// apiKey,\n// apiSecret,\n// apiUrl,\n// config,\n// onSuccess,\n// onError,\n// onClose,\n// isOpen,\n// theme = 'light'\n// }) => {\n// const { state, updateState, resetState, resetWalletState } = usePaymentState();\n// const [networks, setNetworks] = useState([]);\n// const [tokens, setTokens] = useState([]);\n \n// const walletManager = useRef(new EnhancedWalletManager(wagmiConfig));\n// const api = useRef(new SimplePaymentAPI(apiUrl, apiKey, apiSecret));\n\n// // Reset state when modal opens/closes\n// useEffect(() => {\n// if (isOpen) {\n// resetState();\n// loadData();\n// } else {\n// walletManager.current.disconnect();\n// }\n// }, [isOpen, resetState]);\n\n// const loadData = async () => {\n// try {\n// updateState({ loading: true, error: null });\n\n// const [networksRes, tokensRes] = await Promise.all([\n// api.current.getNetworks(),\n// api.current.getTokens()\n// ]);\n\n// setNetworks(networksRes.networks || []);\n// setTokens(tokensRes.stablecoins || []);\n\n// } catch (err) {\n// updateState({ error: 'Failed to load payment options.' });\n// } finally {\n// updateState({ loading: false });\n// }\n// };\n\n// const connectWallet = async (walletType) => {\n// try {\n// updateState({ loading: true, error: null });\n \n// const connection = await walletManager.current.connect(walletType);\n \n// updateState({\n// connectedWallet: connection,\n// selectedWalletType: walletType,\n// loading: false\n// });\n\n// } catch (err) {\n// updateState({ \n// loading: false, \n// error: err.message,\n// selectedWalletType: null,\n// connectedWallet: null\n// });\n// }\n// };\n\n\n// const handleNetworkSelection = useCallback((networkId) => {\n// const network = networks.find(n => n.id === networkId);\n// updateState({\n// selectedNetwork: network,\n// selectedToken: null,\n// selectedWalletType: null,\n// connectedWallet: null,\n// error: null\n// });\n// walletManager.current.disconnect();\n// }, [networks, updateState]);\n\n// const handleTokenSelection = useCallback((tokenId) => {\n// const availableTokens = tokens.filter(token =>\n// token.Network?.shortName === state.selectedNetwork?.shortName ||\n// token.networkId === state.selectedNetwork?.id\n// );\n// const token = availableTokens.find(t => t.id === tokenId);\n// updateState({ selectedToken: token });\n// }, [tokens, state.selectedNetwork, updateState]);\n\n// const createPayment = async () => {\n// try {\n// updateState({ loading: true, error: null });\n// const payment = await api.current.createPayment({\n// amount: config.amount,\n// currency: state.selectedToken.symbol,\n// network: state.selectedNetwork.shortName,\n// customerEmail: config.customerEmail,\n// metadata: { ...config.metadata }\n// });\n// updateState({\n// paymentData: payment.payment,\n// currentStep: 'confirm',\n// loading: false\n// });\n// } catch (err) {\n// updateState({ loading: false, error: err.message });\n// }\n// };\n\n\n// const sendTransaction = async () => {\n// try {\n// updateState({ \n// processing: true, \n// error: null, \n// currentStep: 'processing' \n// });\n\n// const recipientAddress = config.merchantWalletAddresses?.[state.selectedNetwork.shortName];\n \n// let txParams;\n// if (state.selectedToken.contractAddress) {\n// const decimals = state.selectedToken.decimals || 6;\n// const amount = Math.floor(state.paymentData.totalAmount * Math.pow(10, decimals));\n// const methodId = '0xa9059cbb';\n// const recipientPadded = recipientAddress.slice(2).toLowerCase().padStart(64, '0');\n// const amountPadded = amount.toString(16).padStart(64, '0');\n \n// txParams = {\n// to: state.selectedToken.contractAddress,\n// data: `${methodId}${recipientPadded}${amountPadded}`,\n// value: '0x0'\n// };\n// } else {\n// const value = Math.floor(state.paymentData.totalAmount * Math.pow(10, 18));\n// txParams = {\n// to: recipientAddress,\n// value: `0x${value.toString(16)}`\n// };\n// }\n\n// const txHash = await walletManager.current.sendTransaction(txParams);\n// updateState({ actualTransactionHash: txHash });\n\n// // Process payment on server\n// await api.current.processPayment(\n// state.paymentData.id,\n// txHash,\n// state.selectedNetwork.shortName,\n// state.connectedWallet.account\n// );\n\n// setTimeout(() => {\n// updateState({ \n// currentStep: 'success',\n// processing: false\n// });\n\n// onSuccess?.(state.paymentData.id, txHash, {\n// network: state.selectedNetwork.name,\n// currency: state.selectedToken.symbol,\n// amount: state.paymentData.totalAmount\n// });\n// }, 2000);\n\n// } catch (err) {\n// updateState({\n// error: err.message,\n// currentStep: 'confirm',\n// processing: false\n// });\n// onError?.(err.message);\n// }\n// };\n\n\n// // Handle QR payment verification\n// const handleQRPaymentVerification = async () => {\n// if (!state.paymentData) {\n// updateState({ error: 'Payment information is missing' });\n// return;\n// }\n\n// try {\n// updateState({ \n// currentStep: 'processing', \n// error: null \n// });\n\n// const verificationResult = await api.current.verifyQRPayment(state.paymentData.id);\n\n// if (verificationResult.verified) {\n// if (verificationResult.payment?.transactionHash) {\n// updateState({ actualTransactionHash: verificationResult.payment.transactionHash });\n// }\n\n// updateState({ currentStep: 'success' });\n\n// onSuccess?.(state.paymentData.id, verificationResult.payment?.transactionHash, {\n// network: state.selectedNetwork.name,\n// currency: state.selectedToken.symbol,\n// amount: verificationResult.payment.amount,\n// verificationType: 'QR_PAYMENT'\n// });\n// } else {\n// updateState({\n// error: verificationResult.message || 'Transaction not detected yet. Please wait and try again.',\n// currentStep: 'confirm'\n// });\n// }\n// } catch (error) {\n// updateState({\n// error: error.message || 'Failed to verify payment. Please try again.',\n// currentStep: 'confirm'\n// });\n// onError?.(error.message);\n// }\n// };\n\n// // Step navigation with proper state management\n// const goToStep = useCallback((step) => {\n// updateState({ currentStep: step, error: null });\n// }, [updateState]);\n\n// const goBack = useCallback(() => {\n// switch (state.currentStep) {\n// case 'confirm':\n// // Reset wallet state when going back from confirm\n// resetWalletState();\n// goToStep('method');\n// break;\n// default:\n// goToStep('method');\n// }\n// }, [state.currentStep, resetWalletState, goToStep]);\n\n// // Get wallet address for current network\n// const getWalletAddressForNetwork = () => {\n// if (!state.selectedNetwork) return 'No network selected';\n// return config.merchantWalletAddresses?.[state.selectedNetwork.shortName] ||\n// state.paymentData?.recipientWallet ||\n// 'No wallet address configured';\n// };\n\n// if (!isOpen) return null;\n\n// return (\n// <div className=\"fixed inset-0 z-50\">\n// {/* Your existing modal structure */}\n// <div className=\"fixed inset-0 bg-black bg-opacity-50 transition-opacity\" onClick={onClose} />\n// <div className=\"fixed inset-0 overflow-y-auto\" style={{zIndex:51}}>\n// <div className=\"flex min-h-screen items-center justify-center p-4\">\n// <div className=\"relative pt-6 w-full max-w-md mx-auto shadow-xl bg-gray-100 rounded-3xl overflow-hidden\" style={{zIndex:52}}>\n \n// {/* Header */}\n// <div className=\"bg-white flex justify-between items-center mb-6 mr-3 ml-3 py-4 px-2 rounded-full\">\n// <div className=\"flex-1 flex items-center gap-2 px-4\">\n// <div className=\"w-8 h-8 rounded-full bg-purple-600 flex items-center justify-center text-white font-bold\">\n// C\n// </div>\n// <span className=\"text-lg font-semibold text-gray-800\">Payment Details</span>\n// </div>\n// {state.currentStep !== 'success' && state.currentStep !== 'processing' && (\n// <button onClick={onClose} className=\"text-gray-500 hover:text-gray-700\">\n// <svg className=\"h-6 w-6\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n// <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M6 18L18 6M6 6l12 12\" />\n// </svg>\n// </button>\n// )}\n// </div>\n\n// {/* Payment Summary */}\n// {config && state.currentStep !== 'success' && (\n// <div className=\"mb-6 text-center\">\n// <div className=\"text-sm text-gray-600\">Total Amount</div>\n// <div className=\"text-4xl font-bold text-purple-600 mt-2\">\n// ${parseFloat(config.amount).toFixed(2)}\n// </div>\n// <div className=\"text-sm text-gray-600 mt-4\">Payment to:</div>\n// <div className=\"text-base font-semibold mt-1\">\n// {config.merchantName || 'Merchant'}\n// </div>\n// </div>\n// )}\n\n// {/* Main Content */}\n// <div className=\"relative\">\n \n// {/* Step 1: Network & Token Selection */}\n// <ScreenTransition currentStep={state.currentStep} targetStep=\"method\">\n// <div className=\"pb-6 pt-6 px-6 bg-white rounded-t-2xl\">\n// <h3 className=\"font-semibold text-center mb-6\">Choose Payment Method</h3>\n\n// {/* Network Selection */}\n// <div className=\"space-y-4 mb-6\">\n// <label className=\"block text-sm font-medium text-gray-700\">Select Network</label>\n// <ModernDropdown\n// options={networks}\n// value={state.selectedNetwork?.id || ''}\n// onChange={handleNetworkSelection}\n// placeholder=\"Choose your network...\"\n// renderOption={(network) => (\n// <div className=\"flex items-center space-x-3\">\n// <div className=\"w-8 h-8 rounded-full bg-gray-200 flex items-center justify-center\">\n// <span className=\"text-xs font-bold text-gray-600\">\n// {network.shortName?.slice(0, 2).toUpperCase()}\n// </span>\n// </div>\n// <div>\n// <div className=\"font-semibold text-gray-800\">{network.name}</div>\n// <div className=\"text-sm text-gray-500\">{network.shortName?.toUpperCase()}</div>\n// </div>\n// </div>\n// )}\n// getOptionKey={(network) => network.id}\n// getOptionValue={(network) => network.id}\n// getSearchableText={(network) => `${network.name} ${network.shortName}`}\n// disabled={state.loading}\n// />\n// </div>\n\n// {/* Token Selection */}\n// {state.selectedNetwork && (\n// <div className=\"space-y-4 mb-6\">\n// <label className=\"block text-sm font-medium text-gray-700\">Select Token</label>\n// <ModernDropdown\n// options={tokens.filter(token =>\n// token.Network?.shortName === state.selectedNetwork?.shortName ||\n// token.networkId === state.selectedNetwork?.id\n// )}\n// value={state.selectedToken?.id || ''}\n// onChange={handleTokenSelection}\n// placeholder=\"Choose your token...\"\n// renderOption={(token) => (\n// <div className=\"flex items-center space-x-3\">\n// <div className=\"w-8 h-8 rounded-full bg-gray-200 flex items-center justify-center\">\n// <span className=\"text-xs font-bold text-gray-600\">\n// {token.symbol?.slice(0, 2)}\n// </span>\n// </div>\n// <div>\n// <div className=\"font-semibold text-gray-800\">\n// {token.name} ({token.symbol})\n// </div>\n// <div className=\"text-sm text-gray-500\">\n// {token.Network?.name || 'Unknown Network'}\n// </div>\n// </div>\n// </div>\n// )}\n// getOptionKey={(token) => token.id}\n// getOptionValue={(token) => token.id}\n// getSearchableText={(token) => `${token.name} ${token.symbol}`}\n// disabled={state.loading}\n// />\n// </div>\n// )}\n\n// {/* Continue Button */}\n// {state.selectedNetwork && state.selectedToken && (\n// <button\n// onClick={createPayment}\n// disabled={state.loading}\n// className=\"w-full bg-purple-600 text-white py-4 px-4 rounded-xl hover:bg-purple-700 disabled:opacity-50 font-semibold transition-all duration-200 shadow-lg hover:shadow-xl\"\n// >\n// {state.loading ? 'Creating Payment...' : 'Continue'}\n// </button>\n// )}\n// </div>\n// </ScreenTransition>\n\n// {/* Step 2: Payment Confirmation */}\n// <ScreenTransition currentStep={state.currentStep} targetStep=\"confirm\">\n// {state.selectedNetwork && state.selectedToken && state.paymentData && (\n// <div>\n// {/* Payment Method Tabs */}\n// <div className=\"mb-4 px-4\">\n// <div className=\"flex border-b border-gray-200\">\n// <button\n// onClick={() => updateState({ paymentType: 'wallet' })}\n// className={`py-3 px-6 text-sm font-semibold transition-all duration-200 ${\n// state.paymentType === 'wallet'\n// ? 'border-b-2 border-purple-600 text-purple-600'\n// : 'text-gray-500 hover:text-gray-700'\n// }`}\n// >\n// Connect Wallet\n// </button>\n// <button\n// onClick={() => updateState({ paymentType: 'qrcode' })}\n// className={`py-3 px-6 text-sm font-semibold transition-all duration-200 ${\n// state.paymentType === 'qrcode'\n// ? 'border-b-2 border-purple-600 text-purple-600'\n// : 'text-gray-500 hover:text-gray-700'\n// }`}\n// >\n// QR Code\n// </button>\n// </div>\n// </div>\n\n// {/* Payment Content */}\n// {state.paymentType === 'wallet' ? (\n// <div className=\"space-y-4 px-4\">\n// <EnhancedWalletSelector\n// selectedNetwork={state.selectedNetwork}\n// onWalletSelect={(walletType) => updateState({ selectedWalletType: walletType })}\n// onConnect={connectWallet}\n// connectedWallet={state.connectedWallet}\n// loading={state.loading}\n// onReset={resetWalletState}\n// />\n// </div>\n// ) : (\n// <div className=\"px-4\">\n// <EnhancedQRCode\n// walletAddress={getWalletAddressForNetwork()}\n// amount={state.paymentData.totalAmount || state.paymentData.amount}\n// currency={state.selectedToken.symbol}\n// network={state.selectedNetwork.shortName}\n// walletType={state.selectedWalletType || 'generic'}\n// theme={theme}\n// />\n// </div>\n// )}\n\n// {/* Error Display */}\n// {state.error && (\n// <div className=\"p-3 rounded-lg bg-red-50 mb-4 text-red-600 text-sm mx-4\">\n// {state.error}\n// </div>\n// )}\n\n// {/* Action Buttons */}\n// <div className=\"grid grid-cols-2 gap-3 mb-3 px-4\">\n// <button\n// onClick={goBack}\n// className=\"w-full py-3 px-4 bg-gray-200 hover:bg-gray-300 text-purple-600 font-semibold rounded-xl transition-all duration-200\"\n// >\n// Back\n// </button>\n// <button\n// onClick={state.paymentType === 'qrcode' ? handleQRPaymentVerification : sendTransaction}\n// className=\"bg-green-600 text-white w-full py-3 px-4 font-semibold rounded-xl hover:bg-green-700 transition-all duration-200 shadow-lg hover:shadow-xl\"\n// disabled={state.paymentType === 'wallet' && !state.connectedWallet}\n// >\n// {state.paymentType === 'qrcode' ? 'I have sent the payment' : 'Pay Now'}\n// </button>\n// </div>\n// </div>\n// )}\n// </ScreenTransition>\n\n// {/* Step 3: Processing */}\n// <ScreenTransition currentStep={state.currentStep} targetStep=\"processing\">\n// <div className=\"flex flex-col items-center justify-center py-6\">\n// <div className=\"animate-spin rounded-full h-12 w-12 border-4 border-t-purple-600 border-blue-500/20 mb-4\"></div>\n// <h3 className=\"text-xl font-bold mb-3 text-gray-900\">Processing Payment</h3>\n// <p className=\"text-center text-gray-600\">Your transaction is being processed...</p>\n// </div>\n// </ScreenTransition>\n\n// {/* Step 4: Success */}\n// <ScreenTransition currentStep={state.currentStep} targetStep=\"success\">\n// <div className=\"flex flex-col items-center justify-center py-6 px-4\">\n// <div className=\"rounded-full h-16 w-16 bg-green-500 flex items-center justify-center animate-bounce mb-6\">\n// <svg className=\"h-10 w-10 text-white\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\" strokeWidth={3}>\n// <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M5 13l4 4L19 7\" />\n// </svg>\n// </div>\n\n// <h3 className=\"text-2xl font-bold mb-3 text-gray-900\">Payment Successful!</h3>\n\n// {state.paymentData && state.selectedToken && (\n// <p className=\"text-center max-w-xs mb-6 text-gray-600\">\n// Your payment of <span className=\"text-purple-600 font-semibold\">\n// ${parseFloat(state.paymentData.totalAmount || state.paymentData.amount).toFixed(2)} {state.selectedToken.symbol}\n// </span> has been completed.\n// </p>\n// )}\n\n// {state.actualTransactionHash && (\n// <div className=\"w-full mb-6 px-4\">\n// <p className=\"text-sm font-medium mb-2 text-gray-700\">Transaction Hash</p>\n// <div className=\"flex items-center justify-between p-3 rounded-lg border bg-gray-50 border-gray-200\">\n// <span className=\"font-mono text-sm text-gray-700\">\n// {`${state.actualTransactionHash.slice(0, 8)}...${state.actualTransactionHash.slice(-8)}`}\n// </span>\n// <button\n// onClick={() => navigator.clipboard.writeText(state.actualTransactionHash)}\n// className=\"text-gray-500 hover:text-gray-700\"\n// >\n// <svg className=\"h-4 w-4\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n// <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z\" />\n// </svg>\n// </button>\n// </div>\n// </div>\n// )}\n\n// <button\n// onClick={onClose}\n// className=\"w-full py-3 px-4 bg-purple-600 text-white font-semibold rounded-2xl text-lg shadow-md hover:bg-purple-700 transition-colors\"\n// >\n// Close\n// </button>\n// </div>\n// </ScreenTransition>\n// </div>\n\n// {/* Footer */}\n// {state.currentStep !== 'success' && (\n// <div className=\"text-center text-xs text-gray-500 flex items-center justify-center gap-1 py-6 bg-white rounded-b-3xl\">\n// <p>Powered by <span className=\"text-purple-600 font-semibold\">Coinley</span> - Enhanced Multi-Wallet Support</p>\n// <svg className=\"inline w-4 h-4 text-green-500 ml-1\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" viewBox=\"0 0 24 24\">\n// <circle cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" strokeWidth=\"2\" fill=\"none\" />\n// <path d=\"M9 12l2 2 4-4\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n// </svg>\n// </div>\n// )}\n \n// </div>\n// </div>\n// </div>\n// </div>\n// );\n// };\n\n// export default EnhancedSimpleCoinleyPayment;\n\n\n\n\n//src/components/EnhancedSimpleCoinleyPayment.jsx \nimport React, { useState, useEffect, useRef } from 'react';\nimport ReactDOM from 'react-dom';\nimport { createConfig, http, connect, disconnect, getAccount, sendTransaction, switchChain, getBalance } from '@wagmi/core';\nimport { mainnet, bsc, polygon, arbitrum, optimism, avalanche } from '@wagmi/core/chains';\nimport { injected, metaMask, coinbaseWallet } from '@wagmi/connectors';\nimport logo from \"../assets/Logomark.png\"\n\n// Import ONLY the mobile utils - keep everything else as is\nimport { MobileUtils } from '../utils/MobileUtils.js';\n\n// Wagmi Configuration (same as your original)\nconst wagmiConfig = createConfig({\n chains: [mainnet, bsc, polygon, arbitrum, optimism, avalanche],\n connectors: [\n injected({\n target: {\n id: 'injected',\n name: 'Injected Wallet',\n provider: () => window.ethereum\n }\n }),\n metaMask(),\n coinbaseWallet({\n appName: 'Coinley Payment',\n appLogoUrl: logo\n })\n ],\n transports: {\n [mainnet.id]: http(),\n [bsc.id]: http(),\n [polygon.id]: http(),\n [arbitrum.id]: http(),\n [optimism.id]: http(),\n [avalanche.id]: http(),\n },\n});\n\n// Keep your existing working API class\nclass SimplePaymentAPI {\n constructor(baseURL, apiKey, apiSecret) {\n this.baseURL = baseURL.endsWith('/') ? baseURL.slice(0, -1) : baseURL;\n this.apiKey = apiKey;\n this.apiSecret = apiSecret;\n }\n\n async request(endpoint, options = {}) {\n const url = `${this.baseURL}${endpoint}`;\n\n const headers = {\n 'Content-Type': 'application/json',\n 'X-API-Key': this.apiKey,\n 'X-API-Secret': this.apiSecret,\n ...options.headers\n };\n\n const response = await fetch(url, {\n ...options,\n headers\n });\n\n if (!response.ok) {\n const error = await response.json().catch(() => ({}));\n throw new Error(error.error || `HTTP ${response.status}`);\n }\n\n return response.json();\n }\n\n async getNetworks() {\n try {\n return await this.request('/api/networks');\n } catch (error) {\n console.error('Failed to fetch networks:', error);\n return {\n networks: [\n { id: '1', name: 'Ethereum', shortName: 'ethereum', chainId: '0x1', type: 'ethereum' },\n { id: '56', name: 'BSC', shortName: 'bsc', chainId: '0x38', type: 'bsc' },\n { id: '137', name: 'Polygon', shortName: 'polygon', chainId: '0x89', type: 'polygon' },\n { id: '42161', name: 'Arbitrum', shortName: 'arbitrum', chainId: '0xa4b1', type: 'arbitrum' },\n { id: '10', name: 'Optimism', shortName: 'optimism', chainId: '0xa', type: 'optimism' },\n { id: '43114', name: 'Avalanche', shortName: 'avalanche', chainId: '0xa86a', type: 'avalanche' }\n ]\n };\n }\n }\n\n async getTokens() {\n try {\n return await this.request('/api/networks/stablecoins');\n } catch (error) {\n console.error('Failed to fetch tokens:', error);\n return {\n stablecoins: [\n {\n id: '1', name: 'Tether USD', symbol: 'USDT',\n contractAddress: '0xdAC17F958D2ee523a2206206994597C13D831ec7',\n decimals: 6, networkId: '1',\n Network: { shortName: 'ethereum', name: 'Ethereum' }\n },\n {\n id: '2', name: 'USD Coin', symbol: 'USDC',\n contractAddress: '0xA0b86a33E6441d81d0B93bF9EE0f74ca32F7e6f6',\n decimals: 6, networkId: '1',\n Network: { shortName: 'ethereum', name: 'Ethereum' }\n }\n ]\n };\n }\n }\n\n async createPayment(data) {\n return await this.request('/api/payments/create', {\n method: 'POST',\n body: JSON.stringify(data)\n });\n }\n\n async verifyQRPayment(paymentId) {\n return await this.request('/api/payments/verify-qr', {\n method: 'POST',\n body: JSON.stringify({ paymentId })\n });\n }\n\n async processPayment(paymentId, transactionHash, network, senderAddress) {\n return await this.request('/api/payments/process', {\n method: 'POST',\n body: JSON.stringify({\n paymentId,\n transactionHash,\n network,\n senderAddress\n })\n });\n }\n}\n\n// Enhanced Wagmi Wallet Manager with better wallet detection (but no WalletConnect)\nclass WagmiWalletManager {\n constructor() {\n this.connectedWallet = null;\n this.walletType = null;\n }\n\n // Enhanced wallet detection - supports more wallets but removes WalletConnect\n getAvailableWallets() {\n const wallets = [];\n\n if (!window.ethereum) {\n console.log('❌ No window.ethereum found');\n return wallets;\n }\n\n // Enhanced wallet detection\n const detectedWallets = this.detectWallets();\n\n console.log('🔍 DEBUGGING: Detected wallets:', detectedWallets);\n\n // Add wallets based on detection (NO WALLETCONNECT)\n if (detectedWallets.metamask) {\n wallets.push({\n type: 'metamask',\n name: 'MetaMask',\n icon: '🦊',\n description: 'Connect using MetaMask wallet',\n color: 'orange',\n isInstalled: true,\n connector: 'injected'\n });\n }\n\n if (detectedWallets.rabby) {\n wallets.push({\n type: 'rabby',\n name: 'Rabby',\n icon: '🐰',\n description: 'Connect using Rabby wallet',\n color: 'blue',\n isInstalled: true,\n connector: 'injected'\n });\n }\n\n if (detectedWallets.zerion) {\n wallets.push({\n type: 'zerion',\n name: 'Zerion',\n icon: '⚡',\n description: 'Connect using Zerion wallet',\n color: 'purple',\n isInstalled: true,\n connector: 'injected'\n });\n }\n\n if (detectedWallets.cryptocom) {\n wallets.push({\n type: 'cryptocom',\n name: 'Crypto.com',\n icon: '💎',\n description: 'Connect using Crypto.com DeFi Wallet',\n color: 'blue',\n isInstalled: true,\n connector: 'injected'\n });\n }\n\n if (detectedWallets.coinbase) {\n wallets.push({\n type: 'coinbase',\n name: 'Coinbase Wallet',\n icon: '🔵',\n description: 'Connect using Coinbase Wallet',\n color: 'blue',\n isInstalled: true,\n connector: 'coinbase'\n });\n }\n\n if (detectedWallets.phantom) {\n wallets.push({\n type: 'phantom',\n name: 'Phantom',\n icon: '👻',\n description: 'Connect using Phantom wallet',\n color: 'purple',\n isInstalled: true,\n connector: 'injected'\n });\n }\n\n if (detectedWallets.trust) {\n wallets.push({\n type: 'trust',\n name: 'Trust Wallet',\n icon: '🛡️',\n description: 'Connect using Trust Wallet',\n color: 'blue',\n isInstalled: true,\n connector: 'injected'\n });\n }\n\n // Fallback: if no specific wallets detected but ethereum exists, show generic injected\n if (wallets.length === 0 && window.ethereum) {\n wallets.push({\n type: 'injected',\n name: 'Browser Wallet',\n icon: '🌐',\n description: 'Connect using your browser wallet',\n color: 'gray',\n isInstalled: true,\n connector: 'injected'\n });\n }\n\n console.log('🔍 Final available wallets:', wallets.map(w => w.name));\n return wallets;\n }\n\n // Enhanced wallet detection method\n detectWallets() {\n const detected = {\n metamask: false,\n rabby: false,\n zerion: false,\n cryptocom: false,\n coinbase: false,\n phantom: false,\n trust: false\n };\n\n if (!window.ethereum) return detected;\n\n // Check for MetaMask\n if (window.ethereum.isMetaMask === true) {\n detected.metamask = true;\n }\n\n // Check for Rabby\n if (window.ethereum.isRabby === true || window.rabby) {\n detected.rabby = true;\n }\n\n // Check for Zerion\n if (window.ethereum.isZerion === true || window.zerionWallet) {\n detected.zerion = true;\n }\n\n // Check for Crypto.com DeFi Wallet\n if (window.ethereum.isDefiWallet === true || window.deficonnectProvider) {\n detected.cryptocom = true;\n }\n\n // Check for Coinbase Wallet\n if (window.ethereum.isCoinbaseWallet === true || window.coinbaseWalletExtension) {\n detected.coinbase = true;\n }\n\n // Check for Phantom (primarily Solana but supports Ethereum)\n if (window.phantom?.ethereum || window.ethereum.isPhantom) {\n detected.phantom = true;\n }\n\n // Check for Trust Wallet\n if (window.ethereum.isTrust === true || window.ethereum.isTrustWallet === true) {\n detected.trust = true;\n }\n\n // Check in providers array if it exists\n if (window.ethereum.providers && Array.isArray(window.ethereum.providers)) {\n window.ethereum.providers.forEach(provider => {\n if (provider.isMetaMask) detected.metamask = true;\n if (provider.isRabby) detected.rabby = true;\n if (provider.isZerion) detected.zerion = true;\n if (provider.isDefiWallet) detected.cryptocom = true;\n if (provider.isCoinbaseWallet) detected.coinbase = true;\n if (provider.isPhantom) detected.phantom = true;\n if (provider.isTrust || provider.isTrustWallet) detected.trust = true;\n });\n }\n\n return detected;\n }\n\n // Connect to wallet using Wagmi\n async connect(walletType) {\n try {\n console.log(`🔗 Attempting to connect to ${walletType}...`);\n\n let connector;\n\n // Map wallet types to Wagmi connectors\n switch (walletType) {\n case 'metamask':\n connector = wagmiConfig.connectors.find(c => c.id === 'metaMask');\n break;\n case 'coinbase':\n connector = wagmiConfig.connectors.find(c => c.id === 'coinbaseWallet');\n break;\n case 'rabby':\n case 'zerion':\n case 'cryptocom':\n case 'phantom':\n case 'trust':\n case 'injected':\n default:\n connector = wagmiConfig.connectors.find(c => c.id === 'injected');\n break;\n }\n\n if (!connector) {\n throw new Error(`Connector not found for ${walletType}`);\n }\n\n // Connect using Wagmi\n const result = await connect(wagmiConfig, { connector });\n\n // Get account details\n const account = getAccount(wagmiConfig);\n\n if (!account.address) {\n throw new Error(`No accounts found. Please unlock ${walletType} and try again.`);\n }\n\n // Store connection info\n this.connectedWallet = {\n account: account.address,\n chainId: account.chainId,\n walletType: walletType,\n connector: connector\n };\n\n this.walletType = walletType;\n\n console.log(`✅ ${walletType} connected successfully via Wagmi:`, {\n account: account.address,\n chainId: account.chainId\n });\n\n return this.connectedWallet;\n\n } catch (error) {\n console.error(`❌ ${walletType} connection failed:`, error);\n\n // Provide user-friendly error messages\n if (error.code === 4001 || error.message.includes('User rejected')) {\n throw new Error(`Connection rejected. Please approve the connection in ${walletType}.`);\n } else {\n throw new Error(`${walletType} connection failed: ${error.message}`);\n }\n }\n }\n\n // Send transaction using Wagmi\n async sendTransaction(txParams) {\n if (!this.connectedWallet) {\n throw new Error('No wallet connected');\n }\n\n try {\n console.log(`📤 Sending transaction via Wagmi:`, txParams);\n\n // Prepare transaction parameters for Wagmi\n const wagmiTxParams = {\n to: txParams.to,\n value: txParams.value || 0n,\n data: txParams.data || '0x',\n gas: txParams.gas ? BigInt(txParams.gas) : undefined\n };\n\n // Send transaction using Wagmi\n const txHash = await sendTransaction(wagmiConfig, wagmiTxParams);\n\n console.log(`✅ Transaction sent successfully via Wagmi:`, txHash);\n return txHash;\n\n } catch (error) {\n console.error(`❌ Transaction failed via Wagmi:`, error);\n\n if (error.code === 4001) {\n throw new Error('Transaction cancelled by user');\n } else if (error.message.includes('insufficient funds')) {\n throw new Error('Insufficient funds in wallet');\n } else if (error.message.includes('gas')) {\n throw new Error('Gas estimation failed. You may not have enough ETH for gas fees.');\n } else {\n throw new Error(error.message || 'Transaction failed');\n }\n }\n }\n\n // Check if wallet is connected using Wagmi\n isConnected() {\n const account = getAccount(wagmiConfig);\n return account.isConnected && !!this.connectedWallet;\n }\n\n // Get connected wallet info\n getConnectedWallet() {\n const account = getAccount(wagmiConfig);\n if (account.isConnected && this.connectedWallet) {\n return {\n ...this.connectedWallet,\n account: account.address,\n chainId: account.chainId\n };\n }\n return null;\n }\n\n // Disconnect wallet using Wagmi\n async disconnect() {\n try {\n await disconnect(wagmiConfig);\n this.connectedWallet = null;\n this.walletType = null;\n console.log('✅ Wallet disconnected successfully');\n } catch (error) {\n console.error('❌ Disconnect failed:', error);\n }\n }\n\n // Switch chain using Wagmi\n async switchChain(chainId) {\n try {\n await switchChain(wagmiConfig, { chainId });\n console.log(`✅ Switched to chain ${chainId}`);\n } catch (error) {\n console.error(`❌ Chain switch failed:`, error);\n throw error;\n }\n }\n}\n\n// Your existing logo mapping and helper functions (KEEP THESE!)\nconst CMC_LOGO_BASE_URL = 'https://s2.coinmarketcap.com/static/img/coins/64x64';\n\nconst CmcIds = {\n bitcoin: 1,\n ethereum: 1027,\n bsc: 1839,\n polygon: 3890,\n tron: 1958,\n solana: 5426,\n algorand: 4030,\n cardano: 2010,\n avalanche: 5805,\n fantom: 3513,\n arbitrum: 11841,\n optimism: 11840,\n USDT: 825,\n USDC: 3408,\n BUSD: 4687,\n DAI: 4943,\n FRAX: 6952,\n TUSD: 2563,\n USDP: 5992,\n USDD: 5994,\n FDUSD: 26081,\n PYUSD: 28295,\n WBTC: 3717,\n LINK: 1975,\n UNI: 7083,\n AAVE: 7278,\n COMP: 5692,\n YFI: 5864,\n MKR: 1518,\n SUSHI: 6758,\n CRV: 6538,\n SNX: 2586,\n UMA: 5617,\n BAL: 5728,\n MANA: 1966,\n SAND: 6210,\n APE: 18876,\n LDO: 8000,\n GRT: 6719,\n ENS: 13855,\n RPL: 2943,\n SHIB: 5994,\n MATIC: 3890,\n BNB: 1839,\n ADA: 2010,\n SOL: 5426,\n DOT: 6636,\n AVAX: 5805,\n TRX: 1958,\n ALGO: 4030,\n FTM: 3513,\n ARB: 11841,\n OP: 11840,\n \"1INCH\": 8104,\n DYDX: 11156,\n ICP: 8916,\n FIL: 2280,\n CAKE: 7186,\n RUNE: 4157,\n ALPHA: 7232,\n BNT: 1727,\n KNC: 1982,\n ZRX: 1896,\n REN: 2539,\n LRC: 1934,\n WETH: 2396,\n WMATIC: 3890,\n WBNB: 1839,\n UST: 7129,\n USTC: 7129,\n LUSD: 8115,\n MIM: 9681,\n FEI: 8642,\n TRIBE: 8741,\n RAI: 8525,\n SUSD: 2927,\n};\n\nconst getCmcLogoUrl = (symbol) => {\n if (!symbol) return null;\n\n const directId = CmcIds[symbol.toUpperCase()];\n if (directId) {\n return `${CMC_LOGO_BASE_URL}/${directId}.png`;\n }\n\n return null;\n};\n\nconst NetworkLogos = {\n ethereum: 'https://s2.coinmarketcap.com/static/img/coins/64x64/1027.png',\n bsc: 'https://s2.coinmarketcap.com/static/img/coins/64x64/1839.png',\n tron: 'https://s2.coinmarketcap.com/static/img/coins/64x64/1958.png',\n algorand: 'https://s2.coinmarketcap.com/static/img/coins/64x64/4030.png',\n solana: 'https://s2.coinmarketcap.com/static/img/coins/64x64/5426.png',\n polygon: 'https://s2.coinmarketcap.com/static/img/coins/64x64/28321.png',\n arbitrum: 'https://s2.coinmarketcap.com/static/img/coins/64x64/11841.png',\n avalanche: 'https://s2.coinmarketcap.com/static/img/coins/64x64/5805.png',\n celo: 'https://s2.coinmarketcap.com/static/img/coins/64x64/5567.png',\n optimism: 'https://s2.coinmarketcap.com/static/img/coins/64x64/11840.png',\n eth: 'https://s2.coinmarketcap.com/static/img/coins/64x64/1027.png',\n bnb: 'https://s2.coinmarketcap.com/static/img/coins/64x64/1839.png',\n trx: 'https://s2.coinmarketcap.com/static/img/coins/64x64/1958.png',\n algo: 'https://s2.coinmarketcap.com/static/img/coins/64x64/4030.png',\n sol: 'https://s2.coinmarketcap.com/static/img/coins/64x64/5426.png',\n matic: 'https://s2.coinmarketcap.com/static/img/coins/64x64/28321.png',\n arb: 'https://s2.coinmarketcap.com/static/img/coins/64x64/11841.png',\n avax: 'https://s2.coinmarketcap.com/static/img/coins/64x64/5805.png',\n op: 'https://s2.coinmarketcap.com/static/img/coins/64x64/11840.png'\n};\n\nconst getTokenLogoUrl = (symbol) => {\n return getCmcLogoUrl(symbol);\n};\n\n// Your existing ModernDropdown component (KEEP THIS!)\nconst ModernDropdown = ({\n options = [],\n value,\n onChange,\n placeholder,\n renderOption,\n getOptionKey,\n getOptionValue,\n getSearchableText,\n disabled = false\n}) => {\n const [isOpen, setIsOpen] = useState(false);\n const [searchTerm, setSearchTerm] = useState('');\n const [dropdownPosition, setDropdownPosition] = useState({ top: 0, left: 0, width: 400, maxHeight: 450 });\n const dropdownRef = useRef(null);\n const buttonRef = useRef(null);\n\n const filteredOptions = options.filter(option => {\n const searchableText = getSearchableText ? getSearchableText(option) : '';\n return searchableText.toLowerCase().includes(searchTerm.toLowerCase());\n });\n\n const selectedOption = options.find(option => getOptionValue(option) === value);\n\n const updateDropdownPosition = () => {\n if (buttonRef.current) {\n const viewportWidth = window.innerWidth;\n const viewportHeight = window.innerHeight;\n const scrollTop = window.pageYOffset || document.documentElement.scrollTop;\n const scrollLeft = window.pageXOffset || document.documentElement.scrollLeft;\n\n const dropdownWidth = Math.min(400, viewportWidth - 40);\n const dropdownHeight = Math.min(450, viewportHeight - 100);\n\n const centerX = viewportWidth / 2;\n const centerY = viewportHeight / 2;\n\n const left = centerX - (dropdownWidth / 2);\n const top = centerY - (dropdownHeight / 2);\n\n setDropdownPosition({\n top: top + scrollTop,\n left: left + scrollLeft,\n width: dropdownWidth,\n maxHeight: dropdownHeight\n });\n }\n };\n\n useEffect(() => {\n const handleClickOutside = (event) => {\n if (dropdownRef.current && !dropdownRef.current.contains(event.target) &&\n buttonRef.current && !buttonRef.current.contains(event.target)) {\n setIsOpen(false);\n setSearchTerm('');\n }\n };\n\n const handleScroll = () => {\n if (isOpen) {\n updateDropdownPosition();\n }\n };\n\n const handleResize = () => {\n if (isOpen) {\n updateDropdownPosition();\n }\n };\n\n if (isOpen) {\n updateDropdownPosition();\n document.addEventListener('mousedown', handleClickOutside);\n window.addEventListener('scroll', handleScroll, true);\n window.addEventListener('resize', handleResize);\n }\n\n return () => {\n document.removeEventListener('mousedown', handleClickOutside);\n window.removeEventListener('scroll', handleScroll, true);\n window.removeEventListener('resize', handleResize);\n };\n }, [isOpen]);\n\n const handleToggle = () => {\n if (!disabled) {\n if (!isOpen) {\n updateDropdownPosition();\n }\n setIsOpen(!isOpen);\n }\n };\n\n const dropdownContent = isOpen && (\n <>\n <div\n className=\"fixed inset-0 bg-black bg-opacity-30 transition-opacity\"\n style={{ zIndex: 999998 }}\n onClick={() => {\n setIsOpen(false);\n setSearchTerm('');\n }}\n />\n\n <div\n ref={dropdownRef}\n className=\"fixed bg-white border-2 border-gray-200 rounded-3xl shadow-2xl overflow-hidden\"\n style={{\n top: dropdownPosition.top,\n left: dropdownPosition.left,\n width: dropdownPosition.width,\n maxHeight: dropdownPosition.maxHeight,\n zIndex: 999999,\n transform: 'translateZ(0)',\n boxShadow: '0 25px 50px -12px rgba(0, 0, 0, 0.25), 0 0 0 1px rgba(0, 0, 0, 0.05)'\n }}\n >\n <div className=\"flex items-center justify-between p-4 border-b border-gray-200 bg-gradient-to-r from-[#7042D2]/10 to-purple-50\">\n <h3 className=\"text-lg font-semibold text-[#7042D2]\" style={{ fontFamily: 'Bricolage Grotesque, sans-serif' }}>\n {placeholder || 'Select Option'}\n </h3>\n <button\n onClick={() => {\n setIsOpen(false);\n setSearchTerm('');\n }}\n className=\"text-gray-500 hover:text-gray-700 transition-colors p-1 rounded-full hover:bg-gray-100\"\n >\n <svg xmlns=\"http://www.w3.org/2000/svg\" className=\"h-5 w-5\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n </button>\n </div>\n\n <div className=\"p-4 border-b border-gray-200 bg-gray-50\">\n <input\n type=\"text\"\n placeholder=\"Search networks and tokens...\"\n value={searchTerm}\n onChange={(e) => setSearchTerm(e.target.value)}\n className=\"w-full p-3 border border-gray-300 rounded-xl focus:outline-none focus:ring-2 focus:ring-[#7042D2]/20 focus:border-[#7042D2] text-sm\"\n style={{ fontFamily: 'Bricolage Grotesque, sans-serif' }}\n autoFocus\n />\n </div>\n\n <div\n className=\"overflow-y-auto custom-scrollbar\"\n style={{\n maxHeight: `${(dropdownPosition.maxHeight || 450) - 180}px`,\n minHeight: '200px'\n }}\n >\n {filteredOptions.length === 0 ? (\n <div className=\"p-8 text-gray-500 text-center\" style={{ fontFamily: 'Bricolage Grotesque, sans-serif' }}>\n <div className=\"text-4xl mb-3\">🔍</div>\n <div className=\"text-lg mb-2\">No options found</div>\n <div className=\"text-sm text-gray-400\">Try a different search term</div>\n </div>\n ) : (\n <>\n <div className=\"px-4 py-3 bg-gray-50 border-b border-gray-100 text-sm text-gray-600\" style={{ fontFamily: 'Bricolage Grotesque, sans-serif' }}>\n <span className=\"font-semibold\">{filteredOptions.length}</span> option{filteredOptions.length !== 1 ? 's' : ''} available\n </div>\n\n <div className=\"p-2\">\n {filteredOptions.map((option) => (\n <button\n key={getOptionKey(option)}\n type=\"button\"\n onClick={() => {\n onChange(getOptionValue(option));\n setIsOpen(false);\n setSearchTerm('');\n }}\n className={`w-full p-4 text-left hover:bg-[#7042D2]/10 transition-all duration-200 rounded-xl mb-2 last:mb-0 ${getOptionValue(option) === value\n ? 'bg-[#7042D2]/20 text-[#7042D2] border-2 border-[#7042D2]/30'\n : 'text-gray-800 border-2 border-transparent hover:border-[#7042D2]/20'\n }`}\n style={{ fontFamily: 'Bricolage Grotesque, sans-serif' }}\n >\n {renderOption(option)}\n </button>\n ))}\n </div>\n </>\n )}\n </div>\n\n <div className=\"p-3 bg-gradient-to-r from-gray-50 to-gray-100 border-t border-gray-200 text-center\">\n <div className=\"text-xs text-gray-500\" style={{ fontFamily: 'Bricolage Grotesque, sans-serif' }}>\n {filteredOptions.length > 5 ? '↕️ Scroll to see more options' : '✨ Select your preferred option'}\n </div>\n </div>\n </div>\n </>\n );\n\n return (\n <>\n <div className=\"relative\">\n <button\n ref={buttonRef}\n type=\"button\"\n onClick={handleToggle}\n disabled={disabled}\n className={`w-full p-4 border-2 rounded-2xl bg-gradient-to-r from-white to-gray-50 text-left focus:outline-none focus:ring-3 focus:ring-[#7042D2]/20 focus:border-[#7042D2] transition-all duration-300 ease-out shadow-lg hover:shadow-xl ${disabled ? 'opacity-50 cursor-not-allowed' : 'hover:border-[#7042D2]/50 cursor-pointer'\n } ${isOpen ? 'border-[#7042D2] ring-3 ring-[#7042D2]/20' : 'border-gray-200'}`}\n style={{\n minHeight: '60px',\n fontFamily: 'Bricolage Grotesque, sans-serif',\n fontSize: '16px',\n fontWeight: '500'\n }}\n >\n <div className=\"flex items-center justify-between\">\n <div className=\"flex items-center space-x-3\">\n {selectedOption ? renderOption(selectedOption) : (\n <span className=\"text-gray-500\">{placeholder}</span>\n )}\n </div>\n <div className={`transform transition-transform duration-200 ${isOpen ? 'rotate-180' : ''}`}>\n <svg xmlns=\"http://www.w3.org/2000/svg\" className=\"h-5 w-5 text-[#7042D2]\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M19 9l-7 7-7-7\" />\n </svg>\n </div>\n </div>\n </button>\n </div>\n\n {typeof document !== 'undefined' && document.body &&\n ReactDOM.createPortal(dropdownContent, document.body)\n }\n\n <style jsx>{`\n .custom-scrollbar {\n scrollbar-width: thin;\n scrollbar-color: #7042D2 #f1f1f1;\n }\n .custom-scrollbar::-webkit-scrollbar {\n width: 12px;\n }\n .custom-scrollbar::-webkit-scrollbar-track {\n background: #f8f9fa;\n border-radius: 10px;\n margin: 4px;\n }\n .custom-scrollbar::-webkit-scrollbar-thumb {\n background: linear-gradient(180deg, #7042D2 0%, #5b34b1 100%);\n border-radius: 10px;\n border: 2px solid #f8f9fa;\n }\n .custom-scrollbar::-webkit-scrollbar-thumb:hover {\n background: linear-gradient(180deg, #5b34b1 0%, #4c2a93 100%);\n }\n .custom-scrollbar::-webkit-scrollbar-corner {\n background: #f8f9fa;\n }\n `}</style>\n </>\n );\n};\n\n// Enhanced Wallet Selection Component with working detection\nconst WagmiWalletSelector = ({\n selectedNetwork,\n onWalletSelect,\n onConnect,\n connectedWallet,\n loading\n}) => {\n const [selectedWalletType, setSelectedWalletType] = useState(null);\n const walletManager = useRef(new WagmiWalletManager());\n\n const getAvailableWallets = () => {\n if (!selectedNetwork) return [];\n\n // Only show wallets for EVM-compatible chains\n if (['ethereum', 'bsc', 'polygon', 'arbitrum', 'optimism', 'avalanche'].includes(selectedNetwork.shortName)) {\n const detectedWallets = walletManager.current.getAvailableWallets();\n\n console.log('🔍 WAGMI: Detected wallets:', detectedWallets);\n\n return detectedWallets;\n }\n\n return [];\n };\n\n const availableWallets = getAvailableWallets();\n\n const handleWalletSelection = async (walletType) => {\n setSelectedWalletType(walletType);\n onWalletSelect(walletType);\n await onConnect(walletType);\n };\n\n // Render wallet option for dropdown\n const renderWalletOption = (wallet) => {\n return (\n <div className=\"flex items-center space-x-3\">\n <div className=\"text-2xl\">{wallet.icon}</div>\n <div className=\"flex-1\">\n <div className=\"font-semibold text-gray-800 flex items-center\">\n {wallet.name}\n {['rabby', 'zerion', 'phantom'].includes(wallet.type) && (\n <span className=\"ml-2 px-2 py-1 bg-blue-100 text-blue-700 text-xs rounded-full\">\n NEW\n </span>\n )}\n {connectedWallet?.walletType === wallet.type && (\n <span className=\"ml-2 px-2 py-1 bg-green-100 text-green-700 text-xs rounded-full\">\n CONNECTED\n </span>\n )}\n </div>\n <div className=\"text-sm text-gray-500\">\n {connectedWallet?.walletType === wallet.type\n ? `Connected • ${connectedWallet.account?.slice(0, 6)}...${connectedWallet.account?.slice(-4)}`\n : wallet.description\n }\n </div>\n </div>\n {loading && selectedWalletType === wallet.type && (\n <div className=\"animate-spin rounded-full h-5 w-5 border-b-2 border-[#7042D2]\"></div>\n )}\n </div>\n );\n };\n\n if (!selectedNetwork) {\n return (\n <div className=\"text-center p-4\">\n <p className=\"text-gray-500\">Please select a network first</p>\n </div>\n );\n }\n\n if (availableWallets.length === 0) {\n return (\n <div className=\"text-center p-4\">\n <p className=\"text-gray-500 mb-4\">No compatible wallets found for {selectedNetwork.name}</p>\n <div className=\"p-3 bg-amber-50 rounded-lg border border-amber-200\">\n <div className=\"text-sm text-amber-800\" style={{ fontFamily: 'Bricolage Grotesque, sans-serif' }}>\n <div className=\"font-medium mb-2\">Install a compatible wallet:</div>\n <div className=\"space-y-1 text-xs\">\n <div>• <a href=\"https://metamask.io\" target=\"_blank\" rel=\"noopener noreferrer\" className=\"text-amber-700 underline hover:text-amber-900\">Install MetaMask</a></div>\n <div>• <a href=\"https://rabby.io\" target=\"_blank\" rel=\"noopener noreferrer\" className=\"text-amber-700 underline hover:text-amber-900\">Install Rabby Wallet</a></div>\n <div>• <a href=\"https://wallet.coinbase.com/\" target=\"_blank\" rel=\"noopener noreferrer\" className=\"text-amber-700 underline hover:text-amber-900\">Install Coinbase Wallet</a></div>\n <div>• <a href=\"https://zerion.io/wallet\" target=\"_blank\" rel=\"noopener noreferrer\" className=\"text-amber-700 underline hover:text-amber-900\">Install Zerion Wallet</a></div>\n </div>\n </div>\n </div>\n </div>\n );\n }\n\n return (\n <div className=\"space-y-4\">\n <label className=\"block text-sm font-medium text-gray-700\" style={{ fontFamily: 'Bricolage Grotesque, sans-serif' }}>\n Select Wallet for {selectedNetwork.name}\n </label>\n\n {/* Beautiful Wallet Dropdown */}\n <ModernDropdown\n options={availableWallets}\n value={connectedWallet?.walletType || selectedWalletType || ''}\n onChange={handleWalletSelection}\n placeholder=\"Choose your wallet...\"\n renderOption={renderWalletOption}\n getOptionKey={(wallet) => wallet.type}\n getOptionValue={(wallet) => wallet.type}\n getSearchableText={(wallet) => `${wallet.name} ${wallet.description}`}\n disabled={loading}\n />\n\n {/* Connection status */}\n {connectedWallet && (\n <div className=\"p-3 bg-green-50 rounded-lg border border-green-200\">\n <div className=\"text-sm text-green-800 text-center\" style={{ fontFamily: 'Bricolage Grotesque, sans-serif' }}>\n <div className=\"font-medium\">Wallet Connected</div>\n <div className=\"text-xs mt-1 flex items-center justify-center space-x-2\">\n <span className=\"text-2xl\">\n {availableWallets.find(w => w.type === connectedWallet.walletType)?.icon}\n </span>\n <span>\n {connectedWallet.account?.slice(0, 6)}...{connectedWallet.account?.slice(-4)}\n ({availableWallets.find(w => w.type === connectedWallet.walletType)?.name})\n </span>\n </div>\n </div>\n </div>\n )}\n\n {/* Debug info - made more compact */}\n <div className=\"text-xs text-gray-500\" style={{ fontFamily: 'Bricolage Grotesque, sans-serif' }}>\n {availableWallets.length} wallet(s) detected - {availableWallets.map(w => w.name).join(', ')}\n </div>\n </div>\n );\n};\n\n// Your existing EnhancedQRCode component with mobile support\nconst EnhancedQRCode = ({\n walletAddress,\n amount,\n currency,\n network,\n theme = 'light'\n}) => {\n const [qrData, setQrData] = useState('');\n const [isGenerating, setIsGenerating] = useState(true);\n const [copied, setCopied] = useState(false);\n\n useEffect(() => {\n const generateQRData = () => {\n setIsGenerating(true);\n setTimeout(() => {\n setQrData(`${walletAddress}?amount=${amount}¤cy=${currency}&network=${network}`);\n setIsGenerating(false);\n }, 1000);\n };\n\n if (walletAddress) {\n generateQRData();\n }\n }, [walletAddress, amount, currency, network]);\n\n const formatWalletAddress = (address) => {\n if (!address || address.length <= 16) return address;\n return `${address.slice(0, 6)}...${address.slice(-4)}`;\n };\n\n const handleCopy = async () => {\n const success = await MobileUtils.copyToClipboard(walletAddress);\n if (success) {\n setCopied(true);\n MobileUtils.vibrate([50]);\n setTimeout(() => setCopied(false), 2000);\n }\n };\n\n return (\n <div className=\"flex flex-col items-center\">\n <div className=\"p-4 rounded-lg bg-white mb-3 shadow-sm border\">\n {isGenerating ? (\n <div className=\"flex items-center justify-center\" style={{ width: 200, height: 200 }}>\n <div className=\"text-center\">\n <div className=\"animate-spin rounded-full h-8 w-8 border-b-2 border-purple-600 mx-auto mb-2\"></div>\n <div className=\"text-sm text-gray-600\">Generating QR Code...</div>\n </div>\n </div>\n ) : (\n <div className=\"flex items-center justify-center bg-gray-100 rounded-lg\" style={{ width: 200, height: 200 }}>\n <div className=\"text-center p-4\">\n <div className=\"text-2xl mb-2\">📱</div>\n <div className=\"text-sm text-gray-600\">QR Code</div>\n <div className=\"text-xs text-gray-500 mt-1\">Scan to pay</div>\n </div>\n </div>\n )}\n </div>\n\n <div className=\"text-center text-sm text-gray-700 mb-4\">\n <p className=\"font-semibold text-gray-800 flex items-center justify-center\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" className=\"h-4 w-4 mr-1\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M12 4v1m6 11h2m-6 0h-2v4m0-11v3m0 0h.01M12 12h4.01M12 12h-4.01M12 12V8.01\" />\n </svg>\n Scan to Pay with {currency}\n </p>\n <p className=\"text-xs text-gray-500 mt-1\">\n Scan with your {network} wallet app\n </p>\n </div>\n\n {/* Mobile action buttons */}\n {MobileUtils.isMobile() && (\n <div className=\"w-full mb-4 space-y-2\">\n <button\n onClick={handleCopy}\n className={`w-full py-2 px-4 rounded-xl font-semibold transition-all ${\n copied \n ? 'bg-green-600 text-white' \n : 'bg-gray-100 text-gray-800 hover:bg-gray-200'\n }`}\n >\n {copied ? 'Address Copied!' : 'Copy Address'}\n </button>\n </div>\n )}\n\n <div className=\"w-full mb-4 p-3 bg-gray-50 rounded-lg\">\n <div className=\"flex justify-between items-center\">\n <span className=\"text-sm font-medium text-gray-700\">Amount to Pay:</span>\n <span className=\"text-lg font-bold text-[#7042D2]\">{amount} {currency}</span>\n </div>\n <div className=\"flex justify-between items-center mt-1\">\n <span className=\"text-xs text-gray-500\">Network:</span>\n <span className=\"text-xs font-medium text-gray-700\">{network}</span>\n </div>\n <div className=\"flex justify-between items-center mt-1\">\n <span className=\"text-xs text-gray-500\">Recipient:</span>\n <span className=\"text-xs font-mono text-gray-700\">{formatWalletAddress(walletAddress)}</span>\n </div>\n </div>\n\n <div className=\"w-full\">\n <div className=\"p-3 rounded bg-blue-50 border border-blue-200\">\n <h4 className=\"text-sm font-medium mb-2 text-blue-800 flex items-center\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" className=\"h-4 w-4 mr-1\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M13 16h-1v-4h-1m1-4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z\" />\n </svg>\n Payment Instructions\n </h4>\n <ol className=\"text-xs space-y-1 text-blue-700\">\n <li>1. Open your crypto wallet app</li>\n <li>2. Scan the QR code above</li>\n <li>3. Send exactly <strong>{amount} {currency}</strong></li>\n <li>4. Click \"I have sent the payment\" button below</li>\n </ol>\n </div>\n </div>\n </div>\n );\n};\n\n// Your existing components remain the same...\nconst EnhancedPaymentStatus = ({\n status,\n message,\n theme = 'light',\n payment = null,\n transactionHash = null,\n selectedPaymentMethod = null,\n merchantName = 'Merchant',\n onClose = null\n}) => {\n const [copiedHash, setCopiedHash] = useState(false);\n const [processingProgress, setProcessingProgress] = useState(0);\n\n // Handle processing progress animation\n useEffect(() => {\n if (status === 'processing') {\n const interval = setInterval(() => {\n setProcessingProgress(prev => {\n if (prev >= 90) return prev; // Don't go to 100% until success\n return prev + Math.random() * 15;\n });\n }, 500);\n\n return () => clearInterval(interval);\n }\n }, [status]);\n\n const copyTransactionHash = async () => {\n if (transactionHash) {\n try {\n await navigator.clipboard.writeText(transactionHash);\n setCopiedHash(true);\n setTimeout(() => setCopiedHash(false), 2000);\n } catch (err) {\n console.error('Failed to copy transaction hash:', err);\n }\n }\n };\n\n const formatTransactionHash = (hash) => {\n if (!hash) return '';\n if (hash.length <= 16) return hash;\n return `${hash.slice(0, 8)}...${hash.slice(-8)}`;\n };\n\n const renderIcon = () => {\n switch (status) {\n case 'processing':\n return (\n <div className=\"relative\">\n <div className=\"animate-spin rounded-full h-12 w-12 border-4 border-t-[#7042D2] border-blue-500/20\"></div>\n <div className=\"absolute inset-0 flex items-center justify-center\">\n <div className=\"w-6 h-6 bg-[#7042D2] rounded-full animate-pulse\"></div>\n </div>\n </div>\n );\n case 'success':\n return (\n <div className=\"rounded-full h-16 w-16 bg-green-500 flex items-center justify-center animate-bounce\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n className=\"h-10 w-10 text-white\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n strokeWidth={3}\n >\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M5 13l4 4L19 7\" />\n </svg>\n </div>\n );\n case 'error':\n return (\n <div className=\"rounded-full h-12 w-12 bg-red-100 flex items-center justify-center\">\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n className=\"h-8 w-8 text-red-500\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n strokeWidth={2}\n >\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n </div>\n );\n default:\n return null;\n }\n };\n\n // Enhanced processing screen\n if (status === 'processing') {\n return (\n <div className=\"flex flex-col items-center justify-center py-6 px-4\">\n <div className=\"mb-6\">{renderIcon()}</div>\n\n <h3 className=\"text-xl font-bold mb-3 text-gray-900\" style={{ fontFamily: 'Bricolage Grotesque, sans-serif' }}>\n Processing Payment\n </h3>\n\n <p className=\"text-center text-gray-600 mb-6\" style={{ fontFamily: 'Bricolage Grotesque, sans-serif' }}>\n Your transaction has been sent to the blockchain and is being processed...\n </p>\n\n {/* Progress Bar */}\n <div className=\"w-full max-w-xs mb-4\">\n <div className=\"bg-gray-200 rounded-full h-3\">\n <div\n className=\"bg-[#7042D2] h-3 rounded-full transition-all duration-500 ease-out\"\n style={{ width: `${processingProgress}%` }}\n ></div>\n </div>\n <div className=\"text-center mt-2 text-sm text-gray-500\" style={{ fontFamily: 'Bricolage Grotesque, sans-serif' }}>\n Processing... {Math.round(processingProgress)}%\n </div>\n </div>\n\n {/* Processing Steps */}\n <div className=\"text-center space-y-2\">\n <div className=\"flex items-center justify-center space-x-2\">\n <div className=\"w-2 h-2 bg-green-500 rounded-full animate-pulse\"></div>\n <span className=\"text-sm text-gray-600\">Transaction submitted</span>\n </div>\n <div className=\"flex items-center justify-center space-x-2\">\n <div className=\"w-2 h-2 bg-yellow-500 rounded-full animate-pulse\"></div>\n <span className=\"text-sm text-gray-600\">Confirming on blockchain...</span>\n </div>\n <div className=\"flex items-center justify-center space-x-2\">\n <div className=\"w-2 h-2 bg-gray-300 rounded-full\"></div>\n <span className=\"text-sm text-gray-400\">Finalizing payment...</span>\n </div>\n </div>\n\n <div className=\"mt-6 p-3 bg-blue-50 rounded-lg border border-blue-200\">\n <p className=\"text-xs text-blue-800 text-center\">\n Please don't close this window. This usually takes 10-30 seconds.\n </p>\n </div>\n </div>\n );\n }\n\n if (status === 'success') {\n return (\n <div className=\"flex flex-col items-center justify-center py-6 px-4\">\n <div className=\"mb-6\">{renderIcon()}</div>\n\n <h3 className=\"text-2xl font-bold mb-3 text-gray-900\" style={{ fontFamily: 'Bricolage Grotesque, sans-serif' }}>\n Payment Successful!\n </h3>\n\n {payment && selectedPaymentMethod && (\n <p className=\"text-center max-w-[235px] mb-6 text-gray-600\" style={{ fontFamily: 'Bricolage Grotesque, sans-serif' }}>\n Your payment of <span className='text-[#7042D2] font-semibold'>{payment.totalAmount || payment.amount} {selectedPaymentMethod.currency}</span> has been completed.\n </p>\n )}\n\n {transactionHash && (\n <div className=\"w-full mb-6 px-4\">\n <p className=\"text-sm font-medium mb-2 text-gray-700\" style={{ fontFamily: 'Bricolage Grotesque, sans-serif' }}>\n Transaction Hash\n </p>\n <div\n className=\"flex items-center justify-between p-3 rounded-lg border cursor-pointer transition-colors bg-gray-50 border-gray-200 hover:bg-gray-100\"\n onClick={copyTransactionHash}\n >\n <span className=\"font-mono text-sm text-gray-700\">\n {formatTransactionHash(transactionHash)}\n </span>\n <div className=\"flex items-center\">\n {copiedHash ? (\n <span className=\"text-green-500 text-xs font-medium mr-2\">Copied!</span>\n ) : null}\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n className=\"h-4 w-4 text-gray-500\"\n fill=\"none\"\n viewBox=\"0 0 24 24\"\n stroke=\"currentColor\"\n >\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M8 16H6a2 2 0 01-2-2V6a2 2 0 012-2h8a2 2 0 012 2v2m-6 12h8a2 2 0 002-2v-8a2 2 0 00-2-2h-8a2 2 0 00-2 2v8a2 2 0 002 2z\" />\n </svg>\n </div>\n </div>\n </div>\n )}\n\n {onClose && (\n <button\n onClick={onClose}\n className=\"w-full py-3 px-4 bg-[#7042D2] text-white font-semibold rounded-2xl text-lg shadow-md hover:bg-[#5b34b1] transition-colors\"\n style={{ fontFamily: 'Bricolage Grotesque, sans-serif' }}\n >\n Close\n </button>\n )}\n </div>\n );\n }\n\n return (\n <div className=\"flex flex-col items-center justify-center py-6\">\n <div className=\"mb-4\">{renderIcon()}</div>\n <h3 className=\"text-xl font-bold mb-2 text-gray-900\">\n {status === 'processing' ? 'Processing Payment' : status === 'error' ? 'Payment Failed' : 'Unknown Status'}\n </h3>\n <p className=\"text-center text-gray-600\">{message}</p>\n </div>\n );\n};\n\n// Screen transition wrapper\nconst ScreenTransition = ({\n currentStep,\n targetStep,\n children,\n className = \"\",\n duration = 300\n}) => {\n const [isVisible, setIsVisible] = useState(currentStep === targetStep);\n const [shouldRender, setShouldRender] = useState(currentStep === targetStep);\n\n useEffect(() => {\n if (currentStep === targetStep) {\n setShouldRender(true);\n setTimeout(() => setIsVisible(true), 10);\n } else {\n setIsVisible(false);\n setTimeout(() => setShouldRender(false), duration);\n }\n }, [currentStep, targetStep, duration]);\n\n if (!shouldRender) return null;\n\n return (\n <div\n className={`\n transition-all duration-300 ease-out\n ${isVisible\n ? 'transform translate-y-0 opacity-100'\n : 'transform translate-y-full opacity-0'\n }\n ${className}\n `}\n style={{\n transitionDuration: `${duration}ms`\n }}\n >\n {children}\n </div>\n );\n};\n\n// Main Enhanced Component with minimal changes\nconst EnhancedSimpleCoinleyPayment = ({\n apiKey,\n apiSecret,\n apiUrl,\n config,\n onSuccess,\n onError,\n onClose,\n isOpen,\n theme = 'light'\n}) => {\n const [currentStep, setCurrentStep] = useState('method');\n const [networks, setNetworks] = useState([]);\n const [tokens, setTokens] = useState([]);\n const [selectedNetwork, setSelectedNetwork] = useState(null);\n const [selectedToken, setSelectedToken] = useState(null);\n const [paymentMethod, setPaymentMethod] = useState(null);\n const [paymentData, setPaymentData] = useState(null);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState('');\n\n // Enhanced Wagmi wallet management\n const walletManager = useRef(new WagmiWalletManager());\n const [selectedWalletType, setSelectedWalletType] = useState(null);\n const [connectedWallet, setConnectedWallet] = useState(null);\n\n const [processing, setProcessing] = useState(false);\n const [paymentType, setPaymentType] = useState('wallet');\n\n const [actualTransactionHash, setActualTransactionHash] = useState(null);\n\n const api = useRef(new SimplePaymentAPI(apiUrl, apiKey, apiSecret));\n\n useEffect(() => {\n if (isOpen) {\n loadData();\n resetState();\n }\n }, [isOpen]);\n\n const resetState = () => {\n setCurrentStep('method');\n setSelectedNetwork(null);\n setSelectedToken(null);\n setPaymentMethod(null);\n setPaymentData(null);\n setError('');\n setConnectedWallet(null);\n setSelectedWalletType(null);\n setProcessing(false);\n setActualTransactionHash(null);\n\n // Reset Wagmi wallet manager\n walletManager.current.disconnect();\n setPaymentType('wallet');\n };\n\n const loadData = async () => {\n try {\n setLoading(true);\n setError('');\n\n console.log('🔄 Loading networks and tokens...');\n const [networksRes, tokensRes] = await Promise.all([\n api.current.getNetworks(),\n api.current.getTokens()\n ]);\n\n // Remove duplicate networks\n const uniqueNetworks = networksRes.networks?.reduce((acc, network) => {\n const key = `${network.id}-${network.shortName}`;\n if (!acc.some(n => `${n.id}-${n.shortName}` === key)) {\n acc.push(network);\n }\n return acc;\n }, []) || [];\n\n // Remove duplicate tokens\n const uniqueTokens = tokensRes.stablecoins?.reduce((acc, token) => {\n const key = `${token.id}-${token.symbol}-${token.networkId || token.Network?.shortName}`;\n if (!acc.some(t => `${t.id}-${t.symbol}-${t.networkId || t.Network?.shortName}` === key)) {\n acc.push(token);\n }\n return acc;\n }, []) || [];\n\n setNetworks(uniqueNetworks);\n setTokens(uniqueTokens);\n\n console.log('✅ Loaded unique networks:', uniqueNetworks.length);\n console.log('✅ Loaded unique tokens:', uniqueTokens.length);\n\n } catch (err) {\n console.error('Failed to load data:', err);\n setError('Failed to load payment options. Using fallback data.');\n } finally {\n setLoading(false);\n }\n };\n\n // Handle wallet selection\n const handleWalletSelection = (walletType) => {\n setSelectedWalletType(walletType);\n console.log(`📱 Selected wallet type: ${walletType}`);\n };\n\n // Connect to selected wallet using Wagmi\n const connectWallet = async (walletType = selectedWalletType) => {\n if (!walletType) {\n setError('Please select a wallet type first');\n return;\n }\n\n try {\n setLoading(true);\n setError('');\n\n console.log(`🔗 Connecting to ${walletType} wallet ...`);\n const connection = await walletManager.current.connect(walletType);\n\n setConnectedWallet(connection);\n setSelectedWalletType(walletType);\n\n console.log(`✅ ${walletType} wallet connected successfully:`, connection.account);\n\n } catch (err) {\n console.error(`${walletType} wallet connection failed:`, err);\n setError(err.message);\n } finally {\n setLoading(false);\n }\n };\n\n const createPayment = async () => {\n try {\n setLoading(true);\n setError('');\n\n const paymentPayload = {\n amount: config.amount,\n currency: selectedToken.symbol,\n network: selectedNetwork.shortName,\n customerEmail: config.customerEmail,\n callbackUrl: config.callbackUrl,\n metadata: {\n ...config.metadata,\n merchantWalletAddresses: config.merchantWalletAddresses,\n paymentMethod,\n selectedNetwork: selectedNetwork.shortName,\n selectedToken: selectedToken.symbol,\n walletType: selectedWalletType,\n wagmiEnabled: true\n }\n };\n\n console.log('🔄 Creating payment:', paymentPayload);\n const payment = await api.current.createPayment(paymentPayload);\n setPaymentData(payment.payment);\n\n console.log('✅ Payment created:', payment.payment.id);\n\n setCurrentStep('confirm');\n\n } catch (err) {\n console.error('Payment creation failed:', err);\n setError(err.message);\n } finally {\n setLoading(false);\n }\n };\n\n // Send transaction using Wagmi\n const sendTransaction = async () => {\n console.log('STEP 1: sendTransaction function started');\n\n if (!walletManager.current.isConnected()) {\n setError('No wallet connected');\n return;\n }\n\n try {\n console.log('STEP 2: Starting transaction process');\n setProcessing(true);\n setError('');\n\n const recipientAddress = paymentData.metadata?.recipientWallet ||\n config.merchantWalletAddresses?.[selectedNetwork.shortName];\n\n console.log('STEP 3: Recipient address found:', recipientAddress);\n\n if (!recipientAddress) {\n throw new Error('Merchant wallet address not found');\n }\n\n console.log(`Preparing transaction to:`, recipientAddress);\n\n let txParams;\n\n // Handle EVM transactions using Wagmi\n if (selectedToken.contractAddress) {\n // ERC-20 token transaction\n const decimals = selectedToken.decimals || 6;\n const amount = Math.floor(paymentData.totalAmount * Math.pow(10, decimals));\n\n const methodId = '0xa9059cbb';\n const recipientPadded = recipientAddress.slice(2).toLowerCase().padStart(64, '0');\n const amountPadded = amount.toString(16).padStart(64, '0');\n const data = `${methodId}${recipientPadded}${amountPadded}`;\n\n txParams = {\n to: selectedToken.contractAddress,\n data: data,\n value: '0x0'\n };\n\n console.log(`Wagmi ERC-20 Transaction:`, {\n token: selectedToken.symbol,\n amount: paymentData.totalAmount,\n amountWithDecimals: amount,\n to: selectedToken.contractAddress,\n recipient: recipientAddress\n });\n\n } else {\n // Native token transaction\n const value = Math.floor(paymentData.totalAmount * Math.pow(10, 18));\n txParams = {\n to: recipientAddress,\n value: `0x${value.toString(16)}`\n };\n\n console.log(`Wagmi Native Transaction:`, {\n amount: paymentData.totalAmount,\n to: recipientAddress\n });\n }\n\n console.log('STEP 4: About to show processing screen');\n // First show processing step\n setCurrentStep('processing');\n\n console.log('STEP 5: About to send transaction via Wagmi');\n // Send transaction using Wagmi wallet manager\n const txHash = await walletManager.current.sendTransaction(txParams);\n\n console.log(`✅ REAL TRANSACTION SENT! Hash:`, txHash);\n\n // Store the real transaction hash\n setActualTransactionHash(txHash);\n\n console.log('STEP 6: Transaction completed, hash:', txHash);\n\n // Call processPayment API using the proper method with REAL hash\n console.log('STEP 7: About to call processPayment API with REAL transaction hash');\n try {\n console.log('Calling processPayment with REAL data:', {\n paymentId: paymentData.id,\n transactionHash: txHash, // Using the REAL hash\n network: selectedNetwork.shortName,\n senderAddress: connectedWallet.account\n });\n\n console.log('STEP 8: Making API request with REAL transaction hash...');\n\n // Use the proper processPayment method with REAL transaction hash\n const processResult = await api.current.processPayment(\n paymentData.id,\n txHash, // REAL transaction hash here\n selectedNetwork.shortName,\n connectedWallet.account\n );\n\n console.log('✅ Payment status updated on server with REAL hash:', processResult);\n\n // Check if the response indicates success\n if (processResult.success) {\n console.log('✅ Server confirmed payment processing successful with REAL hash');\n } else {\n console.error('❌ Server returned unsuccessful response:', processResult);\n }\n\n console.log('STEP 9: API response received:', processResult);\n } catch (processError) {\n console.error('STEP 9 ERROR: API call failed:', processError);\n console.error('❌ Failed to update payment status - FULL ERROR:', processError);\n console.error('❌ Error message:', processError.message);\n console.error('❌ Error stack:', processError.stack);\n // Don't fail the payment flow since the transaction succeeded\n }\n\n console.log('STEP 10: About to set timeout for success screen');\n\n // Show success screen with REAL transaction hash\n setTimeout(() => {\n console.log('STEP 11: Showing success screen with REAL hash and calling onSuccess');\n setCurrentStep('success');\n\n // Call the onSuccess callback with the REAL transaction hash\n onSuccess?.(paymentData.id, txHash, { // REAL hash passed to callback\n network: selectedNetwork.name,\n currency: selectedToken.symbol,\n amount: paymentData.totalAmount,\n method: paymentMethod,\n walletType: selectedWalletType,\n wagmiEnabled: true,\n realTransactionHash: txHash // Pass the real hash\n });\n }, 2000);\n\n } catch (err) {\n console.error('TRANSACTION ERROR:', err);\n console.error('Wagmi transaction failed:', err);\n setError(err.message);\n setCurrentStep('confirm');\n onError?.(err.message);\n setActualTransactionHash(null);\n } finally {\n setProcessing(false);\n }\n };\n\n\n const handleQRPaymentVerification = async () => {\n if (!paymentData) {\n setError('Payment information is missing');\n return;\n }\n\n setCurrentStep('processing');\n setError(null);\n\n try {\n console.log('🔄 Starting QR payment verification...');\n\n const verificationResult = await api.current.verifyQRPayment(paymentData.id);\n\n if (verificationResult.verified) {\n console.log('✅ QR payment verified successfully:', verificationResult);\n\n if (verificationResult.payment?.transactionHash) {\n setActualTransactionHash(verificationResult.payment.transactionHash);\n }\n\n\n setCurrentStep('success');\n\n if (onSuccess) {\n onSuccess(paymentData.id, verificationResult.payment.transactionHash, {\n network: selectedNetwork.name,\n currency: selectedToken.symbol,\n amount: verificationResult.payment.amount,\n verificationType: 'QR_PAYMENT'\n });\n }\n } else {\n setError(verificationResult.message || 'Transaction not detected yet. Please wait a moment and try again.');\n setCurrentStep('confirm');\n }\n } catch (error) {\n console.error('QR payment verification error:', error);\n const errorMessage = error.message || 'Failed to verify payment. Please try again.';\n setError(errorMessage);\n setCurrentStep('confirm');\n if (onError) onError(errorMessage);\n }\n };\n\n const formatAmount = (amount) => {\n return parseFloat(amount).toFixed(2);\n };\n\n const getNetworkDisplayName = (network) => {\n const names = {\n ethereum: 'Ethereum',\n bsc: 'BSC',\n polygon: 'Polygon',\n arbitrum: 'Arbitrum',\n optimism: 'Optimism',\n avalanche: 'Avalanche',\n tron: 'Tron',\n algorand: 'Algorand',\n solana: 'Solana'\n };\n return names[network] || network;\n };\n\n const getWalletAddressForNetwork = () => {\n if (!selectedNetwork) return 'No network selected';\n const networkAddress = config.merchantWalletAddresses?.[selectedNetwork.shortName];\n if (networkAddress) return networkAddress;\n if (paymentData?.recipientWallet) return paymentData.recipientWallet;\n return 'No wallet address configured for this network';\n };\n\n // Helper functions for modern dropdown with your specific CoinMarketCap logos\n const renderNetworkOption = (network) => {\n const networkLogoUrl = NetworkLogos[network.shortName?.toLowerCase()];\n\n return (\n <div className=\"flex items-center space-x-3\">\n {networkLogoUrl ? (\n <img\n src={networkLogoUrl}\n alt={network.name}\n className=\"w-8 h-8 rounded-full\"\n onLoad={() => console.log('✅ Logo loaded successfully for', network.shortName)}\n onError={(e) => {\n console.log('❌ Logo failed to load for', network.shortName, 'URL:', networkLogoUrl);\n e.target.style.display = 'none';\n e.target.nextSibling.style.display = 'flex';\n }}\n />\n ) : null}\n <div\n className=\"w-8 h-8 rounded-full bg-gray-200 flex items-center justify-center\"\n style={{ display: networkLogoUrl ? 'none' : 'flex' }}\n >\n <span className=\"text-xs font-bold text-gray-600\">{network.shortName?.slice(0, 2).toUpperCase()}</span>\n </div>\n <div>\n <div className=\"font-semibold text-gray-800\">{network.name}</div>\n <div className=\"text-sm text-gray-500\">{network.shortName?.toUpperCase()}</div>\n </div>\n </div>\n );\n };\n\n const renderTokenOption = (token) => {\n const tokenLogoUrl = getTokenLogoUrl(token.symbol);\n\n return (\n <div className=\"flex items-center space-x-3\">\n {tokenLogoUrl ? (\n <img\n src={tokenLogoUrl}\n alt={token.symbol}\n className=\"w-8 h-8 rounded-full\"\n onError={(e) => {\n e.target.style.display = 'none';\n e.target.nextSibling.style.display = 'flex';\n }}\n />\n ) : null}\n <div\n className=\"w-8 h-8 rounded-full bg-gray-200 flex items-center justify-center\"\n style={{ display: tokenLogoUrl ? 'none' : 'flex' }}\n >\n <span className=\"text-xs font-bold text-gray-600\">{token.symbol?.slice(0, 2)}</span>\n </div>\n <div>\n <div className=\"font-semibold text-gray-800\">{token.name} ({token.symbol})</div>\n <div className=\"text-sm text-gray-500\">\n {token.Network?.name || 'Unknown Network'}\n {token.isStablecoin && <span className=\"ml-2 text-green-600\">• Stablecoin</span>}\n </div>\n </div>\n </div>\n );\n };\n\n if (!isOpen) return null;\n\n const isDark = theme === 'dark';\n\n return (\n <div className=\"fixed inset-0 z-50\">\n <div className=\"fixed inset-0 bg-black bg-opacity-50 transition-opacity\" onClick={onClose} aria-hidden=\"true\" />\n <div className=\"fixed inset-0 overflow-y-auto\" style={{ zIndex: 51 }}>\n <div className=\"flex min-h-screen items-center justify-center p-4\">\n <div className=\"relative pt-6 w-full max-w-md mx-auto shadow-xl bg-gray-100 rounded-3xl overflow-hidden\" style={{ zIndex: 52 }}>\n\n {/* Modern Header with Logo */}\n <div className=\"bg-white flex justify-between items-center mb-6 mr-3 ml-3 py-4 px-2 rounded-full\">\n <div className=\"flex-1 flex items-center gap-2 px-4\">\n <div className=\"w-8 h-8 rounded-full flex items-center justify-center\">\n <img src={logo} />\n </div>\n <span className=\"text-lg font-semibold text-gray-800\" style={{ fontFamily: 'Bricolage Grotesque, sans-serif' }}>Payment Details</span>\n </div>\n {currentStep !== 'success' && currentStep !== 'processing' && (\n <button\n onClick={onClose}\n className=\"text-gray-500 hover:text-gray-700 focus:outline-none\"\n >\n <svg xmlns=\"http://www.w3.org/2000/svg\" className=\"h-6 w-6 mr-2\" fill=\"none\" viewBox=\"0 0 24 24\" stroke=\"currentColor\">\n <path strokeLinecap=\"round\" strokeLinejoin=\"round\" strokeWidth={2} d=\"M6 18L18 6M6 6l12 12\" />\n </svg>\n </button>\n )}\n </div>\n\n {/* Payment Summary - Show for all steps except success */}\n {config && currentStep !== 'success' && (\n <div className=\"mb-6\">\n <div className=\"text-center\">\n <div className=\"text-sm text-gray-600\">Total Amount</div>\n <div className=\"text-4xl lg:text-5xl font-bold text-[#7042D2] mt-2 leading-tight tracking-tight\" style={{ fontFamily: 'Bricolage Grotesque, sans-serif' }}>\n ${formatAmount(config.amount)}\n </div>\n\n <div className=\"mt-2 text-sm text-gray-500\">\n No additional fees\n </div>\n\n <div className=\"text-sm text-gray-600 mt-4\">Payment to:</div>\n <div className=\"text-base font-semibold mt-1 flex gap-2 items-center justify-center\" style={{ fontFamily: 'Bricolage Grotesque, sans-serif' }}>\n <svg width=\"20\" height=\"20\" viewBox=\"0 0 20 20\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\">\n <path d=\"M15.3 7.50065L15.8 10.0007H4.2L4.7 7.50065H15.3ZM16.6667 3.33398H3.33333V5.00065H16.6667V3.33398ZM16.6667 5.83398H3.33333L2.5 10.0007V11.6673H3.33333V16.6673H11.6667V11.6673H15V16.6673H16.6667V11.6673H17.5V10.0007L16.6667 5.83398ZM5 15.0007V11.6673H10V15.0007H5Z\" fill=\"#7042D2\" />\n </svg>\n {config.merchantName || 'Merchant'}\n </div>\n </div>\n </div>\n )}\n\n {/* Main Content Area with Enhanced Animations */}\n <div className=\"relative\">\n\n {/* Step 1: Select Network & Token with Modern Dropdowns */}\n <ScreenTransition currentStep={currentStep} targetStep=\"method\">\n <div className=\"pb-6 pt-6 px-6 bg-white rounded-t-2xl\">\n <h3 className=\"font-semibold text-center mb-6\" style={{ fontFamily: 'Bricolage Grotesque, sans-serif' }}>Choose Payment Method</h3>\n\n {/* Network Selection - Modern Dropdown */}\n <div className=\"space-y-4 mb-6\">\n <label className=\"block text-sm font-medium text-gray-700\" style={{ fontFamily: 'Bricolage Grotesque, sans-serif' }}>Select Network</label>\n <ModernDropdown\n options={networks}\n value={selectedNetwork?.id || ''}\n onChange={(networkId) => {\n const network = networks.find(n => n.id === networkId);\n setSelectedNetwork(network);\n setSelectedToken(null); // Reset token selection\n setConnectedWallet(null); // Reset wallet connection\n setSelectedWalletType(null); // Reset wallet type\n walletManager.current.disconnect(); // Disconnect wallet manager\n }}\n placeholder=\"Choose your network...\"\n renderOption={renderNetworkOption}\n getOptionKey={(network) => network.id}\n getOptionValue={(network) => network.id}\n getSearchableText={(network) => `${network.name} ${network.shortName}`}\n disabled={loading}\n />\n </div>\n\n {/* Token Selection - Modern Dropdown */}\n {selectedNetwork && (\n <div className=\"space-y-4 mb-6\">\n <label className=\"block text-sm font-medium text-gray-700\" style={{ fontFamily: 'Bricolage Grotesque, sans-serif' }}>Select Token</label>\n <ModernDropdown\n options={tokens.filter(token =>\n token.Network?.shortName === selectedNetwork?.shortName ||\n token.networkId === selectedNetwork?.id\n )}\n value={selectedToken?.id || ''}\n onChange={(tokenId) => {\n const token = tokens\n .filter(token =>\n token.Network?.shortName === selectedNetwork?.shortName ||\n token.networkId === selectedNetwork?.id\n )\n .find(t => t.id === tokenId);\n setSelectedToken(token);\n }}\n placeholder=\"Choose your token...\"\n renderOption={renderTokenOption}\n getOptionKey={(token) => token.id}\n getOptionValue={(token) => token.id}\n getSearchableText={(token) => `${token.name} ${token.symbol}`}\n disabled={loading}\n />\n </div>\n )}\n\n {/* Show selected network and token info */}\n {selectedNetwork && selectedToken && (\n <div className=\"mb-6 p-4 bg-[#7042D2]/10 rounded-xl border border-[#7042D2]/20\">\n <div className=\"flex justify-between items-center\">\n <div className=\"flex items-center space-x-3\">\n {NetworkLogos[selectedNetwork.shortName] ? (\n <img\n src={NetworkLogos[selectedNetwork.shortName]}\n alt={selectedNetwork.name}\n className=\"w-8 h-8 rounded-full\"\n onError={(e) => {\n e.target.style.display = 'none';\n e.target.nextSibling.style.display = 'flex';\n }}\n />\n ) : null}\n <div\n className=\"w-8 h-8 rounded-full bg-gray-200 flex items-center justify-center\"\n style={{ display: NetworkLogos[selectedNetwork.shortName] ? 'none' : 'flex' }}\n >\n <span className=\"text-xs font-bold text-gray-600\">{selectedNetwork.shortName?.slice(0, 2).toUpperCase()}</span>\n </div>\n\n {getTokenLogoUrl(selectedToken.symbol) ? (\n <img\n src={getTokenLogoUrl(selectedToken.symbol)}\n alt={selectedToken.symbol}\n className=\"w-8 h-8 rounded-full\"\n onError={(e) => {\n e.target.style.display = 'none';\n e.target.nextSibling.style.display = 'flex';\n }}\n />\n ) : null}\n <div\n className=\"w-8 h-8 rounded-full bg-gray-200 flex items-center justify-center\"\n style={{ display: getTokenLogoUrl(selectedToken.symbol) ? 'none' : 'flex' }}\n >\n <span className=\"text-xs font-bold text-gray-600\">{selectedToken.symbol?.slice(0, 2)}</span>\n </div>\n\n <div>\n <p className=\"text-sm font-semibold text-[#7042D2]\" style={{ fontFamily: 'Bricolage Grotesque, sans-serif' }}>\n {selectedNetwork.name} • {selectedToken.symbol}\n </p>\n <p className=\"text-xs text-[#7042D2]/80\" style={{ fontFamily: 'Bricolage Grotesque, sans-serif' }}>{selectedToken.name}</p>\n </div>\n </div>\n {selectedToken.isStablecoin && (\n <span className=\"px-3 py-1 bg-green-100 text-green-700 text-xs rounded-full font-medium\" style={{ fontFamily: 'Bricolage Grotesque, sans-serif' }}>\n Stablecoin\n </span>\n )}\n </div>\n </div>\n )}\n\n {selectedNetwork && selectedToken && (\n <button\n onClick={createPayment}\n disabled={loading}\n className=\"w-full bg-[#7042D2] text-white py-4 px-4 rounded-xl hover:bg-[#5b34b1] disabled:opacity-50 font-semibold transition-all duration-200 shadow-lg hover:shadow-xl\"\n style={{ fontFamily: 'Bricolage Grotesque, sans-serif' }}\n >\n {loading ? (\n <span className=\"flex items-center justify-center\">\n <svg className=\"animate-spin -ml-1 mr-3 h-4 w-4 text-white\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\">\n <circle className=\"opacity-25\" cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" strokeWidth=\"4\"></circle>\n <path className=\"opacity-75\" fill=\"currentColor\" d=\"M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z\"></path>\n </svg>\n Creating Payment...\n </span>\n ) : (\n 'Continue'\n )}\n </button>\n )}\n </div>\n </ScreenTransition>\n\n {/* Step 2: Confirm Payment */}\n <ScreenTransition currentStep={currentStep} targetStep=\"confirm\">\n {selectedNetwork && selectedToken && paymentData && (\n <div>\n {/* Payment Method Tabs */}\n <div className=\"mb-4 px-4\">\n <div className=\"flex border-b border-gray-200\">\n <button\n onClick={() => setPaymentType('wallet')}\n className={`py-3 px-6 text-sm font-semibold transition-all duration-200 ${paymentType === 'wallet'\n ? 'border-b-2 border-[#7042D2] text-[#7042D2]'\n : 'text-gray-500 hover:text-gray-700'\n }`}\n style={{ fontFamily: 'Bricolage Grotesque, sans-serif' }}\n >\n Connect Wallet\n </button>\n <button\n onClick={() => setPaymentType('qrcode')}\n className={`py-3 px-6 text-sm font-semibold transition-all duration-200 ${paymentType === 'qrcode'\n ? 'border-b-2 border-[#7042D2] text-[#7042D2]'\n : 'text-gray-500 hover:text-gray-700'\n }`}\n style={{ fontFamily: 'Bricolage Grotesque, sans-serif' }}\n >\n QR Code\n </button>\n </div>\n </div>\n\n {/* Payment Details */}\n {paymentType === 'wallet' && (\n <div className=\"p-4 rounded-2xl mb-4 bg-white\">\n <h3 className=\"text-lg font-semibold mb-2 text-gray-800\" style={{ fontFamily: 'Bricolage Grotesque, sans-serif' }}>Payment Details</h3>\n <div className=\"space-y-3 bg-[#7042D2]/10 p-4 rounded-xl\" style={{ fontFamily: 'Bricolage Grotesque, sans-serif' }}>\n <div className=\"flex justify-between\">\n <span className=\"font-semibold text-gray-700\">Currency:</span>\n <span className=\"font-semibold text-[#7042D2] flex items-center\">\n <span className=\"mr-2\">\n {getTokenLogoUrl(selectedToken.symbol) ? (\n <img\n src={getTokenLogoUrl(selectedToken.symbol)}\n alt={selectedToken.symbol}\n className=\"w-5 h-5 rounded-full inline-block\"\n onError={(e) => {\n e.target.style.display = 'none';\n e.target.nextSibling.style.display = 'inline-flex';\n }}\n />\n ) : null}\n <div\n className=\"w-5 h-5 rounded-full bg-gray-200 inline-flex items-center justify-center\"\n style={{ display: getTokenLogoUrl(selectedToken.symbol) ? 'none' : 'inline-flex' }}\n >\n <span className=\"text-xs font-bold text-gray-600\">{selectedToken.symbol?.slice(0, 2)}</span>\n </div>\n </span>\n {selectedToken.symbol}\n </span>\n </div>\n <div className=\"border-b border-gray-300\"></div>\n <div className=\"flex justify-between\">\n <span className=\"font-semibold text-gray-700\">Network:</span>\n <span className=\"font-semibold text-[#7042D2] flex items-center\">\n <span className=\"mr-2\">\n {NetworkLogos[selectedNetwork.shortName] ? (\n <img\n src={NetworkLogos[selectedNetwork.shortName]}\n alt={selectedNetwork.name}\n className=\"w-5 h-5 rounded-full inline-block\"\n onError={(e) => {\n e.target.style.display = 'none';\n e.target.nextSibling.style.display = 'inline-flex';\n }}\n />\n ) : null}\n <div\n className=\"w-5 h-5 rounded-full bg-gray-200 inline-flex items-center justify-center\"\n style={{ display: NetworkLogos[selectedNetwork.shortName] ? 'none' : 'inline-flex' }}\n >\n <span className=\"text-xs font-bold text-gray-600\">{selectedNetwork.shortName?.slice(0, 2).toUpperCase()}</span>\n </div>\n </span>\n {getNetworkDisplayName(selectedNetwork.shortName)}\n </span>\n </div>\n <div className=\"border-b border-gray-300\"></div>\n <div className=\"flex justify-between border-t border-gray-400 pt-3 mt-2\">\n <span className=\"font-bold text-gray-800\">Total:</span>\n <span className=\"font-bold text-lg text-[#7042D2]\">${formatAmount(paymentData.totalAmount)}</span>\n </div>\n </div>\n </div>\n )}\n\n {/* Wallet Connection or QR Code */}\n {paymentType === 'qrcode' ? (\n <div className=\"mb-4\">\n <EnhancedQRCode\n walletAddress={getWalletAddressForNetwork()}\n amount={paymentData.totalAmount || paymentData.amount}\n currency={selectedToken.symbol}\n network={selectedNetwork.shortName}\n theme={theme}\n />\n </div>\n ) : (\n <div className=\"space-y-3 mb-4 px-4\">\n {/* Enhanced multi-wallet selector with Wagmi */}\n <WagmiWalletSelector\n selectedNetwork={selectedNetwork}\n onWalletSelect={handleWalletSelection}\n onConnect={connectWallet}\n connectedWallet={connectedWallet}\n loading={loading}\n />\n </div>\n )}\n\n {/* Error Display */}\n {error && (\n <div className=\"p-3 rounded-lg bg-red-50 mb-4 text-red-600 text-sm mx-4\">\n {error}\n </div>\n )}\n\n {/* Action Buttons */}\n <div className=\"grid grid-cols-2 gap-3 mb-3 px-4\">\n <button\n type=\"button\"\n onClick={() => setCurrentStep('method')}\n className=\"w-full py-3 px-4 bg-gray-200 hover:bg-gray-300 text-[#7042D2] font-semibold rounded-xl transition-all duration-200\"\n style={{ fontFamily: 'Bricolage Grotesque, sans-serif' }}\n >\n Back\n </button>\n <button\n type=\"button\"\n onClick={paymentType === 'qrcode' ? handleQRPaymentVerification : sendTransaction}\n className=\"bg-green-600 text-white w-full py-3 px-4 font-semibold rounded-xl hover:bg-green-700 transition-all duration-200 shadow-lg hover:shadow-xl\"\n disabled={paymentType === 'wallet' && !connectedWallet}\n style={{ fontFamily: 'Bricolage Grotesque, sans-serif' }}\n >\n {paymentType === 'qrcode' ? 'I have sent the payment' : 'Pay Now'}\n </button>\n </div>\n </div>\n )}\n </ScreenTransition>\n\n {/* Step 3: Processing */}\n <ScreenTransition currentStep={currentStep} targetStep=\"processing\">\n <EnhancedPaymentStatus\n status=\"processing\"\n theme={theme}\n message=\"Processing your payment via...\"\n />\n </ScreenTransition>\n\n {/* Step 4: Success */}\n <ScreenTransition currentStep={currentStep} targetStep=\"success\">\n <EnhancedPaymentStatus\n status=\"success\"\n theme={theme}\n message=\"Payment successful!\"\n payment={paymentData}\n transactionHash={actualTransactionHash} // Use the REAL hash instead of \"0x123...abc\"\n selectedPaymentMethod={{ currency: selectedToken?.symbol }}\n merchantName={config.merchantName || 'Merchant'}\n onClose={onClose}\n />\n </ScreenTransition>\n\n </div>\n\n {/* Enhanced Footer */}\n {currentStep !== 'success' && (\n <div className=\"text-center text-xs text-gray-500 flex items-center justify-center gap-1 py-6 bg-white rounded-b-3xl\" style={{ fontFamily: 'Bricolage Grotesque, sans-serif' }}>\n <p>Powered by <span className='text-[#7042D2] font-semibold'>Coinley</span> - Multi-Wallet Support</p>\n <svg className=\"inline w-4 h-4 text-green-500 ml-1\" fill=\"none\" stroke=\"currentColor\" strokeWidth=\"2\" viewBox=\"0 0 24 24\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" stroke=\"currentColor\" strokeWidth=\"2\" fill=\"none\" />\n <path d=\"M9 12l2 2 4-4\" stroke=\"currentColor\" strokeWidth=\"2\" strokeLinecap=\"round\" strokeLinejoin=\"round\" />\n </svg>\n </div>\n )}\n </div>\n </div>\n </div>\n </div>\n );\n};\n\nexport default EnhancedSimpleCoinleyPayment;","//src/CoinleyProvider.jsx - coinley-test\nimport React, { createContext, useContext, useRef, forwardRef, useImperativeHandle } from 'react';\n// import CoinleyPayment from './CoinleyPayment';\nimport CoinleyPayment from './components/EnhancedSimpleCoinleyPayment';\n\nconst CoinleyContext = createContext(null);\n\nexport const CoinleyProvider = ({\n apiKey,\n apiSecret,\n apiUrl,\n theme = 'light',\n debug = false,\n children\n}) => {\n const [isOpen, setIsOpen] = React.useState(false);\n const [paymentConfig, setPaymentConfig] = React.useState(null);\n const [callbacks, setCallbacks] = React.useState({});\n const [merchantName, setMerchantName] = React.useState('');\n\n const openPayment = (config, checkoutCallbacks) => {\n setPaymentConfig(config);\n if (checkoutCallbacks) {\n setCallbacks(checkoutCallbacks);\n }\n setIsOpen(true);\n };\n\n const closePayment = () => {\n setIsOpen(false);\n setPaymentConfig(null);\n if (callbacks.onClose) {\n callbacks.onClose();\n }\n };\n\n const contextValue = {\n openPayment,\n closePayment\n };\n\n return (\n <CoinleyContext.Provider value={contextValue}>\n {children}\n {isOpen && paymentConfig && (\n <CoinleyPayment\n apiKey={apiKey}\n apiSecret={apiSecret}\n apiUrl={apiUrl}\n isOpen={isOpen}\n config={paymentConfig}\n theme={theme}\n debug={debug}\n merchantName={merchantName}\n onSuccess={callbacks.onSuccess}\n onError={callbacks.onError}\n onClose={closePayment}\n />\n )}\n </CoinleyContext.Provider>\n );\n};\n\nexport const CoinleyCheckout = forwardRef((\n {\n customerEmail = '',\n merchantName = '',\n onSuccess,\n onError,\n onClose,\n theme = 'light',\n autoOpen = false,\n testMode = false,\n debug = false,\n merchantWalletAddresses = {}\n },\n ref\n) => {\n const context = useContext(CoinleyContext);\n\n if (!context) {\n throw new Error('CoinleyCheckout must be used within a CoinleyProvider');\n }\n\n const { openPayment, closePayment } = context;\n\n const open = (config) => {\n try {\n if (debug) {\n console.log('Opening Coinley checkout with config:', config);\n }\n\n if (!config.amount || config.amount <= 0) {\n throw new Error('Amount must be greater than 0');\n }\n\n const finalConfig = {\n ...config,\n customerEmail: config.customerEmail || customerEmail,\n merchantWalletAddresses: {\n ...merchantWalletAddresses,\n ...config.merchantWalletAddresses\n },\n metadata: {\n ...config.metadata,\n testMode,\n checkoutVersion: '1.0.0'\n }\n };\n\n const checkoutCallbacks = {\n onSuccess,\n onError,\n onClose\n };\n\n openPayment(finalConfig, checkoutCallbacks);\n } catch (error) {\n console.error('Failed to open Coinley checkout:', error);\n if (onError) {\n onError(error);\n }\n }\n };\n\n const close = () => {\n closePayment();\n };\n\n useImperativeHandle(ref, () => ({\n open,\n close\n }));\n\n return null;\n});\n\nCoinleyCheckout.displayName = 'CoinleyCheckout';\n\nexport const useCoinley = () => {\n const context = useContext(CoinleyContext);\n if (!context) {\n throw new Error('useCoinley must be used within a CoinleyProvider');\n }\n return context;\n};\n\nexport const ThemeProvider = ({\n initialTheme = 'light',\n children\n}) => {\n const [theme, setTheme] = React.useState(initialTheme);\n\n React.useEffect(() => {\n document.documentElement.setAttribute('data-coinley-theme', theme);\n }, [theme]);\n\n const toggleTheme = () => {\n setTheme(prev => prev === 'light' ? 'dark' : 'light');\n };\n\n return (\n <div className={`coinley-theme-${theme}`}>\n {children}\n </div>\n );\n};","// //src/PaymentAPI.js \n// import axios from 'axios';\n\n// export class PaymentAPI {\n// constructor(baseURL, apiKey, apiSecret) {\n// this.apiKey = apiKey;\n// this.apiSecret = apiSecret;\n\n// this.api = axios.create({\n// baseURL: baseURL.endsWith('/') ? baseURL.slice(0, -1) : baseURL,\n// timeout: 30000,\n// headers: {\n// 'Content-Type': 'application/json',\n// },\n// });\n\n// // Add request interceptor\n// this.api.interceptors.request.use(\n// (config) => {\n// // FIXED: Use lowercase headers to match backend expectations\n// config.headers['x-api-key'] = this.apiKey;\n// config.headers['x-api-secret'] = this.apiSecret;\n \n// const token = this.generateMerchantToken();\n// if (token) {\n// config.headers['Authorization'] = `Bearer ${token}`;\n// }\n\n// console.log('API Request:', {\n// method: config.method?.toUpperCase(),\n// url: config.url,\n// data: config.data\n// });\n\n// return config;\n// },\n// (error) => {\n// console.error('Request interceptor error:', error);\n// return Promise.reject(error);\n// }\n// );\n\n// // Add response interceptor\n// this.api.interceptors.response.use(\n// (response) => {\n// console.log('API Response:', {\n// status: response.status,\n// url: response.config.url,\n// data: response.data\n// });\n// return response;\n// },\n// (error) => {\n// console.error('API Error:', {\n// status: error.response?.status,\n// data: error.response?.data,\n// message: error.message\n// });\n\n// if (error.response?.status === 401) {\n// throw new Error('Authentication failed. Please check your API credentials.');\n// } else if (error.response?.status === 404) {\n// throw new Error('API endpoint not found. Please check your API URL.');\n// } else if (error.response?.status >= 500) {\n// throw new Error('Server error. Please try again later.');\n// }\n\n// throw error;\n// }\n// );\n// }\n\n// generateMerchantToken() {\n// try {\n// const credentials = `${this.apiKey}:${this.apiSecret}`;\n// return btoa(credentials);\n// } catch (error) {\n// console.error('Failed to generate token:', error);\n// return null;\n// }\n// }\n\n// // ✅ FIXED: Add generic request method for internal use\n// async request(endpoint, options = {}) {\n// try {\n// const response = await this.api({\n// url: endpoint,\n// method: options.method || 'GET',\n// data: options.data || options.body ? JSON.parse(options.body || '{}') : undefined,\n// ...options\n// });\n// return response.data;\n// } catch (error) {\n// if (error.response?.data?.error) {\n// throw new Error(error.response.data.error);\n// }\n// throw new Error(error.message || 'Request failed');\n// }\n// }\n\n// async createPayment(params) {\n// try {\n// const response = await this.api.post('/api/payments/create', params);\n// return response.data;\n// } catch (error) {\n// if (error.response?.data?.error) {\n// throw new Error(error.response.data.error);\n// }\n// throw new Error(error.message || 'Failed to create payment');\n// }\n// }\n\n// async getPayment(paymentId) {\n// try {\n// const response = await this.api.get(`/api/payments/${paymentId}`);\n// return response.data;\n// } catch (error) {\n// if (error.response?.data?.error) {\n// throw new Error(error.response.data.error);\n// }\n// throw new Error(error.message || 'Failed to get payment details');\n// }\n// }\n\n// async getNetworks() {\n// try {\n// const response = await this.api.get('/api/networks');\n// return response.data;\n// } catch (error) {\n// console.error('Get networks failed:', error);\n \n// // Return fallback networks\n// return {\n// networks: [\n// {\n// id: 'ethereum',\n// name: 'Ethereum',\n// shortName: 'ethereum',\n// chainId: '1',\n// type: 'ethereum',\n// explorerUrl: 'https://etherscan.io',\n// isTestnet: false,\n// },\n// {\n// id: 'bsc',\n// name: 'Binance Smart Chain',\n// shortName: 'bsc',\n// chainId: '56',\n// type: 'bsc',\n// explorerUrl: 'https://bscscan.com',\n// isTestnet: false,\n// },\n// {\n// id: 'polygon',\n// name: 'Polygon',\n// shortName: 'polygon',\n// chainId: '137',\n// type: 'ethereum',\n// explorerUrl: 'https://polygonscan.com',\n// isTestnet: false,\n// },\n// ]\n// };\n// }\n// }\n\n// async getStablecoins() {\n// try {\n// const response = await this.api.get('/api/networks/stablecoins');\n// return response.data;\n// } catch (error) {\n// console.error('Get stablecoins failed:', error);\n \n// // Return fallback stablecoins\n// return {\n// stablecoins: [\n// {\n// id: 'usdt-eth',\n// name: 'Tether USD',\n// symbol: 'USDT',\n// contractAddress: '0xdAC17F958D2ee523a2206206994597C13D831ec7',\n// decimals: 6,\n// isStablecoin: true,\n// networkId: 'ethereum',\n// Network: {\n// id: 'ethereum',\n// name: 'Ethereum',\n// shortName: 'ethereum',\n// type: 'ethereum',\n// }\n// },\n// {\n// id: 'usdc-eth',\n// name: 'USD Coin',\n// symbol: 'USDC',\n// contractAddress: '0xA0b86a33E6441d81d0B93bF9EE0f74ca32F7e6f6',\n// decimals: 6,\n// isStablecoin: true,\n// networkId: 'ethereum',\n// Network: {\n// id: 'ethereum',\n// name: 'Ethereum',\n// shortName: 'ethereum',\n// type: 'ethereum',\n// }\n// }\n// ]\n// };\n// }\n// }\n\n// async verifyQRPayment(paymentId) {\n// try {\n// const response = await this.api.post('/api/payments/verify-qr', {\n// paymentId\n// });\n// return response.data;\n// } catch (error) {\n// if (error.response?.data?.error) {\n// throw new Error(error.response.data.error);\n// }\n// throw new Error(error.message || 'Failed to verify payment');\n// }\n// }\n\n// // ✅ CRITICAL FIX: Add the missing processPayment method\n// async processPayment(paymentId, transactionHash, network, senderAddress) {\n// try {\n// console.log('🔄 PaymentAPI: Processing payment with:', {\n// paymentId,\n// transactionHash,\n// network,\n// senderAddress\n// });\n\n// const response = await this.api.post('/api/payments/process', {\n// paymentId,\n// transactionHash,\n// network,\n// senderAddress\n// });\n\n// console.log('✅ PaymentAPI: Process payment response:', response.data);\n// return response.data;\n// } catch (error) {\n// console.error('❌ PaymentAPI: Process payment failed:', error);\n// if (error.response?.data?.error) {\n// throw new Error(error.response.data.error);\n// }\n// throw new Error(error.message || 'Failed to process payment');\n// }\n// }\n\n// async healthCheck() {\n// try {\n// const response = await this.api.get('/api/health');\n// return response.status === 200;\n// } catch (error) {\n// console.error('Health check failed:', error);\n// return false;\n// }\n// }\n// }\n\n\n\n\n\n\n// Updated PaymentAPI with enhanced methods and better error handling\nimport axios from 'axios';\n\nexport class PaymentAPI {\n constructor(baseURL, apiKey, apiSecret) {\n this.apiKey = apiKey;\n this.apiSecret = apiSecret;\n this.baseURL = baseURL.endsWith('/') ? baseURL.slice(0, -1) : baseURL;\n\n // Create axios instance with better defaults\n this.api = axios.create({\n baseURL: this.baseURL,\n timeout: 30000,\n headers: {\n 'Content-Type': 'application/json',\n },\n });\n\n // Enhanced request interceptor\n this.api.interceptors.request.use(\n (config) => {\n // Use lowercase headers to match backend expectations\n config.headers['x-api-key'] = this.apiKey;\n config.headers['x-api-secret'] = this.apiSecret;\n \n const token = this.generateMerchantToken();\n if (token) {\n config.headers['Authorization'] = `Bearer ${token}`;\n }\n\n // Add timestamp and user agent for mobile detection\n config.headers['x-timestamp'] = Date.now().toString();\n config.headers['x-user-agent'] = navigator.userAgent;\n config.headers['x-is-mobile'] = this.isMobile().toString();\n\n console.log('API Request:', {\n method: config.method?.toUpperCase(),\n url: config.url,\n data: config.data,\n isMobile: this.isMobile()\n });\n\n return config;\n },\n (error) => {\n console.error('Request interceptor error:', error);\n return Promise.reject(error);\n }\n );\n\n // Enhanced response interceptor\n this.api.interceptors.response.use(\n (response) => {\n console.log('API Response:', {\n status: response.status,\n url: response.config.url,\n data: response.data\n });\n return response;\n },\n (error) => {\n console.error('API Error:', {\n status: error.response?.status,\n data: error.response?.data,\n message: error.message\n });\n\n // Enhanced error messages\n if (error.response?.status === 401) {\n throw new Error('Authentication failed. Please check your API credentials.');\n } else if (error.response?.status === 404) {\n throw new Error('API endpoint not found. Please check your API URL.');\n } else if (error.response?.status === 429) {\n throw new Error('Rate limit exceeded. Please try again later.');\n } else if (error.response?.status >= 500) {\n throw new Error('Server error. Please try again later.');\n } else if (error.code === 'NETWORK_ERROR') {\n throw new Error('Network error. Please check your connection.');\n } else if (error.code === 'TIMEOUT') {\n throw new Error('Request timeout. Please try again.');\n }\n\n throw error;\n }\n );\n }\n\n generateMerchantToken() {\n try {\n const credentials = `${this.apiKey}:${this.apiSecret}`;\n return btoa(credentials);\n } catch (error) {\n console.error('Failed to generate token:', error);\n return null;\n }\n }\n\n isMobile() {\n return /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);\n }\n\n // Generic request method for internal use\n async request(endpoint, options = {}) {\n try {\n const response = await this.api({\n url: endpoint,\n method: options.method || 'GET',\n data: options.data || (options.body ? JSON.parse(options.body) : undefined),\n ...options\n });\n return response.data;\n } catch (error) {\n if (error.response?.data?.error) {\n throw new Error(error.response.data.error);\n }\n throw new Error(error.message || 'Request failed');\n }\n }\n\n // Enhanced payment creation with mobile support\n async createPayment(params) {\n try {\n // Add mobile-specific metadata\n const enhancedParams = {\n ...params,\n metadata: {\n ...params.metadata,\n isMobile: this.isMobile(),\n userAgent: navigator.userAgent,\n timestamp: Date.now(),\n sdkVersion: '0.0.26'\n }\n };\n\n const response = await this.api.post('/api/payments/create', enhancedParams);\n return response.data;\n } catch (error) {\n if (error.response?.data?.error) {\n throw new Error(error.response.data.error);\n }\n throw new Error(error.message || 'Failed to create payment');\n }\n }\n\n async getPayment(paymentId) {\n try {\n const response = await this.api.get(`/api/payments/${paymentId}`);\n return response.data;\n } catch (error) {\n if (error.response?.data?.error) {\n throw new Error(error.response.data.error);\n }\n throw new Error(error.message || 'Failed to get payment details');\n }\n }\n\n // Enhanced network fetching with caching\n async getNetworks() {\n try {\n const response = await this.api.get('/api/networks');\n return response.data;\n } catch (error) {\n console.error('Get networks failed:', error);\n \n // Return enhanced fallback networks\n return {\n networks: [\n {\n id: '1',\n name: 'Ethereum',\n shortName: 'ethereum',\n chainId: '0x1',\n type: 'ethereum',\n explorerUrl: 'https://etherscan.io',\n isTestnet: false,\n supportedWallets: ['metamask', 'coinbase', 'trust', 'rainbow']\n },\n {\n id: '56',\n name: 'BSC',\n shortName: 'bsc',\n chainId: '0x38',\n type: 'bsc',\n explorerUrl: 'https://bscscan.com',\n isTestnet: false,\n supportedWallets: ['metamask', 'trust', 'binance']\n },\n {\n id: '137',\n name: 'Polygon',\n shortName: 'polygon',\n chainId: '0x89',\n type: 'polygon',\n explorerUrl: 'https://polygonscan.com',\n isTestnet: false,\n supportedWallets: ['metamask', 'coinbase', 'trust']\n },\n {\n id: '42161',\n name: 'Arbitrum',\n shortName: 'arbitrum',\n chainId: '0xa4b1',\n type: 'arbitrum',\n explorerUrl: 'https://arbiscan.io',\n isTestnet: false,\n supportedWallets: ['metamask', 'coinbase']\n },\n {\n id: '10',\n name: 'Optimism',\n shortName: 'optimism',\n chainId: '0xa',\n type: 'optimism',\n explorerUrl: 'https://optimistic.etherscan.io',\n isTestnet: false,\n supportedWallets: ['metamask', 'coinbase']\n },\n {\n id: '43114',\n name: 'Avalanche',\n shortName: 'avalanche',\n chainId: '0xa86a',\n type: 'avalanche',\n explorerUrl: 'https://snowtrace.io',\n isTestnet: false,\n supportedWallets: ['metamask', 'coinbase']\n }\n ]\n };\n }\n }\n\n // Enhanced token fetching\n async getTokens() {\n try {\n const response = await this.api.get('/api/networks/stablecoins');\n return response.data;\n } catch (error) {\n console.error('Get tokens failed:', error);\n \n // Return enhanced fallback tokens\n return {\n stablecoins: [\n {\n id: '1',\n name: 'Tether USD',\n symbol: 'USDT',\n contractAddress: '0xdAC17F958D2ee523a2206206994597C13D831ec7',\n decimals: 6,\n isStablecoin: true,\n networkId: '1',\n Network: {\n id: '1',\n name: 'Ethereum',\n shortName: 'ethereum',\n type: 'ethereum'\n }\n },\n {\n id: '2',\n name: 'USD Coin',\n symbol: 'USDC',\n contractAddress: '0xA0b86a33E6441d81d0B93bF9EE0f74ca32F7e6f6',\n decimals: 6,\n isStablecoin: true,\n networkId: '1',\n Network: {\n id: '1',\n name: 'Ethereum',\n shortName: 'ethereum',\n type: 'ethereum'\n }\n },\n {\n id: '3',\n name: 'Binance USD',\n symbol: 'BUSD',\n contractAddress: '0xe9e7CEA3DedcA5984780Bafc599bD69ADd087D56',\n decimals: 18,\n isStablecoin: true,\n networkId: '56',\n Network: {\n id: '56',\n name: 'BSC',\n shortName: 'bsc',\n type: 'bsc'\n }\n },\n {\n id: '4',\n name: 'USD Coin (Polygon)',\n symbol: 'USDC',\n contractAddress: '0x2791Bca1f2de4661ED88A30C99A7a9449Aa84174',\n decimals: 6,\n isStablecoin: true,\n networkId: '137',\n Network: {\n id: '137',\n name: 'Polygon',\n shortName: 'polygon',\n type: 'polygon'\n }\n }\n ]\n };\n }\n }\n\n // Enhanced QR payment verification with retry logic\n async verifyQRPayment(paymentId, retryCount = 0, maxRetries = 3) {\n try {\n const response = await this.api.post('/api/payments/verify-qr', {\n paymentId,\n timestamp: Date.now(),\n retryCount\n });\n return response.data;\n } catch (error) {\n // Retry logic for network errors\n if (retryCount < maxRetries && (\n error.code === 'NETWORK_ERROR' || \n error.response?.status >= 500\n )) {\n console.log(`Retrying QR verification (${retryCount + 1}/${maxRetries})...`);\n await new Promise(resolve => setTimeout(resolve, 1000 * (retryCount + 1)));\n return this.verifyQRPayment(paymentId, retryCount + 1, maxRetries);\n }\n\n if (error.response?.data?.error) {\n throw new Error(error.response.data.error);\n }\n throw new Error(error.message || 'Failed to verify payment');\n }\n }\n\n // CRITICAL: Enhanced processPayment method\n async processPayment(paymentId, transactionHash, network, senderAddress, additionalData = {}) {\n try {\n console.log('🔄 PaymentAPI: Processing payment with enhanced data:', {\n paymentId,\n transactionHash,\n network,\n senderAddress,\n additionalData\n });\n\n const requestData = {\n paymentId,\n transactionHash,\n network,\n senderAddress,\n timestamp: Date.now(),\n isMobile: this.isMobile(),\n ...additionalData\n };\n\n const response = await this.api.post('/api/payments/process', requestData);\n\n console.log('✅ PaymentAPI: Process payment response:', response.data);\n return response.data;\n } catch (error) {\n console.error('❌ PaymentAPI: Process payment failed:', error);\n \n // Enhanced error handling\n if (error.response?.data?.error) {\n throw new Error(error.response.data.error);\n } else if (error.response?.status === 404) {\n throw new Error('Payment not found or invalid payment ID');\n } else if (error.response?.status === 400) {\n throw new Error('Invalid transaction data provided');\n } else if (error.response?.status === 409) {\n throw new Error('Payment has already been processed');\n }\n \n throw new Error(error.message || 'Failed to process payment');\n }\n }\n\n // New method: Get payment status\n async getPaymentStatus(paymentId) {\n try {\n const response = await this.api.get(`/api/payments/${paymentId}/status`);\n return response.data;\n } catch (error) {\n if (error.response?.data?.error) {\n throw new Error(error.response.data.error);\n }\n throw new Error(error.message || 'Failed to get payment status');\n }\n }\n\n // New method: Cancel payment\n async cancelPayment(paymentId, reason = 'User cancelled') {\n try {\n const response = await this.api.post(`/api/payments/${paymentId}/cancel`, {\n reason,\n timestamp: Date.now()\n });\n return response.data;\n } catch (error) {\n if (error.response?.data?.error) {\n throw new Error(error.response.data.error);\n }\n throw new Error(error.message || 'Failed to cancel payment');\n }\n }\n\n // New method: Get supported wallets for a network\n async getSupportedWallets(networkId) {\n try {\n const response = await this.api.get(`/api/networks/${networkId}/wallets`);\n return response.data;\n } catch (error) {\n console.error('Get supported wallets failed:', error);\n \n // Return fallback based on network\n const fallbackWallets = {\n '1': ['metamask', 'coinbase', 'trust', 'rainbow'], // Ethereum\n '56': ['metamask', 'trust', 'binance'], // BSC\n '137': ['metamask', 'coinbase', 'trust'], // Polygon\n '42161': ['metamask', 'coinbase'], // Arbitrum\n '10': ['metamask', 'coinbase'], // Optimism\n '43114': ['metamask', 'coinbase'] // Avalanche\n };\n\n return {\n wallets: fallbackWallets[networkId] || ['metamask', 'coinbase', 'trust']\n };\n }\n }\n\n // Enhanced health check with more details\n async healthCheck() {\n try {\n const response = await this.api.get('/api/health');\n return {\n status: 'healthy',\n timestamp: Date.now(),\n responseTime: response.headers['x-response-time'] || 'unknown',\n ...response.data\n };\n } catch (error) {\n console.error('Health check failed:', error);\n return {\n status: 'unhealthy',\n error: error.message,\n timestamp: Date.now()\n };\n }\n }\n\n // New method: Get exchange rates\n async getExchangeRates(baseCurrency = 'USD') {\n try {\n const response = await this.api.get(`/api/exchange-rates?base=${baseCurrency}`);\n return response.data;\n } catch (error) {\n console.error('Get exchange rates failed:', error);\n \n // Return fallback rates\n return {\n rates: {\n USD: 1,\n USDT: 1,\n USDC: 1,\n BUSD: 1,\n DAI: 1\n },\n timestamp: Date.now(),\n source: 'fallback'\n };\n }\n }\n\n // New method: Estimate transaction fees\n async estimateTransactionFees(network, tokenAddress = null) {\n try {\n const response = await this.api.get(`/api/networks/${network}/fees`, {\n params: { tokenAddress }\n });\n return response.data;\n } catch (error) {\n console.error('Estimate fees failed:', error);\n \n // Return fallback fee estimates\n const fallbackFees = {\n ethereum: { slow: 20, standard: 40, fast: 60 },\n bsc: { slow: 5, standard: 10, fast: 15 },\n polygon: { slow: 1, standard: 5, fast: 10 },\n arbitrum: { slow: 0.5, standard: 1, fast: 2 },\n optimism: { slow: 0.5, standard: 1, fast: 2 },\n avalanche: { slow: 2, standard: 5, fast: 10 }\n };\n\n return {\n fees: fallbackFees[network] || { slow: 10, standard: 20, fast: 40 },\n currency: 'gwei',\n source: 'fallback'\n };\n }\n }\n}","//src/CoinleyPayment.jsx\nimport React, { useState, useEffect, useRef } from 'react';\nimport { motion, AnimatePresence } from 'framer-motion';\nimport {\n Wallet,\n QrCode,\n ChevronDown,\n Copy,\n Check,\n X,\n ArrowLeft,\n Loader2,\n ExternalLink,\n AlertCircle,\n CheckCircle2,\n Zap,\n Sparkles\n} from 'lucide-react';\n// import QRCodeLib from 'qrcode';\nimport {\n createCoinleyWalletConfig,\n CoinleyWalletProvider,\n ConnectButton,\n WalletModal,\n useWallet,\n useWalletConnect,\n useWalletTransaction,\n useWalletModal,\n useWalletDetection\n} from '@coinley/wallet-connect-core';\nimport { PaymentAPI } from './PaymentAPI';\n\n// Wallet Integration Component\nconst WalletIntegration = ({\n selectedNetwork,\n selectedToken,\n paymentData,\n config,\n onTransactionSent,\n onError,\n isConnecting,\n setIsConnecting\n}) => {\n const { isConnected, address, disconnect } = useWallet();\n const { connectWallet, isPending } = useWalletConnect();\n const { detectedWallets, hasWallets, walletCount } = useWalletDetection();\n const { sendTransaction } = useWalletTransaction();\n const { openModal } = useWalletModal();\n\n // Filter wallets to only show Ethereum-compatible ones\n const ethereumWallets = detectedWallets.filter(wallet => \n wallet.name.toLowerCase().includes('metamask') || \n wallet.provider === 'injected' ||\n wallet.name.toLowerCase().includes('coinbase') ||\n wallet.name.toLowerCase().includes('wallet connect')\n );\n\n const handleConnectSpecificWallet = async (walletType) => {\n try {\n setIsConnecting(true);\n \n // Disconnect any existing connections first\n if (isConnected) {\n await disconnect();\n // Wait a bit for disconnection to complete\n await new Promise(resolve => setTimeout(resolve, 1000));\n }\n\n // For MetaMask, try to connect directly to window.ethereum\n if (walletType === 'metamask' && window.ethereum && window.ethereum.isMetaMask) {\n try {\n // Direct MetaMask connection\n await window.ethereum.request({ method: 'eth_requestAccounts' });\n console.log('✅ Connected directly to MetaMask');\n } catch (error) {\n console.error('MetaMask connection failed:', error);\n throw error;\n }\n } else {\n // Use the library's connect function\n await connectWallet(walletType);\n }\n } catch (error) {\n console.error('Wallet connection failed:', error);\n onError(error.message || 'Failed to connect wallet');\n } finally {\n setIsConnecting(false);\n }\n };\n\n // Alternative: Try opening the modal directly\n const handleOpenModal = () => {\n try {\n console.log('Attempting to open wallet modal...');\n openModal();\n } catch (error) {\n console.error('Failed to open modal:', error);\n // Fallback: try direct wallet connection\n handleConnectSpecificWallet('injected');\n }\n };\n\n const handleSendPayment = async () => {\n if (!isConnected || !paymentData || !selectedToken) {\n onError('Wallet not connected or payment data missing');\n return;\n }\n\n try {\n setIsConnecting(true);\n\n console.log('🔍 Transaction Debug:');\n console.log('Connected wallet address:', address);\n console.log('Payment data:', paymentData);\n console.log('Selected token:', selectedToken);\n console.log('Selected network:', selectedNetwork);\n\n // Use the merchant's wallet address from the payment data as the recipient\n let recipientAddress = paymentData.metadata?.recipientWallet;\n\n console.log('Merchant recipient address:', recipientAddress);\n\n if (!recipientAddress || typeof recipientAddress !== 'string') {\n throw new Error('Merchant wallet address not found in payment data');\n }\n\n // Validate Ethereum address format\n if (!recipientAddress.match(/^0x[a-fA-F0-9]{40}$/)) {\n throw new Error(`Invalid merchant address format: ${recipientAddress}`);\n }\n\n let txHash;\n\n if (selectedToken.contractAddress) {\n // ERC-20 Token Transaction\n console.log('🔍 ERC-20 Transaction Details:');\n console.log('Token contract:', selectedToken.contractAddress);\n console.log('Token decimals:', selectedToken.decimals);\n console.log('Payment amount:', paymentData.totalAmount);\n\n const decimals = selectedToken.decimals || 6;\n const amount = Math.floor(paymentData.totalAmount * Math.pow(10, decimals));\n \n console.log('Calculated amount (with decimals):', amount);\n\n // ERC-20 transfer encoding\n const methodId = '0xa9059cbb';\n const addressWithoutPrefix = recipientAddress.slice(2);\n const recipientPadded = addressWithoutPrefix.toLowerCase().padStart(64, '0');\n const amountPadded = amount.toString(16).padStart(64, '0');\n \n const transferData = `${methodId}${recipientPadded}${amountPadded}`;\n\n console.log('🔍 Transaction Data:');\n console.log('Method ID:', methodId);\n console.log('Recipient (padded):', recipientPadded);\n console.log('Amount (padded):', amountPadded);\n console.log('Full data:', transferData);\n\n const txParams = {\n to: selectedToken.contractAddress,\n data: transferData,\n value: '0x0'\n };\n\n console.log('📤 Sending ERC-20 transaction:', txParams);\n txHash = await sendTransaction(txParams);\n } else {\n // Native Token Transaction\n const value = Math.floor(paymentData.totalAmount * Math.pow(10, 18));\n const valueHex = `0x${value.toString(16)}`;\n\n const txParams = {\n to: recipientAddress,\n value: valueHex\n };\n\n console.log('📤 Sending native transaction:', txParams);\n txHash = await sendTransaction(txParams);\n }\n\n if (txHash) {\n console.log('✅ Transaction sent successfully:', txHash);\n onTransactionSent(txHash);\n }\n } catch (error) {\n console.error('❌ Transaction failed:', error);\n onError(error.message || 'Transaction failed');\n } finally {\n setIsConnecting(false);\n }\n };\n\n const handleDisconnect = async () => {\n try {\n await disconnect();\n } catch (error) {\n console.error('Disconnect error:', error);\n }\n };\n\n return (\n <div className=\"text-center space-y-6\">\n <div className=\"space-y-4\">\n <div className=\"w-16 h-16 bg-[#7042D2] bg-opacity-20 rounded-full flex items-center justify-center mx-auto\">\n <Wallet className=\"w-8 h-8 text-[#7042D2]\" />\n </div>\n \n {!isConnected ? (\n <>\n <h3 className=\"text-lg font-semibold\">\n Connect Your Wallet\n </h3>\n <p className=\"text-gray-600 dark:text-gray-400 text-sm\">\n Choose your preferred wallet to complete the payment\n </p>\n \n <div className=\"space-y-3\">\n {/* MetaMask Button */}\n <button\n onClick={() => handleConnectSpecificWallet('metamask')}\n disabled={isPending || isConnecting}\n className=\"w-full p-3 border border-gray-300 rounded-lg hover:border-[#7042D2] flex items-center space-x-3 transition-colors disabled:opacity-50\"\n >\n <span className=\"text-xl\">🦊</span>\n <div className=\"text-left flex-1\">\n <div className=\"font-medium\">MetaMask</div>\n <div className=\"text-xs text-gray-500\">Connect with MetaMask</div>\n </div>\n </button>\n\n {/* Generic Wallet Button */}\n <button\n onClick={handleOpenModal}\n disabled={isPending || isConnecting}\n className=\"w-full p-3 border border-gray-300 rounded-lg hover:border-[#7042D2] flex items-center space-x-3 transition-colors disabled:opacity-50\"\n >\n <span className=\"text-xl\">💼</span>\n <div className=\"text-left flex-1\">\n <div className=\"font-medium\">Other Wallets</div>\n <div className=\"text-xs text-gray-500\">Choose from available wallets</div>\n </div>\n </button>\n\n {/* Manual Connection Fallback */}\n <button\n onClick={() => handleConnectSpecificWallet('injected')}\n disabled={isPending || isConnecting}\n className=\"w-full p-2 text-sm border border-dashed border-gray-300 rounded-lg hover:border-[#7042D2] transition-colors disabled:opacity-50\"\n >\n Try Direct Connection\n </button>\n </div>\n\n {isConnecting && (\n <div className=\"flex items-center justify-center space-x-2 text-gray-600\">\n <Loader2 className=\"w-4 h-4 animate-spin\" />\n <span>Connecting...</span>\n </div>\n )}\n </>\n ) : (\n <>\n <h3 className=\"text-lg font-semibold text-green-600\">\n Wallet Connected ✅\n </h3>\n \n <div className=\"bg-gray-50 dark:bg-gray-800 rounded-lg p-4 space-y-3\">\n <div className=\"flex justify-between items-center\">\n <span className=\"text-sm text-gray-600 dark:text-gray-400\">Address:</span>\n <div className=\"flex items-center space-x-2\">\n <span className=\"font-mono text-sm\">\n {address?.slice(0, 6)}...{address?.slice(-4)}\n </span>\n <button\n onClick={handleDisconnect}\n className=\"text-xs text-red-600 hover:text-red-800\"\n >\n Disconnect\n </button>\n </div>\n </div>\n \n {paymentData && (\n <>\n <div className=\"flex justify-between items-center\">\n <span className=\"text-sm text-gray-600 dark:text-gray-400\">Amount:</span>\n <span className=\"font-medium\">{paymentData.totalAmount} {selectedToken?.symbol}</span>\n </div>\n <div className=\"flex justify-between items-center\">\n <span className=\"text-sm text-gray-600 dark:text-gray-400\">Network:</span>\n <span className=\"font-medium\">{selectedNetwork?.name}</span>\n </div>\n </>\n )}\n </div>\n\n {/* Payment Button */}\n <button\n onClick={handleSendPayment}\n disabled={isConnecting}\n className=\"w-full bg-[#7042D2] text-white py-4 rounded-lg font-semibold hover:bg-[#7042D2]/90 transition-colors disabled:opacity-50 disabled:cursor-not-allowed flex items-center justify-center space-x-2\"\n >\n {isConnecting ? (\n <>\n <Loader2 className=\"w-5 h-5 animate-spin\" />\n <span>Processing Payment...</span>\n </>\n ) : (\n <>\n <Zap className=\"w-5 h-5\" />\n <span>Send Payment</span>\n </>\n )}\n </button>\n\n <p className=\"text-xs text-gray-500\">\n Make sure you have enough {selectedToken?.symbol} and ETH for gas fees\n </p>\n </>\n )}\n </div>\n </div>\n );\n};\n\nconst CoinleyPayment = ({\n apiKey,\n apiSecret,\n apiUrl = 'http://localhost:9000',\n onSuccess,\n onError,\n onClose,\n isOpen,\n config,\n theme = 'light',\n merchantName,\n debug = false\n}) => {\n // State management\n const [currentStep, setCurrentStep] = useState('select-method');\n const [networks, setNetworks] = useState([]);\n const [tokens, setTokens] = useState([]);\n const [selectedNetwork, setSelectedNetwork] = useState(null);\n const [selectedToken, setSelectedToken] = useState(null);\n const [paymentMethod, setPaymentMethod] = useState(null);\n const [qrCode, setQrCode] = useState('');\n const [paymentData, setPaymentData] = useState(null);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState('');\n const [copied, setCopied] = useState(false);\n const [txHash, setTxHash] = useState('');\n const [isConnecting, setIsConnecting] = useState(false);\n\n // Services\n const paymentAPI = useRef(new PaymentAPI(apiUrl, apiKey, apiSecret));\n\n // Wallet configuration - Fixed to use proper chain configuration\n const walletConfig = createCoinleyWalletConfig({\n appName: merchantName || 'Coinley Payment',\n appDescription: 'Crypto payment processing',\n // Fix: Provide proper chain configurations instead of just IDs\n chains: [\n {\n id: 1,\n name: 'Ethereum',\n network: 'ethereum',\n rpcUrls: {\n default: { http: ['https://eth.llamarpc.com'] }\n },\n nativeCurrency: {\n name: 'Ethereum',\n symbol: 'ETH',\n decimals: 18\n }\n },\n {\n id: 56,\n name: 'BNB Smart Chain',\n network: 'bsc',\n rpcUrls: {\n default: { http: ['https://bsc-dataseed1.binance.org'] }\n },\n nativeCurrency: {\n name: 'BNB',\n symbol: 'BNB',\n decimals: 18\n }\n }\n ]\n });\n\n // Initialize\n useEffect(() => {\n if (isOpen) {\n initializePayment();\n }\n }, [isOpen]);\n\n const initializePayment = async () => {\n try {\n setLoading(true);\n setError('');\n\n const [networksRes, tokensRes] = await Promise.all([\n paymentAPI.current.getNetworks(),\n paymentAPI.current.getStablecoins()\n ]);\n\n setNetworks(networksRes.networks || []);\n setTokens(tokensRes.stablecoins || []);\n\n if (debug) {\n console.log('Initialized networks:', networksRes.networks);\n console.log('Initialized tokens:', tokensRes.stablecoins);\n }\n } catch (err) {\n console.error('Failed to initialize payment:', err);\n setError('Failed to load payment options. Please try again.');\n } finally {\n setLoading(false);\n }\n };\n\n const handleMethodSelect = (method) => {\n setPaymentMethod(method);\n setCurrentStep('select-network');\n };\n\n const handleNetworkSelect = async (network) => {\n setSelectedNetwork(network);\n\n // Get available tokens for this network\n const networkTokens = tokens.filter(token =>\n token.Network?.shortName === network.shortName || token.networkId === network.id\n );\n\n if (networkTokens.length > 1) {\n // Multiple tokens available - let user choose\n setCurrentStep('select-token');\n } else if (networkTokens.length === 1) {\n // Only one token available - auto-select and proceed\n const token = networkTokens[0];\n setSelectedToken(token);\n await initiatePayment(network, token);\n } else {\n // No tokens available for this network\n setError(`No supported tokens found for ${network.name}`);\n setCurrentStep('error');\n }\n };\n\n const handleTokenSelect = async (token) => {\n setSelectedToken(token);\n await initiatePayment(selectedNetwork, token);\n };\n\n const initiatePayment = async (network, token) => {\n try {\n setLoading(true);\n\n const paymentPayload = {\n amount: config.amount,\n currency: token.symbol,\n network: network.shortName,\n customerEmail: config.customerEmail,\n callbackUrl: config.callbackUrl,\n metadata: {\n ...config.metadata,\n paymentMethod,\n selectedNetwork: network.shortName,\n selectedToken: token.symbol,\n // Add the merchant wallet addresses to metadata\n merchantWalletAddresses: config.merchantWalletAddresses\n }\n };\n\n console.log('🔍 Payment payload with merchant wallets:', paymentPayload);\n\n const payment = await paymentAPI.current.createPayment(paymentPayload);\n setPaymentData(payment.payment);\n\n if (paymentMethod === 'wallet') {\n setCurrentStep('wallet-connect');\n } else {\n await generateQRCode(payment.payment);\n setCurrentStep('qr-code');\n }\n } catch (err) {\n console.error('Payment initiation failed:', err);\n setError(err.message || 'Failed to create payment');\n setCurrentStep('error');\n } finally {\n setLoading(false);\n }\n };\n\n const generateQRCode = async (payment) => {\n try {\n const recipientAddress = payment.metadata?.recipientWallet ||\n config.merchantWalletAddresses?.[selectedNetwork?.shortName || ''];\n\n if (!recipientAddress) {\n throw new Error('Recipient wallet address not found');\n }\n\n let qrData = '';\n\n if (selectedNetwork?.type === 'ethereum' || selectedNetwork?.type === 'bsc') {\n qrData = selectedToken?.contractAddress\n ? `ethereum:${selectedToken.contractAddress}/transfer?address=${recipientAddress}&uint256=${payment.totalAmount * Math.pow(10, selectedToken.decimals)}`\n : `ethereum:${recipientAddress}?value=${payment.totalAmount}e18`;\n } else if (selectedNetwork?.type === 'tron') {\n qrData = `tron:${recipientAddress}?amount=${payment.totalAmount}`;\n } else {\n qrData = `${selectedToken?.symbol}:${recipientAddress}?amount=${payment.totalAmount}`;\n }\n\n // For now, just set the recipient address since QRCodeLib is commented out\n setQrCode(recipientAddress);\n startPaymentVerification(payment.id);\n\n } catch (err) {\n console.error('QR code generation failed:', err);\n setError('Failed to generate QR code');\n setCurrentStep('error');\n }\n };\n\n const startPaymentVerification = async (paymentId) => {\n const maxAttempts = 60;\n let attempts = 0;\n\n const checkPayment = async () => {\n try {\n const result = await paymentAPI.current.verifyQRPayment(paymentId);\n\n if (result.verified && result.payment?.transactionHash) {\n setTxHash(result.payment.transactionHash);\n await handlePaymentSuccess(paymentId, result.payment.transactionHash);\n return true;\n }\n\n attempts++;\n if (attempts < maxAttempts) {\n setTimeout(checkPayment, 5000);\n } else {\n setError('Payment verification timeout. Please check your transaction.');\n setCurrentStep('error');\n }\n\n return false;\n } catch (err) {\n console.error('Payment verification error:', err);\n attempts++;\n if (attempts < maxAttempts) {\n setTimeout(checkPayment, 5000);\n } else {\n setError('Payment verification failed');\n setCurrentStep('error');\n }\n return false;\n }\n };\n\n setTimeout(checkPayment, 2000);\n };\n\n const handleTransactionSent = async (transactionHash) => {\n setTxHash(transactionHash);\n setCurrentStep('processing');\n\n try {\n await paymentAPI.current.processPayment(\n paymentData.id,\n transactionHash,\n selectedNetwork?.shortName || '',\n ''\n );\n\n await handlePaymentSuccess(paymentData.id, transactionHash);\n } catch (error) {\n console.error('Payment processing failed:', error);\n await handlePaymentSuccess(paymentData.id, transactionHash);\n }\n };\n\n const handlePaymentSuccess = async (paymentId, transactionHash) => {\n setCurrentStep('success');\n\n if (onSuccess) {\n onSuccess(paymentId, transactionHash, {\n network: selectedNetwork?.name,\n token: selectedToken?.symbol,\n amount: paymentData?.totalAmount,\n method: paymentMethod\n });\n }\n };\n\n const copyToClipboard = async (text) => {\n try {\n await navigator.clipboard.writeText(text);\n setCopied(true);\n setTimeout(() => setCopied(false), 2000);\n } catch (err) {\n console.error('Failed to copy:', err);\n }\n };\n\n const handleClose = () => {\n setCurrentStep('select-method');\n setPaymentMethod(null);\n setSelectedNetwork(null);\n setSelectedToken(null);\n setQrCode('');\n setPaymentData(null);\n setError('');\n setTxHash('');\n\n if (onClose) {\n onClose();\n }\n };\n\n const goBack = () => {\n if (currentStep === 'select-network') {\n setCurrentStep('select-method');\n } else if (currentStep === 'select-token') {\n setCurrentStep('select-network');\n } else if (currentStep === 'wallet-connect' || currentStep === 'qr-code') {\n // Go back to token selection if multiple tokens, otherwise network selection\n const networkTokens = tokens.filter(token =>\n token.Network?.shortName === selectedNetwork?.shortName || token.networkId === selectedNetwork?.id\n );\n if (networkTokens.length > 1) {\n setCurrentStep('select-token');\n } else {\n setCurrentStep('select-network');\n }\n }\n };\n\n if (!isOpen) return null;\n\n return (\n <CoinleyWalletProvider config={walletConfig} walletConfig={{ appName: merchantName || 'Coinley Payment' }}>\n <div className=\"fixed inset-0 z-50 flex items-center justify-center bg-black bg-opacity-50 backdrop-blur-sm\">\n <motion.div\n initial={{ scale: 0.9, opacity: 0 }}\n animate={{ scale: 1, opacity: 1 }}\n exit={{ scale: 0.9, opacity: 0 }}\n className={`relative w-full max-w-md mx-4 rounded-2xl shadow-2xl overflow-hidden ${theme === 'dark' ? 'bg-gray-900 text-white' : 'bg-white text-gray-900'\n }`}\n >\n {/* Header */}\n <div className=\"relative p-6 border-b border-gray-200 dark:border-gray-700\">\n {(currentStep !== 'select-method' && currentStep !== 'success' && currentStep !== 'error') && (\n <button\n onClick={goBack}\n className=\"absolute left-4 top-6 p-1 rounded-full hover:bg-gray-100 dark:hover:bg-gray-800 transition-colors\"\n >\n <ArrowLeft className=\"w-5 h-5\" />\n </button>\n )}\n\n <button\n onClick={handleClose}\n className=\"absolute right-4 top-6 p-1 rounded-full hover:bg-gray-100 dark:hover:bg-gray-800 transition-colors\"\n >\n <X className=\"w-5 h-5\" />\n </button>\n\n <div className=\"text-center\">\n <div className=\"flex items-center justify-center space-x-2 mb-2\">\n <Sparkles className=\"w-5 h-5 text-[#7042D2]\" />\n <h2 className=\"text-xl font-bold\">Pay with Crypto</h2>\n <Sparkles className=\"w-5 h-5 text-[#7042D2]\" />\n </div>\n {merchantName && (\n <p className=\"text-sm text-gray-600 dark:text-gray-400 mt-1\">\n {merchantName}\n </p>\n )}\n <div className=\"mt-2\">\n <span className=\"text-2xl font-bold text-[#7042D2]\">\n ${config.amount.toFixed(2)}\n </span>\n </div>\n </div>\n </div>\n\n {/* Content */}\n <div className=\"p-6 min-h-[400px]\">\n <AnimatePresence mode=\"wait\">\n {/* Step 1: Select Payment Method */}\n {currentStep === 'select-method' && (\n <motion.div\n key=\"select-method\"\n initial={{ x: 20, opacity: 0 }}\n animate={{ x: 0, opacity: 1 }}\n exit={{ x: -20, opacity: 0 }}\n className=\"space-y-4\"\n >\n <h3 className=\"text-lg font-semibold text-center mb-6\">\n Choose Payment Method\n </h3>\n\n <motion.button\n whileHover={{ scale: 1.02 }}\n whileTap={{ scale: 0.98 }}\n onClick={() => handleMethodSelect('wallet')}\n className=\"w-full p-4 border-2 border-gray-200 dark:border-gray-700 rounded-xl hover:border-[#7042D2] transition-colors group\"\n >\n <div className=\"flex items-center space-x-4\">\n <div className=\"p-3 bg-[#7042D2] bg-opacity-10 rounded-lg group-hover:bg-opacity-20 transition-colors\">\n <Wallet className=\"w-6 h-6 text-[#7042D2]\" />\n </div>\n <div className=\"text-left\">\n <div className=\"font-semibold\">Connect Wallet</div>\n <div className=\"text-sm text-gray-600 dark:text-gray-400\">\n MetaMask, WalletConnect & more\n </div>\n </div>\n <Zap className=\"w-5 h-5 text-[#7042D2] ml-auto\" />\n </div>\n </motion.button>\n\n <motion.button\n whileHover={{ scale: 1.02 }}\n whileTap={{ scale: 0.98 }}\n onClick={() => handleMethodSelect('qr')}\n className=\"w-full p-4 border-2 border-gray-200 dark:border-gray-700 rounded-xl hover:border-[#7042D2] transition-colors group\"\n >\n <div className=\"flex items-center space-x-4\">\n <div className=\"p-3 bg-[#7042D2] bg-opacity-10 rounded-lg group-hover:bg-opacity-20 transition-colors\">\n <QrCode className=\"w-6 h-6 text-[#7042D2]\" />\n </div>\n <div className=\"text-left\">\n <div className=\"font-semibold\">QR Code</div>\n <div className=\"text-sm text-gray-600 dark:text-gray-400\">\n Scan with mobile wallet\n </div>\n </div>\n </div>\n </motion.button>\n </motion.div>\n )}\n\n {/* Step 2: Select Network */}\n {currentStep === 'select-network' && (\n <motion.div\n key=\"select-network\"\n initial={{ x: 20, opacity: 0 }}\n animate={{ x: 0, opacity: 1 }}\n exit={{ x: -20, opacity: 0 }}\n className=\"space-y-4\"\n >\n <h3 className=\"text-lg font-semibold text-center mb-6\">\n Select Network\n </h3>\n\n {loading ? (\n <div className=\"flex justify-center py-8\">\n <Loader2 className=\"w-8 h-8 animate-spin text-[#7042D2]\" />\n </div>\n ) : (\n <div className=\"space-y-3\">\n {networks.map((network) => (\n <motion.button\n key={network.id}\n whileHover={{ scale: 1.02 }}\n whileTap={{ scale: 0.98 }}\n onClick={() => handleNetworkSelect(network)}\n className=\"w-full p-4 border-2 border-gray-200 dark:border-gray-700 rounded-xl hover:border-[#7042D2] transition-colors group\"\n >\n <div className=\"flex items-center space-x-4\">\n {network.logo ? (\n <img\n src={network.logo}\n alt={network.name}\n className=\"w-8 h-8 rounded-full\"\n />\n ) : (\n <div className=\"w-8 h-8 bg-[#7042D2] bg-opacity-20 rounded-full flex items-center justify-center\">\n <span className=\"text-sm font-bold text-[#7042D2]\">\n {network.shortName.charAt(0).toUpperCase()}\n </span>\n </div>\n )}\n <div className=\"text-left flex-1\">\n <div className=\"font-semibold\">{network.name}</div>\n <div className=\"text-sm text-gray-600 dark:text-gray-400\">\n {network.shortName.toUpperCase()}\n </div>\n </div>\n <ChevronDown className=\"w-5 h-5 text-gray-400 transform -rotate-90\" />\n </div>\n </motion.button>\n ))}\n </div>\n )}\n </motion.div>\n )}\n\n {/* Step 3: Select Token */}\n {currentStep === 'select-token' && (\n <motion.div\n key=\"select-token\"\n initial={{ x: 20, opacity: 0 }}\n animate={{ x: 0, opacity: 1 }}\n exit={{ x: -20, opacity: 0 }}\n className=\"space-y-4\"\n >\n <h3 className=\"text-lg font-semibold text-center mb-6\">\n Select Token on {selectedNetwork?.name}\n </h3>\n\n {loading ? (\n <div className=\"flex justify-center py-8\">\n <Loader2 className=\"w-8 h-8 animate-spin text-[#7042D2]\" />\n </div>\n ) : (\n <div className=\"space-y-3\">\n {tokens\n .filter(token =>\n token.Network?.shortName === selectedNetwork?.shortName || \n token.networkId === selectedNetwork?.id\n )\n .map((token) => (\n <motion.button\n key={token.id}\n whileHover={{ scale: 1.02 }}\n whileTap={{ scale: 0.98 }}\n onClick={() => handleTokenSelect(token)}\n className=\"w-full p-4 border-2 border-gray-200 dark:border-gray-700 rounded-xl hover:border-[#7042D2] transition-colors group\"\n >\n <div className=\"flex items-center space-x-4\">\n {token.logo ? (\n <img\n src={token.logo}\n alt={token.symbol}\n className=\"w-8 h-8 rounded-full\"\n />\n ) : (\n <div className=\"w-8 h-8 bg-[#7042D2] bg-opacity-20 rounded-full flex items-center justify-center\">\n <span className=\"text-sm font-bold text-[#7042D2]\">\n {token.symbol.charAt(0)}\n </span>\n </div>\n )}\n <div className=\"text-left flex-1\">\n <div className=\"font-semibold\">{token.name}</div>\n <div className=\"text-sm text-gray-600 dark:text-gray-400\">\n {token.symbol}\n {token.isStablecoin && (\n <span className=\"ml-2 px-2 py-0.5 bg-green-100 text-green-600 text-xs rounded-full\">\n Stablecoin\n </span>\n )}\n </div>\n </div>\n <ChevronDown className=\"w-5 h-5 text-gray-400 transform -rotate-90\" />\n </div>\n </motion.button>\n ))\n }\n </div>\n )}\n </motion.div>\n )}\n\n {/* Wallet Connect */}\n {currentStep === 'wallet-connect' && (\n <motion.div\n key=\"wallet-connect\"\n initial={{ x: 20, opacity: 0 }}\n animate={{ x: 0, opacity: 1 }}\n exit={{ x: -20, opacity: 0 }}\n >\n <WalletIntegration\n selectedNetwork={selectedNetwork}\n selectedToken={selectedToken}\n paymentData={paymentData}\n config={config} // Pass config to WalletIntegration\n onTransactionSent={handleTransactionSent}\n onError={setError}\n isConnecting={isConnecting}\n setIsConnecting={setIsConnecting}\n />\n </motion.div>\n )}\n\n {/* QR Code */}\n {currentStep === 'qr-code' && (\n <motion.div\n key=\"qr-code\"\n initial={{ x: 20, opacity: 0 }}\n animate={{ x: 0, opacity: 1 }}\n exit={{ x: -20, opacity: 0 }}\n className=\"text-center space-y-6\"\n >\n <div className=\"space-y-4\">\n <h3 className=\"text-lg font-semibold\">Scan QR Code</h3>\n <p className=\"text-gray-600 dark:text-gray-400\">\n Use your mobile wallet to scan and pay\n </p>\n </div>\n\n {qrCode && (\n <div className=\"bg-white p-4 rounded-xl mx-auto inline-block\">\n <div className=\"w-48 h-48 flex items-center justify-center text-gray-500\">\n QR Code: {qrCode.slice(0, 10)}...{qrCode.slice(-4)}\n </div>\n </div>\n )}\n\n {paymentData && (\n <div className=\"space-y-3\">\n <div className=\"bg-gray-50 dark:bg-gray-800 rounded-lg p-4 space-y-2\">\n <div className=\"flex justify-between items-center\">\n <span className=\"text-sm text-gray-600 dark:text-gray-400\">Network:</span>\n <span className=\"font-medium\">{selectedNetwork?.name}</span>\n </div>\n <div className=\"flex justify-between items-center\">\n <span className=\"text-sm text-gray-600 dark:text-gray-400\">Amount:</span>\n <span className=\"font-medium\">{paymentData.totalAmount} {selectedToken?.symbol}</span>\n </div>\n </div>\n\n <div className=\"flex items-center justify-center space-x-2 text-sm text-gray-600 dark:text-gray-400\">\n <Loader2 className=\"w-4 h-4 animate-spin\" />\n <span>Waiting for payment...</span>\n </div>\n </div>\n )}\n </motion.div>\n )}\n\n {/* Processing */}\n {currentStep === 'processing' && (\n <motion.div\n key=\"processing\"\n initial={{ scale: 0.8, opacity: 0 }}\n animate={{ scale: 1, opacity: 1 }}\n className=\"text-center space-y-6\"\n >\n <div className=\"w-16 h-16 bg-[#7042D2] bg-opacity-20 rounded-full flex items-center justify-center mx-auto\">\n <Loader2 className=\"w-8 h-8 animate-spin text-[#7042D2]\" />\n </div>\n <div>\n <h3 className=\"text-lg font-semibold text-[#7042D2]\">Processing Payment...</h3>\n <p className=\"text-gray-600 dark:text-gray-400 mt-2\">\n Your transaction is being processed\n </p>\n </div>\n </motion.div>\n )}\n\n {/* Success */}\n {currentStep === 'success' && (\n <motion.div\n key=\"success\"\n initial={{ scale: 0.8, opacity: 0 }}\n animate={{ scale: 1, opacity: 1 }}\n className=\"text-center space-y-6\"\n >\n <div className=\"w-16 h-16 bg-green-100 rounded-full flex items-center justify-center mx-auto\">\n <CheckCircle2 className=\"w-8 h-8 text-green-500\" />\n </div>\n <div>\n <h3 className=\"text-lg font-semibold text-green-600\">Payment Successful!</h3>\n <p className=\"text-gray-600 dark:text-gray-400 mt-2\">\n Your payment has been processed successfully\n </p>\n </div>\n\n {txHash && (\n <div className=\"bg-gray-50 dark:bg-gray-800 rounded-lg p-4\">\n <div className=\"flex justify-between items-center\">\n <span className=\"text-sm text-gray-600 dark:text-gray-400\">Transaction:</span>\n <div className=\"flex items-center space-x-2\">\n <span className=\"font-mono text-sm\">\n {txHash.slice(0, 6)}...{txHash.slice(-4)}\n </span>\n <button\n onClick={() => copyToClipboard(txHash)}\n className=\"p-1 hover:bg-gray-200 dark:hover:bg-gray-700 rounded\"\n >\n <Copy className=\"w-4 h-4\" />\n </button>\n {selectedNetwork?.explorerUrl && (\n <a\n href={`${selectedNetwork.explorerUrl}/tx/${txHash}`}\n target=\"_blank\"\n rel=\"noopener noreferrer\"\n className=\"p-1 hover:bg-gray-200 dark:hover:bg-gray-700 rounded\"\n >\n <ExternalLink className=\"w-4 h-4\" />\n </a>\n )}\n </div>\n </div>\n </div>\n )}\n\n <button\n onClick={handleClose}\n className=\"w-full bg-[#7042D2] text-white py-3 rounded-lg font-semibold hover:bg-[#7042D2]/90 transition-colors\"\n >\n Close\n </button>\n </motion.div>\n )}\n\n {/* Error */}\n {currentStep === 'error' && (\n <motion.div\n key=\"error\"\n initial={{ scale: 0.8, opacity: 0 }}\n animate={{ scale: 1, opacity: 1 }}\n className=\"text-center space-y-6\"\n >\n <div className=\"w-16 h-16 bg-red-100 rounded-full flex items-center justify-center mx-auto\">\n <AlertCircle className=\"w-8 h-8 text-red-500\" />\n </div>\n <div>\n <h3 className=\"text-lg font-semibold text-red-600\">Payment Failed</h3>\n <p className=\"text-gray-600 dark:text-gray-400 mt-2\">\n {error || 'Something went wrong. Please try again.'}\n </p>\n </div>\n\n <div className=\"space-y-3\">\n <button\n onClick={() => {\n setCurrentStep('select-method');\n setError('');\n }}\n className=\"w-full bg-[#7042D2] text-white py-3 rounded-lg font-semibold hover:bg-[#7042D2]/90 transition-colors\"\n >\n Try Again\n </button>\n <button\n onClick={handleClose}\n className=\"w-full border border-gray-300 dark:border-gray-600 py-3 rounded-lg font-semibold hover:bg-gray-50 dark:hover:bg-gray-800 transition-colors\"\n >\n Close\n </button>\n </div>\n </motion.div>\n )}\n </AnimatePresence>\n </div>\n\n {/* Footer */}\n <div className=\"px-6 py-4 border-t border-gray-200 dark:border-gray-700 text-center\">\n <p className=\"text-xs text-gray-500\">\n Powered by <span className=\"font-semibold text-[#7042D2]\">Coinley</span>\n </p>\n </div>\n </motion.div>\n </div>\n\n <WalletModal />\n </CoinleyWalletProvider>\n );\n};\n\nexport default CoinleyPayment;","//src/components/SimpleCoinleyPayment.jsx - in my coinley-test SDK\nimport React, { useState, useEffect, useRef } from 'react';\n\n// Simple Payment API class (reuse your existing PaymentAPI structure)\nclass SimplePaymentAPI {\n constructor(baseURL, apiKey, apiSecret) {\n this.baseURL = baseURL.endsWith('/') ? baseURL.slice(0, -1) : baseURL;\n this.apiKey = apiKey;\n this.apiSecret = apiSecret;\n }\n\n async request(endpoint, options = {}) {\n const url = `${this.baseURL}${endpoint}`;\n const headers = {\n 'Content-Type': 'application/json',\n 'X-API-Key': this.apiKey,\n 'X-API-Secret': this.apiSecret,\n ...options.headers\n };\n\n const response = await fetch(url, {\n ...options,\n headers\n });\n\n if (!response.ok) {\n const error = await response.json().catch(() => ({}));\n throw new Error(error.error || `HTTP ${response.status}`);\n }\n\n return response.json();\n }\n\n async getNetworks() {\n try {\n return await this.request('/api/networks');\n } catch (error) {\n console.error('Failed to fetch networks:', error);\n // Fallback networks\n return {\n networks: [\n { id: '1', name: 'Ethereum', shortName: 'ethereum', chainId: '0x1', type: 'ethereum' },\n { id: '56', name: 'BSC', shortName: 'bsc', chainId: '0x38', type: 'bsc' }\n ]\n };\n }\n }\n\n async getTokens() {\n try {\n return await this.request('/api/networks/stablecoins');\n } catch (error) {\n console.error('Failed to fetch tokens:', error);\n // Fallback tokens\n return {\n stablecoins: [\n {\n id: '1', name: 'Tether USD', symbol: 'USDT',\n contractAddress: '0xdAC17F958D2ee523a2206206994597C13D831ec7',\n decimals: 6, networkId: '1',\n Network: { shortName: 'ethereum', name: 'Ethereum' }\n }\n ]\n };\n }\n }\n\n async createPayment(data) {\n return await this.request('/api/payments/create', {\n method: 'POST',\n body: JSON.stringify(data)\n });\n }\n}\n\n// Simple MetaMask connector that actually works\nclass SimpleMetaMaskWallet {\n constructor() {\n this.account = null;\n this.chainId = null;\n }\n\n async connect() {\n // FORCE MetaMask connection by being very specific\n if (!window.ethereum) {\n throw new Error('MetaMask not installed. Please install MetaMask extension.');\n }\n\n // Check if we have multiple wallets installed\n if (window.ethereum.providers) {\n console.log('🔍 Multiple wallets detected:', window.ethereum.providers.length);\n \n // Find MetaMask specifically\n const metamaskProvider = window.ethereum.providers.find(provider => provider.isMetaMask);\n if (!metamaskProvider) {\n throw new Error('MetaMask not found among installed wallets');\n }\n \n console.log('🦊 Using MetaMask provider specifically');\n window.ethereum = metamaskProvider; // Force use MetaMask\n } else if (!window.ethereum.isMetaMask) {\n throw new Error('Please use MetaMask wallet');\n }\n\n try {\n console.log('🦊 Requesting MetaMask account access...');\n \n // Request account access with specific MetaMask method\n const accounts = await window.ethereum.request({\n method: 'eth_requestAccounts'\n });\n\n if (!accounts || accounts.length === 0) {\n throw new Error('No accounts found in MetaMask');\n }\n\n // Get current chain\n const chainId = await window.ethereum.request({\n method: 'eth_chainId'\n });\n\n this.account = accounts[0];\n this.chainId = chainId;\n\n console.log('✅ MetaMask connected successfully:');\n console.log(' Account:', this.account);\n console.log(' Chain ID:', this.chainId);\n \n // Verify this is the expected account\n if (this.account.toLowerCase() !== '0xa0419a048a1469b34a5245f08c0697ba956a56ab') {\n console.warn('⚠️ Connected to different account than expected');\n console.warn(' Expected: 0xa0419a048A1469B34a5245f08C0697Ba956a56Ab');\n console.warn(' Connected:', this.account);\n \n // Ask user to switch account\n throw new Error(`Please switch MetaMask to account 0xa041...56Ab. Currently connected to ${this.account.slice(0, 6)}...${this.account.slice(-4)}`);\n }\n\n return { account: this.account, chainId: this.chainId };\n\n } catch (error) {\n console.error('MetaMask connection failed:', error);\n throw new Error(error.message || 'Failed to connect to MetaMask');\n }\n }\n\n async sendTransaction(txParams) {\n if (!this.account) {\n throw new Error('Wallet not connected');\n }\n\n try {\n console.log('🦊 Sending MetaMask transaction:', txParams);\n \n // Make sure we're using MetaMask provider\n if (!window.ethereum.isMetaMask) {\n throw new Error('Not using MetaMask provider');\n }\n\n // Check if user has enough balance for the transaction\n if (txParams.data && txParams.data.includes('a9059cbb')) {\n // This is an ERC-20 transfer, check token balance\n console.log('🔍 Checking USDT balance...');\n \n try {\n // Get USDT balance\n const balanceHex = await window.ethereum.request({\n method: 'eth_call',\n params: [{\n to: txParams.to, // USDT contract\n data: `0x70a08231000000000000000000000000${this.account.slice(2)}` // balanceOf(address)\n }, 'latest']\n });\n \n const balance = parseInt(balanceHex, 16);\n const balanceUSDT = balance / 1000000; // USDT has 6 decimals\n \n console.log('💰 USDT Balance:', balanceUSDT);\n \n // Extract amount from transaction data\n const amountHex = txParams.data.slice(-64);\n const transactionAmount = parseInt(amountHex, 16);\n const transactionAmountUSDT = transactionAmount / 1000000;\n \n console.log('💸 Transaction Amount:', transactionAmountUSDT);\n \n if (balance < transactionAmount) {\n throw new Error(`Insufficient USDT balance. You have ${balanceUSDT} USDT but need ${transactionAmountUSDT} USDT`);\n }\n } catch (balanceError) {\n console.warn('Could not check balance:', balanceError);\n // Continue with transaction anyway\n }\n }\n\n // Check ETH balance for gas\n try {\n const ethBalanceHex = await window.ethereum.request({\n method: 'eth_getBalance',\n params: [this.account, 'latest']\n });\n \n const ethBalance = parseInt(ethBalanceHex, 16) / Math.pow(10, 18);\n console.log('⛽ ETH Balance for gas:', ethBalance);\n \n if (ethBalance < 0.001) {\n throw new Error(`Insufficient ETH for gas fees. You have ${ethBalance.toFixed(4)} ETH but need at least 0.001 ETH`);\n }\n } catch (gasError) {\n console.warn('Could not check ETH balance:', gasError);\n }\n\n // Prepare transaction with proper gas estimation\n const fullTxParams = {\n ...txParams,\n from: this.account\n };\n\n // Try to estimate gas\n try {\n const gasEstimate = await window.ethereum.request({\n method: 'eth_estimateGas',\n params: [fullTxParams]\n });\n \n // Add 20% buffer to gas estimate\n const gasLimit = Math.floor(parseInt(gasEstimate, 16) * 1.2);\n fullTxParams.gas = `0x${gasLimit.toString(16)}`;\n \n console.log('⛽ Gas estimate:', parseInt(gasEstimate, 16));\n console.log('⛽ Gas limit (with buffer):', gasLimit);\n \n } catch (gasError) {\n console.warn('Gas estimation failed:', gasError);\n // Set a reasonable default gas limit for USDT transfers\n fullTxParams.gas = '0x15F90'; // 90,000 gas\n }\n\n console.log('📤 Final transaction params:', fullTxParams);\n\n const txHash = await window.ethereum.request({\n method: 'eth_sendTransaction',\n params: [fullTxParams]\n });\n\n console.log('✅ Transaction sent successfully:', txHash);\n return txHash;\n\n } catch (error) {\n console.error('Transaction failed:', error);\n \n if (error.code === 4001) {\n throw new Error('Transaction cancelled by user');\n } else if (error.message.includes('insufficient funds')) {\n throw new Error('Insufficient funds in wallet');\n } else if (error.message.includes('gas')) {\n throw new Error('Gas estimation failed. You may not have enough ETH for gas fees.');\n } else if (error.message.includes('invalid opcode')) {\n throw new Error('Transaction failed - invalid operation. This usually means insufficient token balance or contract interaction failed.');\n } else {\n throw new Error(error.message || 'Transaction failed');\n }\n }\n }\n\n isConnected() {\n return !!this.account;\n }\n}\n\n// Main Simple Payment Component\nconst SimpleCoinleyPayment = ({ \n apiKey, \n apiSecret, \n apiUrl, \n config,\n onSuccess, \n onError, \n onClose,\n isOpen,\n theme = 'light'\n}) => {\n const [currentStep, setCurrentStep] = useState('method');\n const [networks, setNetworks] = useState([]);\n const [tokens, setTokens] = useState([]);\n const [selectedNetwork, setSelectedNetwork] = useState(null);\n const [selectedToken, setSelectedToken] = useState(null);\n const [paymentMethod, setPaymentMethod] = useState(null);\n const [paymentData, setPaymentData] = useState(null);\n const [loading, setLoading] = useState(false);\n const [error, setError] = useState('');\n const [wallet, setWallet] = useState(new SimpleMetaMaskWallet());\n const [walletConnected, setWalletConnected] = useState(false);\n const [processing, setProcessing] = useState(false);\n\n const api = useRef(new SimplePaymentAPI(apiUrl, apiKey, apiSecret));\n\n // Load networks and tokens when modal opens\n useEffect(() => {\n if (isOpen) {\n loadData();\n resetState();\n }\n }, [isOpen]);\n\n const resetState = () => {\n setCurrentStep('method');\n setSelectedNetwork(null);\n setSelectedToken(null);\n setPaymentMethod(null);\n setPaymentData(null);\n setError('');\n setWalletConnected(false);\n setProcessing(false);\n setWallet(new SimpleMetaMaskWallet());\n };\n\n const loadData = async () => {\n try {\n setLoading(true);\n setError('');\n \n console.log('🔄 Loading networks and tokens...');\n const [networksRes, tokensRes] = await Promise.all([\n api.current.getNetworks(),\n api.current.getTokens()\n ]);\n \n setNetworks(networksRes.networks || []);\n setTokens(tokensRes.stablecoins || []);\n \n console.log('✅ Loaded networks:', networksRes.networks?.length);\n console.log('✅ Loaded tokens:', tokensRes.stablecoins?.length);\n \n } catch (err) {\n console.error('Failed to load data:', err);\n setError('Failed to load payment options. Using fallback data.');\n } finally {\n setLoading(false);\n }\n };\n\n // Connect wallet\n const connectWallet = async () => {\n try {\n setLoading(true);\n setError('');\n \n const connection = await wallet.connect();\n setWalletConnected(true);\n \n console.log('✅ Wallet connected successfully:', connection.account);\n \n } catch (err) {\n console.error('Wallet connection failed:', err);\n setError(err.message);\n } finally {\n setLoading(false);\n }\n };\n\n // Create payment\n const createPayment = async () => {\n try {\n setLoading(true);\n setError('');\n \n const paymentPayload = {\n amount: config.amount,\n currency: selectedToken.symbol,\n network: selectedNetwork.shortName,\n customerEmail: config.customerEmail,\n callbackUrl: config.callbackUrl,\n metadata: {\n ...config.metadata,\n merchantWalletAddresses: config.merchantWalletAddresses,\n paymentMethod,\n selectedNetwork: selectedNetwork.shortName,\n selectedToken: selectedToken.symbol\n }\n };\n\n console.log('🔄 Creating payment:', paymentPayload);\n const payment = await api.current.createPayment(paymentPayload);\n setPaymentData(payment.payment);\n \n console.log('✅ Payment created:', payment.payment.id);\n \n if (paymentMethod === 'wallet') {\n setCurrentStep('wallet');\n } else {\n setCurrentStep('qr');\n }\n \n } catch (err) {\n console.error('Payment creation failed:', err);\n setError(err.message);\n } finally {\n setLoading(false);\n }\n };\n\n // Send transaction\n const sendTransaction = async () => {\n try {\n setProcessing(true);\n setError('');\n \n const recipientAddress = paymentData.metadata?.recipientWallet || \n config.merchantWalletAddresses?.[selectedNetwork.shortName];\n\n if (!recipientAddress) {\n throw new Error('Merchant wallet address not found');\n }\n\n console.log('🔄 Preparing transaction to:', recipientAddress);\n\n let txParams;\n\n if (selectedToken.contractAddress) {\n // ERC-20 transaction\n const decimals = selectedToken.decimals || 6;\n const amount = Math.floor(paymentData.totalAmount * Math.pow(10, decimals));\n \n const methodId = '0xa9059cbb'; // transfer(address,uint256)\n const recipientPadded = recipientAddress.slice(2).toLowerCase().padStart(64, '0');\n const amountPadded = amount.toString(16).padStart(64, '0');\n const data = `${methodId}${recipientPadded}${amountPadded}`;\n\n txParams = {\n to: selectedToken.contractAddress,\n data: data,\n value: '0x0'\n };\n \n console.log('🔄 ERC-20 Transaction:', {\n token: selectedToken.symbol,\n amount: paymentData.totalAmount,\n amountWithDecimals: amount,\n to: selectedToken.contractAddress,\n recipient: recipientAddress\n });\n \n } else {\n // Native transaction\n const value = Math.floor(paymentData.totalAmount * Math.pow(10, 18));\n txParams = {\n to: recipientAddress,\n value: `0x${value.toString(16)}`\n };\n \n console.log('🔄 Native Transaction:', {\n amount: paymentData.totalAmount,\n to: recipientAddress\n });\n }\n\n const txHash = await wallet.sendTransaction(txParams);\n \n console.log('✅ Transaction successful:', txHash);\n setCurrentStep('success');\n \n // Call success callback\n onSuccess?.(paymentData.id, txHash, {\n network: selectedNetwork.name,\n token: selectedToken.symbol,\n amount: paymentData.totalAmount,\n method: paymentMethod\n });\n\n } catch (err) {\n console.error('Transaction failed:', err);\n setError(err.message);\n } finally {\n setProcessing(false);\n }\n };\n\n if (!isOpen) return null;\n\n const isDark = theme === 'dark';\n\n return (\n <div className=\"fixed inset-0 bg-black bg-opacity-50 flex items-center justify-center z-50\">\n <div className={`rounded-lg shadow-xl max-w-md w-full mx-4 ${isDark ? 'bg-gray-900 text-white' : 'bg-white text-gray-900'}`}>\n \n {/* Header */}\n <div className={`p-4 border-b flex justify-between items-center ${isDark ? 'border-gray-700' : 'border-gray-200'}`}>\n <div className=\"text-center flex-1\">\n <h2 className=\"text-lg font-semibold\">Pay with Crypto</h2>\n {config.amount && (\n <p className=\"text-2xl font-bold text-purple-600\">${config.amount.toFixed(2)}</p>\n )}\n </div>\n <button \n onClick={onClose} \n className={`ml-4 text-gray-500 hover:text-gray-700 ${isDark ? 'hover:text-gray-300' : ''}`}\n >\n ✕\n </button>\n </div>\n\n {/* Content */}\n <div className=\"p-4 min-h-[400px]\">\n {error && (\n <div className=\"mb-4 p-3 bg-red-100 text-red-700 rounded border border-red-200\">\n {error}\n <button \n onClick={() => setError('')}\n className=\"ml-2 text-red-500 hover:text-red-700\"\n >\n ✕\n </button>\n </div>\n )}\n\n {/* Step 1: Select Method */}\n {currentStep === 'method' && (\n <div className=\"\">\n <div className=\"space-y-1\">\n <button\n onClick={() => { setPaymentMethod('wallet'); setCurrentStep('network'); }}\n className={`w-full p-4 border-2 rounded-lg hover:border-purple-500 text-left flex items-center space-x-3 transition-colors ${isDark ? 'border-gray-600 hover:bg-gray-800' : 'border-gray-200 hover:bg-gray-50'}`}\n >\n <span className=\"text-2xl\">🦊</span>\n <div>\n <div className=\"font-medium\">MetaMask Wallet</div>\n <div className={`text-sm ${isDark ? 'text-gray-400' : 'text-gray-500'}`}>Connect and pay instantly</div>\n </div>\n </button>\n <button\n onClick={() => { setPaymentMethod('qr'); setCurrentStep('network'); }}\n className={`w-full p-4 border-2 rounded-lg hover:border-purple-500 text-left flex items-center space-x-3 transition-colors ${isDark ? 'border-gray-600 hover:bg-gray-800' : 'border-gray-200 hover:bg-gray-50'}`}\n >\n <span className=\"text-2xl\">📱</span>\n <div>\n <div className=\"font-medium\">QR Code</div>\n <div className={`text-sm ${isDark ? 'text-gray-400' : 'text-gray-500'}`}>Scan with mobile wallet</div>\n </div>\n </button>\n </div>\n </div>\n )}\n\n {/* Step 2: Select Network */}\n {currentStep === 'network' && (\n <div className=\"space-y-4\">\n <div className=\"flex items-center space-x-2\">\n <button \n onClick={() => setCurrentStep('method')} \n className={`${isDark ? 'text-gray-400 hover:text-gray-200' : 'text-gray-500 hover:text-gray-700'}`}\n >\n ←\n </button>\n <h3 className=\"font-medium\">Select Network</h3>\n </div>\n <div className=\"space-y-2\">\n {networks.map((network) => (\n <button\n key={network.id}\n onClick={() => { setSelectedNetwork(network); setCurrentStep('token'); }}\n className={`w-full p-3 border rounded-lg hover:border-purple-500 text-left transition-colors ${isDark ? 'border-gray-600 hover:bg-gray-800' : 'border-gray-200 hover:bg-gray-50'}`}\n >\n <div className=\"font-medium\">{network.name}</div>\n <div className={`text-sm ${isDark ? 'text-gray-400' : 'text-gray-500'}`}>{network.shortName.toUpperCase()}</div>\n </button>\n ))}\n </div>\n </div>\n )}\n\n {/* Step 3: Select Token */}\n {currentStep === 'token' && (\n <div className=\"space-y-4\">\n <div className=\"flex items-center space-x-2\">\n <button \n onClick={() => setCurrentStep('network')} \n className={`${isDark ? 'text-gray-400 hover:text-gray-200' : 'text-gray-500 hover:text-gray-700'}`}\n >\n ←\n </button>\n <h3 className=\"font-medium\">Select Token on {selectedNetwork?.name}</h3>\n </div>\n <div className=\"space-y-2\">\n {tokens\n .filter(token => token.Network?.shortName === selectedNetwork?.shortName)\n .map((token) => (\n <button\n key={token.id}\n onClick={() => { setSelectedToken(token); createPayment(); }}\n disabled={loading}\n className={`w-full p-3 border rounded-lg hover:border-purple-500 text-left flex justify-between transition-colors disabled:opacity-50 ${isDark ? 'border-gray-600 hover:bg-gray-800' : 'border-gray-200 hover:bg-gray-50'}`}\n >\n <div>\n <div className=\"font-medium\">{token.name}</div>\n <div className={`text-sm ${isDark ? 'text-gray-400' : 'text-gray-500'}`}>{token.symbol}</div>\n </div>\n {token.isStablecoin && (\n <span className=\"px-2 py-1 bg-green-100 text-green-600 text-xs rounded\">\n Stablecoin\n </span>\n )}\n </button>\n ))\n }\n </div>\n </div>\n )}\n\n {/* Step 4: Wallet Connect & Pay */}\n {currentStep === 'wallet' && (\n <div className=\"space-y-4\">\n <h3 className=\"font-medium text-center\">Connect & Pay</h3>\n \n {!walletConnected ? (\n <div className=\"text-center space-y-4\">\n <div className=\"w-16 h-16 bg-purple-100 rounded-full flex items-center justify-center mx-auto\">\n <span className=\"text-2xl\">🦊</span>\n </div>\n <p className={`${isDark ? 'text-gray-300' : 'text-gray-600'}`}>Connect MetaMask to continue</p>\n <button\n onClick={connectWallet}\n disabled={loading}\n className=\"w-full bg-purple-600 text-white py-3 px-4 rounded-lg hover:bg-purple-700 disabled:opacity-50 font-medium\"\n >\n {loading ? 'Connecting...' : 'Connect MetaMask'}\n </button>\n </div>\n ) : (\n <div className=\"space-y-4\">\n <div className=\"p-3 bg-green-50 rounded-lg border border-green-200\">\n <p className=\"text-green-600 text-sm font-medium\">✅ Wallet Connected</p>\n <p className=\"font-mono text-xs text-green-700 mt-1\">{wallet.account?.slice(0, 6)}...{wallet.account?.slice(-4)}</p>\n </div>\n \n <div className={`p-4 rounded-lg space-y-2 ${isDark ? 'bg-gray-800' : 'bg-gray-50'}`}>\n <div className=\"flex justify-between text-sm\">\n <span>Amount:</span>\n <span className=\"font-medium\">{paymentData?.totalAmount} {selectedToken?.symbol}</span>\n </div>\n <div className=\"flex justify-between text-sm\">\n <span>Network:</span>\n <span className=\"font-medium\">{selectedNetwork?.name}</span>\n </div>\n <div className=\"flex justify-between text-sm\">\n <span>Token:</span>\n <span className=\"font-medium\">{selectedToken?.name}</span>\n </div>\n </div>\n\n <button\n onClick={sendTransaction}\n disabled={processing}\n className=\"w-full bg-green-600 text-white py-3 px-4 rounded-lg hover:bg-green-700 disabled:opacity-50 font-medium flex items-center justify-center space-x-2\"\n >\n {processing ? (\n <>\n <div className=\"animate-spin rounded-full h-4 w-4 border-b-2 border-white\"></div>\n <span>Sending Transaction...</span>\n </>\n ) : (\n <span>Send {paymentData?.totalAmount} {selectedToken?.symbol}</span>\n )}\n </button>\n </div>\n )}\n </div>\n )}\n\n {/* QR Code Step */}\n {currentStep === 'qr' && (\n <div className=\"text-center space-y-4\">\n <h3 className=\"font-medium\">Scan QR Code</h3>\n <div className={`p-8 rounded-lg ${isDark ? 'bg-gray-800' : 'bg-gray-100'}`}>\n <p className={`${isDark ? 'text-gray-400' : 'text-gray-500'}`}>QR Code will appear here</p>\n <p className=\"text-xs mt-2\">Send {paymentData?.totalAmount} {selectedToken?.symbol}</p>\n <p className=\"text-xs\">to merchant wallet</p>\n </div>\n <p className={`text-xs ${isDark ? 'text-gray-400' : 'text-gray-500'}`}>\n Waiting for payment confirmation...\n </p>\n </div>\n )}\n\n {/* Success */}\n {currentStep === 'success' && (\n <div className=\"text-center space-y-4\">\n <div className=\"w-16 h-16 bg-green-100 rounded-full flex items-center justify-center mx-auto\">\n <span className=\"text-2xl\">✅</span>\n </div>\n <h3 className=\"font-medium text-green-600\">Payment Successful!</h3>\n <p className={`text-sm ${isDark ? 'text-gray-300' : 'text-gray-600'}`}>\n Your transaction has been sent successfully\n </p>\n <button\n onClick={onClose}\n className=\"w-full bg-purple-600 text-white py-3 px-4 rounded-lg hover:bg-purple-700 font-medium\"\n >\n Close\n </button>\n </div>\n )}\n\n {/* Loading Spinner */}\n {loading && currentStep !== 'wallet' && (\n <div className=\"flex items-center justify-center py-8\">\n <div className=\"animate-spin rounded-full h-8 w-8 border-b-2 border-purple-600\"></div>\n </div>\n )}\n </div>\n </div>\n </div>\n );\n};\n\nexport default SimpleCoinleyPayment;","'use strict';\n\nvar m = require('react-dom');\nif (process.env.NODE_ENV === 'production') {\n exports.createRoot = m.createRoot;\n exports.hydrateRoot = m.hydrateRoot;\n} else {\n var i = m.__SECRET_INTERNALS_DO_NOT_USE_OR_YOU_WILL_BE_FIRED;\n exports.createRoot = function(c, o) {\n i.usingClientEntryPoint = true;\n try {\n return m.createRoot(c, o);\n } finally {\n i.usingClientEntryPoint = false;\n }\n };\n exports.hydrateRoot = function(c, h, o) {\n i.usingClientEntryPoint = true;\n try {\n return m.hydrateRoot(c, h, o);\n } finally {\n i.usingClientEntryPoint = false;\n }\n };\n}\n","// src/vanilla/index.js\nimport React from 'react';\nimport { createRoot } from 'react-dom/client';\n\n// Use default import instead of named import\nimport EnhancedSimpleCoinleyPayment from '../components/EnhancedSimpleCoinleyPayment';\nimport '../styles/index.css';\n\nclass CoinleyVanilla {\n constructor(config = {}) {\n this.config = { ...config };\n this.isOpen = false;\n this.root = null;\n this.container = null;\n this.callbacks = {};\n }\n\n open(paymentConfig, callbacks = {}) {\n if (this.isOpen) return;\n \n this.callbacks = callbacks;\n this.container = document.createElement('div');\n this.container.id = 'coinley-payment-container';\n this.container.style.cssText = 'position:fixed;top:0;left:0;right:0;bottom:0;z-index:999999;';\n document.body.appendChild(this.container);\n\n this.root = createRoot(this.container);\n this.isOpen = true;\n\n this.root.render(\n React.createElement(EnhancedSimpleCoinleyPayment, {\n ...this.config,\n isOpen: true,\n config: paymentConfig,\n onSuccess: this.handleSuccess.bind(this),\n onError: this.handleError.bind(this),\n onClose: this.handleClose.bind(this)\n })\n );\n }\n\n close() {\n if (!this.isOpen) return;\n this.isOpen = false;\n if (this.root) { this.root.unmount(); this.root = null; }\n if (this.container) { this.container.remove(); this.container = null; }\n }\n\n handleSuccess(paymentId, txHash, details) {\n if (this.callbacks.onSuccess) this.callbacks.onSuccess(paymentId, txHash, details);\n }\n\n handleError(error) {\n if (this.callbacks.onError) this.callbacks.onError(error);\n }\n\n handleClose() {\n this.close();\n if (this.callbacks.onClose) this.callbacks.onClose();\n }\n}\n\nexport default CoinleyVanilla;\nif (typeof window !== 'undefined') window.CoinleyVanilla = CoinleyVanilla;","// // src/index.js \n\n// // Original exports (keep these for backward compatibility)\n// export {\n// CoinleyProvider,\n// CoinleyCheckout,\n// ThemeProvider,\n// useCoinley\n// } from './CoinleyProvider';\n\n// export { PaymentAPI } from './PaymentAPI';\n// export { default as CoinleyPayment } from './CoinleyPayment';\n\n// // Keep the original simple component (working version)\n// export { default as SimpleCoinleyPayment } from './components/SimpleCoinleyPayment';\n\n// // NEW: Enhanced component with modern design from coinley-checkout\n// export { default as EnhancedSimpleCoinleyPayment } from './components/EnhancedSimpleCoinleyPayment';\n\n// // NEW: Simple provider for both components\n// export const SimpleCoinleyProvider = ({ children, ...props }) => children;\n\n// // Import styles\n// import './styles/index.css';\n\n// // Version\n// export const VERSION = '0.0.2'; // Updated version\n\n// // Utils (keep your existing utils)\n// export const utils = {\n// formatAmount: (amount, decimals = 2) => amount.toFixed(decimals),\n \n// truncateAddress: (address, startChars = 6, endChars = 4) => {\n// if (!address) return '';\n// if (address.length <= startChars + endChars) return address;\n// return `${address.slice(0, startChars)}...${address.slice(-endChars)}`;\n// },\n \n// isValidAddress: (address, network) => {\n// if (!address) return false;\n \n// switch (network.toLowerCase()) {\n// case 'ethereum':\n// case 'bsc':\n// case 'polygon':\n// return /^0x[a-fA-F0-9]{40}$/.test(address);\n// case 'tron':\n// return /^T[a-zA-Z0-9]{33}$/.test(address);\n// case 'solana':\n// return /^[1-9A-HJ-NP-Za-km-z]{32,44}$/.test(address);\n// default:\n// return address.length > 0;\n// }\n// },\n \n// copyToClipboard: async (text) => {\n// try {\n// await navigator.clipboard.writeText(text);\n// return true;\n// } catch {\n// return false;\n// }\n// }\n// };\n\n// // Error classes (keep your existing error handling)\n// export class CoinleyError extends Error {\n// constructor(message, code) {\n// super(message);\n// this.name = 'CoinleyError';\n// this.code = code;\n// }\n// }\n\n// // Default config\n// export const DEFAULT_CONFIG = {\n// theme: 'light',\n// debug: false,\n// testMode: false,\n// autoOpen: false\n// };\n\n// // NEW: Quick usage examples for both components\n// export const USAGE_EXAMPLES = {\n// // Original simple component (still works)\n// simple: `\n// import { SimpleCoinleyPayment } from 'coinley-test';\n\n// <SimpleCoinleyPayment\n// apiKey=\"your-api-key\"\n// apiSecret=\"your-api-secret\"\n// apiUrl=\"https://your-api-url.com\"\n// isOpen={isOpen}\n// config={{\n// amount: 100,\n// customerEmail: \"customer@example.com\",\n// merchantWalletAddresses: {\n// ethereum: \"0x...\",\n// bsc: \"0x...\"\n// }\n// }}\n// onSuccess={(paymentId, txHash, details) => console.log('Success!')}\n// onError={(error) => console.error('Error:', error)}\n// onClose={() => setIsOpen(false)}\n// />\n// `,\n \n// // Enhanced component with modern design\n// enhanced: `\n// import { EnhancedSimpleCoinleyPayment } from 'coinley-test';\n\n// <EnhancedSimpleCoinleyPayment\n// apiKey=\"your-api-key\"\n// apiSecret=\"your-api-secret\"\n// apiUrl=\"https://your-api-url.com\"\n// isOpen={isOpen}\n// config={{\n// amount: 100,\n// customerEmail: \"customer@example.com\",\n// merchantName: \"Your Store\",\n// merchantWalletAddresses: {\n// ethereum: \"0x...\",\n// bsc: \"0x...\"\n// }\n// }}\n// onSuccess={(paymentId, txHash, details) => console.log('Success!')}\n// onError={(error) => console.error('Error:', error)}\n// onClose={() => setIsOpen(false)}\n// theme=\"light\" // or \"dark\"\n// />\n// `\n// };\n\n\n\n\n\n\n// src/index.js - Updated to include vanilla exports\n\n// Original React exports (keep these for backward compatibility)\nexport {\n CoinleyProvider,\n CoinleyCheckout,\n ThemeProvider,\n useCoinley\n} from './CoinleyProvider';\n\nexport { PaymentAPI } from './PaymentAPI';\nexport { default as CoinleyPayment } from './CoinleyPayment';\n\n// Keep the original simple component (working version)\nexport { default as SimpleCoinleyPayment } from './components/SimpleCoinleyPayment';\n\n// Enhanced component with modern design\nexport { default as EnhancedSimpleCoinleyPayment } from './components/EnhancedSimpleCoinleyPayment';\n\n// Simple provider for both components\nexport const SimpleCoinleyProvider = ({ children, ...props }) => children;\n\n// NEW: Vanilla JavaScript wrapper (for those who want to import it in React too)\nexport { default as CoinleyVanilla } from './vanilla/index';\n\n// Import styles\nimport './styles/index.css';\n\n// Version\nexport const VERSION = '0.0.26';\n\n// Utils (keep your existing utils)\nexport const utils = {\n formatAmount: (amount, decimals = 2) => amount.toFixed(decimals),\n \n truncateAddress: (address, startChars = 6, endChars = 4) => {\n if (!address) return '';\n if (address.length <= startChars + endChars) return address;\n return `${address.slice(0, startChars)}...${address.slice(-endChars)}`;\n },\n \n isValidAddress: (address, network) => {\n if (!address) return false;\n \n switch (network.toLowerCase()) {\n case 'ethereum':\n case 'bsc':\n case 'polygon':\n return /^0x[a-fA-F0-9]{40}$/.test(address);\n case 'tron':\n return /^T[a-zA-Z0-9]{33}$/.test(address);\n case 'solana':\n return /^[1-9A-HJ-NP-Za-km-z]{32,44}$/.test(address);\n default:\n return address.length > 0;\n }\n },\n \n copyToClipboard: async (text) => {\n try {\n await navigator.clipboard.writeText(text);\n return true;\n } catch {\n return false;\n }\n }\n};\n\n// Error classes\nexport class CoinleyError extends Error {\n constructor(message, code) {\n super(message);\n this.name = 'CoinleyError';\n this.code = code;\n }\n}\n\n// Default config\nexport const DEFAULT_CONFIG = {\n theme: 'light',\n debug: false,\n testMode: false,\n autoOpen: false\n};\n\n// Usage examples for documentation\nexport const USAGE_EXAMPLES = {\n // React usage (unchanged)\n react: `\nimport { EnhancedSimpleCoinleyPayment } from 'coinley-test';\n\n<EnhancedSimpleCoinleyPayment\n apiKey=\"your-api-key\"\n apiSecret=\"your-api-secret\"\n apiUrl=\"https://your-api-url.com\"\n isOpen={isOpen}\n config={{\n amount: 100,\n customerEmail: \"customer@example.com\",\n merchantName: \"Your Store\",\n merchantWalletAddresses: {\n ethereum: \"0x...\",\n bsc: \"0x...\"\n }\n }}\n onSuccess={(paymentId, txHash, details) => console.log('Success!')}\n onError={(error) => console.error('Error:', error)}\n onClose={() => setIsOpen(false)}\n theme=\"light\"\n/>\n `,\n \n // NEW: Vanilla JavaScript usage\n vanilla: `\n<!-- Include via CDN -->\n<script src=\"https://unpkg.com/coinley-test@latest/vanilla\"></script>\n<link rel=\"stylesheet\" href=\"https://unpkg.com/coinley-test@latest/vanilla/style.css\">\n\n<script>\n// Initialize\nconst coinley = new CoinleyVanilla({\n apiKey: \"your-api-key\",\n apiSecret: \"your-api-secret\",\n apiUrl: \"https://your-api-url.com\",\n theme: \"light\"\n});\n\n// Use in checkout\ncoinley.open({\n amount: 100,\n customerEmail: \"customer@example.com\",\n merchantName: \"Your Store\",\n merchantWalletAddresses: {\n ethereum: \"0x...\",\n bsc: \"0x...\"\n }\n}, {\n onSuccess: (paymentId, txHash, details) => console.log('Success!'),\n onError: (error) => console.error('Error:', error),\n onClose: () => console.log('Closed')\n});\n</script>\n `\n};"],"names":["require$$0","m","jsxRuntimeModule","version","_a","BaseError","size","encoder","toBytes","hexToBytes","index","size_","hexes","bytesToHex","concatBytes","n","l","pad","yParityOrV","recoveryBit","value","cause","formatted","formatAuthorizationList","getAction","_b","block","request","rpcStateOverride","estimate","isLE","_32n","buffer","sha256","sha256n","noble_sha256","getBlock","getBlock_","getChainId","getChainId_","chainId","sendTransaction","e","wait","args","split","shouldRetry","uid","body","response","serializeTransaction","blobs","commitments","proofs","v","f","_BaseError_walk","key","uid_","connector","chain","connections","viem_sendTransaction","window","connect","disconnect","provider","error","createStore","EventEmitter","deserialize","deserialize_","serialize","serialize_","createMipd","client","parameters","x","serializeTransaction_","err","jsxs","Fragment","jsx","SimplePaymentAPI","_c","token","CoinleyPayment"],"mappings":"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","x_google_ignoreList":[0,1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90,91,92,93,94,95,96,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122,123,124,125,126,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,154]}
|