@vleap/warps-adapter-evm 0.2.0-alpha.26 → 0.2.0-alpha.28

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/chains/arbitrum.ts","../src/WarpEvmDataLoader.ts","../src/providers/UniswapService.ts","../src/tokens/arbitrum.ts","../src/tokens/base.ts","../src/tokens/base-sepolia.ts","../src/tokens/ethereum.ts","../src/tokens/ethereum-sepolia.ts","../src/tokens.ts","../src/WarpEvmExecutor.ts","../src/constants.ts","../src/WarpEvmResults.ts","../src/WarpEvmSerializer.ts","../src/WarpEvmExplorer.ts","../src/chains/common.ts","../src/chains/base.ts","../src/chains/combined.ts","../src/chains/ethereum.ts","../src/chains/somnia.ts"],"sourcesContent":["import { AdapterFactory, WarpChainAsset, WarpChainName } from '@vleap/warps'\nimport { createEvmAdapter } from './common'\n\nexport const NativeTokenArb: WarpChainAsset = {\n chain: WarpChainName.Arbitrum,\n identifier: 'ARB',\n symbol: 'ARB',\n name: 'Arbitrum',\n decimals: 18,\n logoUrl: 'https://vleap.ai/images/tokens/arb.svg',\n}\n\nexport const getArbitrumAdapter: AdapterFactory = createEvmAdapter(WarpChainName.Arbitrum, 'arb', {\n mainnet: {\n name: WarpChainName.Arbitrum,\n displayName: 'Arbitrum',\n chainId: '42161',\n blockTime: 1000,\n addressHrp: '0x',\n defaultApiUrl: 'https://arb1.arbitrum.io/rpc',\n nativeToken: NativeTokenArb,\n },\n testnet: {\n name: WarpChainName.Arbitrum,\n displayName: 'Arbitrum Sepolia',\n chainId: '421614',\n blockTime: 1000,\n addressHrp: '0x',\n defaultApiUrl: 'https://sepolia-rollup.arbitrum.io/rpc',\n nativeToken: NativeTokenArb,\n },\n devnet: {\n name: WarpChainName.Arbitrum,\n displayName: 'Arbitrum Sepolia',\n chainId: '421614',\n blockTime: 1000,\n addressHrp: '0x',\n defaultApiUrl: 'https://sepolia-rollup.arbitrum.io/rpc',\n nativeToken: NativeTokenArb,\n },\n})\n","import {\n AdapterWarpDataLoader,\n CacheTtl,\n getProviderUrl,\n WarpCache,\n WarpCacheKey,\n WarpChainAccount,\n WarpChainAction,\n WarpChainAsset,\n WarpChainInfo,\n WarpClientConfig,\n WarpDataLoaderOptions,\n} from '@vleap/warps'\nimport { ethers } from 'ethers'\nimport { UniswapService } from './providers'\nimport { findKnownTokenById, getKnownTokensForChain } from './tokens'\n\ninterface TokenBalance {\n tokenAddress: string\n balance: bigint\n name: string\n symbol: string\n decimals: number\n logoUrl: string\n}\n\nconst ERC20_ABI = [\n 'function balanceOf(address owner) view returns (uint256)',\n 'function decimals() view returns (uint8)',\n 'function name() view returns (string)',\n 'function symbol() view returns (string)',\n 'function totalSupply() view returns (uint256)',\n]\n\nexport class WarpEvmDataLoader implements AdapterWarpDataLoader {\n private provider: ethers.JsonRpcProvider\n private cache: WarpCache\n private uniswapService: UniswapService\n\n constructor(\n private readonly config: WarpClientConfig,\n private readonly chain: WarpChainInfo\n ) {\n const apiUrl = getProviderUrl(this.config, this.chain.name, this.config.env, this.chain.defaultApiUrl)\n const network = new ethers.Network(this.chain.name, parseInt(this.chain.chainId))\n this.provider = new ethers.JsonRpcProvider(apiUrl, network)\n this.cache = new WarpCache(config.cache?.type)\n this.uniswapService = new UniswapService(this.cache, parseInt(this.chain.chainId))\n }\n\n async getAccount(address: string): Promise<WarpChainAccount> {\n const balance = await this.provider.getBalance(address)\n\n return {\n chain: this.chain.name,\n address,\n balance,\n }\n }\n\n async getAccountAssets(address: string): Promise<WarpChainAsset[]> {\n const account = await this.getAccount(address)\n const tokenBalances = await this.getERC20TokenBalances(address)\n\n let assets: WarpChainAsset[] = account.balance > 0 ? [{ ...this.chain.nativeToken, amount: account.balance }] : []\n\n for (const tokenBalance of tokenBalances) {\n if (tokenBalance.balance > 0n) {\n assets.push({\n chain: this.chain.name,\n identifier: tokenBalance.tokenAddress,\n name: tokenBalance.name,\n symbol: tokenBalance.symbol,\n amount: tokenBalance.balance,\n decimals: tokenBalance.decimals,\n logoUrl: tokenBalance.logoUrl || '',\n })\n }\n }\n\n return assets\n }\n\n async getAsset(identifier: string): Promise<WarpChainAsset | null> {\n try {\n if (identifier === this.chain.nativeToken.identifier) {\n return this.chain.nativeToken\n }\n\n const cacheKey = WarpCacheKey.Asset(this.config.env, this.chain.name, identifier)\n const cachedAsset = this.cache.get<WarpChainAsset>(cacheKey)\n if (cachedAsset) {\n return cachedAsset\n }\n\n const knownToken = findKnownTokenById(this.chain.name, this.config.env, identifier)\n\n if (knownToken) {\n return {\n chain: this.chain.name,\n identifier,\n name: knownToken.name,\n symbol: knownToken.symbol,\n amount: 0n,\n decimals: knownToken.decimals,\n logoUrl: knownToken.logoUrl,\n }\n }\n\n const metadata = await this.getTokenMetadata(identifier)\n\n const asset: WarpChainAsset = {\n chain: this.chain.name,\n identifier,\n name: metadata.name,\n symbol: metadata.symbol,\n amount: 0n,\n decimals: metadata.decimals,\n logoUrl: metadata.logoUrl || '',\n }\n\n this.cache.set(cacheKey, asset, CacheTtl.OneHour)\n\n return asset\n } catch (error) {\n return null\n }\n }\n\n async getAction(identifier: string, awaitCompleted = false): Promise<WarpChainAction | null> {\n try {\n const tx = await this.provider.getTransaction(identifier)\n if (!tx) return null\n\n const receipt = await this.provider.getTransactionReceipt(identifier)\n const block = await this.provider.getBlock(tx.blockNumber || 'latest')\n\n return {\n chain: this.chain.name,\n id: tx.hash || identifier,\n receiver: tx.to || '',\n sender: tx.from,\n value: tx.value,\n function: tx.data && tx.data !== '0x' ? 'contract_call' : '',\n status: receipt?.status === 1 ? 'success' : receipt?.status === 0 ? 'failed' : 'pending',\n createdAt: block?.timestamp ? new Date(Number(block.timestamp) * 1000).toISOString() : new Date().toISOString(),\n error: receipt?.status === 0 ? 'Transaction failed' : null,\n tx: {\n hash: tx.hash || '',\n from: tx.from,\n to: tx.to || '',\n value: tx.value.toString(),\n data: tx.data || '0x',\n gasLimit: tx.gasLimit?.toString() || '0',\n gasPrice: tx.gasPrice?.toString() || '0',\n blockNumber: tx.blockNumber || 0,\n blockHash: tx.blockHash || '',\n transactionIndex: tx.index || 0,\n } as any,\n }\n } catch (error) {\n return null\n }\n }\n\n async getAccountActions(address: string, options?: WarpDataLoaderOptions): Promise<WarpChainAction[]> {\n return []\n }\n\n private async getERC20TokenBalances(address: string): Promise<TokenBalance[]> {\n const env = this.config.env === 'mainnet' ? 'mainnet' : 'testnet'\n const tokens = getKnownTokensForChain(this.chain.name, env)\n const balanceReqs = tokens.map((token) => this.getTokenBalance(address, token.identifier).catch(() => 0n))\n const balances = await Promise.all(balanceReqs)\n\n return balances\n .map((balance, index) => ({ balance, token: tokens[index] }))\n .filter(({ balance }) => balance > 0n)\n .map(({ balance, token }) => ({\n tokenAddress: token.identifier,\n balance,\n name: token.name,\n symbol: token.symbol,\n decimals: token.decimals || 18,\n logoUrl: token.logoUrl || '',\n }))\n }\n\n private async getTokenBalance(address: string, tokenAddress: string): Promise<bigint> {\n const contract = new ethers.Contract(tokenAddress, ERC20_ABI, this.provider)\n const balance = await contract.balanceOf(address)\n return balance\n }\n\n private async getTokenMetadata(tokenAddress: string): Promise<{ name: string; symbol: string; decimals: number; logoUrl: string }> {\n // First try to get metadata from Uniswap token list\n const uniswapMetadata = await this.uniswapService.getTokenMetadata(tokenAddress)\n if (uniswapMetadata) {\n return uniswapMetadata\n }\n\n // Fallback to contract data\n const contract = new ethers.Contract(tokenAddress, ERC20_ABI, this.provider)\n const [name, symbol, decimals] = await Promise.all([\n contract.name().catch(() => 'Unknown Token'),\n contract.symbol().catch(() => 'UNKNOWN'),\n contract.decimals().catch(() => 18),\n ])\n\n return {\n name: name || 'Unknown Token',\n symbol: symbol || 'UNKNOWN',\n decimals: decimals || 18,\n logoUrl: '',\n }\n }\n}\n","import { CacheTtl, WarpCache } from '@vleap/warps'\nimport { UniswapToken, UniswapTokenList } from '../types'\n\nexport class UniswapService {\n private static readonly UNISWAP_TOKEN_LIST_URL = 'https://tokens.uniswap.org'\n private cache: WarpCache\n private chainId: number\n\n constructor(cache: WarpCache, chainId: number) {\n this.cache = cache\n this.chainId = chainId\n }\n\n async getTokenList(): Promise<UniswapTokenList> {\n try {\n const response = await fetch(UniswapService.UNISWAP_TOKEN_LIST_URL)\n if (!response.ok) {\n throw new Error(`Failed to fetch Uniswap token list: ${response.status}`)\n }\n\n const tokenList: UniswapTokenList = await response.json()\n return tokenList\n } catch (error) {\n throw new Error(`Failed to fetch Uniswap token list: ${error}`)\n }\n }\n\n async findToken(address: string): Promise<UniswapToken | null> {\n const normalizedAddress = address.toLowerCase()\n const cacheKey = `uniswap:token:${this.chainId}:${normalizedAddress}`\n\n // Check cache first\n const cachedToken = this.cache.get<UniswapToken>(cacheKey)\n if (cachedToken) {\n return cachedToken\n }\n\n try {\n const tokenList = await this.getTokenList()\n const token = tokenList.tokens.find((token: UniswapToken) => token.address.toLowerCase() === normalizedAddress) || null\n\n // Additional safety check: if we found a token, make sure it's for the right chain\n if (token && token.chainId !== this.chainId) {\n return null // Wrong chain, don't return it\n }\n\n // Cache the result (including null results to avoid repeated fetches)\n if (token) {\n this.cache.set(cacheKey, token, CacheTtl.OneHour)\n } else {\n // Cache null results for a shorter time to allow for new tokens\n this.cache.set(cacheKey, null, CacheTtl.OneMinute * 5)\n }\n\n return token\n } catch (error) {\n // If we can't fetch the list, return null (fallback to contract data)\n return null\n }\n }\n\n async getTokenMetadata(address: string): Promise<{\n name: string\n symbol: string\n decimals: number\n logoUrl: string\n } | null> {\n const normalizedAddress = address.toLowerCase()\n const cacheKey = `uniswap:metadata:${this.chainId}:${normalizedAddress}`\n\n // Check cache first\n const cachedMetadata = this.cache.get<{\n name: string\n symbol: string\n decimals: number\n logoUrl: string\n }>(cacheKey)\n if (cachedMetadata !== null) {\n return cachedMetadata\n }\n\n const token = await this.findToken(address)\n if (!token) {\n // Cache null result to avoid repeated lookups\n this.cache.set(cacheKey, null, CacheTtl.OneMinute * 5)\n return null\n }\n\n const metadata = {\n name: token.name,\n symbol: token.symbol,\n decimals: token.decimals,\n logoUrl: token.logoURI,\n }\n\n // Cache the metadata result\n this.cache.set(cacheKey, metadata, CacheTtl.OneHour)\n return metadata\n }\n\n async getBridgeInfo(address: string): Promise<Record<string, string> | null> {\n const normalizedAddress = address.toLowerCase()\n const cacheKey = `uniswap:bridge:${this.chainId}:${normalizedAddress}`\n\n // Check cache first\n const cachedBridgeInfo = this.cache.get<Record<string, string>>(cacheKey)\n if (cachedBridgeInfo !== null) {\n return cachedBridgeInfo\n }\n\n const token = await this.findToken(address)\n if (!token?.extensions?.bridgeInfo) {\n // Cache null result to avoid repeated lookups\n this.cache.set(cacheKey, null, CacheTtl.OneMinute * 5)\n return null\n }\n\n const bridgeInfo: Record<string, string> = {}\n for (const [chainId, info] of Object.entries(token.extensions.bridgeInfo)) {\n bridgeInfo[chainId] = (info as { tokenAddress: string }).tokenAddress\n }\n\n // Cache the bridge info result\n this.cache.set(cacheKey, bridgeInfo, CacheTtl.OneHour)\n return bridgeInfo\n }\n}\n","import { WarpChain, WarpChainAsset, WarpChainName } from '@vleap/warps'\n\nconst ArbitrumChain: WarpChain = WarpChainName.Arbitrum\n\nexport const ArbitrumTokens: WarpChainAsset[] = [\n {\n chain: ArbitrumChain,\n identifier: '0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8',\n name: 'USD Coin',\n symbol: 'USDC',\n decimals: 6,\n logoUrl: 'https://assets.coingecko.com/coins/images/6319/small/USD_Coin_icon.png',\n },\n {\n chain: ArbitrumChain,\n identifier: '0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9',\n name: 'Tether USD',\n symbol: 'USDT',\n decimals: 6,\n logoUrl: 'https://assets.coingecko.com/coins/images/325/small/Tether.png',\n },\n {\n chain: ArbitrumChain,\n identifier: '0x82aF49447D8a07e3bd95BD0d56f35241523fBab1',\n name: 'Wrapped Ether',\n symbol: 'WETH',\n decimals: 18,\n logoUrl: 'https://assets.coingecko.com/coins/images/2518/small/weth.png',\n },\n]\n","import { WarpChain, WarpChainAsset, WarpChainName } from '@vleap/warps'\n\nconst BaseChain: WarpChain = WarpChainName.Base\n\nexport const BaseTokens: WarpChainAsset[] = [\n {\n chain: BaseChain,\n identifier: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913',\n name: 'USD Coin',\n symbol: 'USDC',\n decimals: 6,\n logoUrl: 'https://assets.coingecko.com/coins/images/6319/small/USD_Coin_icon.png',\n },\n {\n chain: BaseChain,\n identifier: '0x4200000000000000000000000000000000000006',\n name: 'Wrapped Ether',\n symbol: 'WETH',\n decimals: 18,\n logoUrl: 'https://assets.coingecko.com/coins/images/2518/small/weth.png',\n },\n {\n chain: BaseChain,\n identifier: '0x808456652fdb597867f38412077A9182bf77359F',\n name: 'Euro',\n symbol: 'EURC',\n decimals: 6,\n logoUrl: 'https://assets.coingecko.com/coins/images/26045/standard/euro.png',\n },\n {\n chain: BaseChain,\n fidentifier: '0xcbB7C0006F23900c38EB856149F799620fcb8A4a',\n name: 'Coinbase Wrapped BTC',\n symbol: 'CBETH',\n decimals: 8,\n logoUrl: 'https://assets.coingecko.com/coins/images/7598/small/wrapped_bitcoin_wbtc.png',\n },\n]\n","import { WarpChain, WarpChainAsset, WarpChainName } from '@vleap/warps'\n\nconst BaseChain: WarpChain = WarpChainName.Base\n\nexport const BaseSepoliaTokens: WarpChainAsset[] = [\n {\n chain: BaseChain,\n identifier: '0x036CbD53842c5426634e7929541eC2318f3dCF7e',\n name: 'USD',\n symbol: 'USDC',\n decimals: 6,\n logoUrl: 'https://assets.coingecko.com/coins/images/6319/small/USD_Coin_icon.png',\n },\n {\n chain: BaseChain,\n identifier: '0x808456652fdb597867f38412077A9182bf77359F',\n name: 'Euro',\n symbol: 'EURC',\n decimals: 6,\n logoUrl: 'https://assets.coingecko.com/coins/images/26045/thumb/euro-coin.png?1655394420',\n },\n {\n chain: BaseChain,\n identifier: '0xcbB7C0006F23900c38EB856149F799620fcb8A4a',\n name: 'Wrapped Bitcoin',\n symbol: 'WBTC',\n decimals: 8,\n logoUrl: 'https://assets.coingecko.com/coins/images/7598/small/wrapped_bitcoin_wbtc.png',\n },\n]\n","import { WarpChain, WarpChainAsset, WarpChainName } from '@vleap/warps'\n\nconst EthereumChain: WarpChain = WarpChainName.Ethereum\n\nexport const EthereumTokens: WarpChainAsset[] = [\n {\n chain: EthereumChain,\n identifier: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48',\n name: 'USD Coin',\n symbol: 'USDC',\n decimals: 6,\n logoUrl: 'https://assets.coingecko.com/coins/images/6319/small/USD_Coin_icon.png',\n },\n {\n chain: EthereumChain,\n identifier: '0xdAC17F958D2ee523a2206206994597C13D831ec7',\n name: 'Tether USD',\n symbol: 'USDT',\n decimals: 6,\n logoUrl: 'https://assets.coingecko.com/coins/images/325/small/Tether.png',\n },\n {\n chain: EthereumChain,\n identifier: '0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599',\n name: 'Wrapped Bitcoin',\n symbol: 'WBTC',\n decimals: 8,\n logoUrl: 'https://assets.coingecko.com/coins/images/7598/small/wrapped_bitcoin_wbtc.png',\n },\n {\n chain: EthereumChain,\n identifier: '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2',\n name: 'Wrapped Ether',\n symbol: 'WETH',\n decimals: 18,\n logoUrl: 'https://assets.coingecko.com/coins/images/2518/small/weth.png',\n },\n {\n chain: EthereumChain,\n identifier: '0x6B175474E89094C44Da98b954EedeAC495271d0F',\n name: 'Dai Stablecoin',\n symbol: 'DAI',\n decimals: 18,\n logoUrl: 'https://assets.coingecko.com/coins/images/9956/small/4943.png',\n },\n]\n","import { WarpChain, WarpChainAsset, WarpChainName } from '@vleap/warps'\n\nconst EthereumChain: WarpChain = WarpChainName.Ethereum\n\nexport const EthereumSepoliaTokens: WarpChainAsset[] = [\n {\n chain: EthereumChain,\n identifier: '0x1c7D4B196Cb0C7B01d743Fbc6116a902379C7238',\n name: 'USD Coin',\n symbol: 'USDC',\n decimals: 6,\n logoUrl: 'https://assets.coingecko.com/coins/images/6319/small/USD_Coin_icon.png',\n },\n {\n chain: EthereumChain,\n identifier: '0x7169D38820dfd117C3FA1f22a697dBA58d90BA06',\n name: 'Tether USD',\n symbol: 'USDT',\n decimals: 6,\n logoUrl: 'https://assets.coingecko.com/coins/images/325/small/Tether.png',\n },\n {\n chain: EthereumChain,\n identifier: '0x7b79995e5f793A07Bc00c21412e50Ecae098E7f9',\n name: 'Wrapped Ether',\n symbol: 'WETH',\n decimals: 18,\n logoUrl: 'https://assets.coingecko.com/coins/images/2518/small/weth.png',\n },\n]\n","import { WarpChain, WarpChainAsset, WarpChainEnv } from '@vleap/warps'\nimport { ArbitrumTokens } from './tokens/arbitrum'\nimport { BaseTokens } from './tokens/base'\nimport { BaseSepoliaTokens } from './tokens/base-sepolia'\nimport { EthereumTokens } from './tokens/ethereum'\nimport { EthereumSepoliaTokens } from './tokens/ethereum-sepolia'\n\nexport const KnownTokens: Record<WarpChain, Record<string, WarpChainAsset[]>> = {\n ethereum: {\n mainnet: EthereumTokens,\n testnet: EthereumSepoliaTokens,\n devnet: EthereumSepoliaTokens,\n },\n base: {\n mainnet: BaseTokens,\n testnet: BaseSepoliaTokens,\n devnet: BaseSepoliaTokens,\n },\n arbitrum: {\n mainnet: ArbitrumTokens,\n },\n}\n\nexport const findKnownTokenById = (chain: WarpChain, env: WarpChainEnv, id: string): WarpChainAsset | null => {\n const chainTokens = KnownTokens[chain]?.[env] || []\n return chainTokens.find((token) => token.identifier === id) || null\n}\n\nexport const getKnownTokensForChain = (chainName: string, env: string = 'mainnet'): WarpChainAsset[] => {\n return KnownTokens[chainName]?.[env] || []\n}\n","import {\n AdapterWarpExecutor,\n applyResultsToMessages,\n getNextInfo,\n getProviderUrl,\n getWarpActionByIndex,\n WarpChainAssetValue,\n WarpChainInfo,\n WarpClientConfig,\n WarpExecutable,\n WarpExecution,\n WarpQueryAction,\n} from '@vleap/warps'\nimport { ethers } from 'ethers'\nimport { WarpEvmConstants } from './constants'\nimport { WarpEvmResults } from './WarpEvmResults'\nimport { WarpEvmSerializer } from './WarpEvmSerializer'\n\nexport class WarpEvmExecutor implements AdapterWarpExecutor {\n private readonly serializer: WarpEvmSerializer\n private readonly provider: ethers.JsonRpcProvider\n private readonly results: WarpEvmResults\n\n constructor(\n private readonly config: WarpClientConfig,\n private readonly chain: WarpChainInfo\n ) {\n this.serializer = new WarpEvmSerializer()\n const apiUrl = getProviderUrl(this.config, chain.name, this.config.env, this.chain.defaultApiUrl)\n // Create provider with explicit network configuration using ethers.Network\n const network = new ethers.Network(this.chain.name, parseInt(this.chain.chainId))\n this.provider = new ethers.JsonRpcProvider(apiUrl, network)\n this.results = new WarpEvmResults(config, this.chain)\n }\n\n async createTransaction(executable: WarpExecutable): Promise<ethers.TransactionRequest> {\n const action = getWarpActionByIndex(executable.warp, executable.action)\n\n let tx: ethers.TransactionRequest | null = null\n if (action.type === 'transfer') {\n tx = await this.createTransferTransaction(executable)\n } else if (action.type === 'contract') {\n tx = await this.createContractCallTransaction(executable)\n } else if (action.type === 'query') {\n throw new Error('WarpEvmExecutor: Invalid action type for createTransaction; Use executeQuery instead')\n } else if (action.type === 'collect') {\n throw new Error('WarpEvmExecutor: Invalid action type for createTransaction; Use executeCollect instead')\n }\n\n if (!tx) throw new Error(`WarpEvmExecutor: Invalid action type (${action.type})`)\n\n return tx\n }\n\n async createTransferTransaction(executable: WarpExecutable): Promise<ethers.TransactionRequest> {\n const userWallet = this.config.user?.wallets?.[executable.chain.name]\n if (!userWallet) throw new Error('WarpEvmExecutor: createTransfer - user address not set')\n\n if (!ethers.isAddress(executable.destination)) {\n throw new Error(`WarpEvmExecutor: Invalid destination address: ${executable.destination}`)\n }\n\n // Handle token transfers\n if (executable.transfers && executable.transfers.length > 0) {\n return this.createTokenTransferTransaction(executable, userWallet)\n }\n\n // Native token transfer\n const tx: ethers.TransactionRequest = {\n to: executable.destination,\n value: executable.value,\n data: executable.data ? this.serializer.stringToTyped(executable.data) : '0x',\n }\n\n return this.estimateGasAndSetDefaults(tx, userWallet)\n }\n\n async createContractCallTransaction(executable: WarpExecutable): Promise<ethers.TransactionRequest> {\n const userWallet = this.config.user?.wallets?.[executable.chain.name]\n if (!userWallet) throw new Error('WarpEvmExecutor: createContractCall - user address not set')\n\n const action = getWarpActionByIndex(executable.warp, executable.action)\n if (!action || !('func' in action) || !action.func) {\n throw new Error('WarpEvmExecutor: Contract action must have a function name')\n }\n\n // Validate destination address\n if (!ethers.isAddress(executable.destination)) {\n throw new Error(`WarpEvmExecutor: Invalid contract address: ${executable.destination}`)\n }\n\n try {\n const iface = new ethers.Interface([`function ${action.func}`])\n const encodedData = iface.encodeFunctionData(action.func, executable.args)\n\n const tx: ethers.TransactionRequest = {\n to: executable.destination,\n value: executable.value,\n data: encodedData,\n }\n\n return this.estimateGasAndSetDefaults(tx, userWallet)\n } catch (error) {\n throw new Error(`WarpEvmExecutor: Failed to encode function data for ${action.func}: ${error}`)\n }\n }\n\n private async createTokenTransferTransaction(executable: WarpExecutable, userWallet: string): Promise<ethers.TransactionRequest> {\n if (executable.transfers.length === 0) {\n throw new Error('WarpEvmExecutor: No transfers provided')\n }\n\n // Check if we have a native token defined for this chain\n if (!this.chain.nativeToken?.identifier) {\n throw new Error('WarpEvmExecutor: No native token defined for this chain')\n }\n\n // Separate native token transfers from ERC-20 token transfers\n const nativeTokenTransfers = executable.transfers.filter((transfer) => transfer.identifier === this.chain.nativeToken!.identifier)\n const erc20Transfers = executable.transfers.filter((transfer) => transfer.identifier !== this.chain.nativeToken!.identifier)\n\n // Handle single native token transfer\n if (nativeTokenTransfers.length === 1 && erc20Transfers.length === 0) {\n const transfer = nativeTokenTransfers[0]\n\n // Validate native token amount\n if (transfer.amount <= 0n) {\n throw new Error('WarpEvmExecutor: Native token transfer amount must be positive')\n }\n\n const tx: ethers.TransactionRequest = {\n to: executable.destination,\n value: transfer.amount,\n data: '0x',\n }\n\n return this.estimateGasAndSetDefaults(tx, userWallet)\n }\n\n // Handle single ERC-20 token transfer\n if (nativeTokenTransfers.length === 0 && erc20Transfers.length === 1) {\n return this.createSingleTokenTransfer(executable, erc20Transfers[0], userWallet)\n }\n\n // Handle multiple transfers (not yet supported)\n if (executable.transfers.length > 1) {\n throw new Error('WarpEvmExecutor: Multiple token transfers not yet supported')\n }\n\n // This should never happen, but just in case\n throw new Error('WarpEvmExecutor: Invalid transfer configuration')\n }\n\n private async createSingleTokenTransfer(\n executable: WarpExecutable,\n transfer: WarpChainAssetValue,\n userWallet: string\n ): Promise<ethers.TransactionRequest> {\n if (!ethers.isAddress(transfer.identifier)) {\n throw new Error(`WarpEvmExecutor: Invalid token address: ${transfer.identifier}`)\n }\n\n // ERC-20 transfer function signature: transfer(address to, uint256 amount)\n const transferInterface = new ethers.Interface(['function transfer(address to, uint256 amount) returns (bool)'])\n\n const encodedData = transferInterface.encodeFunctionData('transfer', [executable.destination, transfer.amount])\n\n const tx: ethers.TransactionRequest = {\n to: transfer.identifier, // Token contract address\n value: 0n, // No native token value for ERC-20 transfers\n data: encodedData,\n }\n\n return this.estimateGasAndSetDefaults(tx, userWallet)\n }\n\n async executeQuery(executable: WarpExecutable): Promise<WarpExecution> {\n const action = getWarpActionByIndex(executable.warp, executable.action) as WarpQueryAction\n if (action.type !== 'query') {\n throw new Error(`WarpEvmExecutor: Invalid action type for executeQuery: ${action.type}`)\n }\n if (!action.func) {\n throw new Error('WarpEvmExecutor: Query action must have a function name')\n }\n\n // Validate destination address\n if (!ethers.isAddress(executable.destination)) {\n throw new Error(`WarpEvmExecutor: Invalid contract address for query: ${executable.destination}`)\n }\n\n try {\n const iface = new ethers.Interface([`function ${action.func}`])\n const encodedData = iface.encodeFunctionData(action.func, executable.args)\n\n const result = await this.provider.call({\n to: executable.destination,\n data: encodedData,\n })\n\n const decodedResult = iface.decodeFunctionResult(action.func, result)\n const isSuccess = true\n\n const { values, valuesRaw, results } = await this.results.extractQueryResults(\n executable.warp,\n decodedResult,\n executable.action,\n executable.resolvedInputs\n )\n\n const next = getNextInfo(this.config, [], executable.warp, executable.action, results)\n\n return {\n success: isSuccess,\n warp: executable.warp,\n action: executable.action,\n user: this.config.user?.wallets?.[executable.chain.name] || null,\n txHash: null,\n tx: null,\n next,\n values,\n valuesRaw,\n results,\n messages: applyResultsToMessages(executable.warp, results),\n }\n } catch (error) {\n return {\n success: false,\n warp: executable.warp,\n action: executable.action,\n user: this.config.user?.wallets?.[executable.chain.name] || null,\n txHash: null,\n tx: null,\n next: null,\n values: [],\n valuesRaw: [],\n results: {},\n messages: {},\n }\n }\n }\n\n private async estimateGasAndSetDefaults(tx: ethers.TransactionRequest, from: string): Promise<ethers.TransactionRequest> {\n try {\n const gasEstimate = await this.provider.estimateGas({\n ...tx,\n from,\n })\n\n // Validate gas estimate\n if (gasEstimate < BigInt(WarpEvmConstants.Validation.MinGasLimit)) {\n throw new Error(`Gas estimate too low: ${gasEstimate}`)\n }\n if (gasEstimate > BigInt(WarpEvmConstants.Validation.MaxGasLimit)) {\n throw new Error(`Gas estimate too high: ${gasEstimate}`)\n }\n\n const feeData = await this.provider.getFeeData()\n\n // Handle both EIP-1559 and legacy gas pricing\n if (feeData.maxFeePerGas && feeData.maxPriorityFeePerGas) {\n // EIP-1559 pricing\n return {\n ...tx,\n chainId: BigInt(this.chain.chainId),\n gasLimit: gasEstimate,\n maxFeePerGas: feeData.maxFeePerGas,\n maxPriorityFeePerGas: feeData.maxPriorityFeePerGas,\n }\n } else if (feeData.gasPrice) {\n // Legacy pricing\n return {\n ...tx,\n chainId: BigInt(this.chain.chainId),\n gasLimit: gasEstimate,\n gasPrice: feeData.gasPrice,\n }\n } else {\n // Fallback to default values\n return {\n ...tx,\n chainId: BigInt(this.chain.chainId),\n gasLimit: gasEstimate,\n gasPrice: ethers.parseUnits(WarpEvmConstants.GasPrice.Default, 'wei'),\n }\n }\n } catch (error) {\n // If gas estimation fails, use default values based on transaction type\n let defaultGasLimit = BigInt(WarpEvmConstants.GasLimit.Default)\n\n // Determine gas limit based on transaction type\n if (tx.data && tx.data !== '0x') {\n // Check if this is a token transfer by looking for ERC-20 transfer function signature\n if (tx.data.startsWith('0xa9059cbb')) {\n // transfer(address,uint256) function signature\n defaultGasLimit = BigInt(WarpEvmConstants.GasLimit.TokenTransfer)\n } else {\n defaultGasLimit = BigInt(WarpEvmConstants.GasLimit.ContractCall)\n }\n } else {\n defaultGasLimit = BigInt(WarpEvmConstants.GasLimit.Transfer)\n }\n\n return {\n ...tx,\n chainId: BigInt(this.chain.chainId),\n gasLimit: defaultGasLimit,\n gasPrice: ethers.parseUnits(WarpEvmConstants.GasPrice.Default, 'wei'),\n }\n }\n }\n\n async signMessage(message: string, privateKey: string): Promise<string> {\n try {\n const wallet = new ethers.Wallet(privateKey)\n const signature = await wallet.signMessage(message)\n return signature\n } catch (error) {\n throw new Error(`Failed to sign message: ${error}`)\n }\n }\n\n async verifyMessage(message: string, signature: string): Promise<string> {\n try {\n const recoveredAddress = ethers.verifyMessage(message, signature)\n return recoveredAddress\n } catch (error) {\n throw new Error(`Failed to verify message: ${error}`)\n }\n }\n}\n","export const WarpEvmConstants = {\n GasLimit: {\n Default: 21000,\n ContractCall: 100000,\n ContractDeploy: 500000,\n Transfer: 21000,\n TokenTransfer: 65000, // ERC-20 transfer gas limit\n Approve: 46000,\n Swap: 200000,\n },\n GasPrice: {\n Default: '20000000000',\n },\n Validation: {\n MinGasLimit: 21000,\n MaxGasLimit: 30000000,\n },\n}\n\nexport enum EthereumExplorers {\n Etherscan = 'etherscan',\n EtherscanSepolia = 'etherscan_sepolia',\n Ethplorer = 'ethplorer',\n Blockscout = 'blockscout',\n BlockscoutSepolia = 'blockscout_sepolia',\n}\n\nexport enum ArbitrumExplorers {\n Arbiscan = 'arbiscan',\n ArbiscanSepolia = 'arbiscan_sepolia',\n BlockscoutArbitrum = 'blockscout_arbitrum',\n BlockscoutArbitrumSepolia = 'blockscout_arbitrum_sepolia',\n}\n\nexport enum BaseExplorers {\n Basescan = 'basescan',\n BasescanSepolia = 'basescan_sepolia',\n BlockscoutBase = 'blockscout_base',\n BlockscoutBaseSepolia = 'blockscout_base_sepolia',\n}\n\nexport type ExplorerName = EthereumExplorers | ArbitrumExplorers | BaseExplorers\n\nexport const EvmExplorers = {\n ethereum: {\n mainnet: [EthereumExplorers.Etherscan, EthereumExplorers.Ethplorer, EthereumExplorers.Blockscout] as const,\n testnet: [EthereumExplorers.EtherscanSepolia, EthereumExplorers.BlockscoutSepolia] as const,\n devnet: [EthereumExplorers.EtherscanSepolia, EthereumExplorers.BlockscoutSepolia] as const,\n },\n arbitrum: {\n mainnet: [ArbitrumExplorers.Arbiscan, ArbitrumExplorers.BlockscoutArbitrum] as const,\n testnet: [ArbitrumExplorers.ArbiscanSepolia, ArbitrumExplorers.BlockscoutArbitrumSepolia] as const,\n devnet: [ArbitrumExplorers.ArbiscanSepolia, ArbitrumExplorers.BlockscoutArbitrumSepolia] as const,\n },\n base: {\n mainnet: [BaseExplorers.Basescan, BaseExplorers.BlockscoutBase] as const,\n testnet: [BaseExplorers.BasescanSepolia, BaseExplorers.BlockscoutBaseSepolia] as const,\n devnet: [BaseExplorers.BasescanSepolia, BaseExplorers.BlockscoutBaseSepolia] as const,\n },\n} as const\n\nexport const ExplorerUrls: Record<ExplorerName, string> = {\n [EthereumExplorers.Etherscan]: 'https://etherscan.io',\n [EthereumExplorers.EtherscanSepolia]: 'https://sepolia.etherscan.io',\n [EthereumExplorers.Ethplorer]: 'https://ethplorer.io',\n [EthereumExplorers.Blockscout]: 'https://eth.blockscout.com',\n [EthereumExplorers.BlockscoutSepolia]: 'https://sepolia.blockscout.com',\n\n [ArbitrumExplorers.Arbiscan]: 'https://arbiscan.io',\n [ArbitrumExplorers.ArbiscanSepolia]: 'https://sepolia.arbiscan.io',\n [ArbitrumExplorers.BlockscoutArbitrum]: 'https://arbitrum.blockscout.com',\n [ArbitrumExplorers.BlockscoutArbitrumSepolia]: 'https://sepolia.blockscout.com',\n\n [BaseExplorers.Basescan]: 'https://basescan.org',\n [BaseExplorers.BasescanSepolia]: 'https://sepolia.basescan.org',\n [BaseExplorers.BlockscoutBase]: 'https://base.blockscout.com',\n [BaseExplorers.BlockscoutBaseSepolia]: 'https://sepolia.blockscout.com',\n}\n","import {\n AdapterWarpResults,\n evaluateResultsCommon,\n getProviderUrl,\n parseResultsOutIndex,\n ResolvedInput,\n Warp,\n WarpChainInfo,\n WarpClientConfig,\n WarpConstants,\n WarpExecution,\n WarpExecutionResults,\n} from '@vleap/warps'\nimport { ethers } from 'ethers'\nimport { WarpEvmSerializer } from './WarpEvmSerializer'\n\nexport class WarpEvmResults implements AdapterWarpResults {\n private readonly serializer: WarpEvmSerializer\n private readonly provider: ethers.JsonRpcProvider\n\n constructor(\n private readonly config: WarpClientConfig,\n private readonly chain?: WarpChainInfo\n ) {\n this.serializer = new WarpEvmSerializer()\n // Use chain-specific provider if available, otherwise fallback to ethereum\n if (this.chain) {\n const apiUrl = getProviderUrl(this.config, this.chain.name, this.config.env, this.chain.defaultApiUrl)\n const network = new ethers.Network(this.chain.name, parseInt(this.chain.chainId))\n this.provider = new ethers.JsonRpcProvider(apiUrl, network)\n } else {\n // Fallback for backward compatibility\n const apiUrl = getProviderUrl(this.config, 'ethereum', this.config.env, 'https://ethereum-rpc.publicnode.com')\n const network = new ethers.Network('ethereum', 1)\n this.provider = new ethers.JsonRpcProvider(apiUrl, network)\n }\n }\n\n async getTransactionExecutionResults(warp: Warp, tx: ethers.TransactionReceipt): Promise<WarpExecution> {\n const success = tx.status === 1\n const gasUsed = tx.gasUsed?.toString() || '0'\n const gasPrice = tx.gasPrice?.toString() || '0'\n const blockNumber = tx.blockNumber?.toString() || '0'\n const transactionHash = tx.hash\n\n const logs = tx.logs.map((log) => ({\n address: log.address,\n topics: log.topics,\n data: log.data,\n blockNumber: log.blockNumber?.toString() || '0',\n transactionHash: log.transactionHash,\n index: log.index?.toString() || '0',\n }))\n\n return {\n success,\n warp,\n action: 0,\n user: this.config.user?.wallets?.evm || null,\n txHash: transactionHash,\n tx,\n next: null,\n values: [transactionHash, blockNumber, gasUsed, gasPrice, ...(logs.length > 0 ? logs : [])],\n valuesRaw: [transactionHash, blockNumber, gasUsed, gasPrice, ...(logs.length > 0 ? logs : [])],\n results: {},\n messages: {},\n }\n }\n\n async extractQueryResults(\n warp: Warp,\n typedValues: any[],\n actionIndex: number,\n inputs: ResolvedInput[]\n ): Promise<{ values: any[]; valuesRaw: any[]; results: WarpExecutionResults }> {\n const values = typedValues.map((t) => this.serializer.typedToString(t))\n const valuesRaw = typedValues.map((t) => this.serializer.typedToNative(t)[1])\n let results: WarpExecutionResults = {}\n\n if (!warp.results) return { values, valuesRaw, results }\n\n const getNestedValue = (path: string): unknown => {\n const indices = path\n .split('.')\n .slice(1)\n .map((i) => parseInt(i) - 1)\n if (indices.length === 0) return undefined\n let value: any = valuesRaw[indices[0]]\n for (let i = 1; i < indices.length; i++) {\n if (value === undefined || value === null) return undefined\n value = value[indices[i]]\n }\n return value\n }\n\n for (const [key, path] of Object.entries(warp.results)) {\n if (path.startsWith(WarpConstants.Transform.Prefix)) continue\n const currentActionIndex = parseResultsOutIndex(path)\n if (currentActionIndex !== null && currentActionIndex !== actionIndex) {\n results[key] = null\n continue\n }\n if (path.startsWith('out.') || path === 'out' || path.startsWith('out[')) {\n results[key] = getNestedValue(path) || null\n } else {\n results[key] = path\n }\n }\n\n return { values, valuesRaw, results: await evaluateResultsCommon(warp, results, actionIndex, inputs) }\n }\n\n async getTransactionStatus(\n txHash: string\n ): Promise<{ status: 'pending' | 'confirmed' | 'failed'; blockNumber?: number; gasUsed?: bigint }> {\n try {\n const receipt = await this.provider.getTransactionReceipt(txHash)\n\n if (!receipt) {\n return { status: 'pending' }\n }\n\n return {\n status: receipt.status === 1 ? 'confirmed' : 'failed',\n blockNumber: receipt.blockNumber,\n gasUsed: receipt.gasUsed,\n }\n } catch (error) {\n throw new Error(`Failed to get transaction status: ${error}`)\n }\n }\n\n async getTransactionReceipt(txHash: string): Promise<ethers.TransactionReceipt | null> {\n try {\n return await this.provider.getTransactionReceipt(txHash)\n } catch (error) {\n return null\n }\n }\n}\n","import {\n AdapterWarpSerializer,\n BaseWarpActionInputType,\n WarpActionInputType,\n WarpAdapterGenericType,\n WarpConstants,\n WarpNativeValue,\n WarpSerializer,\n} from '@vleap/warps'\nimport { ethers } from 'ethers'\n\nconst SplitParamsRegex = new RegExp(`${WarpConstants.ArgParamsSeparator}(.*)`)\n\nexport class WarpEvmSerializer implements AdapterWarpSerializer {\n public readonly coreSerializer: WarpSerializer\n\n constructor() {\n this.coreSerializer = new WarpSerializer()\n }\n\n typedToString(value: any): string {\n if (typeof value === 'string') {\n if (ethers.isAddress(value)) {\n return `address:${value}`\n }\n if (ethers.isHexString(value) && !ethers.isAddress(value)) {\n return `hex:${value}`\n }\n return `string:${value}`\n }\n if (typeof value === 'number') {\n if (Number.isInteger(value)) {\n if (value >= 0 && value <= 255) return `uint8:${value}`\n if (value >= 0 && value <= 65535) return `uint16:${value}`\n if (value >= 0 && value <= 4294967295) return `uint32:${value}`\n return `uint64:${value}`\n }\n return `string:${value}`\n }\n if (typeof value === 'bigint') {\n return `biguint:${value.toString()}`\n }\n if (typeof value === 'boolean') {\n return `boolean:${value}`\n }\n if (Array.isArray(value)) {\n if (value.length === 0) return `list:string:`\n const types = value.map((item) => this.typedToString(item).split(WarpConstants.ArgParamsSeparator)[0]) as BaseWarpActionInputType[]\n const type = types[0] as BaseWarpActionInputType\n const values = value.map((item) => this.typedToString(item).split(WarpConstants.ArgParamsSeparator)[1]) as WarpNativeValue[]\n return `list:${type}:${values.join(',')}`\n }\n if (value === null || value === undefined) {\n return `string:null`\n }\n return `string:${String(value)}`\n }\n\n typedToNative(value: any): [WarpActionInputType, WarpNativeValue] {\n const stringValue = this.typedToString(value)\n const [type, ...valueParts] = stringValue.split(WarpConstants.ArgParamsSeparator)\n const nativeValue = valueParts.join(WarpConstants.ArgParamsSeparator)\n return [type, this.parseNativeValue(type, nativeValue)]\n }\n\n nativeToTyped(type: WarpActionInputType, value: WarpNativeValue): any {\n switch (type) {\n case 'string':\n return String(value)\n case 'uint8':\n case 'uint16':\n case 'uint32':\n case 'uint64':\n return BigInt(value as string | number)\n case 'biguint':\n return BigInt(value as string | number)\n case 'boolean':\n return Boolean(value)\n case 'address':\n return String(value)\n case 'hex':\n return String(value)\n default:\n if (type.startsWith('list:')) {\n const [, itemType, itemsStr] = type.split(':')\n if (!itemsStr) return []\n const items = itemsStr.split(',')\n return items.map((item) => this.nativeToTyped(itemType, item))\n }\n return String(value)\n }\n }\n\n nativeToType(type: BaseWarpActionInputType): WarpAdapterGenericType {\n switch (type) {\n case 'string':\n return 'string'\n case 'uint8':\n case 'uint16':\n case 'uint32':\n case 'uint64':\n case 'biguint':\n return 'bigint'\n case 'boolean':\n return 'boolean'\n case 'address':\n return 'string'\n case 'hex':\n return 'string'\n default:\n return 'string'\n }\n }\n\n stringToTyped(value: string): any {\n const parts = value.split(WarpConstants.ArgParamsSeparator, 2)\n if (parts.length < 2) {\n return value\n }\n\n const [type, stringValue] = parts\n\n switch (type) {\n case 'string':\n return stringValue\n case 'uint8':\n case 'uint16':\n case 'uint32':\n case 'uint64':\n return BigInt(stringValue)\n case 'biguint':\n return BigInt(stringValue)\n case 'boolean':\n return stringValue === 'true'\n case 'address':\n return stringValue\n case 'hex':\n return stringValue\n default:\n if (type.startsWith('list:')) {\n const [, itemType, itemsStr] = type.split(':')\n if (!itemsStr) return []\n const items = itemsStr.split(',')\n return items.map((item) => this.stringToTyped(`${itemType}:${item}`))\n }\n return stringValue\n }\n }\n\n private parseNativeValue(type: string, value: string): WarpNativeValue {\n switch (type) {\n case 'string':\n return value\n case 'uint8':\n case 'uint16':\n case 'uint32':\n case 'uint64':\n case 'biguint':\n return BigInt(value)\n case 'boolean':\n return value === 'true'\n case 'address':\n return value\n case 'hex':\n return value\n default:\n return value\n }\n }\n}\n","import { AdapterWarpExplorer, WarpChainInfo, WarpClientConfig } from '@vleap/warps'\nimport { EvmExplorers, ExplorerName, ExplorerUrls } from './constants'\n\nexport class WarpEvmExplorer implements AdapterWarpExplorer {\n constructor(\n private readonly chain: WarpChainInfo,\n private readonly config: WarpClientConfig\n ) {}\n\n private getExplorers(): readonly ExplorerName[] {\n const chainExplorers = EvmExplorers[this.chain.name as keyof typeof EvmExplorers]\n if (!chainExplorers) {\n return ['Default' as ExplorerName]\n }\n\n const explorers = chainExplorers[this.config.env]\n if (!explorers) {\n return ['Default' as ExplorerName]\n }\n\n return explorers\n }\n\n private getPrimaryExplorer(): ExplorerName {\n const explorers = this.getExplorers()\n return explorers[0]\n }\n\n private getExplorerUrlByName(explorer?: ExplorerName): string {\n const userPreference = this.config.preferences?.explorers?.[this.chain.name]\n\n if (userPreference && !explorer) {\n const url = ExplorerUrls[userPreference as ExplorerName]\n if (url) return url\n }\n\n if (explorer) {\n const url = ExplorerUrls[explorer]\n if (url) return url\n }\n\n const primaryExplorer = this.getPrimaryExplorer()\n const url = ExplorerUrls[primaryExplorer]\n return url || ExplorerUrls[primaryExplorer]\n }\n\n getAccountUrl(address: string, explorer?: ExplorerName): string {\n const baseUrl = this.getExplorerUrlByName(explorer)\n return `${baseUrl}/address/${address}`\n }\n\n getTransactionUrl(hash: string, explorer?: ExplorerName): string {\n const baseUrl = this.getExplorerUrlByName(explorer)\n return `${baseUrl}/tx/${hash}`\n }\n\n getBlockUrl(blockNumber: string | number, explorer?: ExplorerName): string {\n const baseUrl = this.getExplorerUrlByName(explorer)\n return `${baseUrl}/block/${blockNumber}`\n }\n\n getAssetUrl(identifier: string, explorer?: ExplorerName): string {\n const baseUrl = this.getExplorerUrlByName(explorer)\n return `${baseUrl}/token/${identifier}`\n }\n\n getContractUrl(address: string, explorer?: ExplorerName): string {\n const baseUrl = this.getExplorerUrlByName(explorer)\n return `${baseUrl}/address/${address}`\n }\n\n getAllExplorers(): readonly ExplorerName[] {\n return this.getExplorers()\n }\n\n getExplorerByName(name: string): ExplorerName | undefined {\n const explorers = this.getExplorers()\n return explorers.find((explorer) => explorer.toLowerCase() === name.toLowerCase())\n }\n\n getAccountUrls(address: string): Record<ExplorerName, string> {\n const explorers = this.getAllExplorers()\n const urls: Record<ExplorerName, string> = {} as Record<ExplorerName, string>\n\n explorers.forEach((explorer) => {\n const url = ExplorerUrls[explorer]\n if (url) {\n urls[explorer] = `${url}/address/${address}`\n }\n })\n\n return urls\n }\n\n getTransactionUrls(hash: string): Record<ExplorerName, string> {\n const explorers = this.getAllExplorers()\n const urls: Record<ExplorerName, string> = {} as Record<ExplorerName, string>\n\n explorers.forEach((explorer) => {\n const url = ExplorerUrls[explorer]\n if (url) {\n urls[explorer] = `${url}/tx/${hash}`\n }\n })\n\n return urls\n }\n\n getAssetUrls(identifier: string): Record<ExplorerName, string> {\n const explorers = this.getAllExplorers()\n const urls: Record<ExplorerName, string> = {} as Record<ExplorerName, string>\n\n explorers.forEach((explorer) => {\n const url = ExplorerUrls[explorer]\n if (url) {\n urls[explorer] = `${url}/token/${identifier}`\n }\n })\n\n return urls\n }\n\n getContractUrls(address: string): Record<ExplorerName, string> {\n const explorers = this.getAllExplorers()\n const urls: Record<ExplorerName, string> = {} as Record<ExplorerName, string>\n\n explorers.forEach((explorer) => {\n const url = ExplorerUrls[explorer]\n if (url) {\n urls[explorer] = `${url}/address/${address}`\n }\n })\n\n return urls\n }\n\n getBlockUrls(blockNumber: string | number): Record<ExplorerName, string> {\n const explorers = this.getAllExplorers()\n const urls: Record<ExplorerName, string> = {} as Record<ExplorerName, string>\n\n explorers.forEach((explorer) => {\n const url = ExplorerUrls[explorer]\n if (url) {\n urls[explorer] = `${url}/block/${blockNumber}`\n }\n })\n\n return urls\n }\n}\n","import { Adapter, AdapterFactory, WarpChainEnv, WarpChainInfo, WarpClientConfig } from '@vleap/warps'\nimport { WarpEvmDataLoader } from '../WarpEvmDataLoader'\nimport { WarpEvmExecutor } from '../WarpEvmExecutor'\nimport { WarpEvmExplorer } from '../WarpEvmExplorer'\nimport { WarpEvmResults } from '../WarpEvmResults'\nimport { WarpEvmSerializer } from '../WarpEvmSerializer'\n\nexport const createEvmAdapter = (\n chainName: string,\n chainPrefix: string,\n chainInfos: Record<WarpChainEnv, WarpChainInfo>\n): AdapterFactory => {\n return (config: WarpClientConfig, fallback?: Adapter) => {\n if (!fallback) throw new Error(`${chainName} adapter requires a fallback adapter`)\n\n return {\n chain: chainName,\n chainInfo: chainInfos[config.env],\n prefix: chainPrefix,\n builder: () => fallback.builder(),\n executor: new WarpEvmExecutor(config, chainInfos[config.env]),\n results: new WarpEvmResults(config, chainInfos[config.env]),\n serializer: new WarpEvmSerializer(),\n registry: fallback.registry,\n explorer: new WarpEvmExplorer(chainInfos[config.env], config),\n abiBuilder: () => fallback.abiBuilder(),\n brandBuilder: () => fallback.brandBuilder(),\n dataLoader: new WarpEvmDataLoader(config, chainInfos[config.env]),\n }\n }\n}\n","import { AdapterFactory, WarpChainAsset, WarpChainName } from '@vleap/warps'\nimport { createEvmAdapter } from './common'\n\nexport const NativeTokenBase: WarpChainAsset = {\n chain: WarpChainName.Base,\n identifier: 'ETH',\n name: 'Ether',\n symbol: 'ETH',\n decimals: 18,\n logoUrl: 'https://vleap.ai/images/tokens/eth.svg',\n}\n\nexport const getBaseAdapter: AdapterFactory = createEvmAdapter(WarpChainName.Base, 'base', {\n mainnet: {\n name: WarpChainName.Base,\n displayName: 'Base',\n chainId: '8453',\n blockTime: 2000,\n addressHrp: '0x',\n defaultApiUrl: 'https://mainnet.base.org',\n nativeToken: NativeTokenBase,\n },\n testnet: {\n name: WarpChainName.Base,\n displayName: 'Base Sepolia',\n chainId: '84532',\n blockTime: 2000,\n addressHrp: '0x',\n defaultApiUrl: 'https://sepolia.base.org',\n nativeToken: NativeTokenBase,\n },\n devnet: {\n name: WarpChainName.Base,\n displayName: 'Base Sepolia',\n chainId: '84532',\n blockTime: 2000,\n addressHrp: '0x',\n defaultApiUrl: 'https://sepolia.base.org',\n nativeToken: NativeTokenBase,\n },\n})\n","import { Adapter, WarpChain, WarpChainName, WarpClientConfig } from '@vleap/warps'\nimport { getArbitrumAdapter } from './arbitrum'\nimport { getBaseAdapter } from './base'\nimport { getEthereumAdapter } from './ethereum'\nimport { getSomniaAdapter } from './somnia'\n\nexport const getAllEvmAdapters = (config: WarpClientConfig, fallback?: Adapter): Adapter[] => [\n getEthereumAdapter(config, fallback),\n getBaseAdapter(config, fallback),\n getArbitrumAdapter(config, fallback),\n getSomniaAdapter(config, fallback),\n]\n\nexport const getAllEvmChainNames = (): WarpChain[] => [\n WarpChainName.Ethereum,\n WarpChainName.Base,\n WarpChainName.Arbitrum,\n WarpChainName.Somnia,\n]\n","import { AdapterFactory, WarpChainAsset, WarpChainName } from '@vleap/warps'\nimport { createEvmAdapter } from './common'\n\nexport const NativeTokenEth: WarpChainAsset = {\n chain: WarpChainName.Ethereum,\n identifier: 'ETH',\n symbol: 'ETH',\n name: 'Ether',\n decimals: 18,\n logoUrl: 'https://vleap.ai/images/tokens/eth.svg',\n}\n\nexport const getEthereumAdapter: AdapterFactory = createEvmAdapter(WarpChainName.Ethereum, 'eth', {\n mainnet: {\n name: WarpChainName.Ethereum,\n displayName: 'Ethereum Mainnet',\n chainId: '1',\n blockTime: 12000,\n addressHrp: '0x',\n defaultApiUrl: 'https://ethereum-rpc.publicnode.com',\n nativeToken: NativeTokenEth,\n },\n testnet: {\n name: WarpChainName.Ethereum,\n displayName: 'Ethereum Sepolia',\n chainId: '11155111',\n blockTime: 12000,\n addressHrp: '0x',\n defaultApiUrl: 'https://ethereum-sepolia-rpc.publicnode.com',\n nativeToken: NativeTokenEth,\n },\n devnet: {\n name: WarpChainName.Ethereum,\n displayName: 'Ethereum Sepolia',\n chainId: '11155111',\n blockTime: 12000,\n addressHrp: '0x',\n defaultApiUrl: 'https://ethereum-sepolia-rpc.publicnode.com',\n nativeToken: NativeTokenEth,\n },\n})\n","import { AdapterFactory, WarpChainAsset, WarpChainName } from '@vleap/warps'\nimport { createEvmAdapter } from './common'\n\nexport const NativeTokenSomi: WarpChainAsset = {\n chain: WarpChainName.Somnia,\n identifier: 'SOMI',\n symbol: 'SOMI',\n name: 'Somnia',\n decimals: 18,\n logoUrl: 'https://assets.coingecko.com/coins/images/68061/standard/somniacg.png?1754641117',\n}\n\nexport const NativeTokenStt: WarpChainAsset = {\n chain: WarpChainName.Somnia,\n identifier: 'STT',\n symbol: 'STT',\n name: 'Somnia Testnet Token',\n decimals: 18,\n logoUrl: 'https://assets.coingecko.com/coins/images/68061/standard/somniacg.png?1754641117',\n}\n\nexport const getSomniaAdapter: AdapterFactory = createEvmAdapter(WarpChainName.Somnia, 'eth', {\n mainnet: {\n name: WarpChainName.Somnia,\n displayName: 'Somnia Mainnet',\n chainId: '5031',\n blockTime: 100,\n addressHrp: '0x',\n defaultApiUrl: 'https://api.infra.mainnet.somnia.network/',\n nativeToken: NativeTokenSomi,\n },\n testnet: {\n name: WarpChainName.Somnia,\n displayName: 'Somnia Testnet',\n chainId: '50312',\n blockTime: 100,\n addressHrp: '0x',\n defaultApiUrl: 'https://dream-rpc.somnia.network/',\n nativeToken: NativeTokenStt,\n },\n devnet: {\n name: WarpChainName.Somnia,\n displayName: 'Somnia Testnet',\n chainId: '50312',\n blockTime: 100,\n addressHrp: '0x',\n defaultApiUrl: 'https://dream-rpc.somnia.network',\n nativeToken: NativeTokenStt,\n },\n})\n"],"mappings":";AAAA,SAAyC,iBAAAA,sBAAqB;;;ACA9D;AAAA,EAEE,YAAAC;AAAA,EACA;AAAA,EACA,aAAAC;AAAA,EACA;AAAA,OAOK;AACP,SAAS,cAAc;;;ACbvB,SAAS,gBAA2B;AAG7B,IAAM,kBAAN,MAAM,gBAAe;AAAA,EAK1B,YAAY,OAAkB,SAAiB;AAC7C,SAAK,QAAQ;AACb,SAAK,UAAU;AAAA,EACjB;AAAA,EAEA,MAAM,eAA0C;AAC9C,QAAI;AACF,YAAM,WAAW,MAAM,MAAM,gBAAe,sBAAsB;AAClE,UAAI,CAAC,SAAS,IAAI;AAChB,cAAM,IAAI,MAAM,uCAAuC,SAAS,MAAM,EAAE;AAAA,MAC1E;AAEA,YAAM,YAA8B,MAAM,SAAS,KAAK;AACxD,aAAO;AAAA,IACT,SAAS,OAAO;AACd,YAAM,IAAI,MAAM,uCAAuC,KAAK,EAAE;AAAA,IAChE;AAAA,EACF;AAAA,EAEA,MAAM,UAAU,SAA+C;AAC7D,UAAM,oBAAoB,QAAQ,YAAY;AAC9C,UAAM,WAAW,iBAAiB,KAAK,OAAO,IAAI,iBAAiB;AAGnE,UAAM,cAAc,KAAK,MAAM,IAAkB,QAAQ;AACzD,QAAI,aAAa;AACf,aAAO;AAAA,IACT;AAEA,QAAI;AACF,YAAM,YAAY,MAAM,KAAK,aAAa;AAC1C,YAAM,QAAQ,UAAU,OAAO,KAAK,CAACC,WAAwBA,OAAM,QAAQ,YAAY,MAAM,iBAAiB,KAAK;AAGnH,UAAI,SAAS,MAAM,YAAY,KAAK,SAAS;AAC3C,eAAO;AAAA,MACT;AAGA,UAAI,OAAO;AACT,aAAK,MAAM,IAAI,UAAU,OAAO,SAAS,OAAO;AAAA,MAClD,OAAO;AAEL,aAAK,MAAM,IAAI,UAAU,MAAM,SAAS,YAAY,CAAC;AAAA,MACvD;AAEA,aAAO;AAAA,IACT,SAAS,OAAO;AAEd,aAAO;AAAA,IACT;AAAA,EACF;AAAA,EAEA,MAAM,iBAAiB,SAKb;AACR,UAAM,oBAAoB,QAAQ,YAAY;AAC9C,UAAM,WAAW,oBAAoB,KAAK,OAAO,IAAI,iBAAiB;AAGtE,UAAM,iBAAiB,KAAK,MAAM,IAK/B,QAAQ;AACX,QAAI,mBAAmB,MAAM;AAC3B,aAAO;AAAA,IACT;AAEA,UAAM,QAAQ,MAAM,KAAK,UAAU,OAAO;AAC1C,QAAI,CAAC,OAAO;AAEV,WAAK,MAAM,IAAI,UAAU,MAAM,SAAS,YAAY,CAAC;AACrD,aAAO;AAAA,IACT;AAEA,UAAM,WAAW;AAAA,MACf,MAAM,MAAM;AAAA,MACZ,QAAQ,MAAM;AAAA,MACd,UAAU,MAAM;AAAA,MAChB,SAAS,MAAM;AAAA,IACjB;AAGA,SAAK,MAAM,IAAI,UAAU,UAAU,SAAS,OAAO;AACnD,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,cAAc,SAAyD;AAC3E,UAAM,oBAAoB,QAAQ,YAAY;AAC9C,UAAM,WAAW,kBAAkB,KAAK,OAAO,IAAI,iBAAiB;AAGpE,UAAM,mBAAmB,KAAK,MAAM,IAA4B,QAAQ;AACxE,QAAI,qBAAqB,MAAM;AAC7B,aAAO;AAAA,IACT;AAEA,UAAM,QAAQ,MAAM,KAAK,UAAU,OAAO;AAC1C,QAAI,CAAC,OAAO,YAAY,YAAY;AAElC,WAAK,MAAM,IAAI,UAAU,MAAM,SAAS,YAAY,CAAC;AACrD,aAAO;AAAA,IACT;AAEA,UAAM,aAAqC,CAAC;AAC5C,eAAW,CAAC,SAAS,IAAI,KAAK,OAAO,QAAQ,MAAM,WAAW,UAAU,GAAG;AACzE,iBAAW,OAAO,IAAK,KAAkC;AAAA,IAC3D;AAGA,SAAK,MAAM,IAAI,UAAU,YAAY,SAAS,OAAO;AACrD,WAAO;AAAA,EACT;AACF;AA3Ha,gBACa,yBAAyB;AAD5C,IAAM,iBAAN;;;ACHP,SAAoC,qBAAqB;AAEzD,IAAM,gBAA2B,cAAc;AAExC,IAAM,iBAAmC;AAAA,EAC9C;AAAA,IACE,OAAO;AAAA,IACP,YAAY;AAAA,IACZ,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,SAAS;AAAA,EACX;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,YAAY;AAAA,IACZ,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,SAAS;AAAA,EACX;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,YAAY;AAAA,IACZ,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,SAAS;AAAA,EACX;AACF;;;AC7BA,SAAoC,iBAAAC,sBAAqB;AAEzD,IAAM,YAAuBA,eAAc;AAEpC,IAAM,aAA+B;AAAA,EAC1C;AAAA,IACE,OAAO;AAAA,IACP,YAAY;AAAA,IACZ,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,SAAS;AAAA,EACX;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,YAAY;AAAA,IACZ,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,SAAS;AAAA,EACX;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,YAAY;AAAA,IACZ,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,SAAS;AAAA,EACX;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,aAAa;AAAA,IACb,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,SAAS;AAAA,EACX;AACF;;;ACrCA,SAAoC,iBAAAC,sBAAqB;AAEzD,IAAMC,aAAuBD,eAAc;AAEpC,IAAM,oBAAsC;AAAA,EACjD;AAAA,IACE,OAAOC;AAAA,IACP,YAAY;AAAA,IACZ,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,SAAS;AAAA,EACX;AAAA,EACA;AAAA,IACE,OAAOA;AAAA,IACP,YAAY;AAAA,IACZ,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,SAAS;AAAA,EACX;AAAA,EACA;AAAA,IACE,OAAOA;AAAA,IACP,YAAY;AAAA,IACZ,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,SAAS;AAAA,EACX;AACF;;;AC7BA,SAAoC,iBAAAC,sBAAqB;AAEzD,IAAM,gBAA2BA,eAAc;AAExC,IAAM,iBAAmC;AAAA,EAC9C;AAAA,IACE,OAAO;AAAA,IACP,YAAY;AAAA,IACZ,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,SAAS;AAAA,EACX;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,YAAY;AAAA,IACZ,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,SAAS;AAAA,EACX;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,YAAY;AAAA,IACZ,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,SAAS;AAAA,EACX;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,YAAY;AAAA,IACZ,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,SAAS;AAAA,EACX;AAAA,EACA;AAAA,IACE,OAAO;AAAA,IACP,YAAY;AAAA,IACZ,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,SAAS;AAAA,EACX;AACF;;;AC7CA,SAAoC,iBAAAC,sBAAqB;AAEzD,IAAMC,iBAA2BD,eAAc;AAExC,IAAM,wBAA0C;AAAA,EACrD;AAAA,IACE,OAAOC;AAAA,IACP,YAAY;AAAA,IACZ,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,SAAS;AAAA,EACX;AAAA,EACA;AAAA,IACE,OAAOA;AAAA,IACP,YAAY;AAAA,IACZ,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,SAAS;AAAA,EACX;AAAA,EACA;AAAA,IACE,OAAOA;AAAA,IACP,YAAY;AAAA,IACZ,MAAM;AAAA,IACN,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,SAAS;AAAA,EACX;AACF;;;ACtBO,IAAM,cAAmE;AAAA,EAC9E,UAAU;AAAA,IACR,SAAS;AAAA,IACT,SAAS;AAAA,IACT,QAAQ;AAAA,EACV;AAAA,EACA,MAAM;AAAA,IACJ,SAAS;AAAA,IACT,SAAS;AAAA,IACT,QAAQ;AAAA,EACV;AAAA,EACA,UAAU;AAAA,IACR,SAAS;AAAA,EACX;AACF;AAEO,IAAM,qBAAqB,CAAC,OAAkB,KAAmB,OAAsC;AAC5G,QAAM,cAAc,YAAY,KAAK,IAAI,GAAG,KAAK,CAAC;AAClD,SAAO,YAAY,KAAK,CAAC,UAAU,MAAM,eAAe,EAAE,KAAK;AACjE;AAEO,IAAM,yBAAyB,CAAC,WAAmB,MAAc,cAAgC;AACtG,SAAO,YAAY,SAAS,IAAI,GAAG,KAAK,CAAC;AAC3C;;;APJA,IAAM,YAAY;AAAA,EAChB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAEO,IAAM,oBAAN,MAAyD;AAAA,EAK9D,YACmB,QACA,OACjB;AAFiB;AACA;AAEjB,UAAM,SAAS,eAAe,KAAK,QAAQ,KAAK,MAAM,MAAM,KAAK,OAAO,KAAK,KAAK,MAAM,aAAa;AACrG,UAAM,UAAU,IAAI,OAAO,QAAQ,KAAK,MAAM,MAAM,SAAS,KAAK,MAAM,OAAO,CAAC;AAChF,SAAK,WAAW,IAAI,OAAO,gBAAgB,QAAQ,OAAO;AAC1D,SAAK,QAAQ,IAAIC,WAAU,OAAO,OAAO,IAAI;AAC7C,SAAK,iBAAiB,IAAI,eAAe,KAAK,OAAO,SAAS,KAAK,MAAM,OAAO,CAAC;AAAA,EACnF;AAAA,EAEA,MAAM,WAAW,SAA4C;AAC3D,UAAM,UAAU,MAAM,KAAK,SAAS,WAAW,OAAO;AAEtD,WAAO;AAAA,MACL,OAAO,KAAK,MAAM;AAAA,MAClB;AAAA,MACA;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,iBAAiB,SAA4C;AACjE,UAAM,UAAU,MAAM,KAAK,WAAW,OAAO;AAC7C,UAAM,gBAAgB,MAAM,KAAK,sBAAsB,OAAO;AAE9D,QAAI,SAA2B,QAAQ,UAAU,IAAI,CAAC,EAAE,GAAG,KAAK,MAAM,aAAa,QAAQ,QAAQ,QAAQ,CAAC,IAAI,CAAC;AAEjH,eAAW,gBAAgB,eAAe;AACxC,UAAI,aAAa,UAAU,IAAI;AAC7B,eAAO,KAAK;AAAA,UACV,OAAO,KAAK,MAAM;AAAA,UAClB,YAAY,aAAa;AAAA,UACzB,MAAM,aAAa;AAAA,UACnB,QAAQ,aAAa;AAAA,UACrB,QAAQ,aAAa;AAAA,UACrB,UAAU,aAAa;AAAA,UACvB,SAAS,aAAa,WAAW;AAAA,QACnC,CAAC;AAAA,MACH;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,SAAS,YAAoD;AACjE,QAAI;AACF,UAAI,eAAe,KAAK,MAAM,YAAY,YAAY;AACpD,eAAO,KAAK,MAAM;AAAA,MACpB;AAEA,YAAM,WAAW,aAAa,MAAM,KAAK,OAAO,KAAK,KAAK,MAAM,MAAM,UAAU;AAChF,YAAM,cAAc,KAAK,MAAM,IAAoB,QAAQ;AAC3D,UAAI,aAAa;AACf,eAAO;AAAA,MACT;AAEA,YAAM,aAAa,mBAAmB,KAAK,MAAM,MAAM,KAAK,OAAO,KAAK,UAAU;AAElF,UAAI,YAAY;AACd,eAAO;AAAA,UACL,OAAO,KAAK,MAAM;AAAA,UAClB;AAAA,UACA,MAAM,WAAW;AAAA,UACjB,QAAQ,WAAW;AAAA,UACnB,QAAQ;AAAA,UACR,UAAU,WAAW;AAAA,UACrB,SAAS,WAAW;AAAA,QACtB;AAAA,MACF;AAEA,YAAM,WAAW,MAAM,KAAK,iBAAiB,UAAU;AAEvD,YAAM,QAAwB;AAAA,QAC5B,OAAO,KAAK,MAAM;AAAA,QAClB;AAAA,QACA,MAAM,SAAS;AAAA,QACf,QAAQ,SAAS;AAAA,QACjB,QAAQ;AAAA,QACR,UAAU,SAAS;AAAA,QACnB,SAAS,SAAS,WAAW;AAAA,MAC/B;AAEA,WAAK,MAAM,IAAI,UAAU,OAAOC,UAAS,OAAO;AAEhD,aAAO;AAAA,IACT,SAAS,OAAO;AACd,aAAO;AAAA,IACT;AAAA,EACF;AAAA,EAEA,MAAM,UAAU,YAAoB,iBAAiB,OAAwC;AAC3F,QAAI;AACF,YAAM,KAAK,MAAM,KAAK,SAAS,eAAe,UAAU;AACxD,UAAI,CAAC,GAAI,QAAO;AAEhB,YAAM,UAAU,MAAM,KAAK,SAAS,sBAAsB,UAAU;AACpE,YAAM,QAAQ,MAAM,KAAK,SAAS,SAAS,GAAG,eAAe,QAAQ;AAErE,aAAO;AAAA,QACL,OAAO,KAAK,MAAM;AAAA,QAClB,IAAI,GAAG,QAAQ;AAAA,QACf,UAAU,GAAG,MAAM;AAAA,QACnB,QAAQ,GAAG;AAAA,QACX,OAAO,GAAG;AAAA,QACV,UAAU,GAAG,QAAQ,GAAG,SAAS,OAAO,kBAAkB;AAAA,QAC1D,QAAQ,SAAS,WAAW,IAAI,YAAY,SAAS,WAAW,IAAI,WAAW;AAAA,QAC/E,WAAW,OAAO,YAAY,IAAI,KAAK,OAAO,MAAM,SAAS,IAAI,GAAI,EAAE,YAAY,KAAI,oBAAI,KAAK,GAAE,YAAY;AAAA,QAC9G,OAAO,SAAS,WAAW,IAAI,uBAAuB;AAAA,QACtD,IAAI;AAAA,UACF,MAAM,GAAG,QAAQ;AAAA,UACjB,MAAM,GAAG;AAAA,UACT,IAAI,GAAG,MAAM;AAAA,UACb,OAAO,GAAG,MAAM,SAAS;AAAA,UACzB,MAAM,GAAG,QAAQ;AAAA,UACjB,UAAU,GAAG,UAAU,SAAS,KAAK;AAAA,UACrC,UAAU,GAAG,UAAU,SAAS,KAAK;AAAA,UACrC,aAAa,GAAG,eAAe;AAAA,UAC/B,WAAW,GAAG,aAAa;AAAA,UAC3B,kBAAkB,GAAG,SAAS;AAAA,QAChC;AAAA,MACF;AAAA,IACF,SAAS,OAAO;AACd,aAAO;AAAA,IACT;AAAA,EACF;AAAA,EAEA,MAAM,kBAAkB,SAAiB,SAA6D;AACpG,WAAO,CAAC;AAAA,EACV;AAAA,EAEA,MAAc,sBAAsB,SAA0C;AAC5E,UAAM,MAAM,KAAK,OAAO,QAAQ,YAAY,YAAY;AACxD,UAAM,SAAS,uBAAuB,KAAK,MAAM,MAAM,GAAG;AAC1D,UAAM,cAAc,OAAO,IAAI,CAAC,UAAU,KAAK,gBAAgB,SAAS,MAAM,UAAU,EAAE,MAAM,MAAM,EAAE,CAAC;AACzG,UAAM,WAAW,MAAM,QAAQ,IAAI,WAAW;AAE9C,WAAO,SACJ,IAAI,CAAC,SAAS,WAAW,EAAE,SAAS,OAAO,OAAO,KAAK,EAAE,EAAE,EAC3D,OAAO,CAAC,EAAE,QAAQ,MAAM,UAAU,EAAE,EACpC,IAAI,CAAC,EAAE,SAAS,MAAM,OAAO;AAAA,MAC5B,cAAc,MAAM;AAAA,MACpB;AAAA,MACA,MAAM,MAAM;AAAA,MACZ,QAAQ,MAAM;AAAA,MACd,UAAU,MAAM,YAAY;AAAA,MAC5B,SAAS,MAAM,WAAW;AAAA,IAC5B,EAAE;AAAA,EACN;AAAA,EAEA,MAAc,gBAAgB,SAAiB,cAAuC;AACpF,UAAM,WAAW,IAAI,OAAO,SAAS,cAAc,WAAW,KAAK,QAAQ;AAC3E,UAAM,UAAU,MAAM,SAAS,UAAU,OAAO;AAChD,WAAO;AAAA,EACT;AAAA,EAEA,MAAc,iBAAiB,cAAoG;AAEjI,UAAM,kBAAkB,MAAM,KAAK,eAAe,iBAAiB,YAAY;AAC/E,QAAI,iBAAiB;AACnB,aAAO;AAAA,IACT;AAGA,UAAM,WAAW,IAAI,OAAO,SAAS,cAAc,WAAW,KAAK,QAAQ;AAC3E,UAAM,CAAC,MAAM,QAAQ,QAAQ,IAAI,MAAM,QAAQ,IAAI;AAAA,MACjD,SAAS,KAAK,EAAE,MAAM,MAAM,eAAe;AAAA,MAC3C,SAAS,OAAO,EAAE,MAAM,MAAM,SAAS;AAAA,MACvC,SAAS,SAAS,EAAE,MAAM,MAAM,EAAE;AAAA,IACpC,CAAC;AAED,WAAO;AAAA,MACL,MAAM,QAAQ;AAAA,MACd,QAAQ,UAAU;AAAA,MAClB,UAAU,YAAY;AAAA,MACtB,SAAS;AAAA,IACX;AAAA,EACF;AACF;;;AQxNA;AAAA,EAEE;AAAA,EACA;AAAA,EACA,kBAAAC;AAAA,EACA;AAAA,OAOK;AACP,SAAS,UAAAC,eAAc;;;ACbhB,IAAM,mBAAmB;AAAA,EAC9B,UAAU;AAAA,IACR,SAAS;AAAA,IACT,cAAc;AAAA,IACd,gBAAgB;AAAA,IAChB,UAAU;AAAA,IACV,eAAe;AAAA;AAAA,IACf,SAAS;AAAA,IACT,MAAM;AAAA,EACR;AAAA,EACA,UAAU;AAAA,IACR,SAAS;AAAA,EACX;AAAA,EACA,YAAY;AAAA,IACV,aAAa;AAAA,IACb,aAAa;AAAA,EACf;AACF;AAEO,IAAK,oBAAL,kBAAKC,uBAAL;AACL,EAAAA,mBAAA,eAAY;AACZ,EAAAA,mBAAA,sBAAmB;AACnB,EAAAA,mBAAA,eAAY;AACZ,EAAAA,mBAAA,gBAAa;AACb,EAAAA,mBAAA,uBAAoB;AALV,SAAAA;AAAA,GAAA;AAQL,IAAK,oBAAL,kBAAKC,uBAAL;AACL,EAAAA,mBAAA,cAAW;AACX,EAAAA,mBAAA,qBAAkB;AAClB,EAAAA,mBAAA,wBAAqB;AACrB,EAAAA,mBAAA,+BAA4B;AAJlB,SAAAA;AAAA,GAAA;AAOL,IAAK,gBAAL,kBAAKC,mBAAL;AACL,EAAAA,eAAA,cAAW;AACX,EAAAA,eAAA,qBAAkB;AAClB,EAAAA,eAAA,oBAAiB;AACjB,EAAAA,eAAA,2BAAwB;AAJd,SAAAA;AAAA,GAAA;AASL,IAAM,eAAe;AAAA,EAC1B,UAAU;AAAA,IACR,SAAS,CAAC,6BAA6B,6BAA6B,6BAA4B;AAAA,IAChG,SAAS,CAAC,4CAAoC,4CAAmC;AAAA,IACjF,QAAQ,CAAC,4CAAoC,4CAAmC;AAAA,EAClF;AAAA,EACA,UAAU;AAAA,IACR,SAAS,CAAC,2BAA4B,8CAAoC;AAAA,IAC1E,SAAS,CAAC,0CAAmC,6DAA2C;AAAA,IACxF,QAAQ,CAAC,0CAAmC,6DAA2C;AAAA,EACzF;AAAA,EACA,MAAM;AAAA,IACJ,SAAS,CAAC,2BAAwB,sCAA4B;AAAA,IAC9D,SAAS,CAAC,0CAA+B,qDAAmC;AAAA,IAC5E,QAAQ,CAAC,0CAA+B,qDAAmC;AAAA,EAC7E;AACF;AAEO,IAAM,eAA6C;AAAA,EACxD,CAAC,2BAA2B,GAAG;AAAA,EAC/B,CAAC,0CAAkC,GAAG;AAAA,EACtC,CAAC,2BAA2B,GAAG;AAAA,EAC/B,CAAC,6BAA4B,GAAG;AAAA,EAChC,CAAC,4CAAmC,GAAG;AAAA,EAEvC,CAAC,yBAA0B,GAAG;AAAA,EAC9B,CAAC,wCAAiC,GAAG;AAAA,EACrC,CAAC,8CAAoC,GAAG;AAAA,EACxC,CAAC,6DAA2C,GAAG;AAAA,EAE/C,CAAC,yBAAsB,GAAG;AAAA,EAC1B,CAAC,wCAA6B,GAAG;AAAA,EACjC,CAAC,sCAA4B,GAAG;AAAA,EAChC,CAAC,qDAAmC,GAAG;AACzC;;;AC7EA;AAAA,EAEE;AAAA,EACA,kBAAAC;AAAA,EACA;AAAA,EAKA,iBAAAC;AAAA,OAGK;AACP,SAAS,UAAAC,eAAc;;;ACbvB;AAAA,EAKE;AAAA,EAEA;AAAA,OACK;AACP,SAAS,UAAAC,eAAc;AAEvB,IAAM,mBAAmB,IAAI,OAAO,GAAG,cAAc,kBAAkB,MAAM;AAEtE,IAAM,oBAAN,MAAyD;AAAA,EAG9D,cAAc;AACZ,SAAK,iBAAiB,IAAI,eAAe;AAAA,EAC3C;AAAA,EAEA,cAAc,OAAoB;AAChC,QAAI,OAAO,UAAU,UAAU;AAC7B,UAAIA,QAAO,UAAU,KAAK,GAAG;AAC3B,eAAO,WAAW,KAAK;AAAA,MACzB;AACA,UAAIA,QAAO,YAAY,KAAK,KAAK,CAACA,QAAO,UAAU,KAAK,GAAG;AACzD,eAAO,OAAO,KAAK;AAAA,MACrB;AACA,aAAO,UAAU,KAAK;AAAA,IACxB;AACA,QAAI,OAAO,UAAU,UAAU;AAC7B,UAAI,OAAO,UAAU,KAAK,GAAG;AAC3B,YAAI,SAAS,KAAK,SAAS,IAAK,QAAO,SAAS,KAAK;AACrD,YAAI,SAAS,KAAK,SAAS,MAAO,QAAO,UAAU,KAAK;AACxD,YAAI,SAAS,KAAK,SAAS,WAAY,QAAO,UAAU,KAAK;AAC7D,eAAO,UAAU,KAAK;AAAA,MACxB;AACA,aAAO,UAAU,KAAK;AAAA,IACxB;AACA,QAAI,OAAO,UAAU,UAAU;AAC7B,aAAO,WAAW,MAAM,SAAS,CAAC;AAAA,IACpC;AACA,QAAI,OAAO,UAAU,WAAW;AAC9B,aAAO,WAAW,KAAK;AAAA,IACzB;AACA,QAAI,MAAM,QAAQ,KAAK,GAAG;AACxB,UAAI,MAAM,WAAW,EAAG,QAAO;AAC/B,YAAM,QAAQ,MAAM,IAAI,CAAC,SAAS,KAAK,cAAc,IAAI,EAAE,MAAM,cAAc,kBAAkB,EAAE,CAAC,CAAC;AACrG,YAAM,OAAO,MAAM,CAAC;AACpB,YAAM,SAAS,MAAM,IAAI,CAAC,SAAS,KAAK,cAAc,IAAI,EAAE,MAAM,cAAc,kBAAkB,EAAE,CAAC,CAAC;AACtG,aAAO,QAAQ,IAAI,IAAI,OAAO,KAAK,GAAG,CAAC;AAAA,IACzC;AACA,QAAI,UAAU,QAAQ,UAAU,QAAW;AACzC,aAAO;AAAA,IACT;AACA,WAAO,UAAU,OAAO,KAAK,CAAC;AAAA,EAChC;AAAA,EAEA,cAAc,OAAoD;AAChE,UAAM,cAAc,KAAK,cAAc,KAAK;AAC5C,UAAM,CAAC,MAAM,GAAG,UAAU,IAAI,YAAY,MAAM,cAAc,kBAAkB;AAChF,UAAM,cAAc,WAAW,KAAK,cAAc,kBAAkB;AACpE,WAAO,CAAC,MAAM,KAAK,iBAAiB,MAAM,WAAW,CAAC;AAAA,EACxD;AAAA,EAEA,cAAc,MAA2B,OAA6B;AACpE,YAAQ,MAAM;AAAA,MACZ,KAAK;AACH,eAAO,OAAO,KAAK;AAAA,MACrB,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AACH,eAAO,OAAO,KAAwB;AAAA,MACxC,KAAK;AACH,eAAO,OAAO,KAAwB;AAAA,MACxC,KAAK;AACH,eAAO,QAAQ,KAAK;AAAA,MACtB,KAAK;AACH,eAAO,OAAO,KAAK;AAAA,MACrB,KAAK;AACH,eAAO,OAAO,KAAK;AAAA,MACrB;AACE,YAAI,KAAK,WAAW,OAAO,GAAG;AAC5B,gBAAM,CAAC,EAAE,UAAU,QAAQ,IAAI,KAAK,MAAM,GAAG;AAC7C,cAAI,CAAC,SAAU,QAAO,CAAC;AACvB,gBAAM,QAAQ,SAAS,MAAM,GAAG;AAChC,iBAAO,MAAM,IAAI,CAAC,SAAS,KAAK,cAAc,UAAU,IAAI,CAAC;AAAA,QAC/D;AACA,eAAO,OAAO,KAAK;AAAA,IACvB;AAAA,EACF;AAAA,EAEA,aAAa,MAAuD;AAClE,YAAQ,MAAM;AAAA,MACZ,KAAK;AACH,eAAO;AAAA,MACT,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AACH,eAAO;AAAA,MACT,KAAK;AACH,eAAO;AAAA,MACT,KAAK;AACH,eAAO;AAAA,MACT,KAAK;AACH,eAAO;AAAA,MACT;AACE,eAAO;AAAA,IACX;AAAA,EACF;AAAA,EAEA,cAAc,OAAoB;AAChC,UAAM,QAAQ,MAAM,MAAM,cAAc,oBAAoB,CAAC;AAC7D,QAAI,MAAM,SAAS,GAAG;AACpB,aAAO;AAAA,IACT;AAEA,UAAM,CAAC,MAAM,WAAW,IAAI;AAE5B,YAAQ,MAAM;AAAA,MACZ,KAAK;AACH,eAAO;AAAA,MACT,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AACH,eAAO,OAAO,WAAW;AAAA,MAC3B,KAAK;AACH,eAAO,OAAO,WAAW;AAAA,MAC3B,KAAK;AACH,eAAO,gBAAgB;AAAA,MACzB,KAAK;AACH,eAAO;AAAA,MACT,KAAK;AACH,eAAO;AAAA,MACT;AACE,YAAI,KAAK,WAAW,OAAO,GAAG;AAC5B,gBAAM,CAAC,EAAE,UAAU,QAAQ,IAAI,KAAK,MAAM,GAAG;AAC7C,cAAI,CAAC,SAAU,QAAO,CAAC;AACvB,gBAAM,QAAQ,SAAS,MAAM,GAAG;AAChC,iBAAO,MAAM,IAAI,CAAC,SAAS,KAAK,cAAc,GAAG,QAAQ,IAAI,IAAI,EAAE,CAAC;AAAA,QACtE;AACA,eAAO;AAAA,IACX;AAAA,EACF;AAAA,EAEQ,iBAAiB,MAAc,OAAgC;AACrE,YAAQ,MAAM;AAAA,MACZ,KAAK;AACH,eAAO;AAAA,MACT,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AACH,eAAO,OAAO,KAAK;AAAA,MACrB,KAAK;AACH,eAAO,UAAU;AAAA,MACnB,KAAK;AACH,eAAO;AAAA,MACT,KAAK;AACH,eAAO;AAAA,MACT;AACE,eAAO;AAAA,IACX;AAAA,EACF;AACF;;;ADzJO,IAAM,iBAAN,MAAmD;AAAA,EAIxD,YACmB,QACA,OACjB;AAFiB;AACA;AAEjB,SAAK,aAAa,IAAI,kBAAkB;AAExC,QAAI,KAAK,OAAO;AACd,YAAM,SAASC,gBAAe,KAAK,QAAQ,KAAK,MAAM,MAAM,KAAK,OAAO,KAAK,KAAK,MAAM,aAAa;AACrG,YAAM,UAAU,IAAIC,QAAO,QAAQ,KAAK,MAAM,MAAM,SAAS,KAAK,MAAM,OAAO,CAAC;AAChF,WAAK,WAAW,IAAIA,QAAO,gBAAgB,QAAQ,OAAO;AAAA,IAC5D,OAAO;AAEL,YAAM,SAASD,gBAAe,KAAK,QAAQ,YAAY,KAAK,OAAO,KAAK,qCAAqC;AAC7G,YAAM,UAAU,IAAIC,QAAO,QAAQ,YAAY,CAAC;AAChD,WAAK,WAAW,IAAIA,QAAO,gBAAgB,QAAQ,OAAO;AAAA,IAC5D;AAAA,EACF;AAAA,EAEA,MAAM,+BAA+B,MAAY,IAAuD;AACtG,UAAM,UAAU,GAAG,WAAW;AAC9B,UAAM,UAAU,GAAG,SAAS,SAAS,KAAK;AAC1C,UAAM,WAAW,GAAG,UAAU,SAAS,KAAK;AAC5C,UAAM,cAAc,GAAG,aAAa,SAAS,KAAK;AAClD,UAAM,kBAAkB,GAAG;AAE3B,UAAM,OAAO,GAAG,KAAK,IAAI,CAAC,SAAS;AAAA,MACjC,SAAS,IAAI;AAAA,MACb,QAAQ,IAAI;AAAA,MACZ,MAAM,IAAI;AAAA,MACV,aAAa,IAAI,aAAa,SAAS,KAAK;AAAA,MAC5C,iBAAiB,IAAI;AAAA,MACrB,OAAO,IAAI,OAAO,SAAS,KAAK;AAAA,IAClC,EAAE;AAEF,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA,QAAQ;AAAA,MACR,MAAM,KAAK,OAAO,MAAM,SAAS,OAAO;AAAA,MACxC,QAAQ;AAAA,MACR;AAAA,MACA,MAAM;AAAA,MACN,QAAQ,CAAC,iBAAiB,aAAa,SAAS,UAAU,GAAI,KAAK,SAAS,IAAI,OAAO,CAAC,CAAE;AAAA,MAC1F,WAAW,CAAC,iBAAiB,aAAa,SAAS,UAAU,GAAI,KAAK,SAAS,IAAI,OAAO,CAAC,CAAE;AAAA,MAC7F,SAAS,CAAC;AAAA,MACV,UAAU,CAAC;AAAA,IACb;AAAA,EACF;AAAA,EAEA,MAAM,oBACJ,MACA,aACA,aACA,QAC6E;AAC7E,UAAM,SAAS,YAAY,IAAI,CAAC,MAAM,KAAK,WAAW,cAAc,CAAC,CAAC;AACtE,UAAM,YAAY,YAAY,IAAI,CAAC,MAAM,KAAK,WAAW,cAAc,CAAC,EAAE,CAAC,CAAC;AAC5E,QAAI,UAAgC,CAAC;AAErC,QAAI,CAAC,KAAK,QAAS,QAAO,EAAE,QAAQ,WAAW,QAAQ;AAEvD,UAAM,iBAAiB,CAAC,SAA0B;AAChD,YAAM,UAAU,KACb,MAAM,GAAG,EACT,MAAM,CAAC,EACP,IAAI,CAAC,MAAM,SAAS,CAAC,IAAI,CAAC;AAC7B,UAAI,QAAQ,WAAW,EAAG,QAAO;AACjC,UAAI,QAAa,UAAU,QAAQ,CAAC,CAAC;AACrC,eAAS,IAAI,GAAG,IAAI,QAAQ,QAAQ,KAAK;AACvC,YAAI,UAAU,UAAa,UAAU,KAAM,QAAO;AAClD,gBAAQ,MAAM,QAAQ,CAAC,CAAC;AAAA,MAC1B;AACA,aAAO;AAAA,IACT;AAEA,eAAW,CAAC,KAAK,IAAI,KAAK,OAAO,QAAQ,KAAK,OAAO,GAAG;AACtD,UAAI,KAAK,WAAWC,eAAc,UAAU,MAAM,EAAG;AACrD,YAAM,qBAAqB,qBAAqB,IAAI;AACpD,UAAI,uBAAuB,QAAQ,uBAAuB,aAAa;AACrE,gBAAQ,GAAG,IAAI;AACf;AAAA,MACF;AACA,UAAI,KAAK,WAAW,MAAM,KAAK,SAAS,SAAS,KAAK,WAAW,MAAM,GAAG;AACxE,gBAAQ,GAAG,IAAI,eAAe,IAAI,KAAK;AAAA,MACzC,OAAO;AACL,gBAAQ,GAAG,IAAI;AAAA,MACjB;AAAA,IACF;AAEA,WAAO,EAAE,QAAQ,WAAW,SAAS,MAAM,sBAAsB,MAAM,SAAS,aAAa,MAAM,EAAE;AAAA,EACvG;AAAA,EAEA,MAAM,qBACJ,QACiG;AACjG,QAAI;AACF,YAAM,UAAU,MAAM,KAAK,SAAS,sBAAsB,MAAM;AAEhE,UAAI,CAAC,SAAS;AACZ,eAAO,EAAE,QAAQ,UAAU;AAAA,MAC7B;AAEA,aAAO;AAAA,QACL,QAAQ,QAAQ,WAAW,IAAI,cAAc;AAAA,QAC7C,aAAa,QAAQ;AAAA,QACrB,SAAS,QAAQ;AAAA,MACnB;AAAA,IACF,SAAS,OAAO;AACd,YAAM,IAAI,MAAM,qCAAqC,KAAK,EAAE;AAAA,IAC9D;AAAA,EACF;AAAA,EAEA,MAAM,sBAAsB,QAA2D;AACrF,QAAI;AACF,aAAO,MAAM,KAAK,SAAS,sBAAsB,MAAM;AAAA,IACzD,SAAS,OAAO;AACd,aAAO;AAAA,IACT;AAAA,EACF;AACF;;;AFzHO,IAAM,kBAAN,MAAqD;AAAA,EAK1D,YACmB,QACA,OACjB;AAFiB;AACA;AAEjB,SAAK,aAAa,IAAI,kBAAkB;AACxC,UAAM,SAASC,gBAAe,KAAK,QAAQ,MAAM,MAAM,KAAK,OAAO,KAAK,KAAK,MAAM,aAAa;AAEhG,UAAM,UAAU,IAAIC,QAAO,QAAQ,KAAK,MAAM,MAAM,SAAS,KAAK,MAAM,OAAO,CAAC;AAChF,SAAK,WAAW,IAAIA,QAAO,gBAAgB,QAAQ,OAAO;AAC1D,SAAK,UAAU,IAAI,eAAe,QAAQ,KAAK,KAAK;AAAA,EACtD;AAAA,EAEA,MAAM,kBAAkB,YAAgE;AACtF,UAAM,SAAS,qBAAqB,WAAW,MAAM,WAAW,MAAM;AAEtE,QAAI,KAAuC;AAC3C,QAAI,OAAO,SAAS,YAAY;AAC9B,WAAK,MAAM,KAAK,0BAA0B,UAAU;AAAA,IACtD,WAAW,OAAO,SAAS,YAAY;AACrC,WAAK,MAAM,KAAK,8BAA8B,UAAU;AAAA,IAC1D,WAAW,OAAO,SAAS,SAAS;AAClC,YAAM,IAAI,MAAM,sFAAsF;AAAA,IACxG,WAAW,OAAO,SAAS,WAAW;AACpC,YAAM,IAAI,MAAM,wFAAwF;AAAA,IAC1G;AAEA,QAAI,CAAC,GAAI,OAAM,IAAI,MAAM,yCAAyC,OAAO,IAAI,GAAG;AAEhF,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,0BAA0B,YAAgE;AAC9F,UAAM,aAAa,KAAK,OAAO,MAAM,UAAU,WAAW,MAAM,IAAI;AACpE,QAAI,CAAC,WAAY,OAAM,IAAI,MAAM,wDAAwD;AAEzF,QAAI,CAACA,QAAO,UAAU,WAAW,WAAW,GAAG;AAC7C,YAAM,IAAI,MAAM,iDAAiD,WAAW,WAAW,EAAE;AAAA,IAC3F;AAGA,QAAI,WAAW,aAAa,WAAW,UAAU,SAAS,GAAG;AAC3D,aAAO,KAAK,+BAA+B,YAAY,UAAU;AAAA,IACnE;AAGA,UAAM,KAAgC;AAAA,MACpC,IAAI,WAAW;AAAA,MACf,OAAO,WAAW;AAAA,MAClB,MAAM,WAAW,OAAO,KAAK,WAAW,cAAc,WAAW,IAAI,IAAI;AAAA,IAC3E;AAEA,WAAO,KAAK,0BAA0B,IAAI,UAAU;AAAA,EACtD;AAAA,EAEA,MAAM,8BAA8B,YAAgE;AAClG,UAAM,aAAa,KAAK,OAAO,MAAM,UAAU,WAAW,MAAM,IAAI;AACpE,QAAI,CAAC,WAAY,OAAM,IAAI,MAAM,4DAA4D;AAE7F,UAAM,SAAS,qBAAqB,WAAW,MAAM,WAAW,MAAM;AACtE,QAAI,CAAC,UAAU,EAAE,UAAU,WAAW,CAAC,OAAO,MAAM;AAClD,YAAM,IAAI,MAAM,4DAA4D;AAAA,IAC9E;AAGA,QAAI,CAACA,QAAO,UAAU,WAAW,WAAW,GAAG;AAC7C,YAAM,IAAI,MAAM,8CAA8C,WAAW,WAAW,EAAE;AAAA,IACxF;AAEA,QAAI;AACF,YAAM,QAAQ,IAAIA,QAAO,UAAU,CAAC,YAAY,OAAO,IAAI,EAAE,CAAC;AAC9D,YAAM,cAAc,MAAM,mBAAmB,OAAO,MAAM,WAAW,IAAI;AAEzE,YAAM,KAAgC;AAAA,QACpC,IAAI,WAAW;AAAA,QACf,OAAO,WAAW;AAAA,QAClB,MAAM;AAAA,MACR;AAEA,aAAO,KAAK,0BAA0B,IAAI,UAAU;AAAA,IACtD,SAAS,OAAO;AACd,YAAM,IAAI,MAAM,uDAAuD,OAAO,IAAI,KAAK,KAAK,EAAE;AAAA,IAChG;AAAA,EACF;AAAA,EAEA,MAAc,+BAA+B,YAA4B,YAAwD;AAC/H,QAAI,WAAW,UAAU,WAAW,GAAG;AACrC,YAAM,IAAI,MAAM,wCAAwC;AAAA,IAC1D;AAGA,QAAI,CAAC,KAAK,MAAM,aAAa,YAAY;AACvC,YAAM,IAAI,MAAM,yDAAyD;AAAA,IAC3E;AAGA,UAAM,uBAAuB,WAAW,UAAU,OAAO,CAAC,aAAa,SAAS,eAAe,KAAK,MAAM,YAAa,UAAU;AACjI,UAAM,iBAAiB,WAAW,UAAU,OAAO,CAAC,aAAa,SAAS,eAAe,KAAK,MAAM,YAAa,UAAU;AAG3H,QAAI,qBAAqB,WAAW,KAAK,eAAe,WAAW,GAAG;AACpE,YAAM,WAAW,qBAAqB,CAAC;AAGvC,UAAI,SAAS,UAAU,IAAI;AACzB,cAAM,IAAI,MAAM,gEAAgE;AAAA,MAClF;AAEA,YAAM,KAAgC;AAAA,QACpC,IAAI,WAAW;AAAA,QACf,OAAO,SAAS;AAAA,QAChB,MAAM;AAAA,MACR;AAEA,aAAO,KAAK,0BAA0B,IAAI,UAAU;AAAA,IACtD;AAGA,QAAI,qBAAqB,WAAW,KAAK,eAAe,WAAW,GAAG;AACpE,aAAO,KAAK,0BAA0B,YAAY,eAAe,CAAC,GAAG,UAAU;AAAA,IACjF;AAGA,QAAI,WAAW,UAAU,SAAS,GAAG;AACnC,YAAM,IAAI,MAAM,6DAA6D;AAAA,IAC/E;AAGA,UAAM,IAAI,MAAM,iDAAiD;AAAA,EACnE;AAAA,EAEA,MAAc,0BACZ,YACA,UACA,YACoC;AACpC,QAAI,CAACA,QAAO,UAAU,SAAS,UAAU,GAAG;AAC1C,YAAM,IAAI,MAAM,2CAA2C,SAAS,UAAU,EAAE;AAAA,IAClF;AAGA,UAAM,oBAAoB,IAAIA,QAAO,UAAU,CAAC,8DAA8D,CAAC;AAE/G,UAAM,cAAc,kBAAkB,mBAAmB,YAAY,CAAC,WAAW,aAAa,SAAS,MAAM,CAAC;AAE9G,UAAM,KAAgC;AAAA,MACpC,IAAI,SAAS;AAAA;AAAA,MACb,OAAO;AAAA;AAAA,MACP,MAAM;AAAA,IACR;AAEA,WAAO,KAAK,0BAA0B,IAAI,UAAU;AAAA,EACtD;AAAA,EAEA,MAAM,aAAa,YAAoD;AACrE,UAAM,SAAS,qBAAqB,WAAW,MAAM,WAAW,MAAM;AACtE,QAAI,OAAO,SAAS,SAAS;AAC3B,YAAM,IAAI,MAAM,0DAA0D,OAAO,IAAI,EAAE;AAAA,IACzF;AACA,QAAI,CAAC,OAAO,MAAM;AAChB,YAAM,IAAI,MAAM,yDAAyD;AAAA,IAC3E;AAGA,QAAI,CAACA,QAAO,UAAU,WAAW,WAAW,GAAG;AAC7C,YAAM,IAAI,MAAM,wDAAwD,WAAW,WAAW,EAAE;AAAA,IAClG;AAEA,QAAI;AACF,YAAM,QAAQ,IAAIA,QAAO,UAAU,CAAC,YAAY,OAAO,IAAI,EAAE,CAAC;AAC9D,YAAM,cAAc,MAAM,mBAAmB,OAAO,MAAM,WAAW,IAAI;AAEzE,YAAM,SAAS,MAAM,KAAK,SAAS,KAAK;AAAA,QACtC,IAAI,WAAW;AAAA,QACf,MAAM;AAAA,MACR,CAAC;AAED,YAAM,gBAAgB,MAAM,qBAAqB,OAAO,MAAM,MAAM;AACpE,YAAM,YAAY;AAElB,YAAM,EAAE,QAAQ,WAAW,QAAQ,IAAI,MAAM,KAAK,QAAQ;AAAA,QACxD,WAAW;AAAA,QACX;AAAA,QACA,WAAW;AAAA,QACX,WAAW;AAAA,MACb;AAEA,YAAM,OAAO,YAAY,KAAK,QAAQ,CAAC,GAAG,WAAW,MAAM,WAAW,QAAQ,OAAO;AAErF,aAAO;AAAA,QACL,SAAS;AAAA,QACT,MAAM,WAAW;AAAA,QACjB,QAAQ,WAAW;AAAA,QACnB,MAAM,KAAK,OAAO,MAAM,UAAU,WAAW,MAAM,IAAI,KAAK;AAAA,QAC5D,QAAQ;AAAA,QACR,IAAI;AAAA,QACJ;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA,UAAU,uBAAuB,WAAW,MAAM,OAAO;AAAA,MAC3D;AAAA,IACF,SAAS,OAAO;AACd,aAAO;AAAA,QACL,SAAS;AAAA,QACT,MAAM,WAAW;AAAA,QACjB,QAAQ,WAAW;AAAA,QACnB,MAAM,KAAK,OAAO,MAAM,UAAU,WAAW,MAAM,IAAI,KAAK;AAAA,QAC5D,QAAQ;AAAA,QACR,IAAI;AAAA,QACJ,MAAM;AAAA,QACN,QAAQ,CAAC;AAAA,QACT,WAAW,CAAC;AAAA,QACZ,SAAS,CAAC;AAAA,QACV,UAAU,CAAC;AAAA,MACb;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAc,0BAA0B,IAA+B,MAAkD;AACvH,QAAI;AACF,YAAM,cAAc,MAAM,KAAK,SAAS,YAAY;AAAA,QAClD,GAAG;AAAA,QACH;AAAA,MACF,CAAC;AAGD,UAAI,cAAc,OAAO,iBAAiB,WAAW,WAAW,GAAG;AACjE,cAAM,IAAI,MAAM,yBAAyB,WAAW,EAAE;AAAA,MACxD;AACA,UAAI,cAAc,OAAO,iBAAiB,WAAW,WAAW,GAAG;AACjE,cAAM,IAAI,MAAM,0BAA0B,WAAW,EAAE;AAAA,MACzD;AAEA,YAAM,UAAU,MAAM,KAAK,SAAS,WAAW;AAG/C,UAAI,QAAQ,gBAAgB,QAAQ,sBAAsB;AAExD,eAAO;AAAA,UACL,GAAG;AAAA,UACH,SAAS,OAAO,KAAK,MAAM,OAAO;AAAA,UAClC,UAAU;AAAA,UACV,cAAc,QAAQ;AAAA,UACtB,sBAAsB,QAAQ;AAAA,QAChC;AAAA,MACF,WAAW,QAAQ,UAAU;AAE3B,eAAO;AAAA,UACL,GAAG;AAAA,UACH,SAAS,OAAO,KAAK,MAAM,OAAO;AAAA,UAClC,UAAU;AAAA,UACV,UAAU,QAAQ;AAAA,QACpB;AAAA,MACF,OAAO;AAEL,eAAO;AAAA,UACL,GAAG;AAAA,UACH,SAAS,OAAO,KAAK,MAAM,OAAO;AAAA,UAClC,UAAU;AAAA,UACV,UAAUA,QAAO,WAAW,iBAAiB,SAAS,SAAS,KAAK;AAAA,QACtE;AAAA,MACF;AAAA,IACF,SAAS,OAAO;AAEd,UAAI,kBAAkB,OAAO,iBAAiB,SAAS,OAAO;AAG9D,UAAI,GAAG,QAAQ,GAAG,SAAS,MAAM;AAE/B,YAAI,GAAG,KAAK,WAAW,YAAY,GAAG;AAEpC,4BAAkB,OAAO,iBAAiB,SAAS,aAAa;AAAA,QAClE,OAAO;AACL,4BAAkB,OAAO,iBAAiB,SAAS,YAAY;AAAA,QACjE;AAAA,MACF,OAAO;AACL,0BAAkB,OAAO,iBAAiB,SAAS,QAAQ;AAAA,MAC7D;AAEA,aAAO;AAAA,QACL,GAAG;AAAA,QACH,SAAS,OAAO,KAAK,MAAM,OAAO;AAAA,QAClC,UAAU;AAAA,QACV,UAAUA,QAAO,WAAW,iBAAiB,SAAS,SAAS,KAAK;AAAA,MACtE;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,YAAY,SAAiB,YAAqC;AACtE,QAAI;AACF,YAAM,SAAS,IAAIA,QAAO,OAAO,UAAU;AAC3C,YAAM,YAAY,MAAM,OAAO,YAAY,OAAO;AAClD,aAAO;AAAA,IACT,SAAS,OAAO;AACd,YAAM,IAAI,MAAM,2BAA2B,KAAK,EAAE;AAAA,IACpD;AAAA,EACF;AAAA,EAEA,MAAM,cAAc,SAAiB,WAAoC;AACvE,QAAI;AACF,YAAM,mBAAmBA,QAAO,cAAc,SAAS,SAAS;AAChE,aAAO;AAAA,IACT,SAAS,OAAO;AACd,YAAM,IAAI,MAAM,6BAA6B,KAAK,EAAE;AAAA,IACtD;AAAA,EACF;AACF;;;AItUO,IAAM,kBAAN,MAAqD;AAAA,EAC1D,YACmB,OACA,QACjB;AAFiB;AACA;AAAA,EAChB;AAAA,EAEK,eAAwC;AAC9C,UAAM,iBAAiB,aAAa,KAAK,MAAM,IAAiC;AAChF,QAAI,CAAC,gBAAgB;AACnB,aAAO,CAAC,SAAyB;AAAA,IACnC;AAEA,UAAM,YAAY,eAAe,KAAK,OAAO,GAAG;AAChD,QAAI,CAAC,WAAW;AACd,aAAO,CAAC,SAAyB;AAAA,IACnC;AAEA,WAAO;AAAA,EACT;AAAA,EAEQ,qBAAmC;AACzC,UAAM,YAAY,KAAK,aAAa;AACpC,WAAO,UAAU,CAAC;AAAA,EACpB;AAAA,EAEQ,qBAAqB,UAAiC;AAC5D,UAAM,iBAAiB,KAAK,OAAO,aAAa,YAAY,KAAK,MAAM,IAAI;AAE3E,QAAI,kBAAkB,CAAC,UAAU;AAC/B,YAAMC,OAAM,aAAa,cAA8B;AACvD,UAAIA,KAAK,QAAOA;AAAA,IAClB;AAEA,QAAI,UAAU;AACZ,YAAMA,OAAM,aAAa,QAAQ;AACjC,UAAIA,KAAK,QAAOA;AAAA,IAClB;AAEA,UAAM,kBAAkB,KAAK,mBAAmB;AAChD,UAAM,MAAM,aAAa,eAAe;AACxC,WAAO,OAAO,aAAa,eAAe;AAAA,EAC5C;AAAA,EAEA,cAAc,SAAiB,UAAiC;AAC9D,UAAM,UAAU,KAAK,qBAAqB,QAAQ;AAClD,WAAO,GAAG,OAAO,YAAY,OAAO;AAAA,EACtC;AAAA,EAEA,kBAAkB,MAAc,UAAiC;AAC/D,UAAM,UAAU,KAAK,qBAAqB,QAAQ;AAClD,WAAO,GAAG,OAAO,OAAO,IAAI;AAAA,EAC9B;AAAA,EAEA,YAAY,aAA8B,UAAiC;AACzE,UAAM,UAAU,KAAK,qBAAqB,QAAQ;AAClD,WAAO,GAAG,OAAO,UAAU,WAAW;AAAA,EACxC;AAAA,EAEA,YAAY,YAAoB,UAAiC;AAC/D,UAAM,UAAU,KAAK,qBAAqB,QAAQ;AAClD,WAAO,GAAG,OAAO,UAAU,UAAU;AAAA,EACvC;AAAA,EAEA,eAAe,SAAiB,UAAiC;AAC/D,UAAM,UAAU,KAAK,qBAAqB,QAAQ;AAClD,WAAO,GAAG,OAAO,YAAY,OAAO;AAAA,EACtC;AAAA,EAEA,kBAA2C;AACzC,WAAO,KAAK,aAAa;AAAA,EAC3B;AAAA,EAEA,kBAAkB,MAAwC;AACxD,UAAM,YAAY,KAAK,aAAa;AACpC,WAAO,UAAU,KAAK,CAAC,aAAa,SAAS,YAAY,MAAM,KAAK,YAAY,CAAC;AAAA,EACnF;AAAA,EAEA,eAAe,SAA+C;AAC5D,UAAM,YAAY,KAAK,gBAAgB;AACvC,UAAM,OAAqC,CAAC;AAE5C,cAAU,QAAQ,CAAC,aAAa;AAC9B,YAAM,MAAM,aAAa,QAAQ;AACjC,UAAI,KAAK;AACP,aAAK,QAAQ,IAAI,GAAG,GAAG,YAAY,OAAO;AAAA,MAC5C;AAAA,IACF,CAAC;AAED,WAAO;AAAA,EACT;AAAA,EAEA,mBAAmB,MAA4C;AAC7D,UAAM,YAAY,KAAK,gBAAgB;AACvC,UAAM,OAAqC,CAAC;AAE5C,cAAU,QAAQ,CAAC,aAAa;AAC9B,YAAM,MAAM,aAAa,QAAQ;AACjC,UAAI,KAAK;AACP,aAAK,QAAQ,IAAI,GAAG,GAAG,OAAO,IAAI;AAAA,MACpC;AAAA,IACF,CAAC;AAED,WAAO;AAAA,EACT;AAAA,EAEA,aAAa,YAAkD;AAC7D,UAAM,YAAY,KAAK,gBAAgB;AACvC,UAAM,OAAqC,CAAC;AAE5C,cAAU,QAAQ,CAAC,aAAa;AAC9B,YAAM,MAAM,aAAa,QAAQ;AACjC,UAAI,KAAK;AACP,aAAK,QAAQ,IAAI,GAAG,GAAG,UAAU,UAAU;AAAA,MAC7C;AAAA,IACF,CAAC;AAED,WAAO;AAAA,EACT;AAAA,EAEA,gBAAgB,SAA+C;AAC7D,UAAM,YAAY,KAAK,gBAAgB;AACvC,UAAM,OAAqC,CAAC;AAE5C,cAAU,QAAQ,CAAC,aAAa;AAC9B,YAAM,MAAM,aAAa,QAAQ;AACjC,UAAI,KAAK;AACP,aAAK,QAAQ,IAAI,GAAG,GAAG,YAAY,OAAO;AAAA,MAC5C;AAAA,IACF,CAAC;AAED,WAAO;AAAA,EACT;AAAA,EAEA,aAAa,aAA4D;AACvE,UAAM,YAAY,KAAK,gBAAgB;AACvC,UAAM,OAAqC,CAAC;AAE5C,cAAU,QAAQ,CAAC,aAAa;AAC9B,YAAM,MAAM,aAAa,QAAQ;AACjC,UAAI,KAAK;AACP,aAAK,QAAQ,IAAI,GAAG,GAAG,UAAU,WAAW;AAAA,MAC9C;AAAA,IACF,CAAC;AAED,WAAO;AAAA,EACT;AACF;;;AC9IO,IAAM,mBAAmB,CAC9B,WACA,aACA,eACmB;AACnB,SAAO,CAAC,QAA0B,aAAuB;AACvD,QAAI,CAAC,SAAU,OAAM,IAAI,MAAM,GAAG,SAAS,sCAAsC;AAEjF,WAAO;AAAA,MACL,OAAO;AAAA,MACP,WAAW,WAAW,OAAO,GAAG;AAAA,MAChC,QAAQ;AAAA,MACR,SAAS,MAAM,SAAS,QAAQ;AAAA,MAChC,UAAU,IAAI,gBAAgB,QAAQ,WAAW,OAAO,GAAG,CAAC;AAAA,MAC5D,SAAS,IAAI,eAAe,QAAQ,WAAW,OAAO,GAAG,CAAC;AAAA,MAC1D,YAAY,IAAI,kBAAkB;AAAA,MAClC,UAAU,SAAS;AAAA,MACnB,UAAU,IAAI,gBAAgB,WAAW,OAAO,GAAG,GAAG,MAAM;AAAA,MAC5D,YAAY,MAAM,SAAS,WAAW;AAAA,MACtC,cAAc,MAAM,SAAS,aAAa;AAAA,MAC1C,YAAY,IAAI,kBAAkB,QAAQ,WAAW,OAAO,GAAG,CAAC;AAAA,IAClE;AAAA,EACF;AACF;;;Ad3BO,IAAM,iBAAiC;AAAA,EAC5C,OAAOC,eAAc;AAAA,EACrB,YAAY;AAAA,EACZ,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,UAAU;AAAA,EACV,SAAS;AACX;AAEO,IAAM,qBAAqC,iBAAiBA,eAAc,UAAU,OAAO;AAAA,EAChG,SAAS;AAAA,IACP,MAAMA,eAAc;AAAA,IACpB,aAAa;AAAA,IACb,SAAS;AAAA,IACT,WAAW;AAAA,IACX,YAAY;AAAA,IACZ,eAAe;AAAA,IACf,aAAa;AAAA,EACf;AAAA,EACA,SAAS;AAAA,IACP,MAAMA,eAAc;AAAA,IACpB,aAAa;AAAA,IACb,SAAS;AAAA,IACT,WAAW;AAAA,IACX,YAAY;AAAA,IACZ,eAAe;AAAA,IACf,aAAa;AAAA,EACf;AAAA,EACA,QAAQ;AAAA,IACN,MAAMA,eAAc;AAAA,IACpB,aAAa;AAAA,IACb,SAAS;AAAA,IACT,WAAW;AAAA,IACX,YAAY;AAAA,IACZ,eAAe;AAAA,IACf,aAAa;AAAA,EACf;AACF,CAAC;;;AexCD,SAAyC,iBAAAC,sBAAqB;AAGvD,IAAM,kBAAkC;AAAA,EAC7C,OAAOC,eAAc;AAAA,EACrB,YAAY;AAAA,EACZ,MAAM;AAAA,EACN,QAAQ;AAAA,EACR,UAAU;AAAA,EACV,SAAS;AACX;AAEO,IAAM,iBAAiC,iBAAiBA,eAAc,MAAM,QAAQ;AAAA,EACzF,SAAS;AAAA,IACP,MAAMA,eAAc;AAAA,IACpB,aAAa;AAAA,IACb,SAAS;AAAA,IACT,WAAW;AAAA,IACX,YAAY;AAAA,IACZ,eAAe;AAAA,IACf,aAAa;AAAA,EACf;AAAA,EACA,SAAS;AAAA,IACP,MAAMA,eAAc;AAAA,IACpB,aAAa;AAAA,IACb,SAAS;AAAA,IACT,WAAW;AAAA,IACX,YAAY;AAAA,IACZ,eAAe;AAAA,IACf,aAAa;AAAA,EACf;AAAA,EACA,QAAQ;AAAA,IACN,MAAMA,eAAc;AAAA,IACpB,aAAa;AAAA,IACb,SAAS;AAAA,IACT,WAAW;AAAA,IACX,YAAY;AAAA,IACZ,eAAe;AAAA,IACf,aAAa;AAAA,EACf;AACF,CAAC;;;ACxCD,SAA6B,iBAAAC,uBAAuC;;;ACApE,SAAyC,iBAAAC,sBAAqB;AAGvD,IAAM,iBAAiC;AAAA,EAC5C,OAAOC,eAAc;AAAA,EACrB,YAAY;AAAA,EACZ,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,UAAU;AAAA,EACV,SAAS;AACX;AAEO,IAAM,qBAAqC,iBAAiBA,eAAc,UAAU,OAAO;AAAA,EAChG,SAAS;AAAA,IACP,MAAMA,eAAc;AAAA,IACpB,aAAa;AAAA,IACb,SAAS;AAAA,IACT,WAAW;AAAA,IACX,YAAY;AAAA,IACZ,eAAe;AAAA,IACf,aAAa;AAAA,EACf;AAAA,EACA,SAAS;AAAA,IACP,MAAMA,eAAc;AAAA,IACpB,aAAa;AAAA,IACb,SAAS;AAAA,IACT,WAAW;AAAA,IACX,YAAY;AAAA,IACZ,eAAe;AAAA,IACf,aAAa;AAAA,EACf;AAAA,EACA,QAAQ;AAAA,IACN,MAAMA,eAAc;AAAA,IACpB,aAAa;AAAA,IACb,SAAS;AAAA,IACT,WAAW;AAAA,IACX,YAAY;AAAA,IACZ,eAAe;AAAA,IACf,aAAa;AAAA,EACf;AACF,CAAC;;;ACxCD,SAAyC,iBAAAC,sBAAqB;AAGvD,IAAM,kBAAkC;AAAA,EAC7C,OAAOC,eAAc;AAAA,EACrB,YAAY;AAAA,EACZ,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,UAAU;AAAA,EACV,SAAS;AACX;AAEO,IAAM,iBAAiC;AAAA,EAC5C,OAAOA,eAAc;AAAA,EACrB,YAAY;AAAA,EACZ,QAAQ;AAAA,EACR,MAAM;AAAA,EACN,UAAU;AAAA,EACV,SAAS;AACX;AAEO,IAAM,mBAAmC,iBAAiBA,eAAc,QAAQ,OAAO;AAAA,EAC5F,SAAS;AAAA,IACP,MAAMA,eAAc;AAAA,IACpB,aAAa;AAAA,IACb,SAAS;AAAA,IACT,WAAW;AAAA,IACX,YAAY;AAAA,IACZ,eAAe;AAAA,IACf,aAAa;AAAA,EACf;AAAA,EACA,SAAS;AAAA,IACP,MAAMA,eAAc;AAAA,IACpB,aAAa;AAAA,IACb,SAAS;AAAA,IACT,WAAW;AAAA,IACX,YAAY;AAAA,IACZ,eAAe;AAAA,IACf,aAAa;AAAA,EACf;AAAA,EACA,QAAQ;AAAA,IACN,MAAMA,eAAc;AAAA,IACpB,aAAa;AAAA,IACb,SAAS;AAAA,IACT,WAAW;AAAA,IACX,YAAY;AAAA,IACZ,eAAe;AAAA,IACf,aAAa;AAAA,EACf;AACF,CAAC;;;AF3CM,IAAM,oBAAoB,CAAC,QAA0B,aAAkC;AAAA,EAC5F,mBAAmB,QAAQ,QAAQ;AAAA,EACnC,eAAe,QAAQ,QAAQ;AAAA,EAC/B,mBAAmB,QAAQ,QAAQ;AAAA,EACnC,iBAAiB,QAAQ,QAAQ;AACnC;AAEO,IAAM,sBAAsB,MAAmB;AAAA,EACpDC,gBAAc;AAAA,EACdA,gBAAc;AAAA,EACdA,gBAAc;AAAA,EACdA,gBAAc;AAChB;","names":["WarpChainName","CacheTtl","WarpCache","token","WarpChainName","WarpChainName","BaseChain","WarpChainName","WarpChainName","EthereumChain","WarpCache","CacheTtl","getProviderUrl","ethers","EthereumExplorers","ArbitrumExplorers","BaseExplorers","getProviderUrl","WarpConstants","ethers","ethers","getProviderUrl","ethers","WarpConstants","getProviderUrl","ethers","url","WarpChainName","WarpChainName","WarpChainName","WarpChainName","WarpChainName","WarpChainName","WarpChainName","WarpChainName","WarpChainName"]}
1
+ {"version":3,"sources":["../src/chains/arbitrum.ts","../src/WarpEvmDataLoader.ts","../src/providers/UniswapService.ts","../src/tokens/arbitrum.ts","../src/tokens/base.ts","../src/tokens/base-sepolia.ts","../src/tokens/ethereum.ts","../src/tokens/ethereum-sepolia.ts","../src/tokens.ts","../src/WarpEvmExecutor.ts","../src/constants.ts","../src/WarpEvmResults.ts","../src/WarpEvmSerializer.ts","../src/WarpEvmExplorer.ts","../src/WarpEvmWallet.ts","../src/chains/common.ts","../src/chains/base.ts","../src/chains/combined.ts","../src/chains/ethereum.ts","../src/chains/somnia.ts"],"sourcesContent":["import { AdapterFactory, WarpChainAsset, WarpChainName } from '@vleap/warps'\nimport { createEvmAdapter } from './common'\n\nexport const NativeTokenArb: WarpChainAsset = {\n chain: WarpChainName.Arbitrum,\n identifier: 'ARB',\n symbol: 'ARB',\n name: 'Arbitrum',\n decimals: 18,\n logoUrl: 'https://vleap.ai/images/tokens/arb.svg',\n}\n\nexport const getArbitrumAdapter: AdapterFactory = createEvmAdapter(WarpChainName.Arbitrum, 'arb', {\n mainnet: {\n name: WarpChainName.Arbitrum,\n displayName: 'Arbitrum',\n chainId: '42161',\n blockTime: 1000,\n addressHrp: '0x',\n defaultApiUrl: 'https://arb1.arbitrum.io/rpc',\n nativeToken: NativeTokenArb,\n },\n testnet: {\n name: WarpChainName.Arbitrum,\n displayName: 'Arbitrum Sepolia',\n chainId: '421614',\n blockTime: 1000,\n addressHrp: '0x',\n defaultApiUrl: 'https://sepolia-rollup.arbitrum.io/rpc',\n nativeToken: NativeTokenArb,\n },\n devnet: {\n name: WarpChainName.Arbitrum,\n displayName: 'Arbitrum Sepolia',\n chainId: '421614',\n blockTime: 1000,\n addressHrp: '0x',\n defaultApiUrl: 'https://sepolia-rollup.arbitrum.io/rpc',\n nativeToken: NativeTokenArb,\n },\n})\n","import {\n AdapterWarpDataLoader,\n CacheTtl,\n getProviderUrl,\n WarpCache,\n WarpCacheKey,\n WarpChainAccount,\n WarpChainAction,\n WarpChainAsset,\n WarpChainInfo,\n WarpClientConfig,\n WarpDataLoaderOptions,\n} from '@vleap/warps'\nimport { ethers } from 'ethers'\nimport { UniswapService } from './providers'\nimport { findKnownTokenById, getKnownTokensForChain } from './tokens'\n\ninterface TokenBalance {\n tokenAddress: string\n balance: bigint\n name: string\n symbol: string\n decimals: number\n logoUrl: string\n}\n\nconst ERC20_ABI = [\n 'function balanceOf(address owner) view returns (uint256)',\n 'function decimals() view returns (uint8)',\n 'function name() view returns (string)',\n 'function symbol() view returns (string)',\n 'function totalSupply() view returns (uint256)',\n]\n\nexport class WarpEvmDataLoader implements AdapterWarpDataLoader {\n private provider: ethers.JsonRpcProvider\n private cache: WarpCache\n private uniswapService: UniswapService\n\n constructor(\n private readonly config: WarpClientConfig,\n private readonly chain: WarpChainInfo\n ) {\n const apiUrl = getProviderUrl(this.config, this.chain.name, this.config.env, this.chain.defaultApiUrl)\n const network = new ethers.Network(this.chain.name, parseInt(this.chain.chainId))\n this.provider = new ethers.JsonRpcProvider(apiUrl, network)\n this.cache = new WarpCache(config.cache?.type)\n this.uniswapService = new UniswapService(this.cache, parseInt(this.chain.chainId))\n }\n\n async getAccount(address: string): Promise<WarpChainAccount> {\n const balance = await this.provider.getBalance(address)\n\n return {\n chain: this.chain.name,\n address,\n balance,\n }\n }\n\n async getAccountAssets(address: string): Promise<WarpChainAsset[]> {\n const account = await this.getAccount(address)\n const tokenBalances = await this.getERC20TokenBalances(address)\n\n let assets: WarpChainAsset[] = account.balance > 0 ? [{ ...this.chain.nativeToken, amount: account.balance }] : []\n\n for (const tokenBalance of tokenBalances) {\n if (tokenBalance.balance > 0n) {\n assets.push({\n chain: this.chain.name,\n identifier: tokenBalance.tokenAddress,\n name: tokenBalance.name,\n symbol: tokenBalance.symbol,\n amount: tokenBalance.balance,\n decimals: tokenBalance.decimals,\n logoUrl: tokenBalance.logoUrl || '',\n })\n }\n }\n\n return assets\n }\n\n async getAsset(identifier: string): Promise<WarpChainAsset | null> {\n try {\n if (identifier === this.chain.nativeToken.identifier) {\n return this.chain.nativeToken\n }\n\n const cacheKey = WarpCacheKey.Asset(this.config.env, this.chain.name, identifier)\n const cachedAsset = this.cache.get<WarpChainAsset>(cacheKey)\n if (cachedAsset) {\n return cachedAsset\n }\n\n const knownToken = findKnownTokenById(this.chain.name, this.config.env, identifier)\n\n if (knownToken) {\n return {\n chain: this.chain.name,\n identifier,\n name: knownToken.name,\n symbol: knownToken.symbol,\n amount: 0n,\n decimals: knownToken.decimals,\n logoUrl: knownToken.logoUrl,\n }\n }\n\n const metadata = await this.getTokenMetadata(identifier)\n\n const asset: WarpChainAsset = {\n chain: this.chain.name,\n identifier,\n name: metadata.name,\n symbol: metadata.symbol,\n amount: 0n,\n decimals: metadata.decimals,\n logoUrl: metadata.logoUrl || '',\n }\n\n this.cache.set(cacheKey, asset, CacheTtl.OneHour)\n\n return asset\n } catch (error) {\n return null\n }\n }\n\n async getAction(identifier: string, awaitCompleted = false): Promise<WarpChainAction | null> {\n try {\n const tx = await this.provider.getTransaction(identifier)\n if (!tx) return null\n\n const receipt = await this.provider.getTransactionReceipt(identifier)\n const block = await this.provider.getBlock(tx.blockNumber || 'latest')\n\n return {\n chain: this.chain.name,\n id: tx.hash || identifier,\n receiver: tx.to || '',\n sender: tx.from,\n value: tx.value,\n function: tx.data && tx.data !== '0x' ? 'contract_call' : '',\n status: receipt?.status === 1 ? 'success' : receipt?.status === 0 ? 'failed' : 'pending',\n createdAt: block?.timestamp ? new Date(Number(block.timestamp) * 1000).toISOString() : new Date().toISOString(),\n error: receipt?.status === 0 ? 'Transaction failed' : null,\n tx: {\n hash: tx.hash || '',\n from: tx.from,\n to: tx.to || '',\n value: tx.value.toString(),\n data: tx.data || '0x',\n gasLimit: tx.gasLimit?.toString() || '0',\n gasPrice: tx.gasPrice?.toString() || '0',\n blockNumber: tx.blockNumber || 0,\n blockHash: tx.blockHash || '',\n transactionIndex: tx.index || 0,\n } as any,\n }\n } catch (error) {\n return null\n }\n }\n\n async getAccountActions(address: string, options?: WarpDataLoaderOptions): Promise<WarpChainAction[]> {\n return []\n }\n\n private async getERC20TokenBalances(address: string): Promise<TokenBalance[]> {\n const env = this.config.env === 'mainnet' ? 'mainnet' : 'testnet'\n const tokens = getKnownTokensForChain(this.chain.name, env)\n const balanceReqs = tokens.map((token) => this.getTokenBalance(address, token.identifier).catch(() => 0n))\n const balances = await Promise.all(balanceReqs)\n\n return balances\n .map((balance, index) => ({ balance, token: tokens[index] }))\n .filter(({ balance }) => balance > 0n)\n .map(({ balance, token }) => ({\n tokenAddress: token.identifier,\n balance,\n name: token.name,\n symbol: token.symbol,\n decimals: token.decimals || 18,\n logoUrl: token.logoUrl || '',\n }))\n }\n\n private async getTokenBalance(address: string, tokenAddress: string): Promise<bigint> {\n const contract = new ethers.Contract(tokenAddress, ERC20_ABI, this.provider)\n const balance = await contract.balanceOf(address)\n return balance\n }\n\n private async getTokenMetadata(tokenAddress: string): Promise<{ name: string; symbol: string; decimals: number; logoUrl: string }> {\n // First try to get metadata from Uniswap token list\n const uniswapMetadata = await this.uniswapService.getTokenMetadata(tokenAddress)\n if (uniswapMetadata) {\n return uniswapMetadata\n }\n\n // Fallback to contract data\n const contract = new ethers.Contract(tokenAddress, ERC20_ABI, this.provider)\n const [name, symbol, decimals] = await Promise.all([\n contract.name().catch(() => 'Unknown Token'),\n contract.symbol().catch(() => 'UNKNOWN'),\n contract.decimals().catch(() => 18),\n ])\n\n return {\n name: name || 'Unknown Token',\n symbol: symbol || 'UNKNOWN',\n decimals: decimals || 18,\n logoUrl: '',\n }\n }\n}\n","import { CacheTtl, WarpCache } from '@vleap/warps'\nimport { UniswapToken, UniswapTokenList } from '../types'\n\nexport class UniswapService {\n private static readonly UNISWAP_TOKEN_LIST_URL = 'https://tokens.uniswap.org'\n private cache: WarpCache\n private chainId: number\n\n constructor(cache: WarpCache, chainId: number) {\n this.cache = cache\n this.chainId = chainId\n }\n\n async getTokenList(): Promise<UniswapTokenList> {\n try {\n const response = await fetch(UniswapService.UNISWAP_TOKEN_LIST_URL)\n if (!response.ok) {\n throw new Error(`Failed to fetch Uniswap token list: ${response.status}`)\n }\n\n const tokenList: UniswapTokenList = await response.json()\n return tokenList\n } catch (error) {\n throw new Error(`Failed to fetch Uniswap token list: ${error}`)\n }\n }\n\n async findToken(address: string): Promise<UniswapToken | null> {\n const normalizedAddress = address.toLowerCase()\n const cacheKey = `uniswap:token:${this.chainId}:${normalizedAddress}`\n\n // Check cache first\n const cachedToken = this.cache.get<UniswapToken>(cacheKey)\n if (cachedToken) {\n return cachedToken\n }\n\n try {\n const tokenList = await this.getTokenList()\n const token = tokenList.tokens.find((token: UniswapToken) => token.address.toLowerCase() === normalizedAddress) || null\n\n // Additional safety check: if we found a token, make sure it's for the right chain\n if (token && token.chainId !== this.chainId) {\n return null // Wrong chain, don't return it\n }\n\n // Cache the result (including null results to avoid repeated fetches)\n if (token) {\n this.cache.set(cacheKey, token, CacheTtl.OneHour)\n } else {\n // Cache null results for a shorter time to allow for new tokens\n this.cache.set(cacheKey, null, CacheTtl.OneMinute * 5)\n }\n\n return token\n } catch (error) {\n // If we can't fetch the list, return null (fallback to contract data)\n return null\n }\n }\n\n async getTokenMetadata(address: string): Promise<{\n name: string\n symbol: string\n decimals: number\n logoUrl: string\n } | null> {\n const normalizedAddress = address.toLowerCase()\n const cacheKey = `uniswap:metadata:${this.chainId}:${normalizedAddress}`\n\n // Check cache first\n const cachedMetadata = this.cache.get<{\n name: string\n symbol: string\n decimals: number\n logoUrl: string\n }>(cacheKey)\n if (cachedMetadata !== null) {\n return cachedMetadata\n }\n\n const token = await this.findToken(address)\n if (!token) {\n // Cache null result to avoid repeated lookups\n this.cache.set(cacheKey, null, CacheTtl.OneMinute * 5)\n return null\n }\n\n const metadata = {\n name: token.name,\n symbol: token.symbol,\n decimals: token.decimals,\n logoUrl: token.logoURI,\n }\n\n // Cache the metadata result\n this.cache.set(cacheKey, metadata, CacheTtl.OneHour)\n return metadata\n }\n\n async getBridgeInfo(address: string): Promise<Record<string, string> | null> {\n const normalizedAddress = address.toLowerCase()\n const cacheKey = `uniswap:bridge:${this.chainId}:${normalizedAddress}`\n\n // Check cache first\n const cachedBridgeInfo = this.cache.get<Record<string, string>>(cacheKey)\n if (cachedBridgeInfo !== null) {\n return cachedBridgeInfo\n }\n\n const token = await this.findToken(address)\n if (!token?.extensions?.bridgeInfo) {\n // Cache null result to avoid repeated lookups\n this.cache.set(cacheKey, null, CacheTtl.OneMinute * 5)\n return null\n }\n\n const bridgeInfo: Record<string, string> = {}\n for (const [chainId, info] of Object.entries(token.extensions.bridgeInfo)) {\n bridgeInfo[chainId] = (info as { tokenAddress: string }).tokenAddress\n }\n\n // Cache the bridge info result\n this.cache.set(cacheKey, bridgeInfo, CacheTtl.OneHour)\n return bridgeInfo\n }\n}\n","import { WarpChain, WarpChainAsset, WarpChainName } from '@vleap/warps'\n\nconst ArbitrumChain: WarpChain = WarpChainName.Arbitrum\n\nexport const ArbitrumTokens: WarpChainAsset[] = [\n {\n chain: ArbitrumChain,\n identifier: '0xFF970A61A04b1cA14834A43f5dE4533eBDDB5CC8',\n name: 'USD Coin',\n symbol: 'USDC',\n decimals: 6,\n logoUrl: 'https://assets.coingecko.com/coins/images/6319/small/USD_Coin_icon.png',\n },\n {\n chain: ArbitrumChain,\n identifier: '0xFd086bC7CD5C481DCC9C85ebE478A1C0b69FCbb9',\n name: 'Tether USD',\n symbol: 'USDT',\n decimals: 6,\n logoUrl: 'https://assets.coingecko.com/coins/images/325/small/Tether.png',\n },\n {\n chain: ArbitrumChain,\n identifier: '0x82aF49447D8a07e3bd95BD0d56f35241523fBab1',\n name: 'Wrapped Ether',\n symbol: 'WETH',\n decimals: 18,\n logoUrl: 'https://assets.coingecko.com/coins/images/2518/small/weth.png',\n },\n]\n","import { WarpChain, WarpChainAsset, WarpChainName } from '@vleap/warps'\n\nconst BaseChain: WarpChain = WarpChainName.Base\n\nexport const BaseTokens: WarpChainAsset[] = [\n {\n chain: BaseChain,\n identifier: '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913',\n name: 'USD Coin',\n symbol: 'USDC',\n decimals: 6,\n logoUrl: 'https://assets.coingecko.com/coins/images/6319/small/USD_Coin_icon.png',\n },\n {\n chain: BaseChain,\n identifier: '0x4200000000000000000000000000000000000006',\n name: 'Wrapped Ether',\n symbol: 'WETH',\n decimals: 18,\n logoUrl: 'https://assets.coingecko.com/coins/images/2518/small/weth.png',\n },\n {\n chain: BaseChain,\n identifier: '0x808456652fdb597867f38412077A9182bf77359F',\n name: 'Euro',\n symbol: 'EURC',\n decimals: 6,\n logoUrl: 'https://assets.coingecko.com/coins/images/26045/standard/euro.png',\n },\n {\n chain: BaseChain,\n fidentifier: '0xcbB7C0006F23900c38EB856149F799620fcb8A4a',\n name: 'Coinbase Wrapped BTC',\n symbol: 'CBETH',\n decimals: 8,\n logoUrl: 'https://assets.coingecko.com/coins/images/7598/small/wrapped_bitcoin_wbtc.png',\n },\n]\n","import { WarpChain, WarpChainAsset, WarpChainName } from '@vleap/warps'\n\nconst BaseChain: WarpChain = WarpChainName.Base\n\nexport const BaseSepoliaTokens: WarpChainAsset[] = [\n {\n chain: BaseChain,\n identifier: '0x036CbD53842c5426634e7929541eC2318f3dCF7e',\n name: 'USD',\n symbol: 'USDC',\n decimals: 6,\n logoUrl: 'https://assets.coingecko.com/coins/images/6319/small/USD_Coin_icon.png',\n },\n {\n chain: BaseChain,\n identifier: '0x808456652fdb597867f38412077A9182bf77359F',\n name: 'Euro',\n symbol: 'EURC',\n decimals: 6,\n logoUrl: 'https://assets.coingecko.com/coins/images/26045/thumb/euro-coin.png?1655394420',\n },\n {\n chain: BaseChain,\n identifier: '0xcbB7C0006F23900c38EB856149F799620fcb8A4a',\n name: 'Wrapped Bitcoin',\n symbol: 'WBTC',\n decimals: 8,\n logoUrl: 'https://assets.coingecko.com/coins/images/7598/small/wrapped_bitcoin_wbtc.png',\n },\n]\n","import { WarpChain, WarpChainAsset, WarpChainName } from '@vleap/warps'\n\nconst EthereumChain: WarpChain = WarpChainName.Ethereum\n\nexport const EthereumTokens: WarpChainAsset[] = [\n {\n chain: EthereumChain,\n identifier: '0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48',\n name: 'USD Coin',\n symbol: 'USDC',\n decimals: 6,\n logoUrl: 'https://assets.coingecko.com/coins/images/6319/small/USD_Coin_icon.png',\n },\n {\n chain: EthereumChain,\n identifier: '0xdAC17F958D2ee523a2206206994597C13D831ec7',\n name: 'Tether USD',\n symbol: 'USDT',\n decimals: 6,\n logoUrl: 'https://assets.coingecko.com/coins/images/325/small/Tether.png',\n },\n {\n chain: EthereumChain,\n identifier: '0x2260FAC5E5542a773Aa44fBCfeDf7C193bc2C599',\n name: 'Wrapped Bitcoin',\n symbol: 'WBTC',\n decimals: 8,\n logoUrl: 'https://assets.coingecko.com/coins/images/7598/small/wrapped_bitcoin_wbtc.png',\n },\n {\n chain: EthereumChain,\n identifier: '0xC02aaA39b223FE8D0A0e5C4F27eAD9083C756Cc2',\n name: 'Wrapped Ether',\n symbol: 'WETH',\n decimals: 18,\n logoUrl: 'https://assets.coingecko.com/coins/images/2518/small/weth.png',\n },\n {\n chain: EthereumChain,\n identifier: '0x6B175474E89094C44Da98b954EedeAC495271d0F',\n name: 'Dai Stablecoin',\n symbol: 'DAI',\n decimals: 18,\n logoUrl: 'https://assets.coingecko.com/coins/images/9956/small/4943.png',\n },\n]\n","import { WarpChain, WarpChainAsset, WarpChainName } from '@vleap/warps'\n\nconst EthereumChain: WarpChain = WarpChainName.Ethereum\n\nexport const EthereumSepoliaTokens: WarpChainAsset[] = [\n {\n chain: EthereumChain,\n identifier: '0x1c7D4B196Cb0C7B01d743Fbc6116a902379C7238',\n name: 'USD Coin',\n symbol: 'USDC',\n decimals: 6,\n logoUrl: 'https://assets.coingecko.com/coins/images/6319/small/USD_Coin_icon.png',\n },\n {\n chain: EthereumChain,\n identifier: '0x7169D38820dfd117C3FA1f22a697dBA58d90BA06',\n name: 'Tether USD',\n symbol: 'USDT',\n decimals: 6,\n logoUrl: 'https://assets.coingecko.com/coins/images/325/small/Tether.png',\n },\n {\n chain: EthereumChain,\n identifier: '0x7b79995e5f793A07Bc00c21412e50Ecae098E7f9',\n name: 'Wrapped Ether',\n symbol: 'WETH',\n decimals: 18,\n logoUrl: 'https://assets.coingecko.com/coins/images/2518/small/weth.png',\n },\n]\n","import { WarpChain, WarpChainAsset, WarpChainEnv } from '@vleap/warps'\nimport { ArbitrumTokens } from './tokens/arbitrum'\nimport { BaseTokens } from './tokens/base'\nimport { BaseSepoliaTokens } from './tokens/base-sepolia'\nimport { EthereumTokens } from './tokens/ethereum'\nimport { EthereumSepoliaTokens } from './tokens/ethereum-sepolia'\n\nexport const KnownTokens: Record<WarpChain, Record<string, WarpChainAsset[]>> = {\n ethereum: {\n mainnet: EthereumTokens,\n testnet: EthereumSepoliaTokens,\n devnet: EthereumSepoliaTokens,\n },\n base: {\n mainnet: BaseTokens,\n testnet: BaseSepoliaTokens,\n devnet: BaseSepoliaTokens,\n },\n arbitrum: {\n mainnet: ArbitrumTokens,\n },\n}\n\nexport const findKnownTokenById = (chain: WarpChain, env: WarpChainEnv, id: string): WarpChainAsset | null => {\n const chainTokens = KnownTokens[chain]?.[env] || []\n return chainTokens.find((token) => token.identifier === id) || null\n}\n\nexport const getKnownTokensForChain = (chainName: string, env: string = 'mainnet'): WarpChainAsset[] => {\n return KnownTokens[chainName]?.[env] || []\n}\n","import {\n AdapterWarpExecutor,\n applyResultsToMessages,\n getNextInfo,\n getProviderUrl,\n getWarpActionByIndex,\n getWarpWalletAddressFromConfig,\n WarpChainAssetValue,\n WarpChainInfo,\n WarpClientConfig,\n WarpExecutable,\n WarpExecution,\n WarpQueryAction,\n} from '@vleap/warps'\nimport { ethers } from 'ethers'\nimport { WarpEvmConstants } from './constants'\nimport { WarpEvmResults } from './WarpEvmResults'\nimport { WarpEvmSerializer } from './WarpEvmSerializer'\n\nexport class WarpEvmExecutor implements AdapterWarpExecutor {\n private readonly serializer: WarpEvmSerializer\n private readonly provider: ethers.JsonRpcProvider\n private readonly results: WarpEvmResults\n\n constructor(\n private readonly config: WarpClientConfig,\n private readonly chain: WarpChainInfo\n ) {\n this.serializer = new WarpEvmSerializer()\n const apiUrl = getProviderUrl(this.config, chain.name, this.config.env, this.chain.defaultApiUrl)\n // Create provider with explicit network configuration using ethers.Network\n const network = new ethers.Network(this.chain.name, parseInt(this.chain.chainId))\n this.provider = new ethers.JsonRpcProvider(apiUrl, network)\n this.results = new WarpEvmResults(config, this.chain)\n }\n\n async createTransaction(executable: WarpExecutable): Promise<ethers.TransactionRequest> {\n const action = getWarpActionByIndex(executable.warp, executable.action)\n\n let tx: ethers.TransactionRequest | null = null\n if (action.type === 'transfer') {\n tx = await this.createTransferTransaction(executable)\n } else if (action.type === 'contract') {\n tx = await this.createContractCallTransaction(executable)\n } else if (action.type === 'query') {\n throw new Error('WarpEvmExecutor: Invalid action type for createTransaction; Use executeQuery instead')\n } else if (action.type === 'collect') {\n throw new Error('WarpEvmExecutor: Invalid action type for createTransaction; Use executeCollect instead')\n }\n\n if (!tx) throw new Error(`WarpEvmExecutor: Invalid action type (${action.type})`)\n\n return tx\n }\n\n async createTransferTransaction(executable: WarpExecutable): Promise<ethers.TransactionRequest> {\n const userWallet = getWarpWalletAddressFromConfig(this.config, executable.chain.name)\n if (!userWallet) throw new Error('WarpEvmExecutor: createTransfer - user address not set')\n\n if (!ethers.isAddress(executable.destination)) {\n throw new Error(`WarpEvmExecutor: Invalid destination address: ${executable.destination}`)\n }\n\n // Handle token transfers\n if (executable.transfers && executable.transfers.length > 0) {\n return this.createTokenTransferTransaction(executable, userWallet)\n }\n\n // Native token transfer\n const tx: ethers.TransactionRequest = {\n to: executable.destination,\n value: executable.value,\n data: executable.data ? this.serializer.stringToTyped(executable.data) : '0x',\n }\n\n return this.estimateGasAndSetDefaults(tx, userWallet)\n }\n\n async createContractCallTransaction(executable: WarpExecutable): Promise<ethers.TransactionRequest> {\n const userWallet = getWarpWalletAddressFromConfig(this.config, executable.chain.name)\n if (!userWallet) throw new Error('WarpEvmExecutor: createContractCall - user address not set')\n\n const action = getWarpActionByIndex(executable.warp, executable.action)\n if (!action || !('func' in action) || !action.func) {\n throw new Error('WarpEvmExecutor: Contract action must have a function name')\n }\n\n // Validate destination address\n if (!ethers.isAddress(executable.destination)) {\n throw new Error(`WarpEvmExecutor: Invalid contract address: ${executable.destination}`)\n }\n\n try {\n const iface = new ethers.Interface([`function ${action.func}`])\n const encodedData = iface.encodeFunctionData(action.func, executable.args)\n\n const tx: ethers.TransactionRequest = {\n to: executable.destination,\n value: executable.value,\n data: encodedData,\n }\n\n return this.estimateGasAndSetDefaults(tx, userWallet)\n } catch (error) {\n throw new Error(`WarpEvmExecutor: Failed to encode function data for ${action.func}: ${error}`)\n }\n }\n\n private async createTokenTransferTransaction(executable: WarpExecutable, userWallet: string): Promise<ethers.TransactionRequest> {\n if (executable.transfers.length === 0) {\n throw new Error('WarpEvmExecutor: No transfers provided')\n }\n\n // Check if we have a native token defined for this chain\n if (!this.chain.nativeToken?.identifier) {\n throw new Error('WarpEvmExecutor: No native token defined for this chain')\n }\n\n // Separate native token transfers from ERC-20 token transfers\n const nativeTokenTransfers = executable.transfers.filter((transfer) => transfer.identifier === this.chain.nativeToken!.identifier)\n const erc20Transfers = executable.transfers.filter((transfer) => transfer.identifier !== this.chain.nativeToken!.identifier)\n\n // Handle single native token transfer\n if (nativeTokenTransfers.length === 1 && erc20Transfers.length === 0) {\n const transfer = nativeTokenTransfers[0]\n\n // Validate native token amount\n if (transfer.amount <= 0n) {\n throw new Error('WarpEvmExecutor: Native token transfer amount must be positive')\n }\n\n const tx: ethers.TransactionRequest = {\n to: executable.destination,\n value: transfer.amount,\n data: '0x',\n }\n\n return this.estimateGasAndSetDefaults(tx, userWallet)\n }\n\n // Handle single ERC-20 token transfer\n if (nativeTokenTransfers.length === 0 && erc20Transfers.length === 1) {\n return this.createSingleTokenTransfer(executable, erc20Transfers[0], userWallet)\n }\n\n // Handle multiple transfers (not yet supported)\n if (executable.transfers.length > 1) {\n throw new Error('WarpEvmExecutor: Multiple token transfers not yet supported')\n }\n\n // This should never happen, but just in case\n throw new Error('WarpEvmExecutor: Invalid transfer configuration')\n }\n\n private async createSingleTokenTransfer(\n executable: WarpExecutable,\n transfer: WarpChainAssetValue,\n userWallet: string\n ): Promise<ethers.TransactionRequest> {\n if (!ethers.isAddress(transfer.identifier)) {\n throw new Error(`WarpEvmExecutor: Invalid token address: ${transfer.identifier}`)\n }\n\n // ERC-20 transfer function signature: transfer(address to, uint256 amount)\n const transferInterface = new ethers.Interface(['function transfer(address to, uint256 amount) returns (bool)'])\n\n const encodedData = transferInterface.encodeFunctionData('transfer', [executable.destination, transfer.amount])\n\n const tx: ethers.TransactionRequest = {\n to: transfer.identifier, // Token contract address\n value: 0n, // No native token value for ERC-20 transfers\n data: encodedData,\n }\n\n return this.estimateGasAndSetDefaults(tx, userWallet)\n }\n\n async executeQuery(executable: WarpExecutable): Promise<WarpExecution> {\n const action = getWarpActionByIndex(executable.warp, executable.action) as WarpQueryAction\n if (action.type !== 'query') {\n throw new Error(`WarpEvmExecutor: Invalid action type for executeQuery: ${action.type}`)\n }\n if (!action.func) {\n throw new Error('WarpEvmExecutor: Query action must have a function name')\n }\n\n // Validate destination address\n if (!ethers.isAddress(executable.destination)) {\n throw new Error(`WarpEvmExecutor: Invalid contract address for query: ${executable.destination}`)\n }\n\n try {\n const iface = new ethers.Interface([`function ${action.func}`])\n const encodedData = iface.encodeFunctionData(action.func, executable.args)\n\n const result = await this.provider.call({\n to: executable.destination,\n data: encodedData,\n })\n\n const decodedResult = iface.decodeFunctionResult(action.func, result)\n const isSuccess = true\n\n const { values, valuesRaw, results } = await this.results.extractQueryResults(\n executable.warp,\n decodedResult,\n executable.action,\n executable.resolvedInputs\n )\n\n const next = getNextInfo(this.config, [], executable.warp, executable.action, results)\n\n return {\n success: isSuccess,\n warp: executable.warp,\n action: executable.action,\n user: getWarpWalletAddressFromConfig(this.config, executable.chain.name),\n txHash: null,\n tx: null,\n next,\n values,\n valuesRaw,\n results,\n messages: applyResultsToMessages(executable.warp, results),\n }\n } catch (error) {\n return {\n success: false,\n warp: executable.warp,\n action: executable.action,\n user: getWarpWalletAddressFromConfig(this.config, executable.chain.name),\n txHash: null,\n tx: null,\n next: null,\n values: [],\n valuesRaw: [],\n results: {},\n messages: {},\n }\n }\n }\n\n private async estimateGasAndSetDefaults(tx: ethers.TransactionRequest, from: string): Promise<ethers.TransactionRequest> {\n try {\n const gasEstimate = await this.provider.estimateGas({\n ...tx,\n from,\n })\n\n // Validate gas estimate\n if (gasEstimate < BigInt(WarpEvmConstants.Validation.MinGasLimit)) {\n throw new Error(`Gas estimate too low: ${gasEstimate}`)\n }\n if (gasEstimate > BigInt(WarpEvmConstants.Validation.MaxGasLimit)) {\n throw new Error(`Gas estimate too high: ${gasEstimate}`)\n }\n\n const feeData = await this.provider.getFeeData()\n\n // Handle both EIP-1559 and legacy gas pricing\n if (feeData.maxFeePerGas && feeData.maxPriorityFeePerGas) {\n // EIP-1559 pricing\n return {\n ...tx,\n chainId: BigInt(this.chain.chainId),\n gasLimit: gasEstimate,\n maxFeePerGas: feeData.maxFeePerGas,\n maxPriorityFeePerGas: feeData.maxPriorityFeePerGas,\n }\n } else if (feeData.gasPrice) {\n // Legacy pricing\n return {\n ...tx,\n chainId: BigInt(this.chain.chainId),\n gasLimit: gasEstimate,\n gasPrice: feeData.gasPrice,\n }\n } else {\n // Fallback to default values\n return {\n ...tx,\n chainId: BigInt(this.chain.chainId),\n gasLimit: gasEstimate,\n gasPrice: ethers.parseUnits(WarpEvmConstants.GasPrice.Default, 'wei'),\n }\n }\n } catch (error) {\n // If gas estimation fails, use default values based on transaction type\n let defaultGasLimit = BigInt(WarpEvmConstants.GasLimit.Default)\n\n // Determine gas limit based on transaction type\n if (tx.data && tx.data !== '0x') {\n // Check if this is a token transfer by looking for ERC-20 transfer function signature\n if (tx.data.startsWith('0xa9059cbb')) {\n // transfer(address,uint256) function signature\n defaultGasLimit = BigInt(WarpEvmConstants.GasLimit.TokenTransfer)\n } else {\n defaultGasLimit = BigInt(WarpEvmConstants.GasLimit.ContractCall)\n }\n } else {\n defaultGasLimit = BigInt(WarpEvmConstants.GasLimit.Transfer)\n }\n\n return {\n ...tx,\n chainId: BigInt(this.chain.chainId),\n gasLimit: defaultGasLimit,\n gasPrice: ethers.parseUnits(WarpEvmConstants.GasPrice.Default, 'wei'),\n }\n }\n }\n\n async signMessage(message: string, privateKey: string): Promise<string> {\n try {\n const wallet = new ethers.Wallet(privateKey)\n const signature = await wallet.signMessage(message)\n return signature\n } catch (error) {\n throw new Error(`Failed to sign message: ${error}`)\n }\n }\n\n async verifyMessage(message: string, signature: string): Promise<string> {\n try {\n const recoveredAddress = ethers.verifyMessage(message, signature)\n return recoveredAddress\n } catch (error) {\n throw new Error(`Failed to verify message: ${error}`)\n }\n }\n}\n","export const WarpEvmConstants = {\n GasLimit: {\n Default: 21000,\n ContractCall: 100000,\n ContractDeploy: 500000,\n Transfer: 21000,\n TokenTransfer: 65000, // ERC-20 transfer gas limit\n Approve: 46000,\n Swap: 200000,\n },\n GasPrice: {\n Default: '20000000000',\n },\n Validation: {\n MinGasLimit: 21000,\n MaxGasLimit: 30000000,\n },\n}\n\nexport enum EthereumExplorers {\n Etherscan = 'etherscan',\n EtherscanSepolia = 'etherscan_sepolia',\n Ethplorer = 'ethplorer',\n Blockscout = 'blockscout',\n BlockscoutSepolia = 'blockscout_sepolia',\n}\n\nexport enum ArbitrumExplorers {\n Arbiscan = 'arbiscan',\n ArbiscanSepolia = 'arbiscan_sepolia',\n BlockscoutArbitrum = 'blockscout_arbitrum',\n BlockscoutArbitrumSepolia = 'blockscout_arbitrum_sepolia',\n}\n\nexport enum BaseExplorers {\n Basescan = 'basescan',\n BasescanSepolia = 'basescan_sepolia',\n BlockscoutBase = 'blockscout_base',\n BlockscoutBaseSepolia = 'blockscout_base_sepolia',\n}\n\nexport type ExplorerName = EthereumExplorers | ArbitrumExplorers | BaseExplorers\n\nexport const EvmExplorers = {\n ethereum: {\n mainnet: [EthereumExplorers.Etherscan, EthereumExplorers.Ethplorer, EthereumExplorers.Blockscout] as const,\n testnet: [EthereumExplorers.EtherscanSepolia, EthereumExplorers.BlockscoutSepolia] as const,\n devnet: [EthereumExplorers.EtherscanSepolia, EthereumExplorers.BlockscoutSepolia] as const,\n },\n arbitrum: {\n mainnet: [ArbitrumExplorers.Arbiscan, ArbitrumExplorers.BlockscoutArbitrum] as const,\n testnet: [ArbitrumExplorers.ArbiscanSepolia, ArbitrumExplorers.BlockscoutArbitrumSepolia] as const,\n devnet: [ArbitrumExplorers.ArbiscanSepolia, ArbitrumExplorers.BlockscoutArbitrumSepolia] as const,\n },\n base: {\n mainnet: [BaseExplorers.Basescan, BaseExplorers.BlockscoutBase] as const,\n testnet: [BaseExplorers.BasescanSepolia, BaseExplorers.BlockscoutBaseSepolia] as const,\n devnet: [BaseExplorers.BasescanSepolia, BaseExplorers.BlockscoutBaseSepolia] as const,\n },\n} as const\n\nexport const ExplorerUrls: Record<ExplorerName, string> = {\n [EthereumExplorers.Etherscan]: 'https://etherscan.io',\n [EthereumExplorers.EtherscanSepolia]: 'https://sepolia.etherscan.io',\n [EthereumExplorers.Ethplorer]: 'https://ethplorer.io',\n [EthereumExplorers.Blockscout]: 'https://eth.blockscout.com',\n [EthereumExplorers.BlockscoutSepolia]: 'https://sepolia.blockscout.com',\n\n [ArbitrumExplorers.Arbiscan]: 'https://arbiscan.io',\n [ArbitrumExplorers.ArbiscanSepolia]: 'https://sepolia.arbiscan.io',\n [ArbitrumExplorers.BlockscoutArbitrum]: 'https://arbitrum.blockscout.com',\n [ArbitrumExplorers.BlockscoutArbitrumSepolia]: 'https://sepolia.blockscout.com',\n\n [BaseExplorers.Basescan]: 'https://basescan.org',\n [BaseExplorers.BasescanSepolia]: 'https://sepolia.basescan.org',\n [BaseExplorers.BlockscoutBase]: 'https://base.blockscout.com',\n [BaseExplorers.BlockscoutBaseSepolia]: 'https://sepolia.blockscout.com',\n}\n","import {\n AdapterWarpResults,\n evaluateResultsCommon,\n getProviderUrl,\n getWarpWalletAddressFromConfig,\n parseResultsOutIndex,\n ResolvedInput,\n Warp,\n WarpChainInfo,\n WarpClientConfig,\n WarpConstants,\n WarpExecution,\n WarpExecutionResults,\n} from '@vleap/warps'\nimport { ethers } from 'ethers'\nimport { WarpEvmSerializer } from './WarpEvmSerializer'\n\nexport class WarpEvmResults implements AdapterWarpResults {\n private readonly serializer: WarpEvmSerializer\n private readonly provider: ethers.JsonRpcProvider\n\n constructor(\n private readonly config: WarpClientConfig,\n private readonly chain?: WarpChainInfo\n ) {\n this.serializer = new WarpEvmSerializer()\n // Use chain-specific provider if available, otherwise fallback to ethereum\n if (this.chain) {\n const apiUrl = getProviderUrl(this.config, this.chain.name, this.config.env, this.chain.defaultApiUrl)\n const network = new ethers.Network(this.chain.name, parseInt(this.chain.chainId))\n this.provider = new ethers.JsonRpcProvider(apiUrl, network)\n } else {\n // Fallback for backward compatibility\n const apiUrl = getProviderUrl(this.config, 'ethereum', this.config.env, 'https://ethereum-rpc.publicnode.com')\n const network = new ethers.Network('ethereum', 1)\n this.provider = new ethers.JsonRpcProvider(apiUrl, network)\n }\n }\n\n async getTransactionExecutionResults(warp: Warp, tx: ethers.TransactionReceipt): Promise<WarpExecution> {\n const success = tx.status === 1\n const gasUsed = tx.gasUsed?.toString() || '0'\n const gasPrice = tx.gasPrice?.toString() || '0'\n const blockNumber = tx.blockNumber?.toString() || '0'\n const transactionHash = tx.hash\n\n const logs = tx.logs.map((log) => ({\n address: log.address,\n topics: log.topics,\n data: log.data,\n blockNumber: log.blockNumber?.toString() || '0',\n transactionHash: log.transactionHash,\n index: log.index?.toString() || '0',\n }))\n\n return {\n success,\n warp,\n action: 0,\n user: getWarpWalletAddressFromConfig(this.config, 'evm'),\n txHash: transactionHash,\n tx,\n next: null,\n values: [transactionHash, blockNumber, gasUsed, gasPrice, ...(logs.length > 0 ? logs : [])],\n valuesRaw: [transactionHash, blockNumber, gasUsed, gasPrice, ...(logs.length > 0 ? logs : [])],\n results: {},\n messages: {},\n }\n }\n\n async extractQueryResults(\n warp: Warp,\n typedValues: any[],\n actionIndex: number,\n inputs: ResolvedInput[]\n ): Promise<{ values: any[]; valuesRaw: any[]; results: WarpExecutionResults }> {\n const values = typedValues.map((t) => this.serializer.typedToString(t))\n const valuesRaw = typedValues.map((t) => this.serializer.typedToNative(t)[1])\n let results: WarpExecutionResults = {}\n\n if (!warp.results) return { values, valuesRaw, results }\n\n const getNestedValue = (path: string): unknown => {\n const indices = path\n .split('.')\n .slice(1)\n .map((i) => parseInt(i) - 1)\n if (indices.length === 0) return undefined\n let value: any = valuesRaw[indices[0]]\n for (let i = 1; i < indices.length; i++) {\n if (value === undefined || value === null) return undefined\n value = value[indices[i]]\n }\n return value\n }\n\n for (const [key, path] of Object.entries(warp.results)) {\n if (path.startsWith(WarpConstants.Transform.Prefix)) continue\n const currentActionIndex = parseResultsOutIndex(path)\n if (currentActionIndex !== null && currentActionIndex !== actionIndex) {\n results[key] = null\n continue\n }\n if (path.startsWith('out.') || path === 'out' || path.startsWith('out[')) {\n results[key] = getNestedValue(path) || null\n } else {\n results[key] = path\n }\n }\n\n return { values, valuesRaw, results: await evaluateResultsCommon(warp, results, actionIndex, inputs) }\n }\n\n async getTransactionStatus(\n txHash: string\n ): Promise<{ status: 'pending' | 'confirmed' | 'failed'; blockNumber?: number; gasUsed?: bigint }> {\n try {\n const receipt = await this.provider.getTransactionReceipt(txHash)\n\n if (!receipt) {\n return { status: 'pending' }\n }\n\n return {\n status: receipt.status === 1 ? 'confirmed' : 'failed',\n blockNumber: receipt.blockNumber,\n gasUsed: receipt.gasUsed,\n }\n } catch (error) {\n throw new Error(`Failed to get transaction status: ${error}`)\n }\n }\n\n async getTransactionReceipt(txHash: string): Promise<ethers.TransactionReceipt | null> {\n try {\n return await this.provider.getTransactionReceipt(txHash)\n } catch (error) {\n return null\n }\n }\n}\n","import {\n AdapterWarpSerializer,\n BaseWarpActionInputType,\n WarpActionInputType,\n WarpAdapterGenericType,\n WarpConstants,\n WarpNativeValue,\n WarpSerializer,\n} from '@vleap/warps'\nimport { ethers } from 'ethers'\n\nconst SplitParamsRegex = new RegExp(`${WarpConstants.ArgParamsSeparator}(.*)`)\n\nexport class WarpEvmSerializer implements AdapterWarpSerializer {\n public readonly coreSerializer: WarpSerializer\n\n constructor() {\n this.coreSerializer = new WarpSerializer()\n }\n\n typedToString(value: any): string {\n if (typeof value === 'string') {\n if (ethers.isAddress(value)) {\n return `address:${value}`\n }\n if (ethers.isHexString(value) && !ethers.isAddress(value)) {\n return `hex:${value}`\n }\n return `string:${value}`\n }\n if (typeof value === 'number') {\n if (Number.isInteger(value)) {\n if (value >= 0 && value <= 255) return `uint8:${value}`\n if (value >= 0 && value <= 65535) return `uint16:${value}`\n if (value >= 0 && value <= 4294967295) return `uint32:${value}`\n return `uint64:${value}`\n }\n return `string:${value}`\n }\n if (typeof value === 'bigint') {\n return `biguint:${value.toString()}`\n }\n if (typeof value === 'boolean') {\n return `boolean:${value}`\n }\n if (Array.isArray(value)) {\n if (value.length === 0) return `list:string:`\n const types = value.map((item) => this.typedToString(item).split(WarpConstants.ArgParamsSeparator)[0]) as BaseWarpActionInputType[]\n const type = types[0] as BaseWarpActionInputType\n const values = value.map((item) => this.typedToString(item).split(WarpConstants.ArgParamsSeparator)[1]) as WarpNativeValue[]\n return `list:${type}:${values.join(',')}`\n }\n if (value === null || value === undefined) {\n return `string:null`\n }\n return `string:${String(value)}`\n }\n\n typedToNative(value: any): [WarpActionInputType, WarpNativeValue] {\n const stringValue = this.typedToString(value)\n const [type, ...valueParts] = stringValue.split(WarpConstants.ArgParamsSeparator)\n const nativeValue = valueParts.join(WarpConstants.ArgParamsSeparator)\n return [type, this.parseNativeValue(type, nativeValue)]\n }\n\n nativeToTyped(type: WarpActionInputType, value: WarpNativeValue): any {\n switch (type) {\n case 'string':\n return String(value)\n case 'uint8':\n case 'uint16':\n case 'uint32':\n case 'uint64':\n return BigInt(value as string | number)\n case 'biguint':\n return BigInt(value as string | number)\n case 'boolean':\n return Boolean(value)\n case 'address':\n return String(value)\n case 'hex':\n return String(value)\n default:\n if (type.startsWith('list:')) {\n const [, itemType, itemsStr] = type.split(':')\n if (!itemsStr) return []\n const items = itemsStr.split(',')\n return items.map((item) => this.nativeToTyped(itemType, item))\n }\n return String(value)\n }\n }\n\n nativeToType(type: BaseWarpActionInputType): WarpAdapterGenericType {\n switch (type) {\n case 'string':\n return 'string'\n case 'uint8':\n case 'uint16':\n case 'uint32':\n case 'uint64':\n case 'biguint':\n return 'bigint'\n case 'boolean':\n return 'boolean'\n case 'address':\n return 'string'\n case 'hex':\n return 'string'\n default:\n return 'string'\n }\n }\n\n stringToTyped(value: string): any {\n const parts = value.split(WarpConstants.ArgParamsSeparator, 2)\n if (parts.length < 2) {\n return value\n }\n\n const [type, stringValue] = parts\n\n switch (type) {\n case 'string':\n return stringValue\n case 'uint8':\n case 'uint16':\n case 'uint32':\n case 'uint64':\n return BigInt(stringValue)\n case 'biguint':\n return BigInt(stringValue)\n case 'boolean':\n return stringValue === 'true'\n case 'address':\n return stringValue\n case 'hex':\n return stringValue\n default:\n if (type.startsWith('list:')) {\n const [, itemType, itemsStr] = type.split(':')\n if (!itemsStr) return []\n const items = itemsStr.split(',')\n return items.map((item) => this.stringToTyped(`${itemType}:${item}`))\n }\n return stringValue\n }\n }\n\n private parseNativeValue(type: string, value: string): WarpNativeValue {\n switch (type) {\n case 'string':\n return value\n case 'uint8':\n case 'uint16':\n case 'uint32':\n case 'uint64':\n case 'biguint':\n return BigInt(value)\n case 'boolean':\n return value === 'true'\n case 'address':\n return value\n case 'hex':\n return value\n default:\n return value\n }\n }\n}\n","import { AdapterWarpExplorer, WarpChainInfo, WarpClientConfig } from '@vleap/warps'\nimport { EvmExplorers, ExplorerName, ExplorerUrls } from './constants'\n\nexport class WarpEvmExplorer implements AdapterWarpExplorer {\n constructor(\n private readonly chain: WarpChainInfo,\n private readonly config: WarpClientConfig\n ) {}\n\n private getExplorers(): readonly ExplorerName[] {\n const chainExplorers = EvmExplorers[this.chain.name as keyof typeof EvmExplorers]\n if (!chainExplorers) {\n return ['Default' as ExplorerName]\n }\n\n const explorers = chainExplorers[this.config.env]\n if (!explorers) {\n return ['Default' as ExplorerName]\n }\n\n return explorers\n }\n\n private getPrimaryExplorer(): ExplorerName {\n const explorers = this.getExplorers()\n return explorers[0]\n }\n\n private getExplorerUrlByName(explorer?: ExplorerName): string {\n const userPreference = this.config.preferences?.explorers?.[this.chain.name]\n\n if (userPreference && !explorer) {\n const url = ExplorerUrls[userPreference as ExplorerName]\n if (url) return url\n }\n\n if (explorer) {\n const url = ExplorerUrls[explorer]\n if (url) return url\n }\n\n const primaryExplorer = this.getPrimaryExplorer()\n const url = ExplorerUrls[primaryExplorer]\n return url || ExplorerUrls[primaryExplorer]\n }\n\n getAccountUrl(address: string, explorer?: ExplorerName): string {\n const baseUrl = this.getExplorerUrlByName(explorer)\n return `${baseUrl}/address/${address}`\n }\n\n getTransactionUrl(hash: string, explorer?: ExplorerName): string {\n const baseUrl = this.getExplorerUrlByName(explorer)\n return `${baseUrl}/tx/${hash}`\n }\n\n getBlockUrl(blockNumber: string | number, explorer?: ExplorerName): string {\n const baseUrl = this.getExplorerUrlByName(explorer)\n return `${baseUrl}/block/${blockNumber}`\n }\n\n getAssetUrl(identifier: string, explorer?: ExplorerName): string {\n const baseUrl = this.getExplorerUrlByName(explorer)\n return `${baseUrl}/token/${identifier}`\n }\n\n getContractUrl(address: string, explorer?: ExplorerName): string {\n const baseUrl = this.getExplorerUrlByName(explorer)\n return `${baseUrl}/address/${address}`\n }\n\n getAllExplorers(): readonly ExplorerName[] {\n return this.getExplorers()\n }\n\n getExplorerByName(name: string): ExplorerName | undefined {\n const explorers = this.getExplorers()\n return explorers.find((explorer) => explorer.toLowerCase() === name.toLowerCase())\n }\n\n getAccountUrls(address: string): Record<ExplorerName, string> {\n const explorers = this.getAllExplorers()\n const urls: Record<ExplorerName, string> = {} as Record<ExplorerName, string>\n\n explorers.forEach((explorer) => {\n const url = ExplorerUrls[explorer]\n if (url) {\n urls[explorer] = `${url}/address/${address}`\n }\n })\n\n return urls\n }\n\n getTransactionUrls(hash: string): Record<ExplorerName, string> {\n const explorers = this.getAllExplorers()\n const urls: Record<ExplorerName, string> = {} as Record<ExplorerName, string>\n\n explorers.forEach((explorer) => {\n const url = ExplorerUrls[explorer]\n if (url) {\n urls[explorer] = `${url}/tx/${hash}`\n }\n })\n\n return urls\n }\n\n getAssetUrls(identifier: string): Record<ExplorerName, string> {\n const explorers = this.getAllExplorers()\n const urls: Record<ExplorerName, string> = {} as Record<ExplorerName, string>\n\n explorers.forEach((explorer) => {\n const url = ExplorerUrls[explorer]\n if (url) {\n urls[explorer] = `${url}/token/${identifier}`\n }\n })\n\n return urls\n }\n\n getContractUrls(address: string): Record<ExplorerName, string> {\n const explorers = this.getAllExplorers()\n const urls: Record<ExplorerName, string> = {} as Record<ExplorerName, string>\n\n explorers.forEach((explorer) => {\n const url = ExplorerUrls[explorer]\n if (url) {\n urls[explorer] = `${url}/address/${address}`\n }\n })\n\n return urls\n }\n\n getBlockUrls(blockNumber: string | number): Record<ExplorerName, string> {\n const explorers = this.getAllExplorers()\n const urls: Record<ExplorerName, string> = {} as Record<ExplorerName, string>\n\n explorers.forEach((explorer) => {\n const url = ExplorerUrls[explorer]\n if (url) {\n urls[explorer] = `${url}/block/${blockNumber}`\n }\n })\n\n return urls\n }\n}\n","import { AdapterWarpWallet, WarpAdapterGenericTransaction, WarpChainInfo, WarpClientConfig } from '@vleap/warps'\nimport { ethers } from 'ethers'\n\nexport class WarpEvmWallet implements AdapterWarpWallet {\n private wallet: ethers.Wallet | null = null\n private provider: ethers.JsonRpcProvider\n\n constructor(\n private config: WarpClientConfig,\n private chain: WarpChainInfo\n ) {\n this.provider = new ethers.JsonRpcProvider(chain.defaultApiUrl || 'https://rpc.sepolia.org')\n }\n\n async signTransaction(tx: WarpAdapterGenericTransaction): Promise<WarpAdapterGenericTransaction> {\n if (!this.wallet) {\n throw new Error('Wallet not initialized - no private key provided')\n }\n\n if (!tx || typeof tx !== 'object') {\n throw new Error('Invalid transaction object')\n }\n\n const txRequest = {\n to: tx.to,\n data: tx.data,\n value: tx.value || 0,\n gasLimit: tx.gasLimit,\n maxFeePerGas: tx.maxFeePerGas,\n maxPriorityFeePerGas: tx.maxPriorityFeePerGas,\n nonce: tx.nonce,\n chainId: tx.chainId,\n }\n\n const signedTx = await this.wallet.signTransaction(txRequest)\n return { ...tx, signature: signedTx }\n }\n\n async signMessage(message: string): Promise<string> {\n if (!this.wallet) {\n throw new Error('Wallet not initialized - no private key provided')\n }\n\n return await this.wallet.signMessage(message)\n }\n\n async sendTransaction(tx: WarpAdapterGenericTransaction): Promise<string> {\n if (!tx || typeof tx !== 'object') {\n throw new Error('Invalid transaction object')\n }\n\n if (!tx.signature) {\n throw new Error('Transaction must be signed before sending')\n }\n\n if (!this.wallet) {\n throw new Error('Wallet not initialized - no private key provided')\n }\n\n const connectedWallet = this.wallet.connect(this.provider)\n const txResponse = await connectedWallet.sendTransaction(tx as any)\n return txResponse.hash\n }\n\n create(mnemonic: string): { address: string; privateKey: string; mnemonic: string } {\n const wallet = ethers.Wallet.fromPhrase(mnemonic)\n return { address: wallet.address, privateKey: wallet.privateKey, mnemonic }\n }\n\n generate(): { address: string; privateKey: string; mnemonic: string } {\n const wallet = ethers.Wallet.createRandom()\n return { address: wallet.address, privateKey: wallet.privateKey, mnemonic: wallet.mnemonic?.phrase || '' }\n }\n\n getAddress(): string | null {\n return this.wallet?.address || null\n }\n}\n","import { Adapter, AdapterFactory, WarpChainEnv, WarpChainInfo, WarpClientConfig } from '@vleap/warps'\nimport { WarpEvmDataLoader } from '../WarpEvmDataLoader'\nimport { WarpEvmExecutor } from '../WarpEvmExecutor'\nimport { WarpEvmExplorer } from '../WarpEvmExplorer'\nimport { WarpEvmResults } from '../WarpEvmResults'\nimport { WarpEvmSerializer } from '../WarpEvmSerializer'\nimport { WarpEvmWallet } from '../WarpEvmWallet'\n\nexport const createEvmAdapter = (\n chainName: string,\n chainPrefix: string,\n chainInfos: Record<WarpChainEnv, WarpChainInfo>\n): AdapterFactory => {\n return (config: WarpClientConfig, fallback?: Adapter) => {\n if (!fallback) throw new Error(`${chainName} adapter requires a fallback adapter`)\n\n return {\n chain: chainName,\n chainInfo: chainInfos[config.env],\n prefix: chainPrefix,\n builder: () => fallback.builder(),\n executor: new WarpEvmExecutor(config, chainInfos[config.env]),\n results: new WarpEvmResults(config, chainInfos[config.env]),\n serializer: new WarpEvmSerializer(),\n registry: fallback.registry,\n explorer: new WarpEvmExplorer(chainInfos[config.env], config),\n abiBuilder: () => fallback.abiBuilder(),\n brandBuilder: () => fallback.brandBuilder(),\n dataLoader: new WarpEvmDataLoader(config, chainInfos[config.env]),\n wallet: new WarpEvmWallet(config, chainInfos[config.env]),\n }\n }\n}\n","import { AdapterFactory, WarpChainAsset, WarpChainName } from '@vleap/warps'\nimport { createEvmAdapter } from './common'\n\nexport const NativeTokenBase: WarpChainAsset = {\n chain: WarpChainName.Base,\n identifier: 'ETH',\n name: 'Ether',\n symbol: 'ETH',\n decimals: 18,\n logoUrl: 'https://vleap.ai/images/tokens/eth.svg',\n}\n\nexport const getBaseAdapter: AdapterFactory = createEvmAdapter(WarpChainName.Base, 'base', {\n mainnet: {\n name: WarpChainName.Base,\n displayName: 'Base',\n chainId: '8453',\n blockTime: 2000,\n addressHrp: '0x',\n defaultApiUrl: 'https://mainnet.base.org',\n nativeToken: NativeTokenBase,\n },\n testnet: {\n name: WarpChainName.Base,\n displayName: 'Base Sepolia',\n chainId: '84532',\n blockTime: 2000,\n addressHrp: '0x',\n defaultApiUrl: 'https://sepolia.base.org',\n nativeToken: NativeTokenBase,\n },\n devnet: {\n name: WarpChainName.Base,\n displayName: 'Base Sepolia',\n chainId: '84532',\n blockTime: 2000,\n addressHrp: '0x',\n defaultApiUrl: 'https://sepolia.base.org',\n nativeToken: NativeTokenBase,\n },\n})\n","import { Adapter, WarpChain, WarpChainName, WarpClientConfig } from '@vleap/warps'\nimport { getArbitrumAdapter } from './arbitrum'\nimport { getBaseAdapter } from './base'\nimport { getEthereumAdapter } from './ethereum'\nimport { getSomniaAdapter } from './somnia'\n\nexport const getAllEvmAdapters = (config: WarpClientConfig, fallback?: Adapter): Adapter[] => [\n getEthereumAdapter(config, fallback),\n getBaseAdapter(config, fallback),\n getArbitrumAdapter(config, fallback),\n getSomniaAdapter(config, fallback),\n]\n\nexport const getAllEvmChainNames = (): WarpChain[] => [\n WarpChainName.Ethereum,\n WarpChainName.Base,\n WarpChainName.Arbitrum,\n WarpChainName.Somnia,\n]\n","import { AdapterFactory, WarpChainAsset, WarpChainName } from '@vleap/warps'\nimport { createEvmAdapter } from './common'\n\nexport const NativeTokenEth: WarpChainAsset = {\n chain: WarpChainName.Ethereum,\n identifier: 'ETH',\n symbol: 'ETH',\n name: 'Ether',\n decimals: 18,\n logoUrl: 'https://vleap.ai/images/tokens/eth.svg',\n}\n\nexport const getEthereumAdapter: AdapterFactory = createEvmAdapter(WarpChainName.Ethereum, 'eth', {\n mainnet: {\n name: WarpChainName.Ethereum,\n displayName: 'Ethereum Mainnet',\n chainId: '1',\n blockTime: 12000,\n addressHrp: '0x',\n defaultApiUrl: 'https://ethereum-rpc.publicnode.com',\n nativeToken: NativeTokenEth,\n },\n testnet: {\n name: WarpChainName.Ethereum,\n displayName: 'Ethereum Sepolia',\n chainId: '11155111',\n blockTime: 12000,\n addressHrp: '0x',\n defaultApiUrl: 'https://ethereum-sepolia-rpc.publicnode.com',\n nativeToken: NativeTokenEth,\n },\n devnet: {\n name: WarpChainName.Ethereum,\n displayName: 'Ethereum Sepolia',\n chainId: '11155111',\n blockTime: 12000,\n addressHrp: '0x',\n defaultApiUrl: 'https://ethereum-sepolia-rpc.publicnode.com',\n nativeToken: NativeTokenEth,\n },\n})\n","import { AdapterFactory, WarpChainAsset, WarpChainName } from '@vleap/warps'\nimport { createEvmAdapter } from './common'\n\nexport const NativeTokenSomi: WarpChainAsset = {\n chain: WarpChainName.Somnia,\n identifier: 'SOMI',\n symbol: 'SOMI',\n name: 'Somnia',\n decimals: 18,\n logoUrl: 'https://assets.coingecko.com/coins/images/68061/standard/somniacg.png?1754641117',\n}\n\nexport const NativeTokenStt: WarpChainAsset = {\n chain: WarpChainName.Somnia,\n identifier: 'STT',\n symbol: 'STT',\n name: 'Somnia Testnet Token',\n decimals: 18,\n logoUrl: 'https://assets.coingecko.com/coins/images/68061/standard/somniacg.png?1754641117',\n}\n\nexport const getSomniaAdapter: AdapterFactory = createEvmAdapter(WarpChainName.Somnia, 'eth', {\n mainnet: {\n name: WarpChainName.Somnia,\n displayName: 'Somnia Mainnet',\n chainId: '5031',\n blockTime: 100,\n addressHrp: '0x',\n defaultApiUrl: 'https://api.infra.mainnet.somnia.network/',\n nativeToken: NativeTokenSomi,\n },\n testnet: {\n name: WarpChainName.Somnia,\n displayName: 'Somnia Testnet',\n chainId: '50312',\n blockTime: 100,\n addressHrp: '0x',\n defaultApiUrl: 'https://dream-rpc.somnia.network/',\n nativeToken: NativeTokenStt,\n },\n devnet: {\n name: WarpChainName.Somnia,\n displayName: 'Somnia Testnet',\n chainId: '50312',\n blockTime: 100,\n addressHrp: '0x',\n defaultApiUrl: 'https://dream-rpc.somnia.network',\n nativeToken: NativeTokenStt,\n },\n})\n"],"mappings":"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","names":["WarpChainName","CacheTtl","WarpCache","token","WarpChainName","WarpChainName","BaseChain","WarpChainName","WarpChainName","EthereumChain","WarpCache","CacheTtl","getProviderUrl","getWarpWalletAddressFromConfig","ethers","EthereumExplorers","ArbitrumExplorers","BaseExplorers","getProviderUrl","WarpConstants","ethers","ethers","getProviderUrl","ethers","WarpConstants","getProviderUrl","ethers","getWarpWalletAddressFromConfig","url","ethers","WarpChainName","WarpChainName","WarpChainName","WarpChainName","WarpChainName","WarpChainName","WarpChainName","WarpChainName","WarpChainName"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vleap/warps-adapter-evm",
3
- "version": "0.2.0-alpha.26",
3
+ "version": "0.2.0-alpha.28",
4
4
  "description": "EVM adapter for Warps SDK",
5
5
  "type": "module",
6
6
  "types": "./dist/index.d.ts",
@@ -26,8 +26,8 @@
26
26
  ],
27
27
  "devDependencies": {
28
28
  "@types/jest": "^30.0.0",
29
- "jest": "^30.0.5",
30
- "jest-environment-jsdom": "^30.0.5",
29
+ "jest": "^30.1.3",
30
+ "jest-environment-jsdom": "^30.1.2",
31
31
  "jest-fetch-mock": "^3.0.3",
32
32
  "ts-jest": "^29.4.1",
33
33
  "tsup": "^8.5.0",
@@ -38,6 +38,6 @@
38
38
  },
39
39
  "dependencies": {
40
40
  "ethers": "^6.15.0",
41
- "@vleap/warps": "^3.0.0-alpha.94"
41
+ "@vleap/warps": "^3.0.0-alpha.102"
42
42
  }
43
43
  }