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,123 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.deployWalletTool = exports.DeployWalletSchema = void 0;
4
+ exports.handleDeployWallet = handleDeployWallet;
5
+ /**
6
+ * deploy_wallet tool — Deploy a new AgentAccountV2 wallet via the factory.
7
+ * Requires FACTORY_ADDRESS and NFT_CONTRACT_ADDRESS env vars.
8
+ */
9
+ const zod_1 = require("zod");
10
+ const viem_1 = require("viem");
11
+ const accounts_1 = require("viem/accounts");
12
+ const chains_1 = require("viem/chains");
13
+ const agentwallet_sdk_1 = require("agentwallet-sdk");
14
+ const client_js_1 = require("../utils/client.js");
15
+ const format_js_1 = require("../utils/format.js");
16
+ // ─── Schema ────────────────────────────────────────────────────────────────
17
+ exports.DeployWalletSchema = zod_1.z.object({
18
+ token_id: zod_1.z
19
+ .string()
20
+ .describe('NFT token ID that will own the deployed wallet (e.g. "1")'),
21
+ nft_contract_address: zod_1.z
22
+ .string()
23
+ .optional()
24
+ .describe('NFT contract address that owns this wallet. ' +
25
+ 'Defaults to NFT_CONTRACT_ADDRESS env var.'),
26
+ factory_address: zod_1.z
27
+ .string()
28
+ .optional()
29
+ .describe('AgentAccountFactoryV2 address. ' +
30
+ 'Defaults to FACTORY_ADDRESS env var.'),
31
+ });
32
+ // ─── Tool definition ───────────────────────────────────────────────────────
33
+ exports.deployWalletTool = {
34
+ name: 'deploy_wallet',
35
+ description: 'Deploy a new AgentAccountV2 wallet via the factory contract. ' +
36
+ 'The wallet is deterministically addressed (CREATE2) and owned by an NFT. ' +
37
+ 'Returns the wallet address and deployment transaction hash. ' +
38
+ 'Requires FACTORY_ADDRESS and NFT_CONTRACT_ADDRESS env vars (or pass them as arguments).',
39
+ inputSchema: {
40
+ type: 'object',
41
+ properties: {
42
+ token_id: {
43
+ type: 'string',
44
+ description: 'NFT token ID that will own this wallet (e.g. "1")',
45
+ },
46
+ nft_contract_address: {
47
+ type: 'string',
48
+ description: 'NFT contract address. Defaults to NFT_CONTRACT_ADDRESS env var.',
49
+ },
50
+ factory_address: {
51
+ type: 'string',
52
+ description: 'Factory contract address. Defaults to FACTORY_ADDRESS env var.',
53
+ },
54
+ },
55
+ required: ['token_id'],
56
+ },
57
+ };
58
+ // ─── Handler ───────────────────────────────────────────────────────────────
59
+ async function handleDeployWallet(input) {
60
+ try {
61
+ const config = (0, client_js_1.getConfig)();
62
+ const factoryAddress = (input.factory_address ?? config.factoryAddress);
63
+ if (!factoryAddress) {
64
+ throw new Error('Factory address required. Pass factory_address argument or set FACTORY_ADDRESS env var.');
65
+ }
66
+ const nftContractAddress = (input.nft_contract_address ?? config.nftContractAddress);
67
+ if (!nftContractAddress) {
68
+ throw new Error('NFT contract address required. Pass nft_contract_address argument or set NFT_CONTRACT_ADDRESS env var.');
69
+ }
70
+ const tokenId = BigInt(input.token_id);
71
+ const chainMap = {
72
+ 8453: chains_1.base,
73
+ 84532: chains_1.baseSepolia,
74
+ };
75
+ const chainNameMap = {
76
+ 8453: 'base',
77
+ 84532: 'base-sepolia',
78
+ };
79
+ const chain = chainMap[config.chainId];
80
+ if (!chain) {
81
+ throw new Error(`Unsupported chain for deployment: ${config.chainId}`);
82
+ }
83
+ const account = (0, accounts_1.privateKeyToAccount)(config.agentPrivateKey);
84
+ const walletClient = (0, viem_1.createWalletClient)({
85
+ account,
86
+ chain,
87
+ transport: (0, viem_1.http)(config.rpcUrl, { timeout: 30_000 }),
88
+ });
89
+ const result = await (0, agentwallet_sdk_1.deployWallet)({
90
+ factoryAddress,
91
+ tokenContract: nftContractAddress,
92
+ tokenId,
93
+ chain: chainNameMap[config.chainId] ?? 'base',
94
+ rpcUrl: config.rpcUrl,
95
+ walletClient,
96
+ });
97
+ const explorerAddr = (0, format_js_1.explorerAddressUrl)(result.walletAddress, config.chainId);
98
+ const explorerTx = (0, format_js_1.explorerTxUrl)(result.txHash, config.chainId);
99
+ const cname = (0, format_js_1.chainName)(config.chainId);
100
+ return {
101
+ content: [
102
+ (0, format_js_1.textContent)(`✅ Agent Wallet deployed successfully!\n\n` +
103
+ `📍 Wallet Address: ${result.walletAddress}\n` +
104
+ `🔗 Explorer: ${explorerAddr}\n\n` +
105
+ `📋 Transaction: ${result.txHash}\n` +
106
+ `🔗 Explorer: ${explorerTx}\n\n` +
107
+ `🔑 Owner NFT: ${nftContractAddress} #${input.token_id}\n` +
108
+ `🌐 Chain: ${cname}\n\n` +
109
+ `ℹ️ Next steps:\n` +
110
+ ` 1. Set AGENT_WALLET_ADDRESS=${result.walletAddress} in your .env\n` +
111
+ ` 2. Use set_spend_policy (via SDK) to configure autonomous spending limits\n` +
112
+ ` 3. Fund the wallet with ETH or USDC for agent payments`),
113
+ ],
114
+ };
115
+ }
116
+ catch (error) {
117
+ return {
118
+ content: [(0, format_js_1.textContent)((0, format_js_1.formatError)(error, 'deploy_wallet'))],
119
+ isError: true,
120
+ };
121
+ }
122
+ }
123
+ //# sourceMappingURL=deploy.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"deploy.js","sourceRoot":"","sources":["../../src/tools/deploy.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,73 @@
1
+ /**
2
+ * escrow.ts — create_escrow tool.
3
+ *
4
+ * Wraps agentwallet-sdk v6 MutualStakeEscrow for on-chain mutual-stake escrow creation.
5
+ */
6
+ import { z } from 'zod';
7
+ export declare const CreateEscrowSchema: z.ZodObject<{
8
+ counterpartyAddress: z.ZodString;
9
+ stakeAmount: z.ZodString;
10
+ terms: z.ZodString;
11
+ factoryAddress: z.ZodOptional<z.ZodString>;
12
+ deadlineDays: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
13
+ challengeWindowHours: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
14
+ }, "strip", z.ZodTypeAny, {
15
+ counterpartyAddress: string;
16
+ stakeAmount: string;
17
+ terms: string;
18
+ deadlineDays: number;
19
+ challengeWindowHours: number;
20
+ factoryAddress?: string | undefined;
21
+ }, {
22
+ counterpartyAddress: string;
23
+ stakeAmount: string;
24
+ terms: string;
25
+ factoryAddress?: string | undefined;
26
+ deadlineDays?: number | undefined;
27
+ challengeWindowHours?: number | undefined;
28
+ }>;
29
+ export type CreateEscrowInput = z.infer<typeof CreateEscrowSchema>;
30
+ export declare const createEscrowTool: {
31
+ name: string;
32
+ description: string;
33
+ inputSchema: {
34
+ type: "object";
35
+ properties: {
36
+ counterpartyAddress: {
37
+ type: string;
38
+ description: string;
39
+ };
40
+ stakeAmount: {
41
+ type: string;
42
+ description: string;
43
+ };
44
+ terms: {
45
+ type: string;
46
+ description: string;
47
+ };
48
+ factoryAddress: {
49
+ type: string;
50
+ description: string;
51
+ };
52
+ deadlineDays: {
53
+ type: string;
54
+ description: string;
55
+ default: number;
56
+ };
57
+ challengeWindowHours: {
58
+ type: string;
59
+ description: string;
60
+ default: number;
61
+ };
62
+ };
63
+ required: string[];
64
+ };
65
+ };
66
+ export declare function handleCreateEscrow(input: CreateEscrowInput): Promise<{
67
+ content: Array<{
68
+ type: 'text';
69
+ text: string;
70
+ }>;
71
+ isError?: boolean;
72
+ }>;
73
+ //# sourceMappingURL=escrow.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"escrow.d.ts","sourceRoot":"","sources":["../../src/tools/escrow.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAUvB,eAAO,MAAM,kBAAkB;;;;;;;;;;;;;;;;;;;;;EA+B7B,CAAA;AAEF,MAAM,MAAM,iBAAiB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,kBAAkB,CAAC,CAAA;AAIlE,eAAO,MAAM,gBAAgB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAsC5B,CAAA;AAID,wBAAsB,kBAAkB,CACtC,KAAK,EAAE,iBAAiB,GACvB,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,CAwEhF"}
@@ -0,0 +1,146 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.createEscrowTool = exports.CreateEscrowSchema = void 0;
4
+ exports.handleCreateEscrow = handleCreateEscrow;
5
+ /**
6
+ * escrow.ts — create_escrow tool.
7
+ *
8
+ * Wraps agentwallet-sdk v6 MutualStakeEscrow for on-chain mutual-stake escrow creation.
9
+ */
10
+ const zod_1 = require("zod");
11
+ const agentwallet_sdk_1 = require("agentwallet-sdk");
12
+ const client_js_1 = require("../utils/client.js");
13
+ const format_js_1 = require("../utils/format.js");
14
+ // ─── Schema ────────────────────────────────────────────────────────────────
15
+ exports.CreateEscrowSchema = zod_1.z.object({
16
+ counterpartyAddress: zod_1.z
17
+ .string()
18
+ .describe('Seller / counterparty address (0x-prefixed)'),
19
+ stakeAmount: zod_1.z
20
+ .string()
21
+ .describe('Payment amount in human-readable USDC units, e.g. "100" for 100 USDC'),
22
+ terms: zod_1.z
23
+ .string()
24
+ .describe('Human-readable description of the escrow terms'),
25
+ factoryAddress: zod_1.z
26
+ .string()
27
+ .optional()
28
+ .describe('StakeVaultFactory contract address. ' +
29
+ 'Defaults to FACTORY_ADDRESS env var.'),
30
+ deadlineDays: zod_1.z
31
+ .number()
32
+ .int()
33
+ .min(1)
34
+ .optional()
35
+ .default(7)
36
+ .describe('Deadline in days from now (default: 7)'),
37
+ challengeWindowHours: zod_1.z
38
+ .number()
39
+ .int()
40
+ .min(1)
41
+ .optional()
42
+ .default(24)
43
+ .describe('Challenge window in hours after fulfillment (default: 24)'),
44
+ });
45
+ // ─── Tool definition ───────────────────────────────────────────────────────
46
+ exports.createEscrowTool = {
47
+ name: 'create_escrow',
48
+ description: 'Create a mutual-stake escrow vault between the Agent Wallet (buyer) and a counterparty (seller). ' +
49
+ 'Both parties lock collateral (equal to payment amount) ensuring aligned incentives. ' +
50
+ 'Uses USDC as the payment token. Requires FACTORY_ADDRESS env var or factoryAddress param.',
51
+ inputSchema: {
52
+ type: 'object',
53
+ properties: {
54
+ counterpartyAddress: {
55
+ type: 'string',
56
+ description: 'Seller / counterparty address (0x-prefixed)',
57
+ },
58
+ stakeAmount: {
59
+ type: 'string',
60
+ description: 'Payment amount in human-readable USDC units (e.g. "100")',
61
+ },
62
+ terms: {
63
+ type: 'string',
64
+ description: 'Human-readable description of the escrow terms',
65
+ },
66
+ factoryAddress: {
67
+ type: 'string',
68
+ description: 'StakeVaultFactory address (optional if FACTORY_ADDRESS env var set)',
69
+ },
70
+ deadlineDays: {
71
+ type: 'number',
72
+ description: 'Deadline in days from now (default: 7)',
73
+ default: 7,
74
+ },
75
+ challengeWindowHours: {
76
+ type: 'number',
77
+ description: 'Challenge window in hours (default: 24)',
78
+ default: 24,
79
+ },
80
+ },
81
+ required: ['counterpartyAddress', 'stakeAmount', 'terms'],
82
+ },
83
+ };
84
+ // ─── Handler ───────────────────────────────────────────────────────────────
85
+ async function handleCreateEscrow(input) {
86
+ try {
87
+ const wallet = (0, client_js_1.getWallet)();
88
+ const config = (0, client_js_1.getConfig)();
89
+ const factoryAddress = input.factoryAddress ??
90
+ config.factoryAddress;
91
+ if (!factoryAddress) {
92
+ throw new Error('factoryAddress is required. Pass it as a parameter or set FACTORY_ADDRESS env var.');
93
+ }
94
+ // Parse USDC amount (6 decimals)
95
+ const USDC_DECIMALS = 6;
96
+ const amountFloat = parseFloat(input.stakeAmount);
97
+ if (isNaN(amountFloat) || amountFloat <= 0) {
98
+ throw new Error(`Invalid stakeAmount: "${input.stakeAmount}". Must be a positive number.`);
99
+ }
100
+ const paymentAmount = BigInt(Math.round(amountFloat * 10 ** USDC_DECIMALS));
101
+ // Deadline: N days from now
102
+ const deadlineSecs = input.deadlineDays ?? 7;
103
+ const deadline = Math.floor(Date.now() / 1000) + deadlineSecs * 86400;
104
+ // Challenge window in seconds
105
+ const challengeWindowHours = input.challengeWindowHours ?? 24;
106
+ const challengeWindow = challengeWindowHours * 3600;
107
+ const escrow = new agentwallet_sdk_1.MutualStakeEscrow({
108
+ publicClient: wallet.publicClient,
109
+ walletClient: wallet.walletClient,
110
+ factoryAddress,
111
+ chainId: config.chainId,
112
+ });
113
+ const result = await escrow.create({
114
+ seller: input.counterpartyAddress,
115
+ paymentAmount,
116
+ buyerStake: paymentAmount,
117
+ sellerStake: paymentAmount,
118
+ verifier: 'optimistic',
119
+ deadline,
120
+ challengeWindow,
121
+ });
122
+ return {
123
+ content: [
124
+ (0, format_js_1.textContent)(JSON.stringify({
125
+ success: true,
126
+ vaultAddress: result.address,
127
+ txHash: result.txHash,
128
+ buyer: wallet.walletClient.account.address,
129
+ seller: input.counterpartyAddress,
130
+ paymentAmount: input.stakeAmount,
131
+ rawPaymentAmount: paymentAmount.toString(),
132
+ terms: input.terms,
133
+ deadline: new Date(deadline * 1000).toISOString(),
134
+ challengeWindowHours,
135
+ })),
136
+ ],
137
+ };
138
+ }
139
+ catch (error) {
140
+ return {
141
+ content: [(0, format_js_1.textContent)((0, format_js_1.formatError)(error, 'create_escrow'))],
142
+ isError: true,
143
+ };
144
+ }
145
+ }
146
+ //# sourceMappingURL=escrow.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"escrow.js","sourceRoot":"","sources":["../../src/tools/escrow.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,59 @@
1
+ /**
2
+ * history.ts — get_transaction_history tool.
3
+ * Queries on-chain event logs for the wallet's transaction history.
4
+ */
5
+ import { z } from 'zod';
6
+ export declare const GetTransactionHistorySchema: z.ZodObject<{
7
+ limit: z.ZodDefault<z.ZodOptional<z.ZodNumber>>;
8
+ from_block: z.ZodOptional<z.ZodString>;
9
+ to_block: z.ZodOptional<z.ZodString>;
10
+ event_type: z.ZodDefault<z.ZodOptional<z.ZodEnum<["all", "execution", "queued", "approved", "cancelled", "policy_update", "operator_update"]>>>;
11
+ }, "strip", z.ZodTypeAny, {
12
+ limit: number;
13
+ event_type: "all" | "execution" | "queued" | "approved" | "cancelled" | "policy_update" | "operator_update";
14
+ from_block?: string | undefined;
15
+ to_block?: string | undefined;
16
+ }, {
17
+ limit?: number | undefined;
18
+ from_block?: string | undefined;
19
+ to_block?: string | undefined;
20
+ event_type?: "all" | "execution" | "queued" | "approved" | "cancelled" | "policy_update" | "operator_update" | undefined;
21
+ }>;
22
+ export type GetTransactionHistoryInput = z.infer<typeof GetTransactionHistorySchema>;
23
+ export declare const getTransactionHistoryTool: {
24
+ name: string;
25
+ description: string;
26
+ inputSchema: {
27
+ type: "object";
28
+ properties: {
29
+ limit: {
30
+ type: string;
31
+ description: string;
32
+ default: number;
33
+ };
34
+ from_block: {
35
+ type: string;
36
+ description: string;
37
+ };
38
+ to_block: {
39
+ type: string;
40
+ description: string;
41
+ };
42
+ event_type: {
43
+ type: string;
44
+ enum: string[];
45
+ description: string;
46
+ default: string;
47
+ };
48
+ };
49
+ required: never[];
50
+ };
51
+ };
52
+ export declare function handleGetTransactionHistory(input: GetTransactionHistoryInput): Promise<{
53
+ content: Array<{
54
+ type: 'text';
55
+ text: string;
56
+ }>;
57
+ isError?: boolean;
58
+ }>;
59
+ //# sourceMappingURL=history.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"history.d.ts","sourceRoot":"","sources":["../../src/tools/history.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAexB,eAAO,MAAM,2BAA2B;;;;;;;;;;;;;;;EAsBtC,CAAC;AAEH,MAAM,MAAM,0BAA0B,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,2BAA2B,CAAC,CAAC;AAIrF,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAgCrC,CAAC;AAIF,wBAAsB,2BAA2B,CAC/C,KAAK,EAAE,0BAA0B,GAChC,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,CAmEhF"}
@@ -0,0 +1,202 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getTransactionHistoryTool = exports.GetTransactionHistorySchema = void 0;
4
+ exports.handleGetTransactionHistory = handleGetTransactionHistory;
5
+ /**
6
+ * history.ts — get_transaction_history tool.
7
+ * Queries on-chain event logs for the wallet's transaction history.
8
+ */
9
+ const zod_1 = require("zod");
10
+ const agentwallet_sdk_1 = require("agentwallet-sdk");
11
+ const client_js_1 = require("../utils/client.js");
12
+ const format_js_1 = require("../utils/format.js");
13
+ // ─── Schema ────────────────────────────────────────────────────────────────
14
+ exports.GetTransactionHistorySchema = zod_1.z.object({
15
+ limit: zod_1.z
16
+ .number()
17
+ .int()
18
+ .min(1)
19
+ .max(100)
20
+ .optional()
21
+ .default(20)
22
+ .describe('Maximum number of entries to return (default: 20, max: 100)'),
23
+ from_block: zod_1.z
24
+ .string()
25
+ .optional()
26
+ .describe('Start block number (hex or decimal string). Defaults to recent history.'),
27
+ to_block: zod_1.z
28
+ .string()
29
+ .optional()
30
+ .describe('End block number. Defaults to latest.'),
31
+ event_type: zod_1.z
32
+ .enum(['all', 'execution', 'queued', 'approved', 'cancelled', 'policy_update', 'operator_update'])
33
+ .optional()
34
+ .default('all')
35
+ .describe('Filter by event type (default: all)'),
36
+ });
37
+ // ─── Tool definition ───────────────────────────────────────────────────────
38
+ exports.getTransactionHistoryTool = {
39
+ name: 'get_transaction_history',
40
+ description: 'Retrieve the wallet\'s recent on-chain transaction history from event logs. ' +
41
+ 'Shows executions, queued transactions, approvals, cancellations, ' +
42
+ 'spend policy updates, and operator changes. ' +
43
+ 'Filter by event type or block range for targeted queries.',
44
+ inputSchema: {
45
+ type: 'object',
46
+ properties: {
47
+ limit: {
48
+ type: 'number',
49
+ description: 'Max entries to return (default: 20, max: 100)',
50
+ default: 20,
51
+ },
52
+ from_block: {
53
+ type: 'string',
54
+ description: 'Start block (decimal string). Defaults to 1000 blocks ago.',
55
+ },
56
+ to_block: {
57
+ type: 'string',
58
+ description: 'End block (decimal string). Defaults to latest.',
59
+ },
60
+ event_type: {
61
+ type: 'string',
62
+ enum: ['all', 'execution', 'queued', 'approved', 'cancelled', 'policy_update', 'operator_update'],
63
+ description: 'Filter by event type (default: all)',
64
+ default: 'all',
65
+ },
66
+ },
67
+ required: [],
68
+ },
69
+ };
70
+ // ─── Handler ───────────────────────────────────────────────────────────────
71
+ async function handleGetTransactionHistory(input) {
72
+ try {
73
+ const wallet = (0, client_js_1.getWallet)();
74
+ const config = (0, client_js_1.getConfig)();
75
+ // Default: look back ~1000 blocks if no range specified
76
+ let fromBlock;
77
+ let toBlock;
78
+ if (input.from_block) {
79
+ fromBlock = BigInt(input.from_block);
80
+ }
81
+ else {
82
+ // Get current block and look back ~1000 blocks
83
+ const latest = await wallet.publicClient.getBlockNumber();
84
+ fromBlock = latest > 1000n ? latest - 1000n : 0n;
85
+ }
86
+ if (input.to_block) {
87
+ toBlock = BigInt(input.to_block);
88
+ }
89
+ const allEntries = await (0, agentwallet_sdk_1.getActivityHistory)(wallet, {
90
+ fromBlock,
91
+ toBlock,
92
+ });
93
+ // Filter by event type
94
+ const eventType = input.event_type ?? 'all';
95
+ const filtered = eventType === 'all'
96
+ ? allEntries
97
+ : allEntries.filter((e) => e.type === eventType);
98
+ // Apply limit (most recent first after sort)
99
+ const limit = input.limit ?? 20;
100
+ const recent = filtered.slice(-limit).reverse();
101
+ if (recent.length === 0) {
102
+ return {
103
+ content: [
104
+ (0, format_js_1.textContent)(`📜 **Transaction History**\n\n` +
105
+ `No transactions found in the queried range.\n\n` +
106
+ ` Block range: ${fromBlock?.toString() ?? '0'} → ${toBlock?.toString() ?? 'latest'}\n` +
107
+ ` Event type: ${eventType}\n\n` +
108
+ `Try expanding the from_block range for older history.`),
109
+ ],
110
+ };
111
+ }
112
+ let out = `📜 **Transaction History** (${recent.length} entries)\n`;
113
+ out += ` Chain: ${(0, format_js_1.chainName)(config.chainId)}\n`;
114
+ out += ` Block range: ${fromBlock?.toString() ?? '0'} → ${toBlock?.toString() ?? 'latest'}\n`;
115
+ out += ` Filter: ${eventType}\n\n`;
116
+ for (const entry of recent) {
117
+ out += formatActivityEntry(entry, config.chainId);
118
+ out += '\n';
119
+ }
120
+ return { content: [(0, format_js_1.textContent)(out)] };
121
+ }
122
+ catch (error) {
123
+ return {
124
+ content: [(0, format_js_1.textContent)((0, format_js_1.formatError)(error, 'get_transaction_history'))],
125
+ isError: true,
126
+ };
127
+ }
128
+ }
129
+ // ─── Entry formatter ───────────────────────────────────────────────────────
130
+ function formatActivityEntry(entry, chainId) {
131
+ const emoji = typeEmoji(entry.type);
132
+ const label = typeLabel(entry.type);
133
+ const txUrl = (0, format_js_1.explorerTxUrl)(entry.transactionHash, chainId);
134
+ let out = `${emoji} **${label}**\n`;
135
+ out += ` Block: ${entry.blockNumber.toString()}\n`;
136
+ out += ` TX: ${entry.transactionHash}\n`;
137
+ out += ` 🔗 ${txUrl}\n`;
138
+ // Format args based on type
139
+ const args = entry.args;
140
+ if (entry.type === 'execution' && args) {
141
+ if (args['target'])
142
+ out += ` To: ${args['target']}\n`;
143
+ if (args['value'] !== undefined)
144
+ out += ` Value: ${(0, format_js_1.formatEth)(BigInt(String(args['value'])))}\n`;
145
+ if (args['executor'])
146
+ out += ` By: ${args['executor']}\n`;
147
+ }
148
+ if (entry.type === 'queued' && args) {
149
+ if (args['txId'] !== undefined)
150
+ out += ` Queue ID: ${args['txId']}\n`;
151
+ if (args['to'])
152
+ out += ` To: ${args['to']}\n`;
153
+ if (args['value'] !== undefined)
154
+ out += ` Value: ${(0, format_js_1.formatEth)(BigInt(String(args['value'])))}\n`;
155
+ }
156
+ if (entry.type === 'approved' && args) {
157
+ if (args['txId'] !== undefined)
158
+ out += ` Queue ID: ${args['txId']}\n`;
159
+ }
160
+ if (entry.type === 'cancelled' && args) {
161
+ if (args['txId'] !== undefined)
162
+ out += ` Queue ID: ${args['txId']}\n`;
163
+ }
164
+ if (entry.type === 'policy_update' && args) {
165
+ if (args['token'])
166
+ out += ` Token: ${args['token']}\n`;
167
+ if (args['perTxLimit'] !== undefined)
168
+ out += ` Per-tx: ${(0, format_js_1.formatEth)(BigInt(String(args['perTxLimit'])))}\n`;
169
+ if (args['periodLimit'] !== undefined)
170
+ out += ` Period: ${(0, format_js_1.formatEth)(BigInt(String(args['periodLimit'])))}\n`;
171
+ }
172
+ if (entry.type === 'operator_update' && args) {
173
+ if (args['operator'])
174
+ out += ` Operator: ${args['operator']}\n`;
175
+ if (args['authorized'] !== undefined)
176
+ out += ` Status: ${args['authorized'] ? '✅ Added' : '❌ Removed'}\n`;
177
+ }
178
+ return out;
179
+ }
180
+ function typeEmoji(type) {
181
+ const map = {
182
+ execution: '⚡',
183
+ queued: '⏳',
184
+ approved: '✅',
185
+ cancelled: '🚫',
186
+ policy_update: '📋',
187
+ operator_update: '🔑',
188
+ };
189
+ return map[type] ?? '📄';
190
+ }
191
+ function typeLabel(type) {
192
+ const map = {
193
+ execution: 'Transaction Executed',
194
+ queued: 'Transaction Queued',
195
+ approved: 'Transaction Approved',
196
+ cancelled: 'Transaction Cancelled',
197
+ policy_update: 'Spend Policy Updated',
198
+ operator_update: 'Operator Updated',
199
+ };
200
+ return map[type] ?? type;
201
+ }
202
+ //# sourceMappingURL=history.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"history.js","sourceRoot":"","sources":["../../src/tools/history.ts"],"names":[],"mappings":"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"}