@coinbase/agentkit 0.3.0 → 0.5.0

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 (83) hide show
  1. package/README.md +90 -7
  2. package/dist/action-providers/across/acrossActionProvider.d.ts +50 -0
  3. package/dist/action-providers/across/acrossActionProvider.js +333 -0
  4. package/dist/action-providers/across/acrossActionProvider.test.d.ts +1 -0
  5. package/dist/action-providers/across/acrossActionProvider.test.js +391 -0
  6. package/dist/action-providers/across/constants.d.ts +1 -0
  7. package/dist/action-providers/across/constants.js +2 -0
  8. package/dist/action-providers/across/index.d.ts +1 -0
  9. package/dist/action-providers/across/index.js +17 -0
  10. package/dist/action-providers/across/schemas.d.ts +36 -0
  11. package/dist/action-providers/across/schemas.js +46 -0
  12. package/dist/action-providers/across/utils.d.ts +7 -0
  13. package/dist/action-providers/across/utils.js +25 -0
  14. package/dist/action-providers/defillama/constants.d.ts +8 -0
  15. package/dist/action-providers/defillama/constants.js +11 -0
  16. package/dist/action-providers/defillama/defillamaActionProvider.d.ts +54 -0
  17. package/dist/action-providers/defillama/defillamaActionProvider.js +180 -0
  18. package/dist/action-providers/defillama/defillamaActionProvider.test.d.ts +1 -0
  19. package/dist/action-providers/defillama/defillamaActionProvider.test.js +114 -0
  20. package/dist/action-providers/defillama/index.d.ts +1 -0
  21. package/dist/action-providers/defillama/index.js +17 -0
  22. package/dist/action-providers/defillama/schemas.d.ts +34 -0
  23. package/dist/action-providers/defillama/schemas.js +34 -0
  24. package/dist/action-providers/defillama/types.d.ts +73 -0
  25. package/dist/action-providers/defillama/types.js +2 -0
  26. package/dist/action-providers/defillama/utils.d.ts +10 -0
  27. package/dist/action-providers/defillama/utils.js +87 -0
  28. package/dist/action-providers/defillama/utils.test.d.ts +1 -0
  29. package/dist/action-providers/defillama/utils.test.js +124 -0
  30. package/dist/action-providers/erc20/constants.d.ts +2 -0
  31. package/dist/action-providers/erc20/constants.js +12 -1
  32. package/dist/action-providers/erc20/erc20ActionProvider.js +18 -0
  33. package/dist/action-providers/erc20/erc20ActionProvider.test.js +4 -0
  34. package/dist/action-providers/index.d.ts +3 -0
  35. package/dist/action-providers/index.js +3 -0
  36. package/dist/action-providers/messari/constants.d.ts +17 -0
  37. package/dist/action-providers/messari/constants.js +20 -0
  38. package/dist/action-providers/messari/index.d.ts +5 -0
  39. package/dist/action-providers/messari/index.js +21 -0
  40. package/dist/action-providers/messari/messariActionProvider.d.ts +42 -0
  41. package/dist/action-providers/messari/messariActionProvider.js +128 -0
  42. package/dist/action-providers/messari/messariActionProvider.test.d.ts +1 -0
  43. package/dist/action-providers/messari/messariActionProvider.test.js +152 -0
  44. package/dist/action-providers/messari/schemas.d.ts +11 -0
  45. package/dist/action-providers/messari/schemas.js +16 -0
  46. package/dist/action-providers/messari/types.d.ts +40 -0
  47. package/dist/action-providers/messari/types.js +2 -0
  48. package/dist/action-providers/messari/utils.d.ts +22 -0
  49. package/dist/action-providers/messari/utils.js +65 -0
  50. package/dist/action-providers/morpho/morphoActionProvider.js +11 -4
  51. package/dist/action-providers/morpho/morphoActionProvider.test.js +2 -0
  52. package/dist/wallet-providers/cdpWalletProvider.d.ts +11 -2
  53. package/dist/wallet-providers/cdpWalletProvider.js +24 -0
  54. package/dist/wallet-providers/cdpWalletProvider.test.d.ts +1 -0
  55. package/dist/wallet-providers/cdpWalletProvider.test.js +701 -0
  56. package/dist/wallet-providers/evmWalletProvider.test.d.ts +1 -0
  57. package/dist/wallet-providers/evmWalletProvider.test.js +56 -0
  58. package/dist/wallet-providers/index.d.ts +1 -0
  59. package/dist/wallet-providers/index.js +1 -0
  60. package/dist/wallet-providers/privyEvmDelegatedEmbeddedWalletProvider.d.ts +167 -0
  61. package/dist/wallet-providers/privyEvmDelegatedEmbeddedWalletProvider.js +438 -0
  62. package/dist/wallet-providers/privyEvmDelegatedEmbeddedWalletProvider.test.d.ts +1 -0
  63. package/dist/wallet-providers/privyEvmDelegatedEmbeddedWalletProvider.test.js +280 -0
  64. package/dist/wallet-providers/privyEvmWalletProvider.test.d.ts +1 -0
  65. package/dist/wallet-providers/privyEvmWalletProvider.test.js +331 -0
  66. package/dist/wallet-providers/privyShared.d.ts +9 -0
  67. package/dist/wallet-providers/privyShared.js +16 -5
  68. package/dist/wallet-providers/privySvmWalletProvider.test.d.ts +1 -0
  69. package/dist/wallet-providers/privySvmWalletProvider.test.js +310 -0
  70. package/dist/wallet-providers/privyWalletProvider.d.ts +21 -8
  71. package/dist/wallet-providers/privyWalletProvider.js +39 -7
  72. package/dist/wallet-providers/privyWalletProvider.test.d.ts +1 -0
  73. package/dist/wallet-providers/privyWalletProvider.test.js +124 -0
  74. package/dist/wallet-providers/smartWalletProvider.test.d.ts +1 -0
  75. package/dist/wallet-providers/smartWalletProvider.test.js +388 -0
  76. package/dist/wallet-providers/solanaKeypairWalletProvider.test.js +210 -16
  77. package/dist/wallet-providers/svmWalletProvider.test.d.ts +1 -0
  78. package/dist/wallet-providers/svmWalletProvider.test.js +55 -0
  79. package/dist/wallet-providers/viemWalletProvider.test.d.ts +1 -0
  80. package/dist/wallet-providers/viemWalletProvider.test.js +338 -0
  81. package/dist/wallet-providers/walletProvider.test.d.ts +1 -0
  82. package/dist/wallet-providers/walletProvider.test.js +103 -0
  83. package/package.json +24 -20
@@ -0,0 +1,40 @@
1
+ /**
2
+ * Configuration options for the MessariActionProvider.
3
+ */
4
+ export interface MessariActionProviderConfig {
5
+ /**
6
+ * Messari API Key
7
+ */
8
+ apiKey?: string;
9
+ }
10
+ /**
11
+ * Message format in Messari API responses
12
+ */
13
+ export interface MessariMessage {
14
+ content: string;
15
+ role: string;
16
+ }
17
+ /**
18
+ * Response format from Messari API
19
+ */
20
+ export interface MessariAPIResponse {
21
+ data: {
22
+ messages: MessariMessage[];
23
+ };
24
+ }
25
+ /**
26
+ * Error response format from Messari API
27
+ */
28
+ export interface MessariErrorResponse {
29
+ error?: string;
30
+ data?: null | unknown;
31
+ }
32
+ /**
33
+ * Extended Error interface for Messari API errors
34
+ */
35
+ export interface MessariError extends Error {
36
+ status?: number;
37
+ statusText?: string;
38
+ responseText?: string;
39
+ errorResponse?: MessariErrorResponse;
40
+ }
@@ -0,0 +1,2 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
@@ -0,0 +1,22 @@
1
+ import { MessariError } from "./types";
2
+ /**
3
+ * Creates a MessariError from an HTTP response
4
+ *
5
+ * @param response - The fetch Response object
6
+ * @returns A MessariError with response details
7
+ */
8
+ export declare function createMessariError(response: Response): Promise<MessariError>;
9
+ /**
10
+ * Formats error details for API errors
11
+ *
12
+ * @param error - The MessariError to format
13
+ * @returns Formatted error message
14
+ */
15
+ export declare function formatMessariApiError(error: MessariError): string;
16
+ /**
17
+ * Formats generic errors
18
+ *
19
+ * @param error - The error to format
20
+ * @returns Formatted error message
21
+ */
22
+ export declare function formatGenericError(error: unknown): string;
@@ -0,0 +1,65 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createMessariError = createMessariError;
4
+ exports.formatMessariApiError = formatMessariApiError;
5
+ exports.formatGenericError = formatGenericError;
6
+ /**
7
+ * Creates a MessariError from an HTTP response
8
+ *
9
+ * @param response - The fetch Response object
10
+ * @returns A MessariError with response details
11
+ */
12
+ async function createMessariError(response) {
13
+ const error = new Error(`Messari API returned ${response.status} ${response.statusText}`);
14
+ error.status = response.status;
15
+ error.statusText = response.statusText;
16
+ const responseText = await response.text();
17
+ error.responseText = responseText;
18
+ try {
19
+ const errorJson = JSON.parse(responseText);
20
+ error.errorResponse = errorJson;
21
+ }
22
+ catch {
23
+ // If parsing fails, just use the raw text
24
+ }
25
+ return error;
26
+ }
27
+ /**
28
+ * Formats error details for API errors
29
+ *
30
+ * @param error - The MessariError to format
31
+ * @returns Formatted error message
32
+ */
33
+ function formatMessariApiError(error) {
34
+ if (error.errorResponse?.error) {
35
+ return `Messari API Error: ${error.errorResponse.error}`;
36
+ }
37
+ const errorDetails = {
38
+ status: error.status,
39
+ statusText: error.statusText,
40
+ responseText: error.responseText,
41
+ message: error.message,
42
+ };
43
+ return `Messari API Error: ${JSON.stringify(errorDetails, null, 2)}`;
44
+ }
45
+ /**
46
+ * Formats generic errors
47
+ *
48
+ * @param error - The error to format
49
+ * @returns Formatted error message
50
+ */
51
+ function formatGenericError(error) {
52
+ // Check if this might be a JSON string containing an error message
53
+ if (typeof error === "string") {
54
+ try {
55
+ const parsedError = JSON.parse(error);
56
+ if (parsedError.error) {
57
+ return `Messari API Error: ${parsedError.error}`;
58
+ }
59
+ }
60
+ catch {
61
+ // Not valid JSON, continue with normal handling
62
+ }
63
+ }
64
+ return `Unexpected error: ${error instanceof Error ? error.message : String(error)}`;
65
+ }
@@ -13,11 +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
17
  const actionProvider_1 = require("../actionProvider");
17
18
  const wallet_providers_1 = require("../../wallet-providers");
18
19
  const actionDecorator_1 = require("../actionDecorator");
19
20
  const utils_1 = require("../../utils");
20
- const constants_1 = require("./constants");
21
+ const constants_2 = require("./constants");
21
22
  const schemas_1 = require("./schemas");
22
23
  exports.SUPPORTED_NETWORKS = ["base-mainnet", "base-sepolia"];
23
24
  /**
@@ -50,13 +51,19 @@ class MorphoActionProvider extends actionProvider_1.ActionProvider {
50
51
  return "Error: Assets amount must be greater than 0";
51
52
  }
52
53
  try {
53
- const atomicAssets = (0, viem_1.parseEther)(args.assets);
54
+ const decimals = await wallet.readContract({
55
+ address: args.tokenAddress,
56
+ abi: constants_1.abi,
57
+ functionName: "decimals",
58
+ args: [],
59
+ });
60
+ const atomicAssets = (0, viem_1.parseUnits)(args.assets, decimals);
54
61
  const approvalResult = await (0, utils_1.approve)(wallet, args.tokenAddress, args.vaultAddress, atomicAssets);
55
62
  if (approvalResult.startsWith("Error")) {
56
63
  return `Error approving Morpho Vault as spender: ${approvalResult}`;
57
64
  }
58
65
  const data = (0, viem_1.encodeFunctionData)({
59
- abi: constants_1.METAMORPHO_ABI,
66
+ abi: constants_2.METAMORPHO_ABI,
60
67
  functionName: "deposit",
61
68
  args: [atomicAssets, args.receiver],
62
69
  });
@@ -84,7 +91,7 @@ class MorphoActionProvider extends actionProvider_1.ActionProvider {
84
91
  }
85
92
  try {
86
93
  const data = (0, viem_1.encodeFunctionData)({
87
- abi: constants_1.METAMORPHO_ABI,
94
+ abi: constants_2.METAMORPHO_ABI,
88
95
  functionName: "withdraw",
89
96
  args: [BigInt(args.assets), args.receiver, args.receiver],
90
97
  });
@@ -11,6 +11,7 @@ const MOCK_RECEIVER_ID = "0x9876543210987654321098765432109876543210";
11
11
  const MOCK_TOKEN_ADDRESS = "0x4200000000000000000000000000000000000006";
12
12
  const MOCK_TX_HASH = "0xabcdef1234567890";
13
13
  const MOCK_RECEIPT = { status: 1, blockNumber: 1234567 };
14
+ const MOCK_DECIMALS = 18;
14
15
  jest.mock("../../utils");
15
16
  const mockApprove = utils_1.approve;
16
17
  describe("Morpho Action Provider", () => {
@@ -22,6 +23,7 @@ describe("Morpho Action Provider", () => {
22
23
  getNetwork: jest.fn().mockReturnValue({ protocolFamily: "evm", networkId: "1" }),
23
24
  sendTransaction: jest.fn().mockResolvedValue(MOCK_TX_HASH),
24
25
  waitForTransactionReceipt: jest.fn().mockResolvedValue(MOCK_RECEIPT),
26
+ readContract: jest.fn().mockResolvedValue(MOCK_DECIMALS),
25
27
  };
26
28
  mockApprove.mockResolvedValue("Approval successful");
27
29
  });
@@ -1,7 +1,7 @@
1
- import { ReadContractParameters, ReadContractReturnType, TransactionRequest, TransactionSerializable, Abi, ContractFunctionName, ContractFunctionArgs } from "viem";
1
+ import { ReadContractParameters, ReadContractReturnType, TransactionRequest, TransactionSerializable, Abi, ContractFunctionName, ContractFunctionArgs, Address, Hex } from "viem";
2
2
  import { EvmWalletProvider } from "./evmWalletProvider";
3
3
  import { Network } from "../network";
4
- import { CreateERC20Options, CreateTradeOptions, SmartContract, Trade, Wallet, WalletData } from "@coinbase/coinbase-sdk";
4
+ import { Coinbase, CreateERC20Options, CreateTradeOptions, SmartContract, Trade, Wallet, WalletData } from "@coinbase/coinbase-sdk";
5
5
  /**
6
6
  * Configuration options for the CDP Providers.
7
7
  */
@@ -233,5 +233,14 @@ export declare class CdpWalletProvider extends EvmWalletProvider {
233
233
  * @returns The wallet.
234
234
  */
235
235
  getWallet(): Wallet;
236
+ /**
237
+ * ERC20 transfer method
238
+ *
239
+ * @param assetId - The asset ID to transfer. Either USDC, CBBTC or EURC
240
+ * @param destination - The destination address
241
+ * @param amount - The amount to transfer
242
+ * @returns The transaction hash
243
+ */
244
+ gaslessERC20Transfer(assetId: typeof Coinbase.assets.Usdc | typeof Coinbase.assets.Cbbtc | typeof Coinbase.assets.Eurc, destination: Address, amount: bigint): Promise<Hex>;
236
245
  }
237
246
  export {};
@@ -392,6 +392,30 @@ class CdpWalletProvider extends evmWalletProvider_1.EvmWalletProvider {
392
392
  }
393
393
  return __classPrivateFieldGet(this, _CdpWalletProvider_cdpWallet, "f");
394
394
  }
395
+ /**
396
+ * ERC20 transfer method
397
+ *
398
+ * @param assetId - The asset ID to transfer. Either USDC, CBBTC or EURC
399
+ * @param destination - The destination address
400
+ * @param amount - The amount to transfer
401
+ * @returns The transaction hash
402
+ */
403
+ async gaslessERC20Transfer(assetId, destination, amount) {
404
+ if (!__classPrivateFieldGet(this, _CdpWalletProvider_cdpWallet, "f")) {
405
+ throw new Error("Wallet not initialized");
406
+ }
407
+ const transferResult = await __classPrivateFieldGet(this, _CdpWalletProvider_cdpWallet, "f").createTransfer({
408
+ amount,
409
+ assetId,
410
+ destination,
411
+ gasless: true,
412
+ });
413
+ const result = await transferResult.wait();
414
+ if (!result.getTransactionHash()) {
415
+ throw new Error("Transaction hash not found");
416
+ }
417
+ return result.getTransactionHash();
418
+ }
395
419
  }
396
420
  exports.CdpWalletProvider = CdpWalletProvider;
397
421
  _CdpWalletProvider_cdpWallet = new WeakMap(), _CdpWalletProvider_address = new WeakMap(), _CdpWalletProvider_network = new WeakMap(), _CdpWalletProvider_publicClient = new WeakMap(), _CdpWalletProvider_gasLimitMultiplier = new WeakMap(), _CdpWalletProvider_feePerGasMultiplier = new WeakMap();
@@ -0,0 +1 @@
1
+ export {};