@vleap/warps-adapter-evm 0.2.0-alpha.13 → 0.2.0-alpha.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.d.ts CHANGED
@@ -1,4 +1,4 @@
1
- import { WarpChain, AdapterFactory, WarpClientConfig, Adapter, WarpChainEnv, AdapterWarpExecutor, WarpExecutable, WarpExecution, WarpChainInfo, WarpActionInputType, AdapterWarpExplorer, AdapterWarpResults, Warp, ResolvedInput, WarpExecutionResults, AdapterWarpSerializer, WarpSerializer, WarpNativeValue, BaseWarpActionInputType, WarpAdapterGenericType } from '@vleap/warps';
1
+ import { WarpChain, AdapterFactory, WarpClientConfig, Adapter, AdapterWarpExecutor, WarpChainInfo, WarpExecutable, WarpExecution, WarpActionInputType, AdapterWarpExplorer, AdapterWarpResults, Warp, ResolvedInput, WarpExecutionResults, AdapterWarpSerializer, WarpSerializer, WarpNativeValue, BaseWarpActionInputType, WarpAdapterGenericType } from '@vleap/warps';
2
2
  import { ethers } from 'ethers';
3
3
 
4
4
  declare const ChainNameArbitrum: WarpChain;
@@ -13,19 +13,6 @@ declare const getAllEvmChainNames: () => WarpChain[];
13
13
  declare const ChainNameEthereum: WarpChain;
14
14
  declare const getEthereumAdapter: AdapterFactory;
15
15
 
16
- interface EvmChainConfig {
17
- apiUrl: string;
18
- explorerUrl: string;
19
- chainId: string;
20
- registryAddress: string;
21
- nativeToken: string;
22
- blockTime?: number;
23
- }
24
- declare const EVM_CHAIN_CONFIGS: Record<string, Record<WarpChainEnv, EvmChainConfig>>;
25
- declare const getEvmChainConfig: (chain: string | undefined, env: WarpChainEnv) => EvmChainConfig;
26
- declare const getEvmApiUrl: (env: WarpChainEnv, chain?: string) => string;
27
- declare const getEvmExplorerUrl: (env: WarpChainEnv, chain?: string) => string;
28
-
29
16
  declare const WarpEvmConstants: {
30
17
  GasLimit: {
31
18
  Default: number;
@@ -84,10 +71,11 @@ declare const ExplorerUrls: Record<ExplorerName, string>;
84
71
 
85
72
  declare class WarpEvmExecutor implements AdapterWarpExecutor {
86
73
  private readonly config;
74
+ private readonly chain;
87
75
  private readonly serializer;
88
76
  private readonly provider;
89
77
  private readonly results;
90
- constructor(config: WarpClientConfig);
78
+ constructor(config: WarpClientConfig, chain: WarpChainInfo);
91
79
  createTransaction(executable: WarpExecutable): Promise<ethers.TransactionRequest>;
92
80
  createTransferTransaction(executable: WarpExecutable): Promise<ethers.TransactionRequest>;
93
81
  createContractCallTransaction(executable: WarpExecutable): Promise<ethers.TransactionRequest>;
@@ -137,4 +125,4 @@ declare class WarpEvmSerializer implements AdapterWarpSerializer {
137
125
  private parseNativeValue;
138
126
  }
139
127
 
140
- export { ArbitrumExplorers, BaseExplorers, ChainNameArbitrum, ChainNameBase, ChainNameEthereum, EVM_CHAIN_CONFIGS, EthereumExplorers, type EvmChainConfig, EvmExplorers, type ExplorerName, ExplorerUrls, WarpEvmConstants, WarpEvmExecutor, WarpEvmExplorer, WarpEvmResults, WarpEvmSerializer, getAllEvmAdapters, getAllEvmChainNames, getArbitrumAdapter, getBaseAdapter, getEthereumAdapter, getEvmApiUrl, getEvmChainConfig, getEvmExplorerUrl };
128
+ export { ArbitrumExplorers, BaseExplorers, ChainNameArbitrum, ChainNameBase, ChainNameEthereum, EthereumExplorers, EvmExplorers, type ExplorerName, ExplorerUrls, WarpEvmConstants, WarpEvmExecutor, WarpEvmExplorer, WarpEvmResults, WarpEvmSerializer, getAllEvmAdapters, getAllEvmChainNames, getArbitrumAdapter, getBaseAdapter, getEthereumAdapter };
package/dist/index.mjs CHANGED
@@ -1,107 +1,6 @@
1
1
  // src/WarpEvmDataLoader.ts
2
+ import { getProviderUrl } from "@vleap/warps";
2
3
  import { ethers } from "ethers";
3
-
4
- // src/config.ts
5
- var EVM_CHAIN_CONFIGS = {
6
- ethereum: {
7
- mainnet: {
8
- apiUrl: "https://eth-mainnet.g.alchemy.com/v2/demo",
9
- explorerUrl: "https://etherscan.io",
10
- chainId: "1",
11
- registryAddress: "0x0000000000000000000000000000000000000000",
12
- nativeToken: "ETH",
13
- blockTime: 12e3
14
- },
15
- testnet: {
16
- apiUrl: "https://eth-sepolia.g.alchemy.com/v2/demo",
17
- explorerUrl: "https://sepolia.etherscan.io",
18
- chainId: "11155111",
19
- registryAddress: "0x0000000000000000000000000000000000000000",
20
- nativeToken: "ETH",
21
- blockTime: 12e3
22
- },
23
- devnet: {
24
- apiUrl: "http://localhost:8545",
25
- explorerUrl: "http://localhost:4000",
26
- chainId: "1337",
27
- registryAddress: "0x0000000000000000000000000000000000000000",
28
- nativeToken: "ETH",
29
- blockTime: 12e3
30
- }
31
- },
32
- arbitrum: {
33
- mainnet: {
34
- apiUrl: "https://arb-mainnet.g.alchemy.com/v2/demo",
35
- explorerUrl: "https://arbiscan.io",
36
- chainId: "42161",
37
- registryAddress: "0x0000000000000000000000000000000000000000",
38
- nativeToken: "ETH",
39
- blockTime: 1e3
40
- },
41
- testnet: {
42
- apiUrl: "https://arb-sepolia.g.alchemy.com/v2/demo",
43
- explorerUrl: "https://sepolia.arbiscan.io",
44
- chainId: "421614",
45
- registryAddress: "0x0000000000000000000000000000000000000000",
46
- nativeToken: "ETH",
47
- blockTime: 1e3
48
- },
49
- devnet: {
50
- apiUrl: "http://localhost:8545",
51
- explorerUrl: "http://localhost:4000",
52
- chainId: "1337",
53
- registryAddress: "0x0000000000000000000000000000000000000000",
54
- nativeToken: "ETH",
55
- blockTime: 1e3
56
- }
57
- },
58
- base: {
59
- mainnet: {
60
- apiUrl: "https://mainnet.base.org",
61
- explorerUrl: "https://basescan.org",
62
- chainId: "8453",
63
- registryAddress: "0x0000000000000000000000000000000000000000",
64
- nativeToken: "ETH",
65
- blockTime: 2e3
66
- },
67
- testnet: {
68
- apiUrl: "https://sepolia.base.org",
69
- explorerUrl: "https://sepolia.basescan.org",
70
- chainId: "84532",
71
- registryAddress: "0x0000000000000000000000000000000000000000",
72
- nativeToken: "ETH",
73
- blockTime: 2e3
74
- },
75
- devnet: {
76
- apiUrl: "http://localhost:8545",
77
- explorerUrl: "http://localhost:4000",
78
- chainId: "1337",
79
- registryAddress: "0x0000000000000000000000000000000000000000",
80
- nativeToken: "ETH",
81
- blockTime: 2e3
82
- }
83
- }
84
- };
85
- var DEFAULT_CHAIN = "ethereum";
86
- var getEvmChainConfig = (chain = DEFAULT_CHAIN, env) => {
87
- const chainConfigs = EVM_CHAIN_CONFIGS[chain];
88
- if (!chainConfigs) {
89
- throw new Error(`Unsupported EVM chain: ${chain}`);
90
- }
91
- const config = chainConfigs[env];
92
- if (!config) {
93
- throw new Error(`Unsupported environment ${env} for chain ${chain}`);
94
- }
95
- return config;
96
- };
97
- var getEvmApiUrl = (env, chain = DEFAULT_CHAIN) => {
98
- return getEvmChainConfig(chain, env).apiUrl;
99
- };
100
- var getEvmExplorerUrl = (env, chain = DEFAULT_CHAIN) => {
101
- return getEvmChainConfig(chain, env).explorerUrl;
102
- };
103
-
104
- // src/WarpEvmDataLoader.ts
105
4
  var ERC20_ABI = [
106
5
  "function balanceOf(address owner) view returns (uint256)",
107
6
  "function decimals() view returns (uint8)",
@@ -181,8 +80,8 @@ var WarpEvmDataLoader = class {
181
80
  constructor(config, chain) {
182
81
  this.config = config;
183
82
  this.chain = chain;
184
- this.provider = new ethers.JsonRpcProvider(getEvmApiUrl(this.config.env, this.chain.name));
185
- this.chainConfig = getEvmChainConfig(this.chain.name, this.config.env);
83
+ const apiUrl = getProviderUrl(this.config, this.chain.name, this.config.env, this.chain.defaultApiUrl);
84
+ this.provider = new ethers.JsonRpcProvider(apiUrl);
186
85
  }
187
86
  async getAccount(address) {
188
87
  try {
@@ -337,6 +236,7 @@ var WarpEvmDataLoader = class {
337
236
  import {
338
237
  applyResultsToMessages,
339
238
  getNextInfo,
239
+ getProviderUrl as getProviderUrl2,
340
240
  getWarpActionByIndex
341
241
  } from "@vleap/warps";
342
242
  import { ethers as ethers3 } from "ethers";
@@ -642,10 +542,12 @@ var WarpEvmResults = class {
642
542
 
643
543
  // src/WarpEvmExecutor.ts
644
544
  var WarpEvmExecutor = class {
645
- constructor(config) {
545
+ constructor(config, chain) {
646
546
  this.config = config;
547
+ this.chain = chain;
647
548
  this.serializer = new WarpEvmSerializer();
648
- this.provider = new ethers3.JsonRpcProvider(getEvmApiUrl(config.env));
549
+ const apiUrl = getProviderUrl2(this.config, chain.name, this.config.env, this.chain.defaultApiUrl);
550
+ this.provider = new ethers3.JsonRpcProvider(apiUrl);
649
551
  this.results = new WarpEvmResults(config);
650
552
  }
651
553
  async createTransaction(executable) {
@@ -931,7 +833,7 @@ var createEvmAdapter = (chainName, chainPrefix, chainInfos) => {
931
833
  chainInfo: chainInfos[config.env],
932
834
  prefix: chainPrefix,
933
835
  builder: () => fallback.builder(),
934
- executor: new WarpEvmExecutor(config),
836
+ executor: new WarpEvmExecutor(config, chainInfos[config.env]),
935
837
  results: new WarpEvmResults(config),
936
838
  serializer: new WarpEvmSerializer(),
937
839
  registry: fallback.registry,
@@ -952,7 +854,7 @@ var getArbitrumAdapter = createEvmAdapter(ChainNameArbitrum, "arb", {
952
854
  chainId: "421614",
953
855
  blockTime: 1e3,
954
856
  addressHrp: "0x",
955
- apiUrl: "https://sepolia-rollup.arbitrum.io/rpc",
857
+ defaultApiUrl: "https://sepolia-rollup.arbitrum.io/rpc",
956
858
  nativeToken: "ETH"
957
859
  },
958
860
  testnet: {
@@ -961,7 +863,7 @@ var getArbitrumAdapter = createEvmAdapter(ChainNameArbitrum, "arb", {
961
863
  chainId: "421613",
962
864
  blockTime: 1e3,
963
865
  addressHrp: "0x",
964
- apiUrl: "https://goerli-rollup.arbitrum.io/rpc",
866
+ defaultApiUrl: "https://goerli-rollup.arbitrum.io/rpc",
965
867
  nativeToken: "ETH"
966
868
  },
967
869
  mainnet: {
@@ -970,7 +872,7 @@ var getArbitrumAdapter = createEvmAdapter(ChainNameArbitrum, "arb", {
970
872
  chainId: "42161",
971
873
  blockTime: 1e3,
972
874
  addressHrp: "0x",
973
- apiUrl: "https://arb1.arbitrum.io/rpc",
875
+ defaultApiUrl: "https://arb1.arbitrum.io/rpc",
974
876
  nativeToken: "ETH"
975
877
  }
976
878
  });
@@ -984,7 +886,7 @@ var getBaseAdapter = createEvmAdapter(ChainNameBase, "base", {
984
886
  chainId: "8453",
985
887
  blockTime: 2e3,
986
888
  addressHrp: "0x",
987
- apiUrl: "https://mainnet.base.org",
889
+ defaultApiUrl: "https://mainnet.base.org",
988
890
  nativeToken: "ETH"
989
891
  },
990
892
  testnet: {
@@ -993,7 +895,7 @@ var getBaseAdapter = createEvmAdapter(ChainNameBase, "base", {
993
895
  chainId: "84531",
994
896
  blockTime: 2e3,
995
897
  addressHrp: "0x",
996
- apiUrl: "https://goerli.base.org",
898
+ defaultApiUrl: "https://goerli.base.org",
997
899
  nativeToken: "ETH"
998
900
  },
999
901
  devnet: {
@@ -1002,7 +904,7 @@ var getBaseAdapter = createEvmAdapter(ChainNameBase, "base", {
1002
904
  chainId: "84532",
1003
905
  blockTime: 2e3,
1004
906
  addressHrp: "0x",
1005
- apiUrl: "https://sepolia.base.org",
907
+ defaultApiUrl: "https://sepolia.base.org",
1006
908
  nativeToken: "ETH"
1007
909
  }
1008
910
  });
@@ -1016,7 +918,7 @@ var getEthereumAdapter = createEvmAdapter(ChainNameEthereum, "eth", {
1016
918
  chainId: "11155111",
1017
919
  blockTime: 12e3,
1018
920
  addressHrp: "0x",
1019
- apiUrl: "https://eth-sepolia.g.alchemy.com/v2/YOUR_API_KEY",
921
+ defaultApiUrl: "https://eth-sepolia.g.alchemy.com/v2/YOUR_API_KEY",
1020
922
  nativeToken: "ETH"
1021
923
  },
1022
924
  testnet: {
@@ -1025,7 +927,7 @@ var getEthereumAdapter = createEvmAdapter(ChainNameEthereum, "eth", {
1025
927
  chainId: "5",
1026
928
  blockTime: 12e3,
1027
929
  addressHrp: "0x",
1028
- apiUrl: "https://eth-goerli.g.alchemy.com/v2/YOUR_API_KEY",
930
+ defaultApiUrl: "https://eth-goerli.g.alchemy.com/v2/YOUR_API_KEY",
1029
931
  nativeToken: "ETH"
1030
932
  },
1031
933
  mainnet: {
@@ -1034,7 +936,7 @@ var getEthereumAdapter = createEvmAdapter(ChainNameEthereum, "eth", {
1034
936
  chainId: "1",
1035
937
  blockTime: 12e3,
1036
938
  addressHrp: "0x",
1037
- apiUrl: "https://eth-mainnet.g.alchemy.com/v2/YOUR_API_KEY",
939
+ defaultApiUrl: "https://eth-mainnet.g.alchemy.com/v2/YOUR_API_KEY",
1038
940
  nativeToken: "ETH"
1039
941
  }
1040
942
  });
@@ -1052,7 +954,6 @@ export {
1052
954
  ChainNameArbitrum,
1053
955
  ChainNameBase,
1054
956
  ChainNameEthereum,
1055
- EVM_CHAIN_CONFIGS,
1056
957
  EthereumExplorers,
1057
958
  EvmExplorers,
1058
959
  ExplorerUrls,
@@ -1065,9 +966,6 @@ export {
1065
966
  getAllEvmChainNames,
1066
967
  getArbitrumAdapter,
1067
968
  getBaseAdapter,
1068
- getEthereumAdapter,
1069
- getEvmApiUrl,
1070
- getEvmChainConfig,
1071
- getEvmExplorerUrl
969
+ getEthereumAdapter
1072
970
  };
1073
971
  //# sourceMappingURL=index.mjs.map
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/WarpEvmDataLoader.ts","../src/config.ts","../src/WarpEvmExecutor.ts","../src/constants.ts","../src/WarpEvmResults.ts","../src/WarpEvmSerializer.ts","../src/WarpEvmExplorer.ts","../src/chains/common.ts","../src/chains/arbitrum.ts","../src/chains/base.ts","../src/chains/ethereum.ts","../src/chains/combined.ts"],"sourcesContent":["import { AdapterWarpDataLoader, WarpChainAccount, WarpChainAsset, WarpChainInfo, WarpClientConfig } from '@vleap/warps'\nimport { ethers } from 'ethers'\nimport { getEvmApiUrl, getEvmChainConfig } from './config'\n\n// ERC20 ABI for token interactions\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\n// ERC20 Transfer event for token detection\nconst ERC20_TRANSFER_EVENT = 'event Transfer(address indexed from, address indexed to, uint256 value)'\n\n// Known token lists for popular chains\nconst KNOWN_TOKENS: Record<string, Record<string, { name: string; symbol: string; decimals: number; logoUrl?: string }>> = {\n ethereum: {\n '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 '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 '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 '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 '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 arbitrum: {\n '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 '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 '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 base: {\n '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 '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}\n\ninterface TokenMetadata {\n name: string\n symbol: string\n decimals: number\n logoUrl?: string\n}\n\ninterface TokenBalance {\n tokenAddress: string\n balance: bigint\n metadata: TokenMetadata\n}\n\nexport class WarpEvmDataLoader implements AdapterWarpDataLoader {\n private provider: ethers.JsonRpcProvider\n private chainConfig: any\n\n constructor(\n private readonly config: WarpClientConfig,\n private readonly chain: WarpChainInfo\n ) {\n this.provider = new ethers.JsonRpcProvider(getEvmApiUrl(this.config.env, this.chain.name))\n this.chainConfig = getEvmChainConfig(this.chain.name, this.config.env)\n }\n\n async getAccount(address: string): Promise<WarpChainAccount> {\n try {\n const balance = await this.provider.getBalance(address)\n\n return {\n address,\n balance,\n }\n } catch (error) {\n throw new Error(`Failed to get account balance for ${address}: ${error}`)\n }\n }\n\n async getAccountAssets(address: string): Promise<WarpChainAsset[]> {\n try {\n const assets: WarpChainAsset[] = []\n\n // Get ERC20 token balances\n const tokenBalances = await this.getERC20TokenBalances(address)\n\n for (const tokenBalance of tokenBalances) {\n if (tokenBalance.balance > 0n) {\n assets.push({\n identifier: tokenBalance.tokenAddress,\n name: tokenBalance.metadata.name,\n amount: tokenBalance.balance,\n decimals: tokenBalance.metadata.decimals,\n logoUrl: tokenBalance.metadata.logoUrl || '',\n })\n }\n }\n\n return assets\n } catch (error) {\n throw new Error(`Failed to get account assets for ${address}: ${error}`)\n }\n }\n\n private async getERC20TokenBalances(address: string): Promise<TokenBalance[]> {\n const tokenBalances: TokenBalance[] = []\n\n // Get known tokens for this chain\n const knownTokens = KNOWN_TOKENS[this.chain.name] || {}\n\n // Process known tokens first\n for (const [tokenAddress, metadata] of Object.entries(knownTokens)) {\n try {\n const balance = await this.getTokenBalance(address, tokenAddress)\n if (balance > 0n) {\n tokenBalances.push({\n tokenAddress,\n balance,\n metadata,\n })\n }\n } catch (error) {\n // Skip tokens that fail to load\n console.warn(`Failed to get balance for token ${tokenAddress}: ${error}`)\n }\n }\n\n // Try to detect additional tokens from transfer events\n const additionalTokens = await this.detectTokensFromEvents(address)\n for (const tokenAddress of additionalTokens) {\n if (!knownTokens[tokenAddress]) {\n try {\n const metadata = await this.getTokenMetadata(tokenAddress)\n const balance = await this.getTokenBalance(address, tokenAddress)\n if (balance > 0n) {\n tokenBalances.push({\n tokenAddress,\n balance,\n metadata,\n })\n }\n } catch (error) {\n // Skip tokens that fail to load\n console.warn(`Failed to get metadata/balance for detected token ${tokenAddress}: ${error}`)\n }\n }\n }\n\n return tokenBalances\n }\n\n private async getTokenBalance(address: string, tokenAddress: string): Promise<bigint> {\n try {\n const contract = new ethers.Contract(tokenAddress, ERC20_ABI, this.provider)\n const balance = await contract.balanceOf(address)\n return balance\n } catch (error) {\n throw new Error(`Failed to get token balance: ${error}`)\n }\n }\n\n private async getTokenMetadata(tokenAddress: string): Promise<TokenMetadata> {\n try {\n const contract = new ethers.Contract(tokenAddress, ERC20_ABI, this.provider)\n\n const [name, symbol, decimals] = await Promise.all([contract.name(), contract.symbol(), contract.decimals()])\n\n return {\n name: name || 'Unknown Token',\n symbol: symbol || 'UNKNOWN',\n decimals: decimals || 18,\n }\n } catch (error) {\n throw new Error(`Failed to get token metadata: ${error}`)\n }\n }\n\n private async detectTokensFromEvents(address: string): Promise<string[]> {\n try {\n // Get recent blocks to scan for transfer events\n const currentBlock = await this.provider.getBlockNumber()\n const fromBlock = Math.max(0, currentBlock - 10000) // Scan last 10k blocks\n\n // Create filter for Transfer events where the address is the recipient\n const filter = {\n fromBlock,\n toBlock: currentBlock,\n topics: [\n ethers.id('Transfer(address,address,uint256)'),\n null, // from address (any)\n ethers.zeroPadValue(address, 32), // to address (our target)\n ],\n }\n\n const logs = await this.provider.getLogs(filter)\n\n // Extract unique token addresses from transfer events\n const tokenAddresses = new Set<string>()\n for (const log of logs) {\n tokenAddresses.add(log.address)\n }\n\n return Array.from(tokenAddresses)\n } catch (error) {\n console.warn(`Failed to detect tokens from events: ${error}`)\n return []\n }\n }\n\n // Additional utility methods for enhanced token support\n async getTokenInfo(tokenAddress: string): Promise<TokenMetadata | null> {\n try {\n return await this.getTokenMetadata(tokenAddress)\n } catch (error) {\n console.warn(`Failed to get token info for ${tokenAddress}: ${error}`)\n return null\n }\n }\n\n async getTokenBalanceForAddress(address: string, tokenAddress: string): Promise<bigint> {\n try {\n return await this.getTokenBalance(address, tokenAddress)\n } catch (error) {\n throw new Error(`Failed to get token balance for ${tokenAddress}: ${error}`)\n }\n }\n\n async getMultipleTokenBalances(address: string, tokenAddresses: string[]): Promise<Map<string, bigint>> {\n const balances = new Map<string, bigint>()\n\n await Promise.all(\n tokenAddresses.map(async (tokenAddress) => {\n try {\n const balance = await this.getTokenBalance(address, tokenAddress)\n balances.set(tokenAddress, balance)\n } catch (error) {\n console.warn(`Failed to get balance for token ${tokenAddress}: ${error}`)\n balances.set(tokenAddress, 0n)\n }\n })\n )\n\n return balances\n }\n}\n","import { WarpChainEnv } from '@vleap/warps'\n\nexport interface EvmChainConfig {\n apiUrl: string\n explorerUrl: string\n chainId: string\n registryAddress: string\n nativeToken: string\n blockTime?: number\n}\n\nexport const EVM_CHAIN_CONFIGS: Record<string, Record<WarpChainEnv, EvmChainConfig>> = {\n ethereum: {\n mainnet: {\n apiUrl: 'https://eth-mainnet.g.alchemy.com/v2/demo',\n explorerUrl: 'https://etherscan.io',\n chainId: '1',\n registryAddress: '0x0000000000000000000000000000000000000000',\n nativeToken: 'ETH',\n blockTime: 12000,\n },\n testnet: {\n apiUrl: 'https://eth-sepolia.g.alchemy.com/v2/demo',\n explorerUrl: 'https://sepolia.etherscan.io',\n chainId: '11155111',\n registryAddress: '0x0000000000000000000000000000000000000000',\n nativeToken: 'ETH',\n blockTime: 12000,\n },\n devnet: {\n apiUrl: 'http://localhost:8545',\n explorerUrl: 'http://localhost:4000',\n chainId: '1337',\n registryAddress: '0x0000000000000000000000000000000000000000',\n nativeToken: 'ETH',\n blockTime: 12000,\n },\n },\n arbitrum: {\n mainnet: {\n apiUrl: 'https://arb-mainnet.g.alchemy.com/v2/demo',\n explorerUrl: 'https://arbiscan.io',\n chainId: '42161',\n registryAddress: '0x0000000000000000000000000000000000000000',\n nativeToken: 'ETH',\n blockTime: 1000,\n },\n testnet: {\n apiUrl: 'https://arb-sepolia.g.alchemy.com/v2/demo',\n explorerUrl: 'https://sepolia.arbiscan.io',\n chainId: '421614',\n registryAddress: '0x0000000000000000000000000000000000000000',\n nativeToken: 'ETH',\n blockTime: 1000,\n },\n devnet: {\n apiUrl: 'http://localhost:8545',\n explorerUrl: 'http://localhost:4000',\n chainId: '1337',\n registryAddress: '0x0000000000000000000000000000000000000000',\n nativeToken: 'ETH',\n blockTime: 1000,\n },\n },\n base: {\n mainnet: {\n apiUrl: 'https://mainnet.base.org',\n explorerUrl: 'https://basescan.org',\n chainId: '8453',\n registryAddress: '0x0000000000000000000000000000000000000000',\n nativeToken: 'ETH',\n blockTime: 2000,\n },\n testnet: {\n apiUrl: 'https://sepolia.base.org',\n explorerUrl: 'https://sepolia.basescan.org',\n chainId: '84532',\n registryAddress: '0x0000000000000000000000000000000000000000',\n nativeToken: 'ETH',\n blockTime: 2000,\n },\n devnet: {\n apiUrl: 'http://localhost:8545',\n explorerUrl: 'http://localhost:4000',\n chainId: '1337',\n registryAddress: '0x0000000000000000000000000000000000000000',\n nativeToken: 'ETH',\n blockTime: 2000,\n },\n },\n}\n\nconst DEFAULT_CHAIN = 'ethereum'\n\nexport const getEvmChainConfig = (chain: string = DEFAULT_CHAIN, env: WarpChainEnv): EvmChainConfig => {\n const chainConfigs = EVM_CHAIN_CONFIGS[chain]\n if (!chainConfigs) {\n throw new Error(`Unsupported EVM chain: ${chain}`)\n }\n\n const config = chainConfigs[env]\n if (!config) {\n throw new Error(`Unsupported environment ${env} for chain ${chain}`)\n }\n\n return config\n}\n\nexport const getEvmApiUrl = (env: WarpChainEnv, chain: string = DEFAULT_CHAIN): string => {\n return getEvmChainConfig(chain, env).apiUrl\n}\n\nexport const getEvmExplorerUrl = (env: WarpChainEnv, chain: string = DEFAULT_CHAIN): string => {\n return getEvmChainConfig(chain, env).explorerUrl\n}\n","import {\n AdapterWarpExecutor,\n applyResultsToMessages,\n getNextInfo,\n getWarpActionByIndex,\n WarpActionInputType,\n WarpChainInfo,\n WarpClientConfig,\n WarpExecutable,\n WarpExecution,\n WarpQueryAction,\n} from '@vleap/warps'\nimport { ethers } from 'ethers'\nimport { getEvmApiUrl } from './config'\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(private readonly config: WarpClientConfig) {\n this.serializer = new WarpEvmSerializer()\n this.provider = new ethers.JsonRpcProvider(getEvmApiUrl(config.env))\n this.results = new WarpEvmResults(config)\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 // Validate destination address\n if (!ethers.isAddress(executable.destination)) {\n throw new Error(`WarpEvmExecutor: Invalid destination address: ${executable.destination}`)\n }\n\n // Validate value\n if (executable.value < 0) {\n throw new Error(`WarpEvmExecutor: Transfer value cannot be negative: ${executable.value}`)\n }\n\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 // Validate value\n if (executable.value < 0) {\n throw new Error(`WarpEvmExecutor: Contract call value cannot be negative: ${executable.value}`)\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 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, 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 next,\n values,\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 next: null,\n values: [],\n results: {},\n messages: {},\n }\n }\n }\n\n async preprocessInput(chain: WarpChainInfo, input: string, type: WarpActionInputType, value: string): Promise<string> {\n const typedValue = this.serializer.stringToTyped(value)\n\n switch (type) {\n case 'address':\n if (!ethers.isAddress(typedValue)) {\n throw new Error(`Invalid address format: ${typedValue}`)\n }\n return ethers.getAddress(typedValue)\n case 'hex':\n if (!ethers.isHexString(typedValue)) {\n throw new Error(`Invalid hex format: ${typedValue}`)\n }\n return typedValue\n case 'uint8':\n case 'uint16':\n case 'uint32':\n case 'uint64':\n case 'biguint':\n const bigIntValue = BigInt(typedValue)\n if (bigIntValue < 0) {\n throw new Error(`Negative value not allowed for type ${type}: ${typedValue}`)\n }\n return bigIntValue.toString()\n default:\n return String(typedValue)\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 gasLimit: gasEstimate,\n maxFeePerGas: feeData.maxFeePerGas,\n maxPriorityFeePerGas: feeData.maxPriorityFeePerGas,\n }\n } else if (feeData.gasPrice) {\n // Legacy pricing\n return {\n ...tx,\n gasLimit: gasEstimate,\n gasPrice: feeData.gasPrice,\n }\n } else {\n // Fallback to default values\n return {\n ...tx,\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 defaultGasLimit = BigInt(WarpEvmConstants.GasLimit.ContractCall)\n } else {\n defaultGasLimit = BigInt(WarpEvmConstants.GasLimit.Transfer)\n }\n\n return {\n ...tx,\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 throw new Error('Not implemented')\n }\n}\n","export const WarpEvmConstants = {\n GasLimit: {\n Default: 21000,\n ContractCall: 100000,\n ContractDeploy: 500000,\n Transfer: 21000,\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 parseResultsOutIndex,\n ResolvedInput,\n Warp,\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\n constructor(private readonly config: WarpClientConfig) {\n this.serializer = new WarpEvmSerializer()\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 next: null,\n values: [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[]; 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, 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, results: await evaluateResultsCommon(warp, results, actionIndex, inputs) }\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","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),\n results: new WarpEvmResults(config),\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, WarpChain } from '@vleap/warps'\nimport { createEvmAdapter } from './common'\n\nexport const ChainNameArbitrum: WarpChain = 'arbitrum'\n\nexport const getArbitrumAdapter: AdapterFactory = createEvmAdapter(ChainNameArbitrum, 'arb', {\n devnet: {\n name: ChainNameArbitrum,\n displayName: 'Arbitrum Devnet',\n chainId: '421614',\n blockTime: 1000,\n addressHrp: '0x',\n apiUrl: 'https://sepolia-rollup.arbitrum.io/rpc',\n nativeToken: 'ETH',\n },\n testnet: {\n name: ChainNameArbitrum,\n displayName: 'Arbitrum Testnet',\n chainId: '421613',\n blockTime: 1000,\n addressHrp: '0x',\n apiUrl: 'https://goerli-rollup.arbitrum.io/rpc',\n nativeToken: 'ETH',\n },\n mainnet: {\n name: ChainNameArbitrum,\n displayName: 'Arbitrum',\n chainId: '42161',\n blockTime: 1000,\n addressHrp: '0x',\n apiUrl: 'https://arb1.arbitrum.io/rpc',\n nativeToken: 'ETH',\n },\n})\n","import { AdapterFactory, WarpChain } from '@vleap/warps'\nimport { createEvmAdapter } from './common'\n\nexport const ChainNameBase: WarpChain = 'base'\n\nexport const getBaseAdapter: AdapterFactory = createEvmAdapter(ChainNameBase, 'base', {\n mainnet: {\n name: ChainNameBase,\n displayName: 'Base',\n chainId: '8453',\n blockTime: 2000,\n addressHrp: '0x',\n apiUrl: 'https://mainnet.base.org',\n nativeToken: 'ETH',\n },\n testnet: {\n name: ChainNameBase,\n displayName: 'Base Testnet',\n chainId: '84531',\n blockTime: 2000,\n addressHrp: '0x',\n apiUrl: 'https://goerli.base.org',\n nativeToken: 'ETH',\n },\n devnet: {\n name: ChainNameBase,\n displayName: 'Base Devnet',\n chainId: '84532',\n blockTime: 2000,\n addressHrp: '0x',\n apiUrl: 'https://sepolia.base.org',\n nativeToken: 'ETH',\n },\n})\n","import { AdapterFactory, WarpChain } from '@vleap/warps'\nimport { createEvmAdapter } from './common'\n\nexport const ChainNameEthereum: WarpChain = 'ethereum'\n\nexport const getEthereumAdapter: AdapterFactory = createEvmAdapter(ChainNameEthereum, 'eth', {\n devnet: {\n name: ChainNameEthereum,\n displayName: 'Ethereum Devnet',\n chainId: '11155111',\n blockTime: 12000,\n addressHrp: '0x',\n apiUrl: 'https://eth-sepolia.g.alchemy.com/v2/YOUR_API_KEY',\n nativeToken: 'ETH',\n },\n testnet: {\n name: ChainNameEthereum,\n displayName: 'Ethereum Testnet',\n chainId: '5',\n blockTime: 12000,\n addressHrp: '0x',\n apiUrl: 'https://eth-goerli.g.alchemy.com/v2/YOUR_API_KEY',\n nativeToken: 'ETH',\n },\n mainnet: {\n name: ChainNameEthereum,\n displayName: 'Ethereum Mainnet',\n chainId: '1',\n blockTime: 12000,\n addressHrp: '0x',\n apiUrl: 'https://eth-mainnet.g.alchemy.com/v2/YOUR_API_KEY',\n nativeToken: 'ETH',\n },\n})\n","import { Adapter, WarpChain, WarpClientConfig } from '@vleap/warps'\nimport { ChainNameArbitrum, getArbitrumAdapter } from './arbitrum'\nimport { ChainNameBase, getBaseAdapter } from './base'\nimport { ChainNameEthereum, getEthereumAdapter } from './ethereum'\n\nexport const getAllEvmAdapters = (config: WarpClientConfig, fallback?: Adapter): Adapter[] => [\n getEthereumAdapter(config, fallback),\n getArbitrumAdapter(config, fallback),\n getBaseAdapter(config, fallback),\n]\n\nexport const getAllEvmChainNames = (): WarpChain[] => [ChainNameArbitrum, ChainNameBase, ChainNameEthereum]\n"],"mappings":";AACA,SAAS,cAAc;;;ACUhB,IAAM,oBAA0E;AAAA,EACrF,UAAU;AAAA,IACR,SAAS;AAAA,MACP,QAAQ;AAAA,MACR,aAAa;AAAA,MACb,SAAS;AAAA,MACT,iBAAiB;AAAA,MACjB,aAAa;AAAA,MACb,WAAW;AAAA,IACb;AAAA,IACA,SAAS;AAAA,MACP,QAAQ;AAAA,MACR,aAAa;AAAA,MACb,SAAS;AAAA,MACT,iBAAiB;AAAA,MACjB,aAAa;AAAA,MACb,WAAW;AAAA,IACb;AAAA,IACA,QAAQ;AAAA,MACN,QAAQ;AAAA,MACR,aAAa;AAAA,MACb,SAAS;AAAA,MACT,iBAAiB;AAAA,MACjB,aAAa;AAAA,MACb,WAAW;AAAA,IACb;AAAA,EACF;AAAA,EACA,UAAU;AAAA,IACR,SAAS;AAAA,MACP,QAAQ;AAAA,MACR,aAAa;AAAA,MACb,SAAS;AAAA,MACT,iBAAiB;AAAA,MACjB,aAAa;AAAA,MACb,WAAW;AAAA,IACb;AAAA,IACA,SAAS;AAAA,MACP,QAAQ;AAAA,MACR,aAAa;AAAA,MACb,SAAS;AAAA,MACT,iBAAiB;AAAA,MACjB,aAAa;AAAA,MACb,WAAW;AAAA,IACb;AAAA,IACA,QAAQ;AAAA,MACN,QAAQ;AAAA,MACR,aAAa;AAAA,MACb,SAAS;AAAA,MACT,iBAAiB;AAAA,MACjB,aAAa;AAAA,MACb,WAAW;AAAA,IACb;AAAA,EACF;AAAA,EACA,MAAM;AAAA,IACJ,SAAS;AAAA,MACP,QAAQ;AAAA,MACR,aAAa;AAAA,MACb,SAAS;AAAA,MACT,iBAAiB;AAAA,MACjB,aAAa;AAAA,MACb,WAAW;AAAA,IACb;AAAA,IACA,SAAS;AAAA,MACP,QAAQ;AAAA,MACR,aAAa;AAAA,MACb,SAAS;AAAA,MACT,iBAAiB;AAAA,MACjB,aAAa;AAAA,MACb,WAAW;AAAA,IACb;AAAA,IACA,QAAQ;AAAA,MACN,QAAQ;AAAA,MACR,aAAa;AAAA,MACb,SAAS;AAAA,MACT,iBAAiB;AAAA,MACjB,aAAa;AAAA,MACb,WAAW;AAAA,IACb;AAAA,EACF;AACF;AAEA,IAAM,gBAAgB;AAEf,IAAM,oBAAoB,CAAC,QAAgB,eAAe,QAAsC;AACrG,QAAM,eAAe,kBAAkB,KAAK;AAC5C,MAAI,CAAC,cAAc;AACjB,UAAM,IAAI,MAAM,0BAA0B,KAAK,EAAE;AAAA,EACnD;AAEA,QAAM,SAAS,aAAa,GAAG;AAC/B,MAAI,CAAC,QAAQ;AACX,UAAM,IAAI,MAAM,2BAA2B,GAAG,cAAc,KAAK,EAAE;AAAA,EACrE;AAEA,SAAO;AACT;AAEO,IAAM,eAAe,CAAC,KAAmB,QAAgB,kBAA0B;AACxF,SAAO,kBAAkB,OAAO,GAAG,EAAE;AACvC;AAEO,IAAM,oBAAoB,CAAC,KAAmB,QAAgB,kBAA0B;AAC7F,SAAO,kBAAkB,OAAO,GAAG,EAAE;AACvC;;;AD7GA,IAAM,YAAY;AAAA,EAChB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAMA,IAAM,eAAqH;AAAA,EACzH,UAAU;AAAA,IACR,8CAA8C;AAAA,MAC5C,MAAM;AAAA,MACN,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,SAAS;AAAA,IACX;AAAA,IACA,8CAA8C;AAAA,MAC5C,MAAM;AAAA,MACN,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,SAAS;AAAA,IACX;AAAA,IACA,8CAA8C;AAAA,MAC5C,MAAM;AAAA,MACN,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,SAAS;AAAA,IACX;AAAA,IACA,8CAA8C;AAAA,MAC5C,MAAM;AAAA,MACN,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,SAAS;AAAA,IACX;AAAA,IACA,8CAA8C;AAAA,MAC5C,MAAM;AAAA,MACN,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,SAAS;AAAA,IACX;AAAA,EACF;AAAA,EACA,UAAU;AAAA,IACR,8CAA8C;AAAA,MAC5C,MAAM;AAAA,MACN,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,SAAS;AAAA,IACX;AAAA,IACA,8CAA8C;AAAA,MAC5C,MAAM;AAAA,MACN,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,SAAS;AAAA,IACX;AAAA,IACA,8CAA8C;AAAA,MAC5C,MAAM;AAAA,MACN,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,SAAS;AAAA,IACX;AAAA,EACF;AAAA,EACA,MAAM;AAAA,IACJ,8CAA8C;AAAA,MAC5C,MAAM;AAAA,MACN,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,SAAS;AAAA,IACX;AAAA,IACA,8CAA8C;AAAA,MAC5C,MAAM;AAAA,MACN,QAAQ;AAAA,MACR,UAAU;AAAA,MACV,SAAS;AAAA,IACX;AAAA,EACF;AACF;AAeO,IAAM,oBAAN,MAAyD;AAAA,EAI9D,YACmB,QACA,OACjB;AAFiB;AACA;AAEjB,SAAK,WAAW,IAAI,OAAO,gBAAgB,aAAa,KAAK,OAAO,KAAK,KAAK,MAAM,IAAI,CAAC;AACzF,SAAK,cAAc,kBAAkB,KAAK,MAAM,MAAM,KAAK,OAAO,GAAG;AAAA,EACvE;AAAA,EAEA,MAAM,WAAW,SAA4C;AAC3D,QAAI;AACF,YAAM,UAAU,MAAM,KAAK,SAAS,WAAW,OAAO;AAEtD,aAAO;AAAA,QACL;AAAA,QACA;AAAA,MACF;AAAA,IACF,SAAS,OAAO;AACd,YAAM,IAAI,MAAM,qCAAqC,OAAO,KAAK,KAAK,EAAE;AAAA,IAC1E;AAAA,EACF;AAAA,EAEA,MAAM,iBAAiB,SAA4C;AACjE,QAAI;AACF,YAAM,SAA2B,CAAC;AAGlC,YAAM,gBAAgB,MAAM,KAAK,sBAAsB,OAAO;AAE9D,iBAAW,gBAAgB,eAAe;AACxC,YAAI,aAAa,UAAU,IAAI;AAC7B,iBAAO,KAAK;AAAA,YACV,YAAY,aAAa;AAAA,YACzB,MAAM,aAAa,SAAS;AAAA,YAC5B,QAAQ,aAAa;AAAA,YACrB,UAAU,aAAa,SAAS;AAAA,YAChC,SAAS,aAAa,SAAS,WAAW;AAAA,UAC5C,CAAC;AAAA,QACH;AAAA,MACF;AAEA,aAAO;AAAA,IACT,SAAS,OAAO;AACd,YAAM,IAAI,MAAM,oCAAoC,OAAO,KAAK,KAAK,EAAE;AAAA,IACzE;AAAA,EACF;AAAA,EAEA,MAAc,sBAAsB,SAA0C;AAC5E,UAAM,gBAAgC,CAAC;AAGvC,UAAM,cAAc,aAAa,KAAK,MAAM,IAAI,KAAK,CAAC;AAGtD,eAAW,CAAC,cAAc,QAAQ,KAAK,OAAO,QAAQ,WAAW,GAAG;AAClE,UAAI;AACF,cAAM,UAAU,MAAM,KAAK,gBAAgB,SAAS,YAAY;AAChE,YAAI,UAAU,IAAI;AAChB,wBAAc,KAAK;AAAA,YACjB;AAAA,YACA;AAAA,YACA;AAAA,UACF,CAAC;AAAA,QACH;AAAA,MACF,SAAS,OAAO;AAEd,gBAAQ,KAAK,mCAAmC,YAAY,KAAK,KAAK,EAAE;AAAA,MAC1E;AAAA,IACF;AAGA,UAAM,mBAAmB,MAAM,KAAK,uBAAuB,OAAO;AAClE,eAAW,gBAAgB,kBAAkB;AAC3C,UAAI,CAAC,YAAY,YAAY,GAAG;AAC9B,YAAI;AACF,gBAAM,WAAW,MAAM,KAAK,iBAAiB,YAAY;AACzD,gBAAM,UAAU,MAAM,KAAK,gBAAgB,SAAS,YAAY;AAChE,cAAI,UAAU,IAAI;AAChB,0BAAc,KAAK;AAAA,cACjB;AAAA,cACA;AAAA,cACA;AAAA,YACF,CAAC;AAAA,UACH;AAAA,QACF,SAAS,OAAO;AAEd,kBAAQ,KAAK,qDAAqD,YAAY,KAAK,KAAK,EAAE;AAAA,QAC5F;AAAA,MACF;AAAA,IACF;AAEA,WAAO;AAAA,EACT;AAAA,EAEA,MAAc,gBAAgB,SAAiB,cAAuC;AACpF,QAAI;AACF,YAAM,WAAW,IAAI,OAAO,SAAS,cAAc,WAAW,KAAK,QAAQ;AAC3E,YAAM,UAAU,MAAM,SAAS,UAAU,OAAO;AAChD,aAAO;AAAA,IACT,SAAS,OAAO;AACd,YAAM,IAAI,MAAM,gCAAgC,KAAK,EAAE;AAAA,IACzD;AAAA,EACF;AAAA,EAEA,MAAc,iBAAiB,cAA8C;AAC3E,QAAI;AACF,YAAM,WAAW,IAAI,OAAO,SAAS,cAAc,WAAW,KAAK,QAAQ;AAE3E,YAAM,CAAC,MAAM,QAAQ,QAAQ,IAAI,MAAM,QAAQ,IAAI,CAAC,SAAS,KAAK,GAAG,SAAS,OAAO,GAAG,SAAS,SAAS,CAAC,CAAC;AAE5G,aAAO;AAAA,QACL,MAAM,QAAQ;AAAA,QACd,QAAQ,UAAU;AAAA,QAClB,UAAU,YAAY;AAAA,MACxB;AAAA,IACF,SAAS,OAAO;AACd,YAAM,IAAI,MAAM,iCAAiC,KAAK,EAAE;AAAA,IAC1D;AAAA,EACF;AAAA,EAEA,MAAc,uBAAuB,SAAoC;AACvE,QAAI;AAEF,YAAM,eAAe,MAAM,KAAK,SAAS,eAAe;AACxD,YAAM,YAAY,KAAK,IAAI,GAAG,eAAe,GAAK;AAGlD,YAAM,SAAS;AAAA,QACb;AAAA,QACA,SAAS;AAAA,QACT,QAAQ;AAAA,UACN,OAAO,GAAG,mCAAmC;AAAA,UAC7C;AAAA;AAAA,UACA,OAAO,aAAa,SAAS,EAAE;AAAA;AAAA,QACjC;AAAA,MACF;AAEA,YAAM,OAAO,MAAM,KAAK,SAAS,QAAQ,MAAM;AAG/C,YAAM,iBAAiB,oBAAI,IAAY;AACvC,iBAAW,OAAO,MAAM;AACtB,uBAAe,IAAI,IAAI,OAAO;AAAA,MAChC;AAEA,aAAO,MAAM,KAAK,cAAc;AAAA,IAClC,SAAS,OAAO;AACd,cAAQ,KAAK,wCAAwC,KAAK,EAAE;AAC5D,aAAO,CAAC;AAAA,IACV;AAAA,EACF;AAAA;AAAA,EAGA,MAAM,aAAa,cAAqD;AACtE,QAAI;AACF,aAAO,MAAM,KAAK,iBAAiB,YAAY;AAAA,IACjD,SAAS,OAAO;AACd,cAAQ,KAAK,gCAAgC,YAAY,KAAK,KAAK,EAAE;AACrE,aAAO;AAAA,IACT;AAAA,EACF;AAAA,EAEA,MAAM,0BAA0B,SAAiB,cAAuC;AACtF,QAAI;AACF,aAAO,MAAM,KAAK,gBAAgB,SAAS,YAAY;AAAA,IACzD,SAAS,OAAO;AACd,YAAM,IAAI,MAAM,mCAAmC,YAAY,KAAK,KAAK,EAAE;AAAA,IAC7E;AAAA,EACF;AAAA,EAEA,MAAM,yBAAyB,SAAiB,gBAAwD;AACtG,UAAM,WAAW,oBAAI,IAAoB;AAEzC,UAAM,QAAQ;AAAA,MACZ,eAAe,IAAI,OAAO,iBAAiB;AACzC,YAAI;AACF,gBAAM,UAAU,MAAM,KAAK,gBAAgB,SAAS,YAAY;AAChE,mBAAS,IAAI,cAAc,OAAO;AAAA,QACpC,SAAS,OAAO;AACd,kBAAQ,KAAK,mCAAmC,YAAY,KAAK,KAAK,EAAE;AACxE,mBAAS,IAAI,cAAc,EAAE;AAAA,QAC/B;AAAA,MACF,CAAC;AAAA,IACH;AAEA,WAAO;AAAA,EACT;AACF;;;AEjSA;AAAA,EAEE;AAAA,EACA;AAAA,EACA;AAAA,OAOK;AACP,SAAS,UAAAA,eAAc;;;ACZhB,IAAM,mBAAmB;AAAA,EAC9B,UAAU;AAAA,IACR,SAAS;AAAA,IACT,cAAc;AAAA,IACd,gBAAgB;AAAA,IAChB,UAAU;AAAA,IACV,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;;;AC5EA;AAAA,EAEE;AAAA,EACA;AAAA,EAIA,iBAAAC;AAAA,OAGK;;;ACVP;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;;;AD3JO,IAAM,iBAAN,MAAmD;AAAA,EAGxD,YAA6B,QAA0B;AAA1B;AAC3B,SAAK,aAAa,IAAI,kBAAkB;AAAA,EAC1C;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,MAAM;AAAA,MACN,QAAQ,CAAC,iBAAiB,aAAa,SAAS,UAAU,GAAI,KAAK,SAAS,IAAI,OAAO,CAAC,CAAE;AAAA,MAC1F,SAAS,CAAC;AAAA,MACV,UAAU,CAAC;AAAA,IACb;AAAA,EACF;AAAA,EAEA,MAAM,oBACJ,MACA,aACA,aACA,QAC2D;AAC3D,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,QAAQ;AAE5C,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,SAAS,MAAM,sBAAsB,MAAM,SAAS,aAAa,MAAM,EAAE;AAAA,EAC5F;AACF;;;AF1EO,IAAM,kBAAN,MAAqD;AAAA,EAK1D,YAA6B,QAA0B;AAA1B;AAC3B,SAAK,aAAa,IAAI,kBAAkB;AACxC,SAAK,WAAW,IAAIC,QAAO,gBAAgB,aAAa,OAAO,GAAG,CAAC;AACnE,SAAK,UAAU,IAAI,eAAe,MAAM;AAAA,EAC1C;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;AAGzF,QAAI,CAACA,QAAO,UAAU,WAAW,WAAW,GAAG;AAC7C,YAAM,IAAI,MAAM,iDAAiD,WAAW,WAAW,EAAE;AAAA,IAC3F;AAGA,QAAI,WAAW,QAAQ,GAAG;AACxB,YAAM,IAAI,MAAM,uDAAuD,WAAW,KAAK,EAAE;AAAA,IAC3F;AAEA,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;AAGA,QAAI,WAAW,QAAQ,GAAG;AACxB,YAAM,IAAI,MAAM,4DAA4D,WAAW,KAAK,EAAE;AAAA,IAChG;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,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,QAAQ,IAAI,MAAM,KAAK,QAAQ;AAAA,QAC7C,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;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,MAAM;AAAA,QACN,QAAQ,CAAC;AAAA,QACT,SAAS,CAAC;AAAA,QACV,UAAU,CAAC;AAAA,MACb;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,gBAAgB,OAAsB,OAAe,MAA2B,OAAgC;AACpH,UAAM,aAAa,KAAK,WAAW,cAAc,KAAK;AAEtD,YAAQ,MAAM;AAAA,MACZ,KAAK;AACH,YAAI,CAACA,QAAO,UAAU,UAAU,GAAG;AACjC,gBAAM,IAAI,MAAM,2BAA2B,UAAU,EAAE;AAAA,QACzD;AACA,eAAOA,QAAO,WAAW,UAAU;AAAA,MACrC,KAAK;AACH,YAAI,CAACA,QAAO,YAAY,UAAU,GAAG;AACnC,gBAAM,IAAI,MAAM,uBAAuB,UAAU,EAAE;AAAA,QACrD;AACA,eAAO;AAAA,MACT,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AAAA,MACL,KAAK;AACH,cAAM,cAAc,OAAO,UAAU;AACrC,YAAI,cAAc,GAAG;AACnB,gBAAM,IAAI,MAAM,uCAAuC,IAAI,KAAK,UAAU,EAAE;AAAA,QAC9E;AACA,eAAO,YAAY,SAAS;AAAA,MAC9B;AACE,eAAO,OAAO,UAAU;AAAA,IAC5B;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,UAAU;AAAA,UACV,cAAc,QAAQ;AAAA,UACtB,sBAAsB,QAAQ;AAAA,QAChC;AAAA,MACF,WAAW,QAAQ,UAAU;AAE3B,eAAO;AAAA,UACL,GAAG;AAAA,UACH,UAAU;AAAA,UACV,UAAU,QAAQ;AAAA,QACpB;AAAA,MACF,OAAO;AAEL,eAAO;AAAA,UACL,GAAG;AAAA,UACH,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;AAC/B,0BAAkB,OAAO,iBAAiB,SAAS,YAAY;AAAA,MACjE,OAAO;AACL,0BAAkB,OAAO,iBAAiB,SAAS,QAAQ;AAAA,MAC7D;AAEA,aAAO;AAAA,QACL,GAAG;AAAA,QACH,UAAU;AAAA,QACV,UAAUA,QAAO,WAAW,iBAAiB,SAAS,SAAS,KAAK;AAAA,MACtE;AAAA,IACF;AAAA,EACF;AAAA,EAEA,MAAM,YAAY,SAAiB,YAAqC;AACtE,UAAM,IAAI,MAAM,iBAAiB;AAAA,EACnC;AACF;;;AIhQO,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;AACF;;;ACpGO,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,MAAM;AAAA,MACpC,SAAS,IAAI,eAAe,MAAM;AAAA,MAClC,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;;;AC3BO,IAAM,oBAA+B;AAErC,IAAM,qBAAqC,iBAAiB,mBAAmB,OAAO;AAAA,EAC3F,QAAQ;AAAA,IACN,MAAM;AAAA,IACN,aAAa;AAAA,IACb,SAAS;AAAA,IACT,WAAW;AAAA,IACX,YAAY;AAAA,IACZ,QAAQ;AAAA,IACR,aAAa;AAAA,EACf;AAAA,EACA,SAAS;AAAA,IACP,MAAM;AAAA,IACN,aAAa;AAAA,IACb,SAAS;AAAA,IACT,WAAW;AAAA,IACX,YAAY;AAAA,IACZ,QAAQ;AAAA,IACR,aAAa;AAAA,EACf;AAAA,EACA,SAAS;AAAA,IACP,MAAM;AAAA,IACN,aAAa;AAAA,IACb,SAAS;AAAA,IACT,WAAW;AAAA,IACX,YAAY;AAAA,IACZ,QAAQ;AAAA,IACR,aAAa;AAAA,EACf;AACF,CAAC;;;AC9BM,IAAM,gBAA2B;AAEjC,IAAM,iBAAiC,iBAAiB,eAAe,QAAQ;AAAA,EACpF,SAAS;AAAA,IACP,MAAM;AAAA,IACN,aAAa;AAAA,IACb,SAAS;AAAA,IACT,WAAW;AAAA,IACX,YAAY;AAAA,IACZ,QAAQ;AAAA,IACR,aAAa;AAAA,EACf;AAAA,EACA,SAAS;AAAA,IACP,MAAM;AAAA,IACN,aAAa;AAAA,IACb,SAAS;AAAA,IACT,WAAW;AAAA,IACX,YAAY;AAAA,IACZ,QAAQ;AAAA,IACR,aAAa;AAAA,EACf;AAAA,EACA,QAAQ;AAAA,IACN,MAAM;AAAA,IACN,aAAa;AAAA,IACb,SAAS;AAAA,IACT,WAAW;AAAA,IACX,YAAY;AAAA,IACZ,QAAQ;AAAA,IACR,aAAa;AAAA,EACf;AACF,CAAC;;;AC9BM,IAAM,oBAA+B;AAErC,IAAM,qBAAqC,iBAAiB,mBAAmB,OAAO;AAAA,EAC3F,QAAQ;AAAA,IACN,MAAM;AAAA,IACN,aAAa;AAAA,IACb,SAAS;AAAA,IACT,WAAW;AAAA,IACX,YAAY;AAAA,IACZ,QAAQ;AAAA,IACR,aAAa;AAAA,EACf;AAAA,EACA,SAAS;AAAA,IACP,MAAM;AAAA,IACN,aAAa;AAAA,IACb,SAAS;AAAA,IACT,WAAW;AAAA,IACX,YAAY;AAAA,IACZ,QAAQ;AAAA,IACR,aAAa;AAAA,EACf;AAAA,EACA,SAAS;AAAA,IACP,MAAM;AAAA,IACN,aAAa;AAAA,IACb,SAAS;AAAA,IACT,WAAW;AAAA,IACX,YAAY;AAAA,IACZ,QAAQ;AAAA,IACR,aAAa;AAAA,EACf;AACF,CAAC;;;AC5BM,IAAM,oBAAoB,CAAC,QAA0B,aAAkC;AAAA,EAC5F,mBAAmB,QAAQ,QAAQ;AAAA,EACnC,mBAAmB,QAAQ,QAAQ;AAAA,EACnC,eAAe,QAAQ,QAAQ;AACjC;AAEO,IAAM,sBAAsB,MAAmB,CAAC,mBAAmB,eAAe,iBAAiB;","names":["ethers","EthereumExplorers","ArbitrumExplorers","BaseExplorers","WarpConstants","ethers","WarpConstants","ethers","url"]}
1
+ {"version":3,"sources":["../src/WarpEvmDataLoader.ts","../src/WarpEvmExecutor.ts","../src/constants.ts","../src/WarpEvmResults.ts","../src/WarpEvmSerializer.ts","../src/WarpEvmExplorer.ts","../src/chains/common.ts","../src/chains/arbitrum.ts","../src/chains/base.ts","../src/chains/ethereum.ts","../src/chains/combined.ts"],"sourcesContent":["import { AdapterWarpDataLoader, getProviderUrl, WarpChainAccount, WarpChainAsset, WarpChainInfo, WarpClientConfig } from '@vleap/warps'\nimport { ethers } from 'ethers'\n\n// ERC20 ABI for token interactions\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\n// ERC20 Transfer event for token detection\nconst ERC20_TRANSFER_EVENT = 'event Transfer(address indexed from, address indexed to, uint256 value)'\n\n// Known token lists for popular chains\nconst KNOWN_TOKENS: Record<string, Record<string, { name: string; symbol: string; decimals: number; logoUrl?: string }>> = {\n ethereum: {\n '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 '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 '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 '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 '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 arbitrum: {\n '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 '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 '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 base: {\n '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 '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}\n\ninterface TokenMetadata {\n name: string\n symbol: string\n decimals: number\n logoUrl?: string\n}\n\ninterface TokenBalance {\n tokenAddress: string\n balance: bigint\n metadata: TokenMetadata\n}\n\nexport class WarpEvmDataLoader implements AdapterWarpDataLoader {\n private provider: ethers.JsonRpcProvider\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 this.provider = new ethers.JsonRpcProvider(apiUrl)\n }\n\n async getAccount(address: string): Promise<WarpChainAccount> {\n try {\n const balance = await this.provider.getBalance(address)\n\n return {\n address,\n balance,\n }\n } catch (error) {\n throw new Error(`Failed to get account balance for ${address}: ${error}`)\n }\n }\n\n async getAccountAssets(address: string): Promise<WarpChainAsset[]> {\n try {\n const assets: WarpChainAsset[] = []\n\n // Get ERC20 token balances\n const tokenBalances = await this.getERC20TokenBalances(address)\n\n for (const tokenBalance of tokenBalances) {\n if (tokenBalance.balance > 0n) {\n assets.push({\n identifier: tokenBalance.tokenAddress,\n name: tokenBalance.metadata.name,\n amount: tokenBalance.balance,\n decimals: tokenBalance.metadata.decimals,\n logoUrl: tokenBalance.metadata.logoUrl || '',\n })\n }\n }\n\n return assets\n } catch (error) {\n throw new Error(`Failed to get account assets for ${address}: ${error}`)\n }\n }\n\n private async getERC20TokenBalances(address: string): Promise<TokenBalance[]> {\n const tokenBalances: TokenBalance[] = []\n\n // Get known tokens for this chain\n const knownTokens = KNOWN_TOKENS[this.chain.name] || {}\n\n // Process known tokens first\n for (const [tokenAddress, metadata] of Object.entries(knownTokens)) {\n try {\n const balance = await this.getTokenBalance(address, tokenAddress)\n if (balance > 0n) {\n tokenBalances.push({\n tokenAddress,\n balance,\n metadata,\n })\n }\n } catch (error) {\n // Skip tokens that fail to load\n console.warn(`Failed to get balance for token ${tokenAddress}: ${error}`)\n }\n }\n\n // Try to detect additional tokens from transfer events\n const additionalTokens = await this.detectTokensFromEvents(address)\n for (const tokenAddress of additionalTokens) {\n if (!knownTokens[tokenAddress]) {\n try {\n const metadata = await this.getTokenMetadata(tokenAddress)\n const balance = await this.getTokenBalance(address, tokenAddress)\n if (balance > 0n) {\n tokenBalances.push({\n tokenAddress,\n balance,\n metadata,\n })\n }\n } catch (error) {\n // Skip tokens that fail to load\n console.warn(`Failed to get metadata/balance for detected token ${tokenAddress}: ${error}`)\n }\n }\n }\n\n return tokenBalances\n }\n\n private async getTokenBalance(address: string, tokenAddress: string): Promise<bigint> {\n try {\n const contract = new ethers.Contract(tokenAddress, ERC20_ABI, this.provider)\n const balance = await contract.balanceOf(address)\n return balance\n } catch (error) {\n throw new Error(`Failed to get token balance: ${error}`)\n }\n }\n\n private async getTokenMetadata(tokenAddress: string): Promise<TokenMetadata> {\n try {\n const contract = new ethers.Contract(tokenAddress, ERC20_ABI, this.provider)\n\n const [name, symbol, decimals] = await Promise.all([contract.name(), contract.symbol(), contract.decimals()])\n\n return {\n name: name || 'Unknown Token',\n symbol: symbol || 'UNKNOWN',\n decimals: decimals || 18,\n }\n } catch (error) {\n throw new Error(`Failed to get token metadata: ${error}`)\n }\n }\n\n private async detectTokensFromEvents(address: string): Promise<string[]> {\n try {\n // Get recent blocks to scan for transfer events\n const currentBlock = await this.provider.getBlockNumber()\n const fromBlock = Math.max(0, currentBlock - 10000) // Scan last 10k blocks\n\n // Create filter for Transfer events where the address is the recipient\n const filter = {\n fromBlock,\n toBlock: currentBlock,\n topics: [\n ethers.id('Transfer(address,address,uint256)'),\n null, // from address (any)\n ethers.zeroPadValue(address, 32), // to address (our target)\n ],\n }\n\n const logs = await this.provider.getLogs(filter)\n\n // Extract unique token addresses from transfer events\n const tokenAddresses = new Set<string>()\n for (const log of logs) {\n tokenAddresses.add(log.address)\n }\n\n return Array.from(tokenAddresses)\n } catch (error) {\n console.warn(`Failed to detect tokens from events: ${error}`)\n return []\n }\n }\n\n // Additional utility methods for enhanced token support\n async getTokenInfo(tokenAddress: string): Promise<TokenMetadata | null> {\n try {\n return await this.getTokenMetadata(tokenAddress)\n } catch (error) {\n console.warn(`Failed to get token info for ${tokenAddress}: ${error}`)\n return null\n }\n }\n\n async getTokenBalanceForAddress(address: string, tokenAddress: string): Promise<bigint> {\n try {\n return await this.getTokenBalance(address, tokenAddress)\n } catch (error) {\n throw new Error(`Failed to get token balance for ${tokenAddress}: ${error}`)\n }\n }\n\n async getMultipleTokenBalances(address: string, tokenAddresses: string[]): Promise<Map<string, bigint>> {\n const balances = new Map<string, bigint>()\n\n await Promise.all(\n tokenAddresses.map(async (tokenAddress) => {\n try {\n const balance = await this.getTokenBalance(address, tokenAddress)\n balances.set(tokenAddress, balance)\n } catch (error) {\n console.warn(`Failed to get balance for token ${tokenAddress}: ${error}`)\n balances.set(tokenAddress, 0n)\n }\n })\n )\n\n return balances\n }\n}\n","import {\n AdapterWarpExecutor,\n applyResultsToMessages,\n getNextInfo,\n getProviderUrl,\n getWarpActionByIndex,\n WarpActionInputType,\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 this.provider = new ethers.JsonRpcProvider(apiUrl)\n this.results = new WarpEvmResults(config)\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 // Validate destination address\n if (!ethers.isAddress(executable.destination)) {\n throw new Error(`WarpEvmExecutor: Invalid destination address: ${executable.destination}`)\n }\n\n // Validate value\n if (executable.value < 0) {\n throw new Error(`WarpEvmExecutor: Transfer value cannot be negative: ${executable.value}`)\n }\n\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 // Validate value\n if (executable.value < 0) {\n throw new Error(`WarpEvmExecutor: Contract call value cannot be negative: ${executable.value}`)\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 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, 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 next,\n values,\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 next: null,\n values: [],\n results: {},\n messages: {},\n }\n }\n }\n\n async preprocessInput(chain: WarpChainInfo, input: string, type: WarpActionInputType, value: string): Promise<string> {\n const typedValue = this.serializer.stringToTyped(value)\n\n switch (type) {\n case 'address':\n if (!ethers.isAddress(typedValue)) {\n throw new Error(`Invalid address format: ${typedValue}`)\n }\n return ethers.getAddress(typedValue)\n case 'hex':\n if (!ethers.isHexString(typedValue)) {\n throw new Error(`Invalid hex format: ${typedValue}`)\n }\n return typedValue\n case 'uint8':\n case 'uint16':\n case 'uint32':\n case 'uint64':\n case 'biguint':\n const bigIntValue = BigInt(typedValue)\n if (bigIntValue < 0) {\n throw new Error(`Negative value not allowed for type ${type}: ${typedValue}`)\n }\n return bigIntValue.toString()\n default:\n return String(typedValue)\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 gasLimit: gasEstimate,\n maxFeePerGas: feeData.maxFeePerGas,\n maxPriorityFeePerGas: feeData.maxPriorityFeePerGas,\n }\n } else if (feeData.gasPrice) {\n // Legacy pricing\n return {\n ...tx,\n gasLimit: gasEstimate,\n gasPrice: feeData.gasPrice,\n }\n } else {\n // Fallback to default values\n return {\n ...tx,\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 defaultGasLimit = BigInt(WarpEvmConstants.GasLimit.ContractCall)\n } else {\n defaultGasLimit = BigInt(WarpEvmConstants.GasLimit.Transfer)\n }\n\n return {\n ...tx,\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 throw new Error('Not implemented')\n }\n}\n","export const WarpEvmConstants = {\n GasLimit: {\n Default: 21000,\n ContractCall: 100000,\n ContractDeploy: 500000,\n Transfer: 21000,\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 parseResultsOutIndex,\n ResolvedInput,\n Warp,\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\n constructor(private readonly config: WarpClientConfig) {\n this.serializer = new WarpEvmSerializer()\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 next: null,\n values: [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[]; 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, 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, results: await evaluateResultsCommon(warp, results, actionIndex, inputs) }\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","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),\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, WarpChain } from '@vleap/warps'\nimport { createEvmAdapter } from './common'\n\nexport const ChainNameArbitrum: WarpChain = 'arbitrum'\n\nexport const getArbitrumAdapter: AdapterFactory = createEvmAdapter(ChainNameArbitrum, 'arb', {\n devnet: {\n name: ChainNameArbitrum,\n displayName: 'Arbitrum Devnet',\n chainId: '421614',\n blockTime: 1000,\n addressHrp: '0x',\n defaultApiUrl: 'https://sepolia-rollup.arbitrum.io/rpc',\n nativeToken: 'ETH',\n },\n testnet: {\n name: ChainNameArbitrum,\n displayName: 'Arbitrum Testnet',\n chainId: '421613',\n blockTime: 1000,\n addressHrp: '0x',\n defaultApiUrl: 'https://goerli-rollup.arbitrum.io/rpc',\n nativeToken: 'ETH',\n },\n mainnet: {\n name: ChainNameArbitrum,\n displayName: 'Arbitrum',\n chainId: '42161',\n blockTime: 1000,\n addressHrp: '0x',\n defaultApiUrl: 'https://arb1.arbitrum.io/rpc',\n nativeToken: 'ETH',\n },\n})\n","import { AdapterFactory, WarpChain } from '@vleap/warps'\nimport { createEvmAdapter } from './common'\n\nexport const ChainNameBase: WarpChain = 'base'\n\nexport const getBaseAdapter: AdapterFactory = createEvmAdapter(ChainNameBase, 'base', {\n mainnet: {\n name: ChainNameBase,\n displayName: 'Base',\n chainId: '8453',\n blockTime: 2000,\n addressHrp: '0x',\n defaultApiUrl: 'https://mainnet.base.org',\n nativeToken: 'ETH',\n },\n testnet: {\n name: ChainNameBase,\n displayName: 'Base Testnet',\n chainId: '84531',\n blockTime: 2000,\n addressHrp: '0x',\n defaultApiUrl: 'https://goerli.base.org',\n nativeToken: 'ETH',\n },\n devnet: {\n name: ChainNameBase,\n displayName: 'Base Devnet',\n chainId: '84532',\n blockTime: 2000,\n addressHrp: '0x',\n defaultApiUrl: 'https://sepolia.base.org',\n nativeToken: 'ETH',\n },\n})\n","import { AdapterFactory, WarpChain } from '@vleap/warps'\nimport { createEvmAdapter } from './common'\n\nexport const ChainNameEthereum: WarpChain = 'ethereum'\n\nexport const getEthereumAdapter: AdapterFactory = createEvmAdapter(ChainNameEthereum, 'eth', {\n devnet: {\n name: ChainNameEthereum,\n displayName: 'Ethereum Devnet',\n chainId: '11155111',\n blockTime: 12000,\n addressHrp: '0x',\n defaultApiUrl: 'https://eth-sepolia.g.alchemy.com/v2/YOUR_API_KEY',\n nativeToken: 'ETH',\n },\n testnet: {\n name: ChainNameEthereum,\n displayName: 'Ethereum Testnet',\n chainId: '5',\n blockTime: 12000,\n addressHrp: '0x',\n defaultApiUrl: 'https://eth-goerli.g.alchemy.com/v2/YOUR_API_KEY',\n nativeToken: 'ETH',\n },\n mainnet: {\n name: ChainNameEthereum,\n displayName: 'Ethereum Mainnet',\n chainId: '1',\n blockTime: 12000,\n addressHrp: '0x',\n defaultApiUrl: 'https://eth-mainnet.g.alchemy.com/v2/YOUR_API_KEY',\n nativeToken: 'ETH',\n },\n})\n","import { Adapter, WarpChain, WarpClientConfig } from '@vleap/warps'\nimport { ChainNameArbitrum, getArbitrumAdapter } from './arbitrum'\nimport { ChainNameBase, getBaseAdapter } from './base'\nimport { ChainNameEthereum, getEthereumAdapter } from './ethereum'\n\nexport const getAllEvmAdapters = (config: WarpClientConfig, fallback?: Adapter): Adapter[] => [\n getEthereumAdapter(config, fallback),\n getArbitrumAdapter(config, fallback),\n getBaseAdapter(config, fallback),\n]\n\nexport const getAllEvmChainNames = (): WarpChain[] => [ChainNameArbitrum, ChainNameBase, ChainNameEthereum]\n"],"mappings":"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","names":["getProviderUrl","ethers","EthereumExplorers","ArbitrumExplorers","BaseExplorers","WarpConstants","ethers","WarpConstants","getProviderUrl","ethers","url"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@vleap/warps-adapter-evm",
3
- "version": "0.2.0-alpha.13",
3
+ "version": "0.2.0-alpha.14",
4
4
  "description": "EVM adapter for Warps SDK",
5
5
  "type": "module",
6
6
  "types": "./dist/index.d.ts",
@@ -37,6 +37,6 @@
37
37
  },
38
38
  "dependencies": {
39
39
  "ethers": "^6.15.0",
40
- "@vleap/warps": "^3.0.0-alpha.75"
40
+ "@vleap/warps": "^3.0.0-alpha.76"
41
41
  }
42
42
  }