@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.
- package/README.md +90 -7
- package/dist/action-providers/across/acrossActionProvider.d.ts +50 -0
- package/dist/action-providers/across/acrossActionProvider.js +333 -0
- package/dist/action-providers/across/acrossActionProvider.test.d.ts +1 -0
- package/dist/action-providers/across/acrossActionProvider.test.js +391 -0
- package/dist/action-providers/across/constants.d.ts +1 -0
- package/dist/action-providers/across/constants.js +2 -0
- package/dist/action-providers/across/index.d.ts +1 -0
- package/dist/action-providers/across/index.js +17 -0
- package/dist/action-providers/across/schemas.d.ts +36 -0
- package/dist/action-providers/across/schemas.js +46 -0
- package/dist/action-providers/across/utils.d.ts +7 -0
- package/dist/action-providers/across/utils.js +25 -0
- package/dist/action-providers/defillama/constants.d.ts +8 -0
- package/dist/action-providers/defillama/constants.js +11 -0
- package/dist/action-providers/defillama/defillamaActionProvider.d.ts +54 -0
- package/dist/action-providers/defillama/defillamaActionProvider.js +180 -0
- package/dist/action-providers/defillama/defillamaActionProvider.test.d.ts +1 -0
- package/dist/action-providers/defillama/defillamaActionProvider.test.js +114 -0
- package/dist/action-providers/defillama/index.d.ts +1 -0
- package/dist/action-providers/defillama/index.js +17 -0
- package/dist/action-providers/defillama/schemas.d.ts +34 -0
- package/dist/action-providers/defillama/schemas.js +34 -0
- package/dist/action-providers/defillama/types.d.ts +73 -0
- package/dist/action-providers/defillama/types.js +2 -0
- package/dist/action-providers/defillama/utils.d.ts +10 -0
- package/dist/action-providers/defillama/utils.js +87 -0
- package/dist/action-providers/defillama/utils.test.d.ts +1 -0
- package/dist/action-providers/defillama/utils.test.js +124 -0
- package/dist/action-providers/erc20/constants.d.ts +2 -0
- package/dist/action-providers/erc20/constants.js +12 -1
- package/dist/action-providers/erc20/erc20ActionProvider.js +18 -0
- package/dist/action-providers/erc20/erc20ActionProvider.test.js +4 -0
- package/dist/action-providers/index.d.ts +3 -0
- package/dist/action-providers/index.js +3 -0
- package/dist/action-providers/messari/constants.d.ts +17 -0
- package/dist/action-providers/messari/constants.js +20 -0
- package/dist/action-providers/messari/index.d.ts +5 -0
- package/dist/action-providers/messari/index.js +21 -0
- package/dist/action-providers/messari/messariActionProvider.d.ts +42 -0
- package/dist/action-providers/messari/messariActionProvider.js +128 -0
- package/dist/action-providers/messari/messariActionProvider.test.d.ts +1 -0
- package/dist/action-providers/messari/messariActionProvider.test.js +152 -0
- package/dist/action-providers/messari/schemas.d.ts +11 -0
- package/dist/action-providers/messari/schemas.js +16 -0
- package/dist/action-providers/messari/types.d.ts +40 -0
- package/dist/action-providers/messari/types.js +2 -0
- package/dist/action-providers/messari/utils.d.ts +22 -0
- package/dist/action-providers/messari/utils.js +65 -0
- package/dist/action-providers/morpho/morphoActionProvider.js +11 -4
- package/dist/action-providers/morpho/morphoActionProvider.test.js +2 -0
- package/dist/wallet-providers/cdpWalletProvider.d.ts +11 -2
- package/dist/wallet-providers/cdpWalletProvider.js +24 -0
- package/dist/wallet-providers/cdpWalletProvider.test.d.ts +1 -0
- package/dist/wallet-providers/cdpWalletProvider.test.js +701 -0
- package/dist/wallet-providers/evmWalletProvider.test.d.ts +1 -0
- package/dist/wallet-providers/evmWalletProvider.test.js +56 -0
- package/dist/wallet-providers/index.d.ts +1 -0
- package/dist/wallet-providers/index.js +1 -0
- package/dist/wallet-providers/privyEvmDelegatedEmbeddedWalletProvider.d.ts +167 -0
- package/dist/wallet-providers/privyEvmDelegatedEmbeddedWalletProvider.js +438 -0
- package/dist/wallet-providers/privyEvmDelegatedEmbeddedWalletProvider.test.d.ts +1 -0
- package/dist/wallet-providers/privyEvmDelegatedEmbeddedWalletProvider.test.js +280 -0
- package/dist/wallet-providers/privyEvmWalletProvider.test.d.ts +1 -0
- package/dist/wallet-providers/privyEvmWalletProvider.test.js +331 -0
- package/dist/wallet-providers/privyShared.d.ts +9 -0
- package/dist/wallet-providers/privyShared.js +16 -5
- package/dist/wallet-providers/privySvmWalletProvider.test.d.ts +1 -0
- package/dist/wallet-providers/privySvmWalletProvider.test.js +310 -0
- package/dist/wallet-providers/privyWalletProvider.d.ts +21 -8
- package/dist/wallet-providers/privyWalletProvider.js +39 -7
- package/dist/wallet-providers/privyWalletProvider.test.d.ts +1 -0
- package/dist/wallet-providers/privyWalletProvider.test.js +124 -0
- package/dist/wallet-providers/smartWalletProvider.test.d.ts +1 -0
- package/dist/wallet-providers/smartWalletProvider.test.js +388 -0
- package/dist/wallet-providers/solanaKeypairWalletProvider.test.js +210 -16
- package/dist/wallet-providers/svmWalletProvider.test.d.ts +1 -0
- package/dist/wallet-providers/svmWalletProvider.test.js +55 -0
- package/dist/wallet-providers/viemWalletProvider.test.d.ts +1 -0
- package/dist/wallet-providers/viemWalletProvider.test.js +338 -0
- package/dist/wallet-providers/walletProvider.test.d.ts +1 -0
- package/dist/wallet-providers/walletProvider.test.js +103 -0
- 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,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
|
|
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
|
|
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:
|
|
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:
|
|
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 {};
|