@agglayer/sdk 1.0.0-beta.21 → 1.0.0-beta.23
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.d.mts +24 -1
- package/dist/index.d.ts +24 -1
- package/dist/index.js +26 -1
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +26 -1
- package/dist/index.mjs.map +1 -1
- package/package.json +2 -2
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/utils/apiError.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 // DEV: if adding new default chains, also update README.md\n private initializeDefaultChains() {\n // Ethereum Mainnet\n this.registerChain({\n chainId: 1,\n networkId: 0,\n name: 'Ethereum',\n rpcUrl: 'https://eth.llamarpc.com',\n nativeCurrency: { name: 'Ether', symbol: 'ETH', decimals: 18 },\n blockExplorer: { name: 'Etherscan', url: 'https://etherscan.io' },\n bridgeAddress: '',\n proofApiUrl:\n 'https://api-gateway.polygon.technology/api/v3/proof/mainnet/',\n isTestnet: false,\n });\n\n // Katana\n this.registerChain({\n chainId: 747474,\n networkId: 20,\n name: 'Katana',\n rpcUrl: 'https://rpc.katana.network',\n nativeCurrency: { name: 'Ethereum', symbol: 'ETH', decimals: 18 },\n blockExplorer: {\n name: 'Katana Explorer',\n url: 'https://katanascan.com',\n },\n bridgeAddress: '',\n proofApiUrl:\n 'https://api-gateway.polygon.technology/api/v3/proof/mainnet/',\n isTestnet: false,\n });\n\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 // todo: add bokuto testnet details\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/**\n * SDK mode = CORE\n *\n */\n// if changing these, also change in README.md\nexport const ARC_API_BASE_URL = 'https://arc-api.polygon.technology';\nexport const ARC_API_DEFAULT_TIMEOUT = 30000; // in ms\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/**\n * SDK mode = NATIVE\n */\n\n// network ids\nexport const NETWORKS = {\n ETHEREUM: 1,\n KATANA: 747474,\n} as const;\n\nexport const DEFAULT_NETWORK = NETWORKS.ETHEREUM;\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 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 if (!response.ok) {\n // For JSON responses, the error details are in the parsed data\n // For non-JSON responses, create a generic error\n if (contentType?.includes('application/json')) {\n // The error details are already parsed in data, let the caller handle it\n // This allows the Core client to properly check response.data.status\n } else {\n throw new Error(`HTTP ${response.status}: ${response.statusText}`);\n }\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 BuildClaimTransactionResponse,\n TokenMappingQueryParams,\n TokenMappingResponse,\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 async buildClaimTransaction(\n sourceNetworkId: number,\n depositCount: number\n ): Promise<Response<ApiResponse<BuildClaimTransactionResponse>>> {\n return this.httpClient.post('/routes/build-transaction-for-claim', {\n sourceNetworkId,\n depositCount,\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 async tokenMappings(\n tokenMappingQueryParams: TokenMappingQueryParams\n ): Promise<Response<ApiResponse<TokenMappingResponse>>> {\n const { tokenAddress } = tokenMappingQueryParams;\n return this.httpClient.get(`/token-mappings/${tokenAddress}`);\n }\n}\n","/**\n * API Error Class\n *\n * Custom error class to preserve API error details\n */\n\nimport type { ErrorResponse } from '../../types/core/_arcApiBase';\n\nexport class ApiError extends Error {\n public readonly code: number;\n public override readonly name: string;\n public readonly details?: Record<string, unknown> | undefined;\n\n constructor(errorResponse: ErrorResponse) {\n super(errorResponse.message);\n\n this.name = errorResponse.name;\n this.code = errorResponse.code;\n this.details = errorResponse.details;\n\n // Maintain proper stack trace (if available)\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, ApiError);\n }\n }\n\n /**\n * Create API error from error response\n */\n static fromErrorResponse(errorResponse: ErrorResponse): ApiError {\n return new ApiError(errorResponse);\n }\n\n /**\n * Create fallback error when API completely fails\n */\n static createFallbackError(\n originalError: Error,\n operation: string\n ): ApiError {\n return new ApiError({\n status: 'error',\n message: `${operation} failed: ${originalError.message}`,\n name: 'ApiConnectionError',\n code: 500,\n details: {\n originalError: originalError.message,\n operation,\n },\n });\n }\n\n /**\n * Convert to plain object for serialization\n */\n toJSON() {\n return {\n name: this.name,\n message: this.message,\n code: this.code,\n details: this.details,\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 BuildClaimTransactionRequestParam,\n TokenMappingQueryParams,\n TokenMappingResponse,\n} from '@/types';\nimport { ArcApiService } from './services/arcApi';\nimport { UnsignedTransaction } from 'types/core/_arcApiUnsignedTransaction';\nimport { ApiError } from './utils/apiError';\nimport {\n ARC_API_BASE_URL,\n ARC_API_DEFAULT_TIMEOUT,\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 // build config first\n this.config = {\n ...config,\n apiBaseUrl: config?.apiBaseUrl || ARC_API_BASE_URL,\n apiTimeout: config?.apiTimeout || ARC_API_DEFAULT_TIMEOUT,\n };\n\n const { apiBaseUrl, apiTimeout } = this.config;\n\n this.arcApiService = new ArcApiService({\n baseUrl: apiBaseUrl || ARC_API_BASE_URL,\n timeout: apiTimeout || ARC_API_DEFAULT_TIMEOUT,\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 try {\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 ApiError.fromErrorResponse(firstResponse.data);\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 ApiError.fromErrorResponse(response.data);\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 } catch (error) {\n if (error instanceof ApiError) {\n throw error;\n }\n throw ApiError.createFallbackError(error as Error, 'Get chains metadata');\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 try {\n const response = await this.arcApiService.routes(routesRequestParams);\n if (response.data.status === 'success') {\n return response.data.data;\n }\n throw ApiError.fromErrorResponse(response.data);\n } catch (error) {\n if (error instanceof ApiError) {\n throw error;\n }\n throw ApiError.createFallbackError(error as Error, 'Get routes');\n }\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 ApiError.createFallbackError(\n new Error('Route has no steps to build transaction from'),\n 'Get unsigned transaction'\n );\n }\n\n try {\n const response = await this.arcApiService.buildTransaction(\n route.steps[0]\n );\n if (response.data.status === 'success') {\n return response.data.data;\n }\n throw ApiError.fromErrorResponse(response.data);\n } catch (error) {\n if (error instanceof ApiError) {\n throw error;\n }\n throw ApiError.createFallbackError(\n error as Error,\n 'Get unsigned transaction'\n );\n }\n }\n\n /**\n * Get calldata for claim step\n * Needs to be called separately as claim step is not part of route.\n *\n * @developer Note: Do not misinterpret network ID as chain ID.\n *\n * @param sourceNetworkId - The source network ID where the transfer was initiated.\n * @param depositCount - The deposit count associated with the transfer.\n */\n async getClaimUnsignedTransaction(\n buildClaimTxParams: BuildClaimTransactionRequestParam\n ): Promise<UnsignedTransaction> {\n try {\n const response = await this.arcApiService.buildClaimTransaction(\n buildClaimTxParams.sourceNetworkId,\n buildClaimTxParams.depositCount\n );\n if (response.data.status === 'success') {\n return response.data.data;\n }\n throw ApiError.fromErrorResponse(response.data);\n } catch (error) {\n if (error instanceof ApiError) {\n throw error;\n }\n throw ApiError.createFallbackError(\n error as Error,\n 'Get claim unsigned transaction'\n );\n }\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 ApiError.createFallbackError(\n new Error(`Limit cannot be greater than ${MAX_TRANSACTIONS_PER_PAGE}`),\n 'Get transactions'\n );\n }\n\n try {\n const response = await this.arcApiService.transactions(\n transactionsRequestQueryParams\n );\n if (response.data.status === 'success') {\n return response.data.data;\n }\n throw ApiError.fromErrorResponse(response.data);\n } catch (error) {\n if (error instanceof ApiError) {\n throw error;\n }\n throw ApiError.createFallbackError(error as Error, 'Get transactions');\n }\n }\n\n /**\n * Get token mappings by token address\n * @developer Note: Do not misinterpret network ID as chain ID.\n *\n * @param tokenAddress\n */\n async getTokenMappings(\n tokenMappingQueryParams: TokenMappingQueryParams\n ): Promise<TokenMappingResponse> {\n try {\n const response = await this.arcApiService.tokenMappings(\n tokenMappingQueryParams\n );\n if (response.data.status === 'success') {\n return response.data.data;\n }\n throw ApiError.fromErrorResponse(response.data);\n } catch (error) {\n if (error instanceof ApiError) {\n throw error;\n }\n throw ApiError.createFallbackError(\n error as Error,\n 'Get custom token mappings'\n );\n }\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\n// Re-export error classes\nexport { ApiError } from './core/utils/apiError';\n\nconst defaultConfig: SDKConfig = {\n mode: [SDK_MODES.CORE],\n};\n\nexport class AggLayerSDK {\n private config: SDKConfig;\n\n private core?: CoreClient;\n private native?: NativeClient;\n\n constructor(config: SDKConfig = defaultConfig) {\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 // Initialize core submodule if enabled\n if (this.config.mode?.includes(SDK_MODES.CORE)) {\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 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"]}
|
|
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/utils/apiError.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 // DEV: if adding new default chains, also update README.md\n private initializeDefaultChains() {\n // Ethereum Mainnet\n this.registerChain({\n chainId: 1,\n networkId: 0,\n name: 'Ethereum',\n rpcUrl: 'https://eth.llamarpc.com',\n nativeCurrency: { name: 'Ether', symbol: 'ETH', decimals: 18 },\n blockExplorer: { name: 'Etherscan', url: 'https://etherscan.io' },\n bridgeAddress: '',\n proofApiUrl:\n 'https://api-gateway.polygon.technology/api/v3/proof/mainnet/',\n isTestnet: false,\n });\n\n // Katana\n this.registerChain({\n chainId: 747474,\n networkId: 20,\n name: 'Katana',\n rpcUrl: 'https://rpc.katana.network',\n nativeCurrency: { name: 'Ethereum', symbol: 'ETH', decimals: 18 },\n blockExplorer: {\n name: 'Katana Explorer',\n url: 'https://katanascan.com',\n },\n bridgeAddress: '',\n proofApiUrl:\n 'https://api-gateway.polygon.technology/api/v3/proof/mainnet/',\n isTestnet: false,\n });\n\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 // todo: add bokuto testnet details\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/**\n * SDK mode = CORE\n *\n */\n// if changing these, also change in README.md\nexport const ARC_API_BASE_URL = 'https://arc-api.polygon.technology';\nexport const ARC_API_DEFAULT_TIMEOUT = 30000; // in ms\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/**\n * SDK mode = NATIVE\n */\n\n// network ids\nexport const NETWORKS = {\n ETHEREUM: 1,\n KATANA: 747474,\n} as const;\n\nexport const DEFAULT_NETWORK = NETWORKS.ETHEREUM;\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 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 if (!response.ok) {\n // For JSON responses, the error details are in the parsed data\n // For non-JSON responses, create a generic error\n if (contentType?.includes('application/json')) {\n // The error details are already parsed in data, let the caller handle it\n // This allows the Core client to properly check response.data.status\n } else {\n throw new Error(`HTTP ${response.status}: ${response.statusText}`);\n }\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 BuildClaimTransactionResponse,\n TokenMappingQueryParams,\n TokenMappingResponse,\n TokenMetadataRequestParam,\n TokenMetadataResponse,\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 tokenMetadata(\n tokenMetadataRequestParam: TokenMetadataRequestParam\n ): Promise<Response<ApiResponse<TokenMetadataResponse>>> {\n return this.httpClient.get(\n `/metadata/tokens/${tokenMetadataRequestParam.tokenAddress}`\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 async buildClaimTransaction(\n sourceNetworkId: number,\n depositCount: number\n ): Promise<Response<ApiResponse<BuildClaimTransactionResponse>>> {\n return this.httpClient.post('/routes/build-transaction-for-claim', {\n sourceNetworkId,\n depositCount,\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 async tokenMappings(\n tokenMappingQueryParams: TokenMappingQueryParams\n ): Promise<Response<ApiResponse<TokenMappingResponse>>> {\n const { tokenAddress } = tokenMappingQueryParams;\n return this.httpClient.get(`/token-mappings/${tokenAddress}`);\n }\n}\n","/**\n * API Error Class\n *\n * Custom error class to preserve API error details\n */\n\nimport type { ErrorResponse } from '../../types/core/_arcApiBase';\n\nexport class ApiError extends Error {\n public readonly code: number;\n public override readonly name: string;\n public readonly details?: Record<string, unknown> | undefined;\n\n constructor(errorResponse: ErrorResponse) {\n super(errorResponse.message);\n\n this.name = errorResponse.name;\n this.code = errorResponse.code;\n this.details = errorResponse.details;\n\n // Maintain proper stack trace (if available)\n if (Error.captureStackTrace) {\n Error.captureStackTrace(this, ApiError);\n }\n }\n\n /**\n * Create API error from error response\n */\n static fromErrorResponse(errorResponse: ErrorResponse): ApiError {\n return new ApiError(errorResponse);\n }\n\n /**\n * Create fallback error when API completely fails\n */\n static createFallbackError(\n originalError: Error,\n operation: string\n ): ApiError {\n return new ApiError({\n status: 'error',\n message: `${operation} failed: ${originalError.message}`,\n name: 'ApiConnectionError',\n code: 500,\n details: {\n originalError: originalError.message,\n operation,\n },\n });\n }\n\n /**\n * Convert to plain object for serialization\n */\n toJSON() {\n return {\n name: this.name,\n message: this.message,\n code: this.code,\n details: this.details,\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 BuildClaimTransactionRequestParam,\n TokenMappingQueryParams,\n TokenMappingResponse,\n TokenMetadataRequestParam,\n TokenMetadataResponse,\n} from '@/types';\nimport { ArcApiService } from './services/arcApi';\nimport { UnsignedTransaction } from 'types/core/_arcApiUnsignedTransaction';\nimport { ApiError } from './utils/apiError';\nimport {\n ARC_API_BASE_URL,\n ARC_API_DEFAULT_TIMEOUT,\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 // build config first\n this.config = {\n ...config,\n apiBaseUrl: config?.apiBaseUrl || ARC_API_BASE_URL,\n apiTimeout: config?.apiTimeout || ARC_API_DEFAULT_TIMEOUT,\n };\n\n const { apiBaseUrl, apiTimeout } = this.config;\n\n this.arcApiService = new ArcApiService({\n baseUrl: apiBaseUrl || ARC_API_BASE_URL,\n timeout: apiTimeout || ARC_API_DEFAULT_TIMEOUT,\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 try {\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 ApiError.fromErrorResponse(firstResponse.data);\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 ApiError.fromErrorResponse(response.data);\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 } catch (error) {\n if (error instanceof ApiError) {\n throw error;\n }\n throw ApiError.createFallbackError(error as Error, 'Get chains metadata');\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 token metadata by token address from ARC API\n * @param tokenMetadataRequestParam - Object containing the token address\n */\n async getTokenMetadata(\n tokenMetadataRequestParam: TokenMetadataRequestParam\n ): Promise<TokenMetadataResponse> {\n try {\n const response = await this.arcApiService.tokenMetadata(\n tokenMetadataRequestParam\n );\n if (response.data.status === 'success') {\n return response.data.data;\n }\n throw ApiError.fromErrorResponse(response.data);\n } catch (error) {\n if (error instanceof ApiError) {\n throw error;\n }\n throw ApiError.createFallbackError(error as Error, 'Get token metadata');\n }\n }\n\n /**\n * Get all routes from AggLayer API\n */\n async getRoutes(\n routesRequestParams: RoutesRequestParams\n ): Promise<RoutesResponse> {\n try {\n const response = await this.arcApiService.routes(routesRequestParams);\n if (response.data.status === 'success') {\n return response.data.data;\n }\n throw ApiError.fromErrorResponse(response.data);\n } catch (error) {\n if (error instanceof ApiError) {\n throw error;\n }\n throw ApiError.createFallbackError(error as Error, 'Get routes');\n }\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 ApiError.createFallbackError(\n new Error('Route has no steps to build transaction from'),\n 'Get unsigned transaction'\n );\n }\n\n try {\n const response = await this.arcApiService.buildTransaction(\n route.steps[0]\n );\n if (response.data.status === 'success') {\n return response.data.data;\n }\n throw ApiError.fromErrorResponse(response.data);\n } catch (error) {\n if (error instanceof ApiError) {\n throw error;\n }\n throw ApiError.createFallbackError(\n error as Error,\n 'Get unsigned transaction'\n );\n }\n }\n\n /**\n * Get calldata for claim step\n * Needs to be called separately as claim step is not part of route.\n *\n * @developer Note: Do not misinterpret network ID as chain ID.\n *\n * @param sourceNetworkId - The source network ID where the transfer was initiated.\n * @param depositCount - The deposit count associated with the transfer.\n */\n async getClaimUnsignedTransaction(\n buildClaimTxParams: BuildClaimTransactionRequestParam\n ): Promise<UnsignedTransaction> {\n try {\n const response = await this.arcApiService.buildClaimTransaction(\n buildClaimTxParams.sourceNetworkId,\n buildClaimTxParams.depositCount\n );\n if (response.data.status === 'success') {\n return response.data.data;\n }\n throw ApiError.fromErrorResponse(response.data);\n } catch (error) {\n if (error instanceof ApiError) {\n throw error;\n }\n throw ApiError.createFallbackError(\n error as Error,\n 'Get claim unsigned transaction'\n );\n }\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 ApiError.createFallbackError(\n new Error(`Limit cannot be greater than ${MAX_TRANSACTIONS_PER_PAGE}`),\n 'Get transactions'\n );\n }\n\n try {\n const response = await this.arcApiService.transactions(\n transactionsRequestQueryParams\n );\n if (response.data.status === 'success') {\n return response.data.data;\n }\n throw ApiError.fromErrorResponse(response.data);\n } catch (error) {\n if (error instanceof ApiError) {\n throw error;\n }\n throw ApiError.createFallbackError(error as Error, 'Get transactions');\n }\n }\n\n /**\n * Get token mappings by token address\n * @developer Note: Do not misinterpret network ID as chain ID.\n *\n * @param tokenAddress\n */\n async getTokenMappings(\n tokenMappingQueryParams: TokenMappingQueryParams\n ): Promise<TokenMappingResponse> {\n try {\n const response = await this.arcApiService.tokenMappings(\n tokenMappingQueryParams\n );\n if (response.data.status === 'success') {\n return response.data.data;\n }\n throw ApiError.fromErrorResponse(response.data);\n } catch (error) {\n if (error instanceof ApiError) {\n throw error;\n }\n throw ApiError.createFallbackError(\n error as Error,\n 'Get custom token mappings'\n );\n }\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\n// Re-export error classes\nexport { ApiError } from './core/utils/apiError';\n\nconst defaultConfig: SDKConfig = {\n mode: [SDK_MODES.CORE],\n};\n\nexport class AggLayerSDK {\n private config: SDKConfig;\n\n private core?: CoreClient;\n private native?: NativeClient;\n\n constructor(config: SDKConfig = defaultConfig) {\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 // Initialize core submodule if enabled\n if (this.config.mode?.includes(SDK_MODES.CORE)) {\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 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"]}
|