@coinbase/agentkit 0.0.0-nightly-20250328174338
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 +827 -0
- 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/actionDecorator.d.ts +69 -0
- package/dist/action-providers/actionDecorator.js +96 -0
- package/dist/action-providers/actionProvider.d.ts +48 -0
- package/dist/action-providers/actionProvider.js +62 -0
- package/dist/action-providers/alchemy/alchemyTokenPricesActionProvider.d.ts +55 -0
- package/dist/action-providers/alchemy/alchemyTokenPricesActionProvider.js +173 -0
- package/dist/action-providers/alchemy/alchemyTokenPricesActionProvider.test.d.ts +1 -0
- package/dist/action-providers/alchemy/alchemyTokenPricesActionProvider.test.js +131 -0
- package/dist/action-providers/alchemy/index.d.ts +2 -0
- package/dist/action-providers/alchemy/index.js +18 -0
- package/dist/action-providers/alchemy/schemas.d.ts +41 -0
- package/dist/action-providers/alchemy/schemas.js +34 -0
- package/dist/action-providers/allora/alloraActionProvider.d.ts +44 -0
- package/dist/action-providers/allora/alloraActionProvider.js +195 -0
- package/dist/action-providers/allora/alloraActionProvider.test.d.ts +1 -0
- package/dist/action-providers/allora/alloraActionProvider.test.js +109 -0
- package/dist/action-providers/allora/index.d.ts +2 -0
- package/dist/action-providers/allora/index.js +18 -0
- package/dist/action-providers/allora/schemas.d.ts +28 -0
- package/dist/action-providers/allora/schemas.js +30 -0
- package/dist/action-providers/basename/basenameActionProvider.d.ts +30 -0
- package/dist/action-providers/basename/basenameActionProvider.js +109 -0
- package/dist/action-providers/basename/basenameActionProvider.test.d.ts +1 -0
- package/dist/action-providers/basename/basenameActionProvider.test.js +146 -0
- package/dist/action-providers/basename/constants.d.ts +52 -0
- package/dist/action-providers/basename/constants.js +81 -0
- package/dist/action-providers/basename/index.d.ts +2 -0
- package/dist/action-providers/basename/index.js +18 -0
- package/dist/action-providers/basename/schemas.d.ts +14 -0
- package/dist/action-providers/basename/schemas.js +14 -0
- package/dist/action-providers/cdp/cdpApiActionProvider.d.ts +43 -0
- package/dist/action-providers/cdp/cdpApiActionProvider.js +128 -0
- package/dist/action-providers/cdp/cdpApiActionProvider.test.d.ts +1 -0
- package/dist/action-providers/cdp/cdpApiActionProvider.test.js +146 -0
- package/dist/action-providers/cdp/cdpWalletActionProvider.d.ts +58 -0
- package/dist/action-providers/cdp/cdpWalletActionProvider.js +224 -0
- package/dist/action-providers/cdp/cdpWalletActionProvider.test.d.ts +1 -0
- package/dist/action-providers/cdp/cdpWalletActionProvider.test.js +267 -0
- package/dist/action-providers/cdp/constants.d.ts +31 -0
- package/dist/action-providers/cdp/constants.js +34 -0
- package/dist/action-providers/cdp/index.d.ts +3 -0
- package/dist/action-providers/cdp/index.js +19 -0
- package/dist/action-providers/cdp/schemas.d.ts +91 -0
- package/dist/action-providers/cdp/schemas.js +77 -0
- package/dist/action-providers/compound/compoundActionProvider.d.ts +67 -0
- package/dist/action-providers/compound/compoundActionProvider.js +365 -0
- package/dist/action-providers/compound/compoundActionProvider.test.d.ts +1 -0
- package/dist/action-providers/compound/compoundActionProvider.test.js +353 -0
- package/dist/action-providers/compound/constants.d.ts +180 -0
- package/dist/action-providers/compound/constants.js +129 -0
- package/dist/action-providers/compound/index.d.ts +1 -0
- package/dist/action-providers/compound/index.js +17 -0
- package/dist/action-providers/compound/schemas.d.ts +57 -0
- package/dist/action-providers/compound/schemas.js +58 -0
- package/dist/action-providers/compound/utils.d.ts +95 -0
- package/dist/action-providers/compound/utils.js +353 -0
- package/dist/action-providers/customActionProvider.d.ts +30 -0
- package/dist/action-providers/customActionProvider.js +66 -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 +137 -0
- package/dist/action-providers/erc20/constants.js +202 -0
- package/dist/action-providers/erc20/erc20ActionProvider.d.ts +38 -0
- package/dist/action-providers/erc20/erc20ActionProvider.js +142 -0
- package/dist/action-providers/erc20/erc20ActionProvider.test.d.ts +1 -0
- package/dist/action-providers/erc20/erc20ActionProvider.test.js +131 -0
- package/dist/action-providers/erc20/index.d.ts +1 -0
- package/dist/action-providers/erc20/index.js +17 -0
- package/dist/action-providers/erc20/schemas.d.ts +27 -0
- package/dist/action-providers/erc20/schemas.js +26 -0
- package/dist/action-providers/erc721/constants.d.ts +232 -0
- package/dist/action-providers/erc721/constants.js +298 -0
- package/dist/action-providers/erc721/erc721ActionProvider.d.ts +46 -0
- package/dist/action-providers/erc721/erc721ActionProvider.js +164 -0
- package/dist/action-providers/erc721/erc721ActionProvider.test.d.ts +1 -0
- package/dist/action-providers/erc721/erc721ActionProvider.test.js +137 -0
- package/dist/action-providers/erc721/index.d.ts +1 -0
- package/dist/action-providers/erc721/index.js +17 -0
- package/dist/action-providers/erc721/schemas.d.ts +46 -0
- package/dist/action-providers/erc721/schemas.js +44 -0
- package/dist/action-providers/farcaster/farcasterActionProvider.d.ts +57 -0
- package/dist/action-providers/farcaster/farcasterActionProvider.js +142 -0
- package/dist/action-providers/farcaster/farcasterActionProvider.test.d.ts +1 -0
- package/dist/action-providers/farcaster/farcasterActionProvider.test.js +151 -0
- package/dist/action-providers/farcaster/index.d.ts +2 -0
- package/dist/action-providers/farcaster/index.js +18 -0
- package/dist/action-providers/farcaster/schemas.d.ts +15 -0
- package/dist/action-providers/farcaster/schemas.js +20 -0
- package/dist/action-providers/index.d.ts +24 -0
- package/dist/action-providers/index.js +40 -0
- package/dist/action-providers/jupiter/index.d.ts +1 -0
- package/dist/action-providers/jupiter/index.js +17 -0
- package/dist/action-providers/jupiter/jupiterActionProvider.d.ts +36 -0
- package/dist/action-providers/jupiter/jupiterActionProvider.js +115 -0
- package/dist/action-providers/jupiter/jupiterActionProvider.test.d.ts +1 -0
- package/dist/action-providers/jupiter/jupiterActionProvider.test.js +146 -0
- package/dist/action-providers/jupiter/schemas.d.ts +20 -0
- package/dist/action-providers/jupiter/schemas.js +20 -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/moonwell/constants.d.ts +78 -0
- package/dist/action-providers/moonwell/constants.js +111 -0
- package/dist/action-providers/moonwell/index.d.ts +1 -0
- package/dist/action-providers/moonwell/index.js +5 -0
- package/dist/action-providers/moonwell/moonwellActionProvider.d.ts +39 -0
- package/dist/action-providers/moonwell/moonwellActionProvider.js +249 -0
- package/dist/action-providers/moonwell/moonwellActionProvider.test.d.ts +1 -0
- package/dist/action-providers/moonwell/moonwellActionProvider.test.js +455 -0
- package/dist/action-providers/moonwell/schemas.d.ts +30 -0
- package/dist/action-providers/moonwell/schemas.js +39 -0
- package/dist/action-providers/morpho/constants.d.ts +16 -0
- package/dist/action-providers/morpho/constants.js +27 -0
- package/dist/action-providers/morpho/index.d.ts +2 -0
- package/dist/action-providers/morpho/index.js +18 -0
- package/dist/action-providers/morpho/morphoActionProvider.d.ts +39 -0
- package/dist/action-providers/morpho/morphoActionProvider.js +154 -0
- package/dist/action-providers/morpho/morphoActionProvider.test.d.ts +1 -0
- package/dist/action-providers/morpho/morphoActionProvider.test.js +128 -0
- package/dist/action-providers/morpho/schemas.d.ts +36 -0
- package/dist/action-providers/morpho/schemas.js +47 -0
- package/dist/action-providers/opensea/index.d.ts +1 -0
- package/dist/action-providers/opensea/index.js +17 -0
- package/dist/action-providers/opensea/openseaActionProvider.d.ts +59 -0
- package/dist/action-providers/opensea/openseaActionProvider.js +146 -0
- package/dist/action-providers/opensea/openseaActionProvider.test.d.ts +1 -0
- package/dist/action-providers/opensea/openseaActionProvider.test.js +201 -0
- package/dist/action-providers/opensea/schemas.d.ts +30 -0
- package/dist/action-providers/opensea/schemas.js +33 -0
- package/dist/action-providers/opensea/utils.d.ts +12 -0
- package/dist/action-providers/opensea/utils.js +47 -0
- package/dist/action-providers/pyth/index.d.ts +2 -0
- package/dist/action-providers/pyth/index.js +18 -0
- package/dist/action-providers/pyth/pythActionProvider.d.ts +33 -0
- package/dist/action-providers/pyth/pythActionProvider.js +121 -0
- package/dist/action-providers/pyth/pythActionProvider.test.d.ts +1 -0
- package/dist/action-providers/pyth/pythActionProvider.test.js +113 -0
- package/dist/action-providers/pyth/schemas.d.ts +21 -0
- package/dist/action-providers/pyth/schemas.js +20 -0
- package/dist/action-providers/spl/index.d.ts +1 -0
- package/dist/action-providers/spl/index.js +17 -0
- package/dist/action-providers/spl/schemas.d.ts +30 -0
- package/dist/action-providers/spl/schemas.js +26 -0
- package/dist/action-providers/spl/splActionProvider.d.ts +45 -0
- package/dist/action-providers/spl/splActionProvider.js +173 -0
- package/dist/action-providers/spl/splActionProvider.test.d.ts +1 -0
- package/dist/action-providers/spl/splActionProvider.test.js +300 -0
- package/dist/action-providers/twitter/index.d.ts +2 -0
- package/dist/action-providers/twitter/index.js +18 -0
- package/dist/action-providers/twitter/schemas.d.ts +38 -0
- package/dist/action-providers/twitter/schemas.js +44 -0
- package/dist/action-providers/twitter/twitterActionProvider.d.ts +82 -0
- package/dist/action-providers/twitter/twitterActionProvider.js +204 -0
- package/dist/action-providers/twitter/twitterActionProvider.test.d.ts +1 -0
- package/dist/action-providers/twitter/twitterActionProvider.test.js +185 -0
- package/dist/action-providers/wallet/index.d.ts +1 -0
- package/dist/action-providers/wallet/index.js +17 -0
- package/dist/action-providers/wallet/schemas.d.ts +19 -0
- package/dist/action-providers/wallet/schemas.js +19 -0
- package/dist/action-providers/wallet/walletActionProvider.d.ts +44 -0
- package/dist/action-providers/wallet/walletActionProvider.js +140 -0
- package/dist/action-providers/wallet/walletActionProvider.test.d.ts +1 -0
- package/dist/action-providers/wallet/walletActionProvider.test.js +194 -0
- package/dist/action-providers/weth/constants.d.ts +19 -0
- package/dist/action-providers/weth/constants.js +29 -0
- package/dist/action-providers/weth/index.d.ts +1 -0
- package/dist/action-providers/weth/index.js +17 -0
- package/dist/action-providers/weth/schemas.d.ts +8 -0
- package/dist/action-providers/weth/schemas.js +10 -0
- package/dist/action-providers/weth/wethActionProvider.d.ts +30 -0
- package/dist/action-providers/weth/wethActionProvider.js +89 -0
- package/dist/action-providers/weth/wethActionProvider.test.d.ts +1 -0
- package/dist/action-providers/weth/wethActionProvider.test.js +92 -0
- package/dist/action-providers/wow/constants.d.ts +15 -0
- package/dist/action-providers/wow/constants.js +844 -0
- package/dist/action-providers/wow/index.d.ts +2 -0
- package/dist/action-providers/wow/index.js +18 -0
- package/dist/action-providers/wow/schemas.d.ts +43 -0
- package/dist/action-providers/wow/schemas.js +47 -0
- package/dist/action-providers/wow/uniswap/constants.d.ts +3 -0
- package/dist/action-providers/wow/uniswap/constants.js +100 -0
- package/dist/action-providers/wow/uniswap/utils.d.ts +82 -0
- package/dist/action-providers/wow/uniswap/utils.js +226 -0
- package/dist/action-providers/wow/utils.d.ts +27 -0
- package/dist/action-providers/wow/utils.js +63 -0
- package/dist/action-providers/wow/wowActionProvider.d.ts +46 -0
- package/dist/action-providers/wow/wowActionProvider.js +223 -0
- package/dist/action-providers/wow/wowActionProvider.test.d.ts +1 -0
- package/dist/action-providers/wow/wowActionProvider.test.js +291 -0
- package/dist/agentkit.d.ts +44 -0
- package/dist/agentkit.js +68 -0
- package/dist/analytics/index.d.ts +1 -0
- package/dist/analytics/index.js +17 -0
- package/dist/analytics/sendAnalyticsEvent.d.ts +31 -0
- package/dist/analytics/sendAnalyticsEvent.js +52 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.js +20 -0
- package/dist/network/index.d.ts +3 -0
- package/dist/network/index.js +19 -0
- package/dist/network/network.d.ts +20 -0
- package/dist/network/network.js +86 -0
- package/dist/network/svm.d.ts +15 -0
- package/dist/network/svm.js +38 -0
- package/dist/network/types.d.ts +17 -0
- package/dist/network/types.js +2 -0
- package/dist/utils.d.ts +22 -0
- package/dist/utils.js +57 -0
- package/dist/utils.test.d.ts +1 -0
- package/dist/utils.test.js +50 -0
- package/dist/wallet-providers/cdpWalletProvider.d.ts +246 -0
- package/dist/wallet-providers/cdpWalletProvider.js +421 -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.d.ts +51 -0
- package/dist/wallet-providers/evmWalletProvider.js +14 -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 +10 -0
- package/dist/wallet-providers/index.js +26 -0
- package/dist/wallet-providers/privyEvmWalletProvider.d.ts +55 -0
- package/dist/wallet-providers/privyEvmWalletProvider.js +140 -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 +40 -0
- package/dist/wallet-providers/privyShared.js +49 -0
- package/dist/wallet-providers/privySvmWalletProvider.d.ts +128 -0
- package/dist/wallet-providers/privySvmWalletProvider.js +212 -0
- 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 +35 -0
- package/dist/wallet-providers/privyWalletProvider.js +39 -0
- package/dist/wallet-providers/privyWalletProvider.test.d.ts +1 -0
- package/dist/wallet-providers/privyWalletProvider.test.js +124 -0
- package/dist/wallet-providers/smartWalletProvider.d.ts +177 -0
- package/dist/wallet-providers/smartWalletProvider.js +303 -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.d.ts +143 -0
- package/dist/wallet-providers/solanaKeypairWalletProvider.js +280 -0
- package/dist/wallet-providers/solanaKeypairWalletProvider.test.d.ts +1 -0
- package/dist/wallet-providers/solanaKeypairWalletProvider.test.js +218 -0
- package/dist/wallet-providers/svmWalletProvider.d.ts +56 -0
- package/dist/wallet-providers/svmWalletProvider.js +13 -0
- package/dist/wallet-providers/svmWalletProvider.test.d.ts +1 -0
- package/dist/wallet-providers/svmWalletProvider.test.js +55 -0
- package/dist/wallet-providers/viemWalletProvider.d.ts +103 -0
- package/dist/wallet-providers/viemWalletProvider.js +206 -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.d.ts +48 -0
- package/dist/wallet-providers/walletProvider.js +41 -0
- package/dist/wallet-providers/walletProvider.test.d.ts +1 -0
- package/dist/wallet-providers/walletProvider.test.js +103 -0
- package/package.json +83 -0
|
@@ -0,0 +1,115 @@
|
|
|
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.jupiterActionProvider = exports.JupiterActionProvider = void 0;
|
|
13
|
+
const actionProvider_1 = require("../actionProvider");
|
|
14
|
+
const svmWalletProvider_1 = require("../../wallet-providers/svmWalletProvider");
|
|
15
|
+
const zod_1 = require("zod");
|
|
16
|
+
const actionDecorator_1 = require("../actionDecorator");
|
|
17
|
+
const schemas_1 = require("./schemas");
|
|
18
|
+
const web3_js_1 = require("@solana/web3.js");
|
|
19
|
+
const api_1 = require("@jup-ag/api");
|
|
20
|
+
/**
|
|
21
|
+
* JupiterActionProvider handles token swaps using Jupiter's API.
|
|
22
|
+
*/
|
|
23
|
+
class JupiterActionProvider extends actionProvider_1.ActionProvider {
|
|
24
|
+
/**
|
|
25
|
+
* Initializes Jupiter API client.
|
|
26
|
+
*/
|
|
27
|
+
constructor() {
|
|
28
|
+
super("jupiter", []);
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Swaps tokens using Jupiter's API.
|
|
32
|
+
*
|
|
33
|
+
* @param walletProvider - The wallet provider to use for the swap
|
|
34
|
+
* @param args - Swap parameters including input token, output token, and amount
|
|
35
|
+
* @returns A message indicating success or failure with transaction details
|
|
36
|
+
*/
|
|
37
|
+
async swap(walletProvider, args) {
|
|
38
|
+
try {
|
|
39
|
+
const jupiterApi = (0, api_1.createJupiterApiClient)();
|
|
40
|
+
const userPublicKey = walletProvider.getPublicKey();
|
|
41
|
+
const inputMint = new web3_js_1.PublicKey(args.inputMint);
|
|
42
|
+
const outputMint = new web3_js_1.PublicKey(args.outputMint);
|
|
43
|
+
const { getMint } = await import("@solana/spl-token");
|
|
44
|
+
let mintInfo;
|
|
45
|
+
try {
|
|
46
|
+
mintInfo = await getMint(walletProvider.getConnection(), inputMint);
|
|
47
|
+
}
|
|
48
|
+
catch (error) {
|
|
49
|
+
return `Failed to fetch mint info for mint address ${args.inputMint}. Error: ${error}`;
|
|
50
|
+
}
|
|
51
|
+
const amount = args.amount * 10 ** mintInfo.decimals;
|
|
52
|
+
const quoteResponse = await jupiterApi.quoteGet({
|
|
53
|
+
inputMint: inputMint.toBase58(),
|
|
54
|
+
outputMint: outputMint.toBase58(),
|
|
55
|
+
amount: amount,
|
|
56
|
+
slippageBps: args.slippageBps || 50, // 0.5% default slippage
|
|
57
|
+
});
|
|
58
|
+
if (!quoteResponse) {
|
|
59
|
+
throw new Error("Failed to get a swap quote.");
|
|
60
|
+
}
|
|
61
|
+
const swapRequest = {
|
|
62
|
+
userPublicKey: userPublicKey.toBase58(),
|
|
63
|
+
wrapAndUnwrapSol: true,
|
|
64
|
+
useSharedAccounts: true, // Optimize for low transaction costs
|
|
65
|
+
quoteResponse,
|
|
66
|
+
};
|
|
67
|
+
const swapResponse = await jupiterApi.swapPost({ swapRequest });
|
|
68
|
+
if (!swapResponse || !swapResponse.swapTransaction) {
|
|
69
|
+
throw new Error("Failed to generate swap transaction.");
|
|
70
|
+
}
|
|
71
|
+
const transactionBuffer = Buffer.from(swapResponse.swapTransaction, "base64");
|
|
72
|
+
const tx = web3_js_1.VersionedTransaction.deserialize(transactionBuffer);
|
|
73
|
+
const signature = await walletProvider.signAndSendTransaction(tx);
|
|
74
|
+
await walletProvider.waitForSignatureResult(signature);
|
|
75
|
+
return `Successfully swapped ${args.amount} tokens! Signature: ${signature}`;
|
|
76
|
+
}
|
|
77
|
+
catch (error) {
|
|
78
|
+
return `Error swapping tokens: ${error}`;
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
/**
|
|
82
|
+
* Checks if the action provider supports the given network.
|
|
83
|
+
* Only supports Solana networks.
|
|
84
|
+
*
|
|
85
|
+
* @param network - The network to check support for
|
|
86
|
+
* @returns True if the network is a Solana network
|
|
87
|
+
*/
|
|
88
|
+
supportsNetwork(network) {
|
|
89
|
+
return network.protocolFamily == "svm" && network.networkId === "solana-mainnet";
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
exports.JupiterActionProvider = JupiterActionProvider;
|
|
93
|
+
__decorate([
|
|
94
|
+
(0, actionDecorator_1.CreateAction)({
|
|
95
|
+
name: "swap",
|
|
96
|
+
description: `
|
|
97
|
+
Swaps tokens using Jupiter's DEX aggregator.
|
|
98
|
+
- Input and output tokens must be valid SPL token mints.
|
|
99
|
+
- Ensures sufficient balance before executing swap.
|
|
100
|
+
- If says "SOL" as the input or output, use the mint address So11111111111111111111111111111111111111112
|
|
101
|
+
NOTE: Only available on Solana mainnet.
|
|
102
|
+
`,
|
|
103
|
+
schema: schemas_1.SwapTokenSchema,
|
|
104
|
+
}),
|
|
105
|
+
__metadata("design:type", Function),
|
|
106
|
+
__metadata("design:paramtypes", [svmWalletProvider_1.SvmWalletProvider, void 0]),
|
|
107
|
+
__metadata("design:returntype", Promise)
|
|
108
|
+
], JupiterActionProvider.prototype, "swap", null);
|
|
109
|
+
/**
|
|
110
|
+
* Factory function to create a new JupiterActionProvider instance.
|
|
111
|
+
*
|
|
112
|
+
* @returns A new JupiterActionProvider instance
|
|
113
|
+
*/
|
|
114
|
+
const jupiterActionProvider = () => new JupiterActionProvider();
|
|
115
|
+
exports.jupiterActionProvider = jupiterActionProvider;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|
|
@@ -0,0 +1,146 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
const web3_js_1 = require("@solana/web3.js");
|
|
4
|
+
const jupiterActionProvider_1 = require("./jupiterActionProvider");
|
|
5
|
+
const api_1 = require("@jup-ag/api");
|
|
6
|
+
// Default SPL token decimals for tests
|
|
7
|
+
const DECIMALS = 6;
|
|
8
|
+
// Mock the @solana/web3.js module
|
|
9
|
+
jest.mock("@solana/web3.js", () => ({
|
|
10
|
+
// Preserve the actual implementation of @solana/web3.js while overriding specific methods
|
|
11
|
+
...jest.requireActual("@solana/web3.js"),
|
|
12
|
+
// Mock the Solana Connection class to prevent real network calls
|
|
13
|
+
Connection: jest.fn(),
|
|
14
|
+
// Mock the VersionedTransaction class and its deserialize method
|
|
15
|
+
VersionedTransaction: {
|
|
16
|
+
deserialize: jest.fn().mockReturnValue({
|
|
17
|
+
// Mock the sign method to prevent actual signing operations
|
|
18
|
+
sign: jest.fn(),
|
|
19
|
+
}),
|
|
20
|
+
},
|
|
21
|
+
// Mock the MessageV0 class and its compile method to return an empty object
|
|
22
|
+
MessageV0: {
|
|
23
|
+
compile: jest.fn().mockReturnValue({}),
|
|
24
|
+
},
|
|
25
|
+
}));
|
|
26
|
+
// Mock the @solana/spl-token module
|
|
27
|
+
jest.mock("@solana/spl-token", () => ({
|
|
28
|
+
// Preserve the actual implementation of @solana/spl-token while overriding specific methods
|
|
29
|
+
...jest.requireActual("@solana/spl-token"),
|
|
30
|
+
// Mock getMint to always return a fixed decimal value for tokens
|
|
31
|
+
getMint: jest.fn().mockReturnValue({ decimals: DECIMALS }),
|
|
32
|
+
}));
|
|
33
|
+
// Mock the @jup-ag/api module
|
|
34
|
+
jest.mock("@jup-ag/api", () => ({
|
|
35
|
+
// Mock the createJupiterApiClient function to return an object with mocked methods
|
|
36
|
+
createJupiterApiClient: jest.fn().mockReturnValue({
|
|
37
|
+
// Mock the quoteGet method, which fetches the best swap route
|
|
38
|
+
quoteGet: jest.fn(),
|
|
39
|
+
// Mock the swapPost method, which generates the swap transaction
|
|
40
|
+
swapPost: jest.fn(),
|
|
41
|
+
}),
|
|
42
|
+
}));
|
|
43
|
+
// Mock the custom wallet provider used for Solana transactions
|
|
44
|
+
jest.mock("../../wallet-providers/svmWalletProvider");
|
|
45
|
+
describe("JupiterActionProvider", () => {
|
|
46
|
+
let actionProvider;
|
|
47
|
+
let mockWallet;
|
|
48
|
+
let mockConnection;
|
|
49
|
+
let mockJupiterApi;
|
|
50
|
+
let mockQuoteGet;
|
|
51
|
+
let mockSwapPost;
|
|
52
|
+
beforeEach(() => {
|
|
53
|
+
jest.clearAllMocks(); // Reset mocks before each test to ensure no test interference
|
|
54
|
+
// Create a mock Jupiter API client with mocked methods
|
|
55
|
+
mockJupiterApi = (0, api_1.createJupiterApiClient)();
|
|
56
|
+
mockQuoteGet = mockJupiterApi.quoteGet;
|
|
57
|
+
mockSwapPost = mockJupiterApi.swapPost;
|
|
58
|
+
// Initialize the action provider
|
|
59
|
+
actionProvider = new jupiterActionProvider_1.JupiterActionProvider();
|
|
60
|
+
// Mock the Solana connection to avoid real network requests
|
|
61
|
+
mockConnection = {
|
|
62
|
+
getLatestBlockhash: jest.fn().mockResolvedValue({ blockhash: "mockedBlockhash" }),
|
|
63
|
+
};
|
|
64
|
+
// Mock the wallet provider with necessary methods
|
|
65
|
+
mockWallet = {
|
|
66
|
+
getConnection: jest.fn().mockReturnValue(mockConnection), // Return the mocked connection
|
|
67
|
+
getPublicKey: jest.fn().mockReturnValue(new web3_js_1.PublicKey("11111111111111111111111111111111")),
|
|
68
|
+
signAndSendTransaction: jest.fn().mockResolvedValue("mock-signature"),
|
|
69
|
+
waitForSignatureResult: jest.fn().mockResolvedValue({
|
|
70
|
+
context: { slot: 1234 },
|
|
71
|
+
value: { err: null },
|
|
72
|
+
}),
|
|
73
|
+
getAddress: jest.fn().mockReturnValue("11111111111111111111111111111111"),
|
|
74
|
+
getNetwork: jest.fn().mockReturnValue({ protocolFamily: "svm", networkId: "solana-mainnet" }),
|
|
75
|
+
getName: jest.fn().mockReturnValue("mock-wallet"),
|
|
76
|
+
getBalance: jest.fn().mockResolvedValue(BigInt(1000000000)),
|
|
77
|
+
nativeTransfer: jest.fn(),
|
|
78
|
+
};
|
|
79
|
+
});
|
|
80
|
+
/**
|
|
81
|
+
* Test cases for the swap function of JupiterActionProvider
|
|
82
|
+
*/
|
|
83
|
+
describe("swap", () => {
|
|
84
|
+
const INPUT_MINT = "So11111111111111111111111111111111111111112"; // Mock SOL mint address
|
|
85
|
+
const OUTPUT_MINT = "BXXkv6FbfHZmKbMmy6KvaakKt6bYjhbjmhvJ92kp92Mw"; // Mock token mint address
|
|
86
|
+
const MOCK_SIGNATURE = "mock-signature";
|
|
87
|
+
// Mock arguments for swapping tokens
|
|
88
|
+
const swapArgs = {
|
|
89
|
+
inputMint: INPUT_MINT,
|
|
90
|
+
outputMint: OUTPUT_MINT,
|
|
91
|
+
amount: 1000, // User-specified amount
|
|
92
|
+
slippageBps: 50, // Slippage tolerance
|
|
93
|
+
};
|
|
94
|
+
/**
|
|
95
|
+
* Test successful token swap execution
|
|
96
|
+
*/
|
|
97
|
+
it("should successfully swap tokens", async () => {
|
|
98
|
+
// Mock a successful quote response from Jupiter
|
|
99
|
+
mockQuoteGet.mockResolvedValue({ route: "mock-route" });
|
|
100
|
+
// Mock a successful swap transaction response from Jupiter
|
|
101
|
+
mockSwapPost.mockResolvedValue({
|
|
102
|
+
swapTransaction: Buffer.from("mock-transaction").toString("base64"),
|
|
103
|
+
});
|
|
104
|
+
// Call the swap function
|
|
105
|
+
const result = await actionProvider.swap(mockWallet, swapArgs);
|
|
106
|
+
// Verify that Jupiter was called with correct parameters
|
|
107
|
+
expect(mockQuoteGet).toHaveBeenCalledWith({
|
|
108
|
+
inputMint: INPUT_MINT,
|
|
109
|
+
outputMint: OUTPUT_MINT,
|
|
110
|
+
amount: swapArgs.amount * 10 ** DECIMALS, // Ensure correct decimal conversion
|
|
111
|
+
slippageBps: swapArgs.slippageBps,
|
|
112
|
+
});
|
|
113
|
+
expect(mockSwapPost).toHaveBeenCalled();
|
|
114
|
+
expect(mockWallet.waitForSignatureResult).toHaveBeenCalledWith(MOCK_SIGNATURE);
|
|
115
|
+
expect(result).toContain("Successfully swapped");
|
|
116
|
+
});
|
|
117
|
+
/**
|
|
118
|
+
* Test handling of errors when retrieving a swap quote
|
|
119
|
+
*/
|
|
120
|
+
it("should handle swap quote errors", async () => {
|
|
121
|
+
mockQuoteGet.mockRejectedValue(new Error("Quote error")); // Simulate an API failure
|
|
122
|
+
const result = await actionProvider.swap(mockWallet, swapArgs);
|
|
123
|
+
expect(result).toBe("Error swapping tokens: Error: Quote error");
|
|
124
|
+
});
|
|
125
|
+
/**
|
|
126
|
+
* Test handling of errors when posting a swap transaction
|
|
127
|
+
*/
|
|
128
|
+
it("should handle swap transaction errors", async () => {
|
|
129
|
+
mockQuoteGet.mockResolvedValue({ route: "mock-route" });
|
|
130
|
+
mockSwapPost.mockRejectedValue(new Error("Swap transaction error")); // Simulate a failure
|
|
131
|
+
const result = await actionProvider.swap(mockWallet, swapArgs);
|
|
132
|
+
expect(result).toBe("Error swapping tokens: Error: Swap transaction error");
|
|
133
|
+
});
|
|
134
|
+
});
|
|
135
|
+
describe("supportsNetwork", () => {
|
|
136
|
+
test.each([
|
|
137
|
+
[{ protocolFamily: "svm", networkId: "solana-mainnet" }, true, "solana mainnet"],
|
|
138
|
+
[{ protocolFamily: "svm", networkId: "solana-devnet" }, false, "solana devnet"],
|
|
139
|
+
[{ protocolFamily: "evm", networkId: "ethereum-mainnet" }, false, "ethereum mainnet"],
|
|
140
|
+
[{ protocolFamily: "evm", networkId: "solana-mainnet" }, false, "wrong protocol family"],
|
|
141
|
+
[{ protocolFamily: "svm", networkId: "ethereum-mainnet" }, false, "wrong network id"],
|
|
142
|
+
])("should return %p for %s", (network, expected) => {
|
|
143
|
+
expect(actionProvider.supportsNetwork(network)).toBe(expected);
|
|
144
|
+
});
|
|
145
|
+
});
|
|
146
|
+
});
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
/**
|
|
3
|
+
* Schema for swapping tokens using Jupiter.
|
|
4
|
+
*/
|
|
5
|
+
export declare const SwapTokenSchema: z.ZodObject<{
|
|
6
|
+
inputMint: z.ZodString;
|
|
7
|
+
outputMint: z.ZodString;
|
|
8
|
+
amount: z.ZodNumber;
|
|
9
|
+
slippageBps: z.ZodDefault<z.ZodNumber>;
|
|
10
|
+
}, "strip", z.ZodTypeAny, {
|
|
11
|
+
amount: number;
|
|
12
|
+
inputMint: string;
|
|
13
|
+
outputMint: string;
|
|
14
|
+
slippageBps: number;
|
|
15
|
+
}, {
|
|
16
|
+
amount: number;
|
|
17
|
+
inputMint: string;
|
|
18
|
+
outputMint: string;
|
|
19
|
+
slippageBps?: number | undefined;
|
|
20
|
+
}>;
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.SwapTokenSchema = void 0;
|
|
4
|
+
const zod_1 = require("zod");
|
|
5
|
+
/**
|
|
6
|
+
* Schema for swapping tokens using Jupiter.
|
|
7
|
+
*/
|
|
8
|
+
exports.SwapTokenSchema = zod_1.z
|
|
9
|
+
.object({
|
|
10
|
+
inputMint: zod_1.z.string().describe("The mint address of the token to swap from"),
|
|
11
|
+
outputMint: zod_1.z.string().describe("The mint address of the token to swap to"),
|
|
12
|
+
amount: zod_1.z.number().positive().describe("Amount of tokens to swap"),
|
|
13
|
+
slippageBps: zod_1.z
|
|
14
|
+
.number()
|
|
15
|
+
.int()
|
|
16
|
+
.positive()
|
|
17
|
+
.default(50)
|
|
18
|
+
.describe("Slippage tolerance in basis points (e.g., 50 = 0.5%)"),
|
|
19
|
+
})
|
|
20
|
+
.describe("Swap tokens using Jupiter DEX aggregator");
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Base URL for the Messari API
|
|
3
|
+
*/
|
|
4
|
+
export declare const MESSARI_BASE_URL = "https://api.messari.io/ai/v1";
|
|
5
|
+
/**
|
|
6
|
+
* Default error message when API key is missing
|
|
7
|
+
*/
|
|
8
|
+
export declare const API_KEY_MISSING_ERROR = "MESSARI_API_KEY is not configured.";
|
|
9
|
+
/**
|
|
10
|
+
* Rate limits by subscription tier
|
|
11
|
+
*/
|
|
12
|
+
export declare const RATE_LIMITS: {
|
|
13
|
+
FREE: string;
|
|
14
|
+
LITE: string;
|
|
15
|
+
PRO: string;
|
|
16
|
+
ENTERPRISE: string;
|
|
17
|
+
};
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.RATE_LIMITS = exports.API_KEY_MISSING_ERROR = exports.MESSARI_BASE_URL = void 0;
|
|
4
|
+
/**
|
|
5
|
+
* Base URL for the Messari API
|
|
6
|
+
*/
|
|
7
|
+
exports.MESSARI_BASE_URL = "https://api.messari.io/ai/v1";
|
|
8
|
+
/**
|
|
9
|
+
* Default error message when API key is missing
|
|
10
|
+
*/
|
|
11
|
+
exports.API_KEY_MISSING_ERROR = "MESSARI_API_KEY is not configured.";
|
|
12
|
+
/**
|
|
13
|
+
* Rate limits by subscription tier
|
|
14
|
+
*/
|
|
15
|
+
exports.RATE_LIMITS = {
|
|
16
|
+
FREE: "2 requests per day",
|
|
17
|
+
LITE: "10 requests per day",
|
|
18
|
+
PRO: "20 requests per day",
|
|
19
|
+
ENTERPRISE: "50 requests per day",
|
|
20
|
+
};
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __exportStar = (this && this.__exportStar) || function(m, exports) {
|
|
14
|
+
for (var p in m) if (p !== "default" && !Object.prototype.hasOwnProperty.call(exports, p)) __createBinding(exports, m, p);
|
|
15
|
+
};
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
__exportStar(require("./messariActionProvider"), exports);
|
|
18
|
+
__exportStar(require("./schemas"), exports);
|
|
19
|
+
__exportStar(require("./types"), exports);
|
|
20
|
+
__exportStar(require("./constants"), exports);
|
|
21
|
+
__exportStar(require("./utils"), exports);
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { z } from "zod";
|
|
2
|
+
import { ActionProvider } from "../actionProvider";
|
|
3
|
+
import { Network } from "../../network";
|
|
4
|
+
import { MessariResearchQuestionSchema } from "./schemas";
|
|
5
|
+
import { MessariActionProviderConfig } from "./types";
|
|
6
|
+
/**
|
|
7
|
+
* MessariActionProvider is an action provider for Messari AI toolkit interactions.
|
|
8
|
+
* It enables AI agents to ask research questions about crypto markets, protocols, and tokens.
|
|
9
|
+
*
|
|
10
|
+
* @augments ActionProvider
|
|
11
|
+
*/
|
|
12
|
+
export declare class MessariActionProvider extends ActionProvider {
|
|
13
|
+
private readonly apiKey;
|
|
14
|
+
/**
|
|
15
|
+
* Constructor for the MessariActionProvider class.
|
|
16
|
+
*
|
|
17
|
+
* @param config - The configuration options for the MessariActionProvider
|
|
18
|
+
*/
|
|
19
|
+
constructor(config?: MessariActionProviderConfig);
|
|
20
|
+
/**
|
|
21
|
+
* Makes a request to the Messari AI API with a research question
|
|
22
|
+
*
|
|
23
|
+
* @param args - The arguments containing the research question
|
|
24
|
+
* @returns A string containing the research results or an error message
|
|
25
|
+
*/
|
|
26
|
+
researchQuestion(args: z.infer<typeof MessariResearchQuestionSchema>): Promise<string>;
|
|
27
|
+
/**
|
|
28
|
+
* Checks if the action provider supports the given network.
|
|
29
|
+
* Messari research is network-agnostic, so it supports all networks.
|
|
30
|
+
*
|
|
31
|
+
* @param _ - The network to check
|
|
32
|
+
* @returns Always returns true as Messari research is network-agnostic
|
|
33
|
+
*/
|
|
34
|
+
supportsNetwork(_: Network): boolean;
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Factory function to create a new MessariActionProvider instance.
|
|
38
|
+
*
|
|
39
|
+
* @param config - The configuration options for the MessariActionProvider
|
|
40
|
+
* @returns A new instance of MessariActionProvider
|
|
41
|
+
*/
|
|
42
|
+
export declare const messariActionProvider: (config?: MessariActionProviderConfig) => MessariActionProvider;
|
|
@@ -0,0 +1,128 @@
|
|
|
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.messariActionProvider = exports.MessariActionProvider = void 0;
|
|
13
|
+
const zod_1 = require("zod");
|
|
14
|
+
const actionProvider_1 = require("../actionProvider");
|
|
15
|
+
const actionDecorator_1 = require("../actionDecorator");
|
|
16
|
+
const schemas_1 = require("./schemas");
|
|
17
|
+
const constants_1 = require("./constants");
|
|
18
|
+
const utils_1 = require("./utils");
|
|
19
|
+
/**
|
|
20
|
+
* MessariActionProvider is an action provider for Messari AI toolkit interactions.
|
|
21
|
+
* It enables AI agents to ask research questions about crypto markets, protocols, and tokens.
|
|
22
|
+
*
|
|
23
|
+
* @augments ActionProvider
|
|
24
|
+
*/
|
|
25
|
+
class MessariActionProvider extends actionProvider_1.ActionProvider {
|
|
26
|
+
/**
|
|
27
|
+
* Constructor for the MessariActionProvider class.
|
|
28
|
+
*
|
|
29
|
+
* @param config - The configuration options for the MessariActionProvider
|
|
30
|
+
*/
|
|
31
|
+
constructor(config = {}) {
|
|
32
|
+
super("messari", []);
|
|
33
|
+
config.apiKey || (config.apiKey = process.env.MESSARI_API_KEY);
|
|
34
|
+
if (!config.apiKey) {
|
|
35
|
+
throw new Error(constants_1.API_KEY_MISSING_ERROR);
|
|
36
|
+
}
|
|
37
|
+
this.apiKey = config.apiKey;
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* Makes a request to the Messari AI API with a research question
|
|
41
|
+
*
|
|
42
|
+
* @param args - The arguments containing the research question
|
|
43
|
+
* @returns A string containing the research results or an error message
|
|
44
|
+
*/
|
|
45
|
+
async researchQuestion(args) {
|
|
46
|
+
try {
|
|
47
|
+
// Make API request
|
|
48
|
+
const response = await fetch(`${constants_1.MESSARI_BASE_URL}/chat/completions`, {
|
|
49
|
+
method: "POST",
|
|
50
|
+
headers: {
|
|
51
|
+
"Content-Type": "application/json",
|
|
52
|
+
"x-messari-api-key": this.apiKey,
|
|
53
|
+
},
|
|
54
|
+
body: JSON.stringify({
|
|
55
|
+
messages: [
|
|
56
|
+
{
|
|
57
|
+
role: "user",
|
|
58
|
+
content: args.question,
|
|
59
|
+
},
|
|
60
|
+
],
|
|
61
|
+
}),
|
|
62
|
+
});
|
|
63
|
+
if (!response.ok) {
|
|
64
|
+
throw await (0, utils_1.createMessariError)(response);
|
|
65
|
+
}
|
|
66
|
+
// Parse and validate response
|
|
67
|
+
let data;
|
|
68
|
+
try {
|
|
69
|
+
data = (await response.json());
|
|
70
|
+
}
|
|
71
|
+
catch (jsonError) {
|
|
72
|
+
throw new Error(`Failed to parse API response: ${jsonError instanceof Error ? jsonError.message : String(jsonError)}`);
|
|
73
|
+
}
|
|
74
|
+
if (!data.data?.messages?.[0]?.content) {
|
|
75
|
+
throw new Error("Received invalid response format from Messari API");
|
|
76
|
+
}
|
|
77
|
+
const result = data.data.messages[0].content;
|
|
78
|
+
return `Messari Research Results:\n\n${result}`;
|
|
79
|
+
}
|
|
80
|
+
catch (error) {
|
|
81
|
+
if (error instanceof Error && "responseText" in error) {
|
|
82
|
+
return (0, utils_1.formatMessariApiError)(error);
|
|
83
|
+
}
|
|
84
|
+
return (0, utils_1.formatGenericError)(error);
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Checks if the action provider supports the given network.
|
|
89
|
+
* Messari research is network-agnostic, so it supports all networks.
|
|
90
|
+
*
|
|
91
|
+
* @param _ - The network to check
|
|
92
|
+
* @returns Always returns true as Messari research is network-agnostic
|
|
93
|
+
*/
|
|
94
|
+
supportsNetwork(_) {
|
|
95
|
+
return true; // Messari research is network-agnostic
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
exports.MessariActionProvider = MessariActionProvider;
|
|
99
|
+
__decorate([
|
|
100
|
+
(0, actionDecorator_1.CreateAction)({
|
|
101
|
+
name: "research_question",
|
|
102
|
+
description: `
|
|
103
|
+
This tool queries Messari AI for comprehensive crypto research across these datasets:
|
|
104
|
+
1. News/Content - Latest crypto news, blogs, podcasts
|
|
105
|
+
2. Exchanges - CEX/DEX volumes, market share, assets listed
|
|
106
|
+
3. Onchain Data - Active addresses, transaction fees, total transactions.
|
|
107
|
+
4. Token Unlocks - Upcoming supply unlocks, vesting schedules, and token emission details
|
|
108
|
+
5. Market Data - Asset prices, trading volume, market cap, TVL, and historical performance
|
|
109
|
+
6. Fundraising - Investment data, funding rounds, venture capital activity.
|
|
110
|
+
7. Protocol Research - Technical analysis of how protocols work, tokenomics, and yield mechanisms
|
|
111
|
+
8. Social Data - Twitter followers and Reddit subscribers metrics, growth trends
|
|
112
|
+
|
|
113
|
+
Examples: "Which DEXs have the highest trading volume this month?", "When is Arbitrum's next major token unlock?", "How does Morpho generate yield for users?", "Which cryptocurrency has gained the most Twitter followers in 2023?", "What did Vitalik Buterin say about rollups in his recent blog posts?"
|
|
114
|
+
`,
|
|
115
|
+
schema: schemas_1.MessariResearchQuestionSchema,
|
|
116
|
+
}),
|
|
117
|
+
__metadata("design:type", Function),
|
|
118
|
+
__metadata("design:paramtypes", [void 0]),
|
|
119
|
+
__metadata("design:returntype", Promise)
|
|
120
|
+
], MessariActionProvider.prototype, "researchQuestion", null);
|
|
121
|
+
/**
|
|
122
|
+
* Factory function to create a new MessariActionProvider instance.
|
|
123
|
+
*
|
|
124
|
+
* @param config - The configuration options for the MessariActionProvider
|
|
125
|
+
* @returns A new instance of MessariActionProvider
|
|
126
|
+
*/
|
|
127
|
+
const messariActionProvider = (config = {}) => new MessariActionProvider(config);
|
|
128
|
+
exports.messariActionProvider = messariActionProvider;
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
export {};
|