@coinbase/agentkit 0.9.1 → 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 (151) hide show
  1. package/README.md +181 -54
  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 -79
  5. package/dist/action-providers/cdp/cdpApiActionProvider.test.js +0 -125
  6. package/dist/action-providers/cdp/cdpEvmWalletActionProvider.d.ts +58 -0
  7. package/dist/action-providers/cdp/cdpEvmWalletActionProvider.js +351 -0
  8. package/dist/action-providers/cdp/cdpEvmWalletActionProvider.test.d.ts +1 -0
  9. package/dist/action-providers/cdp/cdpEvmWalletActionProvider.test.js +520 -0
  10. package/dist/action-providers/cdp/cdpSmartWalletActionProvider.d.ts +57 -0
  11. package/dist/action-providers/cdp/cdpSmartWalletActionProvider.js +337 -0
  12. package/dist/action-providers/cdp/cdpSmartWalletActionProvider.test.d.ts +1 -0
  13. package/dist/action-providers/cdp/cdpSmartWalletActionProvider.test.js +463 -0
  14. package/dist/action-providers/cdp/index.d.ts +3 -0
  15. package/dist/action-providers/cdp/index.js +3 -0
  16. package/dist/action-providers/cdp/schemas.d.ts +38 -9
  17. package/dist/action-providers/cdp/schemas.js +49 -6
  18. package/dist/action-providers/cdp/spendPermissionUtils.d.ts +24 -0
  19. package/dist/action-providers/cdp/spendPermissionUtils.js +66 -0
  20. package/dist/action-providers/cdp/swapUtils.d.ts +32 -0
  21. package/dist/action-providers/cdp/swapUtils.js +142 -0
  22. package/dist/action-providers/clanker/clankerActionProvider.d.ts +43 -0
  23. package/dist/action-providers/clanker/clankerActionProvider.js +130 -0
  24. package/dist/action-providers/clanker/clankerActionProvider.test.d.ts +4 -0
  25. package/dist/action-providers/clanker/clankerActionProvider.test.js +119 -0
  26. package/dist/action-providers/clanker/index.d.ts +2 -0
  27. package/dist/action-providers/clanker/index.js +18 -0
  28. package/dist/action-providers/clanker/schemas.d.ts +56 -0
  29. package/dist/action-providers/clanker/schemas.js +47 -0
  30. package/dist/action-providers/clanker/utils.d.ts +9 -0
  31. package/dist/action-providers/clanker/utils.js +23 -0
  32. package/dist/action-providers/compound/constants.d.ts +1 -1
  33. package/dist/action-providers/compound/constants.js +2 -2
  34. package/dist/action-providers/erc20/constants.d.ts +35 -135
  35. package/dist/action-providers/erc20/constants.js +37 -189
  36. package/dist/action-providers/erc20/erc20ActionProvider.d.ts +9 -1
  37. package/dist/action-providers/erc20/erc20ActionProvider.js +87 -35
  38. package/dist/action-providers/erc20/erc20ActionProvider.test.js +115 -52
  39. package/dist/action-providers/erc20/schemas.d.ts +25 -12
  40. package/dist/action-providers/erc20/schemas.js +34 -6
  41. package/dist/action-providers/erc20/utils.d.ts +19 -0
  42. package/dist/action-providers/erc20/utils.js +54 -0
  43. package/dist/action-providers/flaunch/constants.d.ts +1 -1
  44. package/dist/action-providers/flaunch/constants.js +2 -2
  45. package/dist/action-providers/flaunch/flaunchActionProvider.js +3 -11
  46. package/dist/action-providers/flaunch/flaunchActionProvider.test.js +5 -0
  47. package/dist/action-providers/index.d.ts +4 -0
  48. package/dist/action-providers/index.js +4 -0
  49. package/dist/action-providers/jupiter/schemas.d.ts +1 -1
  50. package/dist/action-providers/moonwell/schemas.d.ts +2 -2
  51. package/dist/action-providers/morpho/morphoActionProvider.js +5 -5
  52. package/dist/action-providers/morpho/schemas.d.ts +2 -2
  53. package/dist/action-providers/pyth/pythActionProvider.js +5 -0
  54. package/dist/action-providers/pyth/pythActionProvider.test.js +5 -1
  55. package/dist/action-providers/superfluid/constants.d.ts +814 -0
  56. package/dist/action-providers/superfluid/constants.js +2826 -0
  57. package/dist/action-providers/superfluid/graphQueries/endpoints.d.ts +2 -0
  58. package/dist/action-providers/superfluid/graphQueries/endpoints.js +5 -0
  59. package/dist/action-providers/superfluid/graphQueries/queries.d.ts +1 -0
  60. package/dist/action-providers/superfluid/graphQueries/queries.js +35 -0
  61. package/dist/action-providers/superfluid/graphQueries/superfluidGraphQueries.d.ts +8 -0
  62. package/dist/action-providers/superfluid/graphQueries/superfluidGraphQueries.js +24 -0
  63. package/dist/action-providers/superfluid/graphQueries/types.d.ts +27 -0
  64. package/dist/action-providers/superfluid/graphQueries/types.js +2 -0
  65. package/dist/action-providers/superfluid/index.d.ts +7 -0
  66. package/dist/action-providers/superfluid/index.js +23 -0
  67. package/dist/action-providers/superfluid/schemas.d.ts +86 -0
  68. package/dist/action-providers/superfluid/schemas.js +103 -0
  69. package/dist/action-providers/superfluid/superfluidActionProvider.d.ts +20 -0
  70. package/dist/action-providers/superfluid/superfluidActionProvider.js +36 -0
  71. package/dist/action-providers/superfluid/superfluidPoolActionProvider.d.ts +46 -0
  72. package/dist/action-providers/superfluid/superfluidPoolActionProvider.js +143 -0
  73. package/dist/action-providers/superfluid/superfluidPoolActionProvider.test.d.ts +1 -0
  74. package/dist/action-providers/superfluid/superfluidPoolActionProvider.test.js +92 -0
  75. package/dist/action-providers/superfluid/superfluidQueryActionProvider.d.ts +27 -0
  76. package/dist/action-providers/superfluid/superfluidQueryActionProvider.js +71 -0
  77. package/dist/action-providers/superfluid/superfluidQueryActionProvider.test.d.ts +1 -0
  78. package/dist/action-providers/superfluid/superfluidQueryActionProvider.test.js +57 -0
  79. package/dist/action-providers/superfluid/superfluidStreamActionProvider.d.ts +56 -0
  80. package/dist/action-providers/superfluid/superfluidStreamActionProvider.js +191 -0
  81. package/dist/action-providers/superfluid/superfluidStreamActionProvider.test.d.ts +1 -0
  82. package/dist/action-providers/superfluid/superfluidStreamActionProvider.test.js +80 -0
  83. package/dist/action-providers/superfluid/superfluidSuperTokenCreatorActionProvider.d.ts +30 -0
  84. package/dist/action-providers/superfluid/superfluidSuperTokenCreatorActionProvider.js +108 -0
  85. package/dist/action-providers/superfluid/superfluidSuperTokenCreatorActionProvider.test.d.ts +1 -0
  86. package/dist/action-providers/superfluid/superfluidSuperTokenCreatorActionProvider.test.js +75 -0
  87. package/dist/action-providers/superfluid/superfluidWrapperActionProvider.d.ts +32 -0
  88. package/dist/action-providers/superfluid/superfluidWrapperActionProvider.js +101 -0
  89. package/dist/action-providers/superfluid/superfluidWrapperActionProvider.test.d.ts +1 -0
  90. package/dist/action-providers/superfluid/superfluidWrapperActionProvider.test.js +85 -0
  91. package/dist/action-providers/superfluid/utils/parseLogs.d.ts +18 -0
  92. package/dist/action-providers/superfluid/utils/parseLogs.js +78 -0
  93. package/dist/action-providers/truemarkets/truemarketsActionProvider.d.ts +4 -16
  94. package/dist/action-providers/truemarkets/truemarketsActionProvider.js +20 -41
  95. package/dist/action-providers/truemarkets/truemarketsActionProvider.test.js +11 -33
  96. package/dist/action-providers/wallet/walletActionProvider.js +21 -10
  97. package/dist/action-providers/wallet/walletActionProvider.test.js +6 -2
  98. package/dist/action-providers/zerion/constants.d.ts +1 -0
  99. package/dist/action-providers/zerion/constants.js +4 -0
  100. package/dist/action-providers/zerion/index.d.ts +2 -0
  101. package/dist/action-providers/zerion/index.js +18 -0
  102. package/dist/action-providers/zerion/schemas.d.ts +11 -0
  103. package/dist/action-providers/zerion/schemas.js +15 -0
  104. package/dist/action-providers/zerion/types.d.ts +125 -0
  105. package/dist/action-providers/zerion/types.js +16 -0
  106. package/dist/action-providers/zerion/utils.d.ts +3 -0
  107. package/dist/action-providers/zerion/utils.js +45 -0
  108. package/dist/action-providers/zerion/zerionActionProvider.d.ts +57 -0
  109. package/dist/action-providers/zerion/zerionActionProvider.js +159 -0
  110. package/dist/action-providers/zerion/zerionActionProvider.test.d.ts +1 -0
  111. package/dist/action-providers/zerion/zerionActionProvider.test.js +213 -0
  112. package/dist/action-providers/zeroX/index.d.ts +1 -0
  113. package/dist/action-providers/zeroX/index.js +17 -0
  114. package/dist/action-providers/zeroX/schemas.d.ts +51 -0
  115. package/dist/action-providers/zeroX/schemas.js +82 -0
  116. package/dist/action-providers/zeroX/utils.d.ts +23 -0
  117. package/dist/action-providers/zeroX/utils.js +106 -0
  118. package/dist/action-providers/zeroX/zeroXActionProvider.d.ts +57 -0
  119. package/dist/action-providers/zeroX/zeroXActionProvider.js +407 -0
  120. package/dist/action-providers/zeroX/zeroXActionProvider.test.d.ts +1 -0
  121. package/dist/action-providers/zeroX/zeroXActionProvider.test.js +445 -0
  122. package/dist/wallet-providers/cdpEvmWalletProvider.d.ts +20 -2
  123. package/dist/wallet-providers/cdpEvmWalletProvider.js +40 -15
  124. package/dist/wallet-providers/cdpShared.d.ts +9 -0
  125. package/dist/wallet-providers/cdpSmartWalletProvider.d.ts +29 -3
  126. package/dist/wallet-providers/cdpSmartWalletProvider.js +64 -28
  127. package/dist/wallet-providers/cdpSolanaWalletProvider.d.ts +1 -1
  128. package/dist/wallet-providers/cdpSolanaWalletProvider.js +7 -7
  129. package/dist/wallet-providers/cdpSolanaWalletProvider.test.js +15 -12
  130. package/dist/wallet-providers/evmWalletProvider.d.ts +5 -1
  131. package/dist/wallet-providers/legacyCdpSmartWalletProvider.d.ts +9 -2
  132. package/dist/wallet-providers/legacyCdpSmartWalletProvider.js +12 -2
  133. package/dist/wallet-providers/legacyCdpWalletProvider.d.ts +12 -2
  134. package/dist/wallet-providers/legacyCdpWalletProvider.js +11 -2
  135. package/dist/wallet-providers/privyEvmDelegatedEmbeddedWalletProvider.d.ts +10 -2
  136. package/dist/wallet-providers/privyEvmDelegatedEmbeddedWalletProvider.js +12 -3
  137. package/dist/wallet-providers/privyEvmDelegatedEmbeddedWalletProvider.test.js +1 -1
  138. package/dist/wallet-providers/privyEvmWalletProvider.d.ts +2 -0
  139. package/dist/wallet-providers/privyEvmWalletProvider.js +2 -1
  140. package/dist/wallet-providers/privyEvmWalletProvider.test.js +1 -1
  141. package/dist/wallet-providers/solanaKeypairWalletProvider.d.ts +1 -1
  142. package/dist/wallet-providers/solanaKeypairWalletProvider.js +3 -4
  143. package/dist/wallet-providers/solanaKeypairWalletProvider.test.js +4 -2
  144. package/dist/wallet-providers/viemWalletProvider.d.ts +12 -2
  145. package/dist/wallet-providers/viemWalletProvider.js +12 -3
  146. package/dist/wallet-providers/viemWalletProvider.test.js +6 -5
  147. package/dist/wallet-providers/walletProvider.d.ts +1 -1
  148. package/dist/wallet-providers/zeroDevWalletProvider.d.ts +10 -2
  149. package/dist/wallet-providers/zeroDevWalletProvider.js +14 -5
  150. package/dist/wallet-providers/zeroDevWalletProvider.test.js +2 -2
  151. package/package.json +4 -2
@@ -0,0 +1,337 @@
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
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.cdpSmartWalletActionProvider = exports.CdpSmartWalletActionProvider = void 0;
13
+ const zod_1 = require("zod");
14
+ const cdpSmartWalletProvider_1 = require("../../wallet-providers/cdpSmartWalletProvider");
15
+ const actionDecorator_1 = require("../actionDecorator");
16
+ const actionProvider_1 = require("../actionProvider");
17
+ const schemas_1 = require("./schemas");
18
+ const spendPermissionUtils_1 = require("./spendPermissionUtils");
19
+ const swapUtils_1 = require("./swapUtils");
20
+ const viem_1 = require("viem");
21
+ /**
22
+ * CdpSmartWalletActionProvider is an action provider for CDP Smart Wallet specific actions.
23
+ *
24
+ * This provider is scoped specifically to CdpSmartWalletProvider and provides actions
25
+ * that are optimized for smart wallet functionality.
26
+ */
27
+ class CdpSmartWalletActionProvider extends actionProvider_1.ActionProvider {
28
+ /**
29
+ * Constructor for the CdpSmartWalletActionProvider class.
30
+ */
31
+ constructor() {
32
+ super("cdp_smart_wallet", []);
33
+ /**
34
+ * Checks if the smart wallet action provider supports the given network.
35
+ *
36
+ * @param _ - The network to check.
37
+ * @returns True if the smart wallet action provider supports the network, false otherwise.
38
+ */
39
+ this.supportsNetwork = (_) => {
40
+ return true;
41
+ };
42
+ }
43
+ /**
44
+ * Lists spend permissions for a smart account.
45
+ *
46
+ * @param walletProvider - The smart wallet provider to use for listing permissions.
47
+ * @param args - The input arguments for listing spend permissions.
48
+ * @returns A list of spend permissions available to the current wallet.
49
+ */
50
+ async listSpendPermissions(walletProvider, args) {
51
+ const network = walletProvider.getNetwork();
52
+ if (network.protocolFamily === "evm") {
53
+ const spenderAddress = walletProvider.getAddress();
54
+ return await (0, spendPermissionUtils_1.listSpendPermissionsForSpender)(walletProvider.getClient(), args.smartAccountAddress, spenderAddress);
55
+ }
56
+ else {
57
+ return "Spend permissions are currently only supported on EVM networks.";
58
+ }
59
+ }
60
+ /**
61
+ * Uses a spend permission to transfer tokens from a smart account to the current smart wallet.
62
+ *
63
+ * @param walletProvider - The smart wallet provider to use for the spend operation.
64
+ * @param args - The input arguments for using the spend permission.
65
+ * @returns A confirmation message with transaction details.
66
+ */
67
+ async useSpendPermission(walletProvider, args) {
68
+ const network = walletProvider.getNetwork();
69
+ const cdpNetwork = walletProvider.getCdpSdkNetwork();
70
+ if (network.protocolFamily === "evm") {
71
+ try {
72
+ const permission = await (0, spendPermissionUtils_1.findLatestSpendPermission)(walletProvider.getClient(), args.smartAccountAddress, walletProvider.getAddress());
73
+ const spendResult = await walletProvider.smartAccount.useSpendPermission({
74
+ spendPermission: permission,
75
+ value: BigInt(args.value),
76
+ network: cdpNetwork,
77
+ });
78
+ return `Successfully spent ${args.value} tokens using spend permission. Status: ${spendResult.status}`;
79
+ }
80
+ catch (error) {
81
+ throw new Error(`Failed to use spend permission: ${error}`);
82
+ }
83
+ }
84
+ else {
85
+ throw new Error("Spend permissions are currently only supported on EVM networks.");
86
+ }
87
+ }
88
+ /**
89
+ * Gets a price quote for swapping tokens using the CDP Swap API.
90
+ *
91
+ * @param walletProvider - The smart wallet provider to get the quote for.
92
+ * @param args - The input arguments for the swap price action.
93
+ * @returns A JSON string with detailed swap price quote information.
94
+ */
95
+ async getSwapPrice(walletProvider, args) {
96
+ const network = walletProvider.getNetwork();
97
+ const networkId = network.networkId;
98
+ // Check if the network is supported
99
+ if (networkId !== "base-mainnet" && networkId !== "base-sepolia") {
100
+ return JSON.stringify({
101
+ success: false,
102
+ error: "CDP Swap API for smart wallets is currently only supported on Base networks.",
103
+ });
104
+ }
105
+ try {
106
+ const cdpNetwork = walletProvider.getCdpSdkNetwork();
107
+ // Get token details
108
+ const { fromTokenDecimals, toTokenDecimals, fromTokenName, toTokenName } = await (0, swapUtils_1.getTokenDetails)(walletProvider, args.fromToken, args.toToken);
109
+ // Get swap price quote
110
+ const swapPrice = (await walletProvider.getClient().evm.getSwapPrice({
111
+ fromToken: args.fromToken,
112
+ toToken: args.toToken,
113
+ fromAmount: (0, viem_1.parseUnits)(args.fromAmount, fromTokenDecimals),
114
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
115
+ network: cdpNetwork,
116
+ taker: walletProvider.getAddress(),
117
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
118
+ }));
119
+ const formattedResponse = {
120
+ success: true,
121
+ fromAmount: args.fromAmount,
122
+ fromTokenName: fromTokenName,
123
+ fromToken: args.fromToken,
124
+ toAmount: (0, viem_1.formatUnits)(swapPrice.toAmount, toTokenDecimals),
125
+ minToAmount: (0, viem_1.formatUnits)(swapPrice.minToAmount, toTokenDecimals),
126
+ toTokenName: toTokenName,
127
+ toToken: args.toToken,
128
+ slippageBps: args.slippageBps,
129
+ liquidityAvailable: swapPrice.liquidityAvailable,
130
+ balanceEnough: swapPrice.issues.balance === undefined,
131
+ priceOfBuyTokenInSellToken: (Number(args.fromAmount) / Number((0, viem_1.formatUnits)(swapPrice.toAmount, toTokenDecimals))).toString(),
132
+ priceOfSellTokenInBuyToken: (Number((0, viem_1.formatUnits)(swapPrice.toAmount, toTokenDecimals)) / Number(args.fromAmount)).toString(),
133
+ };
134
+ return JSON.stringify(formattedResponse);
135
+ }
136
+ catch (error) {
137
+ return JSON.stringify({
138
+ success: false,
139
+ error: `Error fetching swap price: ${error}`,
140
+ });
141
+ }
142
+ }
143
+ /**
144
+ * Swaps tokens using the CDP client.
145
+ *
146
+ * @param walletProvider - The smart wallet provider to perform the swap with.
147
+ * @param args - The input arguments for the swap action.
148
+ * @returns A JSON string with detailed swap execution information.
149
+ */
150
+ async swap(walletProvider, args) {
151
+ const network = walletProvider.getNetwork();
152
+ const networkId = network.networkId;
153
+ // Check if the network is supported
154
+ if (networkId !== "base-mainnet" && networkId !== "base-sepolia") {
155
+ return JSON.stringify({
156
+ success: false,
157
+ error: "CDP Swap API for smart wallets is currently only supported on Base networks.",
158
+ });
159
+ }
160
+ // Check if the owner account is a CDP server account
161
+ if (walletProvider.ownerAccount.type === "local") {
162
+ throw new Error("Smart wallet owner account is not a CDP server account.");
163
+ }
164
+ try {
165
+ const cdpNetwork = walletProvider.getCdpSdkNetwork();
166
+ // Get token details
167
+ const { fromTokenDecimals, fromTokenName, toTokenName, toTokenDecimals } = await (0, swapUtils_1.getTokenDetails)(walletProvider, args.fromToken, args.toToken);
168
+ // Estimate swap price first to check liquidity, token balance and permit2 approval status
169
+ const swapPrice = await walletProvider.getClient().evm.getSwapPrice({
170
+ fromToken: args.fromToken,
171
+ toToken: args.toToken,
172
+ fromAmount: (0, viem_1.parseUnits)(args.fromAmount, fromTokenDecimals),
173
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
174
+ network: cdpNetwork,
175
+ taker: walletProvider.smartAccount.address,
176
+ });
177
+ // Check if liquidity is available
178
+ if (!swapPrice.liquidityAvailable) {
179
+ return JSON.stringify({
180
+ success: false,
181
+ error: `No liquidity available to swap ${args.fromAmount} ${fromTokenName} (${args.fromToken}) to ${toTokenName} (${args.toToken})`,
182
+ });
183
+ }
184
+ // Check if balance is enough
185
+ if (swapPrice.issues.balance) {
186
+ return JSON.stringify({
187
+ success: false,
188
+ error: `Balance is not enough to perform swap. Required: ${args.fromAmount} ${fromTokenName}, but only have ${(0, viem_1.formatUnits)(swapPrice.issues.balance.currentBalance, fromTokenDecimals)} ${fromTokenName} (${args.fromToken})`,
189
+ });
190
+ }
191
+ // Check if allowance is enough
192
+ let approvalTxHash = null;
193
+ if (swapPrice.issues.allowance) {
194
+ try {
195
+ approvalTxHash = await walletProvider.sendTransaction({
196
+ to: args.fromToken,
197
+ data: (0, viem_1.encodeFunctionData)({
198
+ abi: viem_1.erc20Abi,
199
+ functionName: "approve",
200
+ args: [swapUtils_1.PERMIT2_ADDRESS, viem_1.maxUint256],
201
+ }),
202
+ });
203
+ const receipt = await walletProvider.waitForTransactionReceipt(approvalTxHash);
204
+ if (receipt.status !== "complete") {
205
+ return JSON.stringify({
206
+ success: false,
207
+ error: `Approval transaction failed`,
208
+ });
209
+ }
210
+ }
211
+ catch (error) {
212
+ return JSON.stringify({
213
+ success: false,
214
+ error: `Error approving token: ${error}`,
215
+ });
216
+ }
217
+ }
218
+ // Execute swap using the all-in-one pattern with retry logic
219
+ const swapResult = await (0, swapUtils_1.retryWithExponentialBackoff)(async () => {
220
+ return (await walletProvider.smartAccount.swap({
221
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
222
+ network: cdpNetwork,
223
+ fromToken: args.fromToken,
224
+ toToken: args.toToken,
225
+ fromAmount: (0, viem_1.parseUnits)(args.fromAmount, fromTokenDecimals),
226
+ slippageBps: args.slippageBps,
227
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
228
+ paymasterUrl: walletProvider.getPaymasterUrl(),
229
+ signerAddress: walletProvider.ownerAccount.address,
230
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
231
+ }));
232
+ }, 3, 5000); // Max 3 retries with 5s base delay
233
+ // Check if swap was successful
234
+ const swapReceipt = await walletProvider.waitForTransactionReceipt(swapResult.userOpHash);
235
+ if (swapReceipt.status !== "complete") {
236
+ return JSON.stringify({
237
+ success: false,
238
+ error: `Swap transaction failed`,
239
+ });
240
+ }
241
+ // Format the successful response
242
+ const formattedResponse = {
243
+ success: true,
244
+ ...(approvalTxHash ? { approvalTxHash } : {}),
245
+ transactionHash: swapResult.userOpHash,
246
+ fromAmount: args.fromAmount,
247
+ fromTokenName: fromTokenName,
248
+ fromToken: args.fromToken,
249
+ toAmount: (0, viem_1.formatUnits)(swapPrice.toAmount, toTokenDecimals),
250
+ minToAmount: (0, viem_1.formatUnits)(swapPrice.minToAmount, toTokenDecimals),
251
+ toTokenName: toTokenName,
252
+ toToken: args.toToken,
253
+ slippageBps: args.slippageBps,
254
+ network: networkId,
255
+ };
256
+ return JSON.stringify(formattedResponse);
257
+ }
258
+ catch (error) {
259
+ return JSON.stringify({
260
+ success: false,
261
+ error: `Swap failed: ${error}`,
262
+ });
263
+ }
264
+ }
265
+ }
266
+ exports.CdpSmartWalletActionProvider = CdpSmartWalletActionProvider;
267
+ __decorate([
268
+ (0, actionDecorator_1.CreateAction)({
269
+ name: "list_spend_permissions",
270
+ description: `This tool lists spend permissions that have been granted to the current smart wallet by another smart account.
271
+ It takes a smart account address and returns spend permissions where the current smart wallet is the spender.
272
+ This is useful to see what spending allowances have been granted before using them.
273
+ This action is specifically designed for smart wallets.`,
274
+ schema: schemas_1.ListSpendPermissionsSchema,
275
+ }),
276
+ __metadata("design:type", Function),
277
+ __metadata("design:paramtypes", [cdpSmartWalletProvider_1.CdpSmartWalletProvider, void 0]),
278
+ __metadata("design:returntype", Promise)
279
+ ], CdpSmartWalletActionProvider.prototype, "listSpendPermissions", null);
280
+ __decorate([
281
+ (0, actionDecorator_1.CreateAction)({
282
+ name: "use_spend_permission",
283
+ description: `This tool uses a spend permission to spend tokens on behalf of a smart account that the current smart wallet has permission to spend.
284
+ It automatically finds the latest valid spend permission granted by the smart account to the current smart wallet and uses it to spend the specified amount.
285
+ The smart account must have previously granted a spend permission to the current smart wallet using createSpendPermission.
286
+ This action is specifically designed for smart wallets and uses the smart account directly for optimal performance.`,
287
+ schema: schemas_1.UseSpendPermissionSchema,
288
+ }),
289
+ __metadata("design:type", Function),
290
+ __metadata("design:paramtypes", [cdpSmartWalletProvider_1.CdpSmartWalletProvider, void 0]),
291
+ __metadata("design:returntype", Promise)
292
+ ], CdpSmartWalletActionProvider.prototype, "useSpendPermission", null);
293
+ __decorate([
294
+ (0, actionDecorator_1.CreateAction)({
295
+ name: "get_swap_price",
296
+ description: `
297
+ This tool fetches a price quote for swapping (trading) between two tokens using the CDP Swap API but does not execute a swap.
298
+ It takes the following inputs:
299
+ - fromToken: The contract address of the token to sell
300
+ - toToken: The contract address of the token to buy
301
+ - fromAmount: The amount of fromToken to swap in whole units (e.g. 1 ETH or 10.5 USDC)
302
+ - slippageBps: (Optional) Maximum allowed slippage in basis points (100 = 1%)
303
+ Important notes:
304
+ - The contract address for native ETH is "0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee"
305
+ - Use fromAmount units exactly as provided, do not convert to wei or any other units
306
+ - 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
307
+ `,
308
+ schema: schemas_1.SwapSchema,
309
+ }),
310
+ __metadata("design:type", Function),
311
+ __metadata("design:paramtypes", [cdpSmartWalletProvider_1.CdpSmartWalletProvider, void 0]),
312
+ __metadata("design:returntype", Promise)
313
+ ], CdpSmartWalletActionProvider.prototype, "getSwapPrice", null);
314
+ __decorate([
315
+ (0, actionDecorator_1.CreateAction)({
316
+ name: "swap",
317
+ description: `
318
+ This tool executes a token swap (trade) using the CDP Swap API.
319
+ It takes the following inputs:
320
+ - fromToken: The contract address of the token to sell
321
+ - toToken: The contract address of the token to buy
322
+ - fromAmount: The amount of fromToken to swap in whole units (e.g. 1 ETH or 10.5 USDC)
323
+ - slippageBps: (Optional) Maximum allowed slippage in basis points (100 = 1%)
324
+ Important notes:
325
+ - The contract address for native ETH is "0xeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee"
326
+ - If needed, it will automatically approve the permit2 contract to spend the fromToken
327
+ - Use fromAmount units exactly as provided, do not convert to wei or any other units
328
+ - 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
329
+ `,
330
+ schema: schemas_1.SwapSchema,
331
+ }),
332
+ __metadata("design:type", Function),
333
+ __metadata("design:paramtypes", [cdpSmartWalletProvider_1.CdpSmartWalletProvider, void 0]),
334
+ __metadata("design:returntype", Promise)
335
+ ], CdpSmartWalletActionProvider.prototype, "swap", null);
336
+ const cdpSmartWalletActionProvider = () => new CdpSmartWalletActionProvider();
337
+ exports.cdpSmartWalletActionProvider = cdpSmartWalletActionProvider;