@agglayer/sdk 1.0.0-beta.14 → 1.0.0-beta.16
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.d.mts +49 -19
- package/dist/index.d.ts +49 -19
- package/dist/index.js +105 -38
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +105 -38
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.mjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/native/chains/registry.ts","../src/native/utils/validation.ts","../src/native/base/contract.ts","../src/native/tokens/build.ts","../src/native/tokens/abi/erc20.ts","../src/native/bridge/build.ts","../src/native/bridge/abi/bridge.ts","../src/native/bridge/message.ts","../src/native/bridge/util.ts","../src/native/bridge/bridge.ts","../src/native/services/abi.ts","../src/native/tokens/erc20.ts","../src/native/index.ts","../src/constants.ts","../src/types/config.ts","../src/core/utils/httpClient.ts","../src/core/services/arcApi.ts","../src/core/index.ts","../src/index.ts"],"sourcesContent":["/**\n * Chain Registry\n *\n * Centralized chain configuration management\n */\n\nimport { type Chain } from 'viem';\n\nimport type { ChainConfig, CustomChainConfig } from '@/types';\n\nexport class ChainRegistry {\n private static instance: ChainRegistry;\n private chains: Map<number, ChainConfig> = new Map();\n private viemChains: Map<number, Chain> = new Map();\n\n private constructor() {\n this.initializeDefaultChains();\n }\n\n static getInstance(): ChainRegistry {\n if (!ChainRegistry.instance) {\n ChainRegistry.instance = new ChainRegistry();\n }\n return ChainRegistry.instance;\n }\n\n private initializeDefaultChains() {\n // Ethereum Sepolia Testnet\n this.registerChain({\n chainId: 11155111,\n networkId: 0,\n name: 'Ethereum Sepolia',\n rpcUrl: 'https://rpc.sepolia.org',\n nativeCurrency: { name: 'Sepolia Ether', symbol: 'ETH', decimals: 18 },\n blockExplorer: {\n name: 'Sepolia Etherscan',\n url: 'https://sepolia.etherscan.io',\n },\n bridgeAddress: '0x528e26b25a34a4A5d0dbDa1d57D318153d2ED582',\n proofApiUrl:\n 'https://api-gateway.polygon.technology/api/v3/proof/testnet/',\n isTestnet: true,\n });\n\n // Polygon Cardona Testnet\n this.registerChain({\n chainId: 2442,\n networkId: 1,\n name: 'Polygon Cardona',\n rpcUrl: 'https://rpc.cardona.zkevm-rpc.com',\n nativeCurrency: { name: 'Ethereum', symbol: 'ETH', decimals: 18 },\n blockExplorer: {\n name: 'Cardona PolygonScan',\n url: 'https://cardona-zkevm.polygonscan.com',\n },\n bridgeAddress: '0x528e26b25a34a4A5d0dbDa1d57D318153d2ED582',\n proofApiUrl:\n 'https://api-gateway.polygon.technology/api/v3/proof/testnet/',\n isTestnet: true,\n });\n }\n\n /**\n * Register a new chain\n */\n registerChain(config: ChainConfig): void {\n this.chains.set(config.chainId, config);\n\n // Create viem chain object\n const viemChain: Chain = {\n id: config.chainId,\n name: config.name,\n nativeCurrency: config.nativeCurrency,\n rpcUrls: {\n default: { http: [config.rpcUrl] },\n },\n };\n\n this.viemChains.set(config.chainId, viemChain);\n }\n\n /**\n * Get chain configuration by ID\n */\n getChain(chainId: number): ChainConfig {\n const chain = this.chains.get(chainId);\n if (!chain) {\n throw new Error(\n `Chain ${chainId} not found. Available chains: ${Array.from(this.chains.keys()).join(', ')}`\n );\n }\n return chain;\n }\n\n /**\n * Get chain configuration by network ID\n */\n getChainByNetworkId(networkId: number): ChainConfig {\n const chain = Array.from(this.chains.values()).find(\n (chain) => chain.networkId === networkId\n );\n if (!chain) {\n throw new Error(\n `Chain with network ID ${networkId} not found. Available network IDs: ${Array.from(\n this.chains.values()\n )\n .map((chain) => chain.networkId)\n .filter(Boolean)\n .join(', ')}`\n );\n }\n return chain;\n }\n\n /**\n * Get viem chain object by ID\n */\n getViemChain(chainId: number): Chain {\n const chain = this.viemChains.get(chainId);\n if (!chain) {\n throw new Error(\n `Chain ${chainId} not found. Available chains: ${Array.from(this.viemChains.keys()).join(', ')}`\n );\n }\n return chain;\n }\n\n /**\n * Get all registered chain IDs\n */\n getSupportedChainIds(): number[] {\n return Array.from(this.chains.keys());\n }\n\n /**\n * Get all registered chains\n */\n getAllChains(): ChainConfig[] {\n return Array.from(this.chains.values());\n }\n\n /**\n * Check if chain is supported\n */\n isChainSupported(chainId: number): boolean {\n return this.chains.has(chainId);\n }\n\n /**\n * Check if chain is supported by network ID\n */\n isChainSupportedByNetworkId(networkId: number): boolean {\n return Array.from(this.chains.values()).some(\n (chain) => chain.networkId === networkId\n );\n }\n\n /**\n * Get chains by type\n */\n getChainsByType(type: 'mainnet' | 'testnet' | 'local'): ChainConfig[] {\n return Array.from(this.chains.values()).filter((chain) => {\n if (type === 'mainnet') {\n return (\n !(chain as CustomChainConfig).isTestnet &&\n !(chain as CustomChainConfig).isLocal\n );\n }\n if (type === 'testnet') {\n return (chain as CustomChainConfig).isTestnet;\n }\n if (type === 'local') {\n return (chain as CustomChainConfig).isLocal;\n }\n return false;\n });\n }\n\n /**\n * Add custom RPC URL for existing chain\n */\n addCustomRpcUrl(chainId: number, rpcUrl: string): void {\n const chain = this.getChain(chainId);\n const customChain: ChainConfig = {\n ...chain,\n rpcUrl,\n };\n\n this.registerChain(customChain);\n }\n}\n\n// Export singleton instance\nexport const chainRegistry = ChainRegistry.getInstance();\n","/**\n * Validation Utilities\n *\n * Utility functions for validating inputs and addresses\n */\n\nexport class ValidationUtils {\n /**\n * Convert value to BigInt safely\n */\n private static toBigInt(value: string | number | bigint): bigint {\n return BigInt(value.toString());\n }\n\n /**\n * Validate Ethereum address format\n */\n static validateAddress(address: string, name: string = 'Address'): void {\n if (!address || !address.startsWith('0x') || address.length !== 42) {\n throw new Error(`${name} must be a valid 0x-prefixed address`);\n }\n }\n\n /**\n * Validate amount (must be positive)\n */\n static validateAmount(\n amount: string | number | bigint,\n name: string = 'Amount'\n ): void {\n const amountStr = amount.toString();\n if (!amountStr || amountStr === '0' || this.toBigInt(amount) <= 0n) {\n throw new Error(`${name} must be a positive value`);\n }\n }\n\n /**\n * Check if address is valid without throwing\n */\n static isValidAddress(address: string): boolean {\n return (\n Boolean(address) && address.startsWith('0x') && address.length === 42\n );\n }\n\n /**\n * Check if amount is valid without throwing\n */\n static isValidAmount(amount: string | number | bigint): boolean {\n try {\n const amountStr = amount.toString();\n return (\n Boolean(amountStr) && amountStr !== '0' && this.toBigInt(amount) > 0n\n );\n } catch {\n return false;\n }\n }\n\n /**\n * Validate chain ID\n */\n static validateChainId(chainId: number): void {\n if (!Number.isInteger(chainId) || chainId <= 0) {\n throw new Error('Chain ID must be a positive integer');\n }\n }\n\n /**\n * Validate RPC URL\n */\n static validateRpcUrl(rpcUrl: string): void {\n if (!rpcUrl || !rpcUrl.startsWith('http')) {\n throw new Error('RPC URL must be a valid HTTP/HTTPS URL');\n }\n }\n}\n","/**\n * Base Contract Implementation\n *\n * Shared functionality for contract interactions\n */\n\nimport {\n createPublicClient,\n http,\n type PublicClient,\n type Address,\n type Hex,\n} from 'viem';\nimport { chainRegistry } from '../chains/registry';\n\nimport type { BaseContractConfig } from '@/types';\n\nexport abstract class BaseContract {\n protected client: PublicClient;\n\n constructor(config: BaseContractConfig) {\n const chain = chainRegistry.getViemChain(config.chainId);\n this.client = createPublicClient({\n chain,\n transport: http(config.rpcUrl),\n });\n }\n\n /**\n * Get nonce for an address\n */\n protected async getNonce(address?: string): Promise<string | undefined> {\n if (!address) return undefined;\n const nonceValue = await this.client.getTransactionCount({\n address: address as Address,\n });\n return `0x${nonceValue.toString(16)}`;\n }\n\n /**\n * Estimate gas for transaction\n */\n protected async estimateGas(\n data: Hex,\n to: string,\n from?: string\n ): Promise<string> {\n const gasEstimate = await this.client.estimateGas({\n account: from as Address,\n to: to as Address,\n data,\n });\n return gasEstimate.toString();\n }\n}\n","import { encodeFunctionData, type Address, type Hex } from 'viem';\nimport { erc20Abi } from './abi/erc20';\nimport type { TransactionParams } from '@/types';\n\nexport interface BuildContext {\n tokenAddress: string;\n estimateGas: (data: Hex, from?: string) => Promise<string>;\n getNonce: (address?: string) => Promise<string | undefined>;\n}\n\nexport async function buildApprove(\n ctx: BuildContext,\n spender: Address,\n amount: bigint,\n from?: string\n): Promise<TransactionParams> {\n const data = encodeFunctionData({\n abi: erc20Abi,\n functionName: 'approve',\n args: [spender, amount],\n });\n\n const [nonce, gas] = await Promise.all([\n ctx.getNonce(from),\n ctx.estimateGas(data, from),\n ]);\n\n return {\n from,\n to: ctx.tokenAddress,\n data,\n gas,\n nonce,\n };\n}\n\nexport async function buildTransfer(\n ctx: BuildContext,\n to: Address,\n amount: bigint,\n from?: string\n): Promise<TransactionParams> {\n const data = encodeFunctionData({\n abi: erc20Abi,\n functionName: 'transfer',\n args: [to, amount],\n });\n\n const [nonce, gas] = await Promise.all([\n ctx.getNonce(from),\n ctx.estimateGas(data, from),\n ]);\n\n return {\n from,\n to: ctx.tokenAddress,\n data,\n gas,\n nonce,\n };\n}\n\nexport async function buildTransferFrom(\n ctx: BuildContext,\n fromAddress: Address,\n to: Address,\n amount: bigint,\n spender?: string\n): Promise<TransactionParams> {\n const data = encodeFunctionData({\n abi: erc20Abi,\n functionName: 'transferFrom',\n args: [fromAddress, to, amount],\n });\n\n const [nonce, gas] = await Promise.all([\n ctx.getNonce(spender),\n ctx.estimateGas(data, spender),\n ]);\n\n return {\n from: spender,\n to: ctx.tokenAddress,\n data,\n gas,\n nonce,\n };\n}\n","/**\n * ERC20 Token ABI\n *\n * Comprehensive ERC20 ABI for all standard functions\n */\n\nexport const erc20Abi = [\n // Standard ERC20 functions\n {\n name: 'approve',\n type: 'function',\n stateMutability: 'nonpayable',\n inputs: [\n { name: 'spender', type: 'address' },\n { name: 'amount', type: 'uint256' },\n ],\n outputs: [{ name: '', type: 'bool' }],\n },\n {\n name: 'transfer',\n type: 'function',\n stateMutability: 'nonpayable',\n inputs: [\n { name: 'to', type: 'address' },\n { name: 'amount', type: 'uint256' },\n ],\n outputs: [{ name: '', type: 'bool' }],\n },\n {\n name: 'transferFrom',\n type: 'function',\n stateMutability: 'nonpayable',\n inputs: [\n { name: 'from', type: 'address' },\n { name: 'to', type: 'address' },\n { name: 'amount', type: 'uint256' },\n ],\n outputs: [{ name: '', type: 'bool' }],\n },\n {\n name: 'allowance',\n type: 'function',\n stateMutability: 'view',\n inputs: [\n { name: 'owner', type: 'address' },\n { name: 'spender', type: 'address' },\n ],\n outputs: [{ name: '', type: 'uint256' }],\n },\n {\n name: 'balanceOf',\n type: 'function',\n stateMutability: 'view',\n inputs: [{ name: 'account', type: 'address' }],\n outputs: [{ name: '', type: 'uint256' }],\n },\n // Additional ERC20 functions\n {\n name: 'name',\n type: 'function',\n stateMutability: 'view',\n inputs: [],\n outputs: [{ name: '', type: 'string' }],\n },\n {\n name: 'symbol',\n type: 'function',\n stateMutability: 'view',\n inputs: [],\n outputs: [{ name: '', type: 'string' }],\n },\n {\n name: 'decimals',\n type: 'function',\n stateMutability: 'view',\n inputs: [],\n outputs: [{ name: '', type: 'uint8' }],\n },\n {\n name: 'totalSupply',\n type: 'function',\n stateMutability: 'view',\n inputs: [],\n outputs: [{ name: '', type: 'uint256' }],\n },\n // Events\n {\n name: 'Transfer',\n type: 'event',\n inputs: [\n { name: 'from', type: 'address', indexed: true },\n { name: 'to', type: 'address', indexed: true },\n { name: 'value', type: 'uint256', indexed: false },\n ],\n },\n {\n name: 'Approval',\n type: 'event',\n inputs: [\n { name: 'owner', type: 'address', indexed: true },\n { name: 'spender', type: 'address', indexed: true },\n { name: 'value', type: 'uint256', indexed: false },\n ],\n },\n] as const;\n","/**\n * Bridge Build Functions\n *\n * Functions to build bridge transaction parameters\n */\n\nimport { encodeFunctionData, type Address, type Hex } from 'viem';\nimport { bridgeAbi } from './abi/bridge';\nimport type { TransactionParams } from '@/types';\n\nexport interface BuildContext {\n bridgeAddress: string;\n estimateGas: (data: Hex, to: string, from?: string) => Promise<string>;\n getNonce: (address?: string) => Promise<string | undefined>;\n}\n\nexport async function buildBridgeAsset(\n ctx: BuildContext,\n destinationNetwork: number,\n destinationAddress: Address,\n amount: bigint,\n token: Address,\n forceUpdateGlobalExitRoot: boolean,\n permitData: string = '0x',\n from?: string\n): Promise<TransactionParams> {\n const data = encodeFunctionData({\n abi: bridgeAbi,\n functionName: 'bridgeAsset',\n args: [\n destinationNetwork,\n destinationAddress,\n amount,\n token,\n forceUpdateGlobalExitRoot,\n permitData as Hex,\n ],\n });\n\n const [nonce, gas] = await Promise.all([\n ctx.getNonce(from),\n ctx.estimateGas(data, ctx.bridgeAddress, from),\n ]);\n\n return {\n from,\n to: ctx.bridgeAddress,\n data,\n gas,\n nonce,\n };\n}\n\nexport async function buildClaimAsset(\n ctx: BuildContext,\n smtProofLocalExitRoot: readonly `0x${string}`[], // Array of 32 bytes32 values\n smtProofRollupExitRoot: readonly `0x${string}`[], // Array of 32 bytes32 values\n globalIndex: bigint,\n mainnetExitRoot: `0x${string}`, // bytes32\n rollupExitRoot: `0x${string}`, // bytes32\n originNetwork: number,\n originTokenAddress: Address,\n destinationNetwork: number,\n destinationAddress: Address,\n amount: bigint,\n metadata: `0x${string}`, // bytes\n from?: string\n): Promise<TransactionParams> {\n const data = encodeFunctionData({\n abi: bridgeAbi,\n functionName: 'claimAsset',\n args: [\n // @ts-ignore - Viem expects exact tuple types but we're passing arrays\n smtProofLocalExitRoot,\n // @ts-ignore - Viem expects exact tuple types but we're passing arrays\n smtProofRollupExitRoot,\n globalIndex,\n mainnetExitRoot,\n rollupExitRoot,\n originNetwork,\n originTokenAddress,\n destinationNetwork,\n destinationAddress,\n amount,\n metadata,\n ],\n });\n\n const [nonce, gas] = await Promise.all([\n ctx.getNonce(from),\n ctx.estimateGas(data, ctx.bridgeAddress, from),\n ]);\n\n return {\n from,\n to: ctx.bridgeAddress,\n data,\n gas,\n nonce,\n };\n}\n","/**\n * Bridge ABI\n *\n * Polygon ZkEVM Bridge contract ABI\n */\n\nexport const bridgeAbi = [\n {\n inputs: [\n { internalType: 'uint32', name: 'destinationNetwork', type: 'uint32' },\n { internalType: 'address', name: 'destinationAddress', type: 'address' },\n { internalType: 'uint256', name: 'amount', type: 'uint256' },\n { internalType: 'address', name: 'token', type: 'address' },\n { internalType: 'bool', name: 'forceUpdateGlobalExitRoot', type: 'bool' },\n { internalType: 'bytes', name: 'permitData', type: 'bytes' },\n ],\n name: 'bridgeAsset',\n outputs: [],\n stateMutability: 'payable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'bytes32[32]',\n name: 'smtProofLocalExitRoot',\n type: 'bytes32[32]',\n },\n {\n internalType: 'bytes32[32]',\n name: 'smtProofRollupExitRoot',\n type: 'bytes32[32]',\n },\n { internalType: 'uint256', name: 'globalIndex', type: 'uint256' },\n { internalType: 'bytes32', name: 'mainnetExitRoot', type: 'bytes32' },\n { internalType: 'bytes32', name: 'rollupExitRoot', type: 'bytes32' },\n { internalType: 'uint32', name: 'originNetwork', type: 'uint32' },\n { internalType: 'address', name: 'originTokenAddress', type: 'address' },\n { internalType: 'uint32', name: 'destinationNetwork', type: 'uint32' },\n { internalType: 'address', name: 'destinationAddress', type: 'address' },\n { internalType: 'uint256', name: 'amount', type: 'uint256' },\n { internalType: 'bytes', name: 'metadata', type: 'bytes' },\n ],\n name: 'claimAsset',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n { internalType: 'uint32', name: 'leafIndex', type: 'uint32' },\n { internalType: 'uint32', name: 'sourceBridgeNetwork', type: 'uint32' },\n ],\n name: 'isClaimed',\n outputs: [{ internalType: 'bool', name: '', type: 'bool' }],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n { internalType: 'uint32', name: 'originNetwork', type: 'uint32' },\n { internalType: 'address', name: 'originTokenAddress', type: 'address' },\n ],\n name: 'getTokenWrappedAddress',\n outputs: [{ internalType: 'address', name: '', type: 'address' }],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n { internalType: 'uint32', name: 'destinationNetwork', type: 'uint32' },\n { internalType: 'address', name: 'destinationAddress', type: 'address' },\n { internalType: 'bool', name: 'forceUpdateGlobalExitRoot', type: 'bool' },\n { internalType: 'bytes', name: 'permitData', type: 'bytes' },\n ],\n name: 'bridgeMessage',\n outputs: [],\n stateMutability: 'payable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'bytes32[32]',\n name: 'smtProofLocalExitRoot',\n type: 'bytes32[32]',\n },\n {\n internalType: 'bytes32[32]',\n name: 'smtProofRollupExitRoot',\n type: 'bytes32[32]',\n },\n { internalType: 'uint256', name: 'globalIndex', type: 'uint256' },\n { internalType: 'bytes32', name: 'mainnetExitRoot', type: 'bytes32' },\n { internalType: 'bytes32', name: 'rollupExitRoot', type: 'bytes32' },\n { internalType: 'uint32', name: 'originNetwork', type: 'uint32' },\n { internalType: 'address', name: 'originTokenAddress', type: 'address' },\n { internalType: 'uint32', name: 'destinationNetwork', type: 'uint32' },\n { internalType: 'address', name: 'destinationAddress', type: 'address' },\n { internalType: 'uint256', name: 'amount', type: 'uint256' },\n { internalType: 'bytes', name: 'metadata', type: 'bytes' },\n ],\n name: 'claimMessage',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n { internalType: 'uint32', name: 'originNetwork', type: 'uint32' },\n { internalType: 'address', name: 'originTokenAddress', type: 'address' },\n ],\n name: 'precalculatedWrapperAddress',\n outputs: [{ internalType: 'address', name: '', type: 'address' }],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n { internalType: 'address', name: 'wrappedToken', type: 'address' },\n ],\n name: 'wrappedTokenToTokenInfo',\n outputs: [\n { internalType: 'uint32', name: 'originNetwork', type: 'uint32' },\n { internalType: 'address', name: 'originTokenAddress', type: 'address' },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'networkID',\n outputs: [{ internalType: 'uint32', name: '', type: 'uint32' }],\n stateMutability: 'view',\n type: 'function',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: 'uint8',\n name: 'leafType',\n type: 'uint8',\n },\n {\n indexed: false,\n internalType: 'uint32',\n name: 'originNetwork',\n type: 'uint32',\n },\n {\n indexed: false,\n internalType: 'address',\n name: 'originAddress',\n type: 'address',\n },\n {\n indexed: false,\n internalType: 'uint32',\n name: 'destinationNetwork',\n type: 'uint32',\n },\n {\n indexed: false,\n internalType: 'address',\n name: 'destinationAddress',\n type: 'address',\n },\n {\n indexed: false,\n internalType: 'uint256',\n name: 'amount',\n type: 'uint256',\n },\n {\n indexed: false,\n internalType: 'bytes',\n name: 'metadata',\n type: 'bytes',\n },\n {\n indexed: false,\n internalType: 'uint32',\n name: 'depositCount',\n type: 'uint32',\n },\n ],\n name: 'BridgeEvent',\n type: 'event',\n },\n] as const;\n","/**\n * Bridge Message Build Functions\n *\n * Functions to build bridge message transaction parameters\n */\n\nimport { encodeFunctionData, type Address, type Hex } from 'viem';\nimport { bridgeAbi } from './abi/bridge';\nimport type { TransactionParams } from '@/types';\n\nexport interface BuildContext {\n bridgeAddress: string;\n estimateGas: (data: Hex, to: string, from?: string) => Promise<string>;\n getNonce: (address?: string) => Promise<string | undefined>;\n}\n\nexport async function buildBridgeMessage(\n ctx: BuildContext,\n destinationNetwork: number,\n destinationAddress: Address,\n forceUpdateGlobalExitRoot: boolean,\n permitData: string = '0x',\n from?: string\n): Promise<TransactionParams> {\n const data = encodeFunctionData({\n abi: bridgeAbi,\n functionName: 'bridgeMessage',\n args: [\n destinationNetwork,\n destinationAddress,\n forceUpdateGlobalExitRoot,\n permitData as Hex,\n ],\n });\n\n const [nonce, gas] = await Promise.all([\n ctx.getNonce(from),\n ctx.estimateGas(data, ctx.bridgeAddress, from),\n ]);\n\n return {\n from,\n to: ctx.bridgeAddress,\n data,\n gas,\n nonce,\n };\n}\n\nexport async function buildClaimMessage(\n ctx: BuildContext,\n smtProofLocalExitRoot: readonly `0x${string}`[],\n smtProofRollupExitRoot: readonly `0x${string}`[],\n globalIndex: bigint,\n mainnetExitRoot: `0x${string}`,\n rollupExitRoot: `0x${string}`,\n originNetwork: number,\n originTokenAddress: Address,\n destinationNetwork: number,\n destinationAddress: Address,\n amount: bigint,\n metadata: `0x${string}`,\n from?: string\n): Promise<TransactionParams> {\n const data = encodeFunctionData({\n abi: bridgeAbi,\n functionName: 'claimMessage',\n args: [\n // @ts-ignore - Viem expects exact tuple types but we're passing arrays\n smtProofLocalExitRoot,\n // @ts-ignore - Viem expects exact tuple types but we're passing arrays\n smtProofRollupExitRoot,\n globalIndex,\n mainnetExitRoot,\n rollupExitRoot,\n originNetwork,\n originTokenAddress,\n destinationNetwork,\n destinationAddress,\n amount,\n metadata,\n ],\n });\n\n const [nonce, gas] = await Promise.all([\n ctx.getNonce(from),\n ctx.estimateGas(data, ctx.bridgeAddress, from),\n ]);\n\n return {\n from,\n to: ctx.bridgeAddress,\n data,\n gas,\n nonce,\n };\n}\n","/**\n * Bridge Utility Implementation\n *\n * User-friendly bridge operations that abstract complex parameter handling\n */\n\nimport {\n type PublicClient,\n decodeEventLog,\n createPublicClient,\n http,\n} from 'viem';\nimport type { ClaimAssetParams, ClaimMessageParams } from '@/types';\nimport { bridgeAbi } from './abi/bridge';\nimport { chainRegistry } from '../chains/registry';\n\nexport interface BridgeEventInfo {\n originNetwork: number;\n originTokenAddress: string;\n destinationNetwork: number;\n destinationAddress: string;\n amount: bigint;\n metadata: string;\n depositCount: number;\n}\n\nexport interface MerkleProof {\n merkle_proof: string[];\n rollup_merkle_proof?: string[];\n exit_root_num?: string; // Match native.js interface\n l2_exit_root_num?: string; // Match native.js interface\n main_exit_root: string;\n rollup_exit_root: string;\n}\n\nexport interface ClaimPayload {\n smtProof: string[];\n smtProofRollup: string[] | undefined;\n globalIndex: string;\n mainnetExitRoot: string;\n rollupExitRoot: string;\n originNetwork: number;\n originTokenAddress: string;\n destinationNetwork: number;\n destinationAddress: string;\n amount: bigint;\n metadata: string;\n}\n\nexport class BridgeUtil {\n private client: PublicClient;\n private proofApiUrl: string;\n private BRIDGE_TOPIC =\n '0x501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b';\n\n constructor(client: PublicClient, proofApiUrl: string) {\n this.client = client;\n this.proofApiUrl = proofApiUrl;\n }\n\n /**\n * Create BridgeUtil instance from network ID using chain registry\n *\n * @param sourceNetworkId - Network ID of the source network\n * @returns BridgeUtil instance configured for the source network\n */\n static async fromNetworkId(sourceNetworkId: number): Promise<BridgeUtil> {\n const chain = BridgeUtil.findChain(sourceNetworkId);\n\n if (!chain.proofApiUrl) {\n throw new Error(\n `No proof API URL configured for network ${sourceNetworkId}`\n );\n }\n\n const sourceClient = createPublicClient({\n transport: http(chain.rpcUrl),\n });\n\n return new BridgeUtil(sourceClient, chain.proofApiUrl);\n }\n\n /**\n * Find chain configuration by network ID\n *\n * @param sourceNetworkId - Network ID to search for\n * @returns Chain configuration\n * @throws Error if chain not found\n */\n private static findChain(sourceNetworkId: number) {\n try {\n return chainRegistry.getChainByNetworkId(sourceNetworkId);\n } catch {\n // Generate helpful error message with available options\n const allChains = chainRegistry.getAllChains();\n const availableNetworkIds = allChains\n .map((chain) => chain.networkId)\n .filter(Boolean)\n .join(', ');\n\n throw new Error(\n `Source network ${sourceNetworkId} not found in chain registry. ` +\n `Available network IDs: ${availableNetworkIds}`\n );\n }\n }\n\n /**\n * Extract bridge event data from transaction receipt\n */\n private async extractBridgeEvent(\n transactionHash: string,\n _networkId: number,\n bridgeIndex = 0\n ): Promise<BridgeEventInfo> {\n try {\n const receipt = await this.client.getTransactionReceipt({\n hash: transactionHash as `0x${string}`,\n });\n\n const bridgeLogs = receipt.logs.filter(\n (log) =>\n log.topics[0] &&\n log.topics[0].toLowerCase() === this.BRIDGE_TOPIC.toLowerCase()\n );\n\n if (!bridgeLogs.length) {\n throw new Error('No bridge event found in transaction receipt');\n }\n\n if (bridgeIndex >= bridgeLogs.length) {\n throw new Error(\n `Bridge index ${bridgeIndex} not found. Available indices: 0-${bridgeLogs.length - 1}`\n );\n }\n\n const log = bridgeLogs[bridgeIndex];\n\n if (!log) {\n throw new Error('Bridge log not found');\n }\n\n const decoded = decodeEventLog({\n abi: bridgeAbi,\n data: log.data,\n topics: log.topics,\n });\n\n if (decoded.eventName !== 'BridgeEvent') {\n throw new Error('Invalid bridge event');\n }\n\n const args = decoded.args as {\n originNetwork: number;\n originAddress: string;\n destinationNetwork: number;\n destinationAddress: string;\n amount: bigint;\n metadata: string;\n depositCount: number;\n };\n\n const {\n originNetwork,\n originAddress,\n destinationNetwork,\n destinationAddress,\n amount,\n metadata,\n depositCount,\n } = args;\n\n return {\n originNetwork: Number(originNetwork),\n originTokenAddress: originAddress as string,\n destinationNetwork: Number(destinationNetwork),\n destinationAddress: destinationAddress as string,\n amount: amount as bigint,\n metadata: (metadata as string) || '0x',\n depositCount: Number(depositCount),\n };\n } catch (error) {\n if (error instanceof Error) {\n throw new Error(`Failed to extract bridge event: ${error.message}`);\n }\n throw new Error('Failed to extract bridge event: Unknown error');\n }\n }\n\n /**\n * Fetch merkle proof from Polygon's proof API\n */\n private async fetchMerkleProof(\n networkId: number,\n depositCount: number\n ): Promise<MerkleProof> {\n try {\n const baseUrl = this.proofApiUrl.endsWith('/')\n ? this.proofApiUrl\n : `${this.proofApiUrl}/`;\n const url = `${baseUrl}merkle-proof?networkId=${networkId}&depositCount=${depositCount}`;\n\n const response = await fetch(url);\n if (!response.ok) {\n throw new Error(\n `Failed to fetch merkle proof: ${response.statusText} (${response.status})`\n );\n }\n\n const data = (await response.json()) as { proof: MerkleProof };\n\n if (!data.proof) {\n throw new Error('Invalid response format: missing proof data');\n }\n\n return data.proof;\n } catch (error) {\n if (error instanceof Error) {\n throw new Error(`Failed to fetch merkle proof: ${error.message}`);\n }\n throw new Error('Failed to fetch merkle proof: Unknown error');\n }\n }\n\n /**\n * Compute global index from local index and network ID\n */\n private computeGlobalIndex(\n indexLocal: number,\n sourceNetworkId: number\n ): bigint {\n const MAINNET_FLAG = BigInt(2 ** 64); // Match native.js implementation\n\n if (BigInt(sourceNetworkId) === BigInt(0)) {\n return BigInt(indexLocal) + MAINNET_FLAG;\n } else {\n return BigInt(indexLocal) + BigInt(sourceNetworkId - 1) * BigInt(2 ** 32);\n }\n }\n\n /**\n * Build claim payload from transaction hash (user-friendly method)\n */\n async buildPayloadForClaim(\n transactionHash: string,\n sourceNetworkId: number,\n bridgeIndex = 0\n ): Promise<ClaimPayload> {\n // Extract bridge event data\n const bridgeEvent = await this.extractBridgeEvent(\n transactionHash,\n sourceNetworkId,\n bridgeIndex\n );\n\n // Fetch merkle proof\n const proof = await this.fetchMerkleProof(\n sourceNetworkId,\n bridgeEvent.depositCount\n );\n\n // Compute global index\n const globalIndex = this.computeGlobalIndex(\n bridgeEvent.depositCount,\n sourceNetworkId\n );\n\n return {\n smtProof: proof.merkle_proof,\n smtProofRollup: proof.rollup_merkle_proof,\n globalIndex: globalIndex.toString(),\n mainnetExitRoot: proof.main_exit_root,\n rollupExitRoot: proof.rollup_exit_root,\n originNetwork: bridgeEvent.originNetwork,\n originTokenAddress: bridgeEvent.originTokenAddress,\n destinationNetwork: bridgeEvent.destinationNetwork,\n destinationAddress: bridgeEvent.destinationAddress,\n amount: bridgeEvent.amount,\n metadata: bridgeEvent.metadata,\n };\n }\n\n /**\n * Build claim asset parameters from transaction hash\n */\n async buildClaimAssetParams(\n transactionHash: string,\n sourceNetworkId: number,\n bridgeIndex = 0\n ): Promise<ClaimAssetParams> {\n const payload = await this.buildPayloadForClaim(\n transactionHash,\n sourceNetworkId,\n bridgeIndex\n );\n\n return {\n smtProofLocalExitRoot: payload.smtProof as readonly `0x${string}`[],\n smtProofRollupExitRoot:\n payload.smtProofRollup as readonly `0x${string}`[],\n globalIndex: BigInt(payload.globalIndex),\n mainnetExitRoot: payload.mainnetExitRoot as `0x${string}`,\n rollupExitRoot: payload.rollupExitRoot as `0x${string}`,\n originNetwork: payload.originNetwork,\n originTokenAddress: payload.originTokenAddress,\n destinationNetwork: payload.destinationNetwork,\n destinationAddress: payload.destinationAddress,\n amount: payload.amount,\n metadata: payload.metadata as `0x${string}`,\n };\n }\n\n /**\n * Build claim message parameters from transaction hash\n */\n async buildClaimMessageParams(\n transactionHash: string,\n sourceNetworkId: number,\n bridgeIndex = 0\n ): Promise<ClaimMessageParams> {\n const payload = await this.buildPayloadForClaim(\n transactionHash,\n sourceNetworkId,\n bridgeIndex\n );\n\n return {\n smtProofLocalExitRoot: payload.smtProof as readonly `0x${string}`[],\n smtProofRollupExitRoot:\n payload.smtProofRollup as readonly `0x${string}`[],\n globalIndex: BigInt(payload.globalIndex),\n mainnetExitRoot: payload.mainnetExitRoot as `0x${string}`,\n rollupExitRoot: payload.rollupExitRoot as `0x${string}`,\n originNetwork: payload.originNetwork,\n originTokenAddress: payload.originTokenAddress,\n destinationNetwork: payload.destinationNetwork,\n destinationAddress: payload.destinationAddress,\n amount: payload.amount,\n metadata: payload.metadata as `0x${string}`,\n };\n }\n\n /**\n * Get bridge event info from transaction hash\n */\n async getBridgeEventInfo(\n transactionHash: string,\n sourceNetworkId: number,\n bridgeIndex = 0\n ): Promise<BridgeEventInfo> {\n return this.extractBridgeEvent(\n transactionHash,\n sourceNetworkId,\n bridgeIndex\n );\n }\n}\n","/**\n * Bridge Implementation\n *\n * Core bridge functionality for asset bridging between networks\n */\n\nimport { ValidationUtils } from '../utils';\nimport { BaseContract } from '../base/contract';\nimport type {\n BridgeAssetParams,\n BridgeConfig,\n TransactionParams,\n ClaimAssetParams,\n IsClaimedParams,\n WrappedTokenParams,\n BridgeMessageParams,\n ClaimMessageParams,\n PrecalculatedWrapperParams,\n OriginTokenInfoParams,\n} from '@/types';\nimport {\n buildBridgeAsset as buildBridgeAssetTx,\n buildClaimAsset as buildClaimAssetTx,\n} from './build';\nimport {\n buildBridgeMessage as buildBridgeMessageTx,\n buildClaimMessage as buildClaimMessageTx,\n} from './message';\nimport { bridgeAbi } from './abi/bridge';\nimport { BridgeUtil } from './util';\n\nexport class Bridge extends BaseContract {\n private bridgeAddress: string;\n\n constructor(config: BridgeConfig) {\n super({ rpcUrl: config.rpcUrl, chainId: config.chainId });\n this.bridgeAddress = config.bridgeAddress;\n }\n\n /**\n * Build bridge asset transaction\n */\n async buildBridgeAsset(\n params: BridgeAssetParams,\n from?: string\n ): Promise<TransactionParams> {\n ValidationUtils.validateAddress(\n params.destinationAddress,\n 'Destination address'\n );\n ValidationUtils.validateAddress(params.token, 'Token address');\n\n return buildBridgeAssetTx(\n {\n bridgeAddress: this.bridgeAddress,\n estimateGas: (data, to, from) => this.estimateGas(data, to, from),\n getNonce: (address) => this.getNonce(address),\n },\n params.destinationNetwork,\n params.destinationAddress as `0x${string}`,\n BigInt(params.amount),\n params.token as `0x${string}`,\n params.forceUpdateGlobalExitRoot,\n params.permitData,\n from\n );\n }\n\n /**\n * Build claim asset transaction\n */\n async buildClaimAsset(\n params: ClaimAssetParams,\n from?: string\n ): Promise<TransactionParams> {\n ValidationUtils.validateAddress(\n params.originTokenAddress,\n 'Origin token address'\n );\n ValidationUtils.validateAddress(\n params.destinationAddress,\n 'Destination address'\n );\n\n return buildClaimAssetTx(\n {\n bridgeAddress: this.bridgeAddress,\n estimateGas: (data, to, from) => this.estimateGas(data, to, from),\n getNonce: (address) => this.getNonce(address),\n },\n params.smtProofLocalExitRoot,\n params.smtProofRollupExitRoot,\n params.globalIndex,\n params.mainnetExitRoot,\n params.rollupExitRoot,\n params.originNetwork,\n params.originTokenAddress as `0x${string}`,\n params.destinationNetwork,\n params.destinationAddress as `0x${string}`,\n params.amount,\n params.metadata,\n from\n );\n }\n\n /**\n * Check if bridge deposit is claimed\n */\n async isClaimed(params: IsClaimedParams): Promise<boolean> {\n const result = await this.client.readContract({\n address: this.bridgeAddress as `0x${string}`,\n abi: bridgeAbi,\n functionName: 'isClaimed',\n args: [params.leafIndex, params.sourceBridgeNetwork],\n });\n return result;\n }\n\n /**\n * Get wrapped token address\n */\n async getWrappedTokenAddress(params: WrappedTokenParams): Promise<string> {\n ValidationUtils.validateAddress(\n params.originTokenAddress,\n 'Origin token address'\n );\n\n const result = await this.client.readContract({\n address: this.bridgeAddress as `0x${string}`,\n abi: bridgeAbi,\n functionName: 'getTokenWrappedAddress',\n args: [params.originNetwork, params.originTokenAddress as `0x${string}`],\n });\n return result;\n }\n\n /**\n * Get network ID\n */\n async getNetworkId(): Promise<number> {\n const result = await this.client.readContract({\n address: this.bridgeAddress as `0x${string}`,\n abi: bridgeAbi,\n functionName: 'networkID',\n args: [],\n });\n return Number(result);\n }\n\n /**\n * Get bridge contract address\n */\n getBridgeAddress(): string {\n return this.bridgeAddress;\n }\n\n /**\n * Build bridge message transaction\n */\n async buildBridgeMessage(\n params: BridgeMessageParams,\n from?: string\n ): Promise<TransactionParams> {\n ValidationUtils.validateAddress(\n params.destinationAddress,\n 'Destination address'\n );\n\n return buildBridgeMessageTx(\n {\n bridgeAddress: this.bridgeAddress,\n estimateGas: (data, to, from) => this.estimateGas(data, to, from),\n getNonce: (address) => this.getNonce(address),\n },\n params.destinationNetwork,\n params.destinationAddress as `0x${string}`,\n params.forceUpdateGlobalExitRoot,\n params.permitData || '0x',\n from\n );\n }\n\n /**\n * Build claim message transaction\n */\n async buildClaimMessage(\n params: ClaimMessageParams,\n from?: string\n ): Promise<TransactionParams> {\n ValidationUtils.validateAddress(\n params.originTokenAddress,\n 'Origin token address'\n );\n ValidationUtils.validateAddress(\n params.destinationAddress,\n 'Destination address'\n );\n\n return buildClaimMessageTx(\n {\n bridgeAddress: this.bridgeAddress,\n estimateGas: (data, to, from) => this.estimateGas(data, to, from),\n getNonce: (address) => this.getNonce(address),\n },\n params.smtProofLocalExitRoot,\n params.smtProofRollupExitRoot,\n params.globalIndex,\n params.mainnetExitRoot,\n params.rollupExitRoot,\n params.originNetwork,\n params.originTokenAddress as `0x${string}`,\n params.destinationNetwork,\n params.destinationAddress as `0x${string}`,\n params.amount,\n params.metadata,\n from\n );\n }\n\n /**\n * Get precalculated wrapper address\n */\n async getPrecalculatedWrapperAddress(\n params: PrecalculatedWrapperParams\n ): Promise<string> {\n ValidationUtils.validateAddress(\n params.originTokenAddress,\n 'Origin token address'\n );\n\n const result = await this.client.readContract({\n address: this.bridgeAddress as `0x${string}`,\n abi: bridgeAbi,\n functionName: 'precalculatedWrapperAddress',\n args: [params.originNetwork, params.originTokenAddress as `0x${string}`],\n });\n return result;\n }\n\n /**\n * Get origin token info from wrapped token\n */\n async getOriginTokenInfo(\n params: OriginTokenInfoParams\n ): Promise<readonly [number, string]> {\n ValidationUtils.validateAddress(\n params.wrappedToken,\n 'Wrapped token address'\n );\n\n const result = await this.client.readContract({\n address: this.bridgeAddress as `0x${string}`,\n abi: bridgeAbi,\n functionName: 'wrappedTokenToTokenInfo',\n args: [params.wrappedToken as `0x${string}`],\n });\n return result;\n }\n\n /**\n * Build claim asset transaction from bridge transaction hash\n *\n * @param transactionHash - Hash of the bridge transaction on the source network\n * @param sourceNetworkId - Network ID of the source network (where bridge tx happened)\n * @param bridgeIndex - Index of bridge event in transaction (default: 0)\n * @param from - From address for the claim transaction\n */\n async buildClaimAssetFromHash(\n transactionHash: string,\n sourceNetworkId: number,\n bridgeIndex = 0,\n from?: string\n ): Promise<TransactionParams> {\n const bridgeUtil = await BridgeUtil.fromNetworkId(sourceNetworkId);\n const params = await bridgeUtil.buildClaimAssetParams(\n transactionHash,\n sourceNetworkId,\n bridgeIndex\n );\n\n return this.buildClaimAsset(params, from);\n }\n\n /**\n * Build claim message transaction from bridge transaction hash\n *\n * @param transactionHash - Hash of the bridge transaction on the source network\n * @param sourceNetworkId - Network ID of the source network (where bridge tx happened)\n * @param bridgeIndex - Index of bridge event in transaction (default: 0)\n * @param from - From address for the claim transaction\n */\n async buildClaimMessageFromHash(\n transactionHash: string,\n sourceNetworkId: number,\n bridgeIndex = 0,\n from?: string\n ): Promise<TransactionParams> {\n const bridgeUtil = await BridgeUtil.fromNetworkId(sourceNetworkId);\n const params = await bridgeUtil.buildClaimMessageParams(\n transactionHash,\n sourceNetworkId,\n bridgeIndex\n );\n\n return this.buildClaimMessage(params, from);\n }\n\n /**\n * Get bridge event info from transaction hash\n *\n * @param transactionHash - Hash of the bridge transaction on the source network\n * @param sourceNetworkId - Network ID of the source network (where bridge tx happened)\n * @param bridgeIndex - Index of bridge event in transaction (default: 0)\n */\n async getBridgeEventInfo(\n transactionHash: string,\n sourceNetworkId: number,\n bridgeIndex = 0\n ) {\n const bridgeUtil = await BridgeUtil.fromNetworkId(sourceNetworkId);\n return bridgeUtil.getBridgeEventInfo(\n transactionHash,\n sourceNetworkId,\n bridgeIndex\n );\n }\n}\n","/**\n * ABI Service\n *\n * Centralized management of all contract ABIs\n */\n\nimport { bridgeAbi } from '../bridge/abi/bridge';\nimport { erc20Abi } from '../tokens/abi/erc20';\n\nexport const ABIS = {\n BRIDGE: bridgeAbi,\n ERC20: erc20Abi,\n} as const;\n\nexport type ContractType = keyof typeof ABIS;\n\n/**\n * Get ABI by contract type\n */\nexport function getAbi(contractType: ContractType) {\n return ABIS[contractType];\n}\n\n/**\n * Get specific function ABI\n */\nexport function getFunctionAbi(\n contractType: ContractType,\n functionName: string\n) {\n const abi = ABIS[contractType];\n return abi.find(\n (item) => item.type === 'function' && item.name === functionName\n );\n}\n\n/**\n * Get specific event ABI\n */\nexport function getEventAbi(contractType: ContractType, eventName: string) {\n const abi = ABIS[contractType];\n return abi.find((item) => item.type === 'event' && item.name === eventName);\n}\n","/**\n * ERC20 Token Implementation\n *\n * Core ERC20 functionality for balance, allowance, and transaction building\n */\n\nimport { type Address } from 'viem';\n\nimport { ValidationUtils } from '../utils';\nimport { BaseContract } from '../base/contract';\nimport type { ERC20Config, TransactionParams, BridgeOptions } from '@/types';\nimport {\n buildApprove as buildApproveTx,\n buildTransfer as buildTransferTx,\n buildTransferFrom as buildTransferFromTx,\n} from './build';\nimport { Bridge } from '../bridge/bridge';\nimport { chainRegistry } from '../chains/registry';\nimport { getAbi } from '../services/abi';\n\nexport type { ERC20Config, TransactionParams };\n\nexport class ERC20 extends BaseContract {\n private tokenAddress: string;\n private config: ERC20Config;\n\n constructor(config: ERC20Config) {\n super({ rpcUrl: config.rpcUrl, chainId: config.chainId });\n this.tokenAddress = config.tokenAddress;\n this.config = config;\n }\n\n /**\n * Get ERC20 token balance in wei\n */\n async getBalance(address: string): Promise<string> {\n ValidationUtils.validateAddress(address, 'Address');\n\n const balance = await this.client.readContract({\n address: this.tokenAddress as Address,\n abi: getAbi('ERC20'),\n functionName: 'balanceOf',\n args: [address as Address],\n });\n return balance.toString();\n }\n\n /**\n * Get allowance in wei\n */\n async getAllowance(owner: string, spender: string): Promise<string> {\n ValidationUtils.validateAddress(owner, 'Owner address');\n ValidationUtils.validateAddress(spender, 'Spender address');\n\n try {\n const allowance = await this.client.readContract({\n address: this.tokenAddress as Address,\n abi: getAbi('ERC20'),\n functionName: 'allowance',\n args: [owner as Address, spender as Address],\n });\n return allowance.toString();\n } catch (error) {\n throw new Error(\n `Failed to get allowance: ${error instanceof Error ? error.message : 'Unknown error'}`\n );\n }\n }\n\n /**\n * Build approve transaction\n */\n async buildApprove(\n spender: string,\n amount: string,\n from?: string\n ): Promise<TransactionParams> {\n ValidationUtils.validateAddress(spender, 'Spender address');\n ValidationUtils.validateAmount(amount, 'Amount');\n\n return buildApproveTx(\n {\n tokenAddress: this.tokenAddress,\n estimateGas: (data, from) =>\n this.estimateGas(data, this.tokenAddress, from),\n getNonce: (address) => this.getNonce(address),\n },\n spender as Address,\n BigInt(amount),\n from\n );\n }\n\n /**\n * Build transfer transaction\n */\n async buildTransfer(\n to: string,\n amount: string,\n from?: string\n ): Promise<TransactionParams> {\n ValidationUtils.validateAddress(to, 'Recipient address');\n ValidationUtils.validateAmount(amount, 'Amount');\n\n return buildTransferTx(\n {\n tokenAddress: this.tokenAddress,\n estimateGas: (data, from) =>\n this.estimateGas(data, this.tokenAddress, from),\n getNonce: (address) => this.getNonce(address),\n },\n to as Address,\n BigInt(amount),\n from\n );\n }\n\n /**\n * Build transferFrom transaction\n */\n async buildTransferFrom(\n from: string,\n to: string,\n amount: string,\n spender?: string\n ): Promise<TransactionParams> {\n ValidationUtils.validateAddress(from, 'Owner address');\n ValidationUtils.validateAddress(to, 'Recipient address');\n ValidationUtils.validateAmount(amount, 'Amount');\n\n return buildTransferFromTx(\n {\n tokenAddress: this.tokenAddress,\n estimateGas: (data, from) =>\n this.estimateGas(data, this.tokenAddress, from),\n getNonce: (address) => this.getNonce(address),\n },\n from as Address,\n to as Address,\n BigInt(amount),\n spender\n );\n }\n\n /**\n * Bridge this token to another network\n */\n async bridgeTo(\n destinationNetwork: number,\n destinationAddress: string,\n amount: string,\n from?: string,\n options: BridgeOptions = {}\n ): Promise<TransactionParams> {\n ValidationUtils.validateAddress(destinationAddress, 'Destination address');\n ValidationUtils.validateAmount(amount, 'Amount');\n\n const bridge = this.getBridge();\n\n return bridge.buildBridgeAsset(\n {\n destinationNetwork,\n destinationAddress,\n amount,\n token: this.tokenAddress,\n forceUpdateGlobalExitRoot: options.forceUpdateGlobalExitRoot ?? true,\n permitData: options.permitData || '0x',\n },\n from\n );\n }\n\n /**\n * Get wrapped version of this token on destination network\n */\n async getWrappedToken(): Promise<string> {\n const bridge = this.getBridge();\n return bridge.getWrappedTokenAddress({\n originNetwork: this.config.chainId,\n originTokenAddress: this.tokenAddress,\n });\n }\n\n /**\n * Claim asset from bridge transaction hash\n *\n * @param transactionHash - Hash of the bridge transaction on the source network\n * @param sourceNetworkId - Network ID of the source network (where bridge tx happened)\n * @param bridgeIndex - Index of bridge event in transaction (default: 0)\n * @param from - From address for the claim transaction\n */\n async claimAsset(\n transactionHash: string,\n sourceNetworkId: number,\n bridgeIndex = 0,\n from?: string\n ): Promise<TransactionParams> {\n const bridge = this.getBridge();\n return bridge.buildClaimAssetFromHash(\n transactionHash,\n sourceNetworkId,\n bridgeIndex,\n from\n );\n }\n\n /**\n * Claim message from bridge transaction hash\n *\n * @param transactionHash - Hash of the bridge transaction on the source network\n * @param sourceNetworkId - Network ID of the source network (where bridge tx happened)\n * @param bridgeIndex - Index of bridge event in transaction (default: 0)\n * @param from - From address for the claim transaction\n */\n async claimMessage(\n transactionHash: string,\n sourceNetworkId: number,\n bridgeIndex = 0,\n from?: string\n ): Promise<TransactionParams> {\n const bridge = this.getBridge();\n return bridge.buildClaimMessageFromHash(\n transactionHash,\n sourceNetworkId,\n bridgeIndex,\n from\n );\n }\n\n /**\n * Get bridge event info from transaction hash\n *\n * @param transactionHash - Hash of the bridge transaction on the source network\n * @param sourceNetworkId - Network ID of the source network (where bridge tx happened)\n * @param bridgeIndex - Index of bridge event in transaction (default: 0)\n */\n async getBridgeEventInfo(\n transactionHash: string,\n sourceNetworkId: number,\n bridgeIndex = 0\n ) {\n const bridge = this.getBridge();\n return bridge.getBridgeEventInfo(\n transactionHash,\n sourceNetworkId,\n bridgeIndex\n );\n }\n\n private getBridge(): Bridge {\n const chain = chainRegistry.getChain(this.config.chainId);\n if (!chain.bridgeAddress) {\n throw new Error(\n `No bridge address configured for network ${this.config.chainId}`\n );\n }\n\n return new Bridge({\n bridgeAddress: chain.bridgeAddress,\n rpcUrl: this.config.rpcUrl,\n chainId: this.config.chainId,\n });\n }\n}\n","/**\n * Native Submodule\n *\n * ERC20 token operations and bridge functionality\n */\n\nimport { chainRegistry } from './chains/registry';\nimport { ERC20 } from './tokens/erc20';\nimport { Bridge } from './bridge/bridge';\nimport { createPublicClient, http, type Address } from 'viem';\nimport { ValidationUtils } from './utils';\nimport type { NativeConfig } from '@/types';\nimport { DEFAULT_NETWORK } from '../constants';\n\nexport { ERC20 } from './tokens/erc20';\nexport { Bridge } from './bridge/bridge';\nexport { BridgeUtil } from './bridge/util';\n\nexport class NativeClient {\n private config: NativeConfig;\n private defaultNetwork: number;\n\n constructor(config: NativeConfig) {\n this.config = config;\n this.defaultNetwork = this.config.defaultNetwork || DEFAULT_NETWORK;\n\n // Register custom chains if provided\n if (this.config.chains) {\n this.config.chains.forEach((chain) => {\n chainRegistry.registerChain(chain);\n });\n }\n\n // Add custom RPC URLs if provided\n if (this.config.customRpcUrls) {\n Object.entries(this.config.customRpcUrls).forEach(([chainId, rpcUrl]) => {\n chainRegistry.addCustomRpcUrl(Number(chainId), rpcUrl);\n });\n }\n }\n\n /**\n * Get network configuration from chain registry\n * @param networkId - The network ID (chain ID)\n * @returns Chain configuration\n */\n getNetwork(networkId: number) {\n return chainRegistry.getChain(networkId);\n }\n\n /**\n * Get all supported networks\n * @returns Array of network IDs\n */\n getSupportedNetworks(): number[] {\n return chainRegistry.getSupportedChainIds();\n }\n\n /**\n * Get default network ID\n * @returns Default network ID\n */\n getDefaultNetwork(): number {\n return this.defaultNetwork;\n }\n\n /**\n * Get chain registry for advanced usage\n */\n getChainRegistry() {\n return chainRegistry;\n }\n\n /**\n * Create an ERC20 instance for a specific token on a specific network\n * @param tokenAddress - The ERC20 token contract address\n * @param networkId - The network ID (optional, uses default if not provided)\n * @returns ERC20 instance\n */\n erc20(tokenAddress: string, networkId?: number): ERC20 {\n const network = this.getNetwork(networkId || this.defaultNetwork);\n\n return new ERC20({\n tokenAddress,\n rpcUrl: network.rpcUrl,\n chainId: network.chainId,\n });\n }\n\n /**\n * Get native token balance in wei\n * @param address - The address to check balance for\n * @param networkId - The network ID (optional, uses default if not provided)\n * @returns Native token balance as string\n */\n async getNativeBalance(address: string, networkId?: number): Promise<string> {\n ValidationUtils.validateAddress(address, 'Address');\n const network = this.getNetwork(networkId || this.defaultNetwork);\n\n const client = createPublicClient({\n chain: {\n id: network.chainId,\n name: network.name,\n nativeCurrency: network.nativeCurrency,\n rpcUrls: {\n default: { http: [network.rpcUrl] },\n public: { http: [network.rpcUrl] },\n },\n },\n transport: http(network.rpcUrl),\n });\n\n const balance = await client.getBalance({ address: address as Address });\n return balance.toString();\n }\n\n /**\n * Create a Bridge instance for a specific network\n * @param bridgeAddress - The bridge contract address\n * @param networkId - The network ID (optional, uses default if not provided)\n * @returns Bridge instance\n */\n bridge(bridgeAddress: string, networkId?: number): Bridge {\n const network = this.getNetwork(networkId || this.defaultNetwork);\n\n return new Bridge({\n bridgeAddress,\n rpcUrl: network.rpcUrl,\n chainId: network.chainId,\n });\n }\n}\n","/**\n * SDK Constants\n */\n\n// network ids\nexport const NETWORKS = {\n SEPOLIA: 11155111,\n CARDONA: 2442,\n} as const;\n\nexport const DEFAULT_NETWORK = NETWORKS.SEPOLIA;\n","/**\n * SDK Config\n */\n\nexport const SDK_MODES = {\n CORE: 'CORE',\n NATIVE: 'NATIVE',\n} as const;\n\nexport type SDKMode = (typeof SDK_MODES)[keyof typeof SDK_MODES];\n\nimport type { CoreConfig } from './core';\nimport type { NativeConfig } from './native';\n\nexport interface SDKConfig {\n mode: SDKMode[];\n core: CoreConfig;\n native: NativeConfig;\n}\n","/**\n * Generic HTTP Client\n */\n\nexport interface RequestConfig {\n method: 'GET' | 'POST';\n headers?: Record<string, string>;\n body?: unknown;\n timeout?: number;\n retries?: number;\n retryDelay?: number;\n}\n\nexport interface Response<T = unknown> {\n data: T;\n status: number;\n statusText: string;\n headers: Headers;\n ok: boolean;\n}\n\nexport interface HttpClientConfig {\n baseUrl: string;\n timeout?: number;\n retries?: number;\n retryDelay?: number;\n defaultHeaders?: Record<string, string>;\n}\n\ninterface FetchConfig {\n method: string;\n headers?: Headers;\n body?: string;\n signal?: AbortSignal;\n}\n\nexport class HttpClient {\n private config: HttpClientConfig;\n\n constructor(config: HttpClientConfig) {\n this.config = {\n timeout: 30000,\n retries: 3,\n retryDelay: 1000,\n defaultHeaders: {\n 'Content-Type': 'application/json',\n },\n ...config,\n };\n }\n\n async request<T>(url: string, config: RequestConfig): Promise<Response<T>> {\n const fullUrl = this.buildUrl(url);\n const requestConfig = this.buildRequestConfig(config);\n\n let lastError: Error | undefined;\n\n for (let attempt = 0; attempt <= (this.config.retries ?? 3); attempt++) {\n try {\n const response = await this.makeRequest<T>(fullUrl, requestConfig);\n return response;\n } catch (error) {\n lastError = error as Error;\n\n if (\n attempt === (this.config.retries ?? 3) ||\n !this.isRetryableError(error)\n ) {\n break;\n }\n\n if (attempt < (this.config.retries ?? 3)) {\n await this.delay(\n (this.config.retryDelay ?? 1000) * Math.pow(2, attempt)\n );\n }\n }\n }\n\n throw new Error(\n `Request failed after ${this.config.retries ?? 3} retries: ${lastError?.message ?? 'Unknown error'}`\n );\n }\n\n async get<T>(\n url: string,\n params?: Record<string, unknown>\n ): Promise<Response<T>> {\n const queryString = params ? this.buildQueryString(params) : '';\n const fullUrl = queryString ? `${url}?${queryString}` : url;\n\n return this.request<T>(fullUrl, { method: 'GET' });\n }\n\n async post<T>(\n url: string,\n data?: unknown,\n config?: Partial<RequestConfig>\n ): Promise<Response<T>> {\n return this.request<T>(url, {\n method: 'POST',\n body: data,\n ...config,\n });\n }\n\n private buildUrl(url: string): string {\n if (url.startsWith('http://') || url.startsWith('https://')) {\n return url;\n }\n return `${this.config.baseUrl}${url.startsWith('/') ? url : `/${url}`}`;\n }\n\n private buildRequestConfig(config: RequestConfig): FetchConfig {\n const headers = new Headers(this.config.defaultHeaders);\n\n if (config.headers) {\n Object.entries(config.headers).forEach(([key, value]) => {\n headers.set(key, value);\n });\n }\n\n const requestConfig: FetchConfig = {\n method: config.method,\n headers,\n };\n\n if (config.body) {\n if (typeof config.body === 'string') {\n requestConfig.body = config.body;\n } else {\n requestConfig.body = JSON.stringify(config.body);\n }\n }\n\n return requestConfig;\n }\n\n private async makeRequest<T>(\n url: string,\n config: FetchConfig\n ): Promise<Response<T>> {\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), this.config.timeout);\n\n try {\n const response = await fetch(url, {\n ...config,\n signal: controller.signal,\n });\n\n clearTimeout(timeoutId);\n\n if (!response.ok) {\n throw new Error(`HTTP ${response.status}: ${response.statusText}`);\n }\n\n let data: T;\n const contentType = response.headers.get('content-type');\n\n if (contentType?.includes('application/json')) {\n data = (await response.json()) as T;\n } else {\n data = (await response.text()) as T;\n }\n\n return {\n data,\n status: response.status,\n statusText: response.statusText,\n headers: response.headers,\n ok: response.ok,\n };\n } catch (error) {\n clearTimeout(timeoutId);\n\n if (error instanceof Error && error.name === 'AbortError') {\n throw new Error(`Request timeout after ${this.config.timeout}ms`);\n }\n\n throw error;\n }\n }\n\n private buildQueryString(params: Record<string, unknown>): string {\n const flattenedParams = this.flattenParams(params);\n\n return Object.entries(flattenedParams)\n .filter(([, value]) => value !== undefined && value !== null)\n .map(\n ([key, value]) =>\n `${encodeURIComponent(key)}=${encodeURIComponent(String(value))}`\n )\n .join('&');\n }\n\n private flattenParams(\n params: Record<string, unknown>,\n prefix = ''\n ): Record<string, string | number> {\n const result: Record<string, string | number> = {};\n\n for (const [key, value] of Object.entries(params)) {\n const fullKey = prefix ? `${prefix}[${key}]` : key;\n\n if (value === undefined || value === null) {\n continue;\n }\n\n if (Array.isArray(value)) {\n value.forEach((item, index) => {\n if (item !== undefined && item !== null) {\n result[`${fullKey}[${index}]`] = String(item);\n }\n });\n } else if (typeof value === 'object') {\n Object.assign(\n result,\n this.flattenParams(value as Record<string, unknown>, fullKey)\n );\n } else {\n result[fullKey] = String(value);\n }\n }\n\n return result;\n }\n\n private isRetryableError(error: unknown): boolean {\n if (error instanceof Error) {\n const message = error.message.toLowerCase();\n return (\n message.includes('timeout') ||\n message.includes('network') ||\n message.includes('fetch')\n );\n }\n return false;\n }\n\n private delay(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n }\n}\n","/**\n * Arc API Service\n *\n * Service for the Arc API\n */\n\nimport { HttpClient, Response } from '../utils/httpClient';\nimport {\n ApiResponse,\n ChainsQueryParams,\n ChainsResponse,\n RoutesRequestParams,\n RoutesResponse,\n BuildTransactionRequestBody,\n BuildTransactionResponse,\n TransactionsRequestQueryParams,\n TransactionsResponse,\n} from '../../types/core';\n\nexport class ArcApiService {\n private httpClient: HttpClient;\n\n constructor({ baseUrl, timeout }: { baseUrl: string; timeout: number }) {\n this.httpClient = new HttpClient({ baseUrl, timeout });\n }\n\n // responsible for both chains metadata and tokens\n async chains({\n withSupportedTokens = false,\n limit = 20,\n startAfter,\n chainIds,\n }: ChainsQueryParams = {}): Promise<Response<ApiResponse<ChainsResponse>>> {\n return this.httpClient.get('/metadata/chains', {\n withSupportedTokens,\n limit,\n startAfter,\n chainIds,\n });\n }\n\n async routes(\n routesRequestParams: RoutesRequestParams\n ): Promise<Response<ApiResponse<RoutesResponse>>> {\n return this.httpClient.post('/routes', routesRequestParams);\n }\n\n async buildTransaction(\n builtTransactionRequestBody: BuildTransactionRequestBody\n ): Promise<Response<ApiResponse<BuildTransactionResponse>>> {\n return this.httpClient.post(\n '/build-transaction',\n builtTransactionRequestBody\n );\n }\n\n async transactions(\n transactionsRequestQueryParams: TransactionsRequestQueryParams\n ): Promise<Response<ApiResponse<TransactionsResponse>>> {\n return this.httpClient.get('/transactions', {\n transactionsRequestQueryParams,\n });\n }\n}\n","/**\n * Core Module\n *\n * Primary interface for users\n */\n\nimport type {\n CoreConfig,\n RoutesRequestParams,\n RoutesResponse,\n TransactionsRequestQueryParams,\n TransactionsResponse,\n ChainsResponse,\n BuildTransactionRequestBody,\n BuildTransactionResponse,\n} from '@/types';\nimport { ArcApiService } from './services/arcApi';\n\nexport class CoreClient {\n private config: CoreConfig;\n private arcApiService: ArcApiService;\n\n constructor(config: CoreConfig) {\n this.config = config;\n\n if (!this.config) {\n throw new Error('Config is required');\n }\n\n if (!this.config.apiBaseUrl) {\n throw new Error('API base URL is required');\n }\n\n const { apiBaseUrl, apiTimeout } = this.config;\n\n this.arcApiService = new ArcApiService({\n baseUrl: apiBaseUrl,\n timeout: apiTimeout ?? 30000,\n });\n }\n\n /**\n * Get all chains metadata from AggLayer API\n */\n async getAllChains(): Promise<ChainsResponse> {\n // todo: user should get all data, handle pagination here, once backend adds pagination\n const response = await this.arcApiService.chains();\n if (response.data.status === 'success') {\n return response.data.data;\n }\n throw new Error(response.data.message);\n }\n\n /**\n * Get chain metadata by id from AggLayer API\n * @param ids - the ids of the chains to get metadata for\n */\n async getChainMetadataByChainIds(ids: number[]): Promise<ChainsResponse> {\n // todo: user should get all data, handle pagination here, once backend adds pagination\n const response = await this.arcApiService.chains({ chainIds: ids });\n if (response.data.status === 'success') {\n return response.data.data;\n }\n throw new Error(response.data.message);\n }\n\n /**\n * Get all tokens from AggLayer API\n */\n async getTokens(): Promise<ChainsResponse> {\n const response = await this.arcApiService.chains({\n withSupportedTokens: true,\n });\n if (response.data.status === 'success') {\n return response.data.data;\n }\n throw new Error(response.data.message);\n }\n\n /**\n * Get chain data and tokens by AggLayer API\n * @param ids - the ids of the chains to get data and tokens for\n */\n async getChainDataAndTokensByChainIds(\n ids: number[]\n ): Promise<ChainsResponse> {\n const response = await this.arcApiService.chains({\n chainIds: ids,\n withSupportedTokens: true,\n });\n if (response.data.status === 'success') {\n return response.data.data;\n }\n throw new Error(response.data.message);\n }\n\n /**\n * Get all routes from AggLayer API\n */\n async getRoutes(\n routesRequestParams: RoutesRequestParams\n ): Promise<RoutesResponse> {\n const response = await this.arcApiService.routes(routesRequestParams);\n if (response.data.status === 'success') {\n return response.data.data;\n }\n throw new Error(response.data.message);\n }\n\n /**\n * Build transaction from a step object\n */\n async buildTransaction(\n builtTransactionRequestBody: BuildTransactionRequestBody\n ): Promise<BuildTransactionResponse> {\n const response = await this.arcApiService.buildTransaction(\n builtTransactionRequestBody\n );\n if (response.data.status === 'success') {\n return response.data.data;\n }\n throw new Error(response.data.message);\n }\n\n /**\n * Get all transactions via web sockets\n */\n async getTransactions(\n transactionsRequestQueryParams: TransactionsRequestQueryParams\n ): Promise<TransactionsResponse> {\n const response = await this.arcApiService.transactions(\n transactionsRequestQueryParams\n );\n if (response.data.status === 'success') {\n return response.data.data;\n }\n throw new Error(response.data.message);\n }\n}\n","/**\n * AggLayer SDK - Main SDK\n *\n * Main SDK that orchestrates different submodules\n */\n\nimport { NativeClient } from '@/native';\nimport { SDK_MODES, type SDKConfig } from '@/types';\nimport { CoreClient } from '@/core';\nimport { DEFAULT_NETWORK } from './constants';\n\n// Re-export all types from centralized location\nexport type * from './types';\n\n// Re-export constants and values\nexport { SDK_MODES } from './types';\n\nexport class AggLayerSDK {\n private config: SDKConfig;\n\n private core?: CoreClient;\n private native?: NativeClient;\n\n constructor(config: SDKConfig) {\n this.config = config;\n\n /**\n * by default only core is enabled\n * if mode is not provided, only core is enabled\n * if mode is provided, only the modules in the mode are enabled\n * if mode is provided and core is not in the mode, core is not enabled\n * if mode is provided and native is not in the mode, native is not enabled\n * if mode is provided and core and native are in the mode, both are enabled\n * if mode is provided and core and native are not in the mode, default to core only\n */\n\n if (!config.mode || (config.mode && config.mode.length === 0)) {\n this.config.mode = ['CORE'];\n }\n\n if (config.mode.includes(SDK_MODES.CORE)) {\n if (!this.config.core) {\n throw new Error('Core config is required');\n }\n\n this.core = new CoreClient(this.config.core);\n }\n\n // Initialize native submodule if enabled\n if (this.config.mode?.includes(SDK_MODES.NATIVE)) {\n if (!this.config.native) {\n throw new Error('NATIVE config is required');\n }\n\n const nativeConfig = {\n defaultNetwork: this.config.native?.defaultNetwork || DEFAULT_NETWORK,\n ...(this.config.native?.chains && {\n chains: this.config.native.chains,\n }),\n ...(this.config.native?.customRpcUrls && {\n customRpcUrls: this.config.native.customRpcUrls,\n }),\n };\n\n this.native = new NativeClient(nativeConfig);\n }\n }\n\n /**\n * Get core submodule\n */\n getCore(): CoreClient {\n if (!this.core) {\n throw new Error('Core module not initialized. Add \"core\" to mode array.');\n }\n return this.core;\n }\n\n /**\n * Get native submodule\n */\n getNative(): NativeClient {\n if (!this.native) {\n throw new Error(\n 'NATIVE module not initialized. Add \"native\" to mode array.'\n );\n }\n return this.native;\n }\n}\n"],"mappings":";AAUO,IAAM,gBAAN,MAAM,eAAc;AAAA,EAKjB,cAAc;AAHtB,SAAQ,SAAmC,oBAAI,IAAI;AACnD,SAAQ,aAAiC,oBAAI,IAAI;AAG/C,SAAK,wBAAwB;AAAA,EAC/B;AAAA,EAEA,OAAO,cAA6B;AAClC,QAAI,CAAC,eAAc,UAAU;AAC3B,qBAAc,WAAW,IAAI,eAAc;AAAA,IAC7C;AACA,WAAO,eAAc;AAAA,EACvB;AAAA,EAEQ,0BAA0B;AAEhC,SAAK,cAAc;AAAA,MACjB,SAAS;AAAA,MACT,WAAW;AAAA,MACX,MAAM;AAAA,MACN,QAAQ;AAAA,MACR,gBAAgB,EAAE,MAAM,iBAAiB,QAAQ,OAAO,UAAU,GAAG;AAAA,MACrE,eAAe;AAAA,QACb,MAAM;AAAA,QACN,KAAK;AAAA,MACP;AAAA,MACA,eAAe;AAAA,MACf,aACE;AAAA,MACF,WAAW;AAAA,IACb,CAAC;AAGD,SAAK,cAAc;AAAA,MACjB,SAAS;AAAA,MACT,WAAW;AAAA,MACX,MAAM;AAAA,MACN,QAAQ;AAAA,MACR,gBAAgB,EAAE,MAAM,YAAY,QAAQ,OAAO,UAAU,GAAG;AAAA,MAChE,eAAe;AAAA,QACb,MAAM;AAAA,QACN,KAAK;AAAA,MACP;AAAA,MACA,eAAe;AAAA,MACf,aACE;AAAA,MACF,WAAW;AAAA,IACb,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,cAAc,QAA2B;AACvC,SAAK,OAAO,IAAI,OAAO,SAAS,MAAM;AAGtC,UAAM,YAAmB;AAAA,MACvB,IAAI,OAAO;AAAA,MACX,MAAM,OAAO;AAAA,MACb,gBAAgB,OAAO;AAAA,MACvB,SAAS;AAAA,QACP,SAAS,EAAE,MAAM,CAAC,OAAO,MAAM,EAAE;AAAA,MACnC;AAAA,IACF;AAEA,SAAK,WAAW,IAAI,OAAO,SAAS,SAAS;AAAA,EAC/C;AAAA;AAAA;AAAA;AAAA,EAKA,SAAS,SAA8B;AACrC,UAAM,QAAQ,KAAK,OAAO,IAAI,OAAO;AACrC,QAAI,CAAC,OAAO;AACV,YAAM,IAAI;AAAA,QACR,SAAS,OAAO,iCAAiC,MAAM,KAAK,KAAK,OAAO,KAAK,CAAC,EAAE,KAAK,IAAI,CAAC;AAAA,MAC5F;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,oBAAoB,WAAgC;AAClD,UAAM,QAAQ,MAAM,KAAK,KAAK,OAAO,OAAO,CAAC,EAAE;AAAA,MAC7C,CAACA,WAAUA,OAAM,cAAc;AAAA,IACjC;AACA,QAAI,CAAC,OAAO;AACV,YAAM,IAAI;AAAA,QACR,yBAAyB,SAAS,sCAAsC,MAAM;AAAA,UAC5E,KAAK,OAAO,OAAO;AAAA,QACrB,EACG,IAAI,CAACA,WAAUA,OAAM,SAAS,EAC9B,OAAO,OAAO,EACd,KAAK,IAAI,CAAC;AAAA,MACf;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,aAAa,SAAwB;AACnC,UAAM,QAAQ,KAAK,WAAW,IAAI,OAAO;AACzC,QAAI,CAAC,OAAO;AACV,YAAM,IAAI;AAAA,QACR,SAAS,OAAO,iCAAiC,MAAM,KAAK,KAAK,WAAW,KAAK,CAAC,EAAE,KAAK,IAAI,CAAC;AAAA,MAChG;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,uBAAiC;AAC/B,WAAO,MAAM,KAAK,KAAK,OAAO,KAAK,CAAC;AAAA,EACtC;AAAA;AAAA;AAAA;AAAA,EAKA,eAA8B;AAC5B,WAAO,MAAM,KAAK,KAAK,OAAO,OAAO,CAAC;AAAA,EACxC;AAAA;AAAA;AAAA;AAAA,EAKA,iBAAiB,SAA0B;AACzC,WAAO,KAAK,OAAO,IAAI,OAAO;AAAA,EAChC;AAAA;AAAA;AAAA;AAAA,EAKA,4BAA4B,WAA4B;AACtD,WAAO,MAAM,KAAK,KAAK,OAAO,OAAO,CAAC,EAAE;AAAA,MACtC,CAAC,UAAU,MAAM,cAAc;AAAA,IACjC;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,gBAAgB,MAAsD;AACpE,WAAO,MAAM,KAAK,KAAK,OAAO,OAAO,CAAC,EAAE,OAAO,CAAC,UAAU;AACxD,UAAI,SAAS,WAAW;AACtB,eACE,CAAE,MAA4B,aAC9B,CAAE,MAA4B;AAAA,MAElC;AACA,UAAI,SAAS,WAAW;AACtB,eAAQ,MAA4B;AAAA,MACtC;AACA,UAAI,SAAS,SAAS;AACpB,eAAQ,MAA4B;AAAA,MACtC;AACA,aAAO;AAAA,IACT,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,gBAAgB,SAAiB,QAAsB;AACrD,UAAM,QAAQ,KAAK,SAAS,OAAO;AACnC,UAAM,cAA2B;AAAA,MAC/B,GAAG;AAAA,MACH;AAAA,IACF;AAEA,SAAK,cAAc,WAAW;AAAA,EAChC;AACF;AAGO,IAAM,gBAAgB,cAAc,YAAY;;;AC3LhD,IAAM,kBAAN,MAAsB;AAAA;AAAA;AAAA;AAAA,EAI3B,OAAe,SAAS,OAAyC;AAC/D,WAAO,OAAO,MAAM,SAAS,CAAC;AAAA,EAChC;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,gBAAgB,SAAiB,OAAe,WAAiB;AACtE,QAAI,CAAC,WAAW,CAAC,QAAQ,WAAW,IAAI,KAAK,QAAQ,WAAW,IAAI;AAClE,YAAM,IAAI,MAAM,GAAG,IAAI,sCAAsC;AAAA,IAC/D;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,eACL,QACA,OAAe,UACT;AACN,UAAM,YAAY,OAAO,SAAS;AAClC,QAAI,CAAC,aAAa,cAAc,OAAO,KAAK,SAAS,MAAM,KAAK,IAAI;AAClE,YAAM,IAAI,MAAM,GAAG,IAAI,2BAA2B;AAAA,IACpD;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,eAAe,SAA0B;AAC9C,WACE,QAAQ,OAAO,KAAK,QAAQ,WAAW,IAAI,KAAK,QAAQ,WAAW;AAAA,EAEvE;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,cAAc,QAA2C;AAC9D,QAAI;AACF,YAAM,YAAY,OAAO,SAAS;AAClC,aACE,QAAQ,SAAS,KAAK,cAAc,OAAO,KAAK,SAAS,MAAM,IAAI;AAAA,IAEvE,QAAQ;AACN,aAAO;AAAA,IACT;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,gBAAgB,SAAuB;AAC5C,QAAI,CAAC,OAAO,UAAU,OAAO,KAAK,WAAW,GAAG;AAC9C,YAAM,IAAI,MAAM,qCAAqC;AAAA,IACvD;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,OAAO,eAAe,QAAsB;AAC1C,QAAI,CAAC,UAAU,CAAC,OAAO,WAAW,MAAM,GAAG;AACzC,YAAM,IAAI,MAAM,wCAAwC;AAAA,IAC1D;AAAA,EACF;AACF;;;ACtEA;AAAA,EACE;AAAA,EACA;AAAA,OAIK;AAKA,IAAe,eAAf,MAA4B;AAAA,EAGjC,YAAY,QAA4B;AACtC,UAAM,QAAQ,cAAc,aAAa,OAAO,OAAO;AACvD,SAAK,SAAS,mBAAmB;AAAA,MAC/B;AAAA,MACA,WAAW,KAAK,OAAO,MAAM;AAAA,IAC/B,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,MAAgB,SAAS,SAA+C;AACtE,QAAI,CAAC,QAAS,QAAO;AACrB,UAAM,aAAa,MAAM,KAAK,OAAO,oBAAoB;AAAA,MACvD;AAAA,IACF,CAAC;AACD,WAAO,KAAK,WAAW,SAAS,EAAE,CAAC;AAAA,EACrC;AAAA;AAAA;AAAA;AAAA,EAKA,MAAgB,YACd,MACA,IACA,MACiB;AACjB,UAAM,cAAc,MAAM,KAAK,OAAO,YAAY;AAAA,MAChD,SAAS;AAAA,MACT;AAAA,MACA;AAAA,IACF,CAAC;AACD,WAAO,YAAY,SAAS;AAAA,EAC9B;AACF;;;ACtDA,SAAS,0BAAkD;;;ACMpD,IAAM,WAAW;AAAA;AAAA,EAEtB;AAAA,IACE,MAAM;AAAA,IACN,MAAM;AAAA,IACN,iBAAiB;AAAA,IACjB,QAAQ;AAAA,MACN,EAAE,MAAM,WAAW,MAAM,UAAU;AAAA,MACnC,EAAE,MAAM,UAAU,MAAM,UAAU;AAAA,IACpC;AAAA,IACA,SAAS,CAAC,EAAE,MAAM,IAAI,MAAM,OAAO,CAAC;AAAA,EACtC;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,MAAM;AAAA,IACN,iBAAiB;AAAA,IACjB,QAAQ;AAAA,MACN,EAAE,MAAM,MAAM,MAAM,UAAU;AAAA,MAC9B,EAAE,MAAM,UAAU,MAAM,UAAU;AAAA,IACpC;AAAA,IACA,SAAS,CAAC,EAAE,MAAM,IAAI,MAAM,OAAO,CAAC;AAAA,EACtC;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,MAAM;AAAA,IACN,iBAAiB;AAAA,IACjB,QAAQ;AAAA,MACN,EAAE,MAAM,QAAQ,MAAM,UAAU;AAAA,MAChC,EAAE,MAAM,MAAM,MAAM,UAAU;AAAA,MAC9B,EAAE,MAAM,UAAU,MAAM,UAAU;AAAA,IACpC;AAAA,IACA,SAAS,CAAC,EAAE,MAAM,IAAI,MAAM,OAAO,CAAC;AAAA,EACtC;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,MAAM;AAAA,IACN,iBAAiB;AAAA,IACjB,QAAQ;AAAA,MACN,EAAE,MAAM,SAAS,MAAM,UAAU;AAAA,MACjC,EAAE,MAAM,WAAW,MAAM,UAAU;AAAA,IACrC;AAAA,IACA,SAAS,CAAC,EAAE,MAAM,IAAI,MAAM,UAAU,CAAC;AAAA,EACzC;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,MAAM;AAAA,IACN,iBAAiB;AAAA,IACjB,QAAQ,CAAC,EAAE,MAAM,WAAW,MAAM,UAAU,CAAC;AAAA,IAC7C,SAAS,CAAC,EAAE,MAAM,IAAI,MAAM,UAAU,CAAC;AAAA,EACzC;AAAA;AAAA,EAEA;AAAA,IACE,MAAM;AAAA,IACN,MAAM;AAAA,IACN,iBAAiB;AAAA,IACjB,QAAQ,CAAC;AAAA,IACT,SAAS,CAAC,EAAE,MAAM,IAAI,MAAM,SAAS,CAAC;AAAA,EACxC;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,MAAM;AAAA,IACN,iBAAiB;AAAA,IACjB,QAAQ,CAAC;AAAA,IACT,SAAS,CAAC,EAAE,MAAM,IAAI,MAAM,SAAS,CAAC;AAAA,EACxC;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,MAAM;AAAA,IACN,iBAAiB;AAAA,IACjB,QAAQ,CAAC;AAAA,IACT,SAAS,CAAC,EAAE,MAAM,IAAI,MAAM,QAAQ,CAAC;AAAA,EACvC;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,MAAM;AAAA,IACN,iBAAiB;AAAA,IACjB,QAAQ,CAAC;AAAA,IACT,SAAS,CAAC,EAAE,MAAM,IAAI,MAAM,UAAU,CAAC;AAAA,EACzC;AAAA;AAAA,EAEA;AAAA,IACE,MAAM;AAAA,IACN,MAAM;AAAA,IACN,QAAQ;AAAA,MACN,EAAE,MAAM,QAAQ,MAAM,WAAW,SAAS,KAAK;AAAA,MAC/C,EAAE,MAAM,MAAM,MAAM,WAAW,SAAS,KAAK;AAAA,MAC7C,EAAE,MAAM,SAAS,MAAM,WAAW,SAAS,MAAM;AAAA,IACnD;AAAA,EACF;AAAA,EACA;AAAA,IACE,MAAM;AAAA,IACN,MAAM;AAAA,IACN,QAAQ;AAAA,MACN,EAAE,MAAM,SAAS,MAAM,WAAW,SAAS,KAAK;AAAA,MAChD,EAAE,MAAM,WAAW,MAAM,WAAW,SAAS,KAAK;AAAA,MAClD,EAAE,MAAM,SAAS,MAAM,WAAW,SAAS,MAAM;AAAA,IACnD;AAAA,EACF;AACF;;;AD9FA,eAAsB,aACpB,KACA,SACA,QACA,MAC4B;AAC5B,QAAM,OAAO,mBAAmB;AAAA,IAC9B,KAAK;AAAA,IACL,cAAc;AAAA,IACd,MAAM,CAAC,SAAS,MAAM;AAAA,EACxB,CAAC;AAED,QAAM,CAAC,OAAO,GAAG,IAAI,MAAM,QAAQ,IAAI;AAAA,IACrC,IAAI,SAAS,IAAI;AAAA,IACjB,IAAI,YAAY,MAAM,IAAI;AAAA,EAC5B,CAAC;AAED,SAAO;AAAA,IACL;AAAA,IACA,IAAI,IAAI;AAAA,IACR;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;AAEA,eAAsB,cACpB,KACA,IACA,QACA,MAC4B;AAC5B,QAAM,OAAO,mBAAmB;AAAA,IAC9B,KAAK;AAAA,IACL,cAAc;AAAA,IACd,MAAM,CAAC,IAAI,MAAM;AAAA,EACnB,CAAC;AAED,QAAM,CAAC,OAAO,GAAG,IAAI,MAAM,QAAQ,IAAI;AAAA,IACrC,IAAI,SAAS,IAAI;AAAA,IACjB,IAAI,YAAY,MAAM,IAAI;AAAA,EAC5B,CAAC;AAED,SAAO;AAAA,IACL;AAAA,IACA,IAAI,IAAI;AAAA,IACR;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;AAEA,eAAsB,kBACpB,KACA,aACA,IACA,QACA,SAC4B;AAC5B,QAAM,OAAO,mBAAmB;AAAA,IAC9B,KAAK;AAAA,IACL,cAAc;AAAA,IACd,MAAM,CAAC,aAAa,IAAI,MAAM;AAAA,EAChC,CAAC;AAED,QAAM,CAAC,OAAO,GAAG,IAAI,MAAM,QAAQ,IAAI;AAAA,IACrC,IAAI,SAAS,OAAO;AAAA,IACpB,IAAI,YAAY,MAAM,OAAO;AAAA,EAC/B,CAAC;AAED,SAAO;AAAA,IACL,MAAM;AAAA,IACN,IAAI,IAAI;AAAA,IACR;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;;;AEjFA,SAAS,sBAAAC,2BAAkD;;;ACApD,IAAM,YAAY;AAAA,EACvB;AAAA,IACE,QAAQ;AAAA,MACN,EAAE,cAAc,UAAU,MAAM,sBAAsB,MAAM,SAAS;AAAA,MACrE,EAAE,cAAc,WAAW,MAAM,sBAAsB,MAAM,UAAU;AAAA,MACvE,EAAE,cAAc,WAAW,MAAM,UAAU,MAAM,UAAU;AAAA,MAC3D,EAAE,cAAc,WAAW,MAAM,SAAS,MAAM,UAAU;AAAA,MAC1D,EAAE,cAAc,QAAQ,MAAM,6BAA6B,MAAM,OAAO;AAAA,MACxE,EAAE,cAAc,SAAS,MAAM,cAAc,MAAM,QAAQ;AAAA,IAC7D;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA,EAAE,cAAc,WAAW,MAAM,eAAe,MAAM,UAAU;AAAA,MAChE,EAAE,cAAc,WAAW,MAAM,mBAAmB,MAAM,UAAU;AAAA,MACpE,EAAE,cAAc,WAAW,MAAM,kBAAkB,MAAM,UAAU;AAAA,MACnE,EAAE,cAAc,UAAU,MAAM,iBAAiB,MAAM,SAAS;AAAA,MAChE,EAAE,cAAc,WAAW,MAAM,sBAAsB,MAAM,UAAU;AAAA,MACvE,EAAE,cAAc,UAAU,MAAM,sBAAsB,MAAM,SAAS;AAAA,MACrE,EAAE,cAAc,WAAW,MAAM,sBAAsB,MAAM,UAAU;AAAA,MACvE,EAAE,cAAc,WAAW,MAAM,UAAU,MAAM,UAAU;AAAA,MAC3D,EAAE,cAAc,SAAS,MAAM,YAAY,MAAM,QAAQ;AAAA,IAC3D;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN,EAAE,cAAc,UAAU,MAAM,aAAa,MAAM,SAAS;AAAA,MAC5D,EAAE,cAAc,UAAU,MAAM,uBAAuB,MAAM,SAAS;AAAA,IACxE;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,QAAQ,MAAM,IAAI,MAAM,OAAO,CAAC;AAAA,IAC1D,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN,EAAE,cAAc,UAAU,MAAM,iBAAiB,MAAM,SAAS;AAAA,MAChE,EAAE,cAAc,WAAW,MAAM,sBAAsB,MAAM,UAAU;AAAA,IACzE;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,WAAW,MAAM,IAAI,MAAM,UAAU,CAAC;AAAA,IAChE,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN,EAAE,cAAc,UAAU,MAAM,sBAAsB,MAAM,SAAS;AAAA,MACrE,EAAE,cAAc,WAAW,MAAM,sBAAsB,MAAM,UAAU;AAAA,MACvE,EAAE,cAAc,QAAQ,MAAM,6BAA6B,MAAM,OAAO;AAAA,MACxE,EAAE,cAAc,SAAS,MAAM,cAAc,MAAM,QAAQ;AAAA,IAC7D;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA,EAAE,cAAc,WAAW,MAAM,eAAe,MAAM,UAAU;AAAA,MAChE,EAAE,cAAc,WAAW,MAAM,mBAAmB,MAAM,UAAU;AAAA,MACpE,EAAE,cAAc,WAAW,MAAM,kBAAkB,MAAM,UAAU;AAAA,MACnE,EAAE,cAAc,UAAU,MAAM,iBAAiB,MAAM,SAAS;AAAA,MAChE,EAAE,cAAc,WAAW,MAAM,sBAAsB,MAAM,UAAU;AAAA,MACvE,EAAE,cAAc,UAAU,MAAM,sBAAsB,MAAM,SAAS;AAAA,MACrE,EAAE,cAAc,WAAW,MAAM,sBAAsB,MAAM,UAAU;AAAA,MACvE,EAAE,cAAc,WAAW,MAAM,UAAU,MAAM,UAAU;AAAA,MAC3D,EAAE,cAAc,SAAS,MAAM,YAAY,MAAM,QAAQ;AAAA,IAC3D;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC;AAAA,IACV,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN,EAAE,cAAc,UAAU,MAAM,iBAAiB,MAAM,SAAS;AAAA,MAChE,EAAE,cAAc,WAAW,MAAM,sBAAsB,MAAM,UAAU;AAAA,IACzE;AAAA,IACA,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,WAAW,MAAM,IAAI,MAAM,UAAU,CAAC;AAAA,IAChE,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ;AAAA,MACN,EAAE,cAAc,WAAW,MAAM,gBAAgB,MAAM,UAAU;AAAA,IACnE;AAAA,IACA,MAAM;AAAA,IACN,SAAS;AAAA,MACP,EAAE,cAAc,UAAU,MAAM,iBAAiB,MAAM,SAAS;AAAA,MAChE,EAAE,cAAc,WAAW,MAAM,sBAAsB,MAAM,UAAU;AAAA,IACzE;AAAA,IACA,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,QAAQ,CAAC;AAAA,IACT,MAAM;AAAA,IACN,SAAS,CAAC,EAAE,cAAc,UAAU,MAAM,IAAI,MAAM,SAAS,CAAC;AAAA,IAC9D,iBAAiB;AAAA,IACjB,MAAM;AAAA,EACR;AAAA,EACA;AAAA,IACE,WAAW;AAAA,IACX,QAAQ;AAAA,MACN;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,MACA;AAAA,QACE,SAAS;AAAA,QACT,cAAc;AAAA,QACd,MAAM;AAAA,QACN,MAAM;AAAA,MACR;AAAA,IACF;AAAA,IACA,MAAM;AAAA,IACN,MAAM;AAAA,EACR;AACF;;;AD/KA,eAAsB,iBACpB,KACA,oBACA,oBACA,QACA,OACA,2BACA,aAAqB,MACrB,MAC4B;AAC5B,QAAM,OAAOC,oBAAmB;AAAA,IAC9B,KAAK;AAAA,IACL,cAAc;AAAA,IACd,MAAM;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF,CAAC;AAED,QAAM,CAAC,OAAO,GAAG,IAAI,MAAM,QAAQ,IAAI;AAAA,IACrC,IAAI,SAAS,IAAI;AAAA,IACjB,IAAI,YAAY,MAAM,IAAI,eAAe,IAAI;AAAA,EAC/C,CAAC;AAED,SAAO;AAAA,IACL;AAAA,IACA,IAAI,IAAI;AAAA,IACR;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;AAEA,eAAsB,gBACpB,KACA,uBACA,wBACA,aACA,iBACA,gBACA,eACA,oBACA,oBACA,oBACA,QACA,UACA,MAC4B;AAC5B,QAAM,OAAOA,oBAAmB;AAAA,IAC9B,KAAK;AAAA,IACL,cAAc;AAAA,IACd,MAAM;AAAA;AAAA,MAEJ;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF,CAAC;AAED,QAAM,CAAC,OAAO,GAAG,IAAI,MAAM,QAAQ,IAAI;AAAA,IACrC,IAAI,SAAS,IAAI;AAAA,IACjB,IAAI,YAAY,MAAM,IAAI,eAAe,IAAI;AAAA,EAC/C,CAAC;AAED,SAAO;AAAA,IACL;AAAA,IACA,IAAI,IAAI;AAAA,IACR;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;;;AE9FA,SAAS,sBAAAC,2BAAkD;AAU3D,eAAsB,mBACpB,KACA,oBACA,oBACA,2BACA,aAAqB,MACrB,MAC4B;AAC5B,QAAM,OAAOC,oBAAmB;AAAA,IAC9B,KAAK;AAAA,IACL,cAAc;AAAA,IACd,MAAM;AAAA,MACJ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF,CAAC;AAED,QAAM,CAAC,OAAO,GAAG,IAAI,MAAM,QAAQ,IAAI;AAAA,IACrC,IAAI,SAAS,IAAI;AAAA,IACjB,IAAI,YAAY,MAAM,IAAI,eAAe,IAAI;AAAA,EAC/C,CAAC;AAED,SAAO;AAAA,IACL;AAAA,IACA,IAAI,IAAI;AAAA,IACR;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;AAEA,eAAsB,kBACpB,KACA,uBACA,wBACA,aACA,iBACA,gBACA,eACA,oBACA,oBACA,oBACA,QACA,UACA,MAC4B;AAC5B,QAAM,OAAOA,oBAAmB;AAAA,IAC9B,KAAK;AAAA,IACL,cAAc;AAAA,IACd,MAAM;AAAA;AAAA,MAEJ;AAAA;AAAA,MAEA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF,CAAC;AAED,QAAM,CAAC,OAAO,GAAG,IAAI,MAAM,QAAQ,IAAI;AAAA,IACrC,IAAI,SAAS,IAAI;AAAA,IACjB,IAAI,YAAY,MAAM,IAAI,eAAe,IAAI;AAAA,EAC/C,CAAC;AAED,SAAO;AAAA,IACL;AAAA,IACA,IAAI,IAAI;AAAA,IACR;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;;;AC1FA;AAAA,EAEE;AAAA,EACA,sBAAAC;AAAA,EACA,QAAAC;AAAA,OACK;AAsCA,IAAM,aAAN,MAAM,YAAW;AAAA,EAMtB,YAAY,QAAsB,aAAqB;AAHvD,SAAQ,eACN;AAGA,SAAK,SAAS;AACd,SAAK,cAAc;AAAA,EACrB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,aAAa,cAAc,iBAA8C;AACvE,UAAM,QAAQ,YAAW,UAAU,eAAe;AAElD,QAAI,CAAC,MAAM,aAAa;AACtB,YAAM,IAAI;AAAA,QACR,2CAA2C,eAAe;AAAA,MAC5D;AAAA,IACF;AAEA,UAAM,eAAeC,oBAAmB;AAAA,MACtC,WAAWC,MAAK,MAAM,MAAM;AAAA,IAC9B,CAAC;AAED,WAAO,IAAI,YAAW,cAAc,MAAM,WAAW;AAAA,EACvD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,OAAe,UAAU,iBAAyB;AAChD,QAAI;AACF,aAAO,cAAc,oBAAoB,eAAe;AAAA,IAC1D,QAAQ;AAEN,YAAM,YAAY,cAAc,aAAa;AAC7C,YAAM,sBAAsB,UACzB,IAAI,CAAC,UAAU,MAAM,SAAS,EAC9B,OAAO,OAAO,EACd,KAAK,IAAI;AAEZ,YAAM,IAAI;AAAA,QACR,kBAAkB,eAAe,wDACL,mBAAmB;AAAA,MACjD;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,mBACZ,iBACA,YACA,cAAc,GACY;AAC1B,QAAI;AACF,YAAM,UAAU,MAAM,KAAK,OAAO,sBAAsB;AAAA,QACtD,MAAM;AAAA,MACR,CAAC;AAED,YAAM,aAAa,QAAQ,KAAK;AAAA,QAC9B,CAACC,SACCA,KAAI,OAAO,CAAC,KACZA,KAAI,OAAO,CAAC,EAAE,YAAY,MAAM,KAAK,aAAa,YAAY;AAAA,MAClE;AAEA,UAAI,CAAC,WAAW,QAAQ;AACtB,cAAM,IAAI,MAAM,8CAA8C;AAAA,MAChE;AAEA,UAAI,eAAe,WAAW,QAAQ;AACpC,cAAM,IAAI;AAAA,UACR,gBAAgB,WAAW,oCAAoC,WAAW,SAAS,CAAC;AAAA,QACtF;AAAA,MACF;AAEA,YAAM,MAAM,WAAW,WAAW;AAElC,UAAI,CAAC,KAAK;AACR,cAAM,IAAI,MAAM,sBAAsB;AAAA,MACxC;AAEA,YAAM,UAAU,eAAe;AAAA,QAC7B,KAAK;AAAA,QACL,MAAM,IAAI;AAAA,QACV,QAAQ,IAAI;AAAA,MACd,CAAC;AAED,UAAI,QAAQ,cAAc,eAAe;AACvC,cAAM,IAAI,MAAM,sBAAsB;AAAA,MACxC;AAEA,YAAM,OAAO,QAAQ;AAUrB,YAAM;AAAA,QACJ;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACF,IAAI;AAEJ,aAAO;AAAA,QACL,eAAe,OAAO,aAAa;AAAA,QACnC,oBAAoB;AAAA,QACpB,oBAAoB,OAAO,kBAAkB;AAAA,QAC7C;AAAA,QACA;AAAA,QACA,UAAW,YAAuB;AAAA,QAClC,cAAc,OAAO,YAAY;AAAA,MACnC;AAAA,IACF,SAAS,OAAO;AACd,UAAI,iBAAiB,OAAO;AAC1B,cAAM,IAAI,MAAM,mCAAmC,MAAM,OAAO,EAAE;AAAA,MACpE;AACA,YAAM,IAAI,MAAM,+CAA+C;AAAA,IACjE;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAc,iBACZ,WACA,cACsB;AACtB,QAAI;AACF,YAAM,UAAU,KAAK,YAAY,SAAS,GAAG,IACzC,KAAK,cACL,GAAG,KAAK,WAAW;AACvB,YAAM,MAAM,GAAG,OAAO,0BAA0B,SAAS,iBAAiB,YAAY;AAEtF,YAAM,WAAW,MAAM,MAAM,GAAG;AAChC,UAAI,CAAC,SAAS,IAAI;AAChB,cAAM,IAAI;AAAA,UACR,iCAAiC,SAAS,UAAU,KAAK,SAAS,MAAM;AAAA,QAC1E;AAAA,MACF;AAEA,YAAM,OAAQ,MAAM,SAAS,KAAK;AAElC,UAAI,CAAC,KAAK,OAAO;AACf,cAAM,IAAI,MAAM,6CAA6C;AAAA,MAC/D;AAEA,aAAO,KAAK;AAAA,IACd,SAAS,OAAO;AACd,UAAI,iBAAiB,OAAO;AAC1B,cAAM,IAAI,MAAM,iCAAiC,MAAM,OAAO,EAAE;AAAA,MAClE;AACA,YAAM,IAAI,MAAM,6CAA6C;AAAA,IAC/D;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKQ,mBACN,YACA,iBACQ;AACR,UAAM,eAAe,OAAO,KAAK,EAAE;AAEnC,QAAI,OAAO,eAAe,MAAM,OAAO,CAAC,GAAG;AACzC,aAAO,OAAO,UAAU,IAAI;AAAA,IAC9B,OAAO;AACL,aAAO,OAAO,UAAU,IAAI,OAAO,kBAAkB,CAAC,IAAI,OAAO,KAAK,EAAE;AAAA,IAC1E;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,qBACJ,iBACA,iBACA,cAAc,GACS;AAEvB,UAAM,cAAc,MAAM,KAAK;AAAA,MAC7B;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAGA,UAAM,QAAQ,MAAM,KAAK;AAAA,MACvB;AAAA,MACA,YAAY;AAAA,IACd;AAGA,UAAM,cAAc,KAAK;AAAA,MACvB,YAAY;AAAA,MACZ;AAAA,IACF;AAEA,WAAO;AAAA,MACL,UAAU,MAAM;AAAA,MAChB,gBAAgB,MAAM;AAAA,MACtB,aAAa,YAAY,SAAS;AAAA,MAClC,iBAAiB,MAAM;AAAA,MACvB,gBAAgB,MAAM;AAAA,MACtB,eAAe,YAAY;AAAA,MAC3B,oBAAoB,YAAY;AAAA,MAChC,oBAAoB,YAAY;AAAA,MAChC,oBAAoB,YAAY;AAAA,MAChC,QAAQ,YAAY;AAAA,MACpB,UAAU,YAAY;AAAA,IACxB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,sBACJ,iBACA,iBACA,cAAc,GACa;AAC3B,UAAM,UAAU,MAAM,KAAK;AAAA,MACzB;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAEA,WAAO;AAAA,MACL,uBAAuB,QAAQ;AAAA,MAC/B,wBACE,QAAQ;AAAA,MACV,aAAa,OAAO,QAAQ,WAAW;AAAA,MACvC,iBAAiB,QAAQ;AAAA,MACzB,gBAAgB,QAAQ;AAAA,MACxB,eAAe,QAAQ;AAAA,MACvB,oBAAoB,QAAQ;AAAA,MAC5B,oBAAoB,QAAQ;AAAA,MAC5B,oBAAoB,QAAQ;AAAA,MAC5B,QAAQ,QAAQ;AAAA,MAChB,UAAU,QAAQ;AAAA,IACpB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,wBACJ,iBACA,iBACA,cAAc,GACe;AAC7B,UAAM,UAAU,MAAM,KAAK;AAAA,MACzB;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAEA,WAAO;AAAA,MACL,uBAAuB,QAAQ;AAAA,MAC/B,wBACE,QAAQ;AAAA,MACV,aAAa,OAAO,QAAQ,WAAW;AAAA,MACvC,iBAAiB,QAAQ;AAAA,MACzB,gBAAgB,QAAQ;AAAA,MACxB,eAAe,QAAQ;AAAA,MACvB,oBAAoB,QAAQ;AAAA,MAC5B,oBAAoB,QAAQ;AAAA,MAC5B,oBAAoB,QAAQ;AAAA,MAC5B,QAAQ,QAAQ;AAAA,MAChB,UAAU,QAAQ;AAAA,IACpB;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,mBACJ,iBACA,iBACA,cAAc,GACY;AAC1B,WAAO,KAAK;AAAA,MACV;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACF;;;ACrUO,IAAM,SAAN,cAAqB,aAAa;AAAA,EAGvC,YAAY,QAAsB;AAChC,UAAM,EAAE,QAAQ,OAAO,QAAQ,SAAS,OAAO,QAAQ,CAAC;AACxD,SAAK,gBAAgB,OAAO;AAAA,EAC9B;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,iBACJ,QACA,MAC4B;AAC5B,oBAAgB;AAAA,MACd,OAAO;AAAA,MACP;AAAA,IACF;AACA,oBAAgB,gBAAgB,OAAO,OAAO,eAAe;AAE7D,WAAO;AAAA,MACL;AAAA,QACE,eAAe,KAAK;AAAA,QACpB,aAAa,CAAC,MAAM,IAAIC,UAAS,KAAK,YAAY,MAAM,IAAIA,KAAI;AAAA,QAChE,UAAU,CAAC,YAAY,KAAK,SAAS,OAAO;AAAA,MAC9C;AAAA,MACA,OAAO;AAAA,MACP,OAAO;AAAA,MACP,OAAO,OAAO,MAAM;AAAA,MACpB,OAAO;AAAA,MACP,OAAO;AAAA,MACP,OAAO;AAAA,MACP;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,gBACJ,QACA,MAC4B;AAC5B,oBAAgB;AAAA,MACd,OAAO;AAAA,MACP;AAAA,IACF;AACA,oBAAgB;AAAA,MACd,OAAO;AAAA,MACP;AAAA,IACF;AAEA,WAAO;AAAA,MACL;AAAA,QACE,eAAe,KAAK;AAAA,QACpB,aAAa,CAAC,MAAM,IAAIA,UAAS,KAAK,YAAY,MAAM,IAAIA,KAAI;AAAA,QAChE,UAAU,CAAC,YAAY,KAAK,SAAS,OAAO;AAAA,MAC9C;AAAA,MACA,OAAO;AAAA,MACP,OAAO;AAAA,MACP,OAAO;AAAA,MACP,OAAO;AAAA,MACP,OAAO;AAAA,MACP,OAAO;AAAA,MACP,OAAO;AAAA,MACP,OAAO;AAAA,MACP,OAAO;AAAA,MACP,OAAO;AAAA,MACP,OAAO;AAAA,MACP;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,UAAU,QAA2C;AACzD,UAAM,SAAS,MAAM,KAAK,OAAO,aAAa;AAAA,MAC5C,SAAS,KAAK;AAAA,MACd,KAAK;AAAA,MACL,cAAc;AAAA,MACd,MAAM,CAAC,OAAO,WAAW,OAAO,mBAAmB;AAAA,IACrD,CAAC;AACD,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,uBAAuB,QAA6C;AACxE,oBAAgB;AAAA,MACd,OAAO;AAAA,MACP;AAAA,IACF;AAEA,UAAM,SAAS,MAAM,KAAK,OAAO,aAAa;AAAA,MAC5C,SAAS,KAAK;AAAA,MACd,KAAK;AAAA,MACL,cAAc;AAAA,MACd,MAAM,CAAC,OAAO,eAAe,OAAO,kBAAmC;AAAA,IACzE,CAAC;AACD,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,eAAgC;AACpC,UAAM,SAAS,MAAM,KAAK,OAAO,aAAa;AAAA,MAC5C,SAAS,KAAK;AAAA,MACd,KAAK;AAAA,MACL,cAAc;AAAA,MACd,MAAM,CAAC;AAAA,IACT,CAAC;AACD,WAAO,OAAO,MAAM;AAAA,EACtB;AAAA;AAAA;AAAA;AAAA,EAKA,mBAA2B;AACzB,WAAO,KAAK;AAAA,EACd;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,mBACJ,QACA,MAC4B;AAC5B,oBAAgB;AAAA,MACd,OAAO;AAAA,MACP;AAAA,IACF;AAEA,WAAO;AAAA,MACL;AAAA,QACE,eAAe,KAAK;AAAA,QACpB,aAAa,CAAC,MAAM,IAAIA,UAAS,KAAK,YAAY,MAAM,IAAIA,KAAI;AAAA,QAChE,UAAU,CAAC,YAAY,KAAK,SAAS,OAAO;AAAA,MAC9C;AAAA,MACA,OAAO;AAAA,MACP,OAAO;AAAA,MACP,OAAO;AAAA,MACP,OAAO,cAAc;AAAA,MACrB;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,kBACJ,QACA,MAC4B;AAC5B,oBAAgB;AAAA,MACd,OAAO;AAAA,MACP;AAAA,IACF;AACA,oBAAgB;AAAA,MACd,OAAO;AAAA,MACP;AAAA,IACF;AAEA,WAAO;AAAA,MACL;AAAA,QACE,eAAe,KAAK;AAAA,QACpB,aAAa,CAAC,MAAM,IAAIA,UAAS,KAAK,YAAY,MAAM,IAAIA,KAAI;AAAA,QAChE,UAAU,CAAC,YAAY,KAAK,SAAS,OAAO;AAAA,MAC9C;AAAA,MACA,OAAO;AAAA,MACP,OAAO;AAAA,MACP,OAAO;AAAA,MACP,OAAO;AAAA,MACP,OAAO;AAAA,MACP,OAAO;AAAA,MACP,OAAO;AAAA,MACP,OAAO;AAAA,MACP,OAAO;AAAA,MACP,OAAO;AAAA,MACP,OAAO;AAAA,MACP;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,+BACJ,QACiB;AACjB,oBAAgB;AAAA,MACd,OAAO;AAAA,MACP;AAAA,IACF;AAEA,UAAM,SAAS,MAAM,KAAK,OAAO,aAAa;AAAA,MAC5C,SAAS,KAAK;AAAA,MACd,KAAK;AAAA,MACL,cAAc;AAAA,MACd,MAAM,CAAC,OAAO,eAAe,OAAO,kBAAmC;AAAA,IACzE,CAAC;AACD,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,mBACJ,QACoC;AACpC,oBAAgB;AAAA,MACd,OAAO;AAAA,MACP;AAAA,IACF;AAEA,UAAM,SAAS,MAAM,KAAK,OAAO,aAAa;AAAA,MAC5C,SAAS,KAAK;AAAA,MACd,KAAK;AAAA,MACL,cAAc;AAAA,MACd,MAAM,CAAC,OAAO,YAA6B;AAAA,IAC7C,CAAC;AACD,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,MAAM,wBACJ,iBACA,iBACA,cAAc,GACd,MAC4B;AAC5B,UAAM,aAAa,MAAM,WAAW,cAAc,eAAe;AACjE,UAAM,SAAS,MAAM,WAAW;AAAA,MAC9B;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAEA,WAAO,KAAK,gBAAgB,QAAQ,IAAI;AAAA,EAC1C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,MAAM,0BACJ,iBACA,iBACA,cAAc,GACd,MAC4B;AAC5B,UAAM,aAAa,MAAM,WAAW,cAAc,eAAe;AACjE,UAAM,SAAS,MAAM,WAAW;AAAA,MAC9B;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAEA,WAAO,KAAK,kBAAkB,QAAQ,IAAI;AAAA,EAC5C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAM,mBACJ,iBACA,iBACA,cAAc,GACd;AACA,UAAM,aAAa,MAAM,WAAW,cAAc,eAAe;AACjE,WAAO,WAAW;AAAA,MAChB;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AACF;;;AC7TO,IAAM,OAAO;AAAA,EAClB,QAAQ;AAAA,EACR,OAAO;AACT;AAOO,SAAS,OAAO,cAA4B;AACjD,SAAO,KAAK,YAAY;AAC1B;;;ACCO,IAAM,QAAN,cAAoB,aAAa;AAAA,EAItC,YAAY,QAAqB;AAC/B,UAAM,EAAE,QAAQ,OAAO,QAAQ,SAAS,OAAO,QAAQ,CAAC;AACxD,SAAK,eAAe,OAAO;AAC3B,SAAK,SAAS;AAAA,EAChB;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,WAAW,SAAkC;AACjD,oBAAgB,gBAAgB,SAAS,SAAS;AAElD,UAAM,UAAU,MAAM,KAAK,OAAO,aAAa;AAAA,MAC7C,SAAS,KAAK;AAAA,MACd,KAAK,OAAO,OAAO;AAAA,MACnB,cAAc;AAAA,MACd,MAAM,CAAC,OAAkB;AAAA,IAC3B,CAAC;AACD,WAAO,QAAQ,SAAS;AAAA,EAC1B;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,aAAa,OAAe,SAAkC;AAClE,oBAAgB,gBAAgB,OAAO,eAAe;AACtD,oBAAgB,gBAAgB,SAAS,iBAAiB;AAE1D,QAAI;AACF,YAAM,YAAY,MAAM,KAAK,OAAO,aAAa;AAAA,QAC/C,SAAS,KAAK;AAAA,QACd,KAAK,OAAO,OAAO;AAAA,QACnB,cAAc;AAAA,QACd,MAAM,CAAC,OAAkB,OAAkB;AAAA,MAC7C,CAAC;AACD,aAAO,UAAU,SAAS;AAAA,IAC5B,SAAS,OAAO;AACd,YAAM,IAAI;AAAA,QACR,4BAA4B,iBAAiB,QAAQ,MAAM,UAAU,eAAe;AAAA,MACtF;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,aACJ,SACA,QACA,MAC4B;AAC5B,oBAAgB,gBAAgB,SAAS,iBAAiB;AAC1D,oBAAgB,eAAe,QAAQ,QAAQ;AAE/C,WAAO;AAAA,MACL;AAAA,QACE,cAAc,KAAK;AAAA,QACnB,aAAa,CAAC,MAAMC,UAClB,KAAK,YAAY,MAAM,KAAK,cAAcA,KAAI;AAAA,QAChD,UAAU,CAAC,YAAY,KAAK,SAAS,OAAO;AAAA,MAC9C;AAAA,MACA;AAAA,MACA,OAAO,MAAM;AAAA,MACb;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,cACJ,IACA,QACA,MAC4B;AAC5B,oBAAgB,gBAAgB,IAAI,mBAAmB;AACvD,oBAAgB,eAAe,QAAQ,QAAQ;AAE/C,WAAO;AAAA,MACL;AAAA,QACE,cAAc,KAAK;AAAA,QACnB,aAAa,CAAC,MAAMA,UAClB,KAAK,YAAY,MAAM,KAAK,cAAcA,KAAI;AAAA,QAChD,UAAU,CAAC,YAAY,KAAK,SAAS,OAAO;AAAA,MAC9C;AAAA,MACA;AAAA,MACA,OAAO,MAAM;AAAA,MACb;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,kBACJ,MACA,IACA,QACA,SAC4B;AAC5B,oBAAgB,gBAAgB,MAAM,eAAe;AACrD,oBAAgB,gBAAgB,IAAI,mBAAmB;AACvD,oBAAgB,eAAe,QAAQ,QAAQ;AAE/C,WAAO;AAAA,MACL;AAAA,QACE,cAAc,KAAK;AAAA,QACnB,aAAa,CAAC,MAAMA,UAClB,KAAK,YAAY,MAAM,KAAK,cAAcA,KAAI;AAAA,QAChD,UAAU,CAAC,YAAY,KAAK,SAAS,OAAO;AAAA,MAC9C;AAAA,MACA;AAAA,MACA;AAAA,MACA,OAAO,MAAM;AAAA,MACb;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,SACJ,oBACA,oBACA,QACA,MACA,UAAyB,CAAC,GACE;AAC5B,oBAAgB,gBAAgB,oBAAoB,qBAAqB;AACzE,oBAAgB,eAAe,QAAQ,QAAQ;AAE/C,UAAM,SAAS,KAAK,UAAU;AAE9B,WAAO,OAAO;AAAA,MACZ;AAAA,QACE;AAAA,QACA;AAAA,QACA;AAAA,QACA,OAAO,KAAK;AAAA,QACZ,2BAA2B,QAAQ,6BAA6B;AAAA,QAChE,YAAY,QAAQ,cAAc;AAAA,MACpC;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,kBAAmC;AACvC,UAAM,SAAS,KAAK,UAAU;AAC9B,WAAO,OAAO,uBAAuB;AAAA,MACnC,eAAe,KAAK,OAAO;AAAA,MAC3B,oBAAoB,KAAK;AAAA,IAC3B,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,MAAM,WACJ,iBACA,iBACA,cAAc,GACd,MAC4B;AAC5B,UAAM,SAAS,KAAK,UAAU;AAC9B,WAAO,OAAO;AAAA,MACZ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAUA,MAAM,aACJ,iBACA,iBACA,cAAc,GACd,MAC4B;AAC5B,UAAM,SAAS,KAAK,UAAU;AAC9B,WAAO,OAAO;AAAA,MACZ;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EASA,MAAM,mBACJ,iBACA,iBACA,cAAc,GACd;AACA,UAAM,SAAS,KAAK,UAAU;AAC9B,WAAO,OAAO;AAAA,MACZ;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEQ,YAAoB;AAC1B,UAAM,QAAQ,cAAc,SAAS,KAAK,OAAO,OAAO;AACxD,QAAI,CAAC,MAAM,eAAe;AACxB,YAAM,IAAI;AAAA,QACR,4CAA4C,KAAK,OAAO,OAAO;AAAA,MACjE;AAAA,IACF;AAEA,WAAO,IAAI,OAAO;AAAA,MAChB,eAAe,MAAM;AAAA,MACrB,QAAQ,KAAK,OAAO;AAAA,MACpB,SAAS,KAAK,OAAO;AAAA,IACvB,CAAC;AAAA,EACH;AACF;;;AC9PA,SAAS,sBAAAC,qBAAoB,QAAAC,aAA0B;;;ACJhD,IAAM,WAAW;AAAA,EACtB,SAAS;AAAA,EACT,SAAS;AACX;AAEO,IAAM,kBAAkB,SAAS;;;ADQjC,IAAM,eAAN,MAAmB;AAAA,EAIxB,YAAY,QAAsB;AAChC,SAAK,SAAS;AACd,SAAK,iBAAiB,KAAK,OAAO,kBAAkB;AAGpD,QAAI,KAAK,OAAO,QAAQ;AACtB,WAAK,OAAO,OAAO,QAAQ,CAAC,UAAU;AACpC,sBAAc,cAAc,KAAK;AAAA,MACnC,CAAC;AAAA,IACH;AAGA,QAAI,KAAK,OAAO,eAAe;AAC7B,aAAO,QAAQ,KAAK,OAAO,aAAa,EAAE,QAAQ,CAAC,CAAC,SAAS,MAAM,MAAM;AACvE,sBAAc,gBAAgB,OAAO,OAAO,GAAG,MAAM;AAAA,MACvD,CAAC;AAAA,IACH;AAAA,EACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,WAAW,WAAmB;AAC5B,WAAO,cAAc,SAAS,SAAS;AAAA,EACzC;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,uBAAiC;AAC/B,WAAO,cAAc,qBAAqB;AAAA,EAC5C;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,oBAA4B;AAC1B,WAAO,KAAK;AAAA,EACd;AAAA;AAAA;AAAA;AAAA,EAKA,mBAAmB;AACjB,WAAO;AAAA,EACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,cAAsB,WAA2B;AACrD,UAAM,UAAU,KAAK,WAAW,aAAa,KAAK,cAAc;AAEhE,WAAO,IAAI,MAAM;AAAA,MACf;AAAA,MACA,QAAQ,QAAQ;AAAA,MAChB,SAAS,QAAQ;AAAA,IACnB,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,MAAM,iBAAiB,SAAiB,WAAqC;AAC3E,oBAAgB,gBAAgB,SAAS,SAAS;AAClD,UAAM,UAAU,KAAK,WAAW,aAAa,KAAK,cAAc;AAEhE,UAAM,SAASC,oBAAmB;AAAA,MAChC,OAAO;AAAA,QACL,IAAI,QAAQ;AAAA,QACZ,MAAM,QAAQ;AAAA,QACd,gBAAgB,QAAQ;AAAA,QACxB,SAAS;AAAA,UACP,SAAS,EAAE,MAAM,CAAC,QAAQ,MAAM,EAAE;AAAA,UAClC,QAAQ,EAAE,MAAM,CAAC,QAAQ,MAAM,EAAE;AAAA,QACnC;AAAA,MACF;AAAA,MACA,WAAWC,MAAK,QAAQ,MAAM;AAAA,IAChC,CAAC;AAED,UAAM,UAAU,MAAM,OAAO,WAAW,EAAE,QAA4B,CAAC;AACvE,WAAO,QAAQ,SAAS;AAAA,EAC1B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAQA,OAAO,eAAuB,WAA4B;AACxD,UAAM,UAAU,KAAK,WAAW,aAAa,KAAK,cAAc;AAEhE,WAAO,IAAI,OAAO;AAAA,MAChB;AAAA,MACA,QAAQ,QAAQ;AAAA,MAChB,SAAS,QAAQ;AAAA,IACnB,CAAC;AAAA,EACH;AACF;;;AE/HO,IAAM,YAAY;AAAA,EACvB,MAAM;AAAA,EACN,QAAQ;AACV;;;AC6BO,IAAM,aAAN,MAAiB;AAAA,EAGtB,YAAY,QAA0B;AACpC,SAAK,SAAS;AAAA,MACZ,SAAS;AAAA,MACT,SAAS;AAAA,MACT,YAAY;AAAA,MACZ,gBAAgB;AAAA,QACd,gBAAgB;AAAA,MAClB;AAAA,MACA,GAAG;AAAA,IACL;AAAA,EACF;AAAA,EAEA,MAAM,QAAW,KAAa,QAA6C;AACzE,UAAM,UAAU,KAAK,SAAS,GAAG;AACjC,UAAM,gBAAgB,KAAK,mBAAmB,MAAM;AAEpD,QAAI;AAEJ,aAAS,UAAU,GAAG,YAAY,KAAK,OAAO,WAAW,IAAI,WAAW;AACtE,UAAI;AACF,cAAM,WAAW,MAAM,KAAK,YAAe,SAAS,aAAa;AACjE,eAAO;AAAA,MACT,SAAS,OAAO;AACd,oBAAY;AAEZ,YACE,aAAa,KAAK,OAAO,WAAW,MACpC,CAAC,KAAK,iBAAiB,KAAK,GAC5B;AACA;AAAA,QACF;AAEA,YAAI,WAAW,KAAK,OAAO,WAAW,IAAI;AACxC,gBAAM,KAAK;AAAA,aACR,KAAK,OAAO,cAAc,OAAQ,KAAK,IAAI,GAAG,OAAO;AAAA,UACxD;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAEA,UAAM,IAAI;AAAA,MACR,wBAAwB,KAAK,OAAO,WAAW,CAAC,aAAa,WAAW,WAAW,eAAe;AAAA,IACpG;AAAA,EACF;AAAA,EAEA,MAAM,IACJ,KACA,QACsB;AACtB,UAAM,cAAc,SAAS,KAAK,iBAAiB,MAAM,IAAI;AAC7D,UAAM,UAAU,cAAc,GAAG,GAAG,IAAI,WAAW,KAAK;AAExD,WAAO,KAAK,QAAW,SAAS,EAAE,QAAQ,MAAM,CAAC;AAAA,EACnD;AAAA,EAEA,MAAM,KACJ,KACA,MACA,QACsB;AACtB,WAAO,KAAK,QAAW,KAAK;AAAA,MAC1B,QAAQ;AAAA,MACR,MAAM;AAAA,MACN,GAAG;AAAA,IACL,CAAC;AAAA,EACH;AAAA,EAEQ,SAAS,KAAqB;AACpC,QAAI,IAAI,WAAW,SAAS,KAAK,IAAI,WAAW,UAAU,GAAG;AAC3D,aAAO;AAAA,IACT;AACA,WAAO,GAAG,KAAK,OAAO,OAAO,GAAG,IAAI,WAAW,GAAG,IAAI,MAAM,IAAI,GAAG,EAAE;AAAA,EACvE;AAAA,EAEQ,mBAAmB,QAAoC;AAC7D,UAAM,UAAU,IAAI,QAAQ,KAAK,OAAO,cAAc;AAEtD,QAAI,OAAO,SAAS;AAClB,aAAO,QAAQ,OAAO,OAAO,EAAE,QAAQ,CAAC,CAAC,KAAK,KAAK,MAAM;AACvD,gBAAQ,IAAI,KAAK,KAAK;AAAA,MACxB,CAAC;AAAA,IACH;AAEA,UAAM,gBAA6B;AAAA,MACjC,QAAQ,OAAO;AAAA,MACf;AAAA,IACF;AAEA,QAAI,OAAO,MAAM;AACf,UAAI,OAAO,OAAO,SAAS,UAAU;AACnC,sBAAc,OAAO,OAAO;AAAA,MAC9B,OAAO;AACL,sBAAc,OAAO,KAAK,UAAU,OAAO,IAAI;AAAA,MACjD;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,MAAc,YACZ,KACA,QACsB;AACtB,UAAM,aAAa,IAAI,gBAAgB;AACvC,UAAM,YAAY,WAAW,MAAM,WAAW,MAAM,GAAG,KAAK,OAAO,OAAO;AAE1E,QAAI;AACF,YAAM,WAAW,MAAM,MAAM,KAAK;AAAA,QAChC,GAAG;AAAA,QACH,QAAQ,WAAW;AAAA,MACrB,CAAC;AAED,mBAAa,SAAS;AAEtB,UAAI,CAAC,SAAS,IAAI;AAChB,cAAM,IAAI,MAAM,QAAQ,SAAS,MAAM,KAAK,SAAS,UAAU,EAAE;AAAA,MACnE;AAEA,UAAI;AACJ,YAAM,cAAc,SAAS,QAAQ,IAAI,cAAc;AAEvD,UAAI,aAAa,SAAS,kBAAkB,GAAG;AAC7C,eAAQ,MAAM,SAAS,KAAK;AAAA,MAC9B,OAAO;AACL,eAAQ,MAAM,SAAS,KAAK;AAAA,MAC9B;AAEA,aAAO;AAAA,QACL;AAAA,QACA,QAAQ,SAAS;AAAA,QACjB,YAAY,SAAS;AAAA,QACrB,SAAS,SAAS;AAAA,QAClB,IAAI,SAAS;AAAA,MACf;AAAA,IACF,SAAS,OAAO;AACd,mBAAa,SAAS;AAEtB,UAAI,iBAAiB,SAAS,MAAM,SAAS,cAAc;AACzD,cAAM,IAAI,MAAM,yBAAyB,KAAK,OAAO,OAAO,IAAI;AAAA,MAClE;AAEA,YAAM;AAAA,IACR;AAAA,EACF;AAAA,EAEQ,iBAAiB,QAAyC;AAChE,UAAM,kBAAkB,KAAK,cAAc,MAAM;AAEjD,WAAO,OAAO,QAAQ,eAAe,EAClC,OAAO,CAAC,CAAC,EAAE,KAAK,MAAM,UAAU,UAAa,UAAU,IAAI,EAC3D;AAAA,MACC,CAAC,CAAC,KAAK,KAAK,MACV,GAAG,mBAAmB,GAAG,CAAC,IAAI,mBAAmB,OAAO,KAAK,CAAC,CAAC;AAAA,IACnE,EACC,KAAK,GAAG;AAAA,EACb;AAAA,EAEQ,cACN,QACA,SAAS,IACwB;AACjC,UAAM,SAA0C,CAAC;AAEjD,eAAW,CAAC,KAAK,KAAK,KAAK,OAAO,QAAQ,MAAM,GAAG;AACjD,YAAM,UAAU,SAAS,GAAG,MAAM,IAAI,GAAG,MAAM;AAE/C,UAAI,UAAU,UAAa,UAAU,MAAM;AACzC;AAAA,MACF;AAEA,UAAI,MAAM,QAAQ,KAAK,GAAG;AACxB,cAAM,QAAQ,CAAC,MAAM,UAAU;AAC7B,cAAI,SAAS,UAAa,SAAS,MAAM;AACvC,mBAAO,GAAG,OAAO,IAAI,KAAK,GAAG,IAAI,OAAO,IAAI;AAAA,UAC9C;AAAA,QACF,CAAC;AAAA,MACH,WAAW,OAAO,UAAU,UAAU;AACpC,eAAO;AAAA,UACL;AAAA,UACA,KAAK,cAAc,OAAkC,OAAO;AAAA,QAC9D;AAAA,MACF,OAAO;AACL,eAAO,OAAO,IAAI,OAAO,KAAK;AAAA,MAChC;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAAA,EAEQ,iBAAiB,OAAyB;AAChD,QAAI,iBAAiB,OAAO;AAC1B,YAAM,UAAU,MAAM,QAAQ,YAAY;AAC1C,aACE,QAAQ,SAAS,SAAS,KAC1B,QAAQ,SAAS,SAAS,KAC1B,QAAQ,SAAS,OAAO;AAAA,IAE5B;AACA,WAAO;AAAA,EACT;AAAA,EAEQ,MAAM,IAA2B;AACvC,WAAO,IAAI,QAAQ,CAAC,YAAY,WAAW,SAAS,EAAE,CAAC;AAAA,EACzD;AACF;;;AChOO,IAAM,gBAAN,MAAoB;AAAA,EAGzB,YAAY,EAAE,SAAS,QAAQ,GAAyC;AACtE,SAAK,aAAa,IAAI,WAAW,EAAE,SAAS,QAAQ,CAAC;AAAA,EACvD;AAAA;AAAA,EAGA,MAAM,OAAO;AAAA,IACX,sBAAsB;AAAA,IACtB,QAAQ;AAAA,IACR;AAAA,IACA;AAAA,EACF,IAAuB,CAAC,GAAmD;AACzE,WAAO,KAAK,WAAW,IAAI,oBAAoB;AAAA,MAC7C;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,OACJ,qBACgD;AAChD,WAAO,KAAK,WAAW,KAAK,WAAW,mBAAmB;AAAA,EAC5D;AAAA,EAEA,MAAM,iBACJ,6BAC0D;AAC1D,WAAO,KAAK,WAAW;AAAA,MACrB;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,aACJ,gCACsD;AACtD,WAAO,KAAK,WAAW,IAAI,iBAAiB;AAAA,MAC1C;AAAA,IACF,CAAC;AAAA,EACH;AACF;;;AC7CO,IAAM,aAAN,MAAiB;AAAA,EAItB,YAAY,QAAoB;AAC9B,SAAK,SAAS;AAEd,QAAI,CAAC,KAAK,QAAQ;AAChB,YAAM,IAAI,MAAM,oBAAoB;AAAA,IACtC;AAEA,QAAI,CAAC,KAAK,OAAO,YAAY;AAC3B,YAAM,IAAI,MAAM,0BAA0B;AAAA,IAC5C;AAEA,UAAM,EAAE,YAAY,WAAW,IAAI,KAAK;AAExC,SAAK,gBAAgB,IAAI,cAAc;AAAA,MACrC,SAAS;AAAA,MACT,SAAS,cAAc;AAAA,IACzB,CAAC;AAAA,EACH;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,eAAwC;AAE5C,UAAM,WAAW,MAAM,KAAK,cAAc,OAAO;AACjD,QAAI,SAAS,KAAK,WAAW,WAAW;AACtC,aAAO,SAAS,KAAK;AAAA,IACvB;AACA,UAAM,IAAI,MAAM,SAAS,KAAK,OAAO;AAAA,EACvC;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,2BAA2B,KAAwC;AAEvE,UAAM,WAAW,MAAM,KAAK,cAAc,OAAO,EAAE,UAAU,IAAI,CAAC;AAClE,QAAI,SAAS,KAAK,WAAW,WAAW;AACtC,aAAO,SAAS,KAAK;AAAA,IACvB;AACA,UAAM,IAAI,MAAM,SAAS,KAAK,OAAO;AAAA,EACvC;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,YAAqC;AACzC,UAAM,WAAW,MAAM,KAAK,cAAc,OAAO;AAAA,MAC/C,qBAAqB;AAAA,IACvB,CAAC;AACD,QAAI,SAAS,KAAK,WAAW,WAAW;AACtC,aAAO,SAAS,KAAK;AAAA,IACvB;AACA,UAAM,IAAI,MAAM,SAAS,KAAK,OAAO;AAAA,EACvC;AAAA;AAAA;AAAA;AAAA;AAAA,EAMA,MAAM,gCACJ,KACyB;AACzB,UAAM,WAAW,MAAM,KAAK,cAAc,OAAO;AAAA,MAC/C,UAAU;AAAA,MACV,qBAAqB;AAAA,IACvB,CAAC;AACD,QAAI,SAAS,KAAK,WAAW,WAAW;AACtC,aAAO,SAAS,KAAK;AAAA,IACvB;AACA,UAAM,IAAI,MAAM,SAAS,KAAK,OAAO;AAAA,EACvC;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,UACJ,qBACyB;AACzB,UAAM,WAAW,MAAM,KAAK,cAAc,OAAO,mBAAmB;AACpE,QAAI,SAAS,KAAK,WAAW,WAAW;AACtC,aAAO,SAAS,KAAK;AAAA,IACvB;AACA,UAAM,IAAI,MAAM,SAAS,KAAK,OAAO;AAAA,EACvC;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,iBACJ,6BACmC;AACnC,UAAM,WAAW,MAAM,KAAK,cAAc;AAAA,MACxC;AAAA,IACF;AACA,QAAI,SAAS,KAAK,WAAW,WAAW;AACtC,aAAO,SAAS,KAAK;AAAA,IACvB;AACA,UAAM,IAAI,MAAM,SAAS,KAAK,OAAO;AAAA,EACvC;AAAA;AAAA;AAAA;AAAA,EAKA,MAAM,gBACJ,gCAC+B;AAC/B,UAAM,WAAW,MAAM,KAAK,cAAc;AAAA,MACxC;AAAA,IACF;AACA,QAAI,SAAS,KAAK,WAAW,WAAW;AACtC,aAAO,SAAS,KAAK;AAAA,IACvB;AACA,UAAM,IAAI,MAAM,SAAS,KAAK,OAAO;AAAA,EACvC;AACF;;;ACzHO,IAAM,cAAN,MAAkB;AAAA,EAMvB,YAAY,QAAmB;AAC7B,SAAK,SAAS;AAYd,QAAI,CAAC,OAAO,QAAS,OAAO,QAAQ,OAAO,KAAK,WAAW,GAAI;AAC7D,WAAK,OAAO,OAAO,CAAC,MAAM;AAAA,IAC5B;AAEA,QAAI,OAAO,KAAK,SAAS,UAAU,IAAI,GAAG;AACxC,UAAI,CAAC,KAAK,OAAO,MAAM;AACrB,cAAM,IAAI,MAAM,yBAAyB;AAAA,MAC3C;AAEA,WAAK,OAAO,IAAI,WAAW,KAAK,OAAO,IAAI;AAAA,IAC7C;AAGA,QAAI,KAAK,OAAO,MAAM,SAAS,UAAU,MAAM,GAAG;AAChD,UAAI,CAAC,KAAK,OAAO,QAAQ;AACvB,cAAM,IAAI,MAAM,2BAA2B;AAAA,MAC7C;AAEA,YAAM,eAAe;AAAA,QACnB,gBAAgB,KAAK,OAAO,QAAQ,kBAAkB;AAAA,QACtD,GAAI,KAAK,OAAO,QAAQ,UAAU;AAAA,UAChC,QAAQ,KAAK,OAAO,OAAO;AAAA,QAC7B;AAAA,QACA,GAAI,KAAK,OAAO,QAAQ,iBAAiB;AAAA,UACvC,eAAe,KAAK,OAAO,OAAO;AAAA,QACpC;AAAA,MACF;AAEA,WAAK,SAAS,IAAI,aAAa,YAAY;AAAA,IAC7C;AAAA,EACF;AAAA;AAAA;AAAA;AAAA,EAKA,UAAsB;AACpB,QAAI,CAAC,KAAK,MAAM;AACd,YAAM,IAAI,MAAM,wDAAwD;AAAA,IAC1E;AACA,WAAO,KAAK;AAAA,EACd;AAAA;AAAA;AAAA;AAAA,EAKA,YAA0B;AACxB,QAAI,CAAC,KAAK,QAAQ;AAChB,YAAM,IAAI;AAAA,QACR;AAAA,MACF;AAAA,IACF;AACA,WAAO,KAAK;AAAA,EACd;AACF;","names":["chain","encodeFunctionData","encodeFunctionData","encodeFunctionData","encodeFunctionData","createPublicClient","http","createPublicClient","http","log","from","from","createPublicClient","http","createPublicClient","http"]}
|
|
1
|
+
{"version":3,"sources":["../src/native/chains/registry.ts","../src/native/utils/validation.ts","../src/native/base/contract.ts","../src/native/tokens/build.ts","../src/native/tokens/abi/erc20.ts","../src/native/bridge/build.ts","../src/native/bridge/abi/bridge.ts","../src/native/bridge/message.ts","../src/native/bridge/util.ts","../src/native/bridge/bridge.ts","../src/native/services/abi.ts","../src/native/tokens/erc20.ts","../src/native/index.ts","../src/constants.ts","../src/types/config.ts","../src/core/utils/httpClient.ts","../src/core/services/arcApi.ts","../src/core/index.ts","../src/index.ts"],"sourcesContent":["/**\n * Chain Registry\n *\n * Centralized chain configuration management\n */\n\nimport { type Chain } from 'viem';\n\nimport type { ChainConfig, CustomChainConfig } from '@/types';\n\nexport class ChainRegistry {\n private static instance: ChainRegistry;\n private chains: Map<number, ChainConfig> = new Map();\n private viemChains: Map<number, Chain> = new Map();\n\n private constructor() {\n this.initializeDefaultChains();\n }\n\n static getInstance(): ChainRegistry {\n if (!ChainRegistry.instance) {\n ChainRegistry.instance = new ChainRegistry();\n }\n return ChainRegistry.instance;\n }\n\n private initializeDefaultChains() {\n // Ethereum Sepolia Testnet\n this.registerChain({\n chainId: 11155111,\n networkId: 0,\n name: 'Ethereum Sepolia',\n rpcUrl: 'https://rpc.sepolia.org',\n nativeCurrency: { name: 'Sepolia Ether', symbol: 'ETH', decimals: 18 },\n blockExplorer: {\n name: 'Sepolia Etherscan',\n url: 'https://sepolia.etherscan.io',\n },\n bridgeAddress: '0x528e26b25a34a4A5d0dbDa1d57D318153d2ED582',\n proofApiUrl:\n 'https://api-gateway.polygon.technology/api/v3/proof/testnet/',\n isTestnet: true,\n });\n\n // Polygon Cardona Testnet\n this.registerChain({\n chainId: 2442,\n networkId: 1,\n name: 'Polygon Cardona',\n rpcUrl: 'https://rpc.cardona.zkevm-rpc.com',\n nativeCurrency: { name: 'Ethereum', symbol: 'ETH', decimals: 18 },\n blockExplorer: {\n name: 'Cardona PolygonScan',\n url: 'https://cardona-zkevm.polygonscan.com',\n },\n bridgeAddress: '0x528e26b25a34a4A5d0dbDa1d57D318153d2ED582',\n proofApiUrl:\n 'https://api-gateway.polygon.technology/api/v3/proof/testnet/',\n isTestnet: true,\n });\n }\n\n /**\n * Register a new chain\n */\n registerChain(config: ChainConfig): void {\n this.chains.set(config.chainId, config);\n\n // Create viem chain object\n const viemChain: Chain = {\n id: config.chainId,\n name: config.name,\n nativeCurrency: config.nativeCurrency,\n rpcUrls: {\n default: { http: [config.rpcUrl] },\n },\n };\n\n this.viemChains.set(config.chainId, viemChain);\n }\n\n /**\n * Get chain configuration by ID\n */\n getChain(chainId: number): ChainConfig {\n const chain = this.chains.get(chainId);\n if (!chain) {\n throw new Error(\n `Chain ${chainId} not found. Available chains: ${Array.from(this.chains.keys()).join(', ')}`\n );\n }\n return chain;\n }\n\n /**\n * Get chain configuration by network ID\n */\n getChainByNetworkId(networkId: number): ChainConfig {\n const chain = Array.from(this.chains.values()).find(\n (chain) => chain.networkId === networkId\n );\n if (!chain) {\n throw new Error(\n `Chain with network ID ${networkId} not found. Available network IDs: ${Array.from(\n this.chains.values()\n )\n .map((chain) => chain.networkId)\n .filter(Boolean)\n .join(', ')}`\n );\n }\n return chain;\n }\n\n /**\n * Get viem chain object by ID\n */\n getViemChain(chainId: number): Chain {\n const chain = this.viemChains.get(chainId);\n if (!chain) {\n throw new Error(\n `Chain ${chainId} not found. Available chains: ${Array.from(this.viemChains.keys()).join(', ')}`\n );\n }\n return chain;\n }\n\n /**\n * Get all registered chain IDs\n */\n getSupportedChainIds(): number[] {\n return Array.from(this.chains.keys());\n }\n\n /**\n * Get all registered chains\n */\n getAllChains(): ChainConfig[] {\n return Array.from(this.chains.values());\n }\n\n /**\n * Check if chain is supported\n */\n isChainSupported(chainId: number): boolean {\n return this.chains.has(chainId);\n }\n\n /**\n * Check if chain is supported by network ID\n */\n isChainSupportedByNetworkId(networkId: number): boolean {\n return Array.from(this.chains.values()).some(\n (chain) => chain.networkId === networkId\n );\n }\n\n /**\n * Get chains by type\n */\n getChainsByType(type: 'mainnet' | 'testnet' | 'local'): ChainConfig[] {\n return Array.from(this.chains.values()).filter((chain) => {\n if (type === 'mainnet') {\n return (\n !(chain as CustomChainConfig).isTestnet &&\n !(chain as CustomChainConfig).isLocal\n );\n }\n if (type === 'testnet') {\n return (chain as CustomChainConfig).isTestnet;\n }\n if (type === 'local') {\n return (chain as CustomChainConfig).isLocal;\n }\n return false;\n });\n }\n\n /**\n * Add custom RPC URL for existing chain\n */\n addCustomRpcUrl(chainId: number, rpcUrl: string): void {\n const chain = this.getChain(chainId);\n const customChain: ChainConfig = {\n ...chain,\n rpcUrl,\n };\n\n this.registerChain(customChain);\n }\n}\n\n// Export singleton instance\nexport const chainRegistry = ChainRegistry.getInstance();\n","/**\n * Validation Utilities\n *\n * Utility functions for validating inputs and addresses\n */\n\nexport class ValidationUtils {\n /**\n * Convert value to BigInt safely\n */\n private static toBigInt(value: string | number | bigint): bigint {\n return BigInt(value.toString());\n }\n\n /**\n * Validate Ethereum address format\n */\n static validateAddress(address: string, name: string = 'Address'): void {\n if (!address || !address.startsWith('0x') || address.length !== 42) {\n throw new Error(`${name} must be a valid 0x-prefixed address`);\n }\n }\n\n /**\n * Validate amount (must be positive)\n */\n static validateAmount(\n amount: string | number | bigint,\n name: string = 'Amount'\n ): void {\n const amountStr = amount.toString();\n if (!amountStr || amountStr === '0' || this.toBigInt(amount) <= 0n) {\n throw new Error(`${name} must be a positive value`);\n }\n }\n\n /**\n * Check if address is valid without throwing\n */\n static isValidAddress(address: string): boolean {\n return (\n Boolean(address) && address.startsWith('0x') && address.length === 42\n );\n }\n\n /**\n * Check if amount is valid without throwing\n */\n static isValidAmount(amount: string | number | bigint): boolean {\n try {\n const amountStr = amount.toString();\n return (\n Boolean(amountStr) && amountStr !== '0' && this.toBigInt(amount) > 0n\n );\n } catch {\n return false;\n }\n }\n\n /**\n * Validate chain ID\n */\n static validateChainId(chainId: number): void {\n if (!Number.isInteger(chainId) || chainId <= 0) {\n throw new Error('Chain ID must be a positive integer');\n }\n }\n\n /**\n * Validate RPC URL\n */\n static validateRpcUrl(rpcUrl: string): void {\n if (!rpcUrl || !rpcUrl.startsWith('http')) {\n throw new Error('RPC URL must be a valid HTTP/HTTPS URL');\n }\n }\n}\n","/**\n * Base Contract Implementation\n *\n * Shared functionality for contract interactions\n */\n\nimport {\n createPublicClient,\n http,\n type PublicClient,\n type Address,\n type Hex,\n} from 'viem';\nimport { chainRegistry } from '../chains/registry';\n\nimport type { BaseContractConfig } from '@/types';\n\nexport abstract class BaseContract {\n protected client: PublicClient;\n\n constructor(config: BaseContractConfig) {\n const chain = chainRegistry.getViemChain(config.chainId);\n this.client = createPublicClient({\n chain,\n transport: http(config.rpcUrl),\n });\n }\n\n /**\n * Get nonce for an address\n */\n protected async getNonce(address?: string): Promise<string | undefined> {\n if (!address) return undefined;\n const nonceValue = await this.client.getTransactionCount({\n address: address as Address,\n });\n return `0x${nonceValue.toString(16)}`;\n }\n\n /**\n * Estimate gas for transaction\n */\n protected async estimateGas(\n data: Hex,\n to: string,\n from?: string\n ): Promise<string> {\n const gasEstimate = await this.client.estimateGas({\n account: from as Address,\n to: to as Address,\n data,\n });\n return gasEstimate.toString();\n }\n}\n","import { encodeFunctionData, type Address, type Hex } from 'viem';\nimport { erc20Abi } from './abi/erc20';\nimport type { TransactionParams } from '@/types';\n\nexport interface BuildContext {\n tokenAddress: string;\n estimateGas: (data: Hex, from?: string) => Promise<string>;\n getNonce: (address?: string) => Promise<string | undefined>;\n}\n\nexport async function buildApprove(\n ctx: BuildContext,\n spender: Address,\n amount: bigint,\n from?: string\n): Promise<TransactionParams> {\n const data = encodeFunctionData({\n abi: erc20Abi,\n functionName: 'approve',\n args: [spender, amount],\n });\n\n const [nonce, gas] = await Promise.all([\n ctx.getNonce(from),\n ctx.estimateGas(data, from),\n ]);\n\n return {\n from,\n to: ctx.tokenAddress,\n data,\n gas,\n nonce,\n };\n}\n\nexport async function buildTransfer(\n ctx: BuildContext,\n to: Address,\n amount: bigint,\n from?: string\n): Promise<TransactionParams> {\n const data = encodeFunctionData({\n abi: erc20Abi,\n functionName: 'transfer',\n args: [to, amount],\n });\n\n const [nonce, gas] = await Promise.all([\n ctx.getNonce(from),\n ctx.estimateGas(data, from),\n ]);\n\n return {\n from,\n to: ctx.tokenAddress,\n data,\n gas,\n nonce,\n };\n}\n\nexport async function buildTransferFrom(\n ctx: BuildContext,\n fromAddress: Address,\n to: Address,\n amount: bigint,\n spender?: string\n): Promise<TransactionParams> {\n const data = encodeFunctionData({\n abi: erc20Abi,\n functionName: 'transferFrom',\n args: [fromAddress, to, amount],\n });\n\n const [nonce, gas] = await Promise.all([\n ctx.getNonce(spender),\n ctx.estimateGas(data, spender),\n ]);\n\n return {\n from: spender,\n to: ctx.tokenAddress,\n data,\n gas,\n nonce,\n };\n}\n","/**\n * ERC20 Token ABI\n *\n * Comprehensive ERC20 ABI for all standard functions\n */\n\nexport const erc20Abi = [\n // Standard ERC20 functions\n {\n name: 'approve',\n type: 'function',\n stateMutability: 'nonpayable',\n inputs: [\n { name: 'spender', type: 'address' },\n { name: 'amount', type: 'uint256' },\n ],\n outputs: [{ name: '', type: 'bool' }],\n },\n {\n name: 'transfer',\n type: 'function',\n stateMutability: 'nonpayable',\n inputs: [\n { name: 'to', type: 'address' },\n { name: 'amount', type: 'uint256' },\n ],\n outputs: [{ name: '', type: 'bool' }],\n },\n {\n name: 'transferFrom',\n type: 'function',\n stateMutability: 'nonpayable',\n inputs: [\n { name: 'from', type: 'address' },\n { name: 'to', type: 'address' },\n { name: 'amount', type: 'uint256' },\n ],\n outputs: [{ name: '', type: 'bool' }],\n },\n {\n name: 'allowance',\n type: 'function',\n stateMutability: 'view',\n inputs: [\n { name: 'owner', type: 'address' },\n { name: 'spender', type: 'address' },\n ],\n outputs: [{ name: '', type: 'uint256' }],\n },\n {\n name: 'balanceOf',\n type: 'function',\n stateMutability: 'view',\n inputs: [{ name: 'account', type: 'address' }],\n outputs: [{ name: '', type: 'uint256' }],\n },\n // Additional ERC20 functions\n {\n name: 'name',\n type: 'function',\n stateMutability: 'view',\n inputs: [],\n outputs: [{ name: '', type: 'string' }],\n },\n {\n name: 'symbol',\n type: 'function',\n stateMutability: 'view',\n inputs: [],\n outputs: [{ name: '', type: 'string' }],\n },\n {\n name: 'decimals',\n type: 'function',\n stateMutability: 'view',\n inputs: [],\n outputs: [{ name: '', type: 'uint8' }],\n },\n {\n name: 'totalSupply',\n type: 'function',\n stateMutability: 'view',\n inputs: [],\n outputs: [{ name: '', type: 'uint256' }],\n },\n // Events\n {\n name: 'Transfer',\n type: 'event',\n inputs: [\n { name: 'from', type: 'address', indexed: true },\n { name: 'to', type: 'address', indexed: true },\n { name: 'value', type: 'uint256', indexed: false },\n ],\n },\n {\n name: 'Approval',\n type: 'event',\n inputs: [\n { name: 'owner', type: 'address', indexed: true },\n { name: 'spender', type: 'address', indexed: true },\n { name: 'value', type: 'uint256', indexed: false },\n ],\n },\n] as const;\n","/**\n * Bridge Build Functions\n *\n * Functions to build bridge transaction parameters\n */\n\nimport { encodeFunctionData, type Address, type Hex } from 'viem';\nimport { bridgeAbi } from './abi/bridge';\nimport type { TransactionParams } from '@/types';\n\nexport interface BuildContext {\n bridgeAddress: string;\n estimateGas: (data: Hex, to: string, from?: string) => Promise<string>;\n getNonce: (address?: string) => Promise<string | undefined>;\n}\n\nexport async function buildBridgeAsset(\n ctx: BuildContext,\n destinationNetwork: number,\n destinationAddress: Address,\n amount: bigint,\n token: Address,\n forceUpdateGlobalExitRoot: boolean,\n permitData: string = '0x',\n from?: string\n): Promise<TransactionParams> {\n const data = encodeFunctionData({\n abi: bridgeAbi,\n functionName: 'bridgeAsset',\n args: [\n destinationNetwork,\n destinationAddress,\n amount,\n token,\n forceUpdateGlobalExitRoot,\n permitData as Hex,\n ],\n });\n\n const [nonce, gas] = await Promise.all([\n ctx.getNonce(from),\n ctx.estimateGas(data, ctx.bridgeAddress, from),\n ]);\n\n return {\n from,\n to: ctx.bridgeAddress,\n data,\n gas,\n nonce,\n };\n}\n\nexport async function buildClaimAsset(\n ctx: BuildContext,\n smtProofLocalExitRoot: readonly `0x${string}`[], // Array of 32 bytes32 values\n smtProofRollupExitRoot: readonly `0x${string}`[], // Array of 32 bytes32 values\n globalIndex: bigint,\n mainnetExitRoot: `0x${string}`, // bytes32\n rollupExitRoot: `0x${string}`, // bytes32\n originNetwork: number,\n originTokenAddress: Address,\n destinationNetwork: number,\n destinationAddress: Address,\n amount: bigint,\n metadata: `0x${string}`, // bytes\n from?: string\n): Promise<TransactionParams> {\n const data = encodeFunctionData({\n abi: bridgeAbi,\n functionName: 'claimAsset',\n args: [\n // @ts-ignore - Viem expects exact tuple types but we're passing arrays\n smtProofLocalExitRoot,\n // @ts-ignore - Viem expects exact tuple types but we're passing arrays\n smtProofRollupExitRoot,\n globalIndex,\n mainnetExitRoot,\n rollupExitRoot,\n originNetwork,\n originTokenAddress,\n destinationNetwork,\n destinationAddress,\n amount,\n metadata,\n ],\n });\n\n const [nonce, gas] = await Promise.all([\n ctx.getNonce(from),\n ctx.estimateGas(data, ctx.bridgeAddress, from),\n ]);\n\n return {\n from,\n to: ctx.bridgeAddress,\n data,\n gas,\n nonce,\n };\n}\n","/**\n * Bridge ABI\n *\n * Polygon ZkEVM Bridge contract ABI\n */\n\nexport const bridgeAbi = [\n {\n inputs: [\n { internalType: 'uint32', name: 'destinationNetwork', type: 'uint32' },\n { internalType: 'address', name: 'destinationAddress', type: 'address' },\n { internalType: 'uint256', name: 'amount', type: 'uint256' },\n { internalType: 'address', name: 'token', type: 'address' },\n { internalType: 'bool', name: 'forceUpdateGlobalExitRoot', type: 'bool' },\n { internalType: 'bytes', name: 'permitData', type: 'bytes' },\n ],\n name: 'bridgeAsset',\n outputs: [],\n stateMutability: 'payable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'bytes32[32]',\n name: 'smtProofLocalExitRoot',\n type: 'bytes32[32]',\n },\n {\n internalType: 'bytes32[32]',\n name: 'smtProofRollupExitRoot',\n type: 'bytes32[32]',\n },\n { internalType: 'uint256', name: 'globalIndex', type: 'uint256' },\n { internalType: 'bytes32', name: 'mainnetExitRoot', type: 'bytes32' },\n { internalType: 'bytes32', name: 'rollupExitRoot', type: 'bytes32' },\n { internalType: 'uint32', name: 'originNetwork', type: 'uint32' },\n { internalType: 'address', name: 'originTokenAddress', type: 'address' },\n { internalType: 'uint32', name: 'destinationNetwork', type: 'uint32' },\n { internalType: 'address', name: 'destinationAddress', type: 'address' },\n { internalType: 'uint256', name: 'amount', type: 'uint256' },\n { internalType: 'bytes', name: 'metadata', type: 'bytes' },\n ],\n name: 'claimAsset',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n { internalType: 'uint32', name: 'leafIndex', type: 'uint32' },\n { internalType: 'uint32', name: 'sourceBridgeNetwork', type: 'uint32' },\n ],\n name: 'isClaimed',\n outputs: [{ internalType: 'bool', name: '', type: 'bool' }],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n { internalType: 'uint32', name: 'originNetwork', type: 'uint32' },\n { internalType: 'address', name: 'originTokenAddress', type: 'address' },\n ],\n name: 'getTokenWrappedAddress',\n outputs: [{ internalType: 'address', name: '', type: 'address' }],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n { internalType: 'uint32', name: 'destinationNetwork', type: 'uint32' },\n { internalType: 'address', name: 'destinationAddress', type: 'address' },\n { internalType: 'bool', name: 'forceUpdateGlobalExitRoot', type: 'bool' },\n { internalType: 'bytes', name: 'permitData', type: 'bytes' },\n ],\n name: 'bridgeMessage',\n outputs: [],\n stateMutability: 'payable',\n type: 'function',\n },\n {\n inputs: [\n {\n internalType: 'bytes32[32]',\n name: 'smtProofLocalExitRoot',\n type: 'bytes32[32]',\n },\n {\n internalType: 'bytes32[32]',\n name: 'smtProofRollupExitRoot',\n type: 'bytes32[32]',\n },\n { internalType: 'uint256', name: 'globalIndex', type: 'uint256' },\n { internalType: 'bytes32', name: 'mainnetExitRoot', type: 'bytes32' },\n { internalType: 'bytes32', name: 'rollupExitRoot', type: 'bytes32' },\n { internalType: 'uint32', name: 'originNetwork', type: 'uint32' },\n { internalType: 'address', name: 'originTokenAddress', type: 'address' },\n { internalType: 'uint32', name: 'destinationNetwork', type: 'uint32' },\n { internalType: 'address', name: 'destinationAddress', type: 'address' },\n { internalType: 'uint256', name: 'amount', type: 'uint256' },\n { internalType: 'bytes', name: 'metadata', type: 'bytes' },\n ],\n name: 'claimMessage',\n outputs: [],\n stateMutability: 'nonpayable',\n type: 'function',\n },\n {\n inputs: [\n { internalType: 'uint32', name: 'originNetwork', type: 'uint32' },\n { internalType: 'address', name: 'originTokenAddress', type: 'address' },\n ],\n name: 'precalculatedWrapperAddress',\n outputs: [{ internalType: 'address', name: '', type: 'address' }],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [\n { internalType: 'address', name: 'wrappedToken', type: 'address' },\n ],\n name: 'wrappedTokenToTokenInfo',\n outputs: [\n { internalType: 'uint32', name: 'originNetwork', type: 'uint32' },\n { internalType: 'address', name: 'originTokenAddress', type: 'address' },\n ],\n stateMutability: 'view',\n type: 'function',\n },\n {\n inputs: [],\n name: 'networkID',\n outputs: [{ internalType: 'uint32', name: '', type: 'uint32' }],\n stateMutability: 'view',\n type: 'function',\n },\n {\n anonymous: false,\n inputs: [\n {\n indexed: false,\n internalType: 'uint8',\n name: 'leafType',\n type: 'uint8',\n },\n {\n indexed: false,\n internalType: 'uint32',\n name: 'originNetwork',\n type: 'uint32',\n },\n {\n indexed: false,\n internalType: 'address',\n name: 'originAddress',\n type: 'address',\n },\n {\n indexed: false,\n internalType: 'uint32',\n name: 'destinationNetwork',\n type: 'uint32',\n },\n {\n indexed: false,\n internalType: 'address',\n name: 'destinationAddress',\n type: 'address',\n },\n {\n indexed: false,\n internalType: 'uint256',\n name: 'amount',\n type: 'uint256',\n },\n {\n indexed: false,\n internalType: 'bytes',\n name: 'metadata',\n type: 'bytes',\n },\n {\n indexed: false,\n internalType: 'uint32',\n name: 'depositCount',\n type: 'uint32',\n },\n ],\n name: 'BridgeEvent',\n type: 'event',\n },\n] as const;\n","/**\n * Bridge Message Build Functions\n *\n * Functions to build bridge message transaction parameters\n */\n\nimport { encodeFunctionData, type Address, type Hex } from 'viem';\nimport { bridgeAbi } from './abi/bridge';\nimport type { TransactionParams } from '@/types';\n\nexport interface BuildContext {\n bridgeAddress: string;\n estimateGas: (data: Hex, to: string, from?: string) => Promise<string>;\n getNonce: (address?: string) => Promise<string | undefined>;\n}\n\nexport async function buildBridgeMessage(\n ctx: BuildContext,\n destinationNetwork: number,\n destinationAddress: Address,\n forceUpdateGlobalExitRoot: boolean,\n permitData: string = '0x',\n from?: string\n): Promise<TransactionParams> {\n const data = encodeFunctionData({\n abi: bridgeAbi,\n functionName: 'bridgeMessage',\n args: [\n destinationNetwork,\n destinationAddress,\n forceUpdateGlobalExitRoot,\n permitData as Hex,\n ],\n });\n\n const [nonce, gas] = await Promise.all([\n ctx.getNonce(from),\n ctx.estimateGas(data, ctx.bridgeAddress, from),\n ]);\n\n return {\n from,\n to: ctx.bridgeAddress,\n data,\n gas,\n nonce,\n };\n}\n\nexport async function buildClaimMessage(\n ctx: BuildContext,\n smtProofLocalExitRoot: readonly `0x${string}`[],\n smtProofRollupExitRoot: readonly `0x${string}`[],\n globalIndex: bigint,\n mainnetExitRoot: `0x${string}`,\n rollupExitRoot: `0x${string}`,\n originNetwork: number,\n originTokenAddress: Address,\n destinationNetwork: number,\n destinationAddress: Address,\n amount: bigint,\n metadata: `0x${string}`,\n from?: string\n): Promise<TransactionParams> {\n const data = encodeFunctionData({\n abi: bridgeAbi,\n functionName: 'claimMessage',\n args: [\n // @ts-ignore - Viem expects exact tuple types but we're passing arrays\n smtProofLocalExitRoot,\n // @ts-ignore - Viem expects exact tuple types but we're passing arrays\n smtProofRollupExitRoot,\n globalIndex,\n mainnetExitRoot,\n rollupExitRoot,\n originNetwork,\n originTokenAddress,\n destinationNetwork,\n destinationAddress,\n amount,\n metadata,\n ],\n });\n\n const [nonce, gas] = await Promise.all([\n ctx.getNonce(from),\n ctx.estimateGas(data, ctx.bridgeAddress, from),\n ]);\n\n return {\n from,\n to: ctx.bridgeAddress,\n data,\n gas,\n nonce,\n };\n}\n","/**\n * Bridge Utility Implementation\n *\n * User-friendly bridge operations that abstract complex parameter handling\n */\n\nimport {\n type PublicClient,\n decodeEventLog,\n createPublicClient,\n http,\n} from 'viem';\nimport type { ClaimAssetParams, ClaimMessageParams } from '@/types';\nimport { bridgeAbi } from './abi/bridge';\nimport { chainRegistry } from '../chains/registry';\n\nexport interface BridgeEventInfo {\n originNetwork: number;\n originTokenAddress: string;\n destinationNetwork: number;\n destinationAddress: string;\n amount: bigint;\n metadata: string;\n depositCount: number;\n}\n\nexport interface MerkleProof {\n merkle_proof: string[];\n rollup_merkle_proof?: string[];\n exit_root_num?: string; // Match native.js interface\n l2_exit_root_num?: string; // Match native.js interface\n main_exit_root: string;\n rollup_exit_root: string;\n}\n\nexport interface ClaimPayload {\n smtProof: string[];\n smtProofRollup: string[] | undefined;\n globalIndex: string;\n mainnetExitRoot: string;\n rollupExitRoot: string;\n originNetwork: number;\n originTokenAddress: string;\n destinationNetwork: number;\n destinationAddress: string;\n amount: bigint;\n metadata: string;\n}\n\nexport class BridgeUtil {\n private client: PublicClient;\n private proofApiUrl: string;\n private BRIDGE_TOPIC =\n '0x501781209a1f8899323b96b4ef08b168df93e0a90c673d1e4cce39366cb62f9b';\n\n constructor(client: PublicClient, proofApiUrl: string) {\n this.client = client;\n this.proofApiUrl = proofApiUrl;\n }\n\n /**\n * Create BridgeUtil instance from network ID using chain registry\n *\n * @param sourceNetworkId - Network ID of the source network\n * @returns BridgeUtil instance configured for the source network\n */\n static async fromNetworkId(sourceNetworkId: number): Promise<BridgeUtil> {\n const chain = BridgeUtil.findChain(sourceNetworkId);\n\n if (!chain.proofApiUrl) {\n throw new Error(\n `No proof API URL configured for network ${sourceNetworkId}`\n );\n }\n\n const sourceClient = createPublicClient({\n transport: http(chain.rpcUrl),\n });\n\n return new BridgeUtil(sourceClient, chain.proofApiUrl);\n }\n\n /**\n * Find chain configuration by network ID\n *\n * @param sourceNetworkId - Network ID to search for\n * @returns Chain configuration\n * @throws Error if chain not found\n */\n private static findChain(sourceNetworkId: number) {\n try {\n return chainRegistry.getChainByNetworkId(sourceNetworkId);\n } catch {\n // Generate helpful error message with available options\n const allChains = chainRegistry.getAllChains();\n const availableNetworkIds = allChains\n .map((chain) => chain.networkId)\n .filter(Boolean)\n .join(', ');\n\n throw new Error(\n `Source network ${sourceNetworkId} not found in chain registry. ` +\n `Available network IDs: ${availableNetworkIds}`\n );\n }\n }\n\n /**\n * Extract bridge event data from transaction receipt\n */\n private async extractBridgeEvent(\n transactionHash: string,\n _networkId: number,\n bridgeIndex = 0\n ): Promise<BridgeEventInfo> {\n try {\n const receipt = await this.client.getTransactionReceipt({\n hash: transactionHash as `0x${string}`,\n });\n\n const bridgeLogs = receipt.logs.filter(\n (log) =>\n log.topics[0] &&\n log.topics[0].toLowerCase() === this.BRIDGE_TOPIC.toLowerCase()\n );\n\n if (!bridgeLogs.length) {\n throw new Error('No bridge event found in transaction receipt');\n }\n\n if (bridgeIndex >= bridgeLogs.length) {\n throw new Error(\n `Bridge index ${bridgeIndex} not found. Available indices: 0-${bridgeLogs.length - 1}`\n );\n }\n\n const log = bridgeLogs[bridgeIndex];\n\n if (!log) {\n throw new Error('Bridge log not found');\n }\n\n const decoded = decodeEventLog({\n abi: bridgeAbi,\n data: log.data,\n topics: log.topics,\n });\n\n if (decoded.eventName !== 'BridgeEvent') {\n throw new Error('Invalid bridge event');\n }\n\n const args = decoded.args as {\n originNetwork: number;\n originAddress: string;\n destinationNetwork: number;\n destinationAddress: string;\n amount: bigint;\n metadata: string;\n depositCount: number;\n };\n\n const {\n originNetwork,\n originAddress,\n destinationNetwork,\n destinationAddress,\n amount,\n metadata,\n depositCount,\n } = args;\n\n return {\n originNetwork: Number(originNetwork),\n originTokenAddress: originAddress as string,\n destinationNetwork: Number(destinationNetwork),\n destinationAddress: destinationAddress as string,\n amount: amount as bigint,\n metadata: (metadata as string) || '0x',\n depositCount: Number(depositCount),\n };\n } catch (error) {\n if (error instanceof Error) {\n throw new Error(`Failed to extract bridge event: ${error.message}`);\n }\n throw new Error('Failed to extract bridge event: Unknown error');\n }\n }\n\n /**\n * Fetch merkle proof from Polygon's proof API\n */\n private async fetchMerkleProof(\n networkId: number,\n depositCount: number\n ): Promise<MerkleProof> {\n try {\n const baseUrl = this.proofApiUrl.endsWith('/')\n ? this.proofApiUrl\n : `${this.proofApiUrl}/`;\n const url = `${baseUrl}merkle-proof?networkId=${networkId}&depositCount=${depositCount}`;\n\n const response = await fetch(url);\n if (!response.ok) {\n throw new Error(\n `Failed to fetch merkle proof: ${response.statusText} (${response.status})`\n );\n }\n\n const data = (await response.json()) as { proof: MerkleProof };\n\n if (!data.proof) {\n throw new Error('Invalid response format: missing proof data');\n }\n\n return data.proof;\n } catch (error) {\n if (error instanceof Error) {\n throw new Error(`Failed to fetch merkle proof: ${error.message}`);\n }\n throw new Error('Failed to fetch merkle proof: Unknown error');\n }\n }\n\n /**\n * Compute global index from local index and network ID\n */\n private computeGlobalIndex(\n indexLocal: number,\n sourceNetworkId: number\n ): bigint {\n const MAINNET_FLAG = BigInt(2 ** 64); // Match native.js implementation\n\n if (BigInt(sourceNetworkId) === BigInt(0)) {\n return BigInt(indexLocal) + MAINNET_FLAG;\n } else {\n return BigInt(indexLocal) + BigInt(sourceNetworkId - 1) * BigInt(2 ** 32);\n }\n }\n\n /**\n * Build claim payload from transaction hash (user-friendly method)\n */\n async buildPayloadForClaim(\n transactionHash: string,\n sourceNetworkId: number,\n bridgeIndex = 0\n ): Promise<ClaimPayload> {\n // Extract bridge event data\n const bridgeEvent = await this.extractBridgeEvent(\n transactionHash,\n sourceNetworkId,\n bridgeIndex\n );\n\n // Fetch merkle proof\n const proof = await this.fetchMerkleProof(\n sourceNetworkId,\n bridgeEvent.depositCount\n );\n\n // Compute global index\n const globalIndex = this.computeGlobalIndex(\n bridgeEvent.depositCount,\n sourceNetworkId\n );\n\n return {\n smtProof: proof.merkle_proof,\n smtProofRollup: proof.rollup_merkle_proof,\n globalIndex: globalIndex.toString(),\n mainnetExitRoot: proof.main_exit_root,\n rollupExitRoot: proof.rollup_exit_root,\n originNetwork: bridgeEvent.originNetwork,\n originTokenAddress: bridgeEvent.originTokenAddress,\n destinationNetwork: bridgeEvent.destinationNetwork,\n destinationAddress: bridgeEvent.destinationAddress,\n amount: bridgeEvent.amount,\n metadata: bridgeEvent.metadata,\n };\n }\n\n /**\n * Build claim asset parameters from transaction hash\n */\n async buildClaimAssetParams(\n transactionHash: string,\n sourceNetworkId: number,\n bridgeIndex = 0\n ): Promise<ClaimAssetParams> {\n const payload = await this.buildPayloadForClaim(\n transactionHash,\n sourceNetworkId,\n bridgeIndex\n );\n\n return {\n smtProofLocalExitRoot: payload.smtProof as readonly `0x${string}`[],\n smtProofRollupExitRoot:\n payload.smtProofRollup as readonly `0x${string}`[],\n globalIndex: BigInt(payload.globalIndex),\n mainnetExitRoot: payload.mainnetExitRoot as `0x${string}`,\n rollupExitRoot: payload.rollupExitRoot as `0x${string}`,\n originNetwork: payload.originNetwork,\n originTokenAddress: payload.originTokenAddress,\n destinationNetwork: payload.destinationNetwork,\n destinationAddress: payload.destinationAddress,\n amount: payload.amount,\n metadata: payload.metadata as `0x${string}`,\n };\n }\n\n /**\n * Build claim message parameters from transaction hash\n */\n async buildClaimMessageParams(\n transactionHash: string,\n sourceNetworkId: number,\n bridgeIndex = 0\n ): Promise<ClaimMessageParams> {\n const payload = await this.buildPayloadForClaim(\n transactionHash,\n sourceNetworkId,\n bridgeIndex\n );\n\n return {\n smtProofLocalExitRoot: payload.smtProof as readonly `0x${string}`[],\n smtProofRollupExitRoot:\n payload.smtProofRollup as readonly `0x${string}`[],\n globalIndex: BigInt(payload.globalIndex),\n mainnetExitRoot: payload.mainnetExitRoot as `0x${string}`,\n rollupExitRoot: payload.rollupExitRoot as `0x${string}`,\n originNetwork: payload.originNetwork,\n originTokenAddress: payload.originTokenAddress,\n destinationNetwork: payload.destinationNetwork,\n destinationAddress: payload.destinationAddress,\n amount: payload.amount,\n metadata: payload.metadata as `0x${string}`,\n };\n }\n\n /**\n * Get bridge event info from transaction hash\n */\n async getBridgeEventInfo(\n transactionHash: string,\n sourceNetworkId: number,\n bridgeIndex = 0\n ): Promise<BridgeEventInfo> {\n return this.extractBridgeEvent(\n transactionHash,\n sourceNetworkId,\n bridgeIndex\n );\n }\n}\n","/**\n * Bridge Implementation\n *\n * Core bridge functionality for asset bridging between networks\n */\n\nimport { ValidationUtils } from '../utils';\nimport { BaseContract } from '../base/contract';\nimport type {\n BridgeAssetParams,\n BridgeConfig,\n TransactionParams,\n ClaimAssetParams,\n IsClaimedParams,\n WrappedTokenParams,\n BridgeMessageParams,\n ClaimMessageParams,\n PrecalculatedWrapperParams,\n OriginTokenInfoParams,\n} from '@/types';\nimport {\n buildBridgeAsset as buildBridgeAssetTx,\n buildClaimAsset as buildClaimAssetTx,\n} from './build';\nimport {\n buildBridgeMessage as buildBridgeMessageTx,\n buildClaimMessage as buildClaimMessageTx,\n} from './message';\nimport { bridgeAbi } from './abi/bridge';\nimport { BridgeUtil } from './util';\n\nexport class Bridge extends BaseContract {\n private bridgeAddress: string;\n\n constructor(config: BridgeConfig) {\n super({ rpcUrl: config.rpcUrl, chainId: config.chainId });\n this.bridgeAddress = config.bridgeAddress;\n }\n\n /**\n * Build bridge asset transaction\n */\n async buildBridgeAsset(\n params: BridgeAssetParams,\n from?: string\n ): Promise<TransactionParams> {\n ValidationUtils.validateAddress(\n params.destinationAddress,\n 'Destination address'\n );\n ValidationUtils.validateAddress(params.token, 'Token address');\n\n return buildBridgeAssetTx(\n {\n bridgeAddress: this.bridgeAddress,\n estimateGas: (data, to, from) => this.estimateGas(data, to, from),\n getNonce: (address) => this.getNonce(address),\n },\n params.destinationNetwork,\n params.destinationAddress as `0x${string}`,\n BigInt(params.amount),\n params.token as `0x${string}`,\n params.forceUpdateGlobalExitRoot,\n params.permitData,\n from\n );\n }\n\n /**\n * Build claim asset transaction\n */\n async buildClaimAsset(\n params: ClaimAssetParams,\n from?: string\n ): Promise<TransactionParams> {\n ValidationUtils.validateAddress(\n params.originTokenAddress,\n 'Origin token address'\n );\n ValidationUtils.validateAddress(\n params.destinationAddress,\n 'Destination address'\n );\n\n return buildClaimAssetTx(\n {\n bridgeAddress: this.bridgeAddress,\n estimateGas: (data, to, from) => this.estimateGas(data, to, from),\n getNonce: (address) => this.getNonce(address),\n },\n params.smtProofLocalExitRoot,\n params.smtProofRollupExitRoot,\n params.globalIndex,\n params.mainnetExitRoot,\n params.rollupExitRoot,\n params.originNetwork,\n params.originTokenAddress as `0x${string}`,\n params.destinationNetwork,\n params.destinationAddress as `0x${string}`,\n params.amount,\n params.metadata,\n from\n );\n }\n\n /**\n * Check if bridge deposit is claimed\n */\n async isClaimed(params: IsClaimedParams): Promise<boolean> {\n const result = await this.client.readContract({\n address: this.bridgeAddress as `0x${string}`,\n abi: bridgeAbi,\n functionName: 'isClaimed',\n args: [params.leafIndex, params.sourceBridgeNetwork],\n });\n return result;\n }\n\n /**\n * Get wrapped token address\n */\n async getWrappedTokenAddress(params: WrappedTokenParams): Promise<string> {\n ValidationUtils.validateAddress(\n params.originTokenAddress,\n 'Origin token address'\n );\n\n const result = await this.client.readContract({\n address: this.bridgeAddress as `0x${string}`,\n abi: bridgeAbi,\n functionName: 'getTokenWrappedAddress',\n args: [params.originNetwork, params.originTokenAddress as `0x${string}`],\n });\n return result;\n }\n\n /**\n * Get network ID\n */\n async getNetworkId(): Promise<number> {\n const result = await this.client.readContract({\n address: this.bridgeAddress as `0x${string}`,\n abi: bridgeAbi,\n functionName: 'networkID',\n args: [],\n });\n return Number(result);\n }\n\n /**\n * Get bridge contract address\n */\n getBridgeAddress(): string {\n return this.bridgeAddress;\n }\n\n /**\n * Build bridge message transaction\n */\n async buildBridgeMessage(\n params: BridgeMessageParams,\n from?: string\n ): Promise<TransactionParams> {\n ValidationUtils.validateAddress(\n params.destinationAddress,\n 'Destination address'\n );\n\n return buildBridgeMessageTx(\n {\n bridgeAddress: this.bridgeAddress,\n estimateGas: (data, to, from) => this.estimateGas(data, to, from),\n getNonce: (address) => this.getNonce(address),\n },\n params.destinationNetwork,\n params.destinationAddress as `0x${string}`,\n params.forceUpdateGlobalExitRoot,\n params.permitData || '0x',\n from\n );\n }\n\n /**\n * Build claim message transaction\n */\n async buildClaimMessage(\n params: ClaimMessageParams,\n from?: string\n ): Promise<TransactionParams> {\n ValidationUtils.validateAddress(\n params.originTokenAddress,\n 'Origin token address'\n );\n ValidationUtils.validateAddress(\n params.destinationAddress,\n 'Destination address'\n );\n\n return buildClaimMessageTx(\n {\n bridgeAddress: this.bridgeAddress,\n estimateGas: (data, to, from) => this.estimateGas(data, to, from),\n getNonce: (address) => this.getNonce(address),\n },\n params.smtProofLocalExitRoot,\n params.smtProofRollupExitRoot,\n params.globalIndex,\n params.mainnetExitRoot,\n params.rollupExitRoot,\n params.originNetwork,\n params.originTokenAddress as `0x${string}`,\n params.destinationNetwork,\n params.destinationAddress as `0x${string}`,\n params.amount,\n params.metadata,\n from\n );\n }\n\n /**\n * Get precalculated wrapper address\n */\n async getPrecalculatedWrapperAddress(\n params: PrecalculatedWrapperParams\n ): Promise<string> {\n ValidationUtils.validateAddress(\n params.originTokenAddress,\n 'Origin token address'\n );\n\n const result = await this.client.readContract({\n address: this.bridgeAddress as `0x${string}`,\n abi: bridgeAbi,\n functionName: 'precalculatedWrapperAddress',\n args: [params.originNetwork, params.originTokenAddress as `0x${string}`],\n });\n return result;\n }\n\n /**\n * Get origin token info from wrapped token\n */\n async getOriginTokenInfo(\n params: OriginTokenInfoParams\n ): Promise<readonly [number, string]> {\n ValidationUtils.validateAddress(\n params.wrappedToken,\n 'Wrapped token address'\n );\n\n const result = await this.client.readContract({\n address: this.bridgeAddress as `0x${string}`,\n abi: bridgeAbi,\n functionName: 'wrappedTokenToTokenInfo',\n args: [params.wrappedToken as `0x${string}`],\n });\n return result;\n }\n\n /**\n * Build claim asset transaction from bridge transaction hash\n *\n * @param transactionHash - Hash of the bridge transaction on the source network\n * @param sourceNetworkId - Network ID of the source network (where bridge tx happened)\n * @param bridgeIndex - Index of bridge event in transaction (default: 0)\n * @param from - From address for the claim transaction\n */\n async buildClaimAssetFromHash(\n transactionHash: string,\n sourceNetworkId: number,\n bridgeIndex = 0,\n from?: string\n ): Promise<TransactionParams> {\n const bridgeUtil = await BridgeUtil.fromNetworkId(sourceNetworkId);\n const params = await bridgeUtil.buildClaimAssetParams(\n transactionHash,\n sourceNetworkId,\n bridgeIndex\n );\n\n return this.buildClaimAsset(params, from);\n }\n\n /**\n * Build claim message transaction from bridge transaction hash\n *\n * @param transactionHash - Hash of the bridge transaction on the source network\n * @param sourceNetworkId - Network ID of the source network (where bridge tx happened)\n * @param bridgeIndex - Index of bridge event in transaction (default: 0)\n * @param from - From address for the claim transaction\n */\n async buildClaimMessageFromHash(\n transactionHash: string,\n sourceNetworkId: number,\n bridgeIndex = 0,\n from?: string\n ): Promise<TransactionParams> {\n const bridgeUtil = await BridgeUtil.fromNetworkId(sourceNetworkId);\n const params = await bridgeUtil.buildClaimMessageParams(\n transactionHash,\n sourceNetworkId,\n bridgeIndex\n );\n\n return this.buildClaimMessage(params, from);\n }\n\n /**\n * Get bridge event info from transaction hash\n *\n * @param transactionHash - Hash of the bridge transaction on the source network\n * @param sourceNetworkId - Network ID of the source network (where bridge tx happened)\n * @param bridgeIndex - Index of bridge event in transaction (default: 0)\n */\n async getBridgeEventInfo(\n transactionHash: string,\n sourceNetworkId: number,\n bridgeIndex = 0\n ) {\n const bridgeUtil = await BridgeUtil.fromNetworkId(sourceNetworkId);\n return bridgeUtil.getBridgeEventInfo(\n transactionHash,\n sourceNetworkId,\n bridgeIndex\n );\n }\n}\n","/**\n * ABI Service\n *\n * Centralized management of all contract ABIs\n */\n\nimport { bridgeAbi } from '../bridge/abi/bridge';\nimport { erc20Abi } from '../tokens/abi/erc20';\n\nexport const ABIS = {\n BRIDGE: bridgeAbi,\n ERC20: erc20Abi,\n} as const;\n\nexport type ContractType = keyof typeof ABIS;\n\n/**\n * Get ABI by contract type\n */\nexport function getAbi(contractType: ContractType) {\n return ABIS[contractType];\n}\n\n/**\n * Get specific function ABI\n */\nexport function getFunctionAbi(\n contractType: ContractType,\n functionName: string\n) {\n const abi = ABIS[contractType];\n return abi.find(\n (item) => item.type === 'function' && item.name === functionName\n );\n}\n\n/**\n * Get specific event ABI\n */\nexport function getEventAbi(contractType: ContractType, eventName: string) {\n const abi = ABIS[contractType];\n return abi.find((item) => item.type === 'event' && item.name === eventName);\n}\n","/**\n * ERC20 Token Implementation\n *\n * Core ERC20 functionality for balance, allowance, and transaction building\n */\n\nimport { type Address } from 'viem';\n\nimport { ValidationUtils } from '../utils';\nimport { BaseContract } from '../base/contract';\nimport type { ERC20Config, TransactionParams, BridgeOptions } from '@/types';\nimport {\n buildApprove as buildApproveTx,\n buildTransfer as buildTransferTx,\n buildTransferFrom as buildTransferFromTx,\n} from './build';\nimport { Bridge } from '../bridge/bridge';\nimport { chainRegistry } from '../chains/registry';\nimport { getAbi } from '../services/abi';\n\nexport type { ERC20Config, TransactionParams };\n\nexport class ERC20 extends BaseContract {\n private tokenAddress: string;\n private config: ERC20Config;\n\n constructor(config: ERC20Config) {\n super({ rpcUrl: config.rpcUrl, chainId: config.chainId });\n this.tokenAddress = config.tokenAddress;\n this.config = config;\n }\n\n /**\n * Get ERC20 token balance in wei\n */\n async getBalance(address: string): Promise<string> {\n ValidationUtils.validateAddress(address, 'Address');\n\n const balance = await this.client.readContract({\n address: this.tokenAddress as Address,\n abi: getAbi('ERC20'),\n functionName: 'balanceOf',\n args: [address as Address],\n });\n return balance.toString();\n }\n\n /**\n * Get allowance in wei\n */\n async getAllowance(owner: string, spender: string): Promise<string> {\n ValidationUtils.validateAddress(owner, 'Owner address');\n ValidationUtils.validateAddress(spender, 'Spender address');\n\n try {\n const allowance = await this.client.readContract({\n address: this.tokenAddress as Address,\n abi: getAbi('ERC20'),\n functionName: 'allowance',\n args: [owner as Address, spender as Address],\n });\n return allowance.toString();\n } catch (error) {\n throw new Error(\n `Failed to get allowance: ${error instanceof Error ? error.message : 'Unknown error'}`\n );\n }\n }\n\n /**\n * Build approve transaction\n */\n async buildApprove(\n spender: string,\n amount: string,\n from?: string\n ): Promise<TransactionParams> {\n ValidationUtils.validateAddress(spender, 'Spender address');\n ValidationUtils.validateAmount(amount, 'Amount');\n\n return buildApproveTx(\n {\n tokenAddress: this.tokenAddress,\n estimateGas: (data, from) =>\n this.estimateGas(data, this.tokenAddress, from),\n getNonce: (address) => this.getNonce(address),\n },\n spender as Address,\n BigInt(amount),\n from\n );\n }\n\n /**\n * Build transfer transaction\n */\n async buildTransfer(\n to: string,\n amount: string,\n from?: string\n ): Promise<TransactionParams> {\n ValidationUtils.validateAddress(to, 'Recipient address');\n ValidationUtils.validateAmount(amount, 'Amount');\n\n return buildTransferTx(\n {\n tokenAddress: this.tokenAddress,\n estimateGas: (data, from) =>\n this.estimateGas(data, this.tokenAddress, from),\n getNonce: (address) => this.getNonce(address),\n },\n to as Address,\n BigInt(amount),\n from\n );\n }\n\n /**\n * Build transferFrom transaction\n */\n async buildTransferFrom(\n from: string,\n to: string,\n amount: string,\n spender?: string\n ): Promise<TransactionParams> {\n ValidationUtils.validateAddress(from, 'Owner address');\n ValidationUtils.validateAddress(to, 'Recipient address');\n ValidationUtils.validateAmount(amount, 'Amount');\n\n return buildTransferFromTx(\n {\n tokenAddress: this.tokenAddress,\n estimateGas: (data, from) =>\n this.estimateGas(data, this.tokenAddress, from),\n getNonce: (address) => this.getNonce(address),\n },\n from as Address,\n to as Address,\n BigInt(amount),\n spender\n );\n }\n\n /**\n * Bridge this token to another network\n */\n async bridgeTo(\n destinationNetwork: number,\n destinationAddress: string,\n amount: string,\n from?: string,\n options: BridgeOptions = {}\n ): Promise<TransactionParams> {\n ValidationUtils.validateAddress(destinationAddress, 'Destination address');\n ValidationUtils.validateAmount(amount, 'Amount');\n\n const bridge = this.getBridge();\n\n return bridge.buildBridgeAsset(\n {\n destinationNetwork,\n destinationAddress,\n amount,\n token: this.tokenAddress,\n forceUpdateGlobalExitRoot: options.forceUpdateGlobalExitRoot ?? true,\n permitData: options.permitData || '0x',\n },\n from\n );\n }\n\n /**\n * Get wrapped version of this token on destination network\n */\n async getWrappedToken(): Promise<string> {\n const bridge = this.getBridge();\n return bridge.getWrappedTokenAddress({\n originNetwork: this.config.chainId,\n originTokenAddress: this.tokenAddress,\n });\n }\n\n /**\n * Claim asset from bridge transaction hash\n *\n * @param transactionHash - Hash of the bridge transaction on the source network\n * @param sourceNetworkId - Network ID of the source network (where bridge tx happened)\n * @param bridgeIndex - Index of bridge event in transaction (default: 0)\n * @param from - From address for the claim transaction\n */\n async claimAsset(\n transactionHash: string,\n sourceNetworkId: number,\n bridgeIndex = 0,\n from?: string\n ): Promise<TransactionParams> {\n const bridge = this.getBridge();\n return bridge.buildClaimAssetFromHash(\n transactionHash,\n sourceNetworkId,\n bridgeIndex,\n from\n );\n }\n\n /**\n * Claim message from bridge transaction hash\n *\n * @param transactionHash - Hash of the bridge transaction on the source network\n * @param sourceNetworkId - Network ID of the source network (where bridge tx happened)\n * @param bridgeIndex - Index of bridge event in transaction (default: 0)\n * @param from - From address for the claim transaction\n */\n async claimMessage(\n transactionHash: string,\n sourceNetworkId: number,\n bridgeIndex = 0,\n from?: string\n ): Promise<TransactionParams> {\n const bridge = this.getBridge();\n return bridge.buildClaimMessageFromHash(\n transactionHash,\n sourceNetworkId,\n bridgeIndex,\n from\n );\n }\n\n /**\n * Get bridge event info from transaction hash\n *\n * @param transactionHash - Hash of the bridge transaction on the source network\n * @param sourceNetworkId - Network ID of the source network (where bridge tx happened)\n * @param bridgeIndex - Index of bridge event in transaction (default: 0)\n */\n async getBridgeEventInfo(\n transactionHash: string,\n sourceNetworkId: number,\n bridgeIndex = 0\n ) {\n const bridge = this.getBridge();\n return bridge.getBridgeEventInfo(\n transactionHash,\n sourceNetworkId,\n bridgeIndex\n );\n }\n\n private getBridge(): Bridge {\n const chain = chainRegistry.getChain(this.config.chainId);\n if (!chain.bridgeAddress) {\n throw new Error(\n `No bridge address configured for network ${this.config.chainId}`\n );\n }\n\n return new Bridge({\n bridgeAddress: chain.bridgeAddress,\n rpcUrl: this.config.rpcUrl,\n chainId: this.config.chainId,\n });\n }\n}\n","/**\n * Native Submodule\n *\n * ERC20 token operations and bridge functionality\n */\n\nimport { chainRegistry } from './chains/registry';\nimport { ERC20 } from './tokens/erc20';\nimport { Bridge } from './bridge/bridge';\nimport { createPublicClient, http, type Address } from 'viem';\nimport { ValidationUtils } from './utils';\nimport type { NativeConfig } from '@/types';\nimport { DEFAULT_NETWORK } from '../constants';\n\nexport { ERC20 } from './tokens/erc20';\nexport { Bridge } from './bridge/bridge';\nexport { BridgeUtil } from './bridge/util';\n\nexport class NativeClient {\n private config: NativeConfig;\n private defaultNetwork: number;\n\n constructor(config: NativeConfig) {\n this.config = config;\n this.defaultNetwork = this.config.defaultNetwork || DEFAULT_NETWORK;\n\n // Register custom chains if provided\n if (this.config.chains) {\n this.config.chains.forEach((chain) => {\n chainRegistry.registerChain(chain);\n });\n }\n\n // Add custom RPC URLs if provided\n if (this.config.customRpcUrls) {\n Object.entries(this.config.customRpcUrls).forEach(([chainId, rpcUrl]) => {\n chainRegistry.addCustomRpcUrl(Number(chainId), rpcUrl);\n });\n }\n }\n\n /**\n * Get network configuration from chain registry\n * @param networkId - The network ID (chain ID)\n * @returns Chain configuration\n */\n getNetwork(networkId: number) {\n return chainRegistry.getChain(networkId);\n }\n\n /**\n * Get all supported networks\n * @returns Array of network IDs\n */\n getSupportedNetworks(): number[] {\n return chainRegistry.getSupportedChainIds();\n }\n\n /**\n * Get default network ID\n * @returns Default network ID\n */\n getDefaultNetwork(): number {\n return this.defaultNetwork;\n }\n\n /**\n * Get chain registry for advanced usage\n */\n getChainRegistry() {\n return chainRegistry;\n }\n\n /**\n * Create an ERC20 instance for a specific token on a specific network\n * @param tokenAddress - The ERC20 token contract address\n * @param networkId - The network ID (optional, uses default if not provided)\n * @returns ERC20 instance\n */\n erc20(tokenAddress: string, networkId?: number): ERC20 {\n const network = this.getNetwork(networkId || this.defaultNetwork);\n\n return new ERC20({\n tokenAddress,\n rpcUrl: network.rpcUrl,\n chainId: network.chainId,\n });\n }\n\n /**\n * Get native token balance in wei\n * @param address - The address to check balance for\n * @param networkId - The network ID (optional, uses default if not provided)\n * @returns Native token balance as string\n */\n async getNativeBalance(address: string, networkId?: number): Promise<string> {\n ValidationUtils.validateAddress(address, 'Address');\n const network = this.getNetwork(networkId || this.defaultNetwork);\n\n const client = createPublicClient({\n chain: {\n id: network.chainId,\n name: network.name,\n nativeCurrency: network.nativeCurrency,\n rpcUrls: {\n default: { http: [network.rpcUrl] },\n public: { http: [network.rpcUrl] },\n },\n },\n transport: http(network.rpcUrl),\n });\n\n const balance = await client.getBalance({ address: address as Address });\n return balance.toString();\n }\n\n /**\n * Create a Bridge instance for a specific network\n * @param bridgeAddress - The bridge contract address\n * @param networkId - The network ID (optional, uses default if not provided)\n * @returns Bridge instance\n */\n bridge(bridgeAddress: string, networkId?: number): Bridge {\n const network = this.getNetwork(networkId || this.defaultNetwork);\n\n return new Bridge({\n bridgeAddress,\n rpcUrl: network.rpcUrl,\n chainId: network.chainId,\n });\n }\n}\n","/**\n * SDK Constants\n */\n\n// network ids\nexport const NETWORKS = {\n SEPOLIA: 11155111,\n CARDONA: 2442,\n} as const;\n\nexport const DEFAULT_NETWORK = NETWORKS.SEPOLIA;\n\n// todo: add logic to handle max limit\nexport const MAX_CHAINS_PER_PAGE = 100;\nexport const DEFAULT_CHAINS_PER_PAGE = 100;\n\nexport const MAX_CHAINS_WITH_TOKENS_PER_PAGE = 5;\nexport const DEFAULT_CHAINS_WITH_TOKENS_PER_PAGE = 1;\n\nexport const MAX_TRANSACTIONS_PER_PAGE = 100;\nexport const DEFAULT_TRANSACTIONS_PER_PAGE = 20;\n","/**\n * SDK Config\n */\n\nexport const SDK_MODES = {\n CORE: 'CORE',\n NATIVE: 'NATIVE',\n} as const;\n\nexport type SDKMode = (typeof SDK_MODES)[keyof typeof SDK_MODES];\n\nimport type { CoreConfig } from './core';\nimport type { NativeConfig } from './native';\n\nexport interface SDKConfig {\n mode: SDKMode[];\n core: CoreConfig;\n native: NativeConfig;\n}\n","/**\n * Generic HTTP Client\n */\n\nexport interface RequestConfig {\n method: 'GET' | 'POST';\n headers?: Record<string, string>;\n body?: unknown;\n timeout?: number;\n retries?: number;\n retryDelay?: number;\n}\n\nexport interface Response<T = unknown> {\n data: T;\n status: number;\n statusText: string;\n headers: Headers;\n ok: boolean;\n}\n\nexport interface HttpClientConfig {\n baseUrl: string;\n timeout?: number;\n retries?: number;\n retryDelay?: number;\n defaultHeaders?: Record<string, string>;\n}\n\ninterface FetchConfig {\n method: string;\n headers?: Headers;\n body?: string;\n signal?: AbortSignal;\n}\n\nexport class HttpClient {\n private config: HttpClientConfig;\n\n constructor(config: HttpClientConfig) {\n this.config = {\n timeout: 30000,\n retries: 3,\n retryDelay: 1000,\n defaultHeaders: {\n 'Content-Type': 'application/json',\n },\n ...config,\n };\n }\n\n async request<T>(url: string, config: RequestConfig): Promise<Response<T>> {\n const fullUrl = this.buildUrl(url);\n const requestConfig = this.buildRequestConfig(config);\n\n let lastError: Error | undefined;\n\n for (let attempt = 0; attempt <= (this.config.retries ?? 3); attempt++) {\n try {\n const response = await this.makeRequest<T>(fullUrl, requestConfig);\n return response;\n } catch (error) {\n lastError = error as Error;\n\n if (\n attempt === (this.config.retries ?? 3) ||\n !this.isRetryableError(error)\n ) {\n break;\n }\n\n if (attempt < (this.config.retries ?? 3)) {\n await this.delay(\n (this.config.retryDelay ?? 1000) * Math.pow(2, attempt)\n );\n }\n }\n }\n\n throw new Error(\n `Request failed after ${this.config.retries ?? 3} retries: ${lastError?.message ?? 'Unknown error'}`\n );\n }\n\n async get<T>(\n url: string,\n params?: Record<string, unknown>\n ): Promise<Response<T>> {\n const queryString = params ? this.buildQueryString(params) : '';\n const fullUrl = queryString ? `${url}?${queryString}` : url;\n\n return this.request<T>(fullUrl, { method: 'GET' });\n }\n\n async post<T>(\n url: string,\n data?: unknown,\n config?: Partial<RequestConfig>\n ): Promise<Response<T>> {\n return this.request<T>(url, {\n method: 'POST',\n body: data,\n ...config,\n });\n }\n\n private buildUrl(url: string): string {\n if (url.startsWith('http://') || url.startsWith('https://')) {\n return url;\n }\n return `${this.config.baseUrl}${url.startsWith('/') ? url : `/${url}`}`;\n }\n\n private buildRequestConfig(config: RequestConfig): FetchConfig {\n const headers = new Headers(this.config.defaultHeaders);\n\n if (config.headers) {\n Object.entries(config.headers).forEach(([key, value]) => {\n headers.set(key, value);\n });\n }\n\n const requestConfig: FetchConfig = {\n method: config.method,\n headers,\n };\n\n if (config.body) {\n if (typeof config.body === 'string') {\n requestConfig.body = config.body;\n } else {\n requestConfig.body = JSON.stringify(config.body);\n }\n }\n\n return requestConfig;\n }\n\n private async makeRequest<T>(\n url: string,\n config: FetchConfig\n ): Promise<Response<T>> {\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), this.config.timeout);\n\n try {\n const response = await fetch(url, {\n ...config,\n signal: controller.signal,\n });\n\n clearTimeout(timeoutId);\n\n if (!response.ok) {\n throw new Error(`HTTP ${response.status}: ${response.statusText}`);\n }\n\n let data: T;\n const contentType = response.headers.get('content-type');\n\n if (contentType?.includes('application/json')) {\n data = (await response.json()) as T;\n } else {\n data = (await response.text()) as T;\n }\n\n return {\n data,\n status: response.status,\n statusText: response.statusText,\n headers: response.headers,\n ok: response.ok,\n };\n } catch (error) {\n clearTimeout(timeoutId);\n\n if (error instanceof Error && error.name === 'AbortError') {\n throw new Error(`Request timeout after ${this.config.timeout}ms`);\n }\n\n throw error;\n }\n }\n\n private buildQueryString(params: Record<string, unknown>): string {\n const flattenedParams = this.flattenParams(params);\n\n return Object.entries(flattenedParams)\n .filter(([, value]) => value !== undefined && value !== null)\n .map(\n ([key, value]) =>\n `${encodeURIComponent(key)}=${encodeURIComponent(String(value))}`\n )\n .join('&');\n }\n\n private flattenParams(\n params: Record<string, unknown>,\n prefix = ''\n ): Record<string, string | number> {\n const result: Record<string, string | number> = {};\n\n for (const [key, value] of Object.entries(params)) {\n const fullKey = prefix ? `${prefix}[${key}]` : key;\n\n if (value === undefined || value === null) {\n continue;\n }\n\n if (Array.isArray(value)) {\n const filteredValues = value.filter(\n (item) => item !== undefined && item !== null\n );\n if (filteredValues.length > 0) {\n result[fullKey] = filteredValues.join(',');\n }\n } else if (typeof value === 'object') {\n Object.assign(\n result,\n this.flattenParams(value as Record<string, unknown>, fullKey)\n );\n } else {\n result[fullKey] = String(value);\n }\n }\n\n return result;\n }\n\n private isRetryableError(error: unknown): boolean {\n if (error instanceof Error) {\n const message = error.message.toLowerCase();\n return (\n message.includes('timeout') ||\n message.includes('network') ||\n message.includes('fetch')\n );\n }\n return false;\n }\n\n private delay(ms: number): Promise<void> {\n return new Promise((resolve) => setTimeout(resolve, ms));\n }\n}\n","/**\n * Arc API Service\n *\n * Service for the Arc API\n */\n\nimport { HttpClient, Response } from '../utils/httpClient';\nimport {\n ApiResponse,\n ChainsQueryParams,\n ChainsResponse,\n RoutesRequestParams,\n RoutesResponse,\n BuildTransactionRequestBody,\n BuildTransactionResponse,\n TransactionsRequestQueryParams,\n TransactionsResponse,\n} from '../../types/core';\n\nexport class ArcApiService {\n private httpClient: HttpClient;\n\n constructor({ baseUrl, timeout }: { baseUrl: string; timeout: number }) {\n this.httpClient = new HttpClient({ baseUrl, timeout });\n }\n\n // responsible for both chains metadata and tokens\n // supports limit/offset based pagination\n async chains({\n withSupportedTokens = false,\n limit = 10,\n offset,\n chainIds,\n }: ChainsQueryParams = {}): Promise<Response<ApiResponse<ChainsResponse>>> {\n return this.httpClient.get('/metadata/chains', {\n withSupportedTokens,\n limit,\n offset,\n chainIds,\n });\n }\n\n async routes(\n routesRequestParams: RoutesRequestParams\n ): Promise<Response<ApiResponse<RoutesResponse>>> {\n return this.httpClient.post('/routes', routesRequestParams);\n }\n\n async buildTransaction(\n builtTransactionRequestBody: BuildTransactionRequestBody\n ): Promise<Response<ApiResponse<BuildTransactionResponse>>> {\n return this.httpClient.post(\n '/routes/build-transaction',\n builtTransactionRequestBody\n );\n }\n\n // supports cursor based pagination only\n async transactions(\n transactionsRequestQueryParams: TransactionsRequestQueryParams\n ): Promise<Response<ApiResponse<TransactionsResponse>>> {\n return this.httpClient.get('/transactions', {\n transactionsRequestQueryParams,\n });\n }\n}\n","/**\n * Core Module\n *\n * Primary interface for users\n */\n\nimport type {\n CoreConfig,\n RoutesRequestParams,\n RoutesResponse,\n TransactionsRequestQueryParams,\n TransactionsResponse,\n ChainsResponse,\n Route,\n} from '@/types';\nimport { ArcApiService } from './services/arcApi';\nimport { UnsignedTransaction } from 'types/core/_arcApiUnsignedTransaction';\nimport {\n DEFAULT_CHAINS_PER_PAGE,\n DEFAULT_CHAINS_WITH_TOKENS_PER_PAGE,\n MAX_TRANSACTIONS_PER_PAGE,\n} from '../constants';\n\nexport class CoreClient {\n private config: CoreConfig;\n private arcApiService: ArcApiService;\n\n constructor(config: CoreConfig) {\n this.config = config;\n\n if (!this.config) {\n throw new Error('Config is required');\n }\n\n if (!this.config.apiBaseUrl) {\n throw new Error('API base URL is required');\n }\n\n const { apiBaseUrl, apiTimeout } = this.config;\n\n this.arcApiService = new ArcApiService({\n baseUrl: apiBaseUrl,\n timeout: apiTimeout ?? 30000,\n });\n }\n\n /**\n * Generic pagination helper for chains API calls (limit and offset based pagination)\n * Handles automatic pagination to fetch all available data\n * @param params - Parameters for the chains API call\n * @param pageSize - Number of items per page (defaults to DEFAULT_CHAINS_PER_PAGE)\n */\n private async getAllChainsPaginated(\n params: {\n chainIds?: number[];\n withSupportedTokens?: boolean;\n limit?: number;\n offset?: number;\n },\n pageSize: number = DEFAULT_CHAINS_PER_PAGE\n ): Promise<ChainsResponse> {\n // First call to get initial data and check total count\n const firstResponse = await this.arcApiService.chains({\n ...params,\n limit: pageSize,\n });\n\n if (firstResponse.data.status !== 'success') {\n throw new Error(firstResponse.data.message);\n }\n\n const firstPageData = firstResponse.data.data;\n const pagination = firstResponse.data.pagination;\n\n // The API returns chains directly as an array in the data field\n const firstPageChains = Array.isArray(firstPageData) ? firstPageData : [];\n\n // If no pagination info or total is within first page, return first page data\n if (!pagination?.total || pagination.total <= pageSize) {\n return {\n chains: firstPageChains,\n };\n }\n\n // Calculate how many additional pages we need to fetch\n const totalPages = Math.ceil(pagination.total / pageSize);\n const remainingPages = totalPages - 1; // We already have the first page\n\n if (remainingPages === 0) {\n return {\n chains: firstPageChains,\n };\n }\n\n // Create array of promises for remaining pages (parallel calls)\n const remainingPagePromises = Array.from(\n { length: remainingPages },\n (_, index) => {\n const offset = (index + 1) * pageSize;\n return this.arcApiService.chains({\n ...params,\n limit: pageSize,\n offset,\n });\n }\n );\n\n // Execute all remaining page calls in parallel\n const remainingResponses = await Promise.all(remainingPagePromises);\n\n // Check for errors in any of the responses\n for (const response of remainingResponses) {\n if (response.data.status !== 'success') {\n throw new Error(response.data.message);\n }\n }\n\n // Combine all chain data from all pages\n const allChains = [\n ...firstPageChains,\n ...remainingResponses.flatMap((response) => {\n if (response.data.status === 'success') {\n return Array.isArray(response.data.data) ? response.data.data : [];\n }\n return [];\n }),\n ];\n\n // Return combined data\n return {\n chains: allChains,\n };\n }\n\n /**\n * Get all chains metadata from AggLayer API\n * Handles pagination automatically to fetch all available chains\n */\n async getAllChains(): Promise<ChainsResponse> {\n return this.getAllChainsPaginated({});\n }\n\n /**\n * Get chain metadata by id from AggLayer API\n * Handles pagination automatically to fetch all available chain metadata\n * @param ids - the ids of the chains to get metadata for\n */\n async getChainMetadataByChainIds(ids: number[]): Promise<ChainsResponse> {\n return this.getAllChainsPaginated({ chainIds: ids });\n }\n\n /**\n * Get all tokens from AggLayer API\n *\n * Developer Note: This method is not recommended to use frequently or from frontend.\n * As it can be very slow and resource intensive.\n * It is recommended to use getChainDataAndTokensByChainIds instead.\n */\n async getAllTokens(): Promise<ChainsResponse> {\n return this.getAllChainsPaginated(\n { withSupportedTokens: true },\n DEFAULT_CHAINS_WITH_TOKENS_PER_PAGE\n );\n }\n\n /**\n * Get chain data and tokens by AggLayer API\n * @param ids - the ids of the chains to get data and tokens for\n */\n async getChainDataAndTokensByChainIds(\n ids: number[]\n ): Promise<ChainsResponse> {\n return this.getAllChainsPaginated({\n chainIds: ids,\n withSupportedTokens: true,\n });\n }\n\n /**\n * Get all routes from AggLayer API\n */\n async getRoutes(\n routesRequestParams: RoutesRequestParams\n ): Promise<RoutesResponse> {\n const response = await this.arcApiService.routes(routesRequestParams);\n if (response.data.status === 'success') {\n return response.data.data;\n }\n throw new Error(response.data.message);\n }\n\n /**\n * Get calldata from a route\n * If route has transactionRequest field, return it directly as calldata\n * Otherwise, call buildTransaction on route.steps[0] and return that as calldata\n */\n async getUnsignedTransaction(route: Route): Promise<UnsignedTransaction> {\n if (route.transactionRequest) {\n return route.transactionRequest;\n }\n\n // If no transactionRequest, call buildTransaction on first step\n if (route.steps.length === 0 || !route.steps[0]) {\n throw new Error('Route has no steps to build transaction from');\n }\n\n const response = await this.arcApiService.buildTransaction(route.steps[0]);\n if (response.data.status === 'success') {\n return response.data.data;\n }\n throw new Error(response.data.message);\n }\n\n /**\n * Get all transactions via web sockets\n */\n async getTransactions(\n transactionsRequestQueryParams: TransactionsRequestQueryParams\n ): Promise<TransactionsResponse> {\n // validate limit\n if (\n transactionsRequestQueryParams.limit &&\n transactionsRequestQueryParams.limit > MAX_TRANSACTIONS_PER_PAGE\n ) {\n throw new Error(\n `Limit cannot be greater than ${MAX_TRANSACTIONS_PER_PAGE}`\n );\n }\n\n const response = await this.arcApiService.transactions(\n transactionsRequestQueryParams\n );\n if (response.data.status === 'success') {\n return response.data.data;\n }\n throw new Error(response.data.message);\n }\n}\n","/**\n * AggLayer SDK - Main SDK\n *\n * Main SDK that orchestrates different submodules\n */\n\nimport { NativeClient } from '@/native';\nimport { SDK_MODES, type SDKConfig } from '@/types';\nimport { CoreClient } from '@/core';\nimport { DEFAULT_NETWORK } from './constants';\n\n// Re-export all types from centralized location\nexport type * from './types';\n\n// Re-export constants and values\nexport { SDK_MODES } from './types';\n\nexport class AggLayerSDK {\n private config: SDKConfig;\n\n private core?: CoreClient;\n private native?: NativeClient;\n\n constructor(config: SDKConfig) {\n this.config = config;\n\n /**\n * by default only core is enabled\n * if mode is not provided, only core is enabled\n * if mode is provided, only the modules in the mode are enabled\n * if mode is provided and core is not in the mode, core is not enabled\n * if mode is provided and native is not in the mode, native is not enabled\n * if mode is provided and core and native are in the mode, both are enabled\n * if mode is provided and core and native are not in the mode, default to core only\n */\n\n if (!config.mode || (config.mode && config.mode.length === 0)) {\n this.config.mode = ['CORE'];\n }\n\n if (config.mode.includes(SDK_MODES.CORE)) {\n if (!this.config.core) {\n throw new Error('Core config is required');\n }\n\n this.core = new CoreClient(this.config.core);\n }\n\n // Initialize native submodule if enabled\n if (this.config.mode?.includes(SDK_MODES.NATIVE)) {\n if (!this.config.native) {\n throw new Error('NATIVE config is required');\n }\n\n const nativeConfig = {\n defaultNetwork: this.config.native?.defaultNetwork || DEFAULT_NETWORK,\n ...(this.config.native?.chains && {\n chains: this.config.native.chains,\n }),\n ...(this.config.native?.customRpcUrls && {\n customRpcUrls: this.config.native.customRpcUrls,\n }),\n };\n\n this.native = new NativeClient(nativeConfig);\n }\n }\n\n /**\n * Get core submodule\n */\n getCore(): CoreClient {\n if (!this.core) {\n throw new Error('Core module not initialized. Add \"core\" to mode array.');\n }\n return this.core;\n }\n\n /**\n * Get native submodule\n */\n getNative(): NativeClient {\n if (!this.native) {\n throw new Error(\n 'NATIVE module not initialized. Add \"native\" to mode array.'\n );\n }\n return this.native;\n }\n}\n"],"mappings":"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","names":["chain","encodeFunctionData","encodeFunctionData","encodeFunctionData","encodeFunctionData","createPublicClient","http","createPublicClient","http","log","from","from","createPublicClient","http","createPublicClient","http"]}
|