@axonfi/sdk 0.5.2 → 0.5.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/constants.ts","../src/signer.ts","../src/abis/AxonVault.ts","../src/abis/AxonVaultFactory.ts","../src/tokens.ts","../src/vault.ts","../src/amounts.ts","../src/utils.ts","../src/x402.ts","../src/eip3009.ts","../src/permit2.ts","../src/client.ts","../src/keystore.ts","../src/abis/AxonRegistry.ts"],"names":["keccak256","stringToBytes","Chain","Token","base","baseSepolia","arbitrum","arbitrumSepolia","createPublicClient","http","privateKeyToAccount","createWalletClient","erc20Abi","entry","parseUnits","scryptAsync","ctr","keccak_256"],"mappings":"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","file":"index.cjs","sourcesContent":["import { keccak256, stringToBytes } from 'viem';\nimport type { Address } from 'viem';\n\n// ============================================================================\n// EIP-712 type hashes\n// ============================================================================\n\n/**\n * keccak256 of the PaymentIntent type string — used for manual digest\n * verification. viem's signTypedData computes this internally; you don't\n * need this value for signing, only for low-level verification.\n */\nexport const PAYMENT_INTENT_TYPEHASH: `0x${string}` = keccak256(\n stringToBytes('PaymentIntent(address bot,address to,address token,uint256 amount,uint256 deadline,bytes32 ref)'),\n);\n\n/** keccak256 of the ExecuteIntent type string for DeFi protocol interactions. */\nexport const EXECUTE_INTENT_TYPEHASH: `0x${string}` = keccak256(\n stringToBytes(\n 'ExecuteIntent(address bot,address protocol,bytes32 calldataHash,address token,uint256 amount,uint256 deadline,bytes32 ref)',\n ),\n);\n\n/** keccak256 of the SwapIntent type string for in-vault token rebalancing. */\nexport const SWAP_INTENT_TYPEHASH: `0x${string}` = keccak256(\n stringToBytes('SwapIntent(address bot,address toToken,uint256 minToAmount,uint256 deadline,bytes32 ref)'),\n);\n\n/** EIP-712 domain name and version for AxonVault. Matches the constructor. */\nexport const EIP712_DOMAIN_NAME = 'AxonVault' as const;\nexport const EIP712_DOMAIN_VERSION = '1' as const;\n\n// ============================================================================\n// Native ETH sentinel\n// ============================================================================\n\n/** Sentinel address representing native ETH in PaymentIntents and deposits. */\nexport const NATIVE_ETH: Address = '0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE';\n\n// ============================================================================\n// USDC addresses per chain\n// ============================================================================\n\nexport const USDC: Record<number, Address> = {\n // Base mainnet\n 8453: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913',\n // Base Sepolia\n 84532: '0x036CbD53842c5426634e7929541eC2318f3dCF7e',\n // Arbitrum One\n 42161: '0xaf88d065e77c8cC2239327C5EDb3A432268e5831',\n // Arbitrum Sepolia\n 421614: '0x75faf114eafb1BDbe2F0316DF893fd58CE46AA4d',\n};\n\n// ============================================================================\n// Chain enum & supported chain IDs\n// ============================================================================\n\nexport enum Chain {\n Base = 8453,\n BaseSepolia = 84532,\n Arbitrum = 42161,\n ArbitrumSepolia = 421614,\n}\n\nexport const SUPPORTED_CHAIN_IDS = [8453, 84532, 42161, 421614] as const;\nexport type SupportedChainId = (typeof SUPPORTED_CHAIN_IDS)[number];\n\n// ============================================================================\n// Chain metadata (names & block explorers)\n// ============================================================================\n\n/** Human-readable chain names. */\nexport const CHAIN_NAMES: Record<number, string> = {\n [Chain.Base]: 'Base',\n [Chain.BaseSepolia]: 'Base Sepolia',\n [Chain.Arbitrum]: 'Arbitrum One',\n [Chain.ArbitrumSepolia]: 'Arbitrum Sepolia',\n // Future v1 chains (metadata only — not in SUPPORTED_CHAIN_IDS yet)\n 10: 'Optimism',\n 11155420: 'OP Sepolia',\n 137: 'Polygon',\n 80002: 'Polygon Amoy',\n};\n\n/** Block explorer TX URL prefix per chain. */\nexport const EXPLORER_TX: Record<number, string> = {\n [Chain.Base]: 'https://basescan.org/tx/',\n [Chain.BaseSepolia]: 'https://sepolia.basescan.org/tx/',\n [Chain.Arbitrum]: 'https://arbiscan.io/tx/',\n [Chain.ArbitrumSepolia]: 'https://sepolia.arbiscan.io/tx/',\n 10: 'https://optimistic.etherscan.io/tx/',\n 11155420: 'https://sepolia-optimism.etherscan.io/tx/',\n 137: 'https://polygonscan.com/tx/',\n 80002: 'https://amoy.polygonscan.com/tx/',\n};\n\n/** Block explorer address URL prefix per chain. */\nexport const EXPLORER_ADDR: Record<number, string> = {\n [Chain.Base]: 'https://basescan.org/address/',\n [Chain.BaseSepolia]: 'https://sepolia.basescan.org/address/',\n [Chain.Arbitrum]: 'https://arbiscan.io/address/',\n [Chain.ArbitrumSepolia]: 'https://sepolia.arbiscan.io/address/',\n 10: 'https://optimistic.etherscan.io/address/',\n 11155420: 'https://sepolia-optimism.etherscan.io/address/',\n 137: 'https://polygonscan.com/address/',\n 80002: 'https://amoy.polygonscan.com/address/',\n};\n\n// ============================================================================\n// Time constants (seconds)\n// ============================================================================\n\n/** Default intent validity window when no deadline is specified. */\nexport const DEFAULT_DEADLINE_SECONDS = 300; // 5 minutes\n\n/** Window presets for SpendingLimit.windowSeconds. */\nexport const WINDOW = {\n ONE_HOUR: 3600n,\n ONE_DAY: 86400n,\n ONE_WEEK: 604800n,\n THIRTY_DAYS: 2592000n,\n} as const;\n\n// ============================================================================\n// Payment rejection error codes\n// ============================================================================\n\n/**\n * Structured error codes returned by the relayer when a payment is rejected.\n * Bots should import these to programmatically handle failures.\n */\nexport const PaymentErrorCode = {\n /** Payment destination is the vault itself */\n SELF_PAYMENT: 'SELF_PAYMENT',\n /** Payment destination is the zero address */\n ZERO_ADDRESS: 'ZERO_ADDRESS',\n /** Payment amount is zero */\n ZERO_AMOUNT: 'ZERO_AMOUNT',\n /** Vault does not hold enough of the requested token */\n INSUFFICIENT_BALANCE: 'INSUFFICIENT_BALANCE',\n /** EIP-712 signature verification failed */\n INVALID_SIGNATURE: 'INVALID_SIGNATURE',\n /** Payment intent deadline has passed */\n DEADLINE_EXPIRED: 'DEADLINE_EXPIRED',\n /** Bot is temporarily paused by the operator */\n BOT_PAUSED: 'BOT_PAUSED',\n /** Bot address is not registered/active in the vault */\n BOT_NOT_ACTIVE: 'BOT_NOT_ACTIVE',\n /** Destination address is on the global or vault blacklist */\n BLACKLISTED: 'BLACKLISTED',\n /** Rolling-window spending limit (USD amount) exceeded */\n SPENDING_LIMIT_EXCEEDED: 'SPENDING_LIMIT_EXCEEDED',\n /** Rolling-window transaction count limit exceeded */\n TX_COUNT_EXCEEDED: 'TX_COUNT_EXCEEDED',\n /** Single transaction exceeds the bot's on-chain maxPerTxAmount */\n MAX_PER_TX_EXCEEDED: 'MAX_PER_TX_EXCEEDED',\n /** Vault-level daily aggregate spending limit exceeded */\n VAULT_AGGREGATE_EXCEEDED: 'VAULT_AGGREGATE_EXCEEDED',\n /** eth_call simulation of the on-chain transaction reverted */\n SIMULATION_FAILED: 'SIMULATION_FAILED',\n /** Routed to human review (AI scan flagged or no consensus) */\n PENDING_REVIEW: 'PENDING_REVIEW',\n /** Relayer wallet has insufficient gas to submit the transaction */\n RELAYER_OUT_OF_GAS: 'RELAYER_OUT_OF_GAS',\n /** On-chain transaction submission failed */\n SUBMISSION_FAILED: 'SUBMISSION_FAILED',\n /** Destination not in the vault/bot whitelist */\n DESTINATION_NOT_WHITELISTED: 'DESTINATION_NOT_WHITELISTED',\n /** Vault address is not a valid AxonVault or was not deployed by a known factory */\n INVALID_VAULT: 'INVALID_VAULT',\n /** Rebalance output token is not in the whitelist (on-chain or relayer default) */\n REBALANCE_TOKEN_NOT_ALLOWED: 'REBALANCE_TOKEN_NOT_ALLOWED',\n /** Rebalance input amount exceeds the bot's maxRebalanceAmount cap */\n MAX_REBALANCE_AMOUNT_EXCEEDED: 'MAX_REBALANCE_AMOUNT_EXCEEDED',\n /** Unknown or internal error */\n INTERNAL_ERROR: 'INTERNAL_ERROR',\n} as const;\n\nexport type PaymentErrorCode = (typeof PaymentErrorCode)[keyof typeof PaymentErrorCode];\n\n// ============================================================================\n// Relayer API paths\n// ============================================================================\n\nexport const RELAYER_API = {\n PAYMENTS: '/v1/payments',\n payment: (requestId: string) => `/v1/payments/${requestId}`,\n EXECUTE: '/v1/execute',\n execute: (requestId: string) => `/v1/execute/${requestId}`,\n SWAP: '/v1/swap',\n swap: (requestId: string) => `/v1/swap/${requestId}`,\n\n // Vault read endpoints (relayer reads chain on behalf of bots)\n vaultBalance: (vault: string, token: string, chainId: number) =>\n `/v1/vault/${vault}/balance/${token}?chainId=${chainId}`,\n vaultBalances: (vault: string, chainId: number) => `/v1/vault/${vault}/balances`,\n vaultInfo: (vault: string, chainId: number) => `/v1/vault/${vault}/info?chainId=${chainId}`,\n botStatus: (vault: string, bot: string, chainId: number) => `/v1/vault/${vault}/bot/${bot}/status?chainId=${chainId}`,\n destinationCheck: (vault: string, bot: string, destination: string, chainId: number) =>\n `/v1/vault/${vault}/bot/${bot}/destination/${destination}?chainId=${chainId}`,\n protocolCheck: (vault: string, protocol: string, chainId: number) =>\n `/v1/vault/${vault}/protocol/${protocol}?chainId=${chainId}`,\n rebalanceTokens: (vault: string, chainId: number) => `/v1/vault/${vault}/rebalance-tokens?chainId=${chainId}`,\n rebalanceTokenCheck: (vault: string, token: string, chainId: number) =>\n `/v1/vault/${vault}/rebalance-token/${token}?chainId=${chainId}`,\n\n // TOS endpoints\n tosStatus: (wallet: string) => `/v1/tos/status?wallet=${wallet}`,\n TOS_ACCEPT: '/v1/tos/accept',\n} as const;\n","import { keccak256, stringToBytes } from 'viem';\nimport type { WalletClient, Hex, Address } from 'viem';\nimport type { PaymentIntent, ExecuteIntent, SwapIntent } from './types.js';\nimport { EIP712_DOMAIN_NAME, EIP712_DOMAIN_VERSION } from './constants.js';\n\n// EIP-712 types for PaymentIntent — field order matches the Solidity struct exactly.\nconst PAYMENT_INTENT_TYPES = {\n PaymentIntent: [\n { name: 'bot', type: 'address' },\n { name: 'to', type: 'address' },\n { name: 'token', type: 'address' },\n { name: 'amount', type: 'uint256' },\n { name: 'deadline', type: 'uint256' },\n { name: 'ref', type: 'bytes32' },\n ],\n} as const;\n\n// EIP-712 types for ExecuteIntent — DeFi protocol interactions.\nconst EXECUTE_INTENT_TYPES = {\n ExecuteIntent: [\n { name: 'bot', type: 'address' },\n { name: 'protocol', type: 'address' },\n { name: 'calldataHash', type: 'bytes32' },\n { name: 'token', type: 'address' },\n { name: 'amount', type: 'uint256' },\n { name: 'deadline', type: 'uint256' },\n { name: 'ref', type: 'bytes32' },\n ],\n} as const;\n\n// EIP-712 types for SwapIntent — in-vault token rebalancing.\nconst SWAP_INTENT_TYPES = {\n SwapIntent: [\n { name: 'bot', type: 'address' },\n { name: 'toToken', type: 'address' },\n { name: 'minToAmount', type: 'uint256' },\n { name: 'deadline', type: 'uint256' },\n { name: 'ref', type: 'bytes32' },\n ],\n} as const;\n\nfunction makeDomain(vaultAddress: Address, chainId: number) {\n return {\n name: EIP712_DOMAIN_NAME,\n version: EIP712_DOMAIN_VERSION,\n chainId,\n verifyingContract: vaultAddress,\n } as const;\n}\n\n/**\n * Sign a PaymentIntent using EIP-712 typed structured data.\n *\n * The resulting signature can be submitted to the Axon relayer API, which\n * passes it to AxonVault.executePayment() on-chain.\n */\nexport async function signPayment(\n walletClient: WalletClient,\n vaultAddress: Address,\n chainId: number,\n intent: PaymentIntent,\n): Promise<Hex> {\n if (!walletClient.account) {\n throw new Error('walletClient has no account attached');\n }\n\n return walletClient.signTypedData({\n account: walletClient.account,\n domain: makeDomain(vaultAddress, chainId),\n types: PAYMENT_INTENT_TYPES,\n primaryType: 'PaymentIntent',\n message: {\n bot: intent.bot,\n to: intent.to,\n token: intent.token,\n amount: intent.amount,\n deadline: intent.deadline,\n ref: intent.ref,\n },\n });\n}\n\n/**\n * Sign an ExecuteIntent using EIP-712 typed structured data.\n *\n * The resulting signature can be submitted to the Axon relayer API, which\n * passes it to AxonVault.executeProtocol() on-chain.\n */\nexport async function signExecuteIntent(\n walletClient: WalletClient,\n vaultAddress: Address,\n chainId: number,\n intent: ExecuteIntent,\n): Promise<Hex> {\n if (!walletClient.account) {\n throw new Error('walletClient has no account attached');\n }\n\n return walletClient.signTypedData({\n account: walletClient.account,\n domain: makeDomain(vaultAddress, chainId),\n types: EXECUTE_INTENT_TYPES,\n primaryType: 'ExecuteIntent',\n message: {\n bot: intent.bot,\n protocol: intent.protocol,\n calldataHash: intent.calldataHash,\n token: intent.token,\n amount: intent.amount,\n deadline: intent.deadline,\n ref: intent.ref,\n },\n });\n}\n\n/**\n * Sign a SwapIntent using EIP-712 typed structured data.\n *\n * The resulting signature can be submitted to the Axon relayer API, which\n * passes it to AxonVault.executeSwap() on-chain.\n */\nexport async function signSwapIntent(\n walletClient: WalletClient,\n vaultAddress: Address,\n chainId: number,\n intent: SwapIntent,\n): Promise<Hex> {\n if (!walletClient.account) {\n throw new Error('walletClient has no account attached');\n }\n\n return walletClient.signTypedData({\n account: walletClient.account,\n domain: makeDomain(vaultAddress, chainId),\n types: SWAP_INTENT_TYPES,\n primaryType: 'SwapIntent',\n message: {\n bot: intent.bot,\n toToken: intent.toToken,\n minToAmount: intent.minToAmount,\n deadline: intent.deadline,\n ref: intent.ref,\n },\n });\n}\n\n/**\n * Derive the on-chain `ref` bytes32 from a human-readable memo string.\n *\n * The full memo text is stored off-chain by the relayer (PostgreSQL), linked\n * to the transaction. The keccak256 hash goes into the signed PaymentIntent\n * and is emitted in the PaymentExecuted on-chain event.\n *\n * @param memo Human-readable description, e.g. \"API call #1234 — weather data\"\n * @returns keccak256 hash of the UTF-8 encoded memo, as a bytes32 hex.\n */\nexport function encodeRef(memo: string): Hex {\n return keccak256(stringToBytes(memo));\n}\n","export const AxonVaultAbi = [\n {\n \"type\": \"constructor\",\n \"inputs\": [\n {\n \"name\": \"_owner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_axonRegistry\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"receive\",\n \"stateMutability\": \"payable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"DOMAIN_SEPARATOR\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"MAX_SPENDING_LIMITS\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint8\",\n \"internalType\": \"uint8\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"NATIVE_ETH\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"VERSION\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint16\",\n \"internalType\": \"uint16\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"acceptOwnership\",\n \"inputs\": [],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"addBot\",\n \"inputs\": [\n {\n \"name\": \"bot\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"params\",\n \"type\": \"tuple\",\n \"internalType\": \"struct AxonVault.BotConfigParams\",\n \"components\": [\n {\n \"name\": \"maxPerTxAmount\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"maxRebalanceAmount\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"spendingLimits\",\n \"type\": \"tuple[]\",\n \"internalType\": \"struct AxonVault.SpendingLimit[]\",\n \"components\": [\n {\n \"name\": \"amount\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"maxCount\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"windowSeconds\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ]\n },\n {\n \"name\": \"aiTriggerThreshold\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"requireAiVerification\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ]\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"addBotDestination\",\n \"inputs\": [\n {\n \"name\": \"bot\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"destination\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"addGlobalBlacklist\",\n \"inputs\": [\n {\n \"name\": \"destination\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"addGlobalDestination\",\n \"inputs\": [\n {\n \"name\": \"destination\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"addRebalanceTokens\",\n \"inputs\": [\n {\n \"name\": \"tokens\",\n \"type\": \"address[]\",\n \"internalType\": \"address[]\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"approveProtocol\",\n \"inputs\": [\n {\n \"name\": \"protocol\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"approvedProtocolCount\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"approvedProtocols\",\n \"inputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"axonRegistry\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"botAddedByOperator\",\n \"inputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"botDestinationCount\",\n \"inputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"botDestinationWhitelist\",\n \"inputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"deposit\",\n \"inputs\": [\n {\n \"name\": \"token\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"ref\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"payable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"eip712Domain\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"fields\",\n \"type\": \"bytes1\",\n \"internalType\": \"bytes1\"\n },\n {\n \"name\": \"name\",\n \"type\": \"string\",\n \"internalType\": \"string\"\n },\n {\n \"name\": \"version\",\n \"type\": \"string\",\n \"internalType\": \"string\"\n },\n {\n \"name\": \"chainId\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"verifyingContract\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"salt\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"extensions\",\n \"type\": \"uint256[]\",\n \"internalType\": \"uint256[]\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"executePayment\",\n \"inputs\": [\n {\n \"name\": \"intent\",\n \"type\": \"tuple\",\n \"internalType\": \"struct AxonVault.PaymentIntent\",\n \"components\": [\n {\n \"name\": \"bot\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"to\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"token\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"deadline\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"ref\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ]\n },\n {\n \"name\": \"signature\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n },\n {\n \"name\": \"fromToken\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"maxFromAmount\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"swapRouter\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"swapCalldata\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"executeProtocol\",\n \"inputs\": [\n {\n \"name\": \"intent\",\n \"type\": \"tuple\",\n \"internalType\": \"struct AxonVault.ExecuteIntent\",\n \"components\": [\n {\n \"name\": \"bot\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"protocol\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"calldataHash\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"token\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"deadline\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"ref\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ]\n },\n {\n \"name\": \"signature\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n },\n {\n \"name\": \"callData\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n },\n {\n \"name\": \"fromToken\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"maxFromAmount\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"swapRouter\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"swapCalldata\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"executeSwap\",\n \"inputs\": [\n {\n \"name\": \"intent\",\n \"type\": \"tuple\",\n \"internalType\": \"struct AxonVault.SwapIntent\",\n \"components\": [\n {\n \"name\": \"bot\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"toToken\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"minToAmount\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"deadline\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"ref\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ]\n },\n {\n \"name\": \"signature\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n },\n {\n \"name\": \"fromToken\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"maxFromAmount\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"swapRouter\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"swapCalldata\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"getBotConfig\",\n \"inputs\": [\n {\n \"name\": \"bot\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"tuple\",\n \"internalType\": \"struct AxonVault.BotConfig\",\n \"components\": [\n {\n \"name\": \"isActive\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n },\n {\n \"name\": \"registeredAt\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"maxPerTxAmount\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"maxRebalanceAmount\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"spendingLimits\",\n \"type\": \"tuple[]\",\n \"internalType\": \"struct AxonVault.SpendingLimit[]\",\n \"components\": [\n {\n \"name\": \"amount\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"maxCount\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"windowSeconds\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ]\n },\n {\n \"name\": \"aiTriggerThreshold\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"requireAiVerification\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ]\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"globalBlacklistCount\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"globalDestinationBlacklist\",\n \"inputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"globalDestinationCount\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"globalDestinationWhitelist\",\n \"inputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"isBotActive\",\n \"inputs\": [\n {\n \"name\": \"bot\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"isContractApproved\",\n \"inputs\": [\n {\n \"name\": \"protocol\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"operator\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"operatorBotCount\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"operatorCeilings\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"maxPerTxAmount\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"maxBotDailyLimit\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"maxOperatorBots\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"vaultDailyAggregate\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"minAiTriggerFloor\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"operatorMaxDrainPerDay\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"owner\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"pause\",\n \"inputs\": [],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"paused\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"pendingOwner\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"rebalanceTokenCount\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"rebalanceTokenWhitelist\",\n \"inputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"removeBot\",\n \"inputs\": [\n {\n \"name\": \"bot\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"removeBotDestination\",\n \"inputs\": [\n {\n \"name\": \"bot\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"destination\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"removeGlobalBlacklist\",\n \"inputs\": [\n {\n \"name\": \"destination\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"removeGlobalDestination\",\n \"inputs\": [\n {\n \"name\": \"destination\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"removeRebalanceTokens\",\n \"inputs\": [\n {\n \"name\": \"tokens\",\n \"type\": \"address[]\",\n \"internalType\": \"address[]\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"renounceOwnership\",\n \"inputs\": [],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"revokeProtocol\",\n \"inputs\": [\n {\n \"name\": \"protocol\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"setOperator\",\n \"inputs\": [\n {\n \"name\": \"_operator\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"setOperatorCeilings\",\n \"inputs\": [\n {\n \"name\": \"ceilings\",\n \"type\": \"tuple\",\n \"internalType\": \"struct AxonVault.OperatorCeilings\",\n \"components\": [\n {\n \"name\": \"maxPerTxAmount\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"maxBotDailyLimit\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"maxOperatorBots\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"vaultDailyAggregate\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"minAiTriggerFloor\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ]\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"transferOwnership\",\n \"inputs\": [\n {\n \"name\": \"newOwner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"unpause\",\n \"inputs\": [],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"updateBotConfig\",\n \"inputs\": [\n {\n \"name\": \"bot\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"params\",\n \"type\": \"tuple\",\n \"internalType\": \"struct AxonVault.BotConfigParams\",\n \"components\": [\n {\n \"name\": \"maxPerTxAmount\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"maxRebalanceAmount\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"spendingLimits\",\n \"type\": \"tuple[]\",\n \"internalType\": \"struct AxonVault.SpendingLimit[]\",\n \"components\": [\n {\n \"name\": \"amount\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"maxCount\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"windowSeconds\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ]\n },\n {\n \"name\": \"aiTriggerThreshold\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"requireAiVerification\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ]\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"usedIntents\",\n \"inputs\": [\n {\n \"name\": \"\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"withdraw\",\n \"inputs\": [\n {\n \"name\": \"token\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"to\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"event\",\n \"name\": \"BotAdded\",\n \"inputs\": [\n {\n \"name\": \"bot\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"addedBy\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"BotConfigUpdated\",\n \"inputs\": [\n {\n \"name\": \"bot\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"updatedBy\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"BotDestinationAdded\",\n \"inputs\": [\n {\n \"name\": \"bot\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"destination\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"BotDestinationRemoved\",\n \"inputs\": [\n {\n \"name\": \"bot\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"destination\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"BotRemoved\",\n \"inputs\": [\n {\n \"name\": \"bot\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"removedBy\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"Deposited\",\n \"inputs\": [\n {\n \"name\": \"from\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"token\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"ref\",\n \"type\": \"bytes32\",\n \"indexed\": false,\n \"internalType\": \"bytes32\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"EIP712DomainChanged\",\n \"inputs\": [],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"GlobalBlacklistAdded\",\n \"inputs\": [\n {\n \"name\": \"destination\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"GlobalBlacklistRemoved\",\n \"inputs\": [\n {\n \"name\": \"destination\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"GlobalDestinationAdded\",\n \"inputs\": [\n {\n \"name\": \"destination\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"GlobalDestinationRemoved\",\n \"inputs\": [\n {\n \"name\": \"destination\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"OperatorCeilingsUpdated\",\n \"inputs\": [\n {\n \"name\": \"ceilings\",\n \"type\": \"tuple\",\n \"indexed\": false,\n \"internalType\": \"struct AxonVault.OperatorCeilings\",\n \"components\": [\n {\n \"name\": \"maxPerTxAmount\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"maxBotDailyLimit\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"maxOperatorBots\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"vaultDailyAggregate\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"minAiTriggerFloor\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ]\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"OperatorSet\",\n \"inputs\": [\n {\n \"name\": \"oldOperator\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"newOperator\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"OwnershipTransferStarted\",\n \"inputs\": [\n {\n \"name\": \"previousOwner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"newOwner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"OwnershipTransferred\",\n \"inputs\": [\n {\n \"name\": \"previousOwner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"newOwner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"Paused\",\n \"inputs\": [\n {\n \"name\": \"account\",\n \"type\": \"address\",\n \"indexed\": false,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"PaymentExecuted\",\n \"inputs\": [\n {\n \"name\": \"bot\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"to\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"token\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"ref\",\n \"type\": \"bytes32\",\n \"indexed\": false,\n \"internalType\": \"bytes32\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"ProtocolApproved\",\n \"inputs\": [\n {\n \"name\": \"protocol\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"ProtocolExecuted\",\n \"inputs\": [\n {\n \"name\": \"bot\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"protocol\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"token\",\n \"type\": \"address\",\n \"indexed\": false,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"ref\",\n \"type\": \"bytes32\",\n \"indexed\": false,\n \"internalType\": \"bytes32\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"ProtocolRevoked\",\n \"inputs\": [\n {\n \"name\": \"protocol\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"RebalanceTokenAdded\",\n \"inputs\": [\n {\n \"name\": \"token\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"RebalanceTokenRemoved\",\n \"inputs\": [\n {\n \"name\": \"token\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"SwapExecuted\",\n \"inputs\": [\n {\n \"name\": \"bot\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"fromToken\",\n \"type\": \"address\",\n \"indexed\": false,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"toToken\",\n \"type\": \"address\",\n \"indexed\": false,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"fromAmount\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"toAmount\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"ref\",\n \"type\": \"bytes32\",\n \"indexed\": false,\n \"internalType\": \"bytes32\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"SwapPaymentExecuted\",\n \"inputs\": [\n {\n \"name\": \"bot\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"to\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"fromToken\",\n \"type\": \"address\",\n \"indexed\": false,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"toToken\",\n \"type\": \"address\",\n \"indexed\": false,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"fromAmount\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"toAmount\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"ref\",\n \"type\": \"bytes32\",\n \"indexed\": false,\n \"internalType\": \"bytes32\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"Unpaused\",\n \"inputs\": [\n {\n \"name\": \"account\",\n \"type\": \"address\",\n \"indexed\": false,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"Withdrawn\",\n \"inputs\": [\n {\n \"name\": \"token\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"to\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"error\",\n \"name\": \"AlreadyApprovedProtocol\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"AmountMismatch\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"BotAlreadyExists\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"BotDoesNotExist\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"BotNotActive\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"CalldataHashMismatch\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"ContractNotApproved\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"DeadlineExpired\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"DestinationBlacklisted\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"DestinationNotWhitelisted\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"ECDSAInvalidSignature\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"ECDSAInvalidSignatureLength\",\n \"inputs\": [\n {\n \"name\": \"length\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ]\n },\n {\n \"type\": \"error\",\n \"name\": \"ECDSAInvalidSignatureS\",\n \"inputs\": [\n {\n \"name\": \"s\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ]\n },\n {\n \"type\": \"error\",\n \"name\": \"EnforcedPause\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"ExceedsOperatorCeiling\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"ExpectedPause\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"InsufficientBalance\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"IntentAlreadyUsed\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"InvalidShortString\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"InvalidSignature\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"MaxPerTxExceeded\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"MaxRebalanceAmountExceeded\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"NativeTransferFailed\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"NotAuthorized\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"NotAuthorizedRelayer\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"OperatorBotLimitReached\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"OperatorCannotBeOwner\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"OracleNotConfigured\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"OracleUnavailable\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"OwnableInvalidOwner\",\n \"inputs\": [\n {\n \"name\": \"owner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ]\n },\n {\n \"type\": \"error\",\n \"name\": \"OwnableUnauthorizedAccount\",\n \"inputs\": [\n {\n \"name\": \"account\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ]\n },\n {\n \"type\": \"error\",\n \"name\": \"OwnerCannotBeBot\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"PaymentToZeroAddress\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"ProtocolCallFailed\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"ProtocolNotApproved\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"RebalanceTokenNotAllowed\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"ReentrancyGuardReentrantCall\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"RouterNotApproved\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"SafeERC20FailedOperation\",\n \"inputs\": [\n {\n \"name\": \"token\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ]\n },\n {\n \"type\": \"error\",\n \"name\": \"SameTokenSwap\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"SelfPayment\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"StringTooLong\",\n \"inputs\": [\n {\n \"name\": \"str\",\n \"type\": \"string\",\n \"internalType\": \"string\"\n }\n ]\n },\n {\n \"type\": \"error\",\n \"name\": \"SwapFailed\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"SwapOutputInsufficient\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"TooManySpendingLimits\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"UnexpectedETH\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"ZeroAddress\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"ZeroAmount\",\n \"inputs\": []\n }\n] as const;\n","export const AxonVaultFactoryAbi = [\n {\n \"type\": \"constructor\",\n \"inputs\": [\n {\n \"name\": \"_axonRegistry\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"factoryOwner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"acceptOwnership\",\n \"inputs\": [],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"allVaults\",\n \"inputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"axonRegistry\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"deployVault\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"vault\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"owner\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"ownerVaultCount\",\n \"inputs\": [\n {\n \"name\": \"owner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"ownerVaults\",\n \"inputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"pendingOwner\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"renounceOwnership\",\n \"inputs\": [],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"transferOwnership\",\n \"inputs\": [\n {\n \"name\": \"newOwner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"vaultCount\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"event\",\n \"name\": \"OwnershipTransferStarted\",\n \"inputs\": [\n {\n \"name\": \"previousOwner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"newOwner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"OwnershipTransferred\",\n \"inputs\": [\n {\n \"name\": \"previousOwner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"newOwner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"VaultDeployed\",\n \"inputs\": [\n {\n \"name\": \"owner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"vault\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"version\",\n \"type\": \"uint16\",\n \"indexed\": false,\n \"internalType\": \"uint16\"\n },\n {\n \"name\": \"axonRegistry\",\n \"type\": \"address\",\n \"indexed\": false,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"error\",\n \"name\": \"OwnableInvalidOwner\",\n \"inputs\": [\n {\n \"name\": \"owner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ]\n },\n {\n \"type\": \"error\",\n \"name\": \"OwnableUnauthorizedAccount\",\n \"inputs\": [\n {\n \"name\": \"account\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ]\n },\n {\n \"type\": \"error\",\n \"name\": \"ZeroAddress\",\n \"inputs\": []\n }\n] as const;\n","import type { Address } from 'viem';\n\n// !! After editing this file, regenerate the Python SDK copy:\n// !! npx tsx scripts/generate-python-tokens.ts\n\n// ============================================================================\n// Token enum — type-safe token symbols for SDK consumers\n// ============================================================================\n\nexport enum Token {\n USDC = 'USDC',\n USDT = 'USDT',\n DAI = 'DAI',\n WETH = 'WETH',\n WBTC = 'WBTC',\n cbBTC = 'cbBTC',\n cbETH = 'cbETH',\n wstETH = 'wstETH',\n rETH = 'rETH',\n weETH = 'weETH',\n LINK = 'LINK',\n UNI = 'UNI',\n AAVE = 'AAVE',\n COMP = 'COMP',\n CRV = 'CRV',\n SNX = 'SNX',\n ARB = 'ARB',\n AERO = 'AERO',\n GMX = 'GMX',\n}\n\n// ============================================================================\n// Known token registry — single source of truth for all packages\n// ============================================================================\n\nexport interface KnownToken {\n symbol: string;\n name: string;\n decimals: number;\n /** Address per chainId. Missing key = not available on that chain. */\n addresses: Partial<Record<number, Address>>;\n}\n\n/**\n * Master token registry keyed by symbol.\n * At a glance you see which chains each token lives on.\n *\n * Chain IDs: 8453 = Base, 84532 = Base Sepolia, 42161 = Arbitrum One, 421614 = Arbitrum Sepolia\n */\nexport const KNOWN_TOKENS = {\n // ── Core stables + wrapped ──────────────────────────────\n USDC: {\n symbol: 'USDC',\n name: 'USD Coin',\n decimals: 6,\n addresses: {\n 8453: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913',\n 84532: '0x036CbD53842c5426634e7929541eC2318f3dCF7e',\n 42161: '0xaf88d065e77c8cC2239327C5EDb3A432268e5831',\n 421614: '0x75faf114eafb1BDbe2F0316DF893fd58CE46AA4d',\n },\n },\n USDT: {\n symbol: 'USDT',\n name: 'Tether USD',\n decimals: 6,\n addresses: {\n 8453: '0xfde4C96c8593536E31F229EA8f37b2ADa2699bb2',\n 84532: '0x323e78f944A9a1FcF3a10efcC5319DBb0bB6e673',\n 42161: '0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9',\n },\n },\n DAI: {\n symbol: 'DAI',\n name: 'Dai Stablecoin',\n decimals: 18,\n addresses: {\n 8453: '0x50c5725949A6F0c72E6C4a641F24049A917DB0Cb',\n 84532: '0x819ffecd4e64f193e959944bcd57eedc7755e17a',\n 42161: '0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1',\n },\n },\n WETH: {\n symbol: 'WETH',\n name: 'Wrapped Ether',\n decimals: 18,\n addresses: {\n 8453: '0x4200000000000000000000000000000000000006',\n 84532: '0x4200000000000000000000000000000000000006',\n 42161: '0x82aF49447D8a07e3bd95BD0d56f35241523fBab1',\n 421614: '0x980B62Da83eFf3D4576C647993b0c1D7faf17c73',\n },\n },\n WBTC: {\n symbol: 'WBTC',\n name: 'Wrapped BTC',\n decimals: 8,\n addresses: {\n 8453: '0x0555E30da8f98308EdB960aa94C0Db47230d2B9c',\n 42161: '0x2f2a2543B76A4166549F7aaB2e75Bef0aefC5B0f',\n },\n },\n cbBTC: {\n symbol: 'cbBTC',\n name: 'Coinbase Wrapped BTC',\n decimals: 8,\n addresses: {\n 8453: '0xcbB7C0000aB88B473b1f5aFd9ef808440eed33Bf',\n 42161: '0xcbB7C0000aB88B473b1f5aFd9ef808440eed33Bf',\n },\n },\n\n // ── Liquid staking ──────────────────────────────────────\n cbETH: {\n symbol: 'cbETH',\n name: 'Coinbase Staked ETH',\n decimals: 18,\n addresses: {\n 8453: '0x2Ae3F1Ec7F1F5012CFEab0185bfc7aa3cf0DEc22',\n 42161: '0x1DEBd73E752bEaF79865Fd6446b0c970EaE7732f',\n },\n },\n wstETH: {\n symbol: 'wstETH',\n name: 'Lido Wrapped stETH',\n decimals: 18,\n addresses: {\n 8453: '0xc1CBa3fCea344f92D9239c08C0568f6F2F0ee452',\n 42161: '0x5979D7b546E38E414F7E9822514be443A4800529',\n },\n },\n rETH: {\n symbol: 'rETH',\n name: 'Rocket Pool ETH',\n decimals: 18,\n addresses: {\n 8453: '0xB6fe221Fe9EeF5aBa221c348bA20A1Bf5e73624c',\n 42161: '0xEC70Dcb4A1EFa46b8F2D97C310C9c4790ba5ffA8',\n },\n },\n weETH: {\n symbol: 'weETH',\n name: 'EtherFi Wrapped eETH',\n decimals: 18,\n addresses: {\n 8453: '0x04C0599Ae5A44757c0af6F9eC3b93da8976c150A',\n 42161: '0x35751007a407ca6FEFfE80b3cB397736D2cf4dbe',\n },\n },\n\n // ── DeFi blue-chips ─────────────────────────────────────\n LINK: {\n symbol: 'LINK',\n name: 'Chainlink',\n decimals: 18,\n addresses: {\n 8453: '0x88Fb150BDc53A65fe94Dea0c9BA0a6dAf8C6e196',\n 84532: '0xE4aB69C077896252FAFBD49EFD26B5D171A32410',\n 42161: '0xf97f4df75117a78c1A5a0DBb814Af92458539FB4',\n },\n },\n UNI: {\n symbol: 'UNI',\n name: 'Uniswap',\n decimals: 18,\n addresses: {\n 8453: '0xc3De830EA07524a0761646a6a4e4be0e114a3C83',\n 42161: '0xFa7F8980b0f1E64A2062791cc3b0871572f1F7f0',\n },\n },\n AAVE: {\n symbol: 'AAVE',\n name: 'Aave',\n decimals: 18,\n addresses: {\n 8453: '0x63706e401c06ac8513145b7687A14804d17f814b',\n 42161: '0xba5DdD1f9d7F570dc94a51479a000E3BCE967196',\n },\n },\n COMP: {\n symbol: 'COMP',\n name: 'Compound',\n decimals: 18,\n addresses: {\n 8453: '0x9e1028F5F1D5eDE59748FFceE5532509976840E0',\n 42161: '0x354A6dA3fcde098F8389cad84b0182725c6C91dE',\n },\n },\n CRV: {\n symbol: 'CRV',\n name: 'Curve DAO',\n decimals: 18,\n addresses: {\n 8453: '0x8Ee73c484A26e0A5df2Ee2a4960B789967dd0415',\n 42161: '0x11cDb42B0EB46D95f990BeDD4695A6e3fA034978',\n },\n },\n SNX: {\n symbol: 'SNX',\n name: 'Synthetix',\n decimals: 18,\n addresses: {\n 8453: '0x22e6966B799c4D5B13BE962E1D117b56327FDa66',\n },\n },\n\n // ── Chain-native governance ─────────────────────────────\n ARB: {\n symbol: 'ARB',\n name: 'Arbitrum',\n decimals: 18,\n addresses: {\n 42161: '0x912CE59144191C1204E64559FE8253a0e49E6548',\n },\n },\n AERO: {\n symbol: 'AERO',\n name: 'Aerodrome',\n decimals: 18,\n addresses: {\n 8453: '0x940181a94A35A4569E4529A3CDfB74e38FD98631',\n },\n },\n GMX: {\n symbol: 'GMX',\n name: 'GMX',\n decimals: 18,\n addresses: {\n 42161: '0xfc5A1A6EB076a2C7aD06eD22C90d7E710E35ad0a',\n },\n },\n} as const satisfies Record<string, KnownToken>;\n\nexport type KnownTokenSymbol = keyof typeof KNOWN_TOKENS;\n\n/**\n * Tokens that new vaults should pre-approve as protocols at deploy time.\n * This enables the two-step approval pattern (approve token → call DeFi protocol)\n * without the owner having to manually add common tokens.\n *\n * Used by: AxonRegistry (on-chain default list), deploy scripts, dashboard.\n */\nexport const DEFAULT_APPROVED_TOKENS: KnownTokenSymbol[] = [\n 'USDC', 'USDT', 'DAI', 'WETH', 'WBTC', 'cbBTC', 'wstETH', 'weETH', 'cbETH', 'rETH',\n];\n\n/** Get default approved token addresses for a specific chain. */\nexport function getDefaultApprovedTokens(chainId: number): Address[] {\n const addresses: Address[] = [];\n for (const symbol of DEFAULT_APPROVED_TOKENS) {\n const entry = KNOWN_TOKENS[symbol];\n const addr = (entry.addresses as Record<number, Address | undefined>)[chainId];\n if (addr) addresses.push(addr);\n }\n return addresses;\n}\n\n// Pre-build reverse lookup map: lowercase address → symbol\nconst addressToSymbol = new Map<string, string>();\nfor (const token of Object.values(KNOWN_TOKENS)) {\n for (const addr of Object.values(token.addresses)) {\n addressToSymbol.set((addr as string).toLowerCase(), token.symbol);\n }\n}\n\n/** All known tokens available on a specific chain. */\nexport function getKnownTokensForChain(chainId: number): (KnownToken & { address: Address })[] {\n const result: (KnownToken & { address: Address })[] = [];\n for (const token of Object.values(KNOWN_TOKENS)) {\n const addr = (token.addresses as Record<number, Address | undefined>)[chainId];\n if (addr) {\n result.push({ ...token, address: addr });\n }\n }\n return result;\n}\n\n/** Reverse-lookup: address → symbol (case-insensitive). Returns null if unknown. */\nexport function getTokenSymbolByAddress(address: string): string | null {\n return addressToSymbol.get(address.toLowerCase()) ?? null;\n}\n\n/**\n * Resolve a Token enum symbol to its on-chain address for a given chain.\n * If an Address (0x...) is passed, it is returned as-is.\n *\n * @throws if the symbol has no address on the given chain.\n */\nexport function resolveToken(token: Address | Token | KnownTokenSymbol, chainId: number): Address {\n // Already an address — pass through (with zero-address guard)\n if (typeof token === 'string' && token.startsWith('0x')) {\n if (token === '0x0000000000000000000000000000000000000000') {\n throw new Error('Token address cannot be the zero address');\n }\n return token as Address;\n }\n\n const entry = KNOWN_TOKENS[token as keyof typeof KNOWN_TOKENS];\n if (!entry) {\n throw new Error(`Unknown token symbol: ${token}`);\n }\n\n const addr = (entry.addresses as Record<number, Address | undefined>)[chainId];\n if (!addr) {\n throw new Error(`Token ${token} is not available on chain ${chainId}`);\n }\n\n return addr;\n}\n","import { createPublicClient, createWalletClient, http } from 'viem';\nimport { privateKeyToAccount } from 'viem/accounts';\nimport { base, baseSepolia, arbitrum, arbitrumSepolia } from 'viem/chains';\nimport type { PublicClient, WalletClient, Address, Hex, Chain } from 'viem';\nimport { AxonVaultAbi } from './abis/AxonVault.js';\nimport { AxonVaultFactoryAbi } from './abis/AxonVaultFactory.js';\nimport { erc20Abi } from 'viem';\nimport { NATIVE_ETH } from './constants.js';\nimport { resolveToken, type KnownTokenSymbol } from './tokens.js';\nimport type { BotConfig, BotConfigParams, BotConfigInput, OperatorCeilings, VaultInfo, DestinationCheckResult } from './types.js';\n\n// ============================================================================\n// Chain helpers\n// ============================================================================\n\n/** Returns the viem Chain object for a supported Axon chain ID. */\nexport function getChain(chainId: number): Chain {\n switch (chainId) {\n case 8453:\n return base;\n case 84532:\n return baseSepolia;\n case 42161:\n return arbitrum;\n case 421614:\n return arbitrumSepolia;\n default:\n throw new Error(\n `Unsupported chainId: ${chainId}. Supported: 8453 (Base), 84532 (Base Sepolia), 42161 (Arbitrum), 421614 (Arbitrum Sepolia)`,\n );\n }\n}\n\n/** Create a viem PublicClient for the given chain and RPC URL. */\nexport function createAxonPublicClient(chainId: number, rpcUrl: string): PublicClient {\n return createPublicClient({\n chain: getChain(chainId),\n transport: http(rpcUrl),\n });\n}\n\n/** Create a viem WalletClient from a raw private key (signing-only, no RPC needed). */\nexport function createAxonWalletClient(privateKey: Hex, chainId: number): WalletClient {\n const account = privateKeyToAccount(privateKey);\n return createWalletClient({\n account,\n chain: getChain(chainId),\n transport: http(), // signing is local — transport is unused but required by viem\n });\n}\n\n// ============================================================================\n// BotConfigInput → BotConfigParams conversion\n// ============================================================================\n\nconst USDC_DECIMALS = 6n;\nconst USDC_UNIT = 10n ** USDC_DECIMALS; // 1_000_000n\n\n/** Convert human-friendly BotConfigInput (dollar amounts) to on-chain BotConfigParams (6-decimal bigints). */\nexport function toBotConfigParams(input: BotConfigInput): BotConfigParams {\n return {\n maxPerTxAmount: BigInt(Math.round(input.maxPerTxAmount * Number(USDC_UNIT))),\n maxRebalanceAmount: BigInt(Math.round(input.maxRebalanceAmount * Number(USDC_UNIT))),\n spendingLimits: input.spendingLimits.map((sl) => ({\n amount: BigInt(Math.round(sl.amount * Number(USDC_UNIT))),\n maxCount: BigInt(sl.maxCount),\n windowSeconds: BigInt(sl.windowSeconds),\n })),\n aiTriggerThreshold: BigInt(Math.round(input.aiTriggerThreshold * Number(USDC_UNIT))),\n requireAiVerification: input.requireAiVerification,\n };\n}\n\n// ============================================================================\n// Factory address resolution\n// ============================================================================\n\nconst DEFAULT_RELAYER_URL = 'https://relay.axonfi.xyz';\n\n/** Fetch the factory address for a chain from the relayer's /v1/chains endpoint. */\nasync function getFactoryAddress(chainId: number, relayerUrl?: string): Promise<Address> {\n const base = relayerUrl ?? DEFAULT_RELAYER_URL;\n const resp = await fetch(`${base}/v1/chains`);\n if (!resp.ok) throw new Error(`Failed to fetch chain config from relayer [${resp.status}]`);\n const data = await resp.json();\n const chain = data.chains?.find((c: { chainId: number }) => c.chainId === chainId);\n if (!chain?.factoryAddress) {\n throw new Error(`No factory address available for chainId ${chainId}. Check the relayer's chain configuration.`);\n }\n return chain.factoryAddress as Address;\n}\n\n// ============================================================================\n// Read-only vault helpers\n// ============================================================================\n\n/**\n * Returns the full BotConfig for a bot address from the vault.\n * If the bot has never been added, isActive will be false and all\n * numeric fields will be 0n.\n */\nexport async function getBotConfig(\n publicClient: PublicClient,\n vaultAddress: Address,\n botAddress: Address,\n): Promise<BotConfig> {\n const result = await publicClient.readContract({\n address: vaultAddress,\n abi: AxonVaultAbi,\n functionName: 'getBotConfig',\n args: [botAddress],\n });\n\n return {\n isActive: result.isActive,\n registeredAt: result.registeredAt,\n maxPerTxAmount: result.maxPerTxAmount,\n maxRebalanceAmount: result.maxRebalanceAmount,\n spendingLimits: result.spendingLimits.map((sl) => ({\n amount: sl.amount,\n maxCount: sl.maxCount,\n windowSeconds: sl.windowSeconds,\n })),\n aiTriggerThreshold: result.aiTriggerThreshold,\n requireAiVerification: result.requireAiVerification,\n };\n}\n\n/** Returns whether a bot address is currently active in the vault. */\nexport async function isBotActive(\n publicClient: PublicClient,\n vaultAddress: Address,\n botAddress: Address,\n): Promise<boolean> {\n return publicClient.readContract({\n address: vaultAddress,\n abi: AxonVaultAbi,\n functionName: 'isBotActive',\n args: [botAddress],\n });\n}\n\n/** Returns the operator ceilings set by the vault owner. */\nexport async function getOperatorCeilings(\n publicClient: PublicClient,\n vaultAddress: Address,\n): Promise<OperatorCeilings> {\n const result = await publicClient.readContract({\n address: vaultAddress,\n abi: AxonVaultAbi,\n functionName: 'operatorCeilings',\n });\n\n // viem returns multiple named outputs as a tuple; destructure by position\n const [maxPerTxAmount, maxBotDailyLimit, maxOperatorBots, vaultDailyAggregate, minAiTriggerFloor] = result as [\n bigint,\n bigint,\n bigint,\n bigint,\n bigint,\n ];\n\n return {\n maxPerTxAmount,\n maxBotDailyLimit,\n maxOperatorBots,\n vaultDailyAggregate,\n minAiTriggerFloor,\n };\n}\n\n/**\n * Returns the maximum USDC an operator-compromised wallet could drain per day.\n * Computed on-chain as: min(maxOperatorBots × maxBotDailyLimit, vaultDailyAggregate).\n * Returns 0n if operator has no bot-add permission.\n */\nexport async function operatorMaxDrainPerDay(publicClient: PublicClient, vaultAddress: Address): Promise<bigint> {\n return publicClient.readContract({\n address: vaultAddress,\n abi: AxonVaultAbi,\n functionName: 'operatorMaxDrainPerDay',\n });\n}\n\n/** Returns whether the vault is currently paused. */\nexport async function isVaultPaused(publicClient: PublicClient, vaultAddress: Address): Promise<boolean> {\n return publicClient.readContract({\n address: vaultAddress,\n abi: AxonVaultAbi,\n functionName: 'paused',\n });\n}\n\n/** Returns the EIP-712 domain separator for this vault (for off-chain verification). */\nexport async function getDomainSeparator(publicClient: PublicClient, vaultAddress: Address): Promise<Hex> {\n return publicClient.readContract({\n address: vaultAddress,\n abi: AxonVaultAbi,\n functionName: 'DOMAIN_SEPARATOR',\n });\n}\n\n/** Returns the vault contract version number. */\nexport async function getVaultVersion(publicClient: PublicClient, vaultAddress: Address): Promise<number> {\n const version = await publicClient.readContract({\n address: vaultAddress,\n abi: AxonVaultAbi,\n functionName: 'VERSION',\n });\n return Number(version);\n}\n\n/** Returns the vault owner address. */\nexport async function getVaultOwner(publicClient: PublicClient, vaultAddress: Address): Promise<Address> {\n return publicClient.readContract({\n address: vaultAddress,\n abi: AxonVaultAbi,\n functionName: 'owner',\n });\n}\n\n/** Returns the vault operator address (address(0) if no operator set). */\nexport async function getVaultOperator(publicClient: PublicClient, vaultAddress: Address): Promise<Address> {\n return publicClient.readContract({\n address: vaultAddress,\n abi: AxonVaultAbi,\n functionName: 'operator',\n });\n}\n\n/**\n * Check whether a destination address is allowed for a given bot.\n *\n * Logic mirrors the on-chain enforcement order:\n * 1. If destination is on the global blacklist → blocked\n * 2. If global whitelist is non-empty → destination must be on it\n * 3. If bot-specific whitelist is non-empty → destination must be on it\n * 4. Otherwise → allowed\n */\nexport async function isDestinationAllowed(\n publicClient: PublicClient,\n vaultAddress: Address,\n botAddress: Address,\n destination: Address,\n): Promise<DestinationCheckResult> {\n // Step 1: Check global blacklist\n const isBlacklisted = await publicClient.readContract({\n address: vaultAddress,\n abi: AxonVaultAbi,\n functionName: 'globalDestinationBlacklist',\n args: [destination],\n });\n if (isBlacklisted) {\n return { allowed: false, reason: 'Destination is on the global blacklist' };\n }\n\n // Step 2: Check global whitelist (if non-empty, destination must be on it)\n const globalCount = await publicClient.readContract({\n address: vaultAddress,\n abi: AxonVaultAbi,\n functionName: 'globalDestinationCount',\n });\n if (globalCount > 0n) {\n const isGlobalWhitelisted = await publicClient.readContract({\n address: vaultAddress,\n abi: AxonVaultAbi,\n functionName: 'globalDestinationWhitelist',\n args: [destination],\n });\n if (!isGlobalWhitelisted) {\n return { allowed: false, reason: 'Destination is not on the global whitelist' };\n }\n }\n\n // Step 3: Check bot-specific whitelist (if non-empty, destination must be on it)\n const botCount = await publicClient.readContract({\n address: vaultAddress,\n abi: AxonVaultAbi,\n functionName: 'botDestinationCount',\n args: [botAddress],\n });\n if (botCount > 0n) {\n const isBotWhitelisted = await publicClient.readContract({\n address: vaultAddress,\n abi: AxonVaultAbi,\n functionName: 'botDestinationWhitelist',\n args: [botAddress, destination],\n });\n if (!isBotWhitelisted) {\n return { allowed: false, reason: 'Destination is not on the bot whitelist' };\n }\n }\n\n return { allowed: true };\n}\n\n// ============================================================================\n// Rebalance token whitelist (on-chain reads)\n// ============================================================================\n\n/** Returns the number of tokens in the vault's on-chain rebalance whitelist. 0 = no on-chain whitelist. */\nexport async function getRebalanceTokenCount(publicClient: PublicClient, vaultAddress: Address): Promise<number> {\n const count = await publicClient.readContract({\n address: vaultAddress,\n abi: AxonVaultAbi,\n functionName: 'rebalanceTokenCount',\n });\n return Number(count);\n}\n\n/** Returns whether a token is in the vault's on-chain rebalance whitelist. */\nexport async function isRebalanceTokenWhitelisted(\n publicClient: PublicClient,\n vaultAddress: Address,\n token: Address,\n): Promise<boolean> {\n return publicClient.readContract({\n address: vaultAddress,\n abi: AxonVaultAbi,\n functionName: 'rebalanceTokenWhitelist',\n args: [token],\n });\n}\n\n// ============================================================================\n// Factory — deploy a new vault\n// ============================================================================\n\n/**\n * Deploy a new AxonVault via the factory.\n *\n * The vault is owned by the walletClient's account. Permissionless — any\n * address can deploy, no Axon approval required.\n *\n * The factory address is fetched automatically from the Axon relayer.\n *\n * @param walletClient Wallet that will own the deployed vault.\n * @param publicClient Public client for the vault's chain.\n * @param relayerUrl Override relayer URL (defaults to https://relay.axonfi.xyz).\n * @returns Address of the newly deployed vault.\n */\nexport async function deployVault(\n walletClient: WalletClient,\n publicClient: PublicClient,\n relayerUrl?: string,\n): Promise<Address> {\n if (!walletClient.account) {\n throw new Error('walletClient has no account attached');\n }\n\n const chainId = walletClient.chain?.id;\n if (!chainId) throw new Error('walletClient has no chain configured');\n const factoryAddress = await getFactoryAddress(chainId, relayerUrl);\n\n const hash = await walletClient.writeContract({\n address: factoryAddress,\n abi: AxonVaultFactoryAbi,\n functionName: 'deployVault',\n args: [],\n account: walletClient.account,\n chain: walletClient.chain ?? null,\n });\n\n const receipt = await publicClient.waitForTransactionReceipt({ hash });\n\n // Extract vault address from the VaultDeployed event\n for (const log of receipt.logs) {\n try {\n // The second indexed topic is the vault address (owner is first indexed)\n if (log.topics.length >= 3 && log.topics[2]) {\n const vaultAddress = `0x${log.topics[2].slice(26)}` as Address;\n return vaultAddress;\n }\n } catch {\n // Not a VaultDeployed log, continue\n }\n }\n\n throw new Error('VaultDeployed event not found in transaction receipt');\n}\n\n// ============================================================================\n// Owner write operations (on-chain, require gas)\n// ============================================================================\n\n/**\n * Register a bot on the vault with its initial spending configuration.\n *\n * Must be called by the vault owner (or operator if ceilings allow).\n * This is an on-chain transaction — requires gas on the owner's wallet.\n *\n * @param walletClient Owner wallet (must be vault owner or authorized operator).\n * @param publicClient Public client for the vault's chain.\n * @param vaultAddress Vault to register the bot on.\n * @param botAddress Public address of the bot to register.\n * @param config Bot spending configuration — human-readable USD amounts (e.g. 100 = $100).\n * @returns Transaction hash.\n */\nexport async function addBot(\n walletClient: WalletClient,\n publicClient: PublicClient,\n vaultAddress: Address,\n botAddress: Address,\n config: BotConfigInput,\n): Promise<Hex> {\n if (!walletClient.account) {\n throw new Error('walletClient has no account attached');\n }\n\n const params = toBotConfigParams(config);\n const hash = await walletClient.writeContract({\n address: vaultAddress,\n abi: AxonVaultAbi,\n functionName: 'addBot',\n args: [botAddress, params],\n account: walletClient.account,\n chain: walletClient.chain ?? null,\n });\n\n await publicClient.waitForTransactionReceipt({ hash });\n return hash;\n}\n\n/**\n * Update an existing bot's spending configuration.\n *\n * Must be called by the vault owner (or operator within ceilings).\n * On-chain transaction — requires gas.\n *\n * @param walletClient Owner/operator wallet.\n * @param publicClient Public client for the vault's chain.\n * @param vaultAddress Vault the bot is registered on.\n * @param botAddress Bot to update.\n * @param config New spending configuration — human-readable USD amounts.\n * @returns Transaction hash.\n */\nexport async function updateBotConfig(\n walletClient: WalletClient,\n publicClient: PublicClient,\n vaultAddress: Address,\n botAddress: Address,\n config: BotConfigInput,\n): Promise<Hex> {\n if (!walletClient.account) {\n throw new Error('walletClient has no account attached');\n }\n\n const params = toBotConfigParams(config);\n const hash = await walletClient.writeContract({\n address: vaultAddress,\n abi: AxonVaultAbi,\n functionName: 'updateBotConfig',\n args: [botAddress, params],\n account: walletClient.account,\n chain: walletClient.chain ?? null,\n });\n\n await publicClient.waitForTransactionReceipt({ hash });\n return hash;\n}\n\n/**\n * Remove a bot from the vault whitelist.\n *\n * Must be called by the vault owner (or operator).\n * The bot will immediately lose the ability to sign valid intents.\n * On-chain transaction — requires gas.\n *\n * @param walletClient Owner/operator wallet.\n * @param publicClient Public client for the vault's chain.\n * @param vaultAddress Vault to remove the bot from.\n * @param botAddress Bot to remove.\n * @returns Transaction hash.\n */\nexport async function removeBot(\n walletClient: WalletClient,\n publicClient: PublicClient,\n vaultAddress: Address,\n botAddress: Address,\n): Promise<Hex> {\n if (!walletClient.account) {\n throw new Error('walletClient has no account attached');\n }\n\n const hash = await walletClient.writeContract({\n address: vaultAddress,\n abi: AxonVaultAbi,\n functionName: 'removeBot',\n args: [botAddress],\n account: walletClient.account,\n chain: walletClient.chain ?? null,\n });\n\n await publicClient.waitForTransactionReceipt({ hash });\n return hash;\n}\n\n/**\n * Deposit tokens or native ETH into the vault.\n *\n * Permissionless — anyone can deposit. For ERC-20 tokens, this function\n * handles the approve + deposit in one call. For native ETH, pass\n * `NATIVE_ETH` (or `'ETH'`) as the token.\n *\n * On-chain transaction — requires gas on the depositor's wallet.\n *\n * @param walletClient Wallet sending the deposit (anyone, not just owner).\n * @param publicClient Public client for the vault's chain.\n * @param vaultAddress Vault to deposit into.\n * @param token Token symbol ('USDC', 'WETH'), Token enum, raw address, or NATIVE_ETH / 'ETH' for ETH deposits.\n * @param amount Amount in base units (e.g. 5_000_000n for 5 USDC, 10n**16n for 0.01 ETH).\n * @param ref Optional bytes32 reference linking to an off-chain record. Defaults to 0x0.\n * @returns Transaction hash of the deposit.\n */\nexport async function deposit(\n walletClient: WalletClient,\n publicClient: PublicClient,\n vaultAddress: Address,\n token: Address | string,\n amount: bigint,\n ref: Hex = '0x0000000000000000000000000000000000000000000000000000000000000000',\n): Promise<Hex> {\n if (!walletClient.account) {\n throw new Error('walletClient has no account attached');\n }\n\n // Resolve token symbol to address (e.g. 'USDC' → 0x833589...)\n const isEthSymbol = token === 'ETH' || token === 'eth';\n let tokenAddress: Address;\n if (isEthSymbol) {\n tokenAddress = NATIVE_ETH as Address;\n } else if (token.startsWith('0x')) {\n tokenAddress = token as Address;\n } else {\n const chainId = walletClient.chain?.id;\n if (!chainId) throw new Error('walletClient has no chain — cannot resolve token symbol');\n tokenAddress = resolveToken(token as KnownTokenSymbol, chainId);\n }\n\n const isEth = tokenAddress.toLowerCase() === NATIVE_ETH.toLowerCase();\n\n if (!isEth) {\n // ERC-20: approve the vault to pull tokens, then deposit\n const approveTx = await walletClient.writeContract({\n address: tokenAddress,\n abi: erc20Abi,\n functionName: 'approve',\n args: [vaultAddress, amount],\n account: walletClient.account,\n chain: walletClient.chain ?? null,\n });\n await publicClient.waitForTransactionReceipt({ hash: approveTx });\n }\n\n const hash = await walletClient.writeContract({\n address: vaultAddress,\n abi: AxonVaultAbi,\n functionName: 'deposit',\n args: [tokenAddress, amount, ref],\n account: walletClient.account,\n chain: walletClient.chain ?? null,\n ...(isEth ? { value: amount } : {}),\n });\n\n await publicClient.waitForTransactionReceipt({ hash });\n return hash;\n}\n","import { parseUnits } from 'viem';\nimport type { Address } from 'viem';\nimport { KNOWN_TOKENS, getTokenSymbolByAddress, type KnownTokenSymbol } from './tokens.js';\nimport type { Token } from './tokens.js';\n\n// ============================================================================\n// Human-friendly amount conversion\n// ============================================================================\n\n/**\n * Look up decimals for a token by symbol, Token enum, or address.\n *\n * @param token - A KnownTokenSymbol ('USDC'), Token enum (Token.USDC), or address ('0x...')\n * @param chainId - Optional chain ID (unused for decimal lookup, but reserved for future use)\n * @returns The number of decimals for the token\n * @throws If the token is an unknown address with no entry in KNOWN_TOKENS\n */\nexport function resolveTokenDecimals(token: Address | Token | KnownTokenSymbol, chainId?: number): number {\n // If it looks like an address, reverse-lookup the symbol first\n if (typeof token === 'string' && token.startsWith('0x')) {\n const symbol = getTokenSymbolByAddress(token);\n if (!symbol) {\n throw new Error(\n `Unknown token address ${token} — cannot determine decimals. Use a bigint amount instead, or pass a known token symbol.`,\n );\n }\n const entry = KNOWN_TOKENS[symbol as KnownTokenSymbol];\n return entry.decimals;\n }\n\n // Symbol or Token enum\n const entry = KNOWN_TOKENS[token as KnownTokenSymbol];\n if (!entry) {\n throw new Error(\n `Unknown token symbol \"${token}\" — cannot determine decimals. Use a bigint amount instead, or use a known symbol (${Object.keys(KNOWN_TOKENS).join(', ')}).`,\n );\n }\n return entry.decimals;\n}\n\n/**\n * Convert a human-friendly amount to raw base units (bigint).\n *\n * - **bigint** → passed through as-is (already in base units)\n * - **number** → converted to string, then parsed via `parseUnits(str, decimals)`\n * - **string** → parsed directly via `parseUnits(str, decimals)`\n *\n * @param amount - The amount as bigint (raw), number (human), or string (human)\n * @param token - Token identifier used to look up decimals (symbol, enum, or address)\n * @param chainId - Optional chain ID (passed to resolveTokenDecimals)\n * @returns The amount in token base units as bigint\n *\n * @example\n * ```ts\n * parseAmount(5_000_000n, 'USDC') // 5000000n (passthrough)\n * parseAmount(5.2, 'USDC') // 5200000n\n * parseAmount('5.2', 'USDC') // 5200000n\n * parseAmount(0.001, 'WETH') // 1000000000000000n\n * ```\n *\n * @throws If the amount has more decimal places than the token supports\n * @throws If the token is unknown and amount is not bigint\n */\nexport function parseAmount(\n amount: bigint | number | string,\n token: Address | Token | KnownTokenSymbol,\n chainId?: number,\n): bigint {\n // bigint = raw base units, pass through\n if (typeof amount === 'bigint') {\n return amount;\n }\n\n const decimals = resolveTokenDecimals(token, chainId);\n\n // Convert number to string first\n const str = typeof amount === 'number' ? amount.toString() : amount;\n\n // Validate precision: count decimal places in the string\n const dotIndex = str.indexOf('.');\n if (dotIndex !== -1) {\n const decimalPlaces = str.length - dotIndex - 1;\n if (decimalPlaces > decimals) {\n throw new Error(\n `Amount \"${str}\" has ${decimalPlaces} decimal places, but ${typeof token === 'string' && token.startsWith('0x') ? 'this token' : token} only supports ${decimals}. Truncate or round your amount.`,\n );\n }\n }\n\n return parseUnits(str, decimals);\n}\n","// ============================================================================\n// Shared utilities\n// ============================================================================\n\n/**\n * Tiny UUID v4 generator (no external dependency).\n *\n * Uses `crypto.getRandomValues` in browsers and Node ≥19, with a\n * `require('crypto').randomBytes` fallback for older Node versions.\n */\nexport function generateUuid(): string {\n const bytes = new Uint8Array(16);\n if (typeof crypto !== 'undefined' && crypto.getRandomValues) {\n crypto.getRandomValues(bytes);\n } else {\n // Node.js fallback\n const { randomBytes } = require('crypto') as typeof import('crypto');\n const buf = randomBytes(16);\n for (let i = 0; i < 16; i++) bytes[i] = buf[i] ?? 0;\n }\n bytes[6] = (bytes[6]! & 0x0f) | 0x40; // version 4\n bytes[8] = (bytes[8]! & 0x3f) | 0x80; // variant bits\n const hex = Array.from(bytes)\n .map((b) => b.toString(16).padStart(2, '0'))\n .join('');\n return `${hex.slice(0, 8)}-${hex.slice(8, 12)}-${hex.slice(12, 16)}-${hex.slice(16, 20)}-${hex.slice(20)}`;\n}\n","import type { Address, Hex } from 'viem';\nimport { USDC } from './constants.js';\n\n// ============================================================================\n// x402 Protocol Types\n// ============================================================================\n\n/** Resource descriptor from the x402 PAYMENT-REQUIRED header. */\nexport interface X402Resource {\n /** URL of the resource being unlocked. */\n url: string;\n /** Human-readable description of the resource. */\n description?: string;\n /** MIME type of the resource. */\n mimeType?: string;\n}\n\n/** A single payment option from the `accepts` array. */\nexport interface X402PaymentOption {\n /** Recipient address (merchant). */\n payTo: string;\n /** Amount in token base units (string). */\n amount: string;\n /** Token contract address. */\n asset: string;\n /** CAIP-2 network identifier, e.g. \"eip155:8453\". */\n network: string;\n /** Settlement scheme: \"exact\" (EIP-3009) or \"permit2\". */\n scheme?: string;\n /** Additional option-specific fields. */\n extra?: Record<string, unknown>;\n}\n\n/** Parsed x402 PAYMENT-REQUIRED response. */\nexport interface X402PaymentRequired {\n /** x402 protocol version. */\n x402Version: number;\n /** Resource being unlocked. */\n resource: X402Resource;\n /** Accepted payment options. */\n accepts: X402PaymentOption[];\n}\n\n/** Result of handlePaymentRequired — contains everything needed to retry the request. */\nexport interface X402HandleResult {\n /** Base64-encoded JSON for the PAYMENT-SIGNATURE header. */\n paymentSignature: string;\n /** The payment option that was selected and funded. */\n selectedOption: X402PaymentOption;\n /** Axon payment result (txHash, requestId, etc.). */\n fundingResult: { requestId: string; status: string; txHash?: string };\n}\n\n// ============================================================================\n// Parsing & Matching\n// ============================================================================\n\n/**\n * Parse the PAYMENT-REQUIRED header value (base64 JSON).\n *\n * The x402 spec encodes the payment requirements as a base64-encoded JSON\n * string in the response header.\n */\nexport function parsePaymentRequired(headerValue: string): X402PaymentRequired {\n let decoded: string;\n\n // Handle both base64 and plain JSON\n try {\n decoded = atob(headerValue);\n } catch {\n decoded = headerValue;\n }\n\n const parsed = JSON.parse(decoded);\n\n if (!parsed.accepts || !Array.isArray(parsed.accepts) || parsed.accepts.length === 0) {\n throw new Error('x402: no payment options in PAYMENT-REQUIRED header');\n }\n\n if (!parsed.resource) {\n throw new Error('x402: missing resource in PAYMENT-REQUIRED header');\n }\n\n return parsed as X402PaymentRequired;\n}\n\n/**\n * Parse a CAIP-2 network identifier to a numeric chain ID.\n *\n * @example parseChainId(\"eip155:8453\") // → 8453\n * @example parseChainId(\"eip155:84532\") // → 84532\n */\nexport function parseChainId(network: string): number {\n const parts = network.split(':');\n if (parts.length !== 2 || parts[0] !== 'eip155') {\n throw new Error(`x402: unsupported network format \"${network}\" (expected \"eip155:<chainId>\")`);\n }\n const chainId = parseInt(parts[1]!, 10);\n if (isNaN(chainId)) {\n throw new Error(`x402: invalid chain ID in network \"${network}\"`);\n }\n return chainId;\n}\n\n/**\n * Find a payment option matching the bot's chain ID.\n *\n * Prefers USDC options (EIP-3009 path — no gas needed from bot).\n * Falls back to any matching chain option.\n *\n * @returns The best matching payment option, or null if none match.\n */\nexport function findMatchingOption(accepts: X402PaymentOption[], chainId: number): X402PaymentOption | null {\n const matchingOptions: X402PaymentOption[] = [];\n\n for (const option of accepts) {\n try {\n const optionChainId = parseChainId(option.network);\n if (optionChainId === chainId) {\n matchingOptions.push(option);\n }\n } catch {\n // Skip options with unparseable network identifiers\n continue;\n }\n }\n\n if (matchingOptions.length === 0) return null;\n\n // Prefer USDC (EIP-3009 — gasless for bot)\n const usdcAddress = USDC[chainId]?.toLowerCase();\n if (usdcAddress) {\n const usdcOption = matchingOptions.find((opt) => opt.asset.toLowerCase() === usdcAddress);\n if (usdcOption) return usdcOption;\n }\n\n // Fall back to first matching option\n return matchingOptions[0] ?? null;\n}\n\n/**\n * Extract metadata fields from a parsed x402 header for payment enrichment.\n *\n * These fields flow into the Axon payment record, giving vault owners\n * full visibility into what their bots are accessing.\n */\nexport function extractX402Metadata(\n parsed: X402PaymentRequired,\n selectedOption: X402PaymentOption,\n): {\n resourceUrl: string;\n memo: string | null;\n recipientLabel: string | null;\n metadata: Record<string, string>;\n} {\n const metadata: Record<string, string> = {};\n\n if (parsed.x402Version !== undefined) {\n metadata.x402_version = String(parsed.x402Version);\n }\n if (selectedOption.scheme) {\n metadata.x402_scheme = selectedOption.scheme;\n }\n if (parsed.resource.mimeType) {\n metadata.x402_mime_type = parsed.resource.mimeType;\n }\n if (selectedOption.payTo) {\n metadata.x402_merchant = selectedOption.payTo;\n }\n if (parsed.resource.description) {\n metadata.x402_resource_description = parsed.resource.description;\n }\n\n return {\n resourceUrl: parsed.resource.url,\n memo: parsed.resource.description ?? null,\n recipientLabel: selectedOption.payTo\n ? `${selectedOption.payTo.slice(0, 6)}...${selectedOption.payTo.slice(-4)}`\n : null,\n metadata,\n };\n}\n\n// ============================================================================\n// Response Formatting\n// ============================================================================\n\n/**\n * Format a payment signature payload for the PAYMENT-SIGNATURE header.\n *\n * The x402 spec requires the header value to be base64-encoded JSON.\n */\nexport function formatPaymentSignature(payload: Record<string, unknown>): string {\n const json = JSON.stringify(payload);\n return btoa(json);\n}\n","import { type Address, type Hex, encodePacked, keccak256 } from 'viem';\nimport { privateKeyToAccount } from 'viem/accounts';\nimport { USDC } from './constants.js';\n\n// ============================================================================\n// EIP-3009 TransferWithAuthorization — USDC only\n// ============================================================================\n\n/**\n * Per-chain EIP-712 domain parameters for USDC's EIP-3009 implementation.\n * These differ between testnets and mainnets (Circle uses different `name` values).\n *\n * Verified on-chain via `cast call <usdc> \"name()(string)\"` and\n * `cast call <usdc> \"version()(string)\"`.\n */\nexport const USDC_EIP712_DOMAIN: Record<number, { name: string; version: string }> = {\n // Base mainnet\n 8453: { name: 'USD Coin', version: '2' },\n // Base Sepolia\n 84532: { name: 'USDC', version: '2' },\n // Arbitrum One\n 42161: { name: 'USD Coin', version: '2' },\n // Arbitrum Sepolia (same as mainnet convention)\n 421614: { name: 'USDC', version: '2' },\n};\n\n/** EIP-712 types for TransferWithAuthorization (EIP-3009). */\nconst TRANSFER_WITH_AUTHORIZATION_TYPES = {\n TransferWithAuthorization: [\n { name: 'from', type: 'address' },\n { name: 'to', type: 'address' },\n { name: 'value', type: 'uint256' },\n { name: 'validAfter', type: 'uint256' },\n { name: 'validBefore', type: 'uint256' },\n { name: 'nonce', type: 'bytes32' },\n ],\n} as const;\n\n/** Parameters for EIP-3009 TransferWithAuthorization. */\nexport interface TransferAuthorization {\n /** Token holder (sender). */\n from: Address;\n /** Recipient of the transfer. */\n to: Address;\n /** Amount in token base units (USDC: 6 decimals). */\n value: bigint;\n /** Unix timestamp — transfer is invalid before this time. Usually 0. */\n validAfter: bigint;\n /** Unix timestamp — transfer is invalid after this time. */\n validBefore: bigint;\n /** Random bytes32 nonce (must not have been used before for this sender). */\n nonce: Hex;\n}\n\n/**\n * Generate a random bytes32 nonce for EIP-3009.\n * Uses crypto.getRandomValues for cryptographic randomness.\n */\nexport function randomNonce(): Hex {\n const bytes = new Uint8Array(32);\n crypto.getRandomValues(bytes);\n return `0x${Array.from(bytes)\n .map((b) => b.toString(16).padStart(2, '0'))\n .join('')}` as Hex;\n}\n\n/**\n * Sign an EIP-3009 TransferWithAuthorization for USDC.\n *\n * The resulting signature can be submitted to a facilitator contract that calls\n * `USDC.transferWithAuthorization(from, to, value, validAfter, validBefore, nonce, v, r, s)`.\n *\n * @param privateKey - Signer's private key (must match auth.from)\n * @param chainId - Chain ID (determines USDC domain name/version)\n * @param auth - Transfer authorization parameters\n * @returns EIP-712 signature (65 bytes, 0x-prefixed)\n */\nexport async function signTransferWithAuthorization(\n privateKey: Hex,\n chainId: number,\n auth: TransferAuthorization,\n): Promise<Hex> {\n const domainConfig = USDC_EIP712_DOMAIN[chainId];\n if (!domainConfig) {\n throw new Error(`EIP-3009 not configured for chain ${chainId}`);\n }\n\n const usdcAddress = USDC[chainId];\n if (!usdcAddress) {\n throw new Error(`USDC address not known for chain ${chainId}`);\n }\n\n const account = privateKeyToAccount(privateKey);\n\n return account.signTypedData({\n domain: {\n name: domainConfig.name,\n version: domainConfig.version,\n chainId,\n verifyingContract: usdcAddress,\n },\n types: TRANSFER_WITH_AUTHORIZATION_TYPES,\n primaryType: 'TransferWithAuthorization',\n message: {\n from: auth.from,\n to: auth.to,\n value: auth.value,\n validAfter: auth.validAfter,\n validBefore: auth.validBefore,\n nonce: auth.nonce,\n },\n });\n}\n","import type { Address, Hex } from 'viem';\nimport { privateKeyToAccount } from 'viem/accounts';\n\n// ============================================================================\n// Permit2 — Universal token approvals (any ERC-20)\n// ============================================================================\n\n/** Canonical Permit2 contract address (same on all EVM chains). */\nexport const PERMIT2_ADDRESS: Address = '0x000000000022D473030F116dDEE9F6B43aC78BA3';\n\n/** x402 facilitator proxy contract address (same on all supported chains). */\nexport const X402_PROXY_ADDRESS: Address = '0x4020CD856C882D5fb903D99CE35316A085Bb0001';\n\n/**\n * Witness type string for x402's PermitWitnessTransferFrom.\n * Must match what the x402 facilitator contract expects.\n */\nexport const WITNESS_TYPE_STRING =\n 'TransferDetails witness)TokenPermissions(address token,uint256 amount)TransferDetails(address to,uint256 requestedAmount)' as const;\n\n/** EIP-712 types for Permit2 PermitWitnessTransferFrom with x402 witness. */\nconst PERMIT_WITNESS_TRANSFER_FROM_TYPES = {\n PermitWitnessTransferFrom: [\n { name: 'permitted', type: 'TokenPermissions' },\n { name: 'spender', type: 'address' },\n { name: 'nonce', type: 'uint256' },\n { name: 'deadline', type: 'uint256' },\n { name: 'witness', type: 'TransferDetails' },\n ],\n TokenPermissions: [\n { name: 'token', type: 'address' },\n { name: 'amount', type: 'uint256' },\n ],\n TransferDetails: [\n { name: 'to', type: 'address' },\n { name: 'requestedAmount', type: 'uint256' },\n ],\n} as const;\n\n/** Parameters for Permit2 PermitWitnessTransferFrom. */\nexport interface Permit2Authorization {\n /** Token to transfer. */\n token: Address;\n /** Maximum amount the spender can transfer. */\n amount: bigint;\n /** Spender address (the x402 proxy). */\n spender: Address;\n /** Unique nonce (random uint256). */\n nonce: bigint;\n /** Unix timestamp — signature is invalid after this time. */\n deadline: bigint;\n /** Witness: recipient address. */\n witnessTo: Address;\n /** Witness: requested amount. */\n witnessRequestedAmount: bigint;\n}\n\n/**\n * Generate a random uint256 nonce for Permit2.\n * Uses crypto.getRandomValues for cryptographic randomness.\n */\nexport function randomPermit2Nonce(): bigint {\n const bytes = new Uint8Array(32);\n crypto.getRandomValues(bytes);\n let n = 0n;\n for (const b of bytes) {\n n = (n << 8n) | BigInt(b);\n }\n return n;\n}\n\n/**\n * Sign a Permit2 PermitWitnessTransferFrom for x402.\n *\n * The resulting signature is submitted to the x402 facilitator proxy,\n * which calls `Permit2.permitWitnessTransferFrom(...)` to settle the payment.\n *\n * @param privateKey - Signer's private key (token holder)\n * @param chainId - Chain ID\n * @param permit - Permit2 authorization parameters\n * @returns EIP-712 signature (65 bytes, 0x-prefixed)\n */\nexport async function signPermit2WitnessTransfer(\n privateKey: Hex,\n chainId: number,\n permit: Permit2Authorization,\n): Promise<Hex> {\n const account = privateKeyToAccount(privateKey);\n\n return account.signTypedData({\n domain: {\n name: 'Permit2',\n chainId,\n verifyingContract: PERMIT2_ADDRESS,\n },\n types: PERMIT_WITNESS_TRANSFER_FROM_TYPES,\n primaryType: 'PermitWitnessTransferFrom',\n message: {\n permitted: {\n token: permit.token,\n amount: permit.amount,\n },\n spender: permit.spender,\n nonce: permit.nonce,\n deadline: permit.deadline,\n witness: {\n to: permit.witnessTo,\n requestedAmount: permit.witnessRequestedAmount,\n },\n },\n });\n}\n","import type { WalletClient, Address, Hex } from 'viem';\nimport type {\n AxonClientConfig,\n PayInput,\n PaymentIntent,\n PaymentResult,\n ExecuteInput,\n ExecuteIntent,\n SwapInput,\n SwapIntent,\n VaultInfo,\n DestinationCheckResult,\n RebalanceTokensResult,\n TosStatus,\n} from './types.js';\nimport type { X402HandleResult } from './x402.js';\nimport { signPayment, signExecuteIntent, signSwapIntent, encodeRef } from './signer.js';\nimport { createAxonWalletClient } from './vault.js';\nimport { DEFAULT_DEADLINE_SECONDS, RELAYER_API, USDC } from './constants.js';\nimport { resolveToken } from './tokens.js';\nimport { parseAmount } from './amounts.js';\nimport { generateUuid } from './utils.js';\nimport { keccak256 } from 'viem';\nimport { parsePaymentRequired, findMatchingOption, extractX402Metadata, formatPaymentSignature } from './x402.js';\nimport { signTransferWithAuthorization, randomNonce, USDC_EIP712_DOMAIN } from './eip3009.js';\nimport { signPermit2WitnessTransfer, randomPermit2Nonce, PERMIT2_ADDRESS, X402_PROXY_ADDRESS } from './permit2.js';\n\n// ============================================================================\n// AxonClient\n// ============================================================================\n\n/**\n * Main entry point for bots interacting with Axon.\n *\n * Handles EIP-712 signing, relayer communication, and status polling.\n * Bots never submit transactions directly — they sign intents and the relayer\n * handles all on-chain execution.\n *\n * All chain reads (balances, bot status, vault info) go through the relayer\n * API — bots never need an RPC endpoint.\n *\n * @example\n * ```ts\n * import { AxonClient, USDC } from '@axonfi/sdk'\n *\n * const client = new AxonClient({\n * vaultAddress: '0x...',\n * chainId: 84532, // Base Sepolia\n * botPrivateKey: '0x...',\n * })\n *\n * const result = await client.pay({\n * to: '0x...recipient...',\n * token: 'USDC',\n * amount: 5, // 5 USDC — SDK handles decimals\n * memo: 'API call #1234 — weather data',\n * })\n *\n * console.log(result.status, result.txHash)\n * ```\n */\nexport class AxonClient {\n private readonly vaultAddress: Address;\n private readonly chainId: number;\n private readonly relayerUrl: string;\n private readonly walletClient: WalletClient;\n private readonly botPrivateKey: Hex;\n\n constructor(config: AxonClientConfig) {\n this.vaultAddress = config.vaultAddress;\n this.chainId = config.chainId;\n this.relayerUrl = config.relayerUrl ?? 'https://relay.axonfi.xyz';\n\n if (!config.botPrivateKey) {\n throw new Error('botPrivateKey is required in AxonClientConfig');\n }\n this.botPrivateKey = config.botPrivateKey;\n this.walletClient = createAxonWalletClient(config.botPrivateKey, config.chainId);\n }\n\n // ============================================================================\n // Bot address\n // ============================================================================\n\n /** Returns the bot's address derived from the configured private key. */\n get botAddress(): Address {\n const account = this.walletClient.account;\n if (!account) throw new Error('No account on walletClient');\n return account.address;\n }\n\n // ============================================================================\n // pay()\n // ============================================================================\n\n /**\n * Create, sign, and submit a payment intent to the Axon relayer.\n *\n * Three possible outcomes (all included in PaymentResult.status):\n * - `\"approved\"`: fast path — txHash available immediately\n * - `\"pending_review\"`: AI scan or human review in progress — poll for status\n * - `\"rejected\"`: payment was rejected — reason field explains why\n */\n async pay(input: PayInput): Promise<PaymentResult> {\n const intent = this._buildPaymentIntent(input);\n const signature = await signPayment(this.walletClient, this.vaultAddress, this.chainId, intent);\n return this._submitPayment(intent, signature, input);\n }\n\n // ============================================================================\n // execute()\n // ============================================================================\n\n /**\n * Sign and submit a DeFi protocol execution to the Axon relayer.\n *\n * The vault approves `token` to `protocol`, calls it with `callData`,\n * then revokes the approval. Tokens stay in the vault or go to the protocol\n * as specified by the calldata.\n */\n async execute(input: ExecuteInput): Promise<PaymentResult> {\n const intent = this._buildExecuteIntent(input);\n const signature = await signExecuteIntent(this.walletClient, this.vaultAddress, this.chainId, intent);\n return this._submitExecute(intent, signature, input);\n }\n\n // ============================================================================\n // swap()\n // ============================================================================\n\n /**\n * Sign and submit an in-vault token swap to the Axon relayer.\n *\n * Swaps tokens within the vault (no external recipient). Useful for\n * rebalancing vault holdings.\n */\n async swap(input: SwapInput): Promise<PaymentResult> {\n const intent = this._buildSwapIntent(input);\n const signature = await signSwapIntent(this.walletClient, this.vaultAddress, this.chainId, intent);\n return this._submitSwap(intent, signature, input);\n }\n\n // ============================================================================\n // getBalance() — via relayer\n // ============================================================================\n\n /** Read the vault's ERC-20 balance for a given token (via relayer). */\n async getBalance(token: Address): Promise<bigint> {\n const path = RELAYER_API.vaultBalance(this.vaultAddress, token, this.chainId);\n const data = await this._get(path);\n return BigInt(data.balance);\n }\n\n // ============================================================================\n // getBalances() — via relayer\n // ============================================================================\n\n /**\n * Read the vault's ERC-20 balances for multiple tokens in a single call (via relayer).\n * Returns a record mapping token address → balance.\n */\n async getBalances(tokens: Address[]): Promise<Record<Address, bigint>> {\n const path = RELAYER_API.vaultBalances(this.vaultAddress, this.chainId);\n const url = `${this.relayerUrl}${path}?chainId=${this.chainId}&tokens=${tokens.join(',')}`;\n\n const response = await fetch(url, {\n method: 'GET',\n headers: { 'Content-Type': 'application/json' },\n });\n\n if (!response.ok) {\n const body = await response.text();\n throw new Error(`Relayer request failed [${response.status}]: ${body}`);\n }\n\n const data = (await response.json()) as { balances: Record<string, string> };\n const result: Record<Address, bigint> = {};\n for (const [addr, val] of Object.entries(data.balances)) {\n result[addr as Address] = BigInt(val);\n }\n return result;\n }\n\n // ============================================================================\n // isActive() — via relayer\n // ============================================================================\n\n /** Returns whether this bot is registered and active in the vault (via relayer). */\n async isActive(): Promise<boolean> {\n const path = RELAYER_API.botStatus(this.vaultAddress, this.botAddress, this.chainId);\n const data = await this._get(path);\n return data.isActive;\n }\n\n // ============================================================================\n // isPaused() — via relayer\n // ============================================================================\n\n /** Returns whether the vault is currently paused (via relayer). */\n async isPaused(): Promise<boolean> {\n const path = RELAYER_API.vaultInfo(this.vaultAddress, this.chainId);\n const data = await this._get(path);\n return data.paused;\n }\n\n // ============================================================================\n // getVaultInfo() — via relayer\n // ============================================================================\n\n /** Returns high-level vault info (owner, operator, paused, version) via relayer. */\n async getVaultInfo(): Promise<VaultInfo> {\n const path = RELAYER_API.vaultInfo(this.vaultAddress, this.chainId);\n return this._get(path) as Promise<VaultInfo>;\n }\n\n // ============================================================================\n // canPayTo() — via relayer\n // ============================================================================\n\n /**\n * Check whether this bot can pay to a given destination address (via relayer).\n * Checks blacklist → global whitelist → bot whitelist, matching on-chain logic.\n */\n async canPayTo(destination: Address): Promise<DestinationCheckResult> {\n const path = RELAYER_API.destinationCheck(this.vaultAddress, this.botAddress, destination, this.chainId);\n return this._get(path) as Promise<DestinationCheckResult>;\n }\n\n // ============================================================================\n // isContractApproved() — via relayer\n // ============================================================================\n\n /** Returns whether a contract address (protocol or token) is approved for executeProtocol() calls (via relayer). */\n async isContractApproved(protocol: Address): Promise<boolean> {\n const path = RELAYER_API.protocolCheck(this.vaultAddress, protocol, this.chainId);\n const data = await this._get(path);\n return data.approved;\n }\n\n // ============================================================================\n // getRebalanceTokens() — via relayer\n // ============================================================================\n\n /**\n * Returns the effective rebalance token whitelist for this vault.\n *\n * If the owner set tokens on-chain, those override entirely.\n * If no on-chain whitelist, returns relayer defaults (USDC, WETH, USDT).\n * Use this before calling swap() to check which output tokens are allowed.\n */\n async getRebalanceTokens(): Promise<RebalanceTokensResult> {\n const path = RELAYER_API.rebalanceTokens(this.vaultAddress, this.chainId);\n return this._get(path) as Promise<RebalanceTokensResult>;\n }\n\n // ============================================================================\n // isRebalanceTokenAllowed() — via relayer\n // ============================================================================\n\n /** Check if a specific token is allowed for rebalancing (executeSwap output) on this vault. */\n async isRebalanceTokenAllowed(token: Address): Promise<{ allowed: boolean; source: 'default' | 'on_chain' }> {\n const path = RELAYER_API.rebalanceTokenCheck(this.vaultAddress, token, this.chainId);\n return this._get(path) as Promise<{ allowed: boolean; source: 'default' | 'on_chain' }>;\n }\n\n // ============================================================================\n // TOS (Terms of Service)\n // ============================================================================\n\n /** Check if a wallet has accepted the current TOS version. */\n async getTosStatus(wallet: string): Promise<TosStatus> {\n return this._get(RELAYER_API.tosStatus(wallet)) as Promise<TosStatus>;\n }\n\n /**\n * Sign and submit TOS acceptance. Uses the owner's wallet (not the bot key).\n *\n * @param signer - Object with a `signMessage` method (e.g. a viem WalletClient\n * or ethers Signer). This should be the vault owner's wallet, not the bot key.\n * @param wallet - The owner's wallet address (must match the signer).\n */\n async acceptTos(\n signer: { signMessage: (args: { message: string }) => Promise<Hex> },\n wallet: string,\n ): Promise<TosStatus> {\n // 1. Get current TOS version from relayer\n const { tosVersion } = await this.getTosStatus(wallet);\n\n // 2. Construct and sign the acceptance message\n const timestamp = Math.floor(Date.now() / 1000);\n const message = `I accept the Axon Terms of Service (${tosVersion}).\\nWallet: ${wallet}\\nTimestamp: ${timestamp}`;\n const signature = await signer.signMessage({ message });\n\n // 3. Submit to relayer\n const url = `${this.relayerUrl}${RELAYER_API.TOS_ACCEPT}`;\n const response = await fetch(url, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ wallet, signature, tosVersion, timestamp }),\n });\n\n if (!response.ok) {\n const body = await response.text();\n throw new Error(`TOS acceptance failed [${response.status}]: ${body}`);\n }\n\n return response.json() as Promise<TosStatus>;\n }\n\n // ============================================================================\n // poll() / pollExecute() / pollSwap()\n // ============================================================================\n\n /**\n * Poll the relayer for the status of an async payment.\n *\n * Use this when pay() returns `status: \"pending_review\"`. Poll until\n * status is `\"approved\"` or `\"rejected\"`.\n *\n * Recommended polling interval: 5–10 seconds.\n */\n async poll(requestId: string): Promise<PaymentResult> {\n return this._get(RELAYER_API.payment(requestId)) as Promise<PaymentResult>;\n }\n\n /** Poll the relayer for the status of an async protocol execution. */\n async pollExecute(requestId: string): Promise<PaymentResult> {\n return this._get(RELAYER_API.execute(requestId)) as Promise<PaymentResult>;\n }\n\n /** Poll the relayer for the status of an async swap. */\n async pollSwap(requestId: string): Promise<PaymentResult> {\n return this._get(RELAYER_API.swap(requestId)) as Promise<PaymentResult>;\n }\n\n // ============================================================================\n // signPayment() — low-level access\n // ============================================================================\n\n /**\n * Sign a PaymentIntent directly without submitting to the relayer.\n *\n * Use this if you want to build the intent yourself and pass the signature\n * to another system (e.g. a custom relayer integration).\n */\n async signPayment(intent: PaymentIntent): Promise<Hex> {\n return signPayment(this.walletClient, this.vaultAddress, this.chainId, intent);\n }\n\n // ============================================================================\n // x402 — HTTP 402 Payment Required\n // ============================================================================\n\n /**\n * x402 utilities for handling HTTP 402 Payment Required responses.\n *\n * The x402 flow:\n * 1. Bot hits an API that returns HTTP 402 + PAYMENT-REQUIRED header\n * 2. SDK parses the header, finds a matching payment option\n * 3. SDK funds the bot's EOA from the vault (full Axon pipeline applies)\n * 4. Bot signs an EIP-3009 or Permit2 authorization\n * 5. SDK returns a PAYMENT-SIGNATURE header for the bot to retry with\n *\n * @example\n * ```ts\n * const response = await fetch('https://api.example.com/data');\n * if (response.status === 402) {\n * const result = await client.x402.handlePaymentRequired(response.headers);\n * const data = await fetch('https://api.example.com/data', {\n * headers: { 'PAYMENT-SIGNATURE': result.paymentSignature },\n * });\n * }\n * ```\n */\n readonly x402 = {\n /**\n * Fund the bot's EOA from the vault for x402 settlement.\n *\n * This is a regular Axon payment (to = bot's own address) that goes through\n * the full pipeline: policy engine, AI scan, human review if needed.\n *\n * @param amount - Amount in token base units\n * @param token - Token address (defaults to USDC on this chain)\n * @param metadata - Optional metadata for the payment record\n */\n fund: async (\n amount: bigint,\n token?: Address,\n metadata?: { resourceUrl?: string; memo?: string; recipientLabel?: string; metadata?: Record<string, string> },\n ): Promise<PaymentResult> => {\n const tokenAddress = token ?? USDC[this.chainId];\n if (!tokenAddress) {\n throw new Error(`No default USDC address for chain ${this.chainId}`);\n }\n\n return this.pay({\n to: this.botAddress,\n token: tokenAddress,\n amount,\n x402Funding: true,\n ...metadata,\n });\n },\n\n /**\n * Handle a full x402 flow: parse header, fund bot, sign authorization, return header.\n *\n * Supports both EIP-3009 (USDC) and Permit2 (any ERC-20) settlement.\n * The bot's EOA is funded from the vault first (full Axon pipeline applies).\n *\n * @param headers - Response headers from the 402 response (must contain PAYMENT-REQUIRED)\n * @param maxTimeoutMs - Maximum time to wait for pending_review resolution (default: 120s)\n * @param pollIntervalMs - Polling interval for pending_review (default: 5s)\n * @returns Payment signature header value + funding details\n */\n handlePaymentRequired: async (\n headers: Headers | Record<string, string>,\n maxTimeoutMs: number = 120_000,\n pollIntervalMs: number = 5_000,\n ): Promise<X402HandleResult> => {\n // 1. Parse the PAYMENT-REQUIRED header\n const headerValue =\n headers instanceof Headers\n ? (headers.get('payment-required') ?? headers.get('PAYMENT-REQUIRED'))\n : (headers['payment-required'] ?? headers['PAYMENT-REQUIRED']);\n\n if (!headerValue) {\n throw new Error('x402: no PAYMENT-REQUIRED header found');\n }\n\n const parsed = parsePaymentRequired(headerValue);\n\n // 2. Find a matching payment option for this chain\n const option = findMatchingOption(parsed.accepts, this.chainId);\n if (!option) {\n throw new Error(\n `x402: no payment option matches chain ${this.chainId}. ` +\n `Available: ${parsed.accepts.map((a) => a.network).join(', ')}`,\n );\n }\n\n // 3. Extract metadata for the payment record\n const x402Meta = extractX402Metadata(parsed, option);\n\n // 4. Fund the bot's EOA from the vault\n const amount = BigInt(option.amount);\n const tokenAddress = option.asset as Address;\n\n const payInput: PayInput = {\n to: this.botAddress,\n token: tokenAddress,\n amount,\n x402Funding: true,\n resourceUrl: x402Meta.resourceUrl,\n metadata: x402Meta.metadata,\n };\n if (x402Meta.memo) payInput.memo = x402Meta.memo;\n if (x402Meta.recipientLabel) payInput.recipientLabel = x402Meta.recipientLabel;\n\n let fundingResult = await this.pay(payInput);\n\n // 5. If pending_review, poll until resolved or timeout\n if (fundingResult.status === 'pending_review') {\n const deadline = Date.now() + maxTimeoutMs;\n while (fundingResult.status === 'pending_review' && Date.now() < deadline) {\n await new Promise((resolve) => setTimeout(resolve, pollIntervalMs));\n fundingResult = await this.poll(fundingResult.requestId);\n }\n if (fundingResult.status === 'pending_review') {\n throw new Error(`x402: funding timed out after ${maxTimeoutMs}ms (still pending_review)`);\n }\n }\n\n if (fundingResult.status === 'rejected') {\n throw new Error(`x402: funding rejected — ${fundingResult.reason ?? 'unknown reason'}`);\n }\n\n // 6. Sign the appropriate authorization\n const botPrivateKey = this.botPrivateKey;\n\n const payTo = option.payTo as Address;\n const usdcAddress = USDC[this.chainId]?.toLowerCase();\n const isUsdc = tokenAddress.toLowerCase() === usdcAddress;\n\n let signaturePayload: Record<string, unknown>;\n\n if (isUsdc && USDC_EIP712_DOMAIN[this.chainId]) {\n // EIP-3009 path (USDC — gasless)\n const nonce = randomNonce();\n const validAfter = 0n;\n const validBefore = BigInt(Math.floor(Date.now() / 1000) + 300); // 5 min\n\n const sig = await signTransferWithAuthorization(botPrivateKey, this.chainId, {\n from: this.botAddress,\n to: payTo,\n value: amount,\n validAfter,\n validBefore,\n nonce,\n });\n\n signaturePayload = {\n scheme: 'exact',\n signature: sig,\n authorization: {\n from: this.botAddress,\n to: payTo,\n value: amount.toString(),\n validAfter: validAfter.toString(),\n validBefore: validBefore.toString(),\n nonce,\n },\n };\n } else {\n // Permit2 path (any ERC-20)\n const nonce = randomPermit2Nonce();\n const deadline = BigInt(Math.floor(Date.now() / 1000) + 300);\n\n const sig = await signPermit2WitnessTransfer(botPrivateKey, this.chainId, {\n token: tokenAddress,\n amount,\n spender: X402_PROXY_ADDRESS,\n nonce,\n deadline,\n witnessTo: payTo,\n witnessRequestedAmount: amount,\n });\n\n signaturePayload = {\n scheme: 'permit2',\n signature: sig,\n permit: {\n permitted: { token: tokenAddress, amount: amount.toString() },\n spender: X402_PROXY_ADDRESS,\n nonce: nonce.toString(),\n deadline: deadline.toString(),\n },\n witness: {\n to: payTo,\n requestedAmount: amount.toString(),\n },\n };\n }\n\n // 7. Format the PAYMENT-SIGNATURE header\n const paymentSignature = formatPaymentSignature(signaturePayload);\n\n const handleResult: X402HandleResult = {\n paymentSignature,\n selectedOption: option,\n fundingResult: {\n requestId: fundingResult.requestId,\n status: fundingResult.status,\n },\n };\n if (fundingResult.txHash) {\n handleResult.fundingResult.txHash = fundingResult.txHash;\n }\n return handleResult;\n },\n };\n\n // ============================================================================\n // Internal helpers\n // ============================================================================\n\n private async _get(path: string): Promise<any> {\n const url = `${this.relayerUrl}${path}`;\n const response = await fetch(url, {\n method: 'GET',\n headers: { 'Content-Type': 'application/json' },\n });\n\n if (!response.ok) {\n const body = await response.text();\n throw new Error(`Relayer request failed [${response.status}]: ${body}`);\n }\n\n return response.json();\n }\n\n private _defaultDeadline(): bigint {\n return BigInt(Math.floor(Date.now() / 1000) + DEFAULT_DEADLINE_SECONDS);\n }\n\n private _resolveRef(memo?: string, ref?: Hex): Hex {\n if (ref) return ref;\n if (memo) return encodeRef(memo);\n return '0x0000000000000000000000000000000000000000000000000000000000000000';\n }\n\n private _buildPaymentIntent(input: PayInput): PaymentIntent {\n if (input.to === '0x0000000000000000000000000000000000000000') {\n throw new Error('Payment recipient cannot be the zero address');\n }\n return {\n bot: this.botAddress,\n to: input.to,\n token: resolveToken(input.token, this.chainId),\n amount: parseAmount(input.amount, input.token, this.chainId),\n deadline: input.deadline ?? this._defaultDeadline(),\n ref: this._resolveRef(input.memo, input.ref),\n };\n }\n\n private _buildExecuteIntent(input: ExecuteInput): ExecuteIntent {\n return {\n bot: this.botAddress,\n protocol: input.protocol,\n calldataHash: keccak256(input.callData),\n token: resolveToken(input.token, this.chainId),\n amount: parseAmount(input.amount, input.token, this.chainId),\n deadline: input.deadline ?? this._defaultDeadline(),\n ref: this._resolveRef(input.memo, input.ref),\n };\n }\n\n private _buildSwapIntent(input: SwapInput): SwapIntent {\n return {\n bot: this.botAddress,\n toToken: resolveToken(input.toToken, this.chainId),\n minToAmount: parseAmount(input.minToAmount, input.toToken, this.chainId),\n deadline: input.deadline ?? this._defaultDeadline(),\n ref: this._resolveRef(input.memo, input.ref),\n };\n }\n\n private async _submitPayment(intent: PaymentIntent, signature: Hex, input: PayInput): Promise<PaymentResult> {\n const idempotencyKey = input.idempotencyKey ?? generateUuid();\n\n const body = {\n // Routing\n chainId: this.chainId,\n vaultAddress: this.vaultAddress,\n\n // Flat intent fields (matches relayer DTO)\n bot: intent.bot,\n to: intent.to,\n token: intent.token,\n amount: intent.amount.toString(),\n deadline: intent.deadline.toString(),\n ref: intent.ref,\n signature,\n\n // Off-chain metadata\n idempotencyKey,\n ...(input.memo !== undefined && { memo: input.memo }),\n ...(input.resourceUrl !== undefined && { resourceUrl: input.resourceUrl }),\n ...(input.invoiceId !== undefined && { invoiceId: input.invoiceId }),\n ...(input.orderId !== undefined && { orderId: input.orderId }),\n ...(input.recipientLabel !== undefined && { recipientLabel: input.recipientLabel }),\n ...(input.metadata !== undefined && { metadata: input.metadata }),\n ...(input.x402Funding !== undefined && { x402Funding: input.x402Funding }),\n };\n\n return this._post(RELAYER_API.PAYMENTS, idempotencyKey, body);\n }\n\n private async _submitExecute(intent: ExecuteIntent, signature: Hex, input: ExecuteInput): Promise<PaymentResult> {\n const idempotencyKey = input.idempotencyKey ?? generateUuid();\n\n // Resolve optional pre-swap fields\n const fromToken = input.fromToken !== undefined ? resolveToken(input.fromToken, this.chainId) : undefined;\n const maxFromAmount =\n input.maxFromAmount !== undefined\n ? parseAmount(input.maxFromAmount, input.fromToken ?? input.token, this.chainId)\n : undefined;\n\n const body = {\n chainId: this.chainId,\n vaultAddress: this.vaultAddress,\n\n // Flat intent fields\n bot: intent.bot,\n protocol: intent.protocol,\n calldataHash: intent.calldataHash,\n token: intent.token,\n amount: intent.amount.toString(),\n deadline: intent.deadline.toString(),\n ref: intent.ref,\n signature,\n\n // Protocol calldata\n callData: input.callData,\n\n // Optional pre-swap\n ...(fromToken !== undefined && { fromToken }),\n ...(maxFromAmount !== undefined && { maxFromAmount: maxFromAmount.toString() }),\n\n // Off-chain metadata\n idempotencyKey,\n ...(input.memo !== undefined && { memo: input.memo }),\n ...(input.protocolName !== undefined && { protocolName: input.protocolName }),\n ...(input.metadata !== undefined && { metadata: input.metadata }),\n };\n\n return this._post(RELAYER_API.EXECUTE, idempotencyKey, body);\n }\n\n private async _submitSwap(intent: SwapIntent, signature: Hex, input: SwapInput): Promise<PaymentResult> {\n const idempotencyKey = input.idempotencyKey ?? generateUuid();\n\n // Resolve optional source token fields\n const fromToken = input.fromToken !== undefined ? resolveToken(input.fromToken, this.chainId) : undefined;\n const maxFromAmount =\n input.maxFromAmount !== undefined\n ? parseAmount(input.maxFromAmount, input.fromToken ?? input.toToken, this.chainId)\n : undefined;\n\n const body = {\n chainId: this.chainId,\n vaultAddress: this.vaultAddress,\n\n // Flat intent fields\n bot: intent.bot,\n toToken: intent.toToken,\n minToAmount: intent.minToAmount.toString(),\n deadline: intent.deadline.toString(),\n ref: intent.ref,\n signature,\n\n // Optional source token\n ...(fromToken !== undefined && { fromToken }),\n ...(maxFromAmount !== undefined && { maxFromAmount: maxFromAmount.toString() }),\n\n // Off-chain metadata\n idempotencyKey,\n ...(input.memo !== undefined && { memo: input.memo }),\n };\n\n return this._post(RELAYER_API.SWAP, idempotencyKey, body);\n }\n\n private async _post(path: string, idempotencyKey: string, body: Record<string, unknown>): Promise<PaymentResult> {\n const url = `${this.relayerUrl}${path}`;\n\n const response = await fetch(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'Idempotency-Key': idempotencyKey,\n },\n body: JSON.stringify(body),\n });\n\n if (!response.ok) {\n const responseBody = await response.text();\n throw new Error(`Relayer request failed [${response.status}]: ${responseBody}`);\n }\n\n return response.json() as Promise<PaymentResult>;\n }\n}\n","// ============================================================================\n// V3 Keystore — Encrypt / Decrypt bot private keys\n// ============================================================================\n//\n// Standard Ethereum V3 keystore format (same as MetaMask / Geth).\n// Uses scrypt KDF + AES-128-CTR cipher + keccak256 MAC.\n\nimport { scryptAsync } from '@noble/hashes/scrypt';\nimport { keccak_256 } from '@noble/hashes/sha3';\nimport { ctr } from '@noble/ciphers/aes';\nimport { privateKeyToAccount } from 'viem/accounts';\nimport type { Hex } from 'viem';\nimport { generateUuid } from './utils.js';\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport interface KeystoreV3 {\n version: 3;\n id: string;\n address: string; // lowercase hex, no 0x prefix\n crypto: {\n ciphertext: string;\n cipherparams: { iv: string };\n cipher: 'aes-128-ctr';\n kdf: 'scrypt';\n kdfparams: {\n dklen: number;\n salt: string;\n n: number;\n r: number;\n p: number;\n };\n mac: string;\n };\n}\n\n// ============================================================================\n// Constants\n// ============================================================================\n\nconst SCRYPT_N = 262144; // 2^18\nconst SCRYPT_R = 8;\nconst SCRYPT_P = 1;\nconst SCRYPT_DKLEN = 32;\n\n// ============================================================================\n// Helpers\n// ============================================================================\n\nfunction getRandomBytes(length: number): Uint8Array {\n const bytes = new Uint8Array(length);\n if (typeof crypto !== 'undefined' && crypto.getRandomValues) {\n crypto.getRandomValues(bytes);\n } else {\n const { randomBytes } = require('crypto') as typeof import('crypto');\n const buf = randomBytes(length);\n for (let i = 0; i < length; i++) bytes[i] = buf[i] ?? 0;\n }\n return bytes;\n}\n\nfunction hexToBytes(hex: string): Uint8Array {\n const clean = hex.startsWith('0x') ? hex.slice(2) : hex;\n const bytes = new Uint8Array(clean.length / 2);\n for (let i = 0; i < bytes.length; i++) {\n bytes[i] = parseInt(clean.slice(i * 2, i * 2 + 2), 16);\n }\n return bytes;\n}\n\nfunction bytesToHex(bytes: Uint8Array): string {\n return Array.from(bytes)\n .map((b) => b.toString(16).padStart(2, '0'))\n .join('');\n}\n\n// ============================================================================\n// encryptKeystore\n// ============================================================================\n\n/**\n * Encrypt a raw private key into a V3 keystore JSON object.\n *\n * Uses scrypt KDF (n=262144, r=8, p=1) and AES-128-CTR cipher —\n * the same format as MetaMask and Geth.\n *\n * @param privateKey - Raw private key as 0x-prefixed hex string\n * @param passphrase - Passphrase to encrypt with (min 1 character)\n * @returns V3 keystore object ready to serialize as JSON\n *\n * @example\n * ```ts\n * import { encryptKeystore } from '@axonfi/sdk';\n *\n * const keystore = await encryptKeystore('0xabc...', 'my-strong-passphrase');\n * fs.writeFileSync('bot-keystore.json', JSON.stringify(keystore, null, 2));\n * ```\n */\nexport async function encryptKeystore(privateKey: Hex, passphrase: string): Promise<KeystoreV3> {\n if (!passphrase) throw new Error('Passphrase must not be empty');\n\n const keyBytes = hexToBytes(privateKey);\n const account = privateKeyToAccount(privateKey);\n const address = account.address.slice(2).toLowerCase(); // no 0x prefix\n\n // Random salt and IV\n const salt = getRandomBytes(32);\n const iv = getRandomBytes(16);\n\n // Derive key via scrypt\n const derivedKey = await scryptAsync(new TextEncoder().encode(passphrase), salt, {\n N: SCRYPT_N,\n r: SCRYPT_R,\n p: SCRYPT_P,\n dkLen: SCRYPT_DKLEN,\n });\n\n // Encrypt with AES-128-CTR (first 16 bytes of derived key)\n const encryptionKey = derivedKey.slice(0, 16);\n const cipher = ctr(encryptionKey, iv);\n const ciphertext = cipher.encrypt(keyBytes);\n\n // MAC = keccak256(derivedKey[16:32] ++ ciphertext)\n const macInput = new Uint8Array(16 + ciphertext.length);\n macInput.set(derivedKey.slice(16, 32), 0);\n macInput.set(ciphertext, 16);\n const mac = keccak_256(macInput);\n\n return {\n version: 3,\n id: generateUuid(),\n address,\n crypto: {\n ciphertext: bytesToHex(ciphertext),\n cipherparams: { iv: bytesToHex(iv) },\n cipher: 'aes-128-ctr',\n kdf: 'scrypt',\n kdfparams: {\n dklen: SCRYPT_DKLEN,\n salt: bytesToHex(salt),\n n: SCRYPT_N,\n r: SCRYPT_R,\n p: SCRYPT_P,\n },\n mac: bytesToHex(mac),\n },\n };\n}\n\n// ============================================================================\n// decryptKeystore\n// ============================================================================\n\n/**\n * Decrypt a V3 keystore back to a raw private key.\n *\n * @param keystore - V3 keystore object or JSON string\n * @param passphrase - Passphrase used during encryption\n * @returns Raw private key as 0x-prefixed hex string\n * @throws Error if passphrase is wrong (MAC mismatch) or keystore is invalid\n *\n * @example\n * ```ts\n * import { AxonClient, decryptKeystore } from '@axonfi/sdk';\n *\n * const keystore = JSON.parse(fs.readFileSync('bot-keystore.json', 'utf8'));\n * const privateKey = await decryptKeystore(keystore, process.env.BOT_PASSPHRASE!);\n * const client = new AxonClient({ botPrivateKey: privateKey, ... });\n * ```\n */\nexport async function decryptKeystore(keystore: KeystoreV3 | string, passphrase: string): Promise<Hex> {\n // Parse JSON string if needed\n let ks: KeystoreV3;\n if (typeof keystore === 'string') {\n try {\n ks = JSON.parse(keystore) as KeystoreV3;\n } catch {\n throw new Error('Invalid keystore: could not parse JSON');\n }\n } else {\n ks = keystore;\n }\n\n // Validate structure\n if (ks.version !== 3) throw new Error(`Unsupported keystore version: ${ks.version}`);\n if (!ks.crypto) throw new Error('Invalid keystore: missing crypto field');\n if (ks.crypto.kdf !== 'scrypt') throw new Error(`Unsupported KDF: ${ks.crypto.kdf}`);\n if (ks.crypto.cipher !== 'aes-128-ctr') throw new Error(`Unsupported cipher: ${ks.crypto.cipher}`);\n\n const { kdfparams, ciphertext: ctHex, cipherparams, mac: expectedMacHex } = ks.crypto;\n\n // Derive key via scrypt\n const salt = hexToBytes(kdfparams.salt);\n const derivedKey = await scryptAsync(new TextEncoder().encode(passphrase), salt, {\n N: kdfparams.n,\n r: kdfparams.r,\n p: kdfparams.p,\n dkLen: kdfparams.dklen,\n });\n\n // Verify MAC\n const ciphertextBytes = hexToBytes(ctHex);\n const macInput = new Uint8Array(16 + ciphertextBytes.length);\n macInput.set(derivedKey.slice(16, 32), 0);\n macInput.set(ciphertextBytes, 16);\n const computedMac = bytesToHex(keccak_256(macInput));\n\n if (computedMac !== expectedMacHex) {\n throw new Error('Wrong passphrase: MAC mismatch');\n }\n\n // Decrypt with AES-128-CTR\n const iv = hexToBytes(cipherparams.iv);\n const encryptionKey = derivedKey.slice(0, 16);\n const cipher = ctr(encryptionKey, iv);\n const plaintext = cipher.decrypt(ciphertextBytes);\n\n return `0x${bytesToHex(plaintext)}` as Hex;\n}\n","export const AxonRegistryAbi = [\n {\n \"type\": \"constructor\",\n \"inputs\": [\n {\n \"name\": \"initialOwner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"VERSION\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"acceptOwnership\",\n \"inputs\": [],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"addRelayer\",\n \"inputs\": [\n {\n \"name\": \"relayer\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"addSwapRouter\",\n \"inputs\": [\n {\n \"name\": \"router\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"approveDefaultToken\",\n \"inputs\": [\n {\n \"name\": \"token\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"isApprovedSwapRouter\",\n \"inputs\": [\n {\n \"name\": \"router\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"isAuthorized\",\n \"inputs\": [\n {\n \"name\": \"relayer\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"isDefaultToken\",\n \"inputs\": [\n {\n \"name\": \"token\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"owner\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"pendingOwner\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"removeRelayer\",\n \"inputs\": [\n {\n \"name\": \"relayer\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"removeSwapRouter\",\n \"inputs\": [\n {\n \"name\": \"router\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"renounceOwnership\",\n \"inputs\": [],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"revokeDefaultToken\",\n \"inputs\": [\n {\n \"name\": \"token\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"setOracleConfig\",\n \"inputs\": [\n {\n \"name\": \"uniV3Factory\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"usdc\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"weth\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"transferOwnership\",\n \"inputs\": [\n {\n \"name\": \"newOwner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"uniswapV3Factory\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"usdcAddress\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"wethAddress\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"event\",\n \"name\": \"DefaultTokenApproved\",\n \"inputs\": [\n {\n \"name\": \"token\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"DefaultTokenRevoked\",\n \"inputs\": [\n {\n \"name\": \"token\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"OracleConfigUpdated\",\n \"inputs\": [\n {\n \"name\": \"uniswapV3Factory\",\n \"type\": \"address\",\n \"indexed\": false,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"usdc\",\n \"type\": \"address\",\n \"indexed\": false,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"weth\",\n \"type\": \"address\",\n \"indexed\": false,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"OwnershipTransferStarted\",\n \"inputs\": [\n {\n \"name\": \"previousOwner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"newOwner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"OwnershipTransferred\",\n \"inputs\": [\n {\n \"name\": \"previousOwner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"newOwner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"RelayerAdded\",\n \"inputs\": [\n {\n \"name\": \"relayer\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"RelayerRemoved\",\n \"inputs\": [\n {\n \"name\": \"relayer\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"SwapRouterAdded\",\n \"inputs\": [\n {\n \"name\": \"router\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"SwapRouterRemoved\",\n \"inputs\": [\n {\n \"name\": \"router\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"error\",\n \"name\": \"AlreadyApproved\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"AlreadyAuthorized\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"NotApproved\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"NotAuthorized\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"OwnableInvalidOwner\",\n \"inputs\": [\n {\n \"name\": \"owner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ]\n },\n {\n \"type\": \"error\",\n \"name\": \"OwnableUnauthorizedAccount\",\n \"inputs\": [\n {\n \"name\": \"account\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ]\n },\n {\n \"type\": \"error\",\n \"name\": \"ZeroAddress\",\n \"inputs\": []\n }\n] as const;\n"]}
1
+ {"version":3,"sources":["../src/constants.ts","../src/signer.ts","../src/abis/AxonVault.ts","../src/abis/AxonVaultFactory.ts","../src/tokens.ts","../src/amounts.ts","../src/vault.ts","../src/utils.ts","../src/x402.ts","../src/eip3009.ts","../src/permit2.ts","../src/client.ts","../src/keystore.ts","../src/abis/AxonRegistry.ts"],"names":["keccak256","stringToBytes","Chain","Token","entry","parseUnits","base","baseSepolia","arbitrum","arbitrumSepolia","createPublicClient","http","privateKeyToAccount","createWalletClient","erc20Abi","scryptAsync","ctr","keccak_256"],"mappings":"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","file":"index.cjs","sourcesContent":["import { keccak256, stringToBytes } from 'viem';\nimport type { Address } from 'viem';\n\n// ============================================================================\n// EIP-712 type hashes\n// ============================================================================\n\n/**\n * keccak256 of the PaymentIntent type string — used for manual digest\n * verification. viem's signTypedData computes this internally; you don't\n * need this value for signing, only for low-level verification.\n */\nexport const PAYMENT_INTENT_TYPEHASH: `0x${string}` = keccak256(\n stringToBytes('PaymentIntent(address bot,address to,address token,uint256 amount,uint256 deadline,bytes32 ref)'),\n);\n\n/** keccak256 of the ExecuteIntent type string for DeFi protocol interactions. */\nexport const EXECUTE_INTENT_TYPEHASH: `0x${string}` = keccak256(\n stringToBytes(\n 'ExecuteIntent(address bot,address protocol,bytes32 calldataHash,address token,uint256 amount,uint256 deadline,bytes32 ref)',\n ),\n);\n\n/** keccak256 of the SwapIntent type string for in-vault token rebalancing. */\nexport const SWAP_INTENT_TYPEHASH: `0x${string}` = keccak256(\n stringToBytes('SwapIntent(address bot,address toToken,uint256 minToAmount,uint256 deadline,bytes32 ref)'),\n);\n\n/** EIP-712 domain name and version for AxonVault. Matches the constructor. */\nexport const EIP712_DOMAIN_NAME = 'AxonVault' as const;\nexport const EIP712_DOMAIN_VERSION = '1' as const;\n\n// ============================================================================\n// Native ETH sentinel\n// ============================================================================\n\n/** Sentinel address representing native ETH in PaymentIntents and deposits. */\nexport const NATIVE_ETH: Address = '0xEeeeeEeeeEeEeeEeEeEeeEEEeeeeEeeeeeeeEEeE';\n\n// ============================================================================\n// USDC addresses per chain\n// ============================================================================\n\nexport const USDC: Record<number, Address> = {\n // Base mainnet\n 8453: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913',\n // Base Sepolia\n 84532: '0x036CbD53842c5426634e7929541eC2318f3dCF7e',\n // Arbitrum One\n 42161: '0xaf88d065e77c8cC2239327C5EDb3A432268e5831',\n // Arbitrum Sepolia\n 421614: '0x75faf114eafb1BDbe2F0316DF893fd58CE46AA4d',\n};\n\n// ============================================================================\n// Chain enum & supported chain IDs\n// ============================================================================\n\nexport enum Chain {\n Base = 8453,\n BaseSepolia = 84532,\n Arbitrum = 42161,\n ArbitrumSepolia = 421614,\n}\n\nexport const SUPPORTED_CHAIN_IDS = [8453, 84532, 42161, 421614] as const;\nexport type SupportedChainId = (typeof SUPPORTED_CHAIN_IDS)[number];\n\n// ============================================================================\n// Chain metadata (names & block explorers)\n// ============================================================================\n\n/** Human-readable chain names. */\nexport const CHAIN_NAMES: Record<number, string> = {\n [Chain.Base]: 'Base',\n [Chain.BaseSepolia]: 'Base Sepolia',\n [Chain.Arbitrum]: 'Arbitrum One',\n [Chain.ArbitrumSepolia]: 'Arbitrum Sepolia',\n};\n\n/** Block explorer TX URL prefix per chain. */\nexport const EXPLORER_TX: Record<number, string> = {\n [Chain.Base]: 'https://basescan.org/tx/',\n [Chain.BaseSepolia]: 'https://sepolia.basescan.org/tx/',\n [Chain.Arbitrum]: 'https://arbiscan.io/tx/',\n [Chain.ArbitrumSepolia]: 'https://sepolia.arbiscan.io/tx/',\n};\n\n/** Block explorer address URL prefix per chain. */\nexport const EXPLORER_ADDR: Record<number, string> = {\n [Chain.Base]: 'https://basescan.org/address/',\n [Chain.BaseSepolia]: 'https://sepolia.basescan.org/address/',\n [Chain.Arbitrum]: 'https://arbiscan.io/address/',\n [Chain.ArbitrumSepolia]: 'https://sepolia.arbiscan.io/address/',\n};\n\n// ============================================================================\n// Time constants (seconds)\n// ============================================================================\n\n/** Default intent validity window when no deadline is specified. */\nexport const DEFAULT_DEADLINE_SECONDS = 300; // 5 minutes\n\n/** Window presets for SpendingLimit.windowSeconds. */\nexport const WINDOW = {\n ONE_HOUR: 3600n,\n ONE_DAY: 86400n,\n ONE_WEEK: 604800n,\n THIRTY_DAYS: 2592000n,\n} as const;\n\n// ============================================================================\n// Payment rejection error codes\n// ============================================================================\n\n/**\n * Structured error codes returned by the relayer when a payment is rejected.\n * Bots should import these to programmatically handle failures.\n */\nexport const PaymentErrorCode = {\n /** Payment destination is the vault itself */\n SELF_PAYMENT: 'SELF_PAYMENT',\n /** Payment destination is the zero address */\n ZERO_ADDRESS: 'ZERO_ADDRESS',\n /** Payment amount is zero */\n ZERO_AMOUNT: 'ZERO_AMOUNT',\n /** Vault does not hold enough of the requested token */\n INSUFFICIENT_BALANCE: 'INSUFFICIENT_BALANCE',\n /** EIP-712 signature verification failed */\n INVALID_SIGNATURE: 'INVALID_SIGNATURE',\n /** Payment intent deadline has passed */\n DEADLINE_EXPIRED: 'DEADLINE_EXPIRED',\n /** Bot is temporarily paused by the operator */\n BOT_PAUSED: 'BOT_PAUSED',\n /** Bot address is not registered/active in the vault */\n BOT_NOT_ACTIVE: 'BOT_NOT_ACTIVE',\n /** Destination address is on the global or vault blacklist */\n BLACKLISTED: 'BLACKLISTED',\n /** Rolling-window spending limit (USD amount) exceeded */\n SPENDING_LIMIT_EXCEEDED: 'SPENDING_LIMIT_EXCEEDED',\n /** Rolling-window transaction count limit exceeded */\n TX_COUNT_EXCEEDED: 'TX_COUNT_EXCEEDED',\n /** Single transaction exceeds the bot's on-chain maxPerTxAmount */\n MAX_PER_TX_EXCEEDED: 'MAX_PER_TX_EXCEEDED',\n /** Vault-level daily aggregate spending limit exceeded */\n VAULT_AGGREGATE_EXCEEDED: 'VAULT_AGGREGATE_EXCEEDED',\n /** eth_call simulation of the on-chain transaction reverted */\n SIMULATION_FAILED: 'SIMULATION_FAILED',\n /** Routed to human review (AI scan flagged or no consensus) */\n PENDING_REVIEW: 'PENDING_REVIEW',\n /** Relayer wallet has insufficient gas to submit the transaction */\n RELAYER_OUT_OF_GAS: 'RELAYER_OUT_OF_GAS',\n /** On-chain transaction submission failed */\n SUBMISSION_FAILED: 'SUBMISSION_FAILED',\n /** Destination not in the vault/bot whitelist */\n DESTINATION_NOT_WHITELISTED: 'DESTINATION_NOT_WHITELISTED',\n /** Vault address is not a valid AxonVault or was not deployed by a known factory */\n INVALID_VAULT: 'INVALID_VAULT',\n /** Rebalance output token is not in the whitelist (on-chain or relayer default) */\n REBALANCE_TOKEN_NOT_ALLOWED: 'REBALANCE_TOKEN_NOT_ALLOWED',\n /** Rebalance input amount exceeds the bot's maxRebalanceAmount cap */\n MAX_REBALANCE_AMOUNT_EXCEEDED: 'MAX_REBALANCE_AMOUNT_EXCEEDED',\n /** Unknown or internal error */\n INTERNAL_ERROR: 'INTERNAL_ERROR',\n} as const;\n\nexport type PaymentErrorCode = (typeof PaymentErrorCode)[keyof typeof PaymentErrorCode];\n\n// ============================================================================\n// Relayer API paths\n// ============================================================================\n\nexport const RELAYER_API = {\n PAYMENTS: '/v1/payments',\n payment: (requestId: string) => `/v1/payments/${requestId}`,\n EXECUTE: '/v1/execute',\n execute: (requestId: string) => `/v1/execute/${requestId}`,\n SWAP: '/v1/swap',\n swap: (requestId: string) => `/v1/swap/${requestId}`,\n\n // Vault read endpoints (relayer reads chain on behalf of bots)\n vaultBalance: (vault: string, token: string, chainId: number) =>\n `/v1/vault/${vault}/balance/${token}?chainId=${chainId}`,\n vaultBalances: (vault: string, chainId: number) => `/v1/vault/${vault}/balances`,\n vaultInfo: (vault: string, chainId: number) => `/v1/vault/${vault}/info?chainId=${chainId}`,\n botStatus: (vault: string, bot: string, chainId: number) => `/v1/vault/${vault}/bot/${bot}/status?chainId=${chainId}`,\n destinationCheck: (vault: string, bot: string, destination: string, chainId: number) =>\n `/v1/vault/${vault}/bot/${bot}/destination/${destination}?chainId=${chainId}`,\n protocolCheck: (vault: string, protocol: string, chainId: number) =>\n `/v1/vault/${vault}/protocol/${protocol}?chainId=${chainId}`,\n rebalanceTokens: (vault: string, chainId: number) => `/v1/vault/${vault}/rebalance-tokens?chainId=${chainId}`,\n rebalanceTokenCheck: (vault: string, token: string, chainId: number) =>\n `/v1/vault/${vault}/rebalance-token/${token}?chainId=${chainId}`,\n\n // TOS endpoints\n tosStatus: (wallet: string) => `/v1/tos/status?wallet=${wallet}`,\n TOS_ACCEPT: '/v1/tos/accept',\n} as const;\n","import { keccak256, stringToBytes } from 'viem';\nimport type { WalletClient, Hex, Address } from 'viem';\nimport type { PaymentIntent, ExecuteIntent, SwapIntent } from './types.js';\nimport { EIP712_DOMAIN_NAME, EIP712_DOMAIN_VERSION } from './constants.js';\n\n// EIP-712 types for PaymentIntent — field order matches the Solidity struct exactly.\nconst PAYMENT_INTENT_TYPES = {\n PaymentIntent: [\n { name: 'bot', type: 'address' },\n { name: 'to', type: 'address' },\n { name: 'token', type: 'address' },\n { name: 'amount', type: 'uint256' },\n { name: 'deadline', type: 'uint256' },\n { name: 'ref', type: 'bytes32' },\n ],\n} as const;\n\n// EIP-712 types for ExecuteIntent — DeFi protocol interactions.\nconst EXECUTE_INTENT_TYPES = {\n ExecuteIntent: [\n { name: 'bot', type: 'address' },\n { name: 'protocol', type: 'address' },\n { name: 'calldataHash', type: 'bytes32' },\n { name: 'token', type: 'address' },\n { name: 'amount', type: 'uint256' },\n { name: 'deadline', type: 'uint256' },\n { name: 'ref', type: 'bytes32' },\n ],\n} as const;\n\n// EIP-712 types for SwapIntent — in-vault token rebalancing.\nconst SWAP_INTENT_TYPES = {\n SwapIntent: [\n { name: 'bot', type: 'address' },\n { name: 'toToken', type: 'address' },\n { name: 'minToAmount', type: 'uint256' },\n { name: 'deadline', type: 'uint256' },\n { name: 'ref', type: 'bytes32' },\n ],\n} as const;\n\nfunction makeDomain(vaultAddress: Address, chainId: number) {\n return {\n name: EIP712_DOMAIN_NAME,\n version: EIP712_DOMAIN_VERSION,\n chainId,\n verifyingContract: vaultAddress,\n } as const;\n}\n\n/**\n * Sign a PaymentIntent using EIP-712 typed structured data.\n *\n * The resulting signature can be submitted to the Axon relayer API, which\n * passes it to AxonVault.executePayment() on-chain.\n */\nexport async function signPayment(\n walletClient: WalletClient,\n vaultAddress: Address,\n chainId: number,\n intent: PaymentIntent,\n): Promise<Hex> {\n if (!walletClient.account) {\n throw new Error('walletClient has no account attached');\n }\n\n return walletClient.signTypedData({\n account: walletClient.account,\n domain: makeDomain(vaultAddress, chainId),\n types: PAYMENT_INTENT_TYPES,\n primaryType: 'PaymentIntent',\n message: {\n bot: intent.bot,\n to: intent.to,\n token: intent.token,\n amount: intent.amount,\n deadline: intent.deadline,\n ref: intent.ref,\n },\n });\n}\n\n/**\n * Sign an ExecuteIntent using EIP-712 typed structured data.\n *\n * The resulting signature can be submitted to the Axon relayer API, which\n * passes it to AxonVault.executeProtocol() on-chain.\n */\nexport async function signExecuteIntent(\n walletClient: WalletClient,\n vaultAddress: Address,\n chainId: number,\n intent: ExecuteIntent,\n): Promise<Hex> {\n if (!walletClient.account) {\n throw new Error('walletClient has no account attached');\n }\n\n return walletClient.signTypedData({\n account: walletClient.account,\n domain: makeDomain(vaultAddress, chainId),\n types: EXECUTE_INTENT_TYPES,\n primaryType: 'ExecuteIntent',\n message: {\n bot: intent.bot,\n protocol: intent.protocol,\n calldataHash: intent.calldataHash,\n token: intent.token,\n amount: intent.amount,\n deadline: intent.deadline,\n ref: intent.ref,\n },\n });\n}\n\n/**\n * Sign a SwapIntent using EIP-712 typed structured data.\n *\n * The resulting signature can be submitted to the Axon relayer API, which\n * passes it to AxonVault.executeSwap() on-chain.\n */\nexport async function signSwapIntent(\n walletClient: WalletClient,\n vaultAddress: Address,\n chainId: number,\n intent: SwapIntent,\n): Promise<Hex> {\n if (!walletClient.account) {\n throw new Error('walletClient has no account attached');\n }\n\n return walletClient.signTypedData({\n account: walletClient.account,\n domain: makeDomain(vaultAddress, chainId),\n types: SWAP_INTENT_TYPES,\n primaryType: 'SwapIntent',\n message: {\n bot: intent.bot,\n toToken: intent.toToken,\n minToAmount: intent.minToAmount,\n deadline: intent.deadline,\n ref: intent.ref,\n },\n });\n}\n\n/**\n * Derive the on-chain `ref` bytes32 from a human-readable memo string.\n *\n * The full memo text is stored off-chain by the relayer (PostgreSQL), linked\n * to the transaction. The keccak256 hash goes into the signed PaymentIntent\n * and is emitted in the PaymentExecuted on-chain event.\n *\n * @param memo Human-readable description, e.g. \"API call #1234 — weather data\"\n * @returns keccak256 hash of the UTF-8 encoded memo, as a bytes32 hex.\n */\nexport function encodeRef(memo: string): Hex {\n return keccak256(stringToBytes(memo));\n}\n","export const AxonVaultAbi = [\n {\n \"type\": \"constructor\",\n \"inputs\": [\n {\n \"name\": \"_owner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"_axonRegistry\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"receive\",\n \"stateMutability\": \"payable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"DOMAIN_SEPARATOR\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"MAX_SPENDING_LIMITS\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint8\",\n \"internalType\": \"uint8\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"NATIVE_ETH\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"VERSION\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint16\",\n \"internalType\": \"uint16\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"acceptOwnership\",\n \"inputs\": [],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"addBot\",\n \"inputs\": [\n {\n \"name\": \"bot\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"params\",\n \"type\": \"tuple\",\n \"internalType\": \"struct AxonVault.BotConfigParams\",\n \"components\": [\n {\n \"name\": \"maxPerTxAmount\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"maxRebalanceAmount\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"spendingLimits\",\n \"type\": \"tuple[]\",\n \"internalType\": \"struct AxonVault.SpendingLimit[]\",\n \"components\": [\n {\n \"name\": \"amount\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"maxCount\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"windowSeconds\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ]\n },\n {\n \"name\": \"aiTriggerThreshold\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"requireAiVerification\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ]\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"addBotDestination\",\n \"inputs\": [\n {\n \"name\": \"bot\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"destination\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"addGlobalBlacklist\",\n \"inputs\": [\n {\n \"name\": \"destination\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"addGlobalDestination\",\n \"inputs\": [\n {\n \"name\": \"destination\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"addRebalanceTokens\",\n \"inputs\": [\n {\n \"name\": \"tokens\",\n \"type\": \"address[]\",\n \"internalType\": \"address[]\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"approveProtocol\",\n \"inputs\": [\n {\n \"name\": \"protocol\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"approvedProtocolCount\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"approvedProtocols\",\n \"inputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"axonRegistry\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"botAddedByOperator\",\n \"inputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"botDestinationCount\",\n \"inputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"botDestinationWhitelist\",\n \"inputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"deposit\",\n \"inputs\": [\n {\n \"name\": \"token\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"ref\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"payable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"eip712Domain\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"fields\",\n \"type\": \"bytes1\",\n \"internalType\": \"bytes1\"\n },\n {\n \"name\": \"name\",\n \"type\": \"string\",\n \"internalType\": \"string\"\n },\n {\n \"name\": \"version\",\n \"type\": \"string\",\n \"internalType\": \"string\"\n },\n {\n \"name\": \"chainId\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"verifyingContract\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"salt\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"extensions\",\n \"type\": \"uint256[]\",\n \"internalType\": \"uint256[]\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"executePayment\",\n \"inputs\": [\n {\n \"name\": \"intent\",\n \"type\": \"tuple\",\n \"internalType\": \"struct AxonVault.PaymentIntent\",\n \"components\": [\n {\n \"name\": \"bot\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"to\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"token\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"deadline\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"ref\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ]\n },\n {\n \"name\": \"signature\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n },\n {\n \"name\": \"fromToken\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"maxFromAmount\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"swapRouter\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"swapCalldata\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"executeProtocol\",\n \"inputs\": [\n {\n \"name\": \"intent\",\n \"type\": \"tuple\",\n \"internalType\": \"struct AxonVault.ExecuteIntent\",\n \"components\": [\n {\n \"name\": \"bot\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"protocol\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"calldataHash\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n },\n {\n \"name\": \"token\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"deadline\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"ref\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ]\n },\n {\n \"name\": \"signature\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n },\n {\n \"name\": \"callData\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n },\n {\n \"name\": \"fromToken\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"maxFromAmount\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"swapRouter\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"swapCalldata\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"executeSwap\",\n \"inputs\": [\n {\n \"name\": \"intent\",\n \"type\": \"tuple\",\n \"internalType\": \"struct AxonVault.SwapIntent\",\n \"components\": [\n {\n \"name\": \"bot\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"toToken\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"minToAmount\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"deadline\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"ref\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ]\n },\n {\n \"name\": \"signature\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n },\n {\n \"name\": \"fromToken\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"maxFromAmount\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"swapRouter\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"swapCalldata\",\n \"type\": \"bytes\",\n \"internalType\": \"bytes\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"getBotConfig\",\n \"inputs\": [\n {\n \"name\": \"bot\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"tuple\",\n \"internalType\": \"struct AxonVault.BotConfig\",\n \"components\": [\n {\n \"name\": \"isActive\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n },\n {\n \"name\": \"registeredAt\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"maxPerTxAmount\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"maxRebalanceAmount\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"spendingLimits\",\n \"type\": \"tuple[]\",\n \"internalType\": \"struct AxonVault.SpendingLimit[]\",\n \"components\": [\n {\n \"name\": \"amount\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"maxCount\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"windowSeconds\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ]\n },\n {\n \"name\": \"aiTriggerThreshold\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"requireAiVerification\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ]\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"globalBlacklistCount\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"globalDestinationBlacklist\",\n \"inputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"globalDestinationCount\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"globalDestinationWhitelist\",\n \"inputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"isBotActive\",\n \"inputs\": [\n {\n \"name\": \"bot\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"isContractApproved\",\n \"inputs\": [\n {\n \"name\": \"protocol\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"operator\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"operatorBotCount\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"operatorCeilings\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"maxPerTxAmount\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"maxBotDailyLimit\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"maxOperatorBots\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"vaultDailyAggregate\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"minAiTriggerFloor\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"operatorMaxDrainPerDay\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"owner\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"pause\",\n \"inputs\": [],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"paused\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"pendingOwner\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"rebalanceTokenCount\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"rebalanceTokenWhitelist\",\n \"inputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"removeBot\",\n \"inputs\": [\n {\n \"name\": \"bot\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"removeBotDestination\",\n \"inputs\": [\n {\n \"name\": \"bot\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"destination\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"removeGlobalBlacklist\",\n \"inputs\": [\n {\n \"name\": \"destination\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"removeGlobalDestination\",\n \"inputs\": [\n {\n \"name\": \"destination\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"removeRebalanceTokens\",\n \"inputs\": [\n {\n \"name\": \"tokens\",\n \"type\": \"address[]\",\n \"internalType\": \"address[]\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"renounceOwnership\",\n \"inputs\": [],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"revokeProtocol\",\n \"inputs\": [\n {\n \"name\": \"protocol\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"setOperator\",\n \"inputs\": [\n {\n \"name\": \"_operator\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"setOperatorCeilings\",\n \"inputs\": [\n {\n \"name\": \"ceilings\",\n \"type\": \"tuple\",\n \"internalType\": \"struct AxonVault.OperatorCeilings\",\n \"components\": [\n {\n \"name\": \"maxPerTxAmount\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"maxBotDailyLimit\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"maxOperatorBots\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"vaultDailyAggregate\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"minAiTriggerFloor\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ]\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"transferOwnership\",\n \"inputs\": [\n {\n \"name\": \"newOwner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"unpause\",\n \"inputs\": [],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"updateBotConfig\",\n \"inputs\": [\n {\n \"name\": \"bot\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"params\",\n \"type\": \"tuple\",\n \"internalType\": \"struct AxonVault.BotConfigParams\",\n \"components\": [\n {\n \"name\": \"maxPerTxAmount\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"maxRebalanceAmount\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"spendingLimits\",\n \"type\": \"tuple[]\",\n \"internalType\": \"struct AxonVault.SpendingLimit[]\",\n \"components\": [\n {\n \"name\": \"amount\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"maxCount\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"windowSeconds\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ]\n },\n {\n \"name\": \"aiTriggerThreshold\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"requireAiVerification\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ]\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"usedIntents\",\n \"inputs\": [\n {\n \"name\": \"\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"withdraw\",\n \"inputs\": [\n {\n \"name\": \"token\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"to\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"event\",\n \"name\": \"BotAdded\",\n \"inputs\": [\n {\n \"name\": \"bot\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"addedBy\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"BotConfigUpdated\",\n \"inputs\": [\n {\n \"name\": \"bot\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"updatedBy\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"BotDestinationAdded\",\n \"inputs\": [\n {\n \"name\": \"bot\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"destination\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"BotDestinationRemoved\",\n \"inputs\": [\n {\n \"name\": \"bot\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"destination\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"BotRemoved\",\n \"inputs\": [\n {\n \"name\": \"bot\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"removedBy\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"Deposited\",\n \"inputs\": [\n {\n \"name\": \"from\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"token\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"ref\",\n \"type\": \"bytes32\",\n \"indexed\": false,\n \"internalType\": \"bytes32\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"EIP712DomainChanged\",\n \"inputs\": [],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"GlobalBlacklistAdded\",\n \"inputs\": [\n {\n \"name\": \"destination\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"GlobalBlacklistRemoved\",\n \"inputs\": [\n {\n \"name\": \"destination\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"GlobalDestinationAdded\",\n \"inputs\": [\n {\n \"name\": \"destination\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"GlobalDestinationRemoved\",\n \"inputs\": [\n {\n \"name\": \"destination\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"OperatorCeilingsUpdated\",\n \"inputs\": [\n {\n \"name\": \"ceilings\",\n \"type\": \"tuple\",\n \"indexed\": false,\n \"internalType\": \"struct AxonVault.OperatorCeilings\",\n \"components\": [\n {\n \"name\": \"maxPerTxAmount\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"maxBotDailyLimit\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"maxOperatorBots\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"vaultDailyAggregate\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"minAiTriggerFloor\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ]\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"OperatorSet\",\n \"inputs\": [\n {\n \"name\": \"oldOperator\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"newOperator\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"OwnershipTransferStarted\",\n \"inputs\": [\n {\n \"name\": \"previousOwner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"newOwner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"OwnershipTransferred\",\n \"inputs\": [\n {\n \"name\": \"previousOwner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"newOwner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"Paused\",\n \"inputs\": [\n {\n \"name\": \"account\",\n \"type\": \"address\",\n \"indexed\": false,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"PaymentExecuted\",\n \"inputs\": [\n {\n \"name\": \"bot\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"to\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"token\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"ref\",\n \"type\": \"bytes32\",\n \"indexed\": false,\n \"internalType\": \"bytes32\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"ProtocolApproved\",\n \"inputs\": [\n {\n \"name\": \"protocol\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"ProtocolExecuted\",\n \"inputs\": [\n {\n \"name\": \"bot\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"protocol\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"token\",\n \"type\": \"address\",\n \"indexed\": false,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"ref\",\n \"type\": \"bytes32\",\n \"indexed\": false,\n \"internalType\": \"bytes32\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"ProtocolRevoked\",\n \"inputs\": [\n {\n \"name\": \"protocol\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"RebalanceTokenAdded\",\n \"inputs\": [\n {\n \"name\": \"token\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"RebalanceTokenRemoved\",\n \"inputs\": [\n {\n \"name\": \"token\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"SwapExecuted\",\n \"inputs\": [\n {\n \"name\": \"bot\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"fromToken\",\n \"type\": \"address\",\n \"indexed\": false,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"toToken\",\n \"type\": \"address\",\n \"indexed\": false,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"fromAmount\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"toAmount\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"ref\",\n \"type\": \"bytes32\",\n \"indexed\": false,\n \"internalType\": \"bytes32\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"SwapPaymentExecuted\",\n \"inputs\": [\n {\n \"name\": \"bot\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"to\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"fromToken\",\n \"type\": \"address\",\n \"indexed\": false,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"toToken\",\n \"type\": \"address\",\n \"indexed\": false,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"fromAmount\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"toAmount\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"ref\",\n \"type\": \"bytes32\",\n \"indexed\": false,\n \"internalType\": \"bytes32\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"Unpaused\",\n \"inputs\": [\n {\n \"name\": \"account\",\n \"type\": \"address\",\n \"indexed\": false,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"Withdrawn\",\n \"inputs\": [\n {\n \"name\": \"token\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"amount\",\n \"type\": \"uint256\",\n \"indexed\": false,\n \"internalType\": \"uint256\"\n },\n {\n \"name\": \"to\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"error\",\n \"name\": \"AlreadyApprovedProtocol\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"AmountMismatch\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"BotAlreadyExists\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"BotDoesNotExist\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"BotNotActive\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"CalldataHashMismatch\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"ContractNotApproved\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"DeadlineExpired\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"DestinationBlacklisted\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"DestinationNotWhitelisted\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"ECDSAInvalidSignature\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"ECDSAInvalidSignatureLength\",\n \"inputs\": [\n {\n \"name\": \"length\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ]\n },\n {\n \"type\": \"error\",\n \"name\": \"ECDSAInvalidSignatureS\",\n \"inputs\": [\n {\n \"name\": \"s\",\n \"type\": \"bytes32\",\n \"internalType\": \"bytes32\"\n }\n ]\n },\n {\n \"type\": \"error\",\n \"name\": \"EnforcedPause\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"ExceedsOperatorCeiling\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"ExpectedPause\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"InsufficientBalance\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"IntentAlreadyUsed\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"InvalidShortString\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"InvalidSignature\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"MaxPerTxExceeded\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"MaxRebalanceAmountExceeded\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"NativeTransferFailed\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"NotAuthorized\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"NotAuthorizedRelayer\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"OperatorBotLimitReached\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"OperatorCannotBeOwner\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"OracleNotConfigured\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"OracleUnavailable\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"OwnableInvalidOwner\",\n \"inputs\": [\n {\n \"name\": \"owner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ]\n },\n {\n \"type\": \"error\",\n \"name\": \"OwnableUnauthorizedAccount\",\n \"inputs\": [\n {\n \"name\": \"account\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ]\n },\n {\n \"type\": \"error\",\n \"name\": \"OwnerCannotBeBot\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"PaymentToZeroAddress\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"ProtocolCallFailed\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"ProtocolNotApproved\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"RebalanceTokenNotAllowed\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"ReentrancyGuardReentrantCall\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"RouterNotApproved\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"SafeERC20FailedOperation\",\n \"inputs\": [\n {\n \"name\": \"token\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ]\n },\n {\n \"type\": \"error\",\n \"name\": \"SameTokenSwap\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"SelfPayment\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"StringTooLong\",\n \"inputs\": [\n {\n \"name\": \"str\",\n \"type\": \"string\",\n \"internalType\": \"string\"\n }\n ]\n },\n {\n \"type\": \"error\",\n \"name\": \"SwapFailed\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"SwapOutputInsufficient\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"TooManySpendingLimits\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"UnexpectedETH\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"ZeroAddress\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"ZeroAmount\",\n \"inputs\": []\n }\n] as const;\n","export const AxonVaultFactoryAbi = [\n {\n \"type\": \"constructor\",\n \"inputs\": [\n {\n \"name\": \"_axonRegistry\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"factoryOwner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"acceptOwnership\",\n \"inputs\": [],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"allVaults\",\n \"inputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"axonRegistry\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"deployVault\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"vault\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"owner\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"ownerVaultCount\",\n \"inputs\": [\n {\n \"name\": \"owner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"ownerVaults\",\n \"inputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"pendingOwner\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"renounceOwnership\",\n \"inputs\": [],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"transferOwnership\",\n \"inputs\": [\n {\n \"name\": \"newOwner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"vaultCount\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"event\",\n \"name\": \"OwnershipTransferStarted\",\n \"inputs\": [\n {\n \"name\": \"previousOwner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"newOwner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"OwnershipTransferred\",\n \"inputs\": [\n {\n \"name\": \"previousOwner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"newOwner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"VaultDeployed\",\n \"inputs\": [\n {\n \"name\": \"owner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"vault\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"version\",\n \"type\": \"uint16\",\n \"indexed\": false,\n \"internalType\": \"uint16\"\n },\n {\n \"name\": \"axonRegistry\",\n \"type\": \"address\",\n \"indexed\": false,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"error\",\n \"name\": \"OwnableInvalidOwner\",\n \"inputs\": [\n {\n \"name\": \"owner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ]\n },\n {\n \"type\": \"error\",\n \"name\": \"OwnableUnauthorizedAccount\",\n \"inputs\": [\n {\n \"name\": \"account\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ]\n },\n {\n \"type\": \"error\",\n \"name\": \"ZeroAddress\",\n \"inputs\": []\n }\n] as const;\n","import type { Address } from 'viem';\n\n// !! After editing this file, regenerate the Python SDK copy:\n// !! npx tsx scripts/generate-python-tokens.ts\n\n// ============================================================================\n// Token enum — type-safe token symbols for SDK consumers\n// ============================================================================\n\nexport enum Token {\n USDC = 'USDC',\n USDT = 'USDT',\n DAI = 'DAI',\n WETH = 'WETH',\n WBTC = 'WBTC',\n cbBTC = 'cbBTC',\n cbETH = 'cbETH',\n wstETH = 'wstETH',\n rETH = 'rETH',\n weETH = 'weETH',\n LINK = 'LINK',\n UNI = 'UNI',\n AAVE = 'AAVE',\n COMP = 'COMP',\n CRV = 'CRV',\n SNX = 'SNX',\n GMX = 'GMX',\n}\n\n// ============================================================================\n// Known token registry — single source of truth for all packages\n// ============================================================================\n\nexport interface KnownToken {\n symbol: string;\n name: string;\n decimals: number;\n /** Address per chainId. Missing key = not available on that chain. */\n addresses: Partial<Record<number, Address>>;\n}\n\n/**\n * Master token registry keyed by symbol.\n * At a glance you see which chains each token lives on.\n *\n * Chain IDs: 8453 = Base, 84532 = Base Sepolia, 42161 = Arbitrum One, 421614 = Arbitrum Sepolia\n */\nexport const KNOWN_TOKENS = {\n // ── Core stables + wrapped ──────────────────────────────\n USDC: {\n symbol: 'USDC',\n name: 'USD Coin',\n decimals: 6,\n addresses: {\n 8453: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913',\n 84532: '0x036CbD53842c5426634e7929541eC2318f3dCF7e',\n 42161: '0xaf88d065e77c8cC2239327C5EDb3A432268e5831',\n 421614: '0x75faf114eafb1BDbe2F0316DF893fd58CE46AA4d',\n },\n },\n USDT: {\n symbol: 'USDT',\n name: 'Tether USD',\n decimals: 6,\n addresses: {\n 8453: '0xfde4C96c8593536E31F229EA8f37b2ADa2699bb2',\n 84532: '0x323e78f944A9a1FcF3a10efcC5319DBb0bB6e673',\n 42161: '0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9',\n },\n },\n DAI: {\n symbol: 'DAI',\n name: 'Dai Stablecoin',\n decimals: 18,\n addresses: {\n 8453: '0x50c5725949A6F0c72E6C4a641F24049A917DB0Cb',\n 84532: '0x819ffecd4e64f193e959944bcd57eedc7755e17a',\n 42161: '0xDA10009cBd5D07dd0CeCc66161FC93D7c9000da1',\n },\n },\n WETH: {\n symbol: 'WETH',\n name: 'Wrapped Ether',\n decimals: 18,\n addresses: {\n 8453: '0x4200000000000000000000000000000000000006',\n 84532: '0x4200000000000000000000000000000000000006',\n 42161: '0x82aF49447D8a07e3bd95BD0d56f35241523fBab1',\n 421614: '0x980B62Da83eFf3D4576C647993b0c1D7faf17c73',\n },\n },\n WBTC: {\n symbol: 'WBTC',\n name: 'Wrapped BTC',\n decimals: 8,\n addresses: {\n 8453: '0x0555E30da8f98308EdB960aa94C0Db47230d2B9c',\n 42161: '0x2f2a2543B76A4166549F7aaB2e75Bef0aefC5B0f',\n },\n },\n cbBTC: {\n symbol: 'cbBTC',\n name: 'Coinbase Wrapped BTC',\n decimals: 8,\n addresses: {\n 8453: '0xcbB7C0000aB88B473b1f5aFd9ef808440eed33Bf',\n 42161: '0xcbB7C0000aB88B473b1f5aFd9ef808440eed33Bf',\n },\n },\n\n // ── Liquid staking ──────────────────────────────────────\n cbETH: {\n symbol: 'cbETH',\n name: 'Coinbase Staked ETH',\n decimals: 18,\n addresses: {\n 8453: '0x2Ae3F1Ec7F1F5012CFEab0185bfc7aa3cf0DEc22',\n 42161: '0x1DEBd73E752bEaF79865Fd6446b0c970EaE7732f',\n },\n },\n wstETH: {\n symbol: 'wstETH',\n name: 'Lido Wrapped stETH',\n decimals: 18,\n addresses: {\n 8453: '0xc1CBa3fCea344f92D9239c08C0568f6F2F0ee452',\n 42161: '0x5979D7b546E38E414F7E9822514be443A4800529',\n },\n },\n rETH: {\n symbol: 'rETH',\n name: 'Rocket Pool ETH',\n decimals: 18,\n addresses: {\n 8453: '0xB6fe221Fe9EeF5aBa221c348bA20A1Bf5e73624c',\n 42161: '0xEC70Dcb4A1EFa46b8F2D97C310C9c4790ba5ffA8',\n },\n },\n weETH: {\n symbol: 'weETH',\n name: 'EtherFi Wrapped eETH',\n decimals: 18,\n addresses: {\n 8453: '0x04C0599Ae5A44757c0af6F9eC3b93da8976c150A',\n 42161: '0x35751007a407ca6FEFfE80b3cB397736D2cf4dbe',\n },\n },\n\n // ── DeFi blue-chips ─────────────────────────────────────\n LINK: {\n symbol: 'LINK',\n name: 'Chainlink',\n decimals: 18,\n addresses: {\n 8453: '0x88Fb150BDc53A65fe94Dea0c9BA0a6dAf8C6e196',\n 84532: '0xE4aB69C077896252FAFBD49EFD26B5D171A32410',\n 42161: '0xf97f4df75117a78c1A5a0DBb814Af92458539FB4',\n },\n },\n UNI: {\n symbol: 'UNI',\n name: 'Uniswap',\n decimals: 18,\n addresses: {\n 8453: '0xc3De830EA07524a0761646a6a4e4be0e114a3C83',\n 42161: '0xFa7F8980b0f1E64A2062791cc3b0871572f1F7f0',\n },\n },\n AAVE: {\n symbol: 'AAVE',\n name: 'Aave',\n decimals: 18,\n addresses: {\n 8453: '0x63706e401c06ac8513145b7687A14804d17f814b',\n 42161: '0xba5DdD1f9d7F570dc94a51479a000E3BCE967196',\n },\n },\n COMP: {\n symbol: 'COMP',\n name: 'Compound',\n decimals: 18,\n addresses: {\n 8453: '0x9e1028F5F1D5eDE59748FFceE5532509976840E0',\n 42161: '0x354A6dA3fcde098F8389cad84b0182725c6C91dE',\n },\n },\n CRV: {\n symbol: 'CRV',\n name: 'Curve DAO',\n decimals: 18,\n addresses: {\n 8453: '0x8Ee73c484A26e0A5df2Ee2a4960B789967dd0415',\n 42161: '0x11cDb42B0EB46D95f990BeDD4695A6e3fA034978',\n },\n },\n SNX: {\n symbol: 'SNX',\n name: 'Synthetix',\n decimals: 18,\n addresses: {\n 8453: '0x22e6966B799c4D5B13BE962E1D117b56327FDa66',\n },\n },\n\n GMX: {\n symbol: 'GMX',\n name: 'GMX',\n decimals: 18,\n addresses: {\n 42161: '0xfc5A1A6EB076a2C7aD06eD22C90d7E710E35ad0a',\n },\n },\n} as const satisfies Record<string, KnownToken>;\n\nexport type KnownTokenSymbol = keyof typeof KNOWN_TOKENS;\n\n/**\n * Tokens that new vaults should pre-approve as protocols at deploy time.\n * This enables the two-step approval pattern (approve token → call DeFi protocol)\n * without the owner having to manually add common tokens.\n *\n * Used by: AxonRegistry (on-chain default list), deploy scripts, dashboard.\n */\nexport const DEFAULT_APPROVED_TOKENS: KnownTokenSymbol[] = [\n 'USDC', 'USDT', 'DAI', 'WETH', 'WBTC', 'cbBTC', 'wstETH', 'weETH', 'cbETH', 'rETH',\n];\n\n/** Get default approved token addresses for a specific chain. */\nexport function getDefaultApprovedTokens(chainId: number): Address[] {\n const addresses: Address[] = [];\n for (const symbol of DEFAULT_APPROVED_TOKENS) {\n const entry = KNOWN_TOKENS[symbol];\n const addr = (entry.addresses as Record<number, Address | undefined>)[chainId];\n if (addr) addresses.push(addr);\n }\n return addresses;\n}\n\n// Pre-build reverse lookup map: lowercase address → symbol\nconst addressToSymbol = new Map<string, string>();\nfor (const token of Object.values(KNOWN_TOKENS)) {\n for (const addr of Object.values(token.addresses)) {\n addressToSymbol.set((addr as string).toLowerCase(), token.symbol);\n }\n}\n\n/** All known tokens available on a specific chain. */\nexport function getKnownTokensForChain(chainId: number): (KnownToken & { address: Address })[] {\n const result: (KnownToken & { address: Address })[] = [];\n for (const token of Object.values(KNOWN_TOKENS)) {\n const addr = (token.addresses as Record<number, Address | undefined>)[chainId];\n if (addr) {\n result.push({ ...token, address: addr });\n }\n }\n return result;\n}\n\n/** Reverse-lookup: address → symbol (case-insensitive). Returns null if unknown. */\nexport function getTokenSymbolByAddress(address: string): string | null {\n return addressToSymbol.get(address.toLowerCase()) ?? null;\n}\n\n/**\n * Resolve a Token enum symbol to its on-chain address for a given chain.\n * If an Address (0x...) is passed, it is returned as-is.\n *\n * @throws if the symbol has no address on the given chain.\n */\nexport function resolveToken(token: Address | Token | KnownTokenSymbol, chainId: number): Address {\n // Already an address — pass through (with zero-address guard)\n if (typeof token === 'string' && token.startsWith('0x')) {\n if (token === '0x0000000000000000000000000000000000000000') {\n throw new Error('Token address cannot be the zero address');\n }\n return token as Address;\n }\n\n const entry = KNOWN_TOKENS[token as keyof typeof KNOWN_TOKENS];\n if (!entry) {\n throw new Error(`Unknown token symbol: ${token}`);\n }\n\n const addr = (entry.addresses as Record<number, Address | undefined>)[chainId];\n if (!addr) {\n throw new Error(`Token ${token} is not available on chain ${chainId}`);\n }\n\n return addr;\n}\n","import { parseUnits } from 'viem';\nimport type { Address } from 'viem';\nimport { KNOWN_TOKENS, getTokenSymbolByAddress, type KnownTokenSymbol } from './tokens.js';\nimport type { Token } from './tokens.js';\n\n// ============================================================================\n// Human-friendly amount conversion\n// ============================================================================\n\n/**\n * Look up decimals for a token by symbol, Token enum, or address.\n *\n * @param token - A KnownTokenSymbol ('USDC'), Token enum (Token.USDC), or address ('0x...')\n * @param chainId - Optional chain ID (unused for decimal lookup, but reserved for future use)\n * @returns The number of decimals for the token\n * @throws If the token is an unknown address with no entry in KNOWN_TOKENS\n */\nexport function resolveTokenDecimals(token: Address | Token | KnownTokenSymbol, chainId?: number): number {\n // If it looks like an address, reverse-lookup the symbol first\n if (typeof token === 'string' && token.startsWith('0x')) {\n const symbol = getTokenSymbolByAddress(token);\n if (!symbol) {\n throw new Error(\n `Unknown token address ${token} — cannot determine decimals. Use a bigint amount instead, or pass a known token symbol.`,\n );\n }\n const entry = KNOWN_TOKENS[symbol as KnownTokenSymbol];\n return entry.decimals;\n }\n\n // Symbol or Token enum\n const entry = KNOWN_TOKENS[token as KnownTokenSymbol];\n if (!entry) {\n throw new Error(\n `Unknown token symbol \"${token}\" — cannot determine decimals. Use a bigint amount instead, or use a known symbol (${Object.keys(KNOWN_TOKENS).join(', ')}).`,\n );\n }\n return entry.decimals;\n}\n\n/**\n * Convert a human-friendly amount to raw base units (bigint).\n *\n * - **bigint** → passed through as-is (already in base units)\n * - **number** → converted to string, then parsed via `parseUnits(str, decimals)`\n * - **string** → parsed directly via `parseUnits(str, decimals)`\n *\n * @param amount - The amount as bigint (raw), number (human), or string (human)\n * @param token - Token identifier used to look up decimals (symbol, enum, or address)\n * @param chainId - Optional chain ID (passed to resolveTokenDecimals)\n * @returns The amount in token base units as bigint\n *\n * @example\n * ```ts\n * parseAmount(5_000_000n, 'USDC') // 5000000n (passthrough)\n * parseAmount(5.2, 'USDC') // 5200000n\n * parseAmount('5.2', 'USDC') // 5200000n\n * parseAmount(0.001, 'WETH') // 1000000000000000n\n * ```\n *\n * @throws If the amount has more decimal places than the token supports\n * @throws If the token is unknown and amount is not bigint\n */\nexport function parseAmount(\n amount: bigint | number | string,\n token: Address | Token | KnownTokenSymbol,\n chainId?: number,\n): bigint {\n // bigint = raw base units, pass through\n if (typeof amount === 'bigint') {\n return amount;\n }\n\n const decimals = resolveTokenDecimals(token, chainId);\n\n // Convert number to string first\n const str = typeof amount === 'number' ? amount.toString() : amount;\n\n // Validate precision: count decimal places in the string\n const dotIndex = str.indexOf('.');\n if (dotIndex !== -1) {\n const decimalPlaces = str.length - dotIndex - 1;\n if (decimalPlaces > decimals) {\n throw new Error(\n `Amount \"${str}\" has ${decimalPlaces} decimal places, but ${typeof token === 'string' && token.startsWith('0x') ? 'this token' : token} only supports ${decimals}. Truncate or round your amount.`,\n );\n }\n }\n\n return parseUnits(str, decimals);\n}\n","import { createPublicClient, createWalletClient, http } from 'viem';\nimport { privateKeyToAccount } from 'viem/accounts';\nimport { base, baseSepolia, arbitrum, arbitrumSepolia } from 'viem/chains';\nimport type { PublicClient, WalletClient, Address, Hex, Chain } from 'viem';\nimport { AxonVaultAbi } from './abis/AxonVault.js';\nimport { AxonVaultFactoryAbi } from './abis/AxonVaultFactory.js';\nimport { erc20Abi } from 'viem';\nimport { NATIVE_ETH } from './constants.js';\nimport { parseAmount } from './amounts.js';\nimport { resolveToken, type KnownTokenSymbol } from './tokens.js';\nimport type { BotConfig, BotConfigParams, BotConfigInput, OperatorCeilings, VaultInfo, DestinationCheckResult } from './types.js';\n\n// ============================================================================\n// Chain helpers\n// ============================================================================\n\n/** Returns the viem Chain object for a supported Axon chain ID. */\nexport function getChain(chainId: number): Chain {\n switch (chainId) {\n case 8453:\n return base;\n case 84532:\n return baseSepolia;\n case 42161:\n return arbitrum;\n case 421614:\n return arbitrumSepolia;\n default:\n throw new Error(\n `Unsupported chainId: ${chainId}. Supported: 8453 (Base), 84532 (Base Sepolia), 42161 (Arbitrum), 421614 (Arbitrum Sepolia)`,\n );\n }\n}\n\n/** Create a viem PublicClient for the given chain and RPC URL. */\nexport function createAxonPublicClient(chainId: number, rpcUrl: string): PublicClient {\n return createPublicClient({\n chain: getChain(chainId),\n transport: http(rpcUrl),\n });\n}\n\n/** Create a viem WalletClient from a raw private key (signing-only, no RPC needed). */\nexport function createAxonWalletClient(privateKey: Hex, chainId: number): WalletClient {\n const account = privateKeyToAccount(privateKey);\n return createWalletClient({\n account,\n chain: getChain(chainId),\n transport: http(), // signing is local — transport is unused but required by viem\n });\n}\n\n// ============================================================================\n// BotConfigInput → BotConfigParams conversion\n// ============================================================================\n\nconst USDC_DECIMALS = 6n;\nconst USDC_UNIT = 10n ** USDC_DECIMALS; // 1_000_000n\n\n/** Convert human-friendly BotConfigInput (dollar amounts) to on-chain BotConfigParams (6-decimal bigints). */\nexport function toBotConfigParams(input: BotConfigInput): BotConfigParams {\n return {\n maxPerTxAmount: BigInt(Math.round(input.maxPerTxAmount * Number(USDC_UNIT))),\n maxRebalanceAmount: BigInt(Math.round(input.maxRebalanceAmount * Number(USDC_UNIT))),\n spendingLimits: input.spendingLimits.map((sl) => ({\n amount: BigInt(Math.round(sl.amount * Number(USDC_UNIT))),\n maxCount: BigInt(sl.maxCount),\n windowSeconds: BigInt(sl.windowSeconds),\n })),\n aiTriggerThreshold: BigInt(Math.round(input.aiTriggerThreshold * Number(USDC_UNIT))),\n requireAiVerification: input.requireAiVerification,\n };\n}\n\n// ============================================================================\n// Factory address resolution\n// ============================================================================\n\nconst DEFAULT_RELAYER_URL = 'https://relay.axonfi.xyz';\n\n/** Fetch the factory address for a chain from the relayer's /v1/chains endpoint. */\nasync function getFactoryAddress(chainId: number, relayerUrl?: string): Promise<Address> {\n const base = relayerUrl ?? DEFAULT_RELAYER_URL;\n const resp = await fetch(`${base}/v1/chains`);\n if (!resp.ok) throw new Error(`Failed to fetch chain config from relayer [${resp.status}]`);\n const data = await resp.json();\n const chain = data.chains?.find((c: { chainId: number }) => c.chainId === chainId);\n if (!chain?.factoryAddress) {\n throw new Error(`No factory address available for chainId ${chainId}. Check the relayer's chain configuration.`);\n }\n return chain.factoryAddress as Address;\n}\n\n// ============================================================================\n// Read-only vault helpers\n// ============================================================================\n\n/**\n * Returns the full BotConfig for a bot address from the vault.\n * If the bot has never been added, isActive will be false and all\n * numeric fields will be 0n.\n */\nexport async function getBotConfig(\n publicClient: PublicClient,\n vaultAddress: Address,\n botAddress: Address,\n): Promise<BotConfig> {\n const result = await publicClient.readContract({\n address: vaultAddress,\n abi: AxonVaultAbi,\n functionName: 'getBotConfig',\n args: [botAddress],\n });\n\n return {\n isActive: result.isActive,\n registeredAt: result.registeredAt,\n maxPerTxAmount: result.maxPerTxAmount,\n maxRebalanceAmount: result.maxRebalanceAmount,\n spendingLimits: result.spendingLimits.map((sl) => ({\n amount: sl.amount,\n maxCount: sl.maxCount,\n windowSeconds: sl.windowSeconds,\n })),\n aiTriggerThreshold: result.aiTriggerThreshold,\n requireAiVerification: result.requireAiVerification,\n };\n}\n\n/** Returns whether a bot address is currently active in the vault. */\nexport async function isBotActive(\n publicClient: PublicClient,\n vaultAddress: Address,\n botAddress: Address,\n): Promise<boolean> {\n return publicClient.readContract({\n address: vaultAddress,\n abi: AxonVaultAbi,\n functionName: 'isBotActive',\n args: [botAddress],\n });\n}\n\n/** Returns the operator ceilings set by the vault owner. */\nexport async function getOperatorCeilings(\n publicClient: PublicClient,\n vaultAddress: Address,\n): Promise<OperatorCeilings> {\n const result = await publicClient.readContract({\n address: vaultAddress,\n abi: AxonVaultAbi,\n functionName: 'operatorCeilings',\n });\n\n // viem returns multiple named outputs as a tuple; destructure by position\n const [maxPerTxAmount, maxBotDailyLimit, maxOperatorBots, vaultDailyAggregate, minAiTriggerFloor] = result as [\n bigint,\n bigint,\n bigint,\n bigint,\n bigint,\n ];\n\n return {\n maxPerTxAmount,\n maxBotDailyLimit,\n maxOperatorBots,\n vaultDailyAggregate,\n minAiTriggerFloor,\n };\n}\n\n/**\n * Returns the maximum USDC an operator-compromised wallet could drain per day.\n * Computed on-chain as: min(maxOperatorBots × maxBotDailyLimit, vaultDailyAggregate).\n * Returns 0n if operator has no bot-add permission.\n */\nexport async function operatorMaxDrainPerDay(publicClient: PublicClient, vaultAddress: Address): Promise<bigint> {\n return publicClient.readContract({\n address: vaultAddress,\n abi: AxonVaultAbi,\n functionName: 'operatorMaxDrainPerDay',\n });\n}\n\n/** Returns whether the vault is currently paused. */\nexport async function isVaultPaused(publicClient: PublicClient, vaultAddress: Address): Promise<boolean> {\n return publicClient.readContract({\n address: vaultAddress,\n abi: AxonVaultAbi,\n functionName: 'paused',\n });\n}\n\n/** Returns the EIP-712 domain separator for this vault (for off-chain verification). */\nexport async function getDomainSeparator(publicClient: PublicClient, vaultAddress: Address): Promise<Hex> {\n return publicClient.readContract({\n address: vaultAddress,\n abi: AxonVaultAbi,\n functionName: 'DOMAIN_SEPARATOR',\n });\n}\n\n/** Returns the vault contract version number. */\nexport async function getVaultVersion(publicClient: PublicClient, vaultAddress: Address): Promise<number> {\n const version = await publicClient.readContract({\n address: vaultAddress,\n abi: AxonVaultAbi,\n functionName: 'VERSION',\n });\n return Number(version);\n}\n\n/** Returns the vault owner address. */\nexport async function getVaultOwner(publicClient: PublicClient, vaultAddress: Address): Promise<Address> {\n return publicClient.readContract({\n address: vaultAddress,\n abi: AxonVaultAbi,\n functionName: 'owner',\n });\n}\n\n/** Returns the vault operator address (address(0) if no operator set). */\nexport async function getVaultOperator(publicClient: PublicClient, vaultAddress: Address): Promise<Address> {\n return publicClient.readContract({\n address: vaultAddress,\n abi: AxonVaultAbi,\n functionName: 'operator',\n });\n}\n\n/**\n * Check whether a destination address is allowed for a given bot.\n *\n * Logic mirrors the on-chain enforcement order:\n * 1. If destination is on the global blacklist → blocked\n * 2. If global whitelist is non-empty → destination must be on it\n * 3. If bot-specific whitelist is non-empty → destination must be on it\n * 4. Otherwise → allowed\n */\nexport async function isDestinationAllowed(\n publicClient: PublicClient,\n vaultAddress: Address,\n botAddress: Address,\n destination: Address,\n): Promise<DestinationCheckResult> {\n // Step 1: Check global blacklist\n const isBlacklisted = await publicClient.readContract({\n address: vaultAddress,\n abi: AxonVaultAbi,\n functionName: 'globalDestinationBlacklist',\n args: [destination],\n });\n if (isBlacklisted) {\n return { allowed: false, reason: 'Destination is on the global blacklist' };\n }\n\n // Step 2: Check global whitelist (if non-empty, destination must be on it)\n const globalCount = await publicClient.readContract({\n address: vaultAddress,\n abi: AxonVaultAbi,\n functionName: 'globalDestinationCount',\n });\n if (globalCount > 0n) {\n const isGlobalWhitelisted = await publicClient.readContract({\n address: vaultAddress,\n abi: AxonVaultAbi,\n functionName: 'globalDestinationWhitelist',\n args: [destination],\n });\n if (!isGlobalWhitelisted) {\n return { allowed: false, reason: 'Destination is not on the global whitelist' };\n }\n }\n\n // Step 3: Check bot-specific whitelist (if non-empty, destination must be on it)\n const botCount = await publicClient.readContract({\n address: vaultAddress,\n abi: AxonVaultAbi,\n functionName: 'botDestinationCount',\n args: [botAddress],\n });\n if (botCount > 0n) {\n const isBotWhitelisted = await publicClient.readContract({\n address: vaultAddress,\n abi: AxonVaultAbi,\n functionName: 'botDestinationWhitelist',\n args: [botAddress, destination],\n });\n if (!isBotWhitelisted) {\n return { allowed: false, reason: 'Destination is not on the bot whitelist' };\n }\n }\n\n return { allowed: true };\n}\n\n// ============================================================================\n// Rebalance token whitelist (on-chain reads)\n// ============================================================================\n\n/** Returns the number of tokens in the vault's on-chain rebalance whitelist. 0 = no on-chain whitelist. */\nexport async function getRebalanceTokenCount(publicClient: PublicClient, vaultAddress: Address): Promise<number> {\n const count = await publicClient.readContract({\n address: vaultAddress,\n abi: AxonVaultAbi,\n functionName: 'rebalanceTokenCount',\n });\n return Number(count);\n}\n\n/** Returns whether a token is in the vault's on-chain rebalance whitelist. */\nexport async function isRebalanceTokenWhitelisted(\n publicClient: PublicClient,\n vaultAddress: Address,\n token: Address,\n): Promise<boolean> {\n return publicClient.readContract({\n address: vaultAddress,\n abi: AxonVaultAbi,\n functionName: 'rebalanceTokenWhitelist',\n args: [token],\n });\n}\n\n// ============================================================================\n// Factory — deploy a new vault\n// ============================================================================\n\n/**\n * Deploy a new AxonVault via the factory.\n *\n * The vault is owned by the walletClient's account. Permissionless — any\n * address can deploy, no Axon approval required.\n *\n * The factory address is fetched automatically from the Axon relayer.\n *\n * @param walletClient Wallet that will own the deployed vault.\n * @param publicClient Public client for the vault's chain.\n * @param relayerUrl Override relayer URL (defaults to https://relay.axonfi.xyz).\n * @returns Address of the newly deployed vault.\n */\nexport async function deployVault(\n walletClient: WalletClient,\n publicClient: PublicClient,\n relayerUrl?: string,\n): Promise<Address> {\n if (!walletClient.account) {\n throw new Error('walletClient has no account attached');\n }\n\n const chainId = walletClient.chain?.id;\n if (!chainId) throw new Error('walletClient has no chain configured');\n const factoryAddress = await getFactoryAddress(chainId, relayerUrl);\n\n const hash = await walletClient.writeContract({\n address: factoryAddress,\n abi: AxonVaultFactoryAbi,\n functionName: 'deployVault',\n args: [],\n account: walletClient.account,\n chain: walletClient.chain ?? null,\n });\n\n const receipt = await publicClient.waitForTransactionReceipt({ hash });\n\n // Extract vault address from the VaultDeployed event\n for (const log of receipt.logs) {\n try {\n // The second indexed topic is the vault address (owner is first indexed)\n if (log.topics.length >= 3 && log.topics[2]) {\n const vaultAddress = `0x${log.topics[2].slice(26)}` as Address;\n return vaultAddress;\n }\n } catch {\n // Not a VaultDeployed log, continue\n }\n }\n\n throw new Error('VaultDeployed event not found in transaction receipt');\n}\n\n// ============================================================================\n// Owner write operations (on-chain, require gas)\n// ============================================================================\n\n/**\n * Register a bot on the vault with its initial spending configuration.\n *\n * Must be called by the vault owner (or operator if ceilings allow).\n * This is an on-chain transaction — requires gas on the owner's wallet.\n *\n * @param walletClient Owner wallet (must be vault owner or authorized operator).\n * @param publicClient Public client for the vault's chain.\n * @param vaultAddress Vault to register the bot on.\n * @param botAddress Public address of the bot to register.\n * @param config Bot spending configuration — human-readable USD amounts (e.g. 100 = $100).\n * @returns Transaction hash.\n */\nexport async function addBot(\n walletClient: WalletClient,\n publicClient: PublicClient,\n vaultAddress: Address,\n botAddress: Address,\n config: BotConfigInput,\n): Promise<Hex> {\n if (!walletClient.account) {\n throw new Error('walletClient has no account attached');\n }\n\n const params = toBotConfigParams(config);\n const hash = await walletClient.writeContract({\n address: vaultAddress,\n abi: AxonVaultAbi,\n functionName: 'addBot',\n args: [botAddress, params],\n account: walletClient.account,\n chain: walletClient.chain ?? null,\n });\n\n await publicClient.waitForTransactionReceipt({ hash });\n return hash;\n}\n\n/**\n * Update an existing bot's spending configuration.\n *\n * Must be called by the vault owner (or operator within ceilings).\n * On-chain transaction — requires gas.\n *\n * @param walletClient Owner/operator wallet.\n * @param publicClient Public client for the vault's chain.\n * @param vaultAddress Vault the bot is registered on.\n * @param botAddress Bot to update.\n * @param config New spending configuration — human-readable USD amounts.\n * @returns Transaction hash.\n */\nexport async function updateBotConfig(\n walletClient: WalletClient,\n publicClient: PublicClient,\n vaultAddress: Address,\n botAddress: Address,\n config: BotConfigInput,\n): Promise<Hex> {\n if (!walletClient.account) {\n throw new Error('walletClient has no account attached');\n }\n\n const params = toBotConfigParams(config);\n const hash = await walletClient.writeContract({\n address: vaultAddress,\n abi: AxonVaultAbi,\n functionName: 'updateBotConfig',\n args: [botAddress, params],\n account: walletClient.account,\n chain: walletClient.chain ?? null,\n });\n\n await publicClient.waitForTransactionReceipt({ hash });\n return hash;\n}\n\n/**\n * Remove a bot from the vault whitelist.\n *\n * Must be called by the vault owner (or operator).\n * The bot will immediately lose the ability to sign valid intents.\n * On-chain transaction — requires gas.\n *\n * @param walletClient Owner/operator wallet.\n * @param publicClient Public client for the vault's chain.\n * @param vaultAddress Vault to remove the bot from.\n * @param botAddress Bot to remove.\n * @returns Transaction hash.\n */\nexport async function removeBot(\n walletClient: WalletClient,\n publicClient: PublicClient,\n vaultAddress: Address,\n botAddress: Address,\n): Promise<Hex> {\n if (!walletClient.account) {\n throw new Error('walletClient has no account attached');\n }\n\n const hash = await walletClient.writeContract({\n address: vaultAddress,\n abi: AxonVaultAbi,\n functionName: 'removeBot',\n args: [botAddress],\n account: walletClient.account,\n chain: walletClient.chain ?? null,\n });\n\n await publicClient.waitForTransactionReceipt({ hash });\n return hash;\n}\n\n/**\n * Deposit tokens or native ETH into the vault.\n *\n * Permissionless — anyone can deposit. For ERC-20 tokens, this function\n * handles the approve + deposit in one call. For native ETH, pass\n * `NATIVE_ETH` (or `'ETH'`) as the token.\n *\n * On-chain transaction — requires gas on the depositor's wallet.\n *\n * @param walletClient Wallet sending the deposit (anyone, not just owner).\n * @param publicClient Public client for the vault's chain.\n * @param vaultAddress Vault to deposit into.\n * @param token Token symbol ('USDC', 'WETH'), Token enum, raw address, or NATIVE_ETH / 'ETH' for ETH deposits.\n * @param amount Human-readable amount (e.g. 500 for 500 USDC, 0.1 for 0.1 ETH) or raw bigint in base units.\n * @param ref Optional bytes32 reference linking to an off-chain record. Defaults to 0x0.\n * @returns Transaction hash of the deposit.\n */\nexport async function deposit(\n walletClient: WalletClient,\n publicClient: PublicClient,\n vaultAddress: Address,\n token: Address | string,\n amount: bigint | number | string,\n ref: Hex = '0x0000000000000000000000000000000000000000000000000000000000000000',\n): Promise<Hex> {\n if (!walletClient.account) {\n throw new Error('walletClient has no account attached');\n }\n\n // Resolve token symbol to address (e.g. 'USDC' → 0x833589...)\n const isEthSymbol = token === 'ETH' || token === 'eth';\n let tokenAddress: Address;\n if (isEthSymbol) {\n tokenAddress = NATIVE_ETH as Address;\n } else if (token.startsWith('0x')) {\n tokenAddress = token as Address;\n } else {\n const chainId = walletClient.chain?.id;\n if (!chainId) throw new Error('walletClient has no chain — cannot resolve token symbol');\n tokenAddress = resolveToken(token as KnownTokenSymbol, chainId);\n }\n\n const isEth = tokenAddress.toLowerCase() === NATIVE_ETH.toLowerCase();\n\n // Resolve human-readable amount to base units (e.g. 500 USDC → 500_000_000n)\n let resolvedAmount: bigint;\n if (typeof amount === 'bigint') {\n resolvedAmount = amount;\n } else if (isEth) {\n resolvedAmount = parseAmount(amount, 'WETH'); // ETH has same 18 decimals as WETH\n } else {\n resolvedAmount = parseAmount(amount, token as KnownTokenSymbol);\n }\n\n if (!isEth) {\n // ERC-20: approve the vault to pull tokens, then deposit\n const approveTx = await walletClient.writeContract({\n address: tokenAddress,\n abi: erc20Abi,\n functionName: 'approve',\n args: [vaultAddress, resolvedAmount],\n account: walletClient.account,\n chain: walletClient.chain ?? null,\n });\n await publicClient.waitForTransactionReceipt({ hash: approveTx });\n }\n\n const hash = await walletClient.writeContract({\n address: vaultAddress,\n abi: AxonVaultAbi,\n functionName: 'deposit',\n args: [tokenAddress, resolvedAmount, ref],\n account: walletClient.account,\n chain: walletClient.chain ?? null,\n ...(isEth ? { value: resolvedAmount } : {}),\n });\n\n await publicClient.waitForTransactionReceipt({ hash });\n return hash;\n}\n","// ============================================================================\n// Shared utilities\n// ============================================================================\n\n/**\n * Tiny UUID v4 generator (no external dependency).\n *\n * Uses `crypto.getRandomValues` in browsers and Node ≥19, with a\n * `require('crypto').randomBytes` fallback for older Node versions.\n */\nexport function generateUuid(): string {\n const bytes = new Uint8Array(16);\n if (typeof crypto !== 'undefined' && crypto.getRandomValues) {\n crypto.getRandomValues(bytes);\n } else {\n // Node.js fallback\n const { randomBytes } = require('crypto') as typeof import('crypto');\n const buf = randomBytes(16);\n for (let i = 0; i < 16; i++) bytes[i] = buf[i] ?? 0;\n }\n bytes[6] = (bytes[6]! & 0x0f) | 0x40; // version 4\n bytes[8] = (bytes[8]! & 0x3f) | 0x80; // variant bits\n const hex = Array.from(bytes)\n .map((b) => b.toString(16).padStart(2, '0'))\n .join('');\n return `${hex.slice(0, 8)}-${hex.slice(8, 12)}-${hex.slice(12, 16)}-${hex.slice(16, 20)}-${hex.slice(20)}`;\n}\n","import type { Address, Hex } from 'viem';\nimport { USDC } from './constants.js';\n\n// ============================================================================\n// x402 Protocol Types\n// ============================================================================\n\n/** Resource descriptor from the x402 PAYMENT-REQUIRED header. */\nexport interface X402Resource {\n /** URL of the resource being unlocked. */\n url: string;\n /** Human-readable description of the resource. */\n description?: string;\n /** MIME type of the resource. */\n mimeType?: string;\n}\n\n/** A single payment option from the `accepts` array. */\nexport interface X402PaymentOption {\n /** Recipient address (merchant). */\n payTo: string;\n /** Amount in token base units (string). */\n amount: string;\n /** Token contract address. */\n asset: string;\n /** CAIP-2 network identifier, e.g. \"eip155:8453\". */\n network: string;\n /** Settlement scheme: \"exact\" (EIP-3009) or \"permit2\". */\n scheme?: string;\n /** Additional option-specific fields. */\n extra?: Record<string, unknown>;\n}\n\n/** Parsed x402 PAYMENT-REQUIRED response. */\nexport interface X402PaymentRequired {\n /** x402 protocol version. */\n x402Version: number;\n /** Resource being unlocked. */\n resource: X402Resource;\n /** Accepted payment options. */\n accepts: X402PaymentOption[];\n}\n\n/** Result of handlePaymentRequired — contains everything needed to retry the request. */\nexport interface X402HandleResult {\n /** Base64-encoded JSON for the PAYMENT-SIGNATURE header. */\n paymentSignature: string;\n /** The payment option that was selected and funded. */\n selectedOption: X402PaymentOption;\n /** Axon payment result (txHash, requestId, etc.). */\n fundingResult: { requestId: string; status: string; txHash?: string };\n}\n\n// ============================================================================\n// Parsing & Matching\n// ============================================================================\n\n/**\n * Parse the PAYMENT-REQUIRED header value (base64 JSON).\n *\n * The x402 spec encodes the payment requirements as a base64-encoded JSON\n * string in the response header.\n */\nexport function parsePaymentRequired(headerValue: string): X402PaymentRequired {\n let decoded: string;\n\n // Handle both base64 and plain JSON\n try {\n decoded = atob(headerValue);\n } catch {\n decoded = headerValue;\n }\n\n const parsed = JSON.parse(decoded);\n\n if (!parsed.accepts || !Array.isArray(parsed.accepts) || parsed.accepts.length === 0) {\n throw new Error('x402: no payment options in PAYMENT-REQUIRED header');\n }\n\n if (!parsed.resource) {\n throw new Error('x402: missing resource in PAYMENT-REQUIRED header');\n }\n\n return parsed as X402PaymentRequired;\n}\n\n/**\n * Parse a CAIP-2 network identifier to a numeric chain ID.\n *\n * @example parseChainId(\"eip155:8453\") // → 8453\n * @example parseChainId(\"eip155:84532\") // → 84532\n */\nexport function parseChainId(network: string): number {\n const parts = network.split(':');\n if (parts.length !== 2 || parts[0] !== 'eip155') {\n throw new Error(`x402: unsupported network format \"${network}\" (expected \"eip155:<chainId>\")`);\n }\n const chainId = parseInt(parts[1]!, 10);\n if (isNaN(chainId)) {\n throw new Error(`x402: invalid chain ID in network \"${network}\"`);\n }\n return chainId;\n}\n\n/**\n * Find a payment option matching the bot's chain ID.\n *\n * Prefers USDC options (EIP-3009 path — no gas needed from bot).\n * Falls back to any matching chain option.\n *\n * @returns The best matching payment option, or null if none match.\n */\nexport function findMatchingOption(accepts: X402PaymentOption[], chainId: number): X402PaymentOption | null {\n const matchingOptions: X402PaymentOption[] = [];\n\n for (const option of accepts) {\n try {\n const optionChainId = parseChainId(option.network);\n if (optionChainId === chainId) {\n matchingOptions.push(option);\n }\n } catch {\n // Skip options with unparseable network identifiers\n continue;\n }\n }\n\n if (matchingOptions.length === 0) return null;\n\n // Prefer USDC (EIP-3009 — gasless for bot)\n const usdcAddress = USDC[chainId]?.toLowerCase();\n if (usdcAddress) {\n const usdcOption = matchingOptions.find((opt) => opt.asset.toLowerCase() === usdcAddress);\n if (usdcOption) return usdcOption;\n }\n\n // Fall back to first matching option\n return matchingOptions[0] ?? null;\n}\n\n/**\n * Extract metadata fields from a parsed x402 header for payment enrichment.\n *\n * These fields flow into the Axon payment record, giving vault owners\n * full visibility into what their bots are accessing.\n */\nexport function extractX402Metadata(\n parsed: X402PaymentRequired,\n selectedOption: X402PaymentOption,\n): {\n resourceUrl: string;\n memo: string | null;\n recipientLabel: string | null;\n metadata: Record<string, string>;\n} {\n const metadata: Record<string, string> = {};\n\n if (parsed.x402Version !== undefined) {\n metadata.x402_version = String(parsed.x402Version);\n }\n if (selectedOption.scheme) {\n metadata.x402_scheme = selectedOption.scheme;\n }\n if (parsed.resource.mimeType) {\n metadata.x402_mime_type = parsed.resource.mimeType;\n }\n if (selectedOption.payTo) {\n metadata.x402_merchant = selectedOption.payTo;\n }\n if (parsed.resource.description) {\n metadata.x402_resource_description = parsed.resource.description;\n }\n\n return {\n resourceUrl: parsed.resource.url,\n memo: parsed.resource.description ?? null,\n recipientLabel: selectedOption.payTo\n ? `${selectedOption.payTo.slice(0, 6)}...${selectedOption.payTo.slice(-4)}`\n : null,\n metadata,\n };\n}\n\n// ============================================================================\n// Response Formatting\n// ============================================================================\n\n/**\n * Format a payment signature payload for the PAYMENT-SIGNATURE header.\n *\n * The x402 spec requires the header value to be base64-encoded JSON.\n */\nexport function formatPaymentSignature(payload: Record<string, unknown>): string {\n const json = JSON.stringify(payload);\n return btoa(json);\n}\n","import { type Address, type Hex, encodePacked, keccak256 } from 'viem';\nimport { privateKeyToAccount } from 'viem/accounts';\nimport { USDC } from './constants.js';\n\n// ============================================================================\n// EIP-3009 TransferWithAuthorization — USDC only\n// ============================================================================\n\n/**\n * Per-chain EIP-712 domain parameters for USDC's EIP-3009 implementation.\n * These differ between testnets and mainnets (Circle uses different `name` values).\n *\n * Verified on-chain via `cast call <usdc> \"name()(string)\"` and\n * `cast call <usdc> \"version()(string)\"`.\n */\nexport const USDC_EIP712_DOMAIN: Record<number, { name: string; version: string }> = {\n // Base mainnet\n 8453: { name: 'USD Coin', version: '2' },\n // Base Sepolia\n 84532: { name: 'USDC', version: '2' },\n // Arbitrum One\n 42161: { name: 'USD Coin', version: '2' },\n // Arbitrum Sepolia (same as mainnet convention)\n 421614: { name: 'USDC', version: '2' },\n};\n\n/** EIP-712 types for TransferWithAuthorization (EIP-3009). */\nconst TRANSFER_WITH_AUTHORIZATION_TYPES = {\n TransferWithAuthorization: [\n { name: 'from', type: 'address' },\n { name: 'to', type: 'address' },\n { name: 'value', type: 'uint256' },\n { name: 'validAfter', type: 'uint256' },\n { name: 'validBefore', type: 'uint256' },\n { name: 'nonce', type: 'bytes32' },\n ],\n} as const;\n\n/** Parameters for EIP-3009 TransferWithAuthorization. */\nexport interface TransferAuthorization {\n /** Token holder (sender). */\n from: Address;\n /** Recipient of the transfer. */\n to: Address;\n /** Amount in token base units (USDC: 6 decimals). */\n value: bigint;\n /** Unix timestamp — transfer is invalid before this time. Usually 0. */\n validAfter: bigint;\n /** Unix timestamp — transfer is invalid after this time. */\n validBefore: bigint;\n /** Random bytes32 nonce (must not have been used before for this sender). */\n nonce: Hex;\n}\n\n/**\n * Generate a random bytes32 nonce for EIP-3009.\n * Uses crypto.getRandomValues for cryptographic randomness.\n */\nexport function randomNonce(): Hex {\n const bytes = new Uint8Array(32);\n crypto.getRandomValues(bytes);\n return `0x${Array.from(bytes)\n .map((b) => b.toString(16).padStart(2, '0'))\n .join('')}` as Hex;\n}\n\n/**\n * Sign an EIP-3009 TransferWithAuthorization for USDC.\n *\n * The resulting signature can be submitted to a facilitator contract that calls\n * `USDC.transferWithAuthorization(from, to, value, validAfter, validBefore, nonce, v, r, s)`.\n *\n * @param privateKey - Signer's private key (must match auth.from)\n * @param chainId - Chain ID (determines USDC domain name/version)\n * @param auth - Transfer authorization parameters\n * @returns EIP-712 signature (65 bytes, 0x-prefixed)\n */\nexport async function signTransferWithAuthorization(\n privateKey: Hex,\n chainId: number,\n auth: TransferAuthorization,\n): Promise<Hex> {\n const domainConfig = USDC_EIP712_DOMAIN[chainId];\n if (!domainConfig) {\n throw new Error(`EIP-3009 not configured for chain ${chainId}`);\n }\n\n const usdcAddress = USDC[chainId];\n if (!usdcAddress) {\n throw new Error(`USDC address not known for chain ${chainId}`);\n }\n\n const account = privateKeyToAccount(privateKey);\n\n return account.signTypedData({\n domain: {\n name: domainConfig.name,\n version: domainConfig.version,\n chainId,\n verifyingContract: usdcAddress,\n },\n types: TRANSFER_WITH_AUTHORIZATION_TYPES,\n primaryType: 'TransferWithAuthorization',\n message: {\n from: auth.from,\n to: auth.to,\n value: auth.value,\n validAfter: auth.validAfter,\n validBefore: auth.validBefore,\n nonce: auth.nonce,\n },\n });\n}\n","import type { Address, Hex } from 'viem';\nimport { privateKeyToAccount } from 'viem/accounts';\n\n// ============================================================================\n// Permit2 — Universal token approvals (any ERC-20)\n// ============================================================================\n\n/** Canonical Permit2 contract address (same on all EVM chains). */\nexport const PERMIT2_ADDRESS: Address = '0x000000000022D473030F116dDEE9F6B43aC78BA3';\n\n/** x402 facilitator proxy contract address (same on all supported chains). */\nexport const X402_PROXY_ADDRESS: Address = '0x4020CD856C882D5fb903D99CE35316A085Bb0001';\n\n/**\n * Witness type string for x402's PermitWitnessTransferFrom.\n * Must match what the x402 facilitator contract expects.\n */\nexport const WITNESS_TYPE_STRING =\n 'TransferDetails witness)TokenPermissions(address token,uint256 amount)TransferDetails(address to,uint256 requestedAmount)' as const;\n\n/** EIP-712 types for Permit2 PermitWitnessTransferFrom with x402 witness. */\nconst PERMIT_WITNESS_TRANSFER_FROM_TYPES = {\n PermitWitnessTransferFrom: [\n { name: 'permitted', type: 'TokenPermissions' },\n { name: 'spender', type: 'address' },\n { name: 'nonce', type: 'uint256' },\n { name: 'deadline', type: 'uint256' },\n { name: 'witness', type: 'TransferDetails' },\n ],\n TokenPermissions: [\n { name: 'token', type: 'address' },\n { name: 'amount', type: 'uint256' },\n ],\n TransferDetails: [\n { name: 'to', type: 'address' },\n { name: 'requestedAmount', type: 'uint256' },\n ],\n} as const;\n\n/** Parameters for Permit2 PermitWitnessTransferFrom. */\nexport interface Permit2Authorization {\n /** Token to transfer. */\n token: Address;\n /** Maximum amount the spender can transfer. */\n amount: bigint;\n /** Spender address (the x402 proxy). */\n spender: Address;\n /** Unique nonce (random uint256). */\n nonce: bigint;\n /** Unix timestamp — signature is invalid after this time. */\n deadline: bigint;\n /** Witness: recipient address. */\n witnessTo: Address;\n /** Witness: requested amount. */\n witnessRequestedAmount: bigint;\n}\n\n/**\n * Generate a random uint256 nonce for Permit2.\n * Uses crypto.getRandomValues for cryptographic randomness.\n */\nexport function randomPermit2Nonce(): bigint {\n const bytes = new Uint8Array(32);\n crypto.getRandomValues(bytes);\n let n = 0n;\n for (const b of bytes) {\n n = (n << 8n) | BigInt(b);\n }\n return n;\n}\n\n/**\n * Sign a Permit2 PermitWitnessTransferFrom for x402.\n *\n * The resulting signature is submitted to the x402 facilitator proxy,\n * which calls `Permit2.permitWitnessTransferFrom(...)` to settle the payment.\n *\n * @param privateKey - Signer's private key (token holder)\n * @param chainId - Chain ID\n * @param permit - Permit2 authorization parameters\n * @returns EIP-712 signature (65 bytes, 0x-prefixed)\n */\nexport async function signPermit2WitnessTransfer(\n privateKey: Hex,\n chainId: number,\n permit: Permit2Authorization,\n): Promise<Hex> {\n const account = privateKeyToAccount(privateKey);\n\n return account.signTypedData({\n domain: {\n name: 'Permit2',\n chainId,\n verifyingContract: PERMIT2_ADDRESS,\n },\n types: PERMIT_WITNESS_TRANSFER_FROM_TYPES,\n primaryType: 'PermitWitnessTransferFrom',\n message: {\n permitted: {\n token: permit.token,\n amount: permit.amount,\n },\n spender: permit.spender,\n nonce: permit.nonce,\n deadline: permit.deadline,\n witness: {\n to: permit.witnessTo,\n requestedAmount: permit.witnessRequestedAmount,\n },\n },\n });\n}\n","import type { WalletClient, Address, Hex } from 'viem';\nimport type {\n AxonClientConfig,\n PayInput,\n PaymentIntent,\n PaymentResult,\n ExecuteInput,\n ExecuteIntent,\n SwapInput,\n SwapIntent,\n VaultInfo,\n DestinationCheckResult,\n RebalanceTokensResult,\n TosStatus,\n} from './types.js';\nimport type { X402HandleResult } from './x402.js';\nimport { signPayment, signExecuteIntent, signSwapIntent, encodeRef } from './signer.js';\nimport { createAxonWalletClient } from './vault.js';\nimport { DEFAULT_DEADLINE_SECONDS, RELAYER_API, USDC } from './constants.js';\nimport { resolveToken } from './tokens.js';\nimport { parseAmount } from './amounts.js';\nimport { generateUuid } from './utils.js';\nimport { keccak256 } from 'viem';\nimport { parsePaymentRequired, findMatchingOption, extractX402Metadata, formatPaymentSignature } from './x402.js';\nimport { signTransferWithAuthorization, randomNonce, USDC_EIP712_DOMAIN } from './eip3009.js';\nimport { signPermit2WitnessTransfer, randomPermit2Nonce, PERMIT2_ADDRESS, X402_PROXY_ADDRESS } from './permit2.js';\n\n// ============================================================================\n// AxonClient\n// ============================================================================\n\n/**\n * Main entry point for bots interacting with Axon.\n *\n * Handles EIP-712 signing, relayer communication, and status polling.\n * Bots never submit transactions directly — they sign intents and the relayer\n * handles all on-chain execution.\n *\n * All chain reads (balances, bot status, vault info) go through the relayer\n * API — bots never need an RPC endpoint.\n *\n * @example\n * ```ts\n * import { AxonClient, USDC } from '@axonfi/sdk'\n *\n * const client = new AxonClient({\n * vaultAddress: '0x...',\n * chainId: 84532, // Base Sepolia\n * botPrivateKey: '0x...',\n * })\n *\n * const result = await client.pay({\n * to: '0x...recipient...',\n * token: 'USDC',\n * amount: 5, // 5 USDC — SDK handles decimals\n * memo: 'API call #1234 — weather data',\n * })\n *\n * console.log(result.status, result.txHash)\n * ```\n */\nexport class AxonClient {\n private readonly vaultAddress: Address;\n private readonly chainId: number;\n private readonly relayerUrl: string;\n private readonly walletClient: WalletClient;\n private readonly botPrivateKey: Hex;\n\n constructor(config: AxonClientConfig) {\n this.vaultAddress = config.vaultAddress;\n this.chainId = config.chainId;\n this.relayerUrl = config.relayerUrl ?? 'https://relay.axonfi.xyz';\n\n if (!config.botPrivateKey) {\n throw new Error('botPrivateKey is required in AxonClientConfig');\n }\n this.botPrivateKey = config.botPrivateKey;\n this.walletClient = createAxonWalletClient(config.botPrivateKey, config.chainId);\n }\n\n // ============================================================================\n // Bot address\n // ============================================================================\n\n /** Returns the bot's address derived from the configured private key. */\n get botAddress(): Address {\n const account = this.walletClient.account;\n if (!account) throw new Error('No account on walletClient');\n return account.address;\n }\n\n // ============================================================================\n // pay()\n // ============================================================================\n\n /**\n * Create, sign, and submit a payment intent to the Axon relayer.\n *\n * Three possible outcomes (all included in PaymentResult.status):\n * - `\"approved\"`: fast path — txHash available immediately\n * - `\"pending_review\"`: AI scan or human review in progress — poll for status\n * - `\"rejected\"`: payment was rejected — reason field explains why\n */\n async pay(input: PayInput): Promise<PaymentResult> {\n const intent = this._buildPaymentIntent(input);\n const signature = await signPayment(this.walletClient, this.vaultAddress, this.chainId, intent);\n return this._submitPayment(intent, signature, input);\n }\n\n // ============================================================================\n // execute()\n // ============================================================================\n\n /**\n * Sign and submit a DeFi protocol execution to the Axon relayer.\n *\n * The vault approves `token` to `protocol`, calls it with `callData`,\n * then revokes the approval. Tokens stay in the vault or go to the protocol\n * as specified by the calldata.\n */\n async execute(input: ExecuteInput): Promise<PaymentResult> {\n const intent = this._buildExecuteIntent(input);\n const signature = await signExecuteIntent(this.walletClient, this.vaultAddress, this.chainId, intent);\n return this._submitExecute(intent, signature, input);\n }\n\n // ============================================================================\n // swap()\n // ============================================================================\n\n /**\n * Sign and submit an in-vault token swap to the Axon relayer.\n *\n * Swaps tokens within the vault (no external recipient). Useful for\n * rebalancing vault holdings.\n */\n async swap(input: SwapInput): Promise<PaymentResult> {\n const intent = this._buildSwapIntent(input);\n const signature = await signSwapIntent(this.walletClient, this.vaultAddress, this.chainId, intent);\n return this._submitSwap(intent, signature, input);\n }\n\n // ============================================================================\n // getBalance() — via relayer\n // ============================================================================\n\n /** Read the vault's ERC-20 balance for a given token (via relayer). */\n async getBalance(token: Address): Promise<bigint> {\n const path = RELAYER_API.vaultBalance(this.vaultAddress, token, this.chainId);\n const data = await this._get(path);\n return BigInt(data.balance);\n }\n\n // ============================================================================\n // getBalances() — via relayer\n // ============================================================================\n\n /**\n * Read the vault's ERC-20 balances for multiple tokens in a single call (via relayer).\n * Returns a record mapping token address → balance.\n */\n async getBalances(tokens: Address[]): Promise<Record<Address, bigint>> {\n const path = RELAYER_API.vaultBalances(this.vaultAddress, this.chainId);\n const url = `${this.relayerUrl}${path}?chainId=${this.chainId}&tokens=${tokens.join(',')}`;\n\n const response = await fetch(url, {\n method: 'GET',\n headers: { 'Content-Type': 'application/json' },\n });\n\n if (!response.ok) {\n const body = await response.text();\n throw new Error(`Relayer request failed [${response.status}]: ${body}`);\n }\n\n const data = (await response.json()) as { balances: Record<string, string> };\n const result: Record<Address, bigint> = {};\n for (const [addr, val] of Object.entries(data.balances)) {\n result[addr as Address] = BigInt(val);\n }\n return result;\n }\n\n // ============================================================================\n // isActive() — via relayer\n // ============================================================================\n\n /** Returns whether this bot is registered and active in the vault (via relayer). */\n async isActive(): Promise<boolean> {\n const path = RELAYER_API.botStatus(this.vaultAddress, this.botAddress, this.chainId);\n const data = await this._get(path);\n return data.isActive;\n }\n\n // ============================================================================\n // isPaused() — via relayer\n // ============================================================================\n\n /** Returns whether the vault is currently paused (via relayer). */\n async isPaused(): Promise<boolean> {\n const path = RELAYER_API.vaultInfo(this.vaultAddress, this.chainId);\n const data = await this._get(path);\n return data.paused;\n }\n\n // ============================================================================\n // getVaultInfo() — via relayer\n // ============================================================================\n\n /** Returns high-level vault info (owner, operator, paused, version) via relayer. */\n async getVaultInfo(): Promise<VaultInfo> {\n const path = RELAYER_API.vaultInfo(this.vaultAddress, this.chainId);\n return this._get(path) as Promise<VaultInfo>;\n }\n\n // ============================================================================\n // canPayTo() — via relayer\n // ============================================================================\n\n /**\n * Check whether this bot can pay to a given destination address (via relayer).\n * Checks blacklist → global whitelist → bot whitelist, matching on-chain logic.\n */\n async canPayTo(destination: Address): Promise<DestinationCheckResult> {\n const path = RELAYER_API.destinationCheck(this.vaultAddress, this.botAddress, destination, this.chainId);\n return this._get(path) as Promise<DestinationCheckResult>;\n }\n\n // ============================================================================\n // isContractApproved() — via relayer\n // ============================================================================\n\n /** Returns whether a contract address (protocol or token) is approved for executeProtocol() calls (via relayer). */\n async isContractApproved(protocol: Address): Promise<boolean> {\n const path = RELAYER_API.protocolCheck(this.vaultAddress, protocol, this.chainId);\n const data = await this._get(path);\n return data.approved;\n }\n\n // ============================================================================\n // getRebalanceTokens() — via relayer\n // ============================================================================\n\n /**\n * Returns the effective rebalance token whitelist for this vault.\n *\n * If the owner set tokens on-chain, those override entirely.\n * If no on-chain whitelist, returns relayer defaults (USDC, WETH, USDT).\n * Use this before calling swap() to check which output tokens are allowed.\n */\n async getRebalanceTokens(): Promise<RebalanceTokensResult> {\n const path = RELAYER_API.rebalanceTokens(this.vaultAddress, this.chainId);\n return this._get(path) as Promise<RebalanceTokensResult>;\n }\n\n // ============================================================================\n // isRebalanceTokenAllowed() — via relayer\n // ============================================================================\n\n /** Check if a specific token is allowed for rebalancing (executeSwap output) on this vault. */\n async isRebalanceTokenAllowed(token: Address): Promise<{ allowed: boolean; source: 'default' | 'on_chain' }> {\n const path = RELAYER_API.rebalanceTokenCheck(this.vaultAddress, token, this.chainId);\n return this._get(path) as Promise<{ allowed: boolean; source: 'default' | 'on_chain' }>;\n }\n\n // ============================================================================\n // TOS (Terms of Service)\n // ============================================================================\n\n /** Check if a wallet has accepted the current TOS version. */\n async getTosStatus(wallet: string): Promise<TosStatus> {\n return this._get(RELAYER_API.tosStatus(wallet)) as Promise<TosStatus>;\n }\n\n /**\n * Sign and submit TOS acceptance. Uses the owner's wallet (not the bot key).\n *\n * @param signer - Object with a `signMessage` method (e.g. a viem WalletClient\n * or ethers Signer). This should be the vault owner's wallet, not the bot key.\n * @param wallet - The owner's wallet address (must match the signer).\n */\n async acceptTos(\n signer: { signMessage: (args: { message: string }) => Promise<Hex> },\n wallet: string,\n ): Promise<TosStatus> {\n // 1. Get current TOS version from relayer\n const { tosVersion } = await this.getTosStatus(wallet);\n\n // 2. Construct and sign the acceptance message\n const timestamp = Math.floor(Date.now() / 1000);\n const message = `I accept the Axon Terms of Service (${tosVersion}).\\nWallet: ${wallet}\\nTimestamp: ${timestamp}`;\n const signature = await signer.signMessage({ message });\n\n // 3. Submit to relayer\n const url = `${this.relayerUrl}${RELAYER_API.TOS_ACCEPT}`;\n const response = await fetch(url, {\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify({ wallet, signature, tosVersion, timestamp }),\n });\n\n if (!response.ok) {\n const body = await response.text();\n throw new Error(`TOS acceptance failed [${response.status}]: ${body}`);\n }\n\n return response.json() as Promise<TosStatus>;\n }\n\n // ============================================================================\n // poll() / pollExecute() / pollSwap()\n // ============================================================================\n\n /**\n * Poll the relayer for the status of an async payment.\n *\n * Use this when pay() returns `status: \"pending_review\"`. Poll until\n * status is `\"approved\"` or `\"rejected\"`.\n *\n * Recommended polling interval: 5–10 seconds.\n */\n async poll(requestId: string): Promise<PaymentResult> {\n return this._get(RELAYER_API.payment(requestId)) as Promise<PaymentResult>;\n }\n\n /** Poll the relayer for the status of an async protocol execution. */\n async pollExecute(requestId: string): Promise<PaymentResult> {\n return this._get(RELAYER_API.execute(requestId)) as Promise<PaymentResult>;\n }\n\n /** Poll the relayer for the status of an async swap. */\n async pollSwap(requestId: string): Promise<PaymentResult> {\n return this._get(RELAYER_API.swap(requestId)) as Promise<PaymentResult>;\n }\n\n // ============================================================================\n // signPayment() — low-level access\n // ============================================================================\n\n /**\n * Sign a PaymentIntent directly without submitting to the relayer.\n *\n * Use this if you want to build the intent yourself and pass the signature\n * to another system (e.g. a custom relayer integration).\n */\n async signPayment(intent: PaymentIntent): Promise<Hex> {\n return signPayment(this.walletClient, this.vaultAddress, this.chainId, intent);\n }\n\n // ============================================================================\n // x402 — HTTP 402 Payment Required\n // ============================================================================\n\n /**\n * x402 utilities for handling HTTP 402 Payment Required responses.\n *\n * The x402 flow:\n * 1. Bot hits an API that returns HTTP 402 + PAYMENT-REQUIRED header\n * 2. SDK parses the header, finds a matching payment option\n * 3. SDK funds the bot's EOA from the vault (full Axon pipeline applies)\n * 4. Bot signs an EIP-3009 or Permit2 authorization\n * 5. SDK returns a PAYMENT-SIGNATURE header for the bot to retry with\n *\n * @example\n * ```ts\n * const response = await fetch('https://api.example.com/data');\n * if (response.status === 402) {\n * const result = await client.x402.handlePaymentRequired(response.headers);\n * const data = await fetch('https://api.example.com/data', {\n * headers: { 'PAYMENT-SIGNATURE': result.paymentSignature },\n * });\n * }\n * ```\n */\n readonly x402 = {\n /**\n * Fund the bot's EOA from the vault for x402 settlement.\n *\n * This is a regular Axon payment (to = bot's own address) that goes through\n * the full pipeline: policy engine, AI scan, human review if needed.\n *\n * @param amount - Amount in token base units\n * @param token - Token address (defaults to USDC on this chain)\n * @param metadata - Optional metadata for the payment record\n */\n fund: async (\n amount: bigint,\n token?: Address,\n metadata?: { resourceUrl?: string; memo?: string; recipientLabel?: string; metadata?: Record<string, string> },\n ): Promise<PaymentResult> => {\n const tokenAddress = token ?? USDC[this.chainId];\n if (!tokenAddress) {\n throw new Error(`No default USDC address for chain ${this.chainId}`);\n }\n\n return this.pay({\n to: this.botAddress,\n token: tokenAddress,\n amount,\n x402Funding: true,\n ...metadata,\n });\n },\n\n /**\n * Handle a full x402 flow: parse header, fund bot, sign authorization, return header.\n *\n * Supports both EIP-3009 (USDC) and Permit2 (any ERC-20) settlement.\n * The bot's EOA is funded from the vault first (full Axon pipeline applies).\n *\n * @param headers - Response headers from the 402 response (must contain PAYMENT-REQUIRED)\n * @param maxTimeoutMs - Maximum time to wait for pending_review resolution (default: 120s)\n * @param pollIntervalMs - Polling interval for pending_review (default: 5s)\n * @returns Payment signature header value + funding details\n */\n handlePaymentRequired: async (\n headers: Headers | Record<string, string>,\n maxTimeoutMs: number = 120_000,\n pollIntervalMs: number = 5_000,\n ): Promise<X402HandleResult> => {\n // 1. Parse the PAYMENT-REQUIRED header\n const headerValue =\n headers instanceof Headers\n ? (headers.get('payment-required') ?? headers.get('PAYMENT-REQUIRED'))\n : (headers['payment-required'] ?? headers['PAYMENT-REQUIRED']);\n\n if (!headerValue) {\n throw new Error('x402: no PAYMENT-REQUIRED header found');\n }\n\n const parsed = parsePaymentRequired(headerValue);\n\n // 2. Find a matching payment option for this chain\n const option = findMatchingOption(parsed.accepts, this.chainId);\n if (!option) {\n throw new Error(\n `x402: no payment option matches chain ${this.chainId}. ` +\n `Available: ${parsed.accepts.map((a) => a.network).join(', ')}`,\n );\n }\n\n // 3. Extract metadata for the payment record\n const x402Meta = extractX402Metadata(parsed, option);\n\n // 4. Fund the bot's EOA from the vault\n const amount = BigInt(option.amount);\n const tokenAddress = option.asset as Address;\n\n const payInput: PayInput = {\n to: this.botAddress,\n token: tokenAddress,\n amount,\n x402Funding: true,\n resourceUrl: x402Meta.resourceUrl,\n metadata: x402Meta.metadata,\n };\n if (x402Meta.memo) payInput.memo = x402Meta.memo;\n if (x402Meta.recipientLabel) payInput.recipientLabel = x402Meta.recipientLabel;\n\n let fundingResult = await this.pay(payInput);\n\n // 5. If pending_review, poll until resolved or timeout\n if (fundingResult.status === 'pending_review') {\n const deadline = Date.now() + maxTimeoutMs;\n while (fundingResult.status === 'pending_review' && Date.now() < deadline) {\n await new Promise((resolve) => setTimeout(resolve, pollIntervalMs));\n fundingResult = await this.poll(fundingResult.requestId);\n }\n if (fundingResult.status === 'pending_review') {\n throw new Error(`x402: funding timed out after ${maxTimeoutMs}ms (still pending_review)`);\n }\n }\n\n if (fundingResult.status === 'rejected') {\n throw new Error(`x402: funding rejected — ${fundingResult.reason ?? 'unknown reason'}`);\n }\n\n // 6. Sign the appropriate authorization\n const botPrivateKey = this.botPrivateKey;\n\n const payTo = option.payTo as Address;\n const usdcAddress = USDC[this.chainId]?.toLowerCase();\n const isUsdc = tokenAddress.toLowerCase() === usdcAddress;\n\n let signaturePayload: Record<string, unknown>;\n\n if (isUsdc && USDC_EIP712_DOMAIN[this.chainId]) {\n // EIP-3009 path (USDC — gasless)\n const nonce = randomNonce();\n const validAfter = 0n;\n const validBefore = BigInt(Math.floor(Date.now() / 1000) + 300); // 5 min\n\n const sig = await signTransferWithAuthorization(botPrivateKey, this.chainId, {\n from: this.botAddress,\n to: payTo,\n value: amount,\n validAfter,\n validBefore,\n nonce,\n });\n\n signaturePayload = {\n scheme: 'exact',\n signature: sig,\n authorization: {\n from: this.botAddress,\n to: payTo,\n value: amount.toString(),\n validAfter: validAfter.toString(),\n validBefore: validBefore.toString(),\n nonce,\n },\n };\n } else {\n // Permit2 path (any ERC-20)\n const nonce = randomPermit2Nonce();\n const deadline = BigInt(Math.floor(Date.now() / 1000) + 300);\n\n const sig = await signPermit2WitnessTransfer(botPrivateKey, this.chainId, {\n token: tokenAddress,\n amount,\n spender: X402_PROXY_ADDRESS,\n nonce,\n deadline,\n witnessTo: payTo,\n witnessRequestedAmount: amount,\n });\n\n signaturePayload = {\n scheme: 'permit2',\n signature: sig,\n permit: {\n permitted: { token: tokenAddress, amount: amount.toString() },\n spender: X402_PROXY_ADDRESS,\n nonce: nonce.toString(),\n deadline: deadline.toString(),\n },\n witness: {\n to: payTo,\n requestedAmount: amount.toString(),\n },\n };\n }\n\n // 7. Format the PAYMENT-SIGNATURE header\n const paymentSignature = formatPaymentSignature(signaturePayload);\n\n const handleResult: X402HandleResult = {\n paymentSignature,\n selectedOption: option,\n fundingResult: {\n requestId: fundingResult.requestId,\n status: fundingResult.status,\n },\n };\n if (fundingResult.txHash) {\n handleResult.fundingResult.txHash = fundingResult.txHash;\n }\n return handleResult;\n },\n };\n\n // ============================================================================\n // Internal helpers\n // ============================================================================\n\n private async _get(path: string): Promise<any> {\n const url = `${this.relayerUrl}${path}`;\n const response = await fetch(url, {\n method: 'GET',\n headers: { 'Content-Type': 'application/json' },\n });\n\n if (!response.ok) {\n const body = await response.text();\n throw new Error(`Relayer request failed [${response.status}]: ${body}`);\n }\n\n return response.json();\n }\n\n private _defaultDeadline(): bigint {\n return BigInt(Math.floor(Date.now() / 1000) + DEFAULT_DEADLINE_SECONDS);\n }\n\n private _resolveRef(memo?: string, ref?: Hex): Hex {\n if (ref) return ref;\n if (memo) return encodeRef(memo);\n return '0x0000000000000000000000000000000000000000000000000000000000000000';\n }\n\n private _buildPaymentIntent(input: PayInput): PaymentIntent {\n if (input.to === '0x0000000000000000000000000000000000000000') {\n throw new Error('Payment recipient cannot be the zero address');\n }\n return {\n bot: this.botAddress,\n to: input.to,\n token: resolveToken(input.token, this.chainId),\n amount: parseAmount(input.amount, input.token, this.chainId),\n deadline: input.deadline ?? this._defaultDeadline(),\n ref: this._resolveRef(input.memo, input.ref),\n };\n }\n\n private _buildExecuteIntent(input: ExecuteInput): ExecuteIntent {\n return {\n bot: this.botAddress,\n protocol: input.protocol,\n calldataHash: keccak256(input.callData),\n token: resolveToken(input.token, this.chainId),\n amount: parseAmount(input.amount, input.token, this.chainId),\n deadline: input.deadline ?? this._defaultDeadline(),\n ref: this._resolveRef(input.memo, input.ref),\n };\n }\n\n private _buildSwapIntent(input: SwapInput): SwapIntent {\n return {\n bot: this.botAddress,\n toToken: resolveToken(input.toToken, this.chainId),\n minToAmount: parseAmount(input.minToAmount, input.toToken, this.chainId),\n deadline: input.deadline ?? this._defaultDeadline(),\n ref: this._resolveRef(input.memo, input.ref),\n };\n }\n\n private async _submitPayment(intent: PaymentIntent, signature: Hex, input: PayInput): Promise<PaymentResult> {\n const idempotencyKey = input.idempotencyKey ?? generateUuid();\n\n const body = {\n // Routing\n chainId: this.chainId,\n vaultAddress: this.vaultAddress,\n\n // Flat intent fields (matches relayer DTO)\n bot: intent.bot,\n to: intent.to,\n token: intent.token,\n amount: intent.amount.toString(),\n deadline: intent.deadline.toString(),\n ref: intent.ref,\n signature,\n\n // Off-chain metadata\n idempotencyKey,\n ...(input.memo !== undefined && { memo: input.memo }),\n ...(input.resourceUrl !== undefined && { resourceUrl: input.resourceUrl }),\n ...(input.invoiceId !== undefined && { invoiceId: input.invoiceId }),\n ...(input.orderId !== undefined && { orderId: input.orderId }),\n ...(input.recipientLabel !== undefined && { recipientLabel: input.recipientLabel }),\n ...(input.metadata !== undefined && { metadata: input.metadata }),\n ...(input.x402Funding !== undefined && { x402Funding: input.x402Funding }),\n };\n\n return this._post(RELAYER_API.PAYMENTS, idempotencyKey, body);\n }\n\n private async _submitExecute(intent: ExecuteIntent, signature: Hex, input: ExecuteInput): Promise<PaymentResult> {\n const idempotencyKey = input.idempotencyKey ?? generateUuid();\n\n // Resolve optional pre-swap fields\n const fromToken = input.fromToken !== undefined ? resolveToken(input.fromToken, this.chainId) : undefined;\n const maxFromAmount =\n input.maxFromAmount !== undefined\n ? parseAmount(input.maxFromAmount, input.fromToken ?? input.token, this.chainId)\n : undefined;\n\n const body = {\n chainId: this.chainId,\n vaultAddress: this.vaultAddress,\n\n // Flat intent fields\n bot: intent.bot,\n protocol: intent.protocol,\n calldataHash: intent.calldataHash,\n token: intent.token,\n amount: intent.amount.toString(),\n deadline: intent.deadline.toString(),\n ref: intent.ref,\n signature,\n\n // Protocol calldata\n callData: input.callData,\n\n // Optional pre-swap\n ...(fromToken !== undefined && { fromToken }),\n ...(maxFromAmount !== undefined && { maxFromAmount: maxFromAmount.toString() }),\n\n // Off-chain metadata\n idempotencyKey,\n ...(input.memo !== undefined && { memo: input.memo }),\n ...(input.protocolName !== undefined && { protocolName: input.protocolName }),\n ...(input.metadata !== undefined && { metadata: input.metadata }),\n };\n\n return this._post(RELAYER_API.EXECUTE, idempotencyKey, body);\n }\n\n private async _submitSwap(intent: SwapIntent, signature: Hex, input: SwapInput): Promise<PaymentResult> {\n const idempotencyKey = input.idempotencyKey ?? generateUuid();\n\n // Resolve optional source token fields\n const fromToken = input.fromToken !== undefined ? resolveToken(input.fromToken, this.chainId) : undefined;\n const maxFromAmount =\n input.maxFromAmount !== undefined\n ? parseAmount(input.maxFromAmount, input.fromToken ?? input.toToken, this.chainId)\n : undefined;\n\n const body = {\n chainId: this.chainId,\n vaultAddress: this.vaultAddress,\n\n // Flat intent fields\n bot: intent.bot,\n toToken: intent.toToken,\n minToAmount: intent.minToAmount.toString(),\n deadline: intent.deadline.toString(),\n ref: intent.ref,\n signature,\n\n // Optional source token\n ...(fromToken !== undefined && { fromToken }),\n ...(maxFromAmount !== undefined && { maxFromAmount: maxFromAmount.toString() }),\n\n // Off-chain metadata\n idempotencyKey,\n ...(input.memo !== undefined && { memo: input.memo }),\n };\n\n return this._post(RELAYER_API.SWAP, idempotencyKey, body);\n }\n\n private async _post(path: string, idempotencyKey: string, body: Record<string, unknown>): Promise<PaymentResult> {\n const url = `${this.relayerUrl}${path}`;\n\n const response = await fetch(url, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n 'Idempotency-Key': idempotencyKey,\n },\n body: JSON.stringify(body),\n });\n\n if (!response.ok) {\n const responseBody = await response.text();\n throw new Error(`Relayer request failed [${response.status}]: ${responseBody}`);\n }\n\n return response.json() as Promise<PaymentResult>;\n }\n}\n","// ============================================================================\n// V3 Keystore — Encrypt / Decrypt bot private keys\n// ============================================================================\n//\n// Standard Ethereum V3 keystore format (same as MetaMask / Geth).\n// Uses scrypt KDF + AES-128-CTR cipher + keccak256 MAC.\n\nimport { scryptAsync } from '@noble/hashes/scrypt';\nimport { keccak_256 } from '@noble/hashes/sha3';\nimport { ctr } from '@noble/ciphers/aes';\nimport { privateKeyToAccount } from 'viem/accounts';\nimport type { Hex } from 'viem';\nimport { generateUuid } from './utils.js';\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport interface KeystoreV3 {\n version: 3;\n id: string;\n address: string; // lowercase hex, no 0x prefix\n crypto: {\n ciphertext: string;\n cipherparams: { iv: string };\n cipher: 'aes-128-ctr';\n kdf: 'scrypt';\n kdfparams: {\n dklen: number;\n salt: string;\n n: number;\n r: number;\n p: number;\n };\n mac: string;\n };\n}\n\n// ============================================================================\n// Constants\n// ============================================================================\n\nconst SCRYPT_N = 262144; // 2^18\nconst SCRYPT_R = 8;\nconst SCRYPT_P = 1;\nconst SCRYPT_DKLEN = 32;\n\n// ============================================================================\n// Helpers\n// ============================================================================\n\nfunction getRandomBytes(length: number): Uint8Array {\n const bytes = new Uint8Array(length);\n if (typeof crypto !== 'undefined' && crypto.getRandomValues) {\n crypto.getRandomValues(bytes);\n } else {\n const { randomBytes } = require('crypto') as typeof import('crypto');\n const buf = randomBytes(length);\n for (let i = 0; i < length; i++) bytes[i] = buf[i] ?? 0;\n }\n return bytes;\n}\n\nfunction hexToBytes(hex: string): Uint8Array {\n const clean = hex.startsWith('0x') ? hex.slice(2) : hex;\n const bytes = new Uint8Array(clean.length / 2);\n for (let i = 0; i < bytes.length; i++) {\n bytes[i] = parseInt(clean.slice(i * 2, i * 2 + 2), 16);\n }\n return bytes;\n}\n\nfunction bytesToHex(bytes: Uint8Array): string {\n return Array.from(bytes)\n .map((b) => b.toString(16).padStart(2, '0'))\n .join('');\n}\n\n// ============================================================================\n// encryptKeystore\n// ============================================================================\n\n/**\n * Encrypt a raw private key into a V3 keystore JSON object.\n *\n * Uses scrypt KDF (n=262144, r=8, p=1) and AES-128-CTR cipher —\n * the same format as MetaMask and Geth.\n *\n * @param privateKey - Raw private key as 0x-prefixed hex string\n * @param passphrase - Passphrase to encrypt with (min 1 character)\n * @returns V3 keystore object ready to serialize as JSON\n *\n * @example\n * ```ts\n * import { encryptKeystore } from '@axonfi/sdk';\n *\n * const keystore = await encryptKeystore('0xabc...', 'my-strong-passphrase');\n * fs.writeFileSync('bot-keystore.json', JSON.stringify(keystore, null, 2));\n * ```\n */\nexport async function encryptKeystore(privateKey: Hex, passphrase: string): Promise<KeystoreV3> {\n if (!passphrase) throw new Error('Passphrase must not be empty');\n\n const keyBytes = hexToBytes(privateKey);\n const account = privateKeyToAccount(privateKey);\n const address = account.address.slice(2).toLowerCase(); // no 0x prefix\n\n // Random salt and IV\n const salt = getRandomBytes(32);\n const iv = getRandomBytes(16);\n\n // Derive key via scrypt\n const derivedKey = await scryptAsync(new TextEncoder().encode(passphrase), salt, {\n N: SCRYPT_N,\n r: SCRYPT_R,\n p: SCRYPT_P,\n dkLen: SCRYPT_DKLEN,\n });\n\n // Encrypt with AES-128-CTR (first 16 bytes of derived key)\n const encryptionKey = derivedKey.slice(0, 16);\n const cipher = ctr(encryptionKey, iv);\n const ciphertext = cipher.encrypt(keyBytes);\n\n // MAC = keccak256(derivedKey[16:32] ++ ciphertext)\n const macInput = new Uint8Array(16 + ciphertext.length);\n macInput.set(derivedKey.slice(16, 32), 0);\n macInput.set(ciphertext, 16);\n const mac = keccak_256(macInput);\n\n return {\n version: 3,\n id: generateUuid(),\n address,\n crypto: {\n ciphertext: bytesToHex(ciphertext),\n cipherparams: { iv: bytesToHex(iv) },\n cipher: 'aes-128-ctr',\n kdf: 'scrypt',\n kdfparams: {\n dklen: SCRYPT_DKLEN,\n salt: bytesToHex(salt),\n n: SCRYPT_N,\n r: SCRYPT_R,\n p: SCRYPT_P,\n },\n mac: bytesToHex(mac),\n },\n };\n}\n\n// ============================================================================\n// decryptKeystore\n// ============================================================================\n\n/**\n * Decrypt a V3 keystore back to a raw private key.\n *\n * @param keystore - V3 keystore object or JSON string\n * @param passphrase - Passphrase used during encryption\n * @returns Raw private key as 0x-prefixed hex string\n * @throws Error if passphrase is wrong (MAC mismatch) or keystore is invalid\n *\n * @example\n * ```ts\n * import { AxonClient, decryptKeystore } from '@axonfi/sdk';\n *\n * const keystore = JSON.parse(fs.readFileSync('bot-keystore.json', 'utf8'));\n * const privateKey = await decryptKeystore(keystore, process.env.BOT_PASSPHRASE!);\n * const client = new AxonClient({ botPrivateKey: privateKey, ... });\n * ```\n */\nexport async function decryptKeystore(keystore: KeystoreV3 | string, passphrase: string): Promise<Hex> {\n // Parse JSON string if needed\n let ks: KeystoreV3;\n if (typeof keystore === 'string') {\n try {\n ks = JSON.parse(keystore) as KeystoreV3;\n } catch {\n throw new Error('Invalid keystore: could not parse JSON');\n }\n } else {\n ks = keystore;\n }\n\n // Validate structure\n if (ks.version !== 3) throw new Error(`Unsupported keystore version: ${ks.version}`);\n if (!ks.crypto) throw new Error('Invalid keystore: missing crypto field');\n if (ks.crypto.kdf !== 'scrypt') throw new Error(`Unsupported KDF: ${ks.crypto.kdf}`);\n if (ks.crypto.cipher !== 'aes-128-ctr') throw new Error(`Unsupported cipher: ${ks.crypto.cipher}`);\n\n const { kdfparams, ciphertext: ctHex, cipherparams, mac: expectedMacHex } = ks.crypto;\n\n // Derive key via scrypt\n const salt = hexToBytes(kdfparams.salt);\n const derivedKey = await scryptAsync(new TextEncoder().encode(passphrase), salt, {\n N: kdfparams.n,\n r: kdfparams.r,\n p: kdfparams.p,\n dkLen: kdfparams.dklen,\n });\n\n // Verify MAC\n const ciphertextBytes = hexToBytes(ctHex);\n const macInput = new Uint8Array(16 + ciphertextBytes.length);\n macInput.set(derivedKey.slice(16, 32), 0);\n macInput.set(ciphertextBytes, 16);\n const computedMac = bytesToHex(keccak_256(macInput));\n\n if (computedMac !== expectedMacHex) {\n throw new Error('Wrong passphrase: MAC mismatch');\n }\n\n // Decrypt with AES-128-CTR\n const iv = hexToBytes(cipherparams.iv);\n const encryptionKey = derivedKey.slice(0, 16);\n const cipher = ctr(encryptionKey, iv);\n const plaintext = cipher.decrypt(ciphertextBytes);\n\n return `0x${bytesToHex(plaintext)}` as Hex;\n}\n","export const AxonRegistryAbi = [\n {\n \"type\": \"constructor\",\n \"inputs\": [\n {\n \"name\": \"initialOwner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"VERSION\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"uint256\",\n \"internalType\": \"uint256\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"acceptOwnership\",\n \"inputs\": [],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"addRelayer\",\n \"inputs\": [\n {\n \"name\": \"relayer\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"addSwapRouter\",\n \"inputs\": [\n {\n \"name\": \"router\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"approveDefaultToken\",\n \"inputs\": [\n {\n \"name\": \"token\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"isApprovedSwapRouter\",\n \"inputs\": [\n {\n \"name\": \"router\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"isAuthorized\",\n \"inputs\": [\n {\n \"name\": \"relayer\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"isDefaultToken\",\n \"inputs\": [\n {\n \"name\": \"token\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"bool\",\n \"internalType\": \"bool\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"owner\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"pendingOwner\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"removeRelayer\",\n \"inputs\": [\n {\n \"name\": \"relayer\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"removeSwapRouter\",\n \"inputs\": [\n {\n \"name\": \"router\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"renounceOwnership\",\n \"inputs\": [],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"revokeDefaultToken\",\n \"inputs\": [\n {\n \"name\": \"token\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"setOracleConfig\",\n \"inputs\": [\n {\n \"name\": \"uniV3Factory\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"usdc\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n },\n {\n \"name\": \"weth\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"transferOwnership\",\n \"inputs\": [\n {\n \"name\": \"newOwner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"outputs\": [],\n \"stateMutability\": \"nonpayable\"\n },\n {\n \"type\": \"function\",\n \"name\": \"uniswapV3Factory\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"usdcAddress\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"function\",\n \"name\": \"wethAddress\",\n \"inputs\": [],\n \"outputs\": [\n {\n \"name\": \"\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ],\n \"stateMutability\": \"view\"\n },\n {\n \"type\": \"event\",\n \"name\": \"DefaultTokenApproved\",\n \"inputs\": [\n {\n \"name\": \"token\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"DefaultTokenRevoked\",\n \"inputs\": [\n {\n \"name\": \"token\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"OracleConfigUpdated\",\n \"inputs\": [\n {\n \"name\": \"uniswapV3Factory\",\n \"type\": \"address\",\n \"indexed\": false,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"usdc\",\n \"type\": \"address\",\n \"indexed\": false,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"weth\",\n \"type\": \"address\",\n \"indexed\": false,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"OwnershipTransferStarted\",\n \"inputs\": [\n {\n \"name\": \"previousOwner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"newOwner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"OwnershipTransferred\",\n \"inputs\": [\n {\n \"name\": \"previousOwner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n },\n {\n \"name\": \"newOwner\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"RelayerAdded\",\n \"inputs\": [\n {\n \"name\": \"relayer\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"RelayerRemoved\",\n \"inputs\": [\n {\n \"name\": \"relayer\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"SwapRouterAdded\",\n \"inputs\": [\n {\n \"name\": \"router\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"event\",\n \"name\": \"SwapRouterRemoved\",\n \"inputs\": [\n {\n \"name\": \"router\",\n \"type\": \"address\",\n \"indexed\": true,\n \"internalType\": \"address\"\n }\n ],\n \"anonymous\": false\n },\n {\n \"type\": \"error\",\n \"name\": \"AlreadyApproved\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"AlreadyAuthorized\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"NotApproved\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"NotAuthorized\",\n \"inputs\": []\n },\n {\n \"type\": \"error\",\n \"name\": \"OwnableInvalidOwner\",\n \"inputs\": [\n {\n \"name\": \"owner\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ]\n },\n {\n \"type\": \"error\",\n \"name\": \"OwnableUnauthorizedAccount\",\n \"inputs\": [\n {\n \"name\": \"account\",\n \"type\": \"address\",\n \"internalType\": \"address\"\n }\n ]\n },\n {\n \"type\": \"error\",\n \"name\": \"ZeroAddress\",\n \"inputs\": []\n }\n] as const;\n"]}