@coinbase/agentkit 0.10.0 → 0.10.2

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 (169) hide show
  1. package/README.md +195 -23
  2. package/dist/action-providers/across/acrossActionProvider.js +3 -3
  3. package/dist/action-providers/across/schemas.d.ts +1 -1
  4. package/dist/action-providers/baseAccount/baseAccountActionProvider.d.ts +46 -0
  5. package/dist/action-providers/baseAccount/baseAccountActionProvider.js +404 -0
  6. package/dist/action-providers/baseAccount/baseAccountActionProvider.test.d.ts +1 -0
  7. package/dist/action-providers/baseAccount/baseAccountActionProvider.test.js +325 -0
  8. package/dist/action-providers/baseAccount/index.d.ts +2 -0
  9. package/dist/action-providers/baseAccount/index.js +18 -0
  10. package/dist/action-providers/baseAccount/schemas.d.ts +43 -0
  11. package/dist/action-providers/baseAccount/schemas.js +62 -0
  12. package/dist/action-providers/baseAccount/types.d.ts +17 -0
  13. package/dist/action-providers/baseAccount/types.js +2 -0
  14. package/dist/action-providers/baseAccount/utils.d.ts +14 -0
  15. package/dist/action-providers/baseAccount/utils.js +57 -0
  16. package/dist/action-providers/cdp/cdpApiActionProvider.d.ts +3 -12
  17. package/dist/action-providers/cdp/cdpApiActionProvider.js +2 -81
  18. package/dist/action-providers/cdp/cdpApiActionProvider.test.js +0 -125
  19. package/dist/action-providers/cdp/cdpEvmWalletActionProvider.d.ts +18 -3
  20. package/dist/action-providers/cdp/cdpEvmWalletActionProvider.js +224 -23
  21. package/dist/action-providers/cdp/cdpEvmWalletActionProvider.test.js +280 -0
  22. package/dist/action-providers/cdp/cdpSmartWalletActionProvider.d.ts +17 -2
  23. package/dist/action-providers/cdp/cdpSmartWalletActionProvider.js +224 -18
  24. package/dist/action-providers/cdp/cdpSmartWalletActionProvider.test.js +267 -1
  25. package/dist/action-providers/cdp/schemas.d.ts +12 -12
  26. package/dist/action-providers/cdp/schemas.js +17 -5
  27. package/dist/action-providers/cdp/swapUtils.d.ts +23 -0
  28. package/dist/action-providers/cdp/swapUtils.js +106 -0
  29. package/dist/action-providers/clanker/clankerActionProvider.d.ts +43 -0
  30. package/dist/action-providers/clanker/clankerActionProvider.js +130 -0
  31. package/dist/action-providers/clanker/clankerActionProvider.test.d.ts +4 -0
  32. package/dist/action-providers/clanker/clankerActionProvider.test.js +119 -0
  33. package/dist/action-providers/clanker/index.d.ts +2 -0
  34. package/dist/action-providers/clanker/index.js +18 -0
  35. package/dist/action-providers/clanker/schemas.d.ts +56 -0
  36. package/dist/action-providers/clanker/schemas.js +47 -0
  37. package/dist/action-providers/clanker/utils.d.ts +9 -0
  38. package/dist/action-providers/clanker/utils.js +23 -0
  39. package/dist/action-providers/compound/constants.d.ts +1 -1
  40. package/dist/action-providers/compound/constants.js +2 -2
  41. package/dist/action-providers/erc20/constants.d.ts +35 -135
  42. package/dist/action-providers/erc20/constants.js +37 -189
  43. package/dist/action-providers/erc20/erc20ActionProvider.d.ts +9 -1
  44. package/dist/action-providers/erc20/erc20ActionProvider.js +87 -35
  45. package/dist/action-providers/erc20/erc20ActionProvider.test.js +115 -52
  46. package/dist/action-providers/erc20/schemas.d.ts +25 -12
  47. package/dist/action-providers/erc20/schemas.js +34 -6
  48. package/dist/action-providers/erc20/utils.d.ts +19 -0
  49. package/dist/action-providers/erc20/utils.js +54 -0
  50. package/dist/action-providers/flaunch/client_utils.d.ts +25 -0
  51. package/dist/action-providers/flaunch/client_utils.js +62 -0
  52. package/dist/action-providers/flaunch/constants.d.ts +42 -21
  53. package/dist/action-providers/flaunch/constants.js +113 -38
  54. package/dist/action-providers/flaunch/flaunchActionProvider.d.ts +4 -43
  55. package/dist/action-providers/flaunch/flaunchActionProvider.js +133 -209
  56. package/dist/action-providers/flaunch/flaunchActionProvider.test.js +113 -13
  57. package/dist/action-providers/flaunch/metadata_utils.d.ts +12 -0
  58. package/dist/action-providers/flaunch/metadata_utils.js +216 -0
  59. package/dist/action-providers/flaunch/schemas.d.ts +39 -3
  60. package/dist/action-providers/flaunch/schemas.js +62 -10
  61. package/dist/action-providers/flaunch/{utils.d.ts → swap_utils.d.ts} +17 -19
  62. package/dist/action-providers/flaunch/{utils.js → swap_utils.js} +137 -172
  63. package/dist/action-providers/index.d.ts +4 -0
  64. package/dist/action-providers/index.js +4 -0
  65. package/dist/action-providers/jupiter/schemas.d.ts +1 -1
  66. package/dist/action-providers/moonwell/schemas.d.ts +2 -2
  67. package/dist/action-providers/morpho/morphoActionProvider.js +5 -5
  68. package/dist/action-providers/morpho/schemas.d.ts +2 -2
  69. package/dist/action-providers/pyth/pythActionProvider.d.ts +2 -2
  70. package/dist/action-providers/pyth/pythActionProvider.js +83 -26
  71. package/dist/action-providers/pyth/pythActionProvider.test.js +179 -23
  72. package/dist/action-providers/pyth/schemas.d.ts +6 -0
  73. package/dist/action-providers/pyth/schemas.js +9 -1
  74. package/dist/action-providers/superfluid/constants.d.ts +814 -0
  75. package/dist/action-providers/superfluid/constants.js +2826 -0
  76. package/dist/action-providers/superfluid/graphQueries/endpoints.d.ts +2 -0
  77. package/dist/action-providers/superfluid/graphQueries/endpoints.js +5 -0
  78. package/dist/action-providers/superfluid/graphQueries/queries.d.ts +1 -0
  79. package/dist/action-providers/superfluid/graphQueries/queries.js +35 -0
  80. package/dist/action-providers/superfluid/graphQueries/superfluidGraphQueries.d.ts +8 -0
  81. package/dist/action-providers/superfluid/graphQueries/superfluidGraphQueries.js +24 -0
  82. package/dist/action-providers/superfluid/graphQueries/types.d.ts +27 -0
  83. package/dist/action-providers/superfluid/graphQueries/types.js +2 -0
  84. package/dist/action-providers/superfluid/index.d.ts +7 -0
  85. package/dist/action-providers/superfluid/index.js +23 -0
  86. package/dist/action-providers/superfluid/schemas.d.ts +86 -0
  87. package/dist/action-providers/superfluid/schemas.js +103 -0
  88. package/dist/action-providers/superfluid/superfluidActionProvider.d.ts +20 -0
  89. package/dist/action-providers/superfluid/superfluidActionProvider.js +36 -0
  90. package/dist/action-providers/superfluid/superfluidPoolActionProvider.d.ts +46 -0
  91. package/dist/action-providers/superfluid/superfluidPoolActionProvider.js +143 -0
  92. package/dist/action-providers/superfluid/superfluidPoolActionProvider.test.d.ts +1 -0
  93. package/dist/action-providers/superfluid/superfluidPoolActionProvider.test.js +92 -0
  94. package/dist/action-providers/superfluid/superfluidQueryActionProvider.d.ts +27 -0
  95. package/dist/action-providers/superfluid/superfluidQueryActionProvider.js +71 -0
  96. package/dist/action-providers/superfluid/superfluidQueryActionProvider.test.d.ts +1 -0
  97. package/dist/action-providers/superfluid/superfluidQueryActionProvider.test.js +57 -0
  98. package/dist/action-providers/superfluid/superfluidStreamActionProvider.d.ts +56 -0
  99. package/dist/action-providers/superfluid/superfluidStreamActionProvider.js +191 -0
  100. package/dist/action-providers/superfluid/superfluidStreamActionProvider.test.d.ts +1 -0
  101. package/dist/action-providers/superfluid/superfluidStreamActionProvider.test.js +80 -0
  102. package/dist/action-providers/superfluid/superfluidSuperTokenCreatorActionProvider.d.ts +30 -0
  103. package/dist/action-providers/superfluid/superfluidSuperTokenCreatorActionProvider.js +109 -0
  104. package/dist/action-providers/superfluid/superfluidSuperTokenCreatorActionProvider.test.d.ts +1 -0
  105. package/dist/action-providers/superfluid/superfluidSuperTokenCreatorActionProvider.test.js +75 -0
  106. package/dist/action-providers/superfluid/superfluidWrapperActionProvider.d.ts +32 -0
  107. package/dist/action-providers/superfluid/superfluidWrapperActionProvider.js +101 -0
  108. package/dist/action-providers/superfluid/superfluidWrapperActionProvider.test.d.ts +1 -0
  109. package/dist/action-providers/superfluid/superfluidWrapperActionProvider.test.js +85 -0
  110. package/dist/action-providers/superfluid/utils/parseLogs.d.ts +19 -0
  111. package/dist/action-providers/superfluid/utils/parseLogs.js +81 -0
  112. package/dist/action-providers/truemarkets/truemarketsActionProvider.d.ts +4 -16
  113. package/dist/action-providers/truemarkets/truemarketsActionProvider.js +20 -41
  114. package/dist/action-providers/truemarkets/truemarketsActionProvider.test.js +11 -33
  115. package/dist/action-providers/wallet/walletActionProvider.js +24 -10
  116. package/dist/action-providers/wallet/walletActionProvider.test.js +6 -2
  117. package/dist/action-providers/x402/schemas.d.ts +7 -0
  118. package/dist/action-providers/x402/schemas.js +11 -1
  119. package/dist/action-providers/x402/utils.d.ts +55 -0
  120. package/dist/action-providers/x402/utils.js +160 -0
  121. package/dist/action-providers/x402/x402ActionProvider.d.ts +9 -9
  122. package/dist/action-providers/x402/x402ActionProvider.js +158 -39
  123. package/dist/action-providers/x402/x402ActionProvider.test.js +116 -10
  124. package/dist/action-providers/zeroX/index.d.ts +1 -0
  125. package/dist/action-providers/zeroX/index.js +17 -0
  126. package/dist/action-providers/zeroX/schemas.d.ts +51 -0
  127. package/dist/action-providers/zeroX/schemas.js +82 -0
  128. package/dist/action-providers/zeroX/utils.d.ts +23 -0
  129. package/dist/action-providers/zeroX/utils.js +106 -0
  130. package/dist/action-providers/zeroX/zeroXActionProvider.d.ts +57 -0
  131. package/dist/action-providers/zeroX/zeroXActionProvider.js +407 -0
  132. package/dist/action-providers/zeroX/zeroXActionProvider.test.d.ts +1 -0
  133. package/dist/action-providers/zeroX/zeroXActionProvider.test.js +445 -0
  134. package/dist/utils.d.ts +10 -0
  135. package/dist/utils.js +43 -13
  136. package/dist/wallet-providers/cdpEvmWalletProvider.d.ts +27 -2
  137. package/dist/wallet-providers/cdpEvmWalletProvider.js +54 -36
  138. package/dist/wallet-providers/cdpEvmWalletProvider.test.js +7 -0
  139. package/dist/wallet-providers/cdpShared.d.ts +5 -0
  140. package/dist/wallet-providers/cdpSmartWalletProvider.d.ts +29 -3
  141. package/dist/wallet-providers/cdpSmartWalletProvider.js +66 -25
  142. package/dist/wallet-providers/cdpSmartWalletProvider.test.js +6 -10
  143. package/dist/wallet-providers/cdpSolanaWalletProvider.d.ts +1 -1
  144. package/dist/wallet-providers/cdpSolanaWalletProvider.js +7 -7
  145. package/dist/wallet-providers/cdpSolanaWalletProvider.test.js +15 -12
  146. package/dist/wallet-providers/evmWalletProvider.d.ts +13 -2
  147. package/dist/wallet-providers/evmWalletProvider.js +4 -0
  148. package/dist/wallet-providers/legacyCdpSmartWalletProvider.d.ts +18 -2
  149. package/dist/wallet-providers/legacyCdpSmartWalletProvider.js +23 -2
  150. package/dist/wallet-providers/legacyCdpWalletProvider.d.ts +19 -2
  151. package/dist/wallet-providers/legacyCdpWalletProvider.js +27 -2
  152. package/dist/wallet-providers/legacyCdpWalletProvider.test.js +6 -0
  153. package/dist/wallet-providers/privyEvmDelegatedEmbeddedWalletProvider.d.ts +17 -2
  154. package/dist/wallet-providers/privyEvmDelegatedEmbeddedWalletProvider.js +39 -3
  155. package/dist/wallet-providers/privyEvmDelegatedEmbeddedWalletProvider.test.js +1 -1
  156. package/dist/wallet-providers/privyEvmWalletProvider.d.ts +2 -0
  157. package/dist/wallet-providers/privyEvmWalletProvider.js +2 -1
  158. package/dist/wallet-providers/privyEvmWalletProvider.test.js +12 -1
  159. package/dist/wallet-providers/solanaKeypairWalletProvider.d.ts +1 -1
  160. package/dist/wallet-providers/solanaKeypairWalletProvider.js +3 -4
  161. package/dist/wallet-providers/solanaKeypairWalletProvider.test.js +4 -2
  162. package/dist/wallet-providers/viemWalletProvider.d.ts +20 -3
  163. package/dist/wallet-providers/viemWalletProvider.js +33 -4
  164. package/dist/wallet-providers/viemWalletProvider.test.js +27 -6
  165. package/dist/wallet-providers/walletProvider.d.ts +1 -1
  166. package/dist/wallet-providers/zeroDevWalletProvider.d.ts +17 -2
  167. package/dist/wallet-providers/zeroDevWalletProvider.js +26 -5
  168. package/dist/wallet-providers/zeroDevWalletProvider.test.js +12 -2
  169. package/package.json +8 -4
@@ -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,6 +3,7 @@ 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";
@@ -18,6 +19,7 @@ export * from "./moonwell";
18
19
  export * from "./morpho";
19
20
  export * from "./opensea";
20
21
  export * from "./spl";
22
+ export * from "./superfluid";
21
23
  export * from "./truemarkets";
22
24
  export * from "./twitter";
23
25
  export * from "./wallet";
@@ -30,4 +32,6 @@ export * from "./vaultsfyi";
30
32
  export * from "./x402";
31
33
  export * from "./zerion";
32
34
  export * from "./zerodev";
35
+ export * from "./zeroX";
33
36
  export * from "./zora";
37
+ export * from "./clanker";
@@ -19,6 +19,7 @@ __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);
@@ -34,6 +35,7 @@ __exportStar(require("./moonwell"), exports);
34
35
  __exportStar(require("./morpho"), exports);
35
36
  __exportStar(require("./opensea"), exports);
36
37
  __exportStar(require("./spl"), exports);
38
+ __exportStar(require("./superfluid"), exports);
37
39
  __exportStar(require("./truemarkets"), exports);
38
40
  __exportStar(require("./twitter"), exports);
39
41
  __exportStar(require("./wallet"), exports);
@@ -46,4 +48,6 @@ __exportStar(require("./vaultsfyi"), exports);
46
48
  __exportStar(require("./x402"), exports);
47
49
  __exportStar(require("./zerion"), exports);
48
50
  __exportStar(require("./zerodev"), exports);
51
+ __exportStar(require("./zeroX"), exports);
49
52
  __exportStar(require("./zora"), exports);
53
+ __exportStar(require("./clanker"), exports);
@@ -9,9 +9,9 @@ export declare const SwapTokenSchema: z.ZodObject<{
9
9
  slippageBps: z.ZodDefault<z.ZodNumber>;
10
10
  }, "strip", z.ZodTypeAny, {
11
11
  amount: number;
12
+ slippageBps: number;
12
13
  inputMint: string;
13
14
  outputMint: string;
14
- slippageBps: number;
15
15
  }, {
16
16
  amount: number;
17
17
  inputMint: string;
@@ -7,12 +7,12 @@ export declare const MintSchema: z.ZodObject<{
7
7
  tokenAddress: z.ZodString;
8
8
  mTokenAddress: z.ZodString;
9
9
  }, "strip", z.ZodTypeAny, {
10
- assets: string;
11
10
  tokenAddress: string;
11
+ assets: string;
12
12
  mTokenAddress: string;
13
13
  }, {
14
- assets: string;
15
14
  tokenAddress: string;
15
+ assets: string;
16
16
  mTokenAddress: string;
17
17
  }>;
18
18
  /**
@@ -13,12 +13,12 @@ exports.morphoActionProvider = exports.MorphoActionProvider = exports.SUPPORTED_
13
13
  const zod_1 = require("zod");
14
14
  const decimal_js_1 = require("decimal.js");
15
15
  const viem_1 = require("viem");
16
- const constants_1 = require("../erc20/constants");
16
+ const viem_2 = require("viem");
17
17
  const actionProvider_1 = require("../actionProvider");
18
18
  const wallet_providers_1 = require("../../wallet-providers");
19
19
  const actionDecorator_1 = require("../actionDecorator");
20
20
  const utils_1 = require("../../utils");
21
- const constants_2 = require("./constants");
21
+ const constants_1 = require("./constants");
22
22
  const schemas_1 = require("./schemas");
23
23
  exports.SUPPORTED_NETWORKS = ["base-mainnet", "base-sepolia"];
24
24
  /**
@@ -53,7 +53,7 @@ class MorphoActionProvider extends actionProvider_1.ActionProvider {
53
53
  try {
54
54
  const decimals = await wallet.readContract({
55
55
  address: args.tokenAddress,
56
- abi: constants_1.abi,
56
+ abi: viem_2.erc20Abi,
57
57
  functionName: "decimals",
58
58
  args: [],
59
59
  });
@@ -63,7 +63,7 @@ class MorphoActionProvider extends actionProvider_1.ActionProvider {
63
63
  return `Error approving Morpho Vault as spender: ${approvalResult}`;
64
64
  }
65
65
  const data = (0, viem_1.encodeFunctionData)({
66
- abi: constants_2.METAMORPHO_ABI,
66
+ abi: constants_1.METAMORPHO_ABI,
67
67
  functionName: "deposit",
68
68
  args: [atomicAssets, args.receiver],
69
69
  });
@@ -91,7 +91,7 @@ class MorphoActionProvider extends actionProvider_1.ActionProvider {
91
91
  }
92
92
  try {
93
93
  const data = (0, viem_1.encodeFunctionData)({
94
- abi: constants_2.METAMORPHO_ABI,
94
+ abi: constants_1.METAMORPHO_ABI,
95
95
  functionName: "withdraw",
96
96
  args: [BigInt(args.assets), args.receiver, args.receiver],
97
97
  });
@@ -8,14 +8,14 @@ export declare const DepositSchema: z.ZodObject<{
8
8
  tokenAddress: z.ZodString;
9
9
  vaultAddress: z.ZodString;
10
10
  }, "strip", z.ZodTypeAny, {
11
+ tokenAddress: string;
11
12
  receiver: string;
12
13
  assets: string;
13
- tokenAddress: string;
14
14
  vaultAddress: string;
15
15
  }, {
16
+ tokenAddress: string;
16
17
  receiver: string;
17
18
  assets: string;
18
- tokenAddress: string;
19
19
  vaultAddress: string;
20
20
  }>;
21
21
  /**
@@ -13,14 +13,14 @@ export declare class PythActionProvider extends ActionProvider {
13
13
  * Fetch the price feed ID for a given token symbol from Pyth.
14
14
  *
15
15
  * @param args - The arguments for the action.
16
- * @returns The price feed ID as a string.
16
+ * @returns The price feed ID as stringified JSON.
17
17
  */
18
18
  fetchPriceFeed(args: z.infer<typeof PythFetchPriceFeedIDSchema>): Promise<string>;
19
19
  /**
20
20
  * Fetches the price from Pyth given a Pyth price feed ID.
21
21
  *
22
22
  * @param args - The arguments for the action.
23
- * @returns The price as a string.
23
+ * @returns The price as stringified JSON.
24
24
  */
25
25
  fetchPrice(args: z.infer<typeof PythFetchPriceSchema>): Promise<string>;
26
26
  /**
@@ -34,63 +34,120 @@ class PythActionProvider extends actionProvider_1.ActionProvider {
34
34
  * Fetch the price feed ID for a given token symbol from Pyth.
35
35
  *
36
36
  * @param args - The arguments for the action.
37
- * @returns The price feed ID as a string.
37
+ * @returns The price feed ID as stringified JSON.
38
38
  */
39
39
  async fetchPriceFeed(args) {
40
- const url = `https://hermes.pyth.network/v2/price_feeds?query=${args.tokenSymbol}&asset_type=crypto`;
40
+ const url = `https://hermes.pyth.network/v2/price_feeds?query=${args.tokenSymbol}&asset_type=${args.assetType}`;
41
41
  const response = await fetch(url);
42
42
  if (!response.ok) {
43
- throw new Error(`HTTP error! status: ${response.status}`);
43
+ return JSON.stringify({
44
+ success: false,
45
+ error: `HTTP error! status: ${response.status}`,
46
+ });
44
47
  }
45
48
  const data = await response.json();
46
49
  if (data.length === 0) {
47
- throw new Error(`No price feed found for ${args.tokenSymbol}`);
50
+ return JSON.stringify({
51
+ success: false,
52
+ error: `No price feed found for ${args.tokenSymbol}`,
53
+ });
48
54
  }
49
55
  const filteredData = data.filter(
50
56
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
51
- (item) => item.attributes.base.toLowerCase() === args.tokenSymbol.toLowerCase());
57
+ (item) => item.attributes.base.toLowerCase() === args.tokenSymbol.toLowerCase() &&
58
+ item.attributes.quote_currency.toLowerCase() === args.quoteCurrency.toLowerCase());
52
59
  if (filteredData.length === 0) {
53
- throw new Error(`No price feed found for ${args.tokenSymbol}`);
60
+ return JSON.stringify({
61
+ success: false,
62
+ error: `No price feed found for ${args.tokenSymbol}/${args.quoteCurrency}`,
63
+ });
54
64
  }
55
- return filteredData[0].id;
65
+ // For equities, select the regular feed over special market hours feeds
66
+ let selectedFeed = filteredData[0];
67
+ if (args.assetType === "equity") {
68
+ // Look for regular market feed (no PRE, POST, ON, EXT suffixes)
69
+ const regularMarketFeed = filteredData.find(
70
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
71
+ (item) => !item.attributes.symbol.includes(".PRE") &&
72
+ !item.attributes.symbol.includes(".POST") &&
73
+ !item.attributes.symbol.includes(".ON") &&
74
+ !item.attributes.symbol.includes(".EXT"));
75
+ if (regularMarketFeed) {
76
+ selectedFeed = regularMarketFeed;
77
+ }
78
+ }
79
+ return JSON.stringify({
80
+ success: true,
81
+ priceFeedID: selectedFeed.id,
82
+ tokenSymbol: args.tokenSymbol,
83
+ quoteCurrency: args.quoteCurrency,
84
+ feedType: selectedFeed.attributes.display_symbol,
85
+ });
56
86
  }
57
87
  /**
58
88
  * Fetches the price from Pyth given a Pyth price feed ID.
59
89
  *
60
90
  * @param args - The arguments for the action.
61
- * @returns The price as a string.
91
+ * @returns The price as stringified JSON.
62
92
  */
63
93
  async fetchPrice(args) {
64
94
  const url = `https://hermes.pyth.network/v2/updates/price/latest?ids[]=${args.priceFeedID}`;
65
95
  const response = await fetch(url);
66
96
  if (!response.ok) {
67
- throw new Error(`HTTP error! status: ${response.status}`);
97
+ return JSON.stringify({
98
+ success: false,
99
+ error: `HTTP error! status: ${response.status}`,
100
+ });
68
101
  }
69
102
  const data = await response.json();
70
103
  const parsedData = data.parsed;
71
104
  if (parsedData.length === 0) {
72
- throw new Error(`No price data found for ${args.priceFeedID}`);
105
+ return JSON.stringify({
106
+ success: false,
107
+ error: `No price data found for ${args.priceFeedID}`,
108
+ });
73
109
  }
110
+ // Helper function to format price
111
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
112
+ const formatPrice = (priceInfo) => {
113
+ const price = BigInt(priceInfo.price);
114
+ const exponent = priceInfo.expo;
115
+ if (exponent < 0) {
116
+ const adjustedPrice = price * BigInt(100);
117
+ const divisor = BigInt(10) ** BigInt(-exponent);
118
+ const scaledPrice = adjustedPrice / BigInt(divisor);
119
+ const priceStr = scaledPrice.toString();
120
+ const formattedPrice = `${priceStr.slice(0, -2)}.${priceStr.slice(-2)}`;
121
+ return formattedPrice.startsWith(".") ? `0${formattedPrice}` : formattedPrice;
122
+ }
123
+ const scaledPrice = price / BigInt(10) ** BigInt(exponent);
124
+ return scaledPrice.toString();
125
+ };
74
126
  const priceInfo = parsedData[0].price;
75
- const price = BigInt(priceInfo.price);
76
- const exponent = priceInfo.expo;
77
- if (exponent < 0) {
78
- const adjustedPrice = price * BigInt(100);
79
- const divisor = BigInt(10) ** BigInt(-exponent);
80
- const scaledPrice = adjustedPrice / BigInt(divisor);
81
- const priceStr = scaledPrice.toString();
82
- const formattedPrice = `${priceStr.slice(0, -2)}.${priceStr.slice(-2)}`;
83
- return formattedPrice.startsWith(".") ? `0${formattedPrice}` : formattedPrice;
84
- }
85
- const scaledPrice = price / BigInt(10) ** BigInt(exponent);
86
- return scaledPrice.toString();
127
+ return JSON.stringify({
128
+ success: true,
129
+ priceFeedID: args.priceFeedID,
130
+ price: formatPrice(priceInfo),
131
+ });
87
132
  }
88
133
  }
89
134
  exports.PythActionProvider = PythActionProvider;
90
135
  __decorate([
91
136
  (0, actionDecorator_1.CreateAction)({
92
137
  name: "fetch_price_feed",
93
- description: "Fetch the price feed ID for a given token symbol from Pyth.",
138
+ description: `Fetch the price feed ID for a given token symbol from Pyth.
139
+
140
+ Inputs:
141
+ - tokenSymbol: The asset ticker/symbol to fetch the price feed ID for (e.g. BTC, ETH, COIN, XAU, EUR, etc.)
142
+ - quoteCurrency: The quote currency to filter by (defaults to USD)
143
+ - assetType: The asset type to search for (crypto, equity, fx, metal) - defaults to crypto
144
+
145
+ Examples:
146
+ - Crypto: BTC, ETH, SOL
147
+ - Equities: COIN, AAPL, TSLA
148
+ - FX: EUR, GBP, JPY
149
+ - Metals: XAU (Gold), XAG (Silver), XPT (Platinum), XPD (Palladium)
150
+ `,
94
151
  schema: schemas_1.PythFetchPriceFeedIDSchema,
95
152
  }),
96
153
  __metadata("design:type", Function),
@@ -100,16 +157,16 @@ __decorate([
100
157
  __decorate([
101
158
  (0, actionDecorator_1.CreateAction)({
102
159
  name: "fetch_price",
103
- description: `Fetch the price of a given price feed from Pyth.
160
+ description: `Fetch the price of a price feed from Pyth.
104
161
 
105
162
  Inputs:
106
- - Pyth price feed ID
163
+ - priceFeedID: Price feed ID (string)
107
164
 
108
165
  Important notes:
109
166
  - Do not assume that a random ID is a Pyth price feed ID. If you are confused, ask a clarifying question.
110
167
  - This action only fetches price inputs from Pyth price feeds. No other source.
111
168
  - If you are asked to fetch the price from Pyth for a ticker symbol such as BTC, you must first use the pyth_fetch_price_feed_id
112
- action to retrieve the price feed ID before invoking the pyth_Fetch_price action
169
+ action to retrieve the price feed ID before invoking the pyth_fetch_price action
113
170
  `,
114
171
  schema: schemas_1.PythFetchPriceSchema,
115
172
  }),