@coinbase/agentkit 0.10.0 → 0.10.1

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 (131) hide show
  1. package/README.md +75 -0
  2. package/dist/action-providers/across/acrossActionProvider.js +3 -3
  3. package/dist/action-providers/cdp/cdpApiActionProvider.d.ts +3 -12
  4. package/dist/action-providers/cdp/cdpApiActionProvider.js +2 -81
  5. package/dist/action-providers/cdp/cdpApiActionProvider.test.js +0 -125
  6. package/dist/action-providers/cdp/cdpEvmWalletActionProvider.d.ts +18 -3
  7. package/dist/action-providers/cdp/cdpEvmWalletActionProvider.js +223 -23
  8. package/dist/action-providers/cdp/cdpEvmWalletActionProvider.test.js +278 -0
  9. package/dist/action-providers/cdp/cdpSmartWalletActionProvider.d.ts +17 -2
  10. package/dist/action-providers/cdp/cdpSmartWalletActionProvider.js +223 -18
  11. package/dist/action-providers/cdp/cdpSmartWalletActionProvider.test.js +265 -1
  12. package/dist/action-providers/cdp/schemas.d.ts +12 -12
  13. package/dist/action-providers/cdp/schemas.js +17 -5
  14. package/dist/action-providers/cdp/swapUtils.d.ts +32 -0
  15. package/dist/action-providers/cdp/swapUtils.js +142 -0
  16. package/dist/action-providers/clanker/clankerActionProvider.d.ts +43 -0
  17. package/dist/action-providers/clanker/clankerActionProvider.js +130 -0
  18. package/dist/action-providers/clanker/clankerActionProvider.test.d.ts +4 -0
  19. package/dist/action-providers/clanker/clankerActionProvider.test.js +119 -0
  20. package/dist/action-providers/clanker/index.d.ts +2 -0
  21. package/dist/action-providers/clanker/index.js +18 -0
  22. package/dist/action-providers/clanker/schemas.d.ts +56 -0
  23. package/dist/action-providers/clanker/schemas.js +47 -0
  24. package/dist/action-providers/clanker/utils.d.ts +9 -0
  25. package/dist/action-providers/clanker/utils.js +23 -0
  26. package/dist/action-providers/compound/constants.d.ts +1 -1
  27. package/dist/action-providers/compound/constants.js +2 -2
  28. package/dist/action-providers/erc20/constants.d.ts +35 -135
  29. package/dist/action-providers/erc20/constants.js +37 -189
  30. package/dist/action-providers/erc20/erc20ActionProvider.d.ts +9 -1
  31. package/dist/action-providers/erc20/erc20ActionProvider.js +87 -35
  32. package/dist/action-providers/erc20/erc20ActionProvider.test.js +115 -52
  33. package/dist/action-providers/erc20/schemas.d.ts +25 -12
  34. package/dist/action-providers/erc20/schemas.js +34 -6
  35. package/dist/action-providers/erc20/utils.d.ts +19 -0
  36. package/dist/action-providers/erc20/utils.js +54 -0
  37. package/dist/action-providers/flaunch/constants.d.ts +1 -1
  38. package/dist/action-providers/flaunch/constants.js +2 -2
  39. package/dist/action-providers/flaunch/flaunchActionProvider.js +3 -11
  40. package/dist/action-providers/flaunch/flaunchActionProvider.test.js +5 -0
  41. package/dist/action-providers/index.d.ts +3 -0
  42. package/dist/action-providers/index.js +3 -0
  43. package/dist/action-providers/jupiter/schemas.d.ts +1 -1
  44. package/dist/action-providers/moonwell/schemas.d.ts +2 -2
  45. package/dist/action-providers/morpho/morphoActionProvider.js +5 -5
  46. package/dist/action-providers/morpho/schemas.d.ts +2 -2
  47. package/dist/action-providers/pyth/pythActionProvider.js +5 -0
  48. package/dist/action-providers/pyth/pythActionProvider.test.js +5 -1
  49. package/dist/action-providers/superfluid/constants.d.ts +814 -0
  50. package/dist/action-providers/superfluid/constants.js +2826 -0
  51. package/dist/action-providers/superfluid/graphQueries/endpoints.d.ts +2 -0
  52. package/dist/action-providers/superfluid/graphQueries/endpoints.js +5 -0
  53. package/dist/action-providers/superfluid/graphQueries/queries.d.ts +1 -0
  54. package/dist/action-providers/superfluid/graphQueries/queries.js +35 -0
  55. package/dist/action-providers/superfluid/graphQueries/superfluidGraphQueries.d.ts +8 -0
  56. package/dist/action-providers/superfluid/graphQueries/superfluidGraphQueries.js +24 -0
  57. package/dist/action-providers/superfluid/graphQueries/types.d.ts +27 -0
  58. package/dist/action-providers/superfluid/graphQueries/types.js +2 -0
  59. package/dist/action-providers/superfluid/index.d.ts +7 -0
  60. package/dist/action-providers/superfluid/index.js +23 -0
  61. package/dist/action-providers/superfluid/schemas.d.ts +86 -0
  62. package/dist/action-providers/superfluid/schemas.js +103 -0
  63. package/dist/action-providers/superfluid/superfluidActionProvider.d.ts +20 -0
  64. package/dist/action-providers/superfluid/superfluidActionProvider.js +36 -0
  65. package/dist/action-providers/superfluid/superfluidPoolActionProvider.d.ts +46 -0
  66. package/dist/action-providers/superfluid/superfluidPoolActionProvider.js +143 -0
  67. package/dist/action-providers/superfluid/superfluidPoolActionProvider.test.d.ts +1 -0
  68. package/dist/action-providers/superfluid/superfluidPoolActionProvider.test.js +92 -0
  69. package/dist/action-providers/superfluid/superfluidQueryActionProvider.d.ts +27 -0
  70. package/dist/action-providers/superfluid/superfluidQueryActionProvider.js +71 -0
  71. package/dist/action-providers/superfluid/superfluidQueryActionProvider.test.d.ts +1 -0
  72. package/dist/action-providers/superfluid/superfluidQueryActionProvider.test.js +57 -0
  73. package/dist/action-providers/superfluid/superfluidStreamActionProvider.d.ts +56 -0
  74. package/dist/action-providers/superfluid/superfluidStreamActionProvider.js +191 -0
  75. package/dist/action-providers/superfluid/superfluidStreamActionProvider.test.d.ts +1 -0
  76. package/dist/action-providers/superfluid/superfluidStreamActionProvider.test.js +80 -0
  77. package/dist/action-providers/superfluid/superfluidSuperTokenCreatorActionProvider.d.ts +30 -0
  78. package/dist/action-providers/superfluid/superfluidSuperTokenCreatorActionProvider.js +108 -0
  79. package/dist/action-providers/superfluid/superfluidSuperTokenCreatorActionProvider.test.d.ts +1 -0
  80. package/dist/action-providers/superfluid/superfluidSuperTokenCreatorActionProvider.test.js +75 -0
  81. package/dist/action-providers/superfluid/superfluidWrapperActionProvider.d.ts +32 -0
  82. package/dist/action-providers/superfluid/superfluidWrapperActionProvider.js +101 -0
  83. package/dist/action-providers/superfluid/superfluidWrapperActionProvider.test.d.ts +1 -0
  84. package/dist/action-providers/superfluid/superfluidWrapperActionProvider.test.js +85 -0
  85. package/dist/action-providers/superfluid/utils/parseLogs.d.ts +18 -0
  86. package/dist/action-providers/superfluid/utils/parseLogs.js +78 -0
  87. package/dist/action-providers/truemarkets/truemarketsActionProvider.d.ts +4 -16
  88. package/dist/action-providers/truemarkets/truemarketsActionProvider.js +20 -41
  89. package/dist/action-providers/truemarkets/truemarketsActionProvider.test.js +11 -33
  90. package/dist/action-providers/wallet/walletActionProvider.js +21 -10
  91. package/dist/action-providers/wallet/walletActionProvider.test.js +6 -2
  92. package/dist/action-providers/zeroX/index.d.ts +1 -0
  93. package/dist/action-providers/zeroX/index.js +17 -0
  94. package/dist/action-providers/zeroX/schemas.d.ts +51 -0
  95. package/dist/action-providers/zeroX/schemas.js +82 -0
  96. package/dist/action-providers/zeroX/utils.d.ts +23 -0
  97. package/dist/action-providers/zeroX/utils.js +106 -0
  98. package/dist/action-providers/zeroX/zeroXActionProvider.d.ts +57 -0
  99. package/dist/action-providers/zeroX/zeroXActionProvider.js +407 -0
  100. package/dist/action-providers/zeroX/zeroXActionProvider.test.d.ts +1 -0
  101. package/dist/action-providers/zeroX/zeroXActionProvider.test.js +445 -0
  102. package/dist/wallet-providers/cdpEvmWalletProvider.d.ts +20 -2
  103. package/dist/wallet-providers/cdpEvmWalletProvider.js +40 -15
  104. package/dist/wallet-providers/cdpShared.d.ts +5 -0
  105. package/dist/wallet-providers/cdpSmartWalletProvider.d.ts +22 -3
  106. package/dist/wallet-providers/cdpSmartWalletProvider.js +43 -19
  107. package/dist/wallet-providers/cdpSolanaWalletProvider.d.ts +1 -1
  108. package/dist/wallet-providers/cdpSolanaWalletProvider.js +7 -7
  109. package/dist/wallet-providers/cdpSolanaWalletProvider.test.js +15 -12
  110. package/dist/wallet-providers/evmWalletProvider.d.ts +5 -1
  111. package/dist/wallet-providers/legacyCdpSmartWalletProvider.d.ts +9 -2
  112. package/dist/wallet-providers/legacyCdpSmartWalletProvider.js +12 -2
  113. package/dist/wallet-providers/legacyCdpWalletProvider.d.ts +12 -2
  114. package/dist/wallet-providers/legacyCdpWalletProvider.js +11 -2
  115. package/dist/wallet-providers/privyEvmDelegatedEmbeddedWalletProvider.d.ts +10 -2
  116. package/dist/wallet-providers/privyEvmDelegatedEmbeddedWalletProvider.js +12 -3
  117. package/dist/wallet-providers/privyEvmDelegatedEmbeddedWalletProvider.test.js +1 -1
  118. package/dist/wallet-providers/privyEvmWalletProvider.d.ts +2 -0
  119. package/dist/wallet-providers/privyEvmWalletProvider.js +2 -1
  120. package/dist/wallet-providers/privyEvmWalletProvider.test.js +1 -1
  121. package/dist/wallet-providers/solanaKeypairWalletProvider.d.ts +1 -1
  122. package/dist/wallet-providers/solanaKeypairWalletProvider.js +3 -4
  123. package/dist/wallet-providers/solanaKeypairWalletProvider.test.js +4 -2
  124. package/dist/wallet-providers/viemWalletProvider.d.ts +12 -2
  125. package/dist/wallet-providers/viemWalletProvider.js +12 -3
  126. package/dist/wallet-providers/viemWalletProvider.test.js +6 -5
  127. package/dist/wallet-providers/walletProvider.d.ts +1 -1
  128. package/dist/wallet-providers/zeroDevWalletProvider.d.ts +10 -2
  129. package/dist/wallet-providers/zeroDevWalletProvider.js +14 -5
  130. package/dist/wallet-providers/zeroDevWalletProvider.test.js +2 -2
  131. package/package.json +4 -2
@@ -0,0 +1,57 @@
1
+ import { z } from "zod";
2
+ import { ActionProvider } from "../actionProvider";
3
+ import { Network } from "../../network";
4
+ import { GetSwapPriceSchema, ExecuteSwapSchema } from "./schemas";
5
+ import { EvmWalletProvider } from "../../wallet-providers";
6
+ /**
7
+ * Configuration for the ZeroXActionProvider.
8
+ */
9
+ export interface ZeroXActionProviderConfig {
10
+ /**
11
+ * The API key to use for 0x API requests.
12
+ */
13
+ apiKey?: string;
14
+ }
15
+ /**
16
+ * 0x API Action Provider for token swaps.
17
+ * Requires a 0x API key.
18
+ */
19
+ export declare class ZeroXActionProvider extends ActionProvider<EvmWalletProvider> {
20
+ #private;
21
+ /**
22
+ * Constructor for the ZeroXActionProvider.
23
+ *
24
+ * @param config - Configuration for the provider.
25
+ */
26
+ constructor(config: ZeroXActionProviderConfig);
27
+ /**
28
+ * Gets a price quote for swapping one token for another.
29
+ *
30
+ * @param walletProvider - The wallet provider to get information from.
31
+ * @param args - The input arguments for the action.
32
+ * @returns A message containing the price quote.
33
+ */
34
+ getSwapPrice(walletProvider: EvmWalletProvider, args: z.infer<typeof GetSwapPriceSchema>): Promise<string>;
35
+ /**
36
+ * Executes a token swap using the 0x API.
37
+ *
38
+ * @param walletProvider - The wallet provider to use for the swap.
39
+ * @param args - The input arguments for the action.
40
+ * @returns A message containing the result of the swap.
41
+ */
42
+ executeSwap(walletProvider: EvmWalletProvider, args: z.infer<typeof ExecuteSwapSchema>): Promise<string>;
43
+ /**
44
+ * Checks if the ZeroX action provider supports the given network.
45
+ *
46
+ * @param network - The network to check.
47
+ * @returns True if the ZeroX action provider supports the network, false otherwise.
48
+ */
49
+ supportsNetwork: (network: Network) => boolean;
50
+ }
51
+ /**
52
+ * Creates a new ZeroXActionProvider with the provided configuration.
53
+ *
54
+ * @param config - Optional configuration for the provider.
55
+ * @returns A new ZeroXActionProvider.
56
+ */
57
+ export declare const zeroXActionProvider: (config: ZeroXActionProviderConfig) => ZeroXActionProvider;
@@ -0,0 +1,407 @@
1
+ "use strict";
2
+ var __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {
3
+ var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
4
+ if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5
+ else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
6
+ return c > 3 && r && Object.defineProperty(target, key, r), r;
7
+ };
8
+ var __metadata = (this && this.__metadata) || function (k, v) {
9
+ if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10
+ };
11
+ var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
12
+ if (kind === "m") throw new TypeError("Private method is not writable");
13
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
14
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
15
+ return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
16
+ };
17
+ var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
18
+ if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
19
+ if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
20
+ return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
21
+ };
22
+ var _ZeroXActionProvider_apiKey;
23
+ Object.defineProperty(exports, "__esModule", { value: true });
24
+ exports.zeroXActionProvider = exports.ZeroXActionProvider = void 0;
25
+ const zod_1 = require("zod");
26
+ const actionProvider_1 = require("../actionProvider");
27
+ const actionDecorator_1 = require("../actionDecorator");
28
+ const schemas_1 = require("./schemas");
29
+ const wallet_providers_1 = require("../../wallet-providers");
30
+ const viem_1 = require("viem");
31
+ const utils_1 = require("./utils");
32
+ /**
33
+ * 0x API Action Provider for token swaps.
34
+ * Requires a 0x API key.
35
+ */
36
+ class ZeroXActionProvider extends actionProvider_1.ActionProvider {
37
+ /**
38
+ * Constructor for the ZeroXActionProvider.
39
+ *
40
+ * @param config - Configuration for the provider.
41
+ */
42
+ constructor(config) {
43
+ super("zerox", []);
44
+ _ZeroXActionProvider_apiKey.set(this, void 0);
45
+ /**
46
+ * Checks if the ZeroX action provider supports the given network.
47
+ *
48
+ * @param network - The network to check.
49
+ * @returns True if the ZeroX action provider supports the network, false otherwise.
50
+ */
51
+ this.supportsNetwork = (network) => network.protocolFamily === "evm";
52
+ const apiKey = config.apiKey || process.env.ZEROX_API_KEY;
53
+ if (!apiKey) {
54
+ throw new Error("0x API key not provided.");
55
+ }
56
+ __classPrivateFieldSet(this, _ZeroXActionProvider_apiKey, apiKey, "f");
57
+ }
58
+ /**
59
+ * Gets a price quote for swapping one token for another.
60
+ *
61
+ * @param walletProvider - The wallet provider to get information from.
62
+ * @param args - The input arguments for the action.
63
+ * @returns A message containing the price quote.
64
+ */
65
+ async getSwapPrice(walletProvider, args) {
66
+ const network = walletProvider.getNetwork();
67
+ const chainId = network.chainId;
68
+ if (!chainId)
69
+ throw new Error("Chain ID not available from wallet provider");
70
+ try {
71
+ // Get token details
72
+ const { fromTokenDecimals: sellTokenDecimals, toTokenDecimals: buyTokenDecimals, fromTokenName: sellTokenName, toTokenName: buyTokenName, } = await (0, utils_1.getTokenDetails)(walletProvider, args.sellToken, args.buyToken);
73
+ // Convert sell amount to base units
74
+ const sellAmount = (0, viem_1.parseUnits)(args.sellAmount, sellTokenDecimals).toString();
75
+ // Create URL for the price API request
76
+ const url = new URL("https://api.0x.org/swap/permit2/price");
77
+ url.searchParams.append("chainId", chainId.toString());
78
+ url.searchParams.append("sellToken", args.sellToken);
79
+ url.searchParams.append("buyToken", args.buyToken);
80
+ url.searchParams.append("sellAmount", sellAmount);
81
+ url.searchParams.append("taker", walletProvider.getAddress());
82
+ url.searchParams.append("slippageBps", args.slippageBps.toString());
83
+ if (args.swapFeeRecipient) {
84
+ url.searchParams.append("swapFeeRecipient", args.swapFeeRecipient);
85
+ url.searchParams.append("swapFeeBps", args.swapFeeBps.toString());
86
+ url.searchParams.append("swapFeeToken", args.sellToken);
87
+ }
88
+ // Make the request
89
+ const response = await fetch(url.toString(), {
90
+ method: "GET",
91
+ headers: {
92
+ "Content-Type": "application/json",
93
+ "0x-api-key": __classPrivateFieldGet(this, _ZeroXActionProvider_apiKey, "f"),
94
+ "0x-version": "v2",
95
+ },
96
+ });
97
+ if (!response.ok) {
98
+ const errorText = await response.text();
99
+ return JSON.stringify({
100
+ success: false,
101
+ error: `Error fetching swap price: ${response.status} ${response.statusText} - ${errorText}`,
102
+ });
103
+ }
104
+ const data = await response.json();
105
+ // Format the response
106
+ const formattedResponse = {
107
+ success: true,
108
+ sellAmount: (0, viem_1.formatUnits)(BigInt(sellAmount), sellTokenDecimals),
109
+ sellTokenName: sellTokenName,
110
+ sellToken: args.sellToken,
111
+ buyAmount: (0, viem_1.formatUnits)(data.buyAmount, buyTokenDecimals),
112
+ minBuyAmount: data.minBuyAmount ? (0, viem_1.formatUnits)(data.minBuyAmount, buyTokenDecimals) : null,
113
+ buyTokenName: buyTokenName,
114
+ buyToken: args.buyToken,
115
+ slippageBps: args.slippageBps,
116
+ liquidityAvailable: data.liquidityAvailable,
117
+ balanceEnough: data.issues?.balance === null,
118
+ priceOfBuyTokenInSellToken: (Number((0, viem_1.formatUnits)(BigInt(sellAmount), sellTokenDecimals)) /
119
+ Number((0, viem_1.formatUnits)(data.buyAmount, buyTokenDecimals))).toString(),
120
+ priceOfSellTokenInBuyToken: (Number((0, viem_1.formatUnits)(data.buyAmount, buyTokenDecimals)) /
121
+ Number((0, viem_1.formatUnits)(BigInt(sellAmount), sellTokenDecimals))).toString(),
122
+ };
123
+ return JSON.stringify(formattedResponse);
124
+ }
125
+ catch (error) {
126
+ return JSON.stringify({
127
+ success: false,
128
+ error: `Error fetching swap price: ${error}`,
129
+ });
130
+ }
131
+ }
132
+ /**
133
+ * Executes a token swap using the 0x API.
134
+ *
135
+ * @param walletProvider - The wallet provider to use for the swap.
136
+ * @param args - The input arguments for the action.
137
+ * @returns A message containing the result of the swap.
138
+ */
139
+ async executeSwap(walletProvider, args) {
140
+ // Sanity checks
141
+ const network = walletProvider.getNetwork();
142
+ const chainId = network.chainId;
143
+ if (!chainId)
144
+ throw new Error("Chain ID not available from wallet provider");
145
+ try {
146
+ // Get token details
147
+ const { fromTokenDecimals: sellTokenDecimals, toTokenDecimals: buyTokenDecimals, fromTokenName: sellTokenName, toTokenName: buyTokenName, } = await (0, utils_1.getTokenDetails)(walletProvider, args.sellToken, args.buyToken);
148
+ // Convert sell amount to base units
149
+ const sellAmount = (0, viem_1.parseUnits)(args.sellAmount, sellTokenDecimals).toString();
150
+ // Get the wallet address
151
+ const walletAddress = walletProvider.getAddress();
152
+ // Fetch price quote first
153
+ const priceUrl = new URL("https://api.0x.org/swap/permit2/price");
154
+ priceUrl.searchParams.append("chainId", chainId.toString());
155
+ priceUrl.searchParams.append("sellToken", args.sellToken);
156
+ priceUrl.searchParams.append("buyToken", args.buyToken);
157
+ priceUrl.searchParams.append("sellAmount", sellAmount);
158
+ priceUrl.searchParams.append("taker", walletAddress);
159
+ priceUrl.searchParams.append("slippageBps", args.slippageBps.toString());
160
+ if (args.swapFeeRecipient) {
161
+ priceUrl.searchParams.append("swapFeeRecipient", args.swapFeeRecipient);
162
+ priceUrl.searchParams.append("swapFeeBps", args.swapFeeBps.toString());
163
+ priceUrl.searchParams.append("swapFeeToken", args.sellToken);
164
+ }
165
+ const priceResponse = await fetch(priceUrl.toString(), {
166
+ method: "GET",
167
+ headers: {
168
+ "Content-Type": "application/json",
169
+ "0x-api-key": __classPrivateFieldGet(this, _ZeroXActionProvider_apiKey, "f"),
170
+ "0x-version": "v2",
171
+ },
172
+ });
173
+ if (!priceResponse.ok) {
174
+ const errorText = await priceResponse.text();
175
+ return JSON.stringify({
176
+ success: false,
177
+ error: `Error fetching swap price: ${priceResponse.status} ${priceResponse.statusText} - ${errorText}`,
178
+ });
179
+ }
180
+ const priceData = await priceResponse.json();
181
+ // Check if liquidity is available
182
+ if (priceData.liquidityAvailable === false) {
183
+ return JSON.stringify({
184
+ success: false,
185
+ error: "No liquidity available for this swap.",
186
+ });
187
+ }
188
+ // Check if balance of sell token is enough
189
+ if (priceData.balance != null) {
190
+ return JSON.stringify({
191
+ success: false,
192
+ error: `Insufficient balance of sell token ${priceData.balance.token}. Requested to swap ${priceData.balance.expected}, but balance is only ${priceData.balance.actual}.`,
193
+ });
194
+ }
195
+ // Check if permit2 approval is needed for ERC20 tokens
196
+ // Only needed once per token per address
197
+ let approvalTxHash = null;
198
+ if (priceData.issues?.allowance) {
199
+ try {
200
+ approvalTxHash = await walletProvider.sendTransaction({
201
+ to: args.sellToken,
202
+ data: (0, viem_1.encodeFunctionData)({
203
+ abi: viem_1.erc20Abi,
204
+ functionName: "approve",
205
+ args: [utils_1.PERMIT2_ADDRESS, viem_1.maxUint256],
206
+ }),
207
+ });
208
+ await walletProvider.waitForTransactionReceipt(approvalTxHash);
209
+ }
210
+ catch (error) {
211
+ return JSON.stringify({
212
+ success: false,
213
+ error: `Error approving token: ${error}`,
214
+ });
215
+ }
216
+ }
217
+ // Fetch the swap quote
218
+ const quoteUrl = new URL("https://api.0x.org/swap/permit2/quote");
219
+ quoteUrl.searchParams.append("chainId", chainId.toString());
220
+ quoteUrl.searchParams.append("sellToken", args.sellToken);
221
+ quoteUrl.searchParams.append("buyToken", args.buyToken);
222
+ quoteUrl.searchParams.append("sellAmount", sellAmount);
223
+ quoteUrl.searchParams.append("taker", walletAddress);
224
+ quoteUrl.searchParams.append("slippageBps", args.slippageBps.toString());
225
+ if (args.swapFeeRecipient) {
226
+ quoteUrl.searchParams.append("swapFeeRecipient", args.swapFeeRecipient);
227
+ quoteUrl.searchParams.append("swapFeeBps", args.swapFeeBps.toString());
228
+ quoteUrl.searchParams.append("swapFeeToken", args.sellToken);
229
+ }
230
+ const quoteResponse = await fetch(quoteUrl.toString(), {
231
+ method: "GET",
232
+ headers: {
233
+ "Content-Type": "application/json",
234
+ "0x-api-key": __classPrivateFieldGet(this, _ZeroXActionProvider_apiKey, "f"),
235
+ "0x-version": "v2",
236
+ },
237
+ });
238
+ if (!quoteResponse.ok) {
239
+ const errorText = await quoteResponse.text();
240
+ return JSON.stringify({
241
+ success: false,
242
+ error: `Error fetching swap quote: ${quoteResponse.status} ${quoteResponse.statusText} - ${errorText}`,
243
+ });
244
+ }
245
+ const quoteData = await quoteResponse.json();
246
+ // Sign Permit2.eip712 returned from quote
247
+ let signature;
248
+ if (quoteData.permit2?.eip712) {
249
+ try {
250
+ // For LegacyCdpWalletProvider, remove EIP712Domain to avoid ambiguous primary types
251
+ const types = walletProvider instanceof wallet_providers_1.LegacyCdpWalletProvider
252
+ ? (() => {
253
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
254
+ const { EIP712Domain, ...rest } = quoteData.permit2.eip712.types;
255
+ return rest;
256
+ })()
257
+ : quoteData.permit2.eip712.types;
258
+ const typedData = {
259
+ domain: quoteData.permit2.eip712.domain,
260
+ types,
261
+ primaryType: quoteData.permit2.eip712.primaryType,
262
+ message: quoteData.permit2.eip712.message,
263
+ };
264
+ signature = await walletProvider.signTypedData(typedData);
265
+ // Append sig length and sig data to transaction.data
266
+ if (signature && quoteData.transaction?.data) {
267
+ const signatureLengthInHex = (0, viem_1.numberToHex)((0, viem_1.size)(signature), {
268
+ signed: false,
269
+ size: 32,
270
+ });
271
+ const transactionData = quoteData.transaction.data;
272
+ const sigLengthHex = signatureLengthInHex;
273
+ const sig = signature;
274
+ quoteData.transaction.data = (0, viem_1.concat)([transactionData, sigLengthHex, sig]);
275
+ }
276
+ }
277
+ catch (error) {
278
+ return JSON.stringify({
279
+ success: false,
280
+ error: `Error signing permit2 message: ${error}`,
281
+ });
282
+ }
283
+ }
284
+ // Execute swap
285
+ try {
286
+ // Prepare transaction parameters
287
+ const txParams = {
288
+ to: quoteData.transaction.to,
289
+ data: quoteData.transaction.data,
290
+ ...(quoteData?.transaction.gas ? { gas: BigInt(quoteData.transaction.gas) } : {}),
291
+ ...(quoteData.transaction.value ? { value: BigInt(quoteData.transaction.value) } : {}),
292
+ };
293
+ // Send transaction
294
+ const txHash = await walletProvider.sendTransaction(txParams);
295
+ const receipt = await walletProvider.waitForTransactionReceipt(txHash);
296
+ if (receipt.status !== "complete" && receipt.status !== "success") {
297
+ return JSON.stringify({
298
+ success: false,
299
+ ...(approvalTxHash ? { approvalTxHash } : {}),
300
+ transactionHash: receipt.transactionHash,
301
+ error: `Swap transaction failed`,
302
+ });
303
+ }
304
+ // Format the response
305
+ const formattedResponse = {
306
+ success: true,
307
+ ...(approvalTxHash ? { approvalTxHash } : {}),
308
+ transactionHash: receipt.transactionHash,
309
+ sellAmount: (0, viem_1.formatUnits)(BigInt(sellAmount), sellTokenDecimals),
310
+ sellTokenName: sellTokenName,
311
+ sellToken: args.sellToken,
312
+ buyAmount: (0, viem_1.formatUnits)(quoteData.buyAmount, buyTokenDecimals),
313
+ minBuyAmount: quoteData.minBuyAmount
314
+ ? (0, viem_1.formatUnits)(quoteData.minBuyAmount, buyTokenDecimals)
315
+ : null,
316
+ buyTokenName: buyTokenName,
317
+ buyToken: args.buyToken,
318
+ slippageBps: args.slippageBps,
319
+ network: network.networkId,
320
+ };
321
+ return JSON.stringify(formattedResponse);
322
+ }
323
+ catch (error) {
324
+ return JSON.stringify({
325
+ success: false,
326
+ error: `Error sending swap transaction: ${error}`,
327
+ ...(approvalTxHash ? { approvalTxHash } : {}),
328
+ });
329
+ }
330
+ }
331
+ catch (error) {
332
+ return JSON.stringify({
333
+ success: false,
334
+ error: `Error executing swap: ${error}`,
335
+ });
336
+ }
337
+ }
338
+ }
339
+ exports.ZeroXActionProvider = ZeroXActionProvider;
340
+ _ZeroXActionProvider_apiKey = new WeakMap();
341
+ __decorate([
342
+ (0, actionDecorator_1.CreateAction)({
343
+ name: "get_swap_price_quote_from_0x",
344
+ description: `
345
+ This tool fetches a price quote for swapping between two tokens using the 0x API.
346
+
347
+ It takes the following inputs:
348
+ - sellToken: The contract address of the token to sell
349
+ - buyToken: The contract address of the token to buy
350
+ - sellAmount: The amount of sellToken to swap in whole units (e.g. 1 ETH or 10 USDC)
351
+ - slippageBps: (Optional) Maximum allowed slippage in basis points (100 = 1%)
352
+ - swapFeeRecipient: (Optional) The wallet address to receive affiliate trading fees
353
+ - swapFeeBps: The amount in basis points (0-1000) to charge as affiliate fees (defaults to 100 = 1%), only used if swapFeeRecipient is provided
354
+
355
+ Important notes:
356
+ - The contract address for native ETH is "0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee"
357
+ - This only fetches a price quote and does not execute a swap
358
+ - Supported on all EVM networks compatible with 0x API
359
+ - Use sellToken units exactly as provided, do not convert to wei or any other units
360
+ - Never assume token or address, they have to be provided as inputs. If only token symbol is provided, use the get_token_address tool if available to get the token address first
361
+ `,
362
+ schema: schemas_1.GetSwapPriceSchema,
363
+ }),
364
+ __metadata("design:type", Function),
365
+ __metadata("design:paramtypes", [wallet_providers_1.EvmWalletProvider, void 0]),
366
+ __metadata("design:returntype", Promise)
367
+ ], ZeroXActionProvider.prototype, "getSwapPrice", null);
368
+ __decorate([
369
+ (0, actionDecorator_1.CreateAction)({
370
+ name: "execute_swap_on_0x",
371
+ description: `
372
+ This tool executes a token swap between two tokens using the 0x API.
373
+
374
+ It takes the following inputs:
375
+ - sellToken: The contract address of the token to sell
376
+ - buyToken: The contract address of the token to buy
377
+ - sellAmount: The amount of sellToken to swap in whole units (e.g. 1 ETH or 10 USDC)
378
+ - slippageBps: (Optional) Maximum allowed slippage in basis points (100 = 1%)
379
+ - swapFeeRecipient: (Optional) The wallet address to receive affiliate trading fees
380
+ - swapFeeBps: The amount in basis points (0-1000) to charge as affiliate fees (defaults to 100 = 1%), only used if swapFeeRecipient is provided
381
+
382
+ Important notes:
383
+ - The contract address for native ETH is "0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee"
384
+ - This will execute an actual swap transaction that sends tokens from your wallet
385
+ - If needed, it will automatically approve the permit2 contract to spend the sell token
386
+ - The approval transaction is only needed once per token
387
+ - Ensure you have sufficient balance of the sell token before executing
388
+ - The trade size might influence the excecution price depending on available liquidity
389
+ - First fetch a price quote and only execute swap if you are happy with the indicated price
390
+ - Supported on all EVM networks compatible with 0x API
391
+ - Use sellToken units exactly as provided, do not convert to wei or any other units
392
+ - Never assume token or address, they have to be provided as inputs. If only token symbol is provided, use the get_token_address tool if available to get the token address first
393
+ `,
394
+ schema: schemas_1.ExecuteSwapSchema,
395
+ }),
396
+ __metadata("design:type", Function),
397
+ __metadata("design:paramtypes", [wallet_providers_1.EvmWalletProvider, void 0]),
398
+ __metadata("design:returntype", Promise)
399
+ ], ZeroXActionProvider.prototype, "executeSwap", null);
400
+ /**
401
+ * Creates a new ZeroXActionProvider with the provided configuration.
402
+ *
403
+ * @param config - Optional configuration for the provider.
404
+ * @returns A new ZeroXActionProvider.
405
+ */
406
+ const zeroXActionProvider = (config) => new ZeroXActionProvider(config);
407
+ exports.zeroXActionProvider = zeroXActionProvider;