@vleap/warps-adapter-evm 0.2.0-alpha.2 → 0.2.0-alpha.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -20,26 +20,111 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
20
20
  // src/index.ts
21
21
  var index_exports = {};
22
22
  __export(index_exports, {
23
+ ArbitrumExplorers: () => ArbitrumExplorers,
24
+ BaseExplorers: () => BaseExplorers,
23
25
  EVM_CHAIN_CONFIGS: () => EVM_CHAIN_CONFIGS,
26
+ EthereumExplorers: () => EthereumExplorers,
27
+ EvmExplorers: () => EvmExplorers,
28
+ ExplorerUrls: () => ExplorerUrls,
29
+ LocalExplorers: () => LocalExplorers,
24
30
  WarpEvmBuilder: () => WarpEvmBuilder,
25
31
  WarpEvmConstants: () => WarpEvmConstants,
26
32
  WarpEvmExecutor: () => WarpEvmExecutor,
27
33
  WarpEvmExplorer: () => WarpEvmExplorer,
28
34
  WarpEvmResults: () => WarpEvmResults,
29
35
  WarpEvmSerializer: () => WarpEvmSerializer,
30
- getEvmAdapter: () => getEvmAdapter,
36
+ getAllEvmAdapters: () => getAllEvmAdapters,
37
+ getArbitrumAdapter: () => getArbitrumAdapter,
38
+ getBaseAdapter: () => getBaseAdapter,
39
+ getEthereumAdapter: () => getEthereumAdapter,
31
40
  getEvmApiUrl: () => getEvmApiUrl,
32
- getEvmBlockTime: () => getEvmBlockTime,
33
41
  getEvmChainConfig: () => getEvmChainConfig,
34
- getEvmChainId: () => getEvmChainId,
42
+ getEvmExplorerByName: () => getEvmExplorerByName,
35
43
  getEvmExplorerUrl: () => getEvmExplorerUrl,
36
- getEvmNativeToken: () => getEvmNativeToken,
37
- getEvmRegistryAddress: () => getEvmRegistryAddress,
38
- getSupportedEnvironments: () => getSupportedEnvironments,
39
- getSupportedEvmChains: () => getSupportedEvmChains
44
+ getEvmExplorerUrlByName: () => getEvmExplorerUrlByName,
45
+ getEvmExplorers: () => getEvmExplorers,
46
+ getPrimaryEvmExplorer: () => getPrimaryEvmExplorer
40
47
  });
41
48
  module.exports = __toCommonJS(index_exports);
42
49
 
50
+ // src/constants.ts
51
+ var WarpEvmConstants = {
52
+ GasLimit: {
53
+ Default: 21e3,
54
+ ContractCall: 1e5,
55
+ ContractDeploy: 5e5,
56
+ Transfer: 21e3,
57
+ Approve: 46e3,
58
+ Swap: 2e5
59
+ },
60
+ GasPrice: {
61
+ Default: "20000000000"
62
+ },
63
+ Validation: {
64
+ MinGasLimit: 21e3,
65
+ MaxGasLimit: 3e7
66
+ }
67
+ };
68
+ var EthereumExplorers = /* @__PURE__ */ ((EthereumExplorers2) => {
69
+ EthereumExplorers2["Etherscan"] = "etherscan";
70
+ EthereumExplorers2["EtherscanSepolia"] = "etherscan_sepolia";
71
+ EthereumExplorers2["Ethplorer"] = "ethplorer";
72
+ EthereumExplorers2["Blockscout"] = "blockscout";
73
+ EthereumExplorers2["BlockscoutSepolia"] = "blockscout_sepolia";
74
+ return EthereumExplorers2;
75
+ })(EthereumExplorers || {});
76
+ var ArbitrumExplorers = /* @__PURE__ */ ((ArbitrumExplorers2) => {
77
+ ArbitrumExplorers2["Arbiscan"] = "arbiscan";
78
+ ArbitrumExplorers2["ArbiscanSepolia"] = "arbiscan_sepolia";
79
+ ArbitrumExplorers2["BlockscoutArbitrum"] = "blockscout_arbitrum";
80
+ ArbitrumExplorers2["BlockscoutArbitrumSepolia"] = "blockscout_arbitrum_sepolia";
81
+ return ArbitrumExplorers2;
82
+ })(ArbitrumExplorers || {});
83
+ var BaseExplorers = /* @__PURE__ */ ((BaseExplorers2) => {
84
+ BaseExplorers2["Basescan"] = "basescan";
85
+ BaseExplorers2["BasescanSepolia"] = "basescan_sepolia";
86
+ BaseExplorers2["BlockscoutBase"] = "blockscout_base";
87
+ BaseExplorers2["BlockscoutBaseSepolia"] = "blockscout_base_sepolia";
88
+ return BaseExplorers2;
89
+ })(BaseExplorers || {});
90
+ var LocalExplorers = /* @__PURE__ */ ((LocalExplorers2) => {
91
+ LocalExplorers2["LocalBlockscout"] = "local_blockscout";
92
+ return LocalExplorers2;
93
+ })(LocalExplorers || {});
94
+ var EvmExplorers = {
95
+ ethereum: {
96
+ mainnet: ["etherscan" /* Etherscan */, "ethplorer" /* Ethplorer */, "blockscout" /* Blockscout */],
97
+ testnet: ["etherscan_sepolia" /* EtherscanSepolia */, "blockscout_sepolia" /* BlockscoutSepolia */],
98
+ devnet: ["local_blockscout" /* LocalBlockscout */]
99
+ },
100
+ arbitrum: {
101
+ mainnet: ["arbiscan" /* Arbiscan */, "blockscout_arbitrum" /* BlockscoutArbitrum */],
102
+ testnet: ["arbiscan_sepolia" /* ArbiscanSepolia */, "blockscout_arbitrum_sepolia" /* BlockscoutArbitrumSepolia */],
103
+ devnet: ["local_blockscout" /* LocalBlockscout */]
104
+ },
105
+ base: {
106
+ mainnet: ["basescan" /* Basescan */, "blockscout_base" /* BlockscoutBase */],
107
+ testnet: ["basescan_sepolia" /* BasescanSepolia */, "blockscout_base_sepolia" /* BlockscoutBaseSepolia */],
108
+ devnet: ["local_blockscout" /* LocalBlockscout */]
109
+ }
110
+ };
111
+ var ExplorerUrls = {
112
+ ["etherscan" /* Etherscan */]: "https://etherscan.io",
113
+ ["etherscan_sepolia" /* EtherscanSepolia */]: "https://sepolia.etherscan.io",
114
+ ["ethplorer" /* Ethplorer */]: "https://ethplorer.io",
115
+ ["blockscout" /* Blockscout */]: "https://eth.blockscout.com",
116
+ ["blockscout_sepolia" /* BlockscoutSepolia */]: "https://sepolia.blockscout.com",
117
+ ["arbiscan" /* Arbiscan */]: "https://arbiscan.io",
118
+ ["arbiscan_sepolia" /* ArbiscanSepolia */]: "https://sepolia.arbiscan.io",
119
+ ["blockscout_arbitrum" /* BlockscoutArbitrum */]: "https://arbitrum.blockscout.com",
120
+ ["blockscout_arbitrum_sepolia" /* BlockscoutArbitrumSepolia */]: "https://sepolia.blockscout.com",
121
+ ["basescan" /* Basescan */]: "https://basescan.org",
122
+ ["basescan_sepolia" /* BasescanSepolia */]: "https://sepolia.basescan.org",
123
+ ["blockscout_base" /* BlockscoutBase */]: "https://base.blockscout.com",
124
+ ["blockscout_base_sepolia" /* BlockscoutBaseSepolia */]: "https://sepolia.blockscout.com",
125
+ ["local_blockscout" /* LocalBlockscout */]: "http://localhost:4000"
126
+ };
127
+
43
128
  // src/config.ts
44
129
  var EVM_CHAIN_CONFIGS = {
45
130
  ethereum: {
@@ -139,87 +224,31 @@ var getEvmApiUrl = (env, chain = DEFAULT_CHAIN) => {
139
224
  var getEvmExplorerUrl = (env, chain = DEFAULT_CHAIN) => {
140
225
  return getEvmChainConfig(chain, env).explorerUrl;
141
226
  };
142
- var getEvmChainId = (env, chain = DEFAULT_CHAIN) => {
143
- return getEvmChainConfig(chain, env).chainId;
144
- };
145
- var getEvmRegistryAddress = (env, chain = DEFAULT_CHAIN) => {
146
- return getEvmChainConfig(chain, env).registryAddress;
147
- };
148
- var getEvmNativeToken = (env, chain = DEFAULT_CHAIN) => {
149
- return getEvmChainConfig(chain, env).nativeToken;
150
- };
151
- var getEvmBlockTime = (env, chain = DEFAULT_CHAIN) => {
152
- return getEvmChainConfig(chain, env).blockTime || 12;
227
+ var getEvmExplorers = (chain = DEFAULT_CHAIN, env) => {
228
+ const chainExplorers = EvmExplorers[chain];
229
+ if (!chainExplorers) {
230
+ throw new Error(`Unsupported EVM chain: ${chain}`);
231
+ }
232
+ const explorers = chainExplorers[env];
233
+ if (!explorers) {
234
+ throw new Error(`Unsupported environment ${env} for chain ${chain}`);
235
+ }
236
+ return explorers;
153
237
  };
154
- var getSupportedEvmChains = () => {
155
- return Object.keys(EVM_CHAIN_CONFIGS);
238
+ var getPrimaryEvmExplorer = (chain = DEFAULT_CHAIN, env) => {
239
+ const explorers = getEvmExplorers(chain, env);
240
+ return explorers[0];
156
241
  };
157
- var getSupportedEnvironments = (chain) => {
158
- const chainConfigs = EVM_CHAIN_CONFIGS[chain];
159
- if (!chainConfigs) {
160
- return [];
242
+ var getEvmExplorerUrlByName = (explorerName) => {
243
+ const url = ExplorerUrls[explorerName];
244
+ if (!url) {
245
+ throw new Error(`Unsupported explorer: ${explorerName}`);
161
246
  }
162
- return Object.keys(chainConfigs);
247
+ return url;
163
248
  };
164
-
165
- // src/constants.ts
166
- var WarpEvmConstants = {
167
- ChainName: "evm",
168
- ChainPrefix: "evm",
169
- Ether: {
170
- Identifier: "ETH",
171
- DisplayName: "Ether",
172
- Decimals: 18
173
- },
174
- GasLimit: {
175
- Default: 21e3,
176
- ContractCall: 1e5,
177
- ContractDeploy: 5e5,
178
- Transfer: 21e3,
179
- Approve: 46e3,
180
- Swap: 2e5
181
- },
182
- GasPrice: {
183
- Default: "20000000000",
184
- // 20 gwei
185
- Low: "10000000000",
186
- // 10 gwei
187
- Medium: "20000000000",
188
- // 20 gwei
189
- High: "50000000000"
190
- // 50 gwei
191
- },
192
- Network: {
193
- Ethereum: {
194
- ChainId: "1",
195
- Name: "Ethereum",
196
- BlockTime: 12
197
- },
198
- Arbitrum: {
199
- ChainId: "42161",
200
- Name: "Arbitrum",
201
- BlockTime: 1
202
- },
203
- Base: {
204
- ChainId: "8453",
205
- Name: "Base",
206
- BlockTime: 2
207
- }
208
- },
209
- Validation: {
210
- AddressLength: 42,
211
- HexPrefix: "0x",
212
- MinGasLimit: 21e3,
213
- MaxGasLimit: 3e7
214
- },
215
- Timeouts: {
216
- DefaultRpcTimeout: 3e4,
217
- // 30 seconds
218
- GasEstimationTimeout: 1e4,
219
- // 10 seconds
220
- QueryTimeout: 15e3
221
- // 15 seconds
222
- }
249
+ var getEvmExplorerByName = (chain = DEFAULT_CHAIN, env, name) => {
250
+ const explorers = getEvmExplorers(chain, env);
251
+ return explorers.find((explorer) => explorer.toLowerCase() === name.toLowerCase());
223
252
  };
224
253
 
225
254
  // src/WarpEvmBuilder.ts
@@ -632,8 +661,19 @@ var WarpEvmExecutor = class {
632
661
  executable.action,
633
662
  executable.resolvedInputs
634
663
  );
635
- const adapter = getEvmAdapter(this.config);
636
- const next = (0, import_warps3.getNextInfo)(this.config, adapter, executable.warp, executable.action, results);
664
+ const mockAdapter = {
665
+ chain: "ethereum",
666
+ prefix: "eth",
667
+ builder: () => ({}),
668
+ executor: {},
669
+ results: {},
670
+ serializer: {},
671
+ registry: {},
672
+ explorer: () => ({}),
673
+ abiBuilder: () => ({}),
674
+ brandBuilder: () => ({})
675
+ };
676
+ const next = (0, import_warps3.getNextInfo)(this.config, mockAdapter, executable.warp, executable.action, results);
637
677
  return {
638
678
  success: isSuccess,
639
679
  warp: executable.warp,
@@ -740,54 +780,133 @@ var WarpEvmExecutor = class {
740
780
 
741
781
  // src/WarpEvmExplorer.ts
742
782
  var WarpEvmExplorer = class {
743
- constructor(chainInfo, chainName = "ethereum") {
744
- this.chainInfo = chainInfo;
745
- this.chainName = chainName;
783
+ constructor(chain, config) {
784
+ this.chain = chain;
785
+ this.config = config;
786
+ }
787
+ getExplorerUrlByName(explorer) {
788
+ const userPreference = this.chain.preferences?.explorers?.[this.chain.name];
789
+ if (userPreference && !explorer) {
790
+ const url2 = ExplorerUrls[userPreference];
791
+ if (url2) return url2;
792
+ }
793
+ if (explorer) {
794
+ const url2 = ExplorerUrls[explorer];
795
+ if (url2) return url2;
796
+ }
797
+ const primaryExplorer = getPrimaryEvmExplorer(this.chain.name, this.config.env);
798
+ const url = ExplorerUrls[primaryExplorer];
799
+ return url || getEvmExplorerUrl(this.config.env, this.chain.name);
746
800
  }
747
- getAccountUrl(address) {
748
- const baseUrl = this.chainInfo.explorerUrl || getEvmExplorerUrl("mainnet", this.chainName);
801
+ getAccountUrl(address, explorer) {
802
+ const baseUrl = this.getExplorerUrlByName(explorer);
749
803
  return `${baseUrl}/address/${address}`;
750
804
  }
751
- getTransactionUrl(hash) {
752
- const baseUrl = this.chainInfo.explorerUrl || getEvmExplorerUrl("mainnet", this.chainName);
805
+ getTransactionUrl(hash, explorer) {
806
+ const baseUrl = this.getExplorerUrlByName(explorer);
753
807
  return `${baseUrl}/tx/${hash}`;
754
808
  }
809
+ getBlockUrl(blockNumber, explorer) {
810
+ const baseUrl = this.getExplorerUrlByName(explorer);
811
+ return `${baseUrl}/block/${blockNumber}`;
812
+ }
813
+ getTokenUrl(tokenAddress, explorer) {
814
+ const baseUrl = this.getExplorerUrlByName(explorer);
815
+ return `${baseUrl}/token/${tokenAddress}`;
816
+ }
817
+ getContractUrl(contractAddress, explorer) {
818
+ const baseUrl = this.getExplorerUrlByName(explorer);
819
+ return `${baseUrl}/address/${contractAddress}`;
820
+ }
821
+ getAllExplorers() {
822
+ try {
823
+ return getEvmExplorers(this.chain.name, this.config.env);
824
+ } catch {
825
+ return ["Default"];
826
+ }
827
+ }
828
+ getExplorerByName(name) {
829
+ try {
830
+ return getEvmExplorerByName(this.chain.name, this.config.env, name);
831
+ } catch {
832
+ return void 0;
833
+ }
834
+ }
835
+ getAccountUrls(address) {
836
+ const explorers = this.getAllExplorers();
837
+ const urls = {};
838
+ explorers.forEach((explorer) => {
839
+ const url = ExplorerUrls[explorer];
840
+ if (url) {
841
+ urls[explorer] = `${url}/address/${address}`;
842
+ }
843
+ });
844
+ return urls;
845
+ }
846
+ getTransactionUrls(hash) {
847
+ const explorers = this.getAllExplorers();
848
+ const urls = {};
849
+ explorers.forEach((explorer) => {
850
+ const url = ExplorerUrls[explorer];
851
+ if (url) {
852
+ urls[explorer] = `${url}/tx/${hash}`;
853
+ }
854
+ });
855
+ return urls;
856
+ }
755
857
  };
756
858
 
757
859
  // src/main.ts
758
- var getEvmAdapter = (config, fallback) => {
759
- if (!fallback) throw new Error("EVM adapter requires a fallback adapter");
760
- return {
761
- chain: WarpEvmConstants.ChainName,
762
- prefix: WarpEvmConstants.ChainPrefix,
763
- builder: () => new WarpEvmBuilder(config),
764
- executor: new WarpEvmExecutor(config),
765
- results: new WarpEvmResults(config),
766
- serializer: new WarpEvmSerializer(),
767
- registry: fallback.registry,
768
- explorer: (chainInfo) => new WarpEvmExplorer(chainInfo),
769
- abiBuilder: () => fallback.abiBuilder(),
770
- brandBuilder: () => fallback.brandBuilder()
860
+ var getEthereumAdapter = createEvmAdapter("ethereum", "eth");
861
+ var getArbitrumAdapter = createEvmAdapter("arbitrum", "arb");
862
+ var getBaseAdapter = createEvmAdapter("base", "base");
863
+ var getAllEvmAdapters = (config, fallback) => [
864
+ getEthereumAdapter(config, fallback),
865
+ getArbitrumAdapter(config, fallback),
866
+ getBaseAdapter(config, fallback)
867
+ ];
868
+ function createEvmAdapter(chainName, chainPrefix) {
869
+ return (config, fallback) => {
870
+ if (!fallback) throw new Error(`${chainName} adapter requires a fallback adapter`);
871
+ return {
872
+ chain: chainName,
873
+ prefix: chainPrefix,
874
+ builder: () => new WarpEvmBuilder(config),
875
+ executor: new WarpEvmExecutor(config),
876
+ results: new WarpEvmResults(config),
877
+ serializer: new WarpEvmSerializer(),
878
+ registry: fallback.registry,
879
+ explorer: (chainInfo) => new WarpEvmExplorer(chainInfo, config),
880
+ abiBuilder: () => fallback.abiBuilder(),
881
+ brandBuilder: () => fallback.brandBuilder()
882
+ };
771
883
  };
772
- };
884
+ }
773
885
  // Annotate the CommonJS export names for ESM import in node:
774
886
  0 && (module.exports = {
887
+ ArbitrumExplorers,
888
+ BaseExplorers,
775
889
  EVM_CHAIN_CONFIGS,
890
+ EthereumExplorers,
891
+ EvmExplorers,
892
+ ExplorerUrls,
893
+ LocalExplorers,
776
894
  WarpEvmBuilder,
777
895
  WarpEvmConstants,
778
896
  WarpEvmExecutor,
779
897
  WarpEvmExplorer,
780
898
  WarpEvmResults,
781
899
  WarpEvmSerializer,
782
- getEvmAdapter,
900
+ getAllEvmAdapters,
901
+ getArbitrumAdapter,
902
+ getBaseAdapter,
903
+ getEthereumAdapter,
783
904
  getEvmApiUrl,
784
- getEvmBlockTime,
785
905
  getEvmChainConfig,
786
- getEvmChainId,
906
+ getEvmExplorerByName,
787
907
  getEvmExplorerUrl,
788
- getEvmNativeToken,
789
- getEvmRegistryAddress,
790
- getSupportedEnvironments,
791
- getSupportedEvmChains
908
+ getEvmExplorerUrlByName,
909
+ getEvmExplorers,
910
+ getPrimaryEvmExplorer
792
911
  });
793
912
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/index.ts","../src/config.ts","../src/constants.ts","../src/WarpEvmBuilder.ts","../src/WarpEvmExecutor.ts","../src/WarpEvmResults.ts","../src/WarpEvmSerializer.ts","../src/WarpEvmExplorer.ts","../src/main.ts"],"sourcesContent":["export * from './config'\nexport * from './constants'\nexport * from './main'\nexport * from './WarpEvmBuilder'\nexport * from './WarpEvmExecutor'\nexport * from './WarpEvmExplorer'\nexport * from './WarpEvmResults'\nexport * from './WarpEvmSerializer'\n","import { WarpChainEnv } from '@vleap/warps'\n\n// EVM Chain configurations\nexport interface EvmChainConfig {\n apiUrl: string\n explorerUrl: string\n chainId: string\n registryAddress: string\n nativeToken: string\n blockTime?: number\n}\n\n// Predefined chain configurations\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: 12,\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: 12,\n },\n devnet: {\n apiUrl: 'http://localhost:8545',\n explorerUrl: 'http://localhost:4000',\n chainId: '1337',\n registryAddress: '0x0000000000000000000000000000000000000000',\n nativeToken: 'ETH',\n blockTime: 12,\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: 1,\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: 1,\n },\n devnet: {\n apiUrl: 'http://localhost:8545',\n explorerUrl: 'http://localhost:4000',\n chainId: '1337',\n registryAddress: '0x0000000000000000000000000000000000000000',\n nativeToken: 'ETH',\n blockTime: 1,\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: 2,\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: 2,\n },\n devnet: {\n apiUrl: 'http://localhost:8545',\n explorerUrl: 'http://localhost:4000',\n chainId: '1337',\n registryAddress: '0x0000000000000000000000000000000000000000',\n nativeToken: 'ETH',\n blockTime: 2,\n },\n },\n}\n\n// Default chain (Ethereum)\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\nexport const getEvmChainId = (env: WarpChainEnv, chain: string = DEFAULT_CHAIN): string => {\n return getEvmChainConfig(chain, env).chainId\n}\n\nexport const getEvmRegistryAddress = (env: WarpChainEnv, chain: string = DEFAULT_CHAIN): string => {\n return getEvmChainConfig(chain, env).registryAddress\n}\n\nexport const getEvmNativeToken = (env: WarpChainEnv, chain: string = DEFAULT_CHAIN): string => {\n return getEvmChainConfig(chain, env).nativeToken\n}\n\nexport const getEvmBlockTime = (env: WarpChainEnv, chain: string = DEFAULT_CHAIN): number => {\n return getEvmChainConfig(chain, env).blockTime || 12\n}\n\n// Helper function to get all supported chains\nexport const getSupportedEvmChains = (): string[] => {\n return Object.keys(EVM_CHAIN_CONFIGS)\n}\n\n// Helper function to get all supported environments for a chain\nexport const getSupportedEnvironments = (chain: string): WarpChainEnv[] => {\n const chainConfigs = EVM_CHAIN_CONFIGS[chain]\n if (!chainConfigs) {\n return []\n }\n return Object.keys(chainConfigs) as WarpChainEnv[]\n}\n","export const WarpEvmConstants = {\n ChainName: 'evm',\n ChainPrefix: 'evm',\n Ether: {\n Identifier: 'ETH',\n DisplayName: 'Ether',\n Decimals: 18,\n },\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', // 20 gwei\n Low: '10000000000', // 10 gwei\n Medium: '20000000000', // 20 gwei\n High: '50000000000', // 50 gwei\n },\n Network: {\n Ethereum: {\n ChainId: '1',\n Name: 'Ethereum',\n BlockTime: 12,\n },\n Arbitrum: {\n ChainId: '42161',\n Name: 'Arbitrum',\n BlockTime: 1,\n },\n Base: {\n ChainId: '8453',\n Name: 'Base',\n BlockTime: 2,\n },\n },\n Validation: {\n AddressLength: 42,\n HexPrefix: '0x',\n MinGasLimit: 21000,\n MaxGasLimit: 30000000,\n },\n Timeouts: {\n DefaultRpcTimeout: 30000, // 30 seconds\n GasEstimationTimeout: 10000, // 10 seconds\n QueryTimeout: 15000, // 15 seconds\n },\n}\n","import { BaseWarpBuilder, CombinedWarpBuilder, Warp, WarpCacheConfig, WarpClientConfig } from '@vleap/warps'\nimport { ethers } from 'ethers'\nimport { getEvmApiUrl } from './config'\n\nexport class WarpEvmBuilder implements CombinedWarpBuilder {\n private warp: Partial<Warp> = {}\n private actions: any[] = []\n\n constructor(private readonly config: WarpClientConfig) {}\n\n async createFromRaw(encoded: string): Promise<Warp> {\n try {\n const decoded = JSON.parse(encoded)\n return decoded as Warp\n } catch (error) {\n throw new Error(`Failed to decode warp from raw data: ${error}`)\n }\n }\n\n setTitle(title: string): BaseWarpBuilder {\n this.warp.title = title\n return this\n }\n\n setDescription(description: string): BaseWarpBuilder {\n this.warp.description = description\n return this\n }\n\n setPreview(preview: string): BaseWarpBuilder {\n this.warp.preview = preview\n return this\n }\n\n setActions(actions: any[]): BaseWarpBuilder {\n this.actions = actions\n return this\n }\n\n addAction(action: any): BaseWarpBuilder {\n this.actions.push(action)\n return this\n }\n\n async build(): Promise<Warp> {\n if (!this.warp.title) {\n throw new Error('Warp title is required')\n }\n\n return {\n protocol: 'warp',\n name: this.warp.name || 'evm-warp',\n title: this.warp.title,\n description: this.warp.description || null,\n preview: this.warp.preview || null,\n actions: this.actions,\n meta: {\n chain: 'evm',\n hash: ethers.keccak256(ethers.toUtf8Bytes(this.warp.title)),\n creator: this.config.user?.wallets?.evm || '',\n createdAt: new Date().toISOString(),\n },\n } as Warp\n }\n\n createInscriptionTransaction(warp: Warp): ethers.TransactionRequest {\n const warpData = JSON.stringify(warp)\n const data = ethers.toUtf8Bytes(warpData)\n\n return {\n data: ethers.hexlify(data),\n }\n }\n\n async createFromTransaction(tx: ethers.TransactionResponse, validate?: boolean): Promise<Warp> {\n if (!tx.data || tx.data === '0x') {\n throw new Error('Transaction has no data')\n }\n\n try {\n const data = ethers.toUtf8String(tx.data)\n const warp = JSON.parse(data)\n\n if (validate) {\n if (!warp.protocol || warp.protocol !== 'warp') {\n throw new Error('Invalid warp protocol')\n }\n if (!warp.title) {\n throw new Error('Warp title is required')\n }\n }\n\n return warp as Warp\n } catch (error) {\n throw new Error(`Failed to create warp from transaction: ${error}`)\n }\n }\n\n async createFromTransactionHash(hash: string, cache?: WarpCacheConfig): Promise<Warp | null> {\n try {\n const provider = new ethers.JsonRpcProvider(getEvmApiUrl(this.config.env))\n const tx = await provider.getTransaction(hash)\n\n if (!tx) {\n return null\n }\n\n return await this.createFromTransaction(tx)\n } catch (error) {\n return null\n }\n }\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 { getEvmAdapter } from './main'\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 adapter = getEvmAdapter(this.config)\n const next = getNextInfo(this.config, adapter, 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","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 } from '@vleap/warps'\nimport { getEvmExplorerUrl } from './config'\n\nexport class WarpEvmExplorer implements AdapterWarpExplorer {\n private readonly chainInfo: WarpChainInfo\n private readonly chainName: string\n\n constructor(chainInfo: WarpChainInfo, chainName: string = 'ethereum') {\n this.chainInfo = chainInfo\n this.chainName = chainName\n }\n\n getAccountUrl(address: string): string {\n const baseUrl = this.chainInfo.explorerUrl || getEvmExplorerUrl('mainnet', this.chainName)\n return `${baseUrl}/address/${address}`\n }\n\n getTransactionUrl(hash: string): string {\n const baseUrl = this.chainInfo.explorerUrl || getEvmExplorerUrl('mainnet', this.chainName)\n return `${baseUrl}/tx/${hash}`\n }\n}\n","import { Adapter, AdapterFactory, WarpClientConfig } from '@vleap/warps'\nimport { WarpChainInfo } from '@vleap/warps/src/types'\nimport { WarpEvmBuilder } from './WarpEvmBuilder'\nimport { WarpEvmExecutor } from './WarpEvmExecutor'\nimport { WarpEvmExplorer } from './WarpEvmExplorer'\nimport { WarpEvmResults } from './WarpEvmResults'\nimport { WarpEvmSerializer } from './WarpEvmSerializer'\nimport { WarpEvmConstants } from './constants'\n\nexport const getEvmAdapter: AdapterFactory = (config: WarpClientConfig, fallback?: Adapter) => {\n if (!fallback) throw new Error('EVM adapter requires a fallback adapter')\n\n return {\n chain: WarpEvmConstants.ChainName,\n prefix: WarpEvmConstants.ChainPrefix,\n builder: () => new WarpEvmBuilder(config),\n executor: new WarpEvmExecutor(config),\n results: new WarpEvmResults(config),\n serializer: new WarpEvmSerializer(),\n registry: fallback.registry,\n explorer: (chainInfo: WarpChainInfo) => new WarpEvmExplorer(chainInfo),\n abiBuilder: () => fallback.abiBuilder(),\n brandBuilder: () => fallback.brandBuilder(),\n }\n}\n"],"mappings":"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","names":["import_warps","import_ethers","import_warps","import_ethers"]}
1
+ {"version":3,"sources":["../src/index.ts","../src/constants.ts","../src/config.ts","../src/WarpEvmBuilder.ts","../src/WarpEvmExecutor.ts","../src/WarpEvmResults.ts","../src/WarpEvmSerializer.ts","../src/WarpEvmExplorer.ts","../src/main.ts"],"sourcesContent":["export * from './config'\nexport * from './constants'\nexport * from './main'\nexport * from './WarpEvmBuilder'\nexport * from './WarpEvmExecutor'\nexport * from './WarpEvmExplorer'\nexport * from './WarpEvmResults'\nexport * from './WarpEvmSerializer'\n","import { WarpExplorerName } from '@vleap/warps'\n\nexport 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 enum LocalExplorers {\n LocalBlockscout = 'local_blockscout',\n}\n\nexport type ExplorerName = EthereumExplorers | ArbitrumExplorers | BaseExplorers | (LocalExplorers & WarpExplorerName)\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: [LocalExplorers.LocalBlockscout] as const,\n },\n arbitrum: {\n mainnet: [ArbitrumExplorers.Arbiscan, ArbitrumExplorers.BlockscoutArbitrum] as const,\n testnet: [ArbitrumExplorers.ArbiscanSepolia, ArbitrumExplorers.BlockscoutArbitrumSepolia] as const,\n devnet: [LocalExplorers.LocalBlockscout] as const,\n },\n base: {\n mainnet: [BaseExplorers.Basescan, BaseExplorers.BlockscoutBase] as const,\n testnet: [BaseExplorers.BasescanSepolia, BaseExplorers.BlockscoutBaseSepolia] as const,\n devnet: [LocalExplorers.LocalBlockscout] 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 [LocalExplorers.LocalBlockscout]: 'http://localhost:4000',\n}\n","import { WarpChainEnv } from '@vleap/warps'\nimport { EvmExplorers, ExplorerName, ExplorerUrls } from './constants'\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: 12,\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: 12,\n },\n devnet: {\n apiUrl: 'http://localhost:8545',\n explorerUrl: 'http://localhost:4000',\n chainId: '1337',\n registryAddress: '0x0000000000000000000000000000000000000000',\n nativeToken: 'ETH',\n blockTime: 12,\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: 1,\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: 1,\n },\n devnet: {\n apiUrl: 'http://localhost:8545',\n explorerUrl: 'http://localhost:4000',\n chainId: '1337',\n registryAddress: '0x0000000000000000000000000000000000000000',\n nativeToken: 'ETH',\n blockTime: 1,\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: 2,\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: 2,\n },\n devnet: {\n apiUrl: 'http://localhost:8545',\n explorerUrl: 'http://localhost:4000',\n chainId: '1337',\n registryAddress: '0x0000000000000000000000000000000000000000',\n nativeToken: 'ETH',\n blockTime: 2,\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\nexport const getEvmExplorers = (chain: string = DEFAULT_CHAIN, env: WarpChainEnv): readonly ExplorerName[] => {\n const chainExplorers = EvmExplorers[chain as keyof typeof EvmExplorers]\n if (!chainExplorers) {\n throw new Error(`Unsupported EVM chain: ${chain}`)\n }\n\n const explorers = chainExplorers[env]\n if (!explorers) {\n throw new Error(`Unsupported environment ${env} for chain ${chain}`)\n }\n\n return explorers\n}\n\nexport const getPrimaryEvmExplorer = (chain: string = DEFAULT_CHAIN, env: WarpChainEnv): ExplorerName => {\n const explorers = getEvmExplorers(chain, env)\n return explorers[0]\n}\n\nexport const getEvmExplorerUrlByName = (explorerName: ExplorerName): string => {\n const url = ExplorerUrls[explorerName]\n if (!url) {\n throw new Error(`Unsupported explorer: ${explorerName}`)\n }\n return url\n}\n\nexport const getEvmExplorerByName = (chain: string = DEFAULT_CHAIN, env: WarpChainEnv, name: string): ExplorerName | undefined => {\n const explorers = getEvmExplorers(chain, env)\n return explorers.find((explorer) => explorer.toLowerCase() === name.toLowerCase())\n}\n","import { BaseWarpBuilder, CombinedWarpBuilder, Warp, WarpCacheConfig, WarpClientConfig } from '@vleap/warps'\nimport { ethers } from 'ethers'\nimport { getEvmApiUrl } from './config'\n\nexport class WarpEvmBuilder implements CombinedWarpBuilder {\n private warp: Partial<Warp> = {}\n private actions: any[] = []\n\n constructor(private readonly config: WarpClientConfig) {}\n\n async createFromRaw(encoded: string): Promise<Warp> {\n try {\n const decoded = JSON.parse(encoded)\n return decoded as Warp\n } catch (error) {\n throw new Error(`Failed to decode warp from raw data: ${error}`)\n }\n }\n\n setTitle(title: string): BaseWarpBuilder {\n this.warp.title = title\n return this\n }\n\n setDescription(description: string): BaseWarpBuilder {\n this.warp.description = description\n return this\n }\n\n setPreview(preview: string): BaseWarpBuilder {\n this.warp.preview = preview\n return this\n }\n\n setActions(actions: any[]): BaseWarpBuilder {\n this.actions = actions\n return this\n }\n\n addAction(action: any): BaseWarpBuilder {\n this.actions.push(action)\n return this\n }\n\n async build(): Promise<Warp> {\n if (!this.warp.title) {\n throw new Error('Warp title is required')\n }\n\n return {\n protocol: 'warp',\n name: this.warp.name || 'evm-warp',\n title: this.warp.title,\n description: this.warp.description || null,\n preview: this.warp.preview || null,\n actions: this.actions,\n meta: {\n chain: 'evm',\n hash: ethers.keccak256(ethers.toUtf8Bytes(this.warp.title)),\n creator: this.config.user?.wallets?.evm || '',\n createdAt: new Date().toISOString(),\n },\n } as Warp\n }\n\n createInscriptionTransaction(warp: Warp): ethers.TransactionRequest {\n const warpData = JSON.stringify(warp)\n const data = ethers.toUtf8Bytes(warpData)\n\n return {\n data: ethers.hexlify(data),\n }\n }\n\n async createFromTransaction(tx: ethers.TransactionResponse, validate?: boolean): Promise<Warp> {\n if (!tx.data || tx.data === '0x') {\n throw new Error('Transaction has no data')\n }\n\n try {\n const data = ethers.toUtf8String(tx.data)\n const warp = JSON.parse(data)\n\n if (validate) {\n if (!warp.protocol || warp.protocol !== 'warp') {\n throw new Error('Invalid warp protocol')\n }\n if (!warp.title) {\n throw new Error('Warp title is required')\n }\n }\n\n return warp as Warp\n } catch (error) {\n throw new Error(`Failed to create warp from transaction: ${error}`)\n }\n }\n\n async createFromTransactionHash(hash: string, cache?: WarpCacheConfig): Promise<Warp | null> {\n try {\n const provider = new ethers.JsonRpcProvider(getEvmApiUrl(this.config.env))\n const tx = await provider.getTransaction(hash)\n\n if (!tx) {\n return null\n }\n\n return await this.createFromTransaction(tx)\n } catch (error) {\n return null\n }\n }\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 // Create a mock adapter for getNextInfo (only needs prefix and chain)\n const mockAdapter = {\n chain: 'ethereum' as any,\n prefix: 'eth',\n builder: () => ({}) as any,\n executor: {} as any,\n results: {} as any,\n serializer: {} as any,\n registry: {} as any,\n explorer: () => ({}) as any,\n abiBuilder: () => ({}) as any,\n brandBuilder: () => ({}) as any,\n }\n const next = getNextInfo(this.config, mockAdapter, 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","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 { getEvmExplorerByName, getEvmExplorerUrl, getEvmExplorers, getPrimaryEvmExplorer } from './config'\nimport { 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 getExplorerUrlByName(explorer?: ExplorerName): string {\n const userPreference = this.chain.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 = getPrimaryEvmExplorer(this.chain.name, this.config.env)\n const url = ExplorerUrls[primaryExplorer]\n return url || getEvmExplorerUrl(this.config.env, this.chain.name)\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 getTokenUrl(tokenAddress: string, explorer?: ExplorerName): string {\n const baseUrl = this.getExplorerUrlByName(explorer)\n return `${baseUrl}/token/${tokenAddress}`\n }\n\n getContractUrl(contractAddress: string, explorer?: ExplorerName): string {\n const baseUrl = this.getExplorerUrlByName(explorer)\n return `${baseUrl}/address/${contractAddress}`\n }\n\n getAllExplorers(): readonly ExplorerName[] {\n try {\n return getEvmExplorers(this.chain.name, this.config.env)\n } catch {\n return ['Default' as ExplorerName]\n }\n }\n\n getExplorerByName(name: string): ExplorerName | undefined {\n try {\n return getEvmExplorerByName(this.chain.name, this.config.env, name)\n } catch {\n return undefined\n }\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, WarpClientConfig } from '@vleap/warps'\nimport { WarpChainInfo } from '@vleap/warps/src/types'\nimport { WarpEvmBuilder } from './WarpEvmBuilder'\nimport { WarpEvmExecutor } from './WarpEvmExecutor'\nimport { WarpEvmExplorer } from './WarpEvmExplorer'\nimport { WarpEvmResults } from './WarpEvmResults'\nimport { WarpEvmSerializer } from './WarpEvmSerializer'\n\nexport const getEthereumAdapter: AdapterFactory = createEvmAdapter('ethereum', 'eth')\nexport const getArbitrumAdapter: AdapterFactory = createEvmAdapter('arbitrum', 'arb')\nexport const getBaseAdapter: AdapterFactory = createEvmAdapter('base', 'base')\n\nexport const getAllEvmAdapters = (config: WarpClientConfig, fallback?: Adapter): Adapter[] => [\n getEthereumAdapter(config, fallback),\n getArbitrumAdapter(config, fallback),\n getBaseAdapter(config, fallback),\n]\n\nfunction createEvmAdapter(chainName: string, chainPrefix: string): 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 prefix: chainPrefix,\n builder: () => new WarpEvmBuilder(config),\n executor: new WarpEvmExecutor(config),\n results: new WarpEvmResults(config),\n serializer: new WarpEvmSerializer(),\n registry: fallback.registry,\n explorer: (chainInfo: WarpChainInfo) => new WarpEvmExplorer(chainInfo, config),\n abiBuilder: () => fallback.abiBuilder(),\n brandBuilder: () => fallback.brandBuilder(),\n }\n }\n}\n"],"mappings":"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","names":["EthereumExplorers","ArbitrumExplorers","BaseExplorers","LocalExplorers","import_warps","import_ethers","import_warps","import_ethers","url"]}