@coinbase/agentkit 0.0.0-nightly-20250919210434 → 0.0.0-nightly-20251002210424

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.
Files changed (104) hide show
  1. package/README.md +170 -39
  2. package/dist/action-providers/across/schemas.d.ts +1 -1
  3. package/dist/action-providers/baseAccount/baseAccountActionProvider.d.ts +46 -0
  4. package/dist/action-providers/baseAccount/baseAccountActionProvider.js +404 -0
  5. package/dist/action-providers/baseAccount/baseAccountActionProvider.test.d.ts +1 -0
  6. package/dist/action-providers/baseAccount/baseAccountActionProvider.test.js +325 -0
  7. package/dist/action-providers/baseAccount/index.d.ts +2 -0
  8. package/dist/action-providers/baseAccount/index.js +18 -0
  9. package/dist/action-providers/baseAccount/schemas.d.ts +43 -0
  10. package/dist/action-providers/baseAccount/schemas.js +62 -0
  11. package/dist/action-providers/baseAccount/types.d.ts +17 -0
  12. package/dist/action-providers/baseAccount/types.js +2 -0
  13. package/dist/action-providers/baseAccount/utils.d.ts +14 -0
  14. package/dist/action-providers/baseAccount/utils.js +57 -0
  15. package/dist/action-providers/cdp/cdpApiActionProvider.js +7 -30
  16. package/dist/action-providers/cdp/cdpApiActionProvider.test.js +2 -8
  17. package/dist/action-providers/cdp/cdpEvmWalletActionProvider.js +2 -1
  18. package/dist/action-providers/cdp/cdpEvmWalletActionProvider.test.js +3 -1
  19. package/dist/action-providers/cdp/cdpSmartWalletActionProvider.js +2 -1
  20. package/dist/action-providers/cdp/cdpSmartWalletActionProvider.test.js +3 -1
  21. package/dist/action-providers/cdp/faucetUtils.d.ts +38 -0
  22. package/dist/action-providers/cdp/faucetUtils.js +81 -0
  23. package/dist/action-providers/cdp/swapUtils.d.ts +0 -9
  24. package/dist/action-providers/cdp/swapUtils.js +0 -36
  25. package/dist/action-providers/clanker/schemas.d.ts +6 -6
  26. package/dist/action-providers/enso/constants.d.ts +4 -0
  27. package/dist/action-providers/enso/constants.js +10 -0
  28. package/dist/action-providers/enso/ensoActionProvider.d.ts +34 -0
  29. package/dist/action-providers/enso/ensoActionProvider.js +125 -0
  30. package/dist/action-providers/enso/ensoActionProvider.test.d.ts +1 -0
  31. package/dist/action-providers/enso/ensoActionProvider.test.js +141 -0
  32. package/dist/action-providers/enso/index.d.ts +1 -0
  33. package/dist/action-providers/enso/index.js +17 -0
  34. package/dist/action-providers/enso/schemas.d.ts +23 -0
  35. package/dist/action-providers/enso/schemas.js +22 -0
  36. package/dist/action-providers/erc20/constants.d.ts +2 -0
  37. package/dist/action-providers/erc20/constants.js +2 -0
  38. package/dist/action-providers/erc20/erc20ActionProvider.d.ts +17 -1
  39. package/dist/action-providers/erc20/erc20ActionProvider.js +102 -0
  40. package/dist/action-providers/erc20/erc20ActionProvider.test.js +201 -0
  41. package/dist/action-providers/erc20/schemas.d.ts +29 -0
  42. package/dist/action-providers/erc20/schemas.js +34 -1
  43. package/dist/action-providers/flaunch/client_utils.d.ts +25 -0
  44. package/dist/action-providers/flaunch/client_utils.js +62 -0
  45. package/dist/action-providers/flaunch/constants.d.ts +41 -20
  46. package/dist/action-providers/flaunch/constants.js +111 -36
  47. package/dist/action-providers/flaunch/flaunchActionProvider.d.ts +4 -43
  48. package/dist/action-providers/flaunch/flaunchActionProvider.js +132 -200
  49. package/dist/action-providers/flaunch/flaunchActionProvider.test.js +108 -13
  50. package/dist/action-providers/flaunch/metadata_utils.d.ts +12 -0
  51. package/dist/action-providers/flaunch/metadata_utils.js +216 -0
  52. package/dist/action-providers/flaunch/schemas.d.ts +39 -3
  53. package/dist/action-providers/flaunch/schemas.js +62 -10
  54. package/dist/action-providers/flaunch/{utils.d.ts → swap_utils.d.ts} +17 -19
  55. package/dist/action-providers/flaunch/{utils.js → swap_utils.js} +137 -172
  56. package/dist/action-providers/index.d.ts +4 -1
  57. package/dist/action-providers/index.js +4 -1
  58. package/dist/action-providers/superfluid/superfluidSuperTokenCreatorActionProvider.js +5 -4
  59. package/dist/action-providers/superfluid/utils/parseLogs.d.ts +2 -1
  60. package/dist/action-providers/superfluid/utils/parseLogs.js +6 -3
  61. package/dist/action-providers/wallet/walletActionProvider.js +3 -0
  62. package/dist/action-providers/weth/constants.d.ts +0 -1
  63. package/dist/action-providers/weth/constants.js +1 -2
  64. package/dist/action-providers/weth/schemas.js +6 -2
  65. package/dist/action-providers/weth/wethActionProvider.d.ts +7 -0
  66. package/dist/action-providers/weth/wethActionProvider.js +57 -32
  67. package/dist/action-providers/weth/wethActionProvider.test.js +60 -11
  68. package/dist/action-providers/x402/utils.d.ts +4 -4
  69. package/dist/action-providers/x402/utils.js +42 -5
  70. package/dist/action-providers/x402/x402ActionProvider.d.ts +6 -6
  71. package/dist/action-providers/x402/x402ActionProvider.js +23 -8
  72. package/dist/action-providers/x402/x402ActionProvider.test.js +50 -6
  73. package/dist/action-providers/yelay/constants.d.ts +64 -0
  74. package/dist/action-providers/yelay/constants.js +137 -0
  75. package/dist/action-providers/yelay/index.d.ts +2 -0
  76. package/dist/action-providers/yelay/index.js +18 -0
  77. package/dist/action-providers/yelay/schemas.d.ts +47 -0
  78. package/dist/action-providers/yelay/schemas.js +59 -0
  79. package/dist/action-providers/yelay/types.d.ts +24 -0
  80. package/dist/action-providers/yelay/types.js +2 -0
  81. package/dist/action-providers/yelay/yelayActionProvider.d.ts +70 -0
  82. package/dist/action-providers/yelay/yelayActionProvider.js +329 -0
  83. package/dist/action-providers/yelay/yelayActionProvider.test.d.ts +1 -0
  84. package/dist/action-providers/yelay/yelayActionProvider.test.js +302 -0
  85. package/dist/utils.d.ts +10 -0
  86. package/dist/utils.js +43 -13
  87. package/dist/wallet-providers/cdpEvmWalletProvider.js +5 -21
  88. package/dist/wallet-providers/cdpSmartWalletProvider.js +10 -7
  89. package/dist/wallet-providers/cdpSmartWalletProvider.test.js +0 -8
  90. package/dist/wallet-providers/cdpSolanaWalletProvider.d.ts +14 -0
  91. package/dist/wallet-providers/cdpSolanaWalletProvider.js +39 -3
  92. package/dist/wallet-providers/cdpSolanaWalletProvider.test.js +16 -0
  93. package/dist/wallet-providers/privySvmWalletProvider.d.ts +14 -0
  94. package/dist/wallet-providers/privySvmWalletProvider.js +17 -0
  95. package/dist/wallet-providers/privySvmWalletProvider.test.js +10 -0
  96. package/dist/wallet-providers/solanaKeypairWalletProvider.d.ts +14 -0
  97. package/dist/wallet-providers/solanaKeypairWalletProvider.js +17 -0
  98. package/dist/wallet-providers/svmWalletProvider.d.ts +34 -0
  99. package/dist/wallet-providers/svmWalletProvider.js +43 -0
  100. package/dist/wallet-providers/svmWalletProvider.test.js +10 -0
  101. package/dist/wallet-providers/viemWalletProvider.d.ts +1 -1
  102. package/dist/wallet-providers/viemWalletProvider.js +5 -1
  103. package/dist/wallet-providers/viemWalletProvider.test.js +12 -1
  104. package/package.json +4 -1
@@ -1,174 +1,11 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.getSwapAmountsFromReceipt = exports.getSwapAmountsFromLog = exports.memecoinToEthWithPermit2 = exports.ethToMemecoin = exports.getAmountWithSlippage = exports.generateTokenUri = void 0;
3
+ exports.getSwapAmountsFromReceipt = exports.getSwapAmountsFromLog = exports.memecoinToEthWithPermit2 = exports.ethToMemecoin = exports.getAmountWithSlippage = void 0;
4
+ exports.buyFlaunchCoin = buyFlaunchCoin;
4
5
  const viem_1 = require("viem");
5
6
  const constants_1 = require("./constants");
6
- /**
7
- * Uploads a base64 image to IPFS using Pinata
8
- *
9
- * @param params - Configuration and base64 image data
10
- * @param params.pinataConfig - Pinata configuration including JWT
11
- * @param params.base64Image - Base64 encoded image data
12
- * @param params.name - Optional name for the uploaded file
13
- * @param params.metadata - Optional metadata key-value pairs
14
- * @returns Upload response with CID and other details
15
- */
16
- const uploadImageToIPFS = async (params) => {
17
- try {
18
- const formData = new FormData();
19
- // Convert base64 to Blob and then to File
20
- // Remove data URL prefix if present (e.g., "data:image/jpeg;base64,")
21
- const base64Data = params.base64Image.split(",")[1] || params.base64Image;
22
- const byteCharacters = atob(base64Data);
23
- const byteArrays = [];
24
- for (let offset = 0; offset < byteCharacters.length; offset += 1024) {
25
- const slice = byteCharacters.slice(offset, offset + 1024);
26
- const byteNumbers = new Array(slice.length);
27
- for (let i = 0; i < slice.length; i++) {
28
- byteNumbers[i] = slice.charCodeAt(i);
29
- }
30
- const byteArray = new Uint8Array(byteNumbers);
31
- byteArrays.push(byteArray);
32
- }
33
- // Detect mime type from base64 string
34
- let mimeType = "image/png"; // default
35
- if (params.base64Image.startsWith("data:")) {
36
- mimeType = params.base64Image.split(";")[0].split(":")[1];
37
- }
38
- const blob = new Blob(byteArrays, { type: mimeType });
39
- const fileName = params.name || `image.${mimeType.split("/")[1]}`;
40
- const file = new File([blob], fileName, { type: mimeType });
41
- formData.append("file", file);
42
- const pinataMetadata = {
43
- name: params.name || null,
44
- keyvalues: params.metadata || {},
45
- };
46
- formData.append("pinataMetadata", JSON.stringify(pinataMetadata));
47
- const pinataOptions = {
48
- cidVersion: 1,
49
- };
50
- formData.append("pinataOptions", JSON.stringify(pinataOptions));
51
- const response = await fetch("https://api.pinata.cloud/pinning/pinFileToIPFS", {
52
- method: "POST",
53
- headers: {
54
- Authorization: `Bearer ${params.pinataConfig.jwt}`,
55
- },
56
- body: formData,
57
- });
58
- if (!response.ok) {
59
- const error = await response.json();
60
- throw new Error(`Failed to upload image to IPFS: ${error.message || response.statusText}`);
61
- }
62
- const data = await response.json();
63
- return {
64
- IpfsHash: data.IpfsHash,
65
- PinSize: data.PinSize,
66
- Timestamp: data.Timestamp,
67
- isDuplicate: data.isDuplicate || false,
68
- };
69
- }
70
- catch (error) {
71
- if (error instanceof Error) {
72
- throw new Error(`Failed to upload image to IPFS: ${error.message}`);
73
- }
74
- throw error;
75
- }
76
- };
77
- /**
78
- * Uploads JSON data to IPFS using Pinata
79
- *
80
- * @param params - Configuration and JSON data
81
- * @param params.pinataConfig - Pinata configuration including JWT
82
- * @param params.json - JSON data to upload
83
- * @param params.name - Optional name for the uploaded file
84
- * @param params.metadata - Optional metadata key-value pairs
85
- * @returns Upload response with CID and other details
86
- */
87
- const uploadJsonToIPFS = async (params) => {
88
- try {
89
- const requestBody = {
90
- pinataOptions: {
91
- cidVersion: 1,
92
- },
93
- pinataMetadata: {
94
- name: params.name || null,
95
- keyvalues: params.metadata || {},
96
- },
97
- pinataContent: params.json,
98
- };
99
- const response = await fetch("https://api.pinata.cloud/pinning/pinJSONToIPFS", {
100
- method: "POST",
101
- headers: {
102
- Authorization: `Bearer ${params.pinataConfig.jwt}`,
103
- "Content-Type": "application/json",
104
- },
105
- body: JSON.stringify(requestBody),
106
- });
107
- if (!response.ok) {
108
- const error = await response.json();
109
- throw new Error(`Failed to upload JSON to IPFS: ${error.message || response.statusText}`);
110
- }
111
- const data = await response.json();
112
- return {
113
- IpfsHash: data.IpfsHash,
114
- PinSize: data.PinSize,
115
- Timestamp: data.Timestamp,
116
- isDuplicate: data.isDuplicate || false,
117
- };
118
- }
119
- catch (error) {
120
- if (error instanceof Error) {
121
- throw new Error(`Failed to upload JSON to IPFS: ${error.message}`);
122
- }
123
- throw error;
124
- }
125
- };
126
- const generateTokenUriBase64Image = async (name, params) => {
127
- // 1. upload image to IPFS
128
- const imageRes = await uploadImageToIPFS({
129
- pinataConfig: params.pinataConfig,
130
- base64Image: params.metadata.base64Image,
131
- });
132
- // 2. upload metadata to IPFS
133
- const coinMetadata = {
134
- name,
135
- description: params.metadata.description,
136
- image: `ipfs://${imageRes.IpfsHash}`,
137
- external_link: params.metadata.websiteUrl || "",
138
- collaborators: [],
139
- discordUrl: params.metadata.discordUrl || "",
140
- twitterUrl: params.metadata.twitterUrl || "",
141
- telegramUrl: params.metadata.telegramUrl || "",
142
- };
143
- const metadataRes = await uploadJsonToIPFS({
144
- pinataConfig: params.pinataConfig,
145
- json: coinMetadata,
146
- });
147
- return `ipfs://${metadataRes.IpfsHash}`;
148
- };
149
- const generateTokenUri = async (name, params) => {
150
- // 1. get base64Image from imageUrl
151
- const response = await fetch(params.metadata.imageUrl);
152
- if (!response.ok) {
153
- throw new Error(`Failed to fetch image: ${response.statusText}`);
154
- }
155
- const arrayBuffer = await response.arrayBuffer();
156
- const base64Image = Buffer.from(arrayBuffer).toString("base64");
157
- // 2. generate token uri
158
- const tokenUri = await generateTokenUriBase64Image(name, {
159
- pinataConfig: params.pinataConfig,
160
- metadata: {
161
- base64Image,
162
- description: params.metadata.description,
163
- websiteUrl: params.metadata.websiteUrl,
164
- discordUrl: params.metadata.discordUrl,
165
- twitterUrl: params.metadata.twitterUrl,
166
- telegramUrl: params.metadata.telegramUrl,
167
- },
168
- });
169
- return tokenUri;
170
- };
171
- exports.generateTokenUri = generateTokenUri;
7
+ const network_1 = require("../../network");
8
+ const viem_2 = require("viem");
172
9
  const getAmountWithSlippage = (amount, slippage, swapType) => {
173
10
  if (amount == null) {
174
11
  return 0n;
@@ -184,7 +21,7 @@ const ETH = viem_1.zeroAddress;
184
21
  const ethToMemecoin = (params) => {
185
22
  const flETH = constants_1.FLETHAddress[params.chainId];
186
23
  const flETHHooks = constants_1.FLETHHooksAddress[params.chainId];
187
- const flaunchHooks = constants_1.FlaunchPositionManagerAddress[params.chainId];
24
+ const flaunchHooks = constants_1.FlaunchPositionManagerV1_1Address[params.chainId];
188
25
  // Determine actions based on swapType
189
26
  const v4Actions = ("0x" +
190
27
  (params.swapType === "EXACT_IN" ? constants_1.V4Actions.SWAP_EXACT_IN : constants_1.V4Actions.SWAP_EXACT_OUT) +
@@ -314,11 +151,11 @@ const ethToMemecoin = (params) => {
314
151
  };
315
152
  exports.ethToMemecoin = ethToMemecoin;
316
153
  // @notice Before calling the UniversalRouter the user must have:
317
- // 1. Given the Permit2 contract allowance to spend the memecoin
154
+ // Given the Permit2 contract allowance to spend the memecoin
318
155
  const memecoinToEthWithPermit2 = (params) => {
319
156
  const flETH = constants_1.FLETHAddress[params.chainId];
320
157
  const flETHHooks = constants_1.FLETHHooksAddress[params.chainId];
321
- const flaunchHooks = constants_1.FlaunchPositionManagerAddress[params.chainId];
158
+ const flaunchHooks = constants_1.FlaunchPositionManagerV1_1Address[params.chainId];
322
159
  const v4Actions = ("0x" +
323
160
  constants_1.V4Actions.SWAP_EXACT_IN +
324
161
  constants_1.V4Actions.SETTLE_ALL +
@@ -483,11 +320,11 @@ const getSwapAmountsFromReceipt = ({ receipt, coinAddress, chainId, }) => {
483
320
  const filteredPoolSwapEvent = receipt.logs
484
321
  .map(log => {
485
322
  try {
486
- if (log.address.toLowerCase() !== constants_1.FlaunchPositionManagerAddress[chainId].toLowerCase()) {
323
+ if (log.address.toLowerCase() !== constants_1.FlaunchPositionManagerV1_1Address[chainId].toLowerCase()) {
487
324
  return null;
488
325
  }
489
326
  const event = (0, viem_1.decodeEventLog)({
490
- abi: constants_1.POSITION_MANAGER_ABI,
327
+ abi: constants_1.POSITION_MANAGERV1_1_ABI,
491
328
  data: log.data,
492
329
  topics: log.topics,
493
330
  });
@@ -505,3 +342,131 @@ const getSwapAmountsFromReceipt = ({ receipt, coinAddress, chainId, }) => {
505
342
  });
506
343
  };
507
344
  exports.getSwapAmountsFromReceipt = getSwapAmountsFromReceipt;
345
+ /**
346
+ * Buys a flaunch coin using ETH input.
347
+ *
348
+ * @param walletProvider - The wallet provider instance for blockchain interactions
349
+ * @param coinAddress - The address of the coin to buy
350
+ * @param swapType - The type of swap to perform
351
+ * @param swapParams - The parameters for the swap
352
+ * @param swapParams.amountIn - The amount of ETH to spend (for EXACT_IN)
353
+ * @param swapParams.amountOut - The amount of coins to buy (for EXACT_OUT)
354
+ * @param slippagePercent - The slippage percentage
355
+ * @returns A promise that resolves to a string describing the transaction result
356
+ */
357
+ async function buyFlaunchCoin(walletProvider, coinAddress, swapType, swapParams, slippagePercent) {
358
+ const network = walletProvider.getNetwork();
359
+ const chainId = network.chainId;
360
+ const networkId = network.networkId;
361
+ if (!chainId || !networkId) {
362
+ throw new Error("Chain ID is not set.");
363
+ }
364
+ try {
365
+ let amountIn;
366
+ let amountOutMin;
367
+ let amountOut;
368
+ let amountInMax;
369
+ if (swapType === "EXACT_IN") {
370
+ amountIn = (0, viem_1.parseEther)(swapParams.amountIn);
371
+ const quoteResult = await walletProvider.getPublicClient().simulateContract({
372
+ address: constants_1.QuoterAddress[chainId],
373
+ abi: constants_1.QUOTER_ABI,
374
+ functionName: "quoteExactInput",
375
+ args: [
376
+ {
377
+ exactAmount: amountIn,
378
+ exactCurrency: viem_1.zeroAddress, // ETH
379
+ path: [
380
+ {
381
+ fee: 0,
382
+ tickSpacing: 60,
383
+ hookData: "0x",
384
+ hooks: constants_1.FLETHHooksAddress[chainId],
385
+ intermediateCurrency: constants_1.FLETHAddress[chainId],
386
+ },
387
+ {
388
+ fee: 0,
389
+ tickSpacing: 60,
390
+ hooks: constants_1.FlaunchPositionManagerV1_1Address[chainId],
391
+ hookData: "0x",
392
+ intermediateCurrency: coinAddress,
393
+ },
394
+ ],
395
+ },
396
+ ],
397
+ });
398
+ amountOutMin = (0, exports.getAmountWithSlippage)(quoteResult.result[0], // amountOut
399
+ (slippagePercent / 100).toFixed(18).toString(), swapType);
400
+ }
401
+ else {
402
+ // EXACT_OUT
403
+ amountOut = (0, viem_1.parseEther)(swapParams.amountOut);
404
+ const quoteResult = await walletProvider.getPublicClient().simulateContract({
405
+ address: constants_1.QuoterAddress[chainId],
406
+ abi: constants_1.QUOTER_ABI,
407
+ functionName: "quoteExactOutput",
408
+ args: [
409
+ {
410
+ path: [
411
+ {
412
+ intermediateCurrency: viem_1.zeroAddress,
413
+ fee: 0,
414
+ tickSpacing: 60,
415
+ hookData: "0x",
416
+ hooks: constants_1.FLETHHooksAddress[chainId],
417
+ },
418
+ {
419
+ intermediateCurrency: constants_1.FLETHAddress[chainId],
420
+ fee: 0,
421
+ tickSpacing: 60,
422
+ hooks: constants_1.FlaunchPositionManagerV1_1Address[chainId],
423
+ hookData: "0x",
424
+ },
425
+ ],
426
+ exactCurrency: coinAddress,
427
+ exactAmount: amountOut,
428
+ },
429
+ ],
430
+ });
431
+ amountInMax = (0, exports.getAmountWithSlippage)(quoteResult.result[0], // amountIn
432
+ (slippagePercent / 100).toFixed(18).toString(), swapType);
433
+ }
434
+ const { commands, inputs } = (0, exports.ethToMemecoin)({
435
+ sender: walletProvider.getAddress(),
436
+ memecoin: coinAddress,
437
+ chainId: Number(chainId),
438
+ referrer: viem_1.zeroAddress,
439
+ swapType,
440
+ amountIn,
441
+ amountOutMin,
442
+ amountOut,
443
+ amountInMax,
444
+ });
445
+ const data = (0, viem_1.encodeFunctionData)({
446
+ abi: constants_1.UNIVERSAL_ROUTER_ABI,
447
+ functionName: "execute",
448
+ args: [commands, inputs],
449
+ });
450
+ const hash = await walletProvider.sendTransaction({
451
+ to: constants_1.UniversalRouterAddress[chainId],
452
+ data,
453
+ value: swapType === "EXACT_IN" ? amountIn : amountInMax,
454
+ });
455
+ const receipt = await walletProvider.waitForTransactionReceipt(hash);
456
+ const swapAmounts = (0, exports.getSwapAmountsFromReceipt)({
457
+ receipt,
458
+ coinAddress: coinAddress,
459
+ chainId: Number(chainId),
460
+ });
461
+ const coinSymbol = await walletProvider.readContract({
462
+ address: coinAddress,
463
+ abi: constants_1.ERC20_ABI,
464
+ functionName: "symbol",
465
+ });
466
+ return `Bought ${(0, viem_2.formatEther)(swapAmounts.coinsBought)} $${coinSymbol} for ${(0, viem_2.formatEther)(swapAmounts.ethSold)} ETH\n
467
+ Tx hash: [${hash}](${network_1.NETWORK_ID_TO_VIEM_CHAIN[networkId].blockExplorers?.default.url}/tx/${hash})`;
468
+ }
469
+ catch (error) {
470
+ return `Error buying coin: ${error}`;
471
+ }
472
+ }
@@ -3,11 +3,14 @@ export * from "./actionProvider";
3
3
  export * from "./customActionProvider";
4
4
  export * from "./across";
5
5
  export * from "./alchemy";
6
+ export * from "./baseAccount";
6
7
  export * from "./basename";
7
8
  export * from "./cdp-legacy";
8
9
  export * from "./cdp";
10
+ export * from "./clanker";
9
11
  export * from "./compound";
10
12
  export * from "./defillama";
13
+ export * from "./enso";
11
14
  export * from "./erc20";
12
15
  export * from "./erc721";
13
16
  export * from "./farcaster";
@@ -29,8 +32,8 @@ export * from "./flaunch";
29
32
  export * from "./onramp";
30
33
  export * from "./vaultsfyi";
31
34
  export * from "./x402";
35
+ export * from "./yelay";
32
36
  export * from "./zerion";
33
37
  export * from "./zerodev";
34
38
  export * from "./zeroX";
35
39
  export * from "./zora";
36
- export * from "./clanker";
@@ -19,11 +19,14 @@ __exportStar(require("./actionProvider"), exports);
19
19
  __exportStar(require("./customActionProvider"), exports);
20
20
  __exportStar(require("./across"), exports);
21
21
  __exportStar(require("./alchemy"), exports);
22
+ __exportStar(require("./baseAccount"), exports);
22
23
  __exportStar(require("./basename"), exports);
23
24
  __exportStar(require("./cdp-legacy"), exports);
24
25
  __exportStar(require("./cdp"), exports);
26
+ __exportStar(require("./clanker"), exports);
25
27
  __exportStar(require("./compound"), exports);
26
28
  __exportStar(require("./defillama"), exports);
29
+ __exportStar(require("./enso"), exports);
27
30
  __exportStar(require("./erc20"), exports);
28
31
  __exportStar(require("./erc721"), exports);
29
32
  __exportStar(require("./farcaster"), exports);
@@ -45,8 +48,8 @@ __exportStar(require("./flaunch"), exports);
45
48
  __exportStar(require("./onramp"), exports);
46
49
  __exportStar(require("./vaultsfyi"), exports);
47
50
  __exportStar(require("./x402"), exports);
51
+ __exportStar(require("./yelay"), exports);
48
52
  __exportStar(require("./zerion"), exports);
49
53
  __exportStar(require("./zerodev"), exports);
50
54
  __exportStar(require("./zeroX"), exports);
51
55
  __exportStar(require("./zora"), exports);
52
- __exportStar(require("./clanker"), exports);
@@ -74,14 +74,15 @@ class SuperfluidSuperTokenCreatorActionProvider extends actionProvider_1.ActionP
74
74
  `${symbol}x`,
75
75
  ],
76
76
  });
77
+ const superTokenFactoryAddress = walletProvider.getNetwork().networkId === "base-sepolia"
78
+ ? constants_1.SuperTokenFactoryAddress_Base_Sepolia
79
+ : constants_1.SuperTokenFactoryAddress;
77
80
  const createSuperTokenHash = await walletProvider.sendTransaction({
78
- to: walletProvider.getNetwork().networkId === "base-sepolia"
79
- ? constants_1.SuperTokenFactoryAddress_Base_Sepolia
80
- : constants_1.SuperTokenFactoryAddress,
81
+ to: superTokenFactoryAddress,
81
82
  data: createSuperTokenData,
82
83
  });
83
84
  const receipt = await walletProvider.waitForTransactionReceipt(createSuperTokenHash);
84
- const superTokenAddress = (0, parseLogs_1.extractCreatedSuperTokenAddressAbi)(receipt);
85
+ const superTokenAddress = (0, parseLogs_1.extractCreatedSuperTokenAddressAbi)(receipt, superTokenFactoryAddress);
85
86
  return `Created super token for ${args.erc20TokenAddress}. Super token address at ${superTokenAddress} Transaction hash: ${createSuperTokenHash}`;
86
87
  }
87
88
  catch (error) {
@@ -12,7 +12,8 @@ type TxReceipt = {
12
12
  * Extracts the super token address using the contract abi
13
13
  *
14
14
  * @param receipt - the transaction receipt from creating the super token
15
+ * @param factoryAddress - the address of the factory that created the super token
15
16
  * @returns - The contract address of the created Super Token
16
17
  */
17
- export declare function extractCreatedSuperTokenAddressAbi(receipt: TxReceipt): `0x${string}`;
18
+ export declare function extractCreatedSuperTokenAddressAbi(receipt: TxReceipt, factoryAddress: `0x${string}`): `0x${string}`;
18
19
  export {};
@@ -46,12 +46,15 @@ function pickTokenLike(args) {
46
46
  * Extracts the super token address using the contract abi
47
47
  *
48
48
  * @param receipt - the transaction receipt from creating the super token
49
+ * @param factoryAddress - the address of the factory that created the super token
49
50
  * @returns - The contract address of the created Super Token
50
51
  */
51
- function extractCreatedSuperTokenAddressAbi(receipt) {
52
- const factory = receipt.to?.toLowerCase();
52
+ function extractCreatedSuperTokenAddressAbi(receipt, factoryAddress) {
53
+ const factory = factoryAddress.toLowerCase();
53
54
  if (!factory)
54
- throw new Error("Missing receipt.to (factory address)");
55
+ throw new Error("Missing factory address");
56
+ console.log("factory", factory);
57
+ console.log("receipt.logs", receipt.logs);
55
58
  for (const log of receipt.logs) {
56
59
  if (log.address.toLowerCase() !== factory)
57
60
  continue;
@@ -69,6 +69,9 @@ class WalletActionProvider extends actionProvider_1.ActionProvider {
69
69
  "Wallet Details:",
70
70
  `- Provider: ${name}`,
71
71
  `- Address: ${address}`,
72
+ ...(walletProvider instanceof wallet_providers_1.CdpSmartWalletProvider
73
+ ? [`- Owner Address: ${walletProvider.ownerAccount.address}`]
74
+ : []),
72
75
  "- Network:",
73
76
  ` * Protocol Family: ${network.protocolFamily}`,
74
77
  ` * Network ID: ${network.networkId || "N/A"}`,
@@ -1,4 +1,3 @@
1
- export declare const WETH_ADDRESS = "0x4200000000000000000000000000000000000006";
2
1
  export declare const WETH_ABI: readonly [{
3
2
  readonly inputs: readonly [];
4
3
  readonly name: "deposit";
@@ -1,7 +1,6 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.WETH_ABI = exports.WETH_ADDRESS = void 0;
4
- exports.WETH_ADDRESS = "0x4200000000000000000000000000000000000006";
3
+ exports.WETH_ABI = void 0;
5
4
  exports.WETH_ABI = [
6
5
  {
7
6
  inputs: [],
@@ -4,13 +4,17 @@ exports.UnwrapEthSchema = exports.WrapEthSchema = void 0;
4
4
  const zod_1 = require("zod");
5
5
  exports.WrapEthSchema = zod_1.z
6
6
  .object({
7
- amountToWrap: zod_1.z.string().describe("Amount of ETH to wrap in wei"),
7
+ amountToWrap: zod_1.z
8
+ .string()
9
+ .describe("Amount of ETH to wrap in human-readable format (e.g., 0.1 for 0.1 ETH)"),
8
10
  })
9
11
  .strip()
10
12
  .describe("Instructions for wrapping ETH to WETH");
11
13
  exports.UnwrapEthSchema = zod_1.z
12
14
  .object({
13
- amountToUnwrap: zod_1.z.string().describe("Amount of WETH to unwrap in wei"),
15
+ amountToUnwrap: zod_1.z
16
+ .string()
17
+ .describe("Amount of WETH to unwrap in human-readable format (e.g., 0.1 for 0.1 WETH)"),
14
18
  })
15
19
  .strip()
16
20
  .describe("Instructions for unwrapping WETH to ETH");
@@ -3,6 +3,13 @@ import { ActionProvider } from "../actionProvider";
3
3
  import { Network } from "../../network";
4
4
  import { WrapEthSchema, UnwrapEthSchema } from "./schemas";
5
5
  import { EvmWalletProvider } from "../../wallet-providers";
6
+ /**
7
+ * Gets the WETH address for the given network.
8
+ *
9
+ * @param network - The network to get the WETH address for.
10
+ * @returns The WETH address for the network, or undefined if not supported.
11
+ */
12
+ export declare const getWethAddress: (network: Network) => string | undefined;
6
13
  /**
7
14
  * WethActionProvider is an action provider for WETH.
8
15
  */
@@ -9,14 +9,26 @@ var __metadata = (this && this.__metadata) || function (k, v) {
9
9
  if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
10
  };
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.wethActionProvider = exports.WethActionProvider = void 0;
12
+ exports.wethActionProvider = exports.WethActionProvider = exports.getWethAddress = void 0;
13
13
  const zod_1 = require("zod");
14
14
  const actionProvider_1 = require("../actionProvider");
15
15
  const actionDecorator_1 = require("../actionDecorator");
16
16
  const schemas_1 = require("./schemas");
17
17
  const constants_1 = require("./constants");
18
+ const constants_2 = require("../erc20/constants");
18
19
  const viem_1 = require("viem");
19
20
  const wallet_providers_1 = require("../../wallet-providers");
21
+ /**
22
+ * Gets the WETH address for the given network.
23
+ *
24
+ * @param network - The network to get the WETH address for.
25
+ * @returns The WETH address for the network, or undefined if not supported.
26
+ */
27
+ const getWethAddress = (network) => {
28
+ const networkTokens = constants_2.TOKEN_ADDRESSES_BY_SYMBOLS[network.networkId];
29
+ return networkTokens && "WETH" in networkTokens ? networkTokens.WETH : undefined;
30
+ };
31
+ exports.getWethAddress = getWethAddress;
20
32
  /**
21
33
  * WethActionProvider is an action provider for WETH.
22
34
  */
@@ -32,7 +44,9 @@ class WethActionProvider extends actionProvider_1.ActionProvider {
32
44
  * @param network - The network to check.
33
45
  * @returns True if the Weth action provider supports the network, false otherwise.
34
46
  */
35
- this.supportsNetwork = (network) => network.networkId === "base-mainnet" || network.networkId === "base-sepolia";
47
+ this.supportsNetwork = (network) => {
48
+ return (0, exports.getWethAddress)(network) !== undefined;
49
+ };
36
50
  }
37
51
  /**
38
52
  * Wraps ETH to WETH.
@@ -42,17 +56,30 @@ class WethActionProvider extends actionProvider_1.ActionProvider {
42
56
  * @returns A message containing the transaction hash.
43
57
  */
44
58
  async wrapEth(walletProvider, args) {
59
+ const network = walletProvider.getNetwork();
60
+ const wethAddress = (0, exports.getWethAddress)(network);
61
+ if (!wethAddress) {
62
+ return `Error: WETH not supported on network ${network.networkId}`;
63
+ }
45
64
  try {
65
+ // Convert human-readable ETH amount to wei (ETH has 18 decimals)
66
+ const amountInWei = (0, viem_1.parseUnits)(args.amountToWrap, 18);
67
+ // Check ETH balance before wrapping
68
+ const ethBalance = await walletProvider.getBalance();
69
+ if (ethBalance < amountInWei) {
70
+ const ethBalanceFormatted = (0, viem_1.formatUnits)(ethBalance, 18);
71
+ return `Error: Insufficient ETH balance. Requested to wrap ${args.amountToWrap} ETH, but only ${ethBalanceFormatted} ETH is available.`;
72
+ }
46
73
  const hash = await walletProvider.sendTransaction({
47
- to: constants_1.WETH_ADDRESS,
74
+ to: wethAddress,
48
75
  data: (0, viem_1.encodeFunctionData)({
49
76
  abi: constants_1.WETH_ABI,
50
77
  functionName: "deposit",
51
78
  }),
52
- value: BigInt(args.amountToWrap),
79
+ value: amountInWei,
53
80
  });
54
81
  await walletProvider.waitForTransactionReceipt(hash);
55
- return `Wrapped ETH with transaction hash: ${hash}`;
82
+ return `Wrapped ${args.amountToWrap} ETH to WETH. Transaction hash: ${hash}`;
56
83
  }
57
84
  catch (error) {
58
85
  return `Error wrapping ETH: ${error}`;
@@ -66,17 +93,35 @@ class WethActionProvider extends actionProvider_1.ActionProvider {
66
93
  * @returns A message containing the transaction hash.
67
94
  */
68
95
  async unwrapEth(walletProvider, args) {
96
+ const network = walletProvider.getNetwork();
97
+ const wethAddress = (0, exports.getWethAddress)(network);
98
+ if (!wethAddress) {
99
+ return `Error: WETH not supported on network ${network.networkId}`;
100
+ }
69
101
  try {
102
+ // Convert human-readable WETH amount to wei (WETH has 18 decimals)
103
+ const amountInWei = (0, viem_1.parseUnits)(args.amountToUnwrap, 18);
104
+ // Check WETH balance before unwrapping
105
+ const wethBalance = await walletProvider.readContract({
106
+ address: wethAddress,
107
+ abi: viem_1.erc20Abi,
108
+ functionName: "balanceOf",
109
+ args: [walletProvider.getAddress()],
110
+ });
111
+ if (wethBalance < amountInWei) {
112
+ const wethBalanceFormatted = (0, viem_1.formatUnits)(wethBalance, 18);
113
+ return `Error: Insufficient WETH balance. Requested to unwrap ${args.amountToUnwrap} WETH, but only ${wethBalanceFormatted} WETH is available.`;
114
+ }
70
115
  const hash = await walletProvider.sendTransaction({
71
- to: constants_1.WETH_ADDRESS,
116
+ to: wethAddress,
72
117
  data: (0, viem_1.encodeFunctionData)({
73
118
  abi: constants_1.WETH_ABI,
74
119
  functionName: "withdraw",
75
- args: [BigInt(args.amountToUnwrap)],
120
+ args: [amountInWei],
76
121
  }),
77
122
  });
78
123
  await walletProvider.waitForTransactionReceipt(hash);
79
- return `Unwrapped WETH with transaction hash: ${hash}`;
124
+ return `Unwrapped ${args.amountToUnwrap} WETH to ETH. Transaction hash: ${hash}`;
80
125
  }
81
126
  catch (error) {
82
127
  return `Error unwrapping WETH: ${error}`;
@@ -88,20 +133,10 @@ __decorate([
88
133
  (0, actionDecorator_1.CreateAction)({
89
134
  name: "wrap_eth",
90
135
  description: `
91
- This tool can only be used to wrap ETH to WETH.
92
- Do not use this tool for any other purpose, or trading other assets.
136
+ This tool wraps ETH to WETH.
93
137
 
94
138
  Inputs:
95
- - Amount of ETH to wrap.
96
-
97
- Important notes:
98
- - The amount is a string and cannot have any decimal points, since the unit of measurement is wei.
99
- - Make sure to use the exact amount provided, and if there's any doubt, check by getting more information before continuing with the action.
100
- - 1 wei = 0.000000000000000001 WETH
101
- - Minimum purchase amount is 100000000000 wei (0.0000001 WETH)
102
- - Only supported on the following networks:
103
- - Base Sepolia (ie, 'base-sepolia')
104
- - Base Mainnet (ie, 'base', 'base-mainnet')
139
+ - Amount of ETH to wrap in human-readable format (e.g., 0.1 for 0.1 ETH).
105
140
  `,
106
141
  schema: schemas_1.WrapEthSchema,
107
142
  }),
@@ -113,20 +148,10 @@ __decorate([
113
148
  (0, actionDecorator_1.CreateAction)({
114
149
  name: "unwrap_eth",
115
150
  description: `
116
- This tool can only be used to unwrap WETH to ETH.
117
- Do not use this tool for any other purpose, or trading other assets.
151
+ This tool unwraps WETH to ETH.
118
152
 
119
153
  Inputs:
120
- - Amount of WETH to unwrap.
121
-
122
- Important notes:
123
- - The amount is a string and cannot have any decimal points, since the unit of measurement is wei.
124
- - Make sure to use the exact amount provided, and if there's any doubt, check by getting more information before continuing with the action.
125
- - 1 wei = 0.000000000000000001 WETH
126
- - Minimum unwrap amount is 100000000000 wei (0.0000001 WETH)
127
- - Only supported on the following networks:
128
- - Base Sepolia (ie, 'base-sepolia')
129
- - Base Mainnet (ie, 'base', 'base-mainnet')
154
+ - Amount of WETH to unwrap in human-readable format (e.g., 0.1 for 0.1 WETH).
130
155
  `,
131
156
  schema: schemas_1.UnwrapEthSchema,
132
157
  }),