@coinbase/agentkit 0.10.0 → 0.10.2
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 +195 -23
- package/dist/action-providers/across/acrossActionProvider.js +3 -3
- package/dist/action-providers/across/schemas.d.ts +1 -1
- package/dist/action-providers/baseAccount/baseAccountActionProvider.d.ts +46 -0
- package/dist/action-providers/baseAccount/baseAccountActionProvider.js +404 -0
- package/dist/action-providers/baseAccount/baseAccountActionProvider.test.d.ts +1 -0
- package/dist/action-providers/baseAccount/baseAccountActionProvider.test.js +325 -0
- package/dist/action-providers/baseAccount/index.d.ts +2 -0
- package/dist/action-providers/baseAccount/index.js +18 -0
- package/dist/action-providers/baseAccount/schemas.d.ts +43 -0
- package/dist/action-providers/baseAccount/schemas.js +62 -0
- package/dist/action-providers/baseAccount/types.d.ts +17 -0
- package/dist/action-providers/baseAccount/types.js +2 -0
- package/dist/action-providers/baseAccount/utils.d.ts +14 -0
- package/dist/action-providers/baseAccount/utils.js +57 -0
- package/dist/action-providers/cdp/cdpApiActionProvider.d.ts +3 -12
- package/dist/action-providers/cdp/cdpApiActionProvider.js +2 -81
- package/dist/action-providers/cdp/cdpApiActionProvider.test.js +0 -125
- package/dist/action-providers/cdp/cdpEvmWalletActionProvider.d.ts +18 -3
- package/dist/action-providers/cdp/cdpEvmWalletActionProvider.js +224 -23
- package/dist/action-providers/cdp/cdpEvmWalletActionProvider.test.js +280 -0
- package/dist/action-providers/cdp/cdpSmartWalletActionProvider.d.ts +17 -2
- package/dist/action-providers/cdp/cdpSmartWalletActionProvider.js +224 -18
- package/dist/action-providers/cdp/cdpSmartWalletActionProvider.test.js +267 -1
- package/dist/action-providers/cdp/schemas.d.ts +12 -12
- package/dist/action-providers/cdp/schemas.js +17 -5
- package/dist/action-providers/cdp/swapUtils.d.ts +23 -0
- package/dist/action-providers/cdp/swapUtils.js +106 -0
- package/dist/action-providers/clanker/clankerActionProvider.d.ts +43 -0
- package/dist/action-providers/clanker/clankerActionProvider.js +130 -0
- package/dist/action-providers/clanker/clankerActionProvider.test.d.ts +4 -0
- package/dist/action-providers/clanker/clankerActionProvider.test.js +119 -0
- package/dist/action-providers/clanker/index.d.ts +2 -0
- package/dist/action-providers/clanker/index.js +18 -0
- package/dist/action-providers/clanker/schemas.d.ts +56 -0
- package/dist/action-providers/clanker/schemas.js +47 -0
- package/dist/action-providers/clanker/utils.d.ts +9 -0
- package/dist/action-providers/clanker/utils.js +23 -0
- package/dist/action-providers/compound/constants.d.ts +1 -1
- package/dist/action-providers/compound/constants.js +2 -2
- package/dist/action-providers/erc20/constants.d.ts +35 -135
- package/dist/action-providers/erc20/constants.js +37 -189
- package/dist/action-providers/erc20/erc20ActionProvider.d.ts +9 -1
- package/dist/action-providers/erc20/erc20ActionProvider.js +87 -35
- package/dist/action-providers/erc20/erc20ActionProvider.test.js +115 -52
- package/dist/action-providers/erc20/schemas.d.ts +25 -12
- package/dist/action-providers/erc20/schemas.js +34 -6
- package/dist/action-providers/erc20/utils.d.ts +19 -0
- package/dist/action-providers/erc20/utils.js +54 -0
- package/dist/action-providers/flaunch/client_utils.d.ts +25 -0
- package/dist/action-providers/flaunch/client_utils.js +62 -0
- package/dist/action-providers/flaunch/constants.d.ts +42 -21
- package/dist/action-providers/flaunch/constants.js +113 -38
- package/dist/action-providers/flaunch/flaunchActionProvider.d.ts +4 -43
- package/dist/action-providers/flaunch/flaunchActionProvider.js +133 -209
- package/dist/action-providers/flaunch/flaunchActionProvider.test.js +113 -13
- package/dist/action-providers/flaunch/metadata_utils.d.ts +12 -0
- package/dist/action-providers/flaunch/metadata_utils.js +216 -0
- package/dist/action-providers/flaunch/schemas.d.ts +39 -3
- package/dist/action-providers/flaunch/schemas.js +62 -10
- package/dist/action-providers/flaunch/{utils.d.ts → swap_utils.d.ts} +17 -19
- package/dist/action-providers/flaunch/{utils.js → swap_utils.js} +137 -172
- package/dist/action-providers/index.d.ts +4 -0
- package/dist/action-providers/index.js +4 -0
- package/dist/action-providers/jupiter/schemas.d.ts +1 -1
- package/dist/action-providers/moonwell/schemas.d.ts +2 -2
- package/dist/action-providers/morpho/morphoActionProvider.js +5 -5
- package/dist/action-providers/morpho/schemas.d.ts +2 -2
- package/dist/action-providers/pyth/pythActionProvider.d.ts +2 -2
- package/dist/action-providers/pyth/pythActionProvider.js +83 -26
- package/dist/action-providers/pyth/pythActionProvider.test.js +179 -23
- package/dist/action-providers/pyth/schemas.d.ts +6 -0
- package/dist/action-providers/pyth/schemas.js +9 -1
- package/dist/action-providers/superfluid/constants.d.ts +814 -0
- package/dist/action-providers/superfluid/constants.js +2826 -0
- package/dist/action-providers/superfluid/graphQueries/endpoints.d.ts +2 -0
- package/dist/action-providers/superfluid/graphQueries/endpoints.js +5 -0
- package/dist/action-providers/superfluid/graphQueries/queries.d.ts +1 -0
- package/dist/action-providers/superfluid/graphQueries/queries.js +35 -0
- package/dist/action-providers/superfluid/graphQueries/superfluidGraphQueries.d.ts +8 -0
- package/dist/action-providers/superfluid/graphQueries/superfluidGraphQueries.js +24 -0
- package/dist/action-providers/superfluid/graphQueries/types.d.ts +27 -0
- package/dist/action-providers/superfluid/graphQueries/types.js +2 -0
- package/dist/action-providers/superfluid/index.d.ts +7 -0
- package/dist/action-providers/superfluid/index.js +23 -0
- package/dist/action-providers/superfluid/schemas.d.ts +86 -0
- package/dist/action-providers/superfluid/schemas.js +103 -0
- package/dist/action-providers/superfluid/superfluidActionProvider.d.ts +20 -0
- package/dist/action-providers/superfluid/superfluidActionProvider.js +36 -0
- package/dist/action-providers/superfluid/superfluidPoolActionProvider.d.ts +46 -0
- package/dist/action-providers/superfluid/superfluidPoolActionProvider.js +143 -0
- package/dist/action-providers/superfluid/superfluidPoolActionProvider.test.d.ts +1 -0
- package/dist/action-providers/superfluid/superfluidPoolActionProvider.test.js +92 -0
- package/dist/action-providers/superfluid/superfluidQueryActionProvider.d.ts +27 -0
- package/dist/action-providers/superfluid/superfluidQueryActionProvider.js +71 -0
- package/dist/action-providers/superfluid/superfluidQueryActionProvider.test.d.ts +1 -0
- package/dist/action-providers/superfluid/superfluidQueryActionProvider.test.js +57 -0
- package/dist/action-providers/superfluid/superfluidStreamActionProvider.d.ts +56 -0
- package/dist/action-providers/superfluid/superfluidStreamActionProvider.js +191 -0
- package/dist/action-providers/superfluid/superfluidStreamActionProvider.test.d.ts +1 -0
- package/dist/action-providers/superfluid/superfluidStreamActionProvider.test.js +80 -0
- package/dist/action-providers/superfluid/superfluidSuperTokenCreatorActionProvider.d.ts +30 -0
- package/dist/action-providers/superfluid/superfluidSuperTokenCreatorActionProvider.js +109 -0
- package/dist/action-providers/superfluid/superfluidSuperTokenCreatorActionProvider.test.d.ts +1 -0
- package/dist/action-providers/superfluid/superfluidSuperTokenCreatorActionProvider.test.js +75 -0
- package/dist/action-providers/superfluid/superfluidWrapperActionProvider.d.ts +32 -0
- package/dist/action-providers/superfluid/superfluidWrapperActionProvider.js +101 -0
- package/dist/action-providers/superfluid/superfluidWrapperActionProvider.test.d.ts +1 -0
- package/dist/action-providers/superfluid/superfluidWrapperActionProvider.test.js +85 -0
- package/dist/action-providers/superfluid/utils/parseLogs.d.ts +19 -0
- package/dist/action-providers/superfluid/utils/parseLogs.js +81 -0
- package/dist/action-providers/truemarkets/truemarketsActionProvider.d.ts +4 -16
- package/dist/action-providers/truemarkets/truemarketsActionProvider.js +20 -41
- package/dist/action-providers/truemarkets/truemarketsActionProvider.test.js +11 -33
- package/dist/action-providers/wallet/walletActionProvider.js +24 -10
- package/dist/action-providers/wallet/walletActionProvider.test.js +6 -2
- package/dist/action-providers/x402/schemas.d.ts +7 -0
- package/dist/action-providers/x402/schemas.js +11 -1
- package/dist/action-providers/x402/utils.d.ts +55 -0
- package/dist/action-providers/x402/utils.js +160 -0
- package/dist/action-providers/x402/x402ActionProvider.d.ts +9 -9
- package/dist/action-providers/x402/x402ActionProvider.js +158 -39
- package/dist/action-providers/x402/x402ActionProvider.test.js +116 -10
- package/dist/action-providers/zeroX/index.d.ts +1 -0
- package/dist/action-providers/zeroX/index.js +17 -0
- package/dist/action-providers/zeroX/schemas.d.ts +51 -0
- package/dist/action-providers/zeroX/schemas.js +82 -0
- package/dist/action-providers/zeroX/utils.d.ts +23 -0
- package/dist/action-providers/zeroX/utils.js +106 -0
- package/dist/action-providers/zeroX/zeroXActionProvider.d.ts +57 -0
- package/dist/action-providers/zeroX/zeroXActionProvider.js +407 -0
- package/dist/action-providers/zeroX/zeroXActionProvider.test.d.ts +1 -0
- package/dist/action-providers/zeroX/zeroXActionProvider.test.js +445 -0
- package/dist/utils.d.ts +10 -0
- package/dist/utils.js +43 -13
- package/dist/wallet-providers/cdpEvmWalletProvider.d.ts +27 -2
- package/dist/wallet-providers/cdpEvmWalletProvider.js +54 -36
- package/dist/wallet-providers/cdpEvmWalletProvider.test.js +7 -0
- package/dist/wallet-providers/cdpShared.d.ts +5 -0
- package/dist/wallet-providers/cdpSmartWalletProvider.d.ts +29 -3
- package/dist/wallet-providers/cdpSmartWalletProvider.js +66 -25
- package/dist/wallet-providers/cdpSmartWalletProvider.test.js +6 -10
- package/dist/wallet-providers/cdpSolanaWalletProvider.d.ts +1 -1
- package/dist/wallet-providers/cdpSolanaWalletProvider.js +7 -7
- package/dist/wallet-providers/cdpSolanaWalletProvider.test.js +15 -12
- package/dist/wallet-providers/evmWalletProvider.d.ts +13 -2
- package/dist/wallet-providers/evmWalletProvider.js +4 -0
- package/dist/wallet-providers/legacyCdpSmartWalletProvider.d.ts +18 -2
- package/dist/wallet-providers/legacyCdpSmartWalletProvider.js +23 -2
- package/dist/wallet-providers/legacyCdpWalletProvider.d.ts +19 -2
- package/dist/wallet-providers/legacyCdpWalletProvider.js +27 -2
- package/dist/wallet-providers/legacyCdpWalletProvider.test.js +6 -0
- package/dist/wallet-providers/privyEvmDelegatedEmbeddedWalletProvider.d.ts +17 -2
- package/dist/wallet-providers/privyEvmDelegatedEmbeddedWalletProvider.js +39 -3
- package/dist/wallet-providers/privyEvmDelegatedEmbeddedWalletProvider.test.js +1 -1
- package/dist/wallet-providers/privyEvmWalletProvider.d.ts +2 -0
- package/dist/wallet-providers/privyEvmWalletProvider.js +2 -1
- package/dist/wallet-providers/privyEvmWalletProvider.test.js +12 -1
- package/dist/wallet-providers/solanaKeypairWalletProvider.d.ts +1 -1
- package/dist/wallet-providers/solanaKeypairWalletProvider.js +3 -4
- package/dist/wallet-providers/solanaKeypairWalletProvider.test.js +4 -2
- package/dist/wallet-providers/viemWalletProvider.d.ts +20 -3
- package/dist/wallet-providers/viemWalletProvider.js +33 -4
- package/dist/wallet-providers/viemWalletProvider.test.js +27 -6
- package/dist/wallet-providers/walletProvider.d.ts +1 -1
- package/dist/wallet-providers/zeroDevWalletProvider.d.ts +17 -2
- package/dist/wallet-providers/zeroDevWalletProvider.js +26 -5
- package/dist/wallet-providers/zeroDevWalletProvider.test.js +12 -2
- package/package.json +8 -4
|
@@ -8,18 +8,6 @@ var __decorate = (this && this.__decorate) || function (decorators, target, key,
|
|
|
8
8
|
var __metadata = (this && this.__metadata) || function (k, v) {
|
|
9
9
|
if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
|
|
10
10
|
};
|
|
11
|
-
var __classPrivateFieldSet = (this && this.__classPrivateFieldSet) || function (receiver, state, value, kind, f) {
|
|
12
|
-
if (kind === "m") throw new TypeError("Private method is not writable");
|
|
13
|
-
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a setter");
|
|
14
|
-
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot write private member to an object whose class did not declare it");
|
|
15
|
-
return (kind === "a" ? f.call(receiver, value) : f ? f.value = value : state.set(receiver, value)), value;
|
|
16
|
-
};
|
|
17
|
-
var __classPrivateFieldGet = (this && this.__classPrivateFieldGet) || function (receiver, state, kind, f) {
|
|
18
|
-
if (kind === "a" && !f) throw new TypeError("Private accessor was defined without a getter");
|
|
19
|
-
if (typeof state === "function" ? receiver !== state || !f : !state.has(receiver)) throw new TypeError("Cannot read private member from an object whose class did not declare it");
|
|
20
|
-
return kind === "m" ? f : kind === "a" ? f.call(receiver) : f ? f.value : state.get(receiver);
|
|
21
|
-
};
|
|
22
|
-
var _TrueMarketsActionProvider_publicClient;
|
|
23
11
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
24
12
|
exports.truemarketsActionProvider = exports.TrueMarketsActionProvider = void 0;
|
|
25
13
|
const zod_1 = require("zod");
|
|
@@ -27,22 +15,18 @@ const actionProvider_1 = require("../actionProvider");
|
|
|
27
15
|
const actionDecorator_1 = require("../actionDecorator");
|
|
28
16
|
const schemas_1 = require("./schemas");
|
|
29
17
|
const constants_1 = require("./constants");
|
|
30
|
-
const constants_2 = require("../erc20/constants");
|
|
31
|
-
const wallet_providers_1 = require("../../wallet-providers");
|
|
32
18
|
const viem_1 = require("viem");
|
|
33
|
-
const
|
|
19
|
+
const wallet_providers_1 = require("../../wallet-providers");
|
|
20
|
+
const viem_2 = require("viem");
|
|
34
21
|
/**
|
|
35
|
-
*
|
|
22
|
+
* Action provider for TrueMarkets interactions.
|
|
36
23
|
*/
|
|
37
24
|
class TrueMarketsActionProvider extends actionProvider_1.ActionProvider {
|
|
38
25
|
/**
|
|
39
|
-
*
|
|
40
|
-
*
|
|
41
|
-
* @param config - The configuration options for the TrueMarketsActionProvider.
|
|
26
|
+
* Creates a new TrueMarkets action provider.
|
|
42
27
|
*/
|
|
43
|
-
constructor(
|
|
28
|
+
constructor() {
|
|
44
29
|
super("truemarkets", []);
|
|
45
|
-
_TrueMarketsActionProvider_publicClient.set(this, void 0);
|
|
46
30
|
/**
|
|
47
31
|
* Checks if the TrueMarkets action provider supports the given network.
|
|
48
32
|
* Currently only supports Base mainnet.
|
|
@@ -51,10 +35,6 @@ class TrueMarketsActionProvider extends actionProvider_1.ActionProvider {
|
|
|
51
35
|
* @returns True if the TrueMarkets action provider supports the network, false otherwise.
|
|
52
36
|
*/
|
|
53
37
|
this.supportsNetwork = (network) => network.networkId === "base-mainnet";
|
|
54
|
-
__classPrivateFieldSet(this, _TrueMarketsActionProvider_publicClient, (0, viem_1.createPublicClient)({
|
|
55
|
-
chain: chains_1.base,
|
|
56
|
-
transport: config?.RPC_URL ? (0, viem_1.http)(config.RPC_URL) : (0, viem_1.http)(),
|
|
57
|
-
}), "f");
|
|
58
38
|
}
|
|
59
39
|
/**
|
|
60
40
|
* Gets active markets from the TruthMarketManager contract.
|
|
@@ -105,7 +85,7 @@ class TrueMarketsActionProvider extends actionProvider_1.ActionProvider {
|
|
|
105
85
|
functionName: "getActiveMarketAddress",
|
|
106
86
|
args: [BigInt(index)],
|
|
107
87
|
}));
|
|
108
|
-
const marketAddresses = await
|
|
88
|
+
const marketAddresses = await walletProvider.getPublicClient().multicall({
|
|
109
89
|
contracts: addressCalls,
|
|
110
90
|
});
|
|
111
91
|
// Filter out errors and extract results
|
|
@@ -124,7 +104,7 @@ class TrueMarketsActionProvider extends actionProvider_1.ActionProvider {
|
|
|
124
104
|
abi: constants_1.TruthMarketABI,
|
|
125
105
|
functionName: "marketQuestion",
|
|
126
106
|
}));
|
|
127
|
-
const marketQuestionsResult = await
|
|
107
|
+
const marketQuestionsResult = await walletProvider.getPublicClient().multicall({
|
|
128
108
|
contracts: questionCalls,
|
|
129
109
|
});
|
|
130
110
|
// Create market objects mapping indices to addresses and questions
|
|
@@ -175,7 +155,7 @@ class TrueMarketsActionProvider extends actionProvider_1.ActionProvider {
|
|
|
175
155
|
});
|
|
176
156
|
}
|
|
177
157
|
try {
|
|
178
|
-
marketAddress = (await
|
|
158
|
+
marketAddress = (await walletProvider.getPublicClient().readContract({
|
|
179
159
|
address: constants_1.TruthMarketManager_ADDRESS,
|
|
180
160
|
abi: constants_1.TruthMarketManagerABI,
|
|
181
161
|
functionName: "getActiveMarketAddress",
|
|
@@ -227,7 +207,7 @@ class TrueMarketsActionProvider extends actionProvider_1.ActionProvider {
|
|
|
227
207
|
functionName: "winningPosition",
|
|
228
208
|
},
|
|
229
209
|
];
|
|
230
|
-
const basicInfoResults = await
|
|
210
|
+
const basicInfoResults = await walletProvider.getPublicClient().multicall({
|
|
231
211
|
contracts: basicInfoCalls,
|
|
232
212
|
});
|
|
233
213
|
// Extract results, handling potential errors
|
|
@@ -279,7 +259,7 @@ class TrueMarketsActionProvider extends actionProvider_1.ActionProvider {
|
|
|
279
259
|
functionName: "slot0",
|
|
280
260
|
},
|
|
281
261
|
];
|
|
282
|
-
const poolInfoResults = await
|
|
262
|
+
const poolInfoResults = await walletProvider.getPublicClient().multicall({
|
|
283
263
|
contracts: poolInfoCalls,
|
|
284
264
|
});
|
|
285
265
|
if (poolInfoResults.some(result => result.status === "failure")) {
|
|
@@ -308,30 +288,30 @@ class TrueMarketsActionProvider extends actionProvider_1.ActionProvider {
|
|
|
308
288
|
const balanceCalls = [
|
|
309
289
|
{
|
|
310
290
|
address: payToken,
|
|
311
|
-
abi:
|
|
291
|
+
abi: viem_1.erc20Abi,
|
|
312
292
|
functionName: "balanceOf",
|
|
313
293
|
args: [yesPool],
|
|
314
294
|
},
|
|
315
295
|
{
|
|
316
296
|
address: yesToken,
|
|
317
|
-
abi:
|
|
297
|
+
abi: viem_1.erc20Abi,
|
|
318
298
|
functionName: "balanceOf",
|
|
319
299
|
args: [yesPool],
|
|
320
300
|
},
|
|
321
301
|
{
|
|
322
302
|
address: payToken,
|
|
323
|
-
abi:
|
|
303
|
+
abi: viem_1.erc20Abi,
|
|
324
304
|
functionName: "balanceOf",
|
|
325
305
|
args: [noPool],
|
|
326
306
|
},
|
|
327
307
|
{
|
|
328
308
|
address: noToken,
|
|
329
|
-
abi:
|
|
309
|
+
abi: viem_1.erc20Abi,
|
|
330
310
|
functionName: "balanceOf",
|
|
331
311
|
args: [noPool],
|
|
332
312
|
},
|
|
333
313
|
];
|
|
334
|
-
const balanceResults = await
|
|
314
|
+
const balanceResults = await walletProvider.getPublicClient().multicall({
|
|
335
315
|
contracts: balanceCalls,
|
|
336
316
|
});
|
|
337
317
|
if (balanceResults.some(result => result.status === "failure")) {
|
|
@@ -366,10 +346,10 @@ class TrueMarketsActionProvider extends actionProvider_1.ActionProvider {
|
|
|
366
346
|
const yesPrice = calculatePrice(yesSqrtPriceX96, isYesToken0, payDecimals, yesNoTokenDecimals_);
|
|
367
347
|
const noPrice = calculatePrice(noSqrtPriceX96, isNoToken0, payDecimals, yesNoTokenDecimals_);
|
|
368
348
|
// Calculate TVL using token balances
|
|
369
|
-
const yesPoolStableValue = Number((0,
|
|
370
|
-
const yesPoolTokenValue = Number((0,
|
|
371
|
-
const noPoolStableValue = Number((0,
|
|
372
|
-
const noPoolTokenValue = Number((0,
|
|
349
|
+
const yesPoolStableValue = Number((0, viem_2.formatUnits)(yesPoolStableBalance || 0n, payDecimals));
|
|
350
|
+
const yesPoolTokenValue = Number((0, viem_2.formatUnits)(yesPoolTokenBalance || 0n, yesNoTokenDecimals_)) * yesPrice;
|
|
351
|
+
const noPoolStableValue = Number((0, viem_2.formatUnits)(noPoolStableBalance || 0n, payDecimals));
|
|
352
|
+
const noPoolTokenValue = Number((0, viem_2.formatUnits)(noPoolTokenBalance || 0n, yesNoTokenDecimals_)) * noPrice;
|
|
373
353
|
const yesTVL = yesPoolStableValue + yesPoolTokenValue;
|
|
374
354
|
const noTVL = noPoolStableValue + noPoolTokenValue;
|
|
375
355
|
const totalTVL = yesTVL + noTVL;
|
|
@@ -430,7 +410,6 @@ class TrueMarketsActionProvider extends actionProvider_1.ActionProvider {
|
|
|
430
410
|
}
|
|
431
411
|
}
|
|
432
412
|
exports.TrueMarketsActionProvider = TrueMarketsActionProvider;
|
|
433
|
-
_TrueMarketsActionProvider_publicClient = new WeakMap();
|
|
434
413
|
__decorate([
|
|
435
414
|
(0, actionDecorator_1.CreateAction)({
|
|
436
415
|
name: "get_prediction_markets",
|
|
@@ -465,5 +444,5 @@ __decorate([
|
|
|
465
444
|
__metadata("design:paramtypes", [wallet_providers_1.EvmWalletProvider, void 0]),
|
|
466
445
|
__metadata("design:returntype", Promise)
|
|
467
446
|
], TrueMarketsActionProvider.prototype, "getPredictionMarketDetails", null);
|
|
468
|
-
const truemarketsActionProvider = (
|
|
447
|
+
const truemarketsActionProvider = () => new TrueMarketsActionProvider();
|
|
469
448
|
exports.truemarketsActionProvider = truemarketsActionProvider;
|
|
@@ -2,29 +2,10 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const truemarketsActionProvider_1 = require("./truemarketsActionProvider");
|
|
4
4
|
const constants_1 = require("./constants");
|
|
5
|
-
const viem_1 = require("viem");
|
|
6
|
-
// Mock viem's createPublicClient
|
|
7
|
-
jest.mock("viem", () => {
|
|
8
|
-
const originalModule = jest.requireActual("viem");
|
|
9
|
-
return {
|
|
10
|
-
...originalModule,
|
|
11
|
-
createPublicClient: jest.fn().mockImplementation(() => ({
|
|
12
|
-
// Mock public client methods as needed
|
|
13
|
-
multicall: jest.fn().mockImplementation(({ contracts }) => {
|
|
14
|
-
// Create mock responses with success status
|
|
15
|
-
return contracts.map(() => ({
|
|
16
|
-
status: "success",
|
|
17
|
-
result: "mock result",
|
|
18
|
-
}));
|
|
19
|
-
}),
|
|
20
|
-
readContract: jest.fn(),
|
|
21
|
-
})),
|
|
22
|
-
http: jest.fn().mockImplementation(url => ({ url })),
|
|
23
|
-
};
|
|
24
|
-
});
|
|
25
5
|
describe("TrueMarketsActionProvider", () => {
|
|
26
6
|
let provider;
|
|
27
7
|
let mockWallet;
|
|
8
|
+
let publicClientMock;
|
|
28
9
|
// Mock addresses and data for tests
|
|
29
10
|
const MOCK_MARKET_ADDRESS = "0x1234567890123456789012345678901234567890";
|
|
30
11
|
const MOCK_YES_POOL_ADDRESS = "0x2345678901234567890123456789012345678901";
|
|
@@ -36,26 +17,22 @@ describe("TrueMarketsActionProvider", () => {
|
|
|
36
17
|
const MOCK_MARKET_SOURCE = "Test source";
|
|
37
18
|
const MOCK_STATUS_NUM = 0n; // Created status
|
|
38
19
|
const MOCK_END_OF_TRADING = 1717171717n; // Unix timestamp
|
|
39
|
-
describe("constructor", () => {
|
|
40
|
-
it("should use the provided RPC_URL for the public client", () => {
|
|
41
|
-
const customRpcUrl = "https://custom-rpc.example.com";
|
|
42
|
-
(0, truemarketsActionProvider_1.truemarketsActionProvider)({ RPC_URL: customRpcUrl });
|
|
43
|
-
// Verify createPublicClient was called with the correct URL
|
|
44
|
-
expect(viem_1.createPublicClient).toHaveBeenCalledWith(expect.objectContaining({
|
|
45
|
-
chain: expect.anything(),
|
|
46
|
-
transport: expect.objectContaining({ url: customRpcUrl }),
|
|
47
|
-
}));
|
|
48
|
-
});
|
|
49
|
-
});
|
|
50
20
|
beforeEach(() => {
|
|
51
21
|
jest.clearAllMocks();
|
|
52
22
|
provider = (0, truemarketsActionProvider_1.truemarketsActionProvider)();
|
|
23
|
+
publicClientMock = {
|
|
24
|
+
multicall: jest
|
|
25
|
+
.fn()
|
|
26
|
+
.mockImplementation(({ contracts }) => contracts.map(() => ({ status: "success", result: "mock result" }))),
|
|
27
|
+
readContract: jest.fn(),
|
|
28
|
+
};
|
|
53
29
|
mockWallet = {
|
|
54
30
|
readContract: jest.fn(),
|
|
55
31
|
getName: jest.fn().mockReturnValue("evm_wallet_provider"),
|
|
56
32
|
getNetwork: jest.fn().mockReturnValue({
|
|
57
33
|
networkId: "base-mainnet",
|
|
58
34
|
}),
|
|
35
|
+
getPublicClient: jest.fn().mockReturnValue(publicClientMock),
|
|
59
36
|
};
|
|
60
37
|
});
|
|
61
38
|
afterEach(() => {
|
|
@@ -134,8 +111,9 @@ describe("TrueMarketsActionProvider", () => {
|
|
|
134
111
|
describe("getPredictionMarketDetails", () => {
|
|
135
112
|
let mockPublicClient;
|
|
136
113
|
beforeEach(() => {
|
|
137
|
-
//
|
|
138
|
-
mockPublicClient =
|
|
114
|
+
// Use the shared mocked public client
|
|
115
|
+
mockPublicClient = publicClientMock;
|
|
116
|
+
mockPublicClient.multicall.mockReset();
|
|
139
117
|
// Setup multicall mock responses
|
|
140
118
|
mockPublicClient.multicall
|
|
141
119
|
// Basic info calls
|
|
@@ -14,12 +14,25 @@ const zod_1 = require("zod");
|
|
|
14
14
|
const actionDecorator_1 = require("../actionDecorator");
|
|
15
15
|
const actionProvider_1 = require("../actionProvider");
|
|
16
16
|
const wallet_providers_1 = require("../../wallet-providers");
|
|
17
|
+
const viem_1 = require("viem");
|
|
17
18
|
const schemas_1 = require("./schemas");
|
|
18
19
|
const PROTOCOL_FAMILY_TO_TERMINOLOGY = {
|
|
19
|
-
evm: {
|
|
20
|
-
|
|
20
|
+
evm: {
|
|
21
|
+
unit: "WEI",
|
|
22
|
+
displayUnit: "ETH",
|
|
23
|
+
decimals: 18,
|
|
24
|
+
type: "Transaction hash",
|
|
25
|
+
verb: "transaction",
|
|
26
|
+
},
|
|
27
|
+
svm: { unit: "LAMPORTS", displayUnit: "SOL", decimals: 9, type: "Signature", verb: "transfer" },
|
|
28
|
+
};
|
|
29
|
+
const DEFAULT_TERMINOLOGY = {
|
|
30
|
+
unit: "",
|
|
31
|
+
displayUnit: "",
|
|
32
|
+
decimals: 0,
|
|
33
|
+
type: "Hash",
|
|
34
|
+
verb: "transfer",
|
|
21
35
|
};
|
|
22
|
-
const DEFAULT_TERMINOLOGY = { unit: "", displayUnit: "", type: "Hash", verb: "transfer" };
|
|
23
36
|
/**
|
|
24
37
|
* WalletActionProvider provides actions for getting basic wallet information.
|
|
25
38
|
*/
|
|
@@ -56,11 +69,15 @@ class WalletActionProvider extends actionProvider_1.ActionProvider {
|
|
|
56
69
|
"Wallet Details:",
|
|
57
70
|
`- Provider: ${name}`,
|
|
58
71
|
`- Address: ${address}`,
|
|
72
|
+
...(walletProvider instanceof wallet_providers_1.CdpSmartWalletProvider
|
|
73
|
+
? [`- Owner Address: ${walletProvider.ownerAccount.address}`]
|
|
74
|
+
: []),
|
|
59
75
|
"- Network:",
|
|
60
76
|
` * Protocol Family: ${network.protocolFamily}`,
|
|
61
77
|
` * Network ID: ${network.networkId || "N/A"}`,
|
|
62
78
|
` * Chain ID: ${network.chainId || "N/A"}`,
|
|
63
79
|
`- Native Balance: ${balance.toString()} ${terminology.unit}`,
|
|
80
|
+
`- Native Balance: ${(0, viem_1.formatUnits)(balance, terminology.decimals)} ${terminology.displayUnit}`,
|
|
64
81
|
].join("\n");
|
|
65
82
|
}
|
|
66
83
|
catch (error) {
|
|
@@ -81,7 +98,8 @@ class WalletActionProvider extends actionProvider_1.ActionProvider {
|
|
|
81
98
|
if (protocolFamily === "evm" && !args.to.startsWith("0x")) {
|
|
82
99
|
args.to = `0x${args.to}`;
|
|
83
100
|
}
|
|
84
|
-
const
|
|
101
|
+
const amountInAtomicUnits = (0, viem_1.parseUnits)(args.value, terminology.decimals);
|
|
102
|
+
const result = await walletProvider.nativeTransfer(args.to, amountInAtomicUnits.toString());
|
|
85
103
|
return [
|
|
86
104
|
`Transferred ${args.value} ${terminology.displayUnit} to ${args.to}`,
|
|
87
105
|
`${terminology.type}: ${result}`,
|
|
@@ -115,15 +133,11 @@ __decorate([
|
|
|
115
133
|
(0, actionDecorator_1.CreateAction)({
|
|
116
134
|
name: "native_transfer",
|
|
117
135
|
description: `
|
|
118
|
-
This tool will transfer native tokens from the wallet to another onchain address.
|
|
136
|
+
This tool will transfer (send) native tokens from the wallet to another onchain address.
|
|
119
137
|
|
|
120
138
|
It takes the following inputs:
|
|
121
|
-
- amount: The amount to transfer in whole units (e.g.
|
|
139
|
+
- amount: The amount to transfer in whole units (e.g. 4.2 ETH, 0.1 SOL)
|
|
122
140
|
- destination: The address to receive the funds
|
|
123
|
-
|
|
124
|
-
Important notes:
|
|
125
|
-
- Ensure sufficient balance of the input asset before transferring
|
|
126
|
-
- Ensure there is sufficient native token balance for gas fees
|
|
127
141
|
`,
|
|
128
142
|
schema: schemas_1.NativeTransferSchema,
|
|
129
143
|
}),
|
|
@@ -2,6 +2,7 @@
|
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
const walletActionProvider_1 = require("./walletActionProvider");
|
|
4
4
|
const schemas_1 = require("./schemas");
|
|
5
|
+
const viem_1 = require("viem");
|
|
5
6
|
describe("Wallet Action Provider", () => {
|
|
6
7
|
const MOCK_ADDRESS = "0xe6b2af36b3bb8d47206a129ff11d5a2de2a63c83";
|
|
7
8
|
const MOCK_ETH_BALANCE = 1000000000000000000n;
|
|
@@ -47,6 +48,7 @@ describe("Wallet Action Provider", () => {
|
|
|
47
48
|
` * Network ID: ${MOCK_EVM_NETWORK.networkId}`,
|
|
48
49
|
` * Chain ID: ${MOCK_EVM_NETWORK.chainId}`,
|
|
49
50
|
`- Native Balance: ${MOCK_ETH_BALANCE.toString()} WEI`,
|
|
51
|
+
`- Native Balance: ${(0, viem_1.formatUnits)(MOCK_ETH_BALANCE, 18)} ETH`,
|
|
50
52
|
].join("\n");
|
|
51
53
|
expect(response).toBe(expectedResponse);
|
|
52
54
|
});
|
|
@@ -63,6 +65,7 @@ describe("Wallet Action Provider", () => {
|
|
|
63
65
|
` * Network ID: ${MOCK_SOLANA_NETWORK.networkId}`,
|
|
64
66
|
` * Chain ID: N/A`,
|
|
65
67
|
`- Native Balance: ${MOCK_SOL_BALANCE.toString()} LAMPORTS`,
|
|
68
|
+
`- Native Balance: ${(0, viem_1.formatUnits)(MOCK_SOL_BALANCE, 9)} SOL`,
|
|
66
69
|
].join("\n");
|
|
67
70
|
expect(response).toBe(expectedResponse);
|
|
68
71
|
});
|
|
@@ -79,6 +82,7 @@ describe("Wallet Action Provider", () => {
|
|
|
79
82
|
` * Network ID: ${MOCK_UNKNOWN_NETWORK.networkId}`,
|
|
80
83
|
` * Chain ID: N/A`,
|
|
81
84
|
`- Native Balance: ${MOCK_ETH_BALANCE.toString()} `,
|
|
85
|
+
`- Native Balance: ${MOCK_ETH_BALANCE.toString()} `,
|
|
82
86
|
].join("\n");
|
|
83
87
|
expect(response).toBe(expectedResponse);
|
|
84
88
|
});
|
|
@@ -125,7 +129,7 @@ describe("Wallet Action Provider", () => {
|
|
|
125
129
|
value: MOCK_AMOUNT,
|
|
126
130
|
};
|
|
127
131
|
const response = await actionProvider.nativeTransfer(mockWallet, args);
|
|
128
|
-
expect(mockWallet.nativeTransfer).toHaveBeenCalledWith(MOCK_DESTINATION, MOCK_AMOUNT);
|
|
132
|
+
expect(mockWallet.nativeTransfer).toHaveBeenCalledWith(MOCK_DESTINATION, (0, viem_1.parseUnits)(MOCK_AMOUNT, 18).toString());
|
|
129
133
|
expect(response).toBe(`Transferred ${MOCK_AMOUNT} ETH to ${MOCK_DESTINATION}\nTransaction hash: ${MOCK_TRANSACTION_HASH}`);
|
|
130
134
|
});
|
|
131
135
|
it("should successfully transfer SOL", async () => {
|
|
@@ -136,7 +140,7 @@ describe("Wallet Action Provider", () => {
|
|
|
136
140
|
value: MOCK_AMOUNT,
|
|
137
141
|
};
|
|
138
142
|
const response = await actionProvider.nativeTransfer(mockWallet, args);
|
|
139
|
-
expect(mockWallet.nativeTransfer).toHaveBeenCalledWith(MOCK_DESTINATION, MOCK_AMOUNT);
|
|
143
|
+
expect(mockWallet.nativeTransfer).toHaveBeenCalledWith(MOCK_DESTINATION, (0, viem_1.parseUnits)(MOCK_AMOUNT, 9).toString());
|
|
140
144
|
expect(response).toBe(`Transferred ${MOCK_AMOUNT} SOL to ${MOCK_DESTINATION}\nSignature: ${MOCK_SIGNATURE}`);
|
|
141
145
|
});
|
|
142
146
|
it("should handle ETH transfer errors", async () => {
|
|
@@ -1,4 +1,11 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
|
+
export declare const ListX402ServicesSchema: z.ZodObject<{
|
|
3
|
+
maxUsdcPrice: z.ZodOptional<z.ZodNumber>;
|
|
4
|
+
}, "strip", z.ZodTypeAny, {
|
|
5
|
+
maxUsdcPrice?: number | undefined;
|
|
6
|
+
}, {
|
|
7
|
+
maxUsdcPrice?: number | undefined;
|
|
8
|
+
}>;
|
|
2
9
|
export declare const HttpRequestSchema: z.ZodObject<{
|
|
3
10
|
url: z.ZodString;
|
|
4
11
|
method: z.ZodDefault<z.ZodNullable<z.ZodEnum<["GET", "POST", "PUT", "DELETE", "PATCH"]>>>;
|
|
@@ -1,7 +1,17 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.DirectX402RequestSchema = exports.RetryWithX402Schema = exports.HttpRequestSchema = void 0;
|
|
3
|
+
exports.DirectX402RequestSchema = exports.RetryWithX402Schema = exports.HttpRequestSchema = exports.ListX402ServicesSchema = void 0;
|
|
4
4
|
const zod_1 = require("zod");
|
|
5
|
+
// Schema for listing x402 services
|
|
6
|
+
exports.ListX402ServicesSchema = zod_1.z
|
|
7
|
+
.object({
|
|
8
|
+
maxUsdcPrice: zod_1.z
|
|
9
|
+
.number()
|
|
10
|
+
.optional()
|
|
11
|
+
.describe("Optional maximum price in USDC whole units (e.g., 0.1 for 0.10 USDC). Only USDC payment options will be considered when this filter is applied."),
|
|
12
|
+
})
|
|
13
|
+
.strip()
|
|
14
|
+
.describe("Parameters for listing x402 services with optional filtering");
|
|
5
15
|
// Schema for initial HTTP request
|
|
6
16
|
exports.HttpRequestSchema = zod_1.z
|
|
7
17
|
.object({
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { Network } from "../../network";
|
|
2
|
+
import { AxiosError } from "axios";
|
|
3
|
+
import { EvmWalletProvider } from "../../wallet-providers";
|
|
4
|
+
/**
|
|
5
|
+
* Supported network types for x402 protocol
|
|
6
|
+
*/
|
|
7
|
+
export type X402Network = "base" | "base-sepolia" | "solana" | "solana-devnet";
|
|
8
|
+
/**
|
|
9
|
+
* Converts the internal network ID to the format expected by the x402 protocol.
|
|
10
|
+
*
|
|
11
|
+
* @param network - The network to convert
|
|
12
|
+
* @returns The network ID in x402 format
|
|
13
|
+
* @throws Error if the network is not supported
|
|
14
|
+
*/
|
|
15
|
+
export declare function getX402Network(network: Network): X402Network | string | undefined;
|
|
16
|
+
/**
|
|
17
|
+
* Helper method to handle HTTP errors consistently.
|
|
18
|
+
*
|
|
19
|
+
* @param error - The axios error to handle
|
|
20
|
+
* @param url - The URL that was being accessed when the error occurred
|
|
21
|
+
* @returns A JSON string containing formatted error details
|
|
22
|
+
*/
|
|
23
|
+
export declare function handleHttpError(error: AxiosError, url: string): string;
|
|
24
|
+
/**
|
|
25
|
+
* Formats a payment option into a human-readable string.
|
|
26
|
+
*
|
|
27
|
+
* @param option - The payment option to format
|
|
28
|
+
* @param option.asset - The asset address or identifier
|
|
29
|
+
* @param option.maxAmountRequired - The maximum amount required for the payment
|
|
30
|
+
* @param option.network - The network identifier
|
|
31
|
+
* @param walletProvider - The wallet provider for token details lookup
|
|
32
|
+
* @returns A formatted string like "0.1 USDC on base"
|
|
33
|
+
*/
|
|
34
|
+
export declare function formatPaymentOption(option: {
|
|
35
|
+
asset: string;
|
|
36
|
+
maxAmountRequired: string;
|
|
37
|
+
network: string;
|
|
38
|
+
}, walletProvider: EvmWalletProvider): Promise<string>;
|
|
39
|
+
/**
|
|
40
|
+
* Checks if an asset is USDC on any supported network.
|
|
41
|
+
*
|
|
42
|
+
* @param asset - The asset address or identifier
|
|
43
|
+
* @param walletProvider - The wallet provider for network context
|
|
44
|
+
* @returns True if the asset is USDC, false otherwise
|
|
45
|
+
*/
|
|
46
|
+
export declare function isUsdcAsset(asset: string, walletProvider: EvmWalletProvider): boolean;
|
|
47
|
+
/**
|
|
48
|
+
* Converts whole units to atomic units for a given asset.
|
|
49
|
+
*
|
|
50
|
+
* @param wholeUnits - The amount in whole units (e.g., 0.1 for 0.1 USDC)
|
|
51
|
+
* @param asset - The asset address or identifier
|
|
52
|
+
* @param walletProvider - The wallet provider for token details lookup
|
|
53
|
+
* @returns The amount in atomic units as a string, or null if conversion fails
|
|
54
|
+
*/
|
|
55
|
+
export declare function convertWholeUnitsToAtomic(wholeUnits: number, asset: string, walletProvider: EvmWalletProvider): Promise<string | null>;
|
|
@@ -0,0 +1,160 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.getX402Network = getX402Network;
|
|
4
|
+
exports.handleHttpError = handleHttpError;
|
|
5
|
+
exports.formatPaymentOption = formatPaymentOption;
|
|
6
|
+
exports.isUsdcAsset = isUsdcAsset;
|
|
7
|
+
exports.convertWholeUnitsToAtomic = convertWholeUnitsToAtomic;
|
|
8
|
+
const utils_1 = require("../erc20/utils");
|
|
9
|
+
const constants_1 = require("../erc20/constants");
|
|
10
|
+
const viem_1 = require("viem");
|
|
11
|
+
/**
|
|
12
|
+
* Converts the internal network ID to the format expected by the x402 protocol.
|
|
13
|
+
*
|
|
14
|
+
* @param network - The network to convert
|
|
15
|
+
* @returns The network ID in x402 format
|
|
16
|
+
* @throws Error if the network is not supported
|
|
17
|
+
*/
|
|
18
|
+
function getX402Network(network) {
|
|
19
|
+
switch (network.networkId) {
|
|
20
|
+
case "base-mainnet":
|
|
21
|
+
return "base";
|
|
22
|
+
case "base-sepolia":
|
|
23
|
+
return "base-sepolia";
|
|
24
|
+
case "solana-mainnet":
|
|
25
|
+
return "solana";
|
|
26
|
+
case "solana-devnet":
|
|
27
|
+
return "solana-devnet";
|
|
28
|
+
default:
|
|
29
|
+
return network.networkId;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Helper method to handle HTTP errors consistently.
|
|
34
|
+
*
|
|
35
|
+
* @param error - The axios error to handle
|
|
36
|
+
* @param url - The URL that was being accessed when the error occurred
|
|
37
|
+
* @returns A JSON string containing formatted error details
|
|
38
|
+
*/
|
|
39
|
+
function handleHttpError(error, url) {
|
|
40
|
+
if (error.response) {
|
|
41
|
+
return JSON.stringify({
|
|
42
|
+
error: true,
|
|
43
|
+
message: `HTTP ${error.response.status} error when accessing ${url}`,
|
|
44
|
+
details: error.response.data?.error || error.response.statusText,
|
|
45
|
+
suggestion: "Check if the URL is correct and the API is available.",
|
|
46
|
+
}, null, 2);
|
|
47
|
+
}
|
|
48
|
+
if (error.request) {
|
|
49
|
+
return JSON.stringify({
|
|
50
|
+
error: true,
|
|
51
|
+
message: `Network error when accessing ${url}`,
|
|
52
|
+
details: error.message,
|
|
53
|
+
suggestion: "Check your internet connection and verify the API endpoint is accessible.",
|
|
54
|
+
}, null, 2);
|
|
55
|
+
}
|
|
56
|
+
return JSON.stringify({
|
|
57
|
+
error: true,
|
|
58
|
+
message: `Error making request to ${url}`,
|
|
59
|
+
details: error.message,
|
|
60
|
+
suggestion: "Please check the request parameters and try again.",
|
|
61
|
+
}, null, 2);
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Formats a payment option into a human-readable string.
|
|
65
|
+
*
|
|
66
|
+
* @param option - The payment option to format
|
|
67
|
+
* @param option.asset - The asset address or identifier
|
|
68
|
+
* @param option.maxAmountRequired - The maximum amount required for the payment
|
|
69
|
+
* @param option.network - The network identifier
|
|
70
|
+
* @param walletProvider - The wallet provider for token details lookup
|
|
71
|
+
* @returns A formatted string like "0.1 USDC on base"
|
|
72
|
+
*/
|
|
73
|
+
async function formatPaymentOption(option, walletProvider) {
|
|
74
|
+
const { asset, maxAmountRequired, network } = option;
|
|
75
|
+
// Check if this is an EVM network and we can use ERC20 helpers
|
|
76
|
+
const walletNetwork = walletProvider.getNetwork();
|
|
77
|
+
const isEvmNetwork = walletNetwork.protocolFamily === "evm";
|
|
78
|
+
if (isEvmNetwork) {
|
|
79
|
+
const networkId = walletNetwork.networkId;
|
|
80
|
+
const tokenSymbols = constants_1.TOKEN_ADDRESSES_BY_SYMBOLS[networkId];
|
|
81
|
+
if (tokenSymbols) {
|
|
82
|
+
for (const [symbol, address] of Object.entries(tokenSymbols)) {
|
|
83
|
+
if (asset.toLowerCase() === address.toLowerCase()) {
|
|
84
|
+
const decimals = symbol === "USDC" || symbol === "EURC" ? 6 : 18;
|
|
85
|
+
const formattedAmount = (0, viem_1.formatUnits)(BigInt(maxAmountRequired), decimals);
|
|
86
|
+
return `${formattedAmount} ${symbol} on ${network} network`;
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
// Fall back to getTokenDetails for unknown tokens
|
|
91
|
+
try {
|
|
92
|
+
const tokenDetails = await (0, utils_1.getTokenDetails)(walletProvider, asset);
|
|
93
|
+
if (tokenDetails) {
|
|
94
|
+
const formattedAmount = (0, viem_1.formatUnits)(BigInt(maxAmountRequired), tokenDetails.decimals);
|
|
95
|
+
return `${formattedAmount} ${tokenDetails.name} on ${network} network`;
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
catch {
|
|
99
|
+
// If we can't get token details, fall back to raw format
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
// Fallback to original format for non-EVM networks or when token details can't be fetched
|
|
103
|
+
return `${asset} ${maxAmountRequired} on ${network} network`;
|
|
104
|
+
}
|
|
105
|
+
/**
|
|
106
|
+
* Checks if an asset is USDC on any supported network.
|
|
107
|
+
*
|
|
108
|
+
* @param asset - The asset address or identifier
|
|
109
|
+
* @param walletProvider - The wallet provider for network context
|
|
110
|
+
* @returns True if the asset is USDC, false otherwise
|
|
111
|
+
*/
|
|
112
|
+
function isUsdcAsset(asset, walletProvider) {
|
|
113
|
+
const walletNetwork = walletProvider.getNetwork();
|
|
114
|
+
const isEvmNetwork = walletNetwork.protocolFamily === "evm";
|
|
115
|
+
if (isEvmNetwork) {
|
|
116
|
+
const networkId = walletNetwork.networkId;
|
|
117
|
+
const tokenSymbols = constants_1.TOKEN_ADDRESSES_BY_SYMBOLS[networkId];
|
|
118
|
+
if (tokenSymbols && tokenSymbols.USDC) {
|
|
119
|
+
return asset.toLowerCase() === tokenSymbols.USDC.toLowerCase();
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
return false;
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Converts whole units to atomic units for a given asset.
|
|
126
|
+
*
|
|
127
|
+
* @param wholeUnits - The amount in whole units (e.g., 0.1 for 0.1 USDC)
|
|
128
|
+
* @param asset - The asset address or identifier
|
|
129
|
+
* @param walletProvider - The wallet provider for token details lookup
|
|
130
|
+
* @returns The amount in atomic units as a string, or null if conversion fails
|
|
131
|
+
*/
|
|
132
|
+
async function convertWholeUnitsToAtomic(wholeUnits, asset, walletProvider) {
|
|
133
|
+
// Check if this is an EVM network and we can use ERC20 helpers
|
|
134
|
+
const walletNetwork = walletProvider.getNetwork();
|
|
135
|
+
const isEvmNetwork = walletNetwork.protocolFamily === "evm";
|
|
136
|
+
if (isEvmNetwork) {
|
|
137
|
+
const networkId = walletNetwork.networkId;
|
|
138
|
+
const tokenSymbols = constants_1.TOKEN_ADDRESSES_BY_SYMBOLS[networkId];
|
|
139
|
+
if (tokenSymbols) {
|
|
140
|
+
for (const [symbol, address] of Object.entries(tokenSymbols)) {
|
|
141
|
+
if (asset.toLowerCase() === address.toLowerCase()) {
|
|
142
|
+
const decimals = symbol === "USDC" || symbol === "EURC" ? 6 : 18;
|
|
143
|
+
return (0, viem_1.parseUnits)(wholeUnits.toString(), decimals).toString();
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
// Fall back to getTokenDetails for unknown tokens
|
|
148
|
+
try {
|
|
149
|
+
const tokenDetails = await (0, utils_1.getTokenDetails)(walletProvider, asset);
|
|
150
|
+
if (tokenDetails) {
|
|
151
|
+
return (0, viem_1.parseUnits)(wholeUnits.toString(), tokenDetails.decimals).toString();
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
catch {
|
|
155
|
+
// If we can't get token details, fall back to assuming 18 decimals
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
// Fallback to 18 decimals for unknown tokens or non-EVM networks
|
|
159
|
+
return (0, viem_1.parseUnits)(wholeUnits.toString(), 18).toString();
|
|
160
|
+
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { z } from "zod";
|
|
2
2
|
import { ActionProvider } from "../actionProvider";
|
|
3
3
|
import { Network } from "../../network";
|
|
4
|
-
import { HttpRequestSchema, RetryWithX402Schema, DirectX402RequestSchema } from "./schemas";
|
|
4
|
+
import { HttpRequestSchema, RetryWithX402Schema, DirectX402RequestSchema, ListX402ServicesSchema } from "./schemas";
|
|
5
5
|
import { EvmWalletProvider } from "../../wallet-providers";
|
|
6
6
|
/**
|
|
7
7
|
* X402ActionProvider provides actions for making HTTP requests, with optional x402 payment handling.
|
|
@@ -12,6 +12,14 @@ export declare class X402ActionProvider extends ActionProvider<EvmWalletProvider
|
|
|
12
12
|
* Initializes the provider with x402 capabilities.
|
|
13
13
|
*/
|
|
14
14
|
constructor();
|
|
15
|
+
/**
|
|
16
|
+
* Discovers available x402 services with optional filtering.
|
|
17
|
+
*
|
|
18
|
+
* @param walletProvider - The wallet provider to use for network filtering
|
|
19
|
+
* @param args - Optional filters: maxUsdcPrice
|
|
20
|
+
* @returns JSON string with the list of services (filtered by network and description)
|
|
21
|
+
*/
|
|
22
|
+
discoverX402Services(walletProvider: EvmWalletProvider, args: z.infer<typeof ListX402ServicesSchema>): Promise<string>;
|
|
15
23
|
/**
|
|
16
24
|
* Makes a basic HTTP request to an API endpoint.
|
|
17
25
|
*
|
|
@@ -43,13 +51,5 @@ export declare class X402ActionProvider extends ActionProvider<EvmWalletProvider
|
|
|
43
51
|
* @returns True if the network is supported, false otherwise
|
|
44
52
|
*/
|
|
45
53
|
supportsNetwork: (network: Network) => boolean;
|
|
46
|
-
/**
|
|
47
|
-
* Helper method to handle HTTP errors consistently.
|
|
48
|
-
*
|
|
49
|
-
* @param error - The axios error to handle
|
|
50
|
-
* @param url - The URL that was being accessed when the error occurred
|
|
51
|
-
* @returns A JSON string containing formatted error details
|
|
52
|
-
*/
|
|
53
|
-
private handleHttpError;
|
|
54
54
|
}
|
|
55
55
|
export declare const x402ActionProvider: () => X402ActionProvider;
|