agentpay-mcp 1.2.0 → 4.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (79) hide show
  1. package/.env.example +37 -0
  2. package/LICENSE +21 -0
  3. package/README.md +732 -33
  4. package/claude_desktop_config.json +17 -0
  5. package/dist/index.d.ts +3 -0
  6. package/dist/index.d.ts.map +1 -0
  7. package/dist/index.js +248 -0
  8. package/dist/index.js.map +1 -0
  9. package/dist/session/manager.d.ts +90 -0
  10. package/dist/session/manager.d.ts.map +1 -0
  11. package/dist/session/manager.js +262 -0
  12. package/dist/session/manager.js.map +1 -0
  13. package/dist/session/types.d.ts +113 -0
  14. package/dist/session/types.d.ts.map +1 -0
  15. package/dist/session/types.js +16 -0
  16. package/dist/session/types.js.map +1 -0
  17. package/dist/tools/bridge.d.ts +52 -0
  18. package/dist/tools/bridge.d.ts.map +1 -0
  19. package/dist/tools/bridge.js +97 -0
  20. package/dist/tools/bridge.js.map +1 -0
  21. package/dist/tools/budget.d.ts +84 -0
  22. package/dist/tools/budget.d.ts.map +1 -0
  23. package/dist/tools/budget.js +163 -0
  24. package/dist/tools/budget.js.map +1 -0
  25. package/dist/tools/deploy.d.ts +49 -0
  26. package/dist/tools/deploy.d.ts.map +1 -0
  27. package/dist/tools/deploy.js +123 -0
  28. package/dist/tools/deploy.js.map +1 -0
  29. package/dist/tools/escrow.d.ts +73 -0
  30. package/dist/tools/escrow.d.ts.map +1 -0
  31. package/dist/tools/escrow.js +146 -0
  32. package/dist/tools/escrow.js.map +1 -0
  33. package/dist/tools/history.d.ts +59 -0
  34. package/dist/tools/history.d.ts.map +1 -0
  35. package/dist/tools/history.js +202 -0
  36. package/dist/tools/history.js.map +1 -0
  37. package/dist/tools/identity.d.ts +65 -0
  38. package/dist/tools/identity.d.ts.map +1 -0
  39. package/dist/tools/identity.js +158 -0
  40. package/dist/tools/identity.js.map +1 -0
  41. package/dist/tools/payments.d.ts +71 -0
  42. package/dist/tools/payments.d.ts.map +1 -0
  43. package/dist/tools/payments.js +158 -0
  44. package/dist/tools/payments.js.map +1 -0
  45. package/dist/tools/session.d.ts +240 -0
  46. package/dist/tools/session.d.ts.map +1 -0
  47. package/dist/tools/session.js +678 -0
  48. package/dist/tools/session.js.map +1 -0
  49. package/dist/tools/swap.d.ts +65 -0
  50. package/dist/tools/swap.d.ts.map +1 -0
  51. package/dist/tools/swap.js +101 -0
  52. package/dist/tools/swap.js.map +1 -0
  53. package/dist/tools/tokens.d.ts +129 -0
  54. package/dist/tools/tokens.d.ts.map +1 -0
  55. package/dist/tools/tokens.js +138 -0
  56. package/dist/tools/tokens.js.map +1 -0
  57. package/dist/tools/transfers.d.ts +86 -0
  58. package/dist/tools/transfers.d.ts.map +1 -0
  59. package/dist/tools/transfers.js +136 -0
  60. package/dist/tools/transfers.js.map +1 -0
  61. package/dist/tools/wallet.d.ts +107 -0
  62. package/dist/tools/wallet.d.ts.map +1 -0
  63. package/dist/tools/wallet.js +271 -0
  64. package/dist/tools/wallet.js.map +1 -0
  65. package/dist/tools/x402.d.ts +90 -0
  66. package/dist/tools/x402.d.ts.map +1 -0
  67. package/dist/tools/x402.js +268 -0
  68. package/dist/tools/x402.js.map +1 -0
  69. package/dist/utils/client.d.ts +46 -0
  70. package/dist/utils/client.d.ts.map +1 -0
  71. package/dist/utils/client.js +123 -0
  72. package/dist/utils/client.js.map +1 -0
  73. package/dist/utils/format.d.ts +59 -0
  74. package/dist/utils/format.d.ts.map +1 -0
  75. package/dist/utils/format.js +161 -0
  76. package/dist/utils/format.js.map +1 -0
  77. package/package.json +62 -12
  78. package/index.d.ts +0 -1
  79. package/index.js +0 -13
@@ -0,0 +1,136 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getBalancesTool = exports.GetBalancesSchema = exports.sendTokenTool = exports.SendTokenSchema = void 0;
4
+ exports.handleSendToken = handleSendToken;
5
+ exports.handleGetBalances = handleGetBalances;
6
+ /**
7
+ * transfers.ts — send_token, get_balances tools.
8
+ *
9
+ * Wraps agentwallet-sdk v6 agentTransferToken + getBalances.
10
+ */
11
+ const zod_1 = require("zod");
12
+ const agentwallet_sdk_1 = require("agentwallet-sdk");
13
+ const client_js_1 = require("../utils/client.js");
14
+ const format_js_1 = require("../utils/format.js");
15
+ // ─── send_token ────────────────────────────────────────────────────────────
16
+ exports.SendTokenSchema = zod_1.z.object({
17
+ tokenSymbol: zod_1.z.string().describe('Token symbol, e.g. "USDC"'),
18
+ chainId: zod_1.z.number().int().describe('Chain ID where the token lives, e.g. 8453'),
19
+ recipientAddress: zod_1.z.string().describe('Recipient wallet address (0x-prefixed)'),
20
+ amount: zod_1.z
21
+ .string()
22
+ .describe('Amount in human-readable units, e.g. "10.5" for 10.5 USDC'),
23
+ });
24
+ exports.sendTokenTool = {
25
+ name: 'send_token',
26
+ description: 'Send any ERC-20 token from the Agent Wallet to a recipient. ' +
27
+ 'Resolves the token address and decimals from the global registry, ' +
28
+ 'then calls agentTransferToken through the AgentAccountV2 contract. ' +
29
+ 'Subject to configured spend limits.',
30
+ inputSchema: {
31
+ type: 'object',
32
+ properties: {
33
+ tokenSymbol: { type: 'string', description: 'Token symbol (e.g. "USDC", "WETH")' },
34
+ chainId: { type: 'number', description: 'Chain ID (e.g. 8453 for Base Mainnet)' },
35
+ recipientAddress: { type: 'string', description: 'Recipient address (0x-prefixed)' },
36
+ amount: { type: 'string', description: 'Amount in human-readable units (e.g. "10.5")' },
37
+ },
38
+ required: ['tokenSymbol', 'chainId', 'recipientAddress', 'amount'],
39
+ },
40
+ };
41
+ async function handleSendToken(input) {
42
+ try {
43
+ const wallet = (0, client_js_1.getWallet)();
44
+ const registry = (0, agentwallet_sdk_1.getGlobalRegistry)();
45
+ const token = registry.getToken(input.tokenSymbol.toUpperCase(), input.chainId);
46
+ if (!token) {
47
+ throw new Error(`Token "${input.tokenSymbol}" not found for chain ${input.chainId}. ` +
48
+ 'Use add_custom_token to register it first.');
49
+ }
50
+ const rawAmount = (0, agentwallet_sdk_1.parseAmount)(input.amount, token.decimals);
51
+ const txHash = await (0, agentwallet_sdk_1.agentTransferToken)(wallet, {
52
+ token: token.address,
53
+ to: input.recipientAddress,
54
+ amount: rawAmount,
55
+ });
56
+ return {
57
+ content: [
58
+ (0, format_js_1.textContent)(JSON.stringify({
59
+ success: true,
60
+ txHash,
61
+ token: token.symbol,
62
+ to: input.recipientAddress,
63
+ amount: input.amount,
64
+ rawAmount: rawAmount.toString(),
65
+ chainId: input.chainId,
66
+ })),
67
+ ],
68
+ };
69
+ }
70
+ catch (error) {
71
+ return {
72
+ content: [(0, format_js_1.textContent)((0, format_js_1.formatError)(error, 'send_token'))],
73
+ isError: true,
74
+ };
75
+ }
76
+ }
77
+ // ─── get_balances ──────────────────────────────────────────────────────────
78
+ exports.GetBalancesSchema = zod_1.z.object({
79
+ chainId: zod_1.z
80
+ .number()
81
+ .int()
82
+ .optional()
83
+ .describe('Chain ID to query balances on. Defaults to the configured wallet chain.'),
84
+ });
85
+ exports.getBalancesTool = {
86
+ name: 'get_balances',
87
+ description: 'Get all ERC-20 token balances for the configured Agent Wallet address. ' +
88
+ 'Uses the global token registry to enumerate tokens for the given chain.',
89
+ inputSchema: {
90
+ type: 'object',
91
+ properties: {
92
+ chainId: {
93
+ type: 'number',
94
+ description: 'Chain ID (defaults to the configured wallet chain)',
95
+ },
96
+ },
97
+ required: [],
98
+ },
99
+ };
100
+ async function handleGetBalances(input) {
101
+ try {
102
+ const wallet = (0, client_js_1.getWallet)();
103
+ const config = (0, client_js_1.getConfig)();
104
+ const chainId = input.chainId ?? config.chainId;
105
+ const ctx = {
106
+ publicClient: wallet.publicClient,
107
+ walletClient: wallet.walletClient,
108
+ account: wallet.walletClient.account.address,
109
+ chainId,
110
+ };
111
+ const balances = await (0, agentwallet_sdk_1.getBalances)(ctx);
112
+ // Serialize bigints to strings for JSON
113
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
114
+ const serialized = balances.map((b) => ({
115
+ ...b,
116
+ rawBalance: typeof b.rawBalance === 'bigint' ? b.rawBalance.toString() : b.rawBalance,
117
+ }));
118
+ return {
119
+ content: [
120
+ (0, format_js_1.textContent)(JSON.stringify({
121
+ walletAddress: wallet.walletClient.account.address,
122
+ chainId,
123
+ count: serialized.length,
124
+ balances: serialized,
125
+ })),
126
+ ],
127
+ };
128
+ }
129
+ catch (error) {
130
+ return {
131
+ content: [(0, format_js_1.textContent)((0, format_js_1.formatError)(error, 'get_balances'))],
132
+ isError: true,
133
+ };
134
+ }
135
+ }
136
+ //# sourceMappingURL=transfers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transfers.js","sourceRoot":"","sources":["../../src/tools/transfers.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,107 @@
1
+ /**
2
+ * wallet.ts — get_wallet_info, check_spend_limit, queue_approval tools.
3
+ */
4
+ import { z } from 'zod';
5
+ export declare const GetWalletInfoSchema: z.ZodObject<{
6
+ token: z.ZodOptional<z.ZodString>;
7
+ }, "strip", z.ZodTypeAny, {
8
+ token?: string | undefined;
9
+ }, {
10
+ token?: string | undefined;
11
+ }>;
12
+ export type GetWalletInfoInput = z.infer<typeof GetWalletInfoSchema>;
13
+ export declare const getWalletInfoTool: {
14
+ name: string;
15
+ description: string;
16
+ inputSchema: {
17
+ type: "object";
18
+ properties: {
19
+ token: {
20
+ type: string;
21
+ description: string;
22
+ };
23
+ };
24
+ required: never[];
25
+ };
26
+ };
27
+ export declare function handleGetWalletInfo(input: GetWalletInfoInput): Promise<{
28
+ content: Array<{
29
+ type: 'text';
30
+ text: string;
31
+ }>;
32
+ isError?: boolean;
33
+ }>;
34
+ export declare const CheckSpendLimitSchema: z.ZodObject<{
35
+ amount_eth: z.ZodString;
36
+ token: z.ZodOptional<z.ZodString>;
37
+ }, "strip", z.ZodTypeAny, {
38
+ amount_eth: string;
39
+ token?: string | undefined;
40
+ }, {
41
+ amount_eth: string;
42
+ token?: string | undefined;
43
+ }>;
44
+ export type CheckSpendLimitInput = z.infer<typeof CheckSpendLimitSchema>;
45
+ export declare const checkSpendLimitTool: {
46
+ name: string;
47
+ description: string;
48
+ inputSchema: {
49
+ type: "object";
50
+ properties: {
51
+ amount_eth: {
52
+ type: string;
53
+ description: string;
54
+ };
55
+ token: {
56
+ type: string;
57
+ description: string;
58
+ };
59
+ };
60
+ required: string[];
61
+ };
62
+ };
63
+ export declare function handleCheckSpendLimit(input: CheckSpendLimitInput): Promise<{
64
+ content: Array<{
65
+ type: 'text';
66
+ text: string;
67
+ }>;
68
+ isError?: boolean;
69
+ }>;
70
+ export declare const QueueApprovalSchema: z.ZodObject<{
71
+ action: z.ZodEnum<["list", "approve", "cancel"]>;
72
+ tx_id: z.ZodOptional<z.ZodString>;
73
+ }, "strip", z.ZodTypeAny, {
74
+ action: "list" | "approve" | "cancel";
75
+ tx_id?: string | undefined;
76
+ }, {
77
+ action: "list" | "approve" | "cancel";
78
+ tx_id?: string | undefined;
79
+ }>;
80
+ export type QueueApprovalInput = z.infer<typeof QueueApprovalSchema>;
81
+ export declare const queueApprovalTool: {
82
+ name: string;
83
+ description: string;
84
+ inputSchema: {
85
+ type: "object";
86
+ properties: {
87
+ action: {
88
+ type: string;
89
+ enum: string[];
90
+ description: string;
91
+ };
92
+ tx_id: {
93
+ type: string;
94
+ description: string;
95
+ };
96
+ };
97
+ required: string[];
98
+ };
99
+ };
100
+ export declare function handleQueueApproval(input: QueueApprovalInput): Promise<{
101
+ content: Array<{
102
+ type: 'text';
103
+ text: string;
104
+ }>;
105
+ isError?: boolean;
106
+ }>;
107
+ //# sourceMappingURL=wallet.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wallet.d.ts","sourceRoot":"","sources":["../../src/tools/wallet.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AA8BxB,eAAO,MAAM,mBAAmB;;;;;;EAS9B,CAAC;AAEH,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAErE,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;CAiB7B,CAAC;AAEF,wBAAsB,mBAAmB,CACvC,KAAK,EAAE,kBAAkB,GACxB,OAAO,CAAC;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC,CAsDhF;AAID,eAAO,MAAM,qBAAqB;;;;;;;;;EAWhC,CAAC;AAEH,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AAEzE,eAAO,MAAM,mBAAmB;;;;;;;;;;;;;;;;;CAoB/B,CAAC;AAEF,wBAAsB,qBAAqB,CACzC,KAAK,EAAE,oBAAoB,GAC1B,OAAO,CAAC;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC,CAkDhF;AAID,eAAO,MAAM,mBAAmB;;;;;;;;;EAY9B,CAAC;AAEH,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAErE,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;CAsB7B,CAAC;AAEF,wBAAsB,mBAAmB,CACvC,KAAK,EAAE,kBAAkB,GACxB,OAAO,CAAC;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC,CA2EhF"}
@@ -0,0 +1,271 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.queueApprovalTool = exports.QueueApprovalSchema = exports.checkSpendLimitTool = exports.CheckSpendLimitSchema = exports.getWalletInfoTool = exports.GetWalletInfoSchema = void 0;
4
+ exports.handleGetWalletInfo = handleGetWalletInfo;
5
+ exports.handleCheckSpendLimit = handleCheckSpendLimit;
6
+ exports.handleQueueApproval = handleQueueApproval;
7
+ /**
8
+ * wallet.ts — get_wallet_info, check_spend_limit, queue_approval tools.
9
+ */
10
+ const zod_1 = require("zod");
11
+ const viem_1 = require("viem");
12
+ const agentwallet_sdk_1 = require("agentwallet-sdk");
13
+ const client_js_1 = require("../utils/client.js");
14
+ const format_js_1 = require("../utils/format.js");
15
+ // ─── NATIVE_TOKEN constant ────────────────────────────────────────────────
16
+ const NATIVE_TOKEN = viem_1.zeroAddress;
17
+ // ─── get_wallet_info ───────────────────────────────────────────────────────
18
+ exports.GetWalletInfoSchema = zod_1.z.object({
19
+ token: zod_1.z
20
+ .string()
21
+ .optional()
22
+ .describe('Token address to check budget for. ' +
23
+ 'Use "0x0000000000000000000000000000000000000000" for ETH (default). ' +
24
+ 'Or use a USDC/ERC20 contract address.'),
25
+ });
26
+ exports.getWalletInfoTool = {
27
+ name: 'get_wallet_info',
28
+ description: 'Get comprehensive wallet information including address, on-chain balance, ' +
29
+ 'spend limits, remaining period allowance, and queue depth. ' +
30
+ 'Use token parameter to check budget for a specific ERC20 (defaults to ETH).',
31
+ inputSchema: {
32
+ type: 'object',
33
+ properties: {
34
+ token: {
35
+ type: 'string',
36
+ description: 'Token address to check. Use "0x0000000000000000000000000000000000000000" for ETH (default).',
37
+ },
38
+ },
39
+ required: [],
40
+ },
41
+ };
42
+ async function handleGetWalletInfo(input) {
43
+ try {
44
+ const wallet = (0, client_js_1.getWallet)();
45
+ const config = (0, client_js_1.getConfig)();
46
+ const token = input.token ?? NATIVE_TOKEN;
47
+ const tokenLabel = token === NATIVE_TOKEN ? 'ETH' : token;
48
+ // Parallel fetches for speed
49
+ const [forecast, health, ethBalance] = await Promise.all([
50
+ (0, agentwallet_sdk_1.getBudgetForecast)(wallet, token).catch(() => null),
51
+ (0, agentwallet_sdk_1.getWalletHealth)(wallet, [], [token]).catch(() => null),
52
+ wallet.publicClient.getBalance({ address: config.walletAddress }).catch(() => null),
53
+ ]);
54
+ const explorerUrl = (0, format_js_1.explorerAddressUrl)(config.walletAddress, config.chainId);
55
+ const cname = (0, format_js_1.chainName)(config.chainId);
56
+ let out = `📊 **Agent Wallet Info**\n\n`;
57
+ out += `📍 Address: ${config.walletAddress}\n`;
58
+ out += `🌐 Chain: ${cname}\n`;
59
+ out += `🔗 Explorer: ${explorerUrl}\n\n`;
60
+ if (ethBalance !== null) {
61
+ out += `💰 ETH Balance: ${(0, format_js_1.formatEth)(ethBalance)}\n\n`;
62
+ }
63
+ if (forecast) {
64
+ const badge = (0, format_js_1.utilizationBadge)(forecast.utilizationPercent);
65
+ out += `📈 **Spend Limits (${tokenLabel})**\n`;
66
+ out += ` Per-tx limit: ${(0, format_js_1.formatSpendLimit)(forecast.perTxLimit)}\n`;
67
+ out += ` Period limit: ${(0, format_js_1.formatSpendLimit)(forecast.periodLimit)}\n`;
68
+ out += ` Period spent: ${(0, format_js_1.formatEth)(forecast.periodSpent)}\n`;
69
+ out += ` Remaining: ${(0, format_js_1.formatEth)(forecast.remainingInPeriod)}\n`;
70
+ out += ` Utilization: ${forecast.utilizationPercent}% ${badge}\n`;
71
+ out += ` Period length: ${(0, format_js_1.formatDuration)(forecast.periodLength)}\n`;
72
+ out += ` Period started: ${(0, format_js_1.formatTimestamp)(forecast.periodStart)}\n`;
73
+ out += ` Resets in: ${(0, format_js_1.formatDuration)(forecast.secondsUntilReset)}\n\n`;
74
+ }
75
+ if (health) {
76
+ out += `🔧 **Wallet Health**\n`;
77
+ out += ` NFT contract: ${health.tokenContract}\n`;
78
+ out += ` NFT token ID: ${health.tokenId.toString()}\n`;
79
+ out += ` Operator epoch: ${health.operatorEpoch.toString()}\n`;
80
+ out += ` Pending queue: ${health.pendingQueueDepth} transaction(s) awaiting approval\n`;
81
+ }
82
+ return { content: [(0, format_js_1.textContent)(out)] };
83
+ }
84
+ catch (error) {
85
+ return {
86
+ content: [(0, format_js_1.textContent)((0, format_js_1.formatError)(error, 'get_wallet_info'))],
87
+ isError: true,
88
+ };
89
+ }
90
+ }
91
+ // ─── check_spend_limit ─────────────────────────────────────────────────────
92
+ exports.CheckSpendLimitSchema = zod_1.z.object({
93
+ amount_eth: zod_1.z
94
+ .string()
95
+ .describe('Amount in ETH to check (e.g. "0.01"). Use this for native ETH payments.'),
96
+ token: zod_1.z
97
+ .string()
98
+ .optional()
99
+ .describe('Token contract address to check against. ' +
100
+ 'Omit or use zero address for ETH.'),
101
+ });
102
+ exports.checkSpendLimitTool = {
103
+ name: 'check_spend_limit',
104
+ description: 'Check whether a proposed payment amount is within the wallet\'s autonomous spend limits. ' +
105
+ 'Returns a clear yes/no with remaining budget details. ' +
106
+ 'Use this before send_payment to avoid surprise queuing.',
107
+ inputSchema: {
108
+ type: 'object',
109
+ properties: {
110
+ amount_eth: {
111
+ type: 'string',
112
+ description: 'Amount in ETH to check (e.g. "0.01")',
113
+ },
114
+ token: {
115
+ type: 'string',
116
+ description: 'Token address. Omit for native ETH.',
117
+ },
118
+ },
119
+ required: ['amount_eth'],
120
+ },
121
+ };
122
+ async function handleCheckSpendLimit(input) {
123
+ try {
124
+ const wallet = (0, client_js_1.getWallet)();
125
+ const token = input.token ?? NATIVE_TOKEN;
126
+ const tokenLabel = token === NATIVE_TOKEN ? 'ETH' : token;
127
+ // Parse amount (ETH string → wei bigint)
128
+ const amountEth = parseFloat(input.amount_eth);
129
+ if (isNaN(amountEth) || amountEth <= 0) {
130
+ throw new Error(`Invalid amount: "${input.amount_eth}". Must be a positive number.`);
131
+ }
132
+ const amountWei = BigInt(Math.round(amountEth * 1e18));
133
+ const budget = await (0, agentwallet_sdk_1.checkBudget)(wallet, token);
134
+ const forecast = await (0, agentwallet_sdk_1.getBudgetForecast)(wallet, token);
135
+ const perTxOk = amountWei <= budget.perTxLimit && budget.perTxLimit > 0n;
136
+ const periodOk = amountWei <= budget.remainingInPeriod && budget.remainingInPeriod > 0n;
137
+ const canExecute = perTxOk && periodOk;
138
+ let out = `🔍 **Spend Limit Check**\n\n`;
139
+ out += ` Token: ${tokenLabel}\n`;
140
+ out += ` Amount: ${(0, format_js_1.formatEth)(amountWei)}\n\n`;
141
+ out += ` Per-tx limit: ${(0, format_js_1.formatSpendLimit)(budget.perTxLimit)}\n`;
142
+ out += ` Within per-tx: ${perTxOk ? '✅ Yes' : '❌ No (exceeds per-tx limit)'}\n\n`;
143
+ out += ` Remaining period: ${(0, format_js_1.formatEth)(budget.remainingInPeriod)}\n`;
144
+ out += ` Within period: ${periodOk ? '✅ Yes' : '❌ No (would exceed period budget)'}\n\n`;
145
+ out += ` Resets in: ${(0, format_js_1.formatDuration)(forecast.secondsUntilReset)}\n\n`;
146
+ if (canExecute) {
147
+ out += `✅ **APPROVED** — This payment can execute autonomously.\n`;
148
+ }
149
+ else if (budget.perTxLimit === 0n) {
150
+ out += `🚫 **BLOCKED** — No spend policy configured for ${tokenLabel}. Set a spend policy first.\n`;
151
+ }
152
+ else {
153
+ out += `⏳ **QUEUED** — This payment will be queued for owner approval.\n`;
154
+ if (!perTxOk) {
155
+ out += ` Reason: Amount exceeds per-tx limit of ${(0, format_js_1.formatEth)(budget.perTxLimit)}.\n`;
156
+ }
157
+ else {
158
+ out += ` Reason: Amount exceeds remaining period budget of ${(0, format_js_1.formatEth)(budget.remainingInPeriod)}.\n`;
159
+ out += ` Budget resets in: ${(0, format_js_1.formatDuration)(forecast.secondsUntilReset)}\n`;
160
+ }
161
+ }
162
+ return { content: [(0, format_js_1.textContent)(out)] };
163
+ }
164
+ catch (error) {
165
+ return {
166
+ content: [(0, format_js_1.textContent)((0, format_js_1.formatError)(error, 'check_spend_limit'))],
167
+ isError: true,
168
+ };
169
+ }
170
+ }
171
+ // ─── queue_approval ────────────────────────────────────────────────────────
172
+ exports.QueueApprovalSchema = zod_1.z.object({
173
+ action: zod_1.z
174
+ .enum(['list', 'approve', 'cancel'])
175
+ .describe('"list" — show all pending transactions awaiting approval. ' +
176
+ '"approve" — approve a queued transaction by ID. ' +
177
+ '"cancel" — cancel a queued transaction by ID.'),
178
+ tx_id: zod_1.z
179
+ .string()
180
+ .optional()
181
+ .describe('Transaction queue ID (required for approve and cancel actions).'),
182
+ });
183
+ exports.queueApprovalTool = {
184
+ name: 'queue_approval',
185
+ description: 'Manage over-limit transactions queued for owner review. ' +
186
+ 'Use action="list" to see pending transactions, ' +
187
+ '"approve" to approve one by ID, or "cancel" to cancel one by ID. ' +
188
+ 'Approve/cancel require the agent key to have owner privileges.',
189
+ inputSchema: {
190
+ type: 'object',
191
+ properties: {
192
+ action: {
193
+ type: 'string',
194
+ enum: ['list', 'approve', 'cancel'],
195
+ description: 'Action: "list", "approve", or "cancel"',
196
+ },
197
+ tx_id: {
198
+ type: 'string',
199
+ description: 'Transaction queue ID (required for approve/cancel)',
200
+ },
201
+ },
202
+ required: ['action'],
203
+ },
204
+ };
205
+ async function handleQueueApproval(input) {
206
+ try {
207
+ const wallet = (0, client_js_1.getWallet)();
208
+ const config = (0, client_js_1.getConfig)();
209
+ if (input.action === 'list') {
210
+ const pending = await (0, agentwallet_sdk_1.getPendingApprovals)(wallet, 0n);
211
+ if (pending.length === 0) {
212
+ return {
213
+ content: [
214
+ (0, format_js_1.textContent)(`📋 **Pending Approvals**\n\nNo transactions awaiting approval. ✅`),
215
+ ],
216
+ };
217
+ }
218
+ let out = `📋 **Pending Approvals** (${pending.length} transaction${pending.length > 1 ? 's' : ''})\n\n`;
219
+ for (const tx of pending) {
220
+ out += `─────────────────────────\n`;
221
+ out += ` Queue ID: ${tx.txId.toString()}\n`;
222
+ out += ` To: ${tx.to}\n`;
223
+ out += ` Value: ${(0, format_js_1.formatEth)(tx.value)}\n`;
224
+ out += ` Token: ${tx.token === NATIVE_TOKEN ? 'ETH' : tx.token}\n`;
225
+ if (tx.token !== NATIVE_TOKEN) {
226
+ out += ` Amount: ${tx.amount.toString()} (base units)\n`;
227
+ }
228
+ out += ` Queued at: ${(0, format_js_1.formatTimestamp)(tx.createdAt)}\n`;
229
+ out += '\n';
230
+ }
231
+ out += `Use action="approve" with tx_id to approve, or action="cancel" to cancel.`;
232
+ return { content: [(0, format_js_1.textContent)(out)] };
233
+ }
234
+ if (input.action === 'approve' || input.action === 'cancel') {
235
+ if (!input.tx_id) {
236
+ throw new Error(`tx_id is required for action="${input.action}"`);
237
+ }
238
+ const txId = BigInt(input.tx_id);
239
+ let txHash;
240
+ if (input.action === 'approve') {
241
+ txHash = await (0, agentwallet_sdk_1.approveTransaction)(wallet, txId);
242
+ return {
243
+ content: [
244
+ (0, format_js_1.textContent)((0, format_js_1.formatSuccess)(`Transaction ${txId.toString()} approved!`, {
245
+ 'Approval TX': txHash,
246
+ 'Chain': (0, format_js_1.chainName)(config.chainId),
247
+ })),
248
+ ],
249
+ };
250
+ }
251
+ else {
252
+ txHash = await (0, agentwallet_sdk_1.cancelTransaction)(wallet, txId);
253
+ return {
254
+ content: [
255
+ (0, format_js_1.textContent)((0, format_js_1.formatSuccess)(`Transaction ${txId.toString()} cancelled.`, {
256
+ 'Cancel TX': txHash,
257
+ })),
258
+ ],
259
+ };
260
+ }
261
+ }
262
+ throw new Error(`Unknown action: ${input.action}`);
263
+ }
264
+ catch (error) {
265
+ return {
266
+ content: [(0, format_js_1.textContent)((0, format_js_1.formatError)(error, 'queue_approval'))],
267
+ isError: true,
268
+ };
269
+ }
270
+ }
271
+ //# sourceMappingURL=wallet.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wallet.js","sourceRoot":"","sources":["../../src/tools/wallet.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,90 @@
1
+ /**
2
+ * x402.ts — x402_pay tool.
3
+ *
4
+ * Fetches a URL, automatically handling 402 Payment Required responses
5
+ * by paying with the Agent Wallet and retrying the request.
6
+ *
7
+ * v1.1.0: Auto-session detection. If an active x402 V2 session covers the
8
+ * requested URL, session headers are injected and no new payment is made.
9
+ * Pass skip_session_check=true to force a fresh payment regardless.
10
+ */
11
+ import { z } from 'zod';
12
+ export declare const X402PaySchema: z.ZodObject<{
13
+ url: z.ZodString;
14
+ method: z.ZodDefault<z.ZodOptional<z.ZodEnum<["GET", "POST", "PUT", "PATCH", "DELETE"]>>>;
15
+ headers: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
16
+ body: z.ZodOptional<z.ZodString>;
17
+ max_payment_eth: z.ZodOptional<z.ZodString>;
18
+ timeout_ms: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
19
+ skip_session_check: z.ZodDefault<z.ZodOptional<z.ZodBoolean>>;
20
+ }, "strip", z.ZodTypeAny, {
21
+ method: "GET" | "POST" | "PUT" | "PATCH" | "DELETE";
22
+ timeout_ms: number;
23
+ url: string;
24
+ skip_session_check: boolean;
25
+ body?: string | undefined;
26
+ headers?: Record<string, string> | undefined;
27
+ max_payment_eth?: string | undefined;
28
+ }, {
29
+ url: string;
30
+ body?: string | undefined;
31
+ method?: "GET" | "POST" | "PUT" | "PATCH" | "DELETE" | undefined;
32
+ headers?: Record<string, string> | undefined;
33
+ max_payment_eth?: string | undefined;
34
+ timeout_ms?: number | undefined;
35
+ skip_session_check?: boolean | undefined;
36
+ }>;
37
+ export type X402PayInput = z.infer<typeof X402PaySchema>;
38
+ export declare const x402PayTool: {
39
+ name: string;
40
+ description: string;
41
+ inputSchema: {
42
+ type: "object";
43
+ properties: {
44
+ url: {
45
+ type: string;
46
+ description: string;
47
+ };
48
+ method: {
49
+ type: string;
50
+ enum: string[];
51
+ description: string;
52
+ default: string;
53
+ };
54
+ headers: {
55
+ type: string;
56
+ additionalProperties: {
57
+ type: string;
58
+ };
59
+ description: string;
60
+ };
61
+ body: {
62
+ type: string;
63
+ description: string;
64
+ };
65
+ max_payment_eth: {
66
+ type: string;
67
+ description: string;
68
+ };
69
+ timeout_ms: {
70
+ type: string;
71
+ description: string;
72
+ default: number;
73
+ };
74
+ skip_session_check: {
75
+ type: string;
76
+ description: string;
77
+ default: boolean;
78
+ };
79
+ };
80
+ required: string[];
81
+ };
82
+ };
83
+ export declare function handleX402Pay(input: X402PayInput): Promise<{
84
+ content: Array<{
85
+ type: 'text';
86
+ text: string;
87
+ }>;
88
+ isError?: boolean;
89
+ }>;
90
+ //# sourceMappingURL=x402.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"x402.d.ts","sourceRoot":"","sources":["../../src/tools/x402.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AASxB,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;;;;;EA2CxB,CAAC;AAEH,MAAM,MAAM,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAC;AAIzD,eAAO,MAAM,WAAW;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiDvB,CAAC;AAIF,wBAAsB,aAAa,CACjC,KAAK,EAAE,YAAY,GAClB,OAAO,CAAC;IAAE,OAAO,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAAC,OAAO,CAAC,EAAE,OAAO,CAAA;CAAE,CAAC,CAgLhF"}