web3-tools-mcp 1.0.1 → 1.2.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 (93) hide show
  1. package/README.md +46 -230
  2. package/dist/package.json +63 -0
  3. package/dist/src/client.d.ts +1653 -0
  4. package/dist/src/client.d.ts.map +1 -0
  5. package/dist/src/client.js +142 -0
  6. package/dist/src/client.js.map +1 -0
  7. package/dist/src/index.d.ts +3 -0
  8. package/dist/src/index.d.ts.map +1 -0
  9. package/dist/src/index.js +88 -0
  10. package/dist/src/index.js.map +1 -0
  11. package/dist/src/tools/advanced.d.ts +75 -0
  12. package/dist/src/tools/advanced.d.ts.map +1 -0
  13. package/dist/src/tools/advanced.js +234 -0
  14. package/dist/src/tools/advanced.js.map +1 -0
  15. package/dist/src/tools/balance.d.ts +55 -0
  16. package/dist/src/tools/balance.d.ts.map +1 -0
  17. package/dist/src/tools/balance.js +146 -0
  18. package/dist/src/tools/balance.js.map +1 -0
  19. package/dist/src/tools/contract-info.d.ts +79 -0
  20. package/dist/src/tools/contract-info.d.ts.map +1 -0
  21. package/dist/src/tools/contract-info.js +450 -0
  22. package/dist/src/tools/contract-info.js.map +1 -0
  23. package/dist/src/tools/contract.d.ts +79 -0
  24. package/dist/src/tools/contract.d.ts.map +1 -0
  25. package/dist/src/tools/contract.js +140 -0
  26. package/dist/src/tools/contract.js.map +1 -0
  27. package/dist/src/tools/ens.d.ts +119 -0
  28. package/dist/src/tools/ens.d.ts.map +1 -0
  29. package/dist/src/tools/ens.js +425 -0
  30. package/dist/src/tools/ens.js.map +1 -0
  31. package/dist/src/tools/index.d.ts +3 -0
  32. package/dist/src/tools/index.d.ts.map +1 -0
  33. package/dist/src/tools/index.js +29 -0
  34. package/dist/src/tools/index.js.map +1 -0
  35. package/dist/src/tools/logs.d.ts +39 -0
  36. package/dist/src/tools/logs.d.ts.map +1 -0
  37. package/dist/src/tools/logs.js +231 -0
  38. package/dist/src/tools/logs.js.map +1 -0
  39. package/dist/src/tools/signatures.d.ts +83 -0
  40. package/dist/src/tools/signatures.d.ts.map +1 -0
  41. package/dist/src/tools/signatures.js +93 -0
  42. package/dist/src/tools/signatures.js.map +1 -0
  43. package/dist/src/types.d.ts +22 -0
  44. package/dist/src/types.d.ts.map +1 -0
  45. package/dist/src/types.js +2 -0
  46. package/dist/src/types.js.map +1 -0
  47. package/dist/src/utils.d.ts +22 -0
  48. package/dist/src/utils.d.ts.map +1 -0
  49. package/dist/src/utils.js +183 -0
  50. package/dist/src/utils.js.map +1 -0
  51. package/dist/test/tools/advanced.test.d.ts +2 -0
  52. package/dist/test/tools/advanced.test.d.ts.map +1 -0
  53. package/dist/test/tools/advanced.test.js +235 -0
  54. package/dist/test/tools/advanced.test.js.map +1 -0
  55. package/dist/test/tools/balance.test.d.ts +2 -0
  56. package/dist/test/tools/balance.test.d.ts.map +1 -0
  57. package/dist/test/tools/balance.test.js +167 -0
  58. package/dist/test/tools/balance.test.js.map +1 -0
  59. package/dist/test/tools/contract-info.test.d.ts +2 -0
  60. package/dist/test/tools/contract-info.test.d.ts.map +1 -0
  61. package/dist/test/tools/contract-info.test.js +286 -0
  62. package/dist/test/tools/contract-info.test.js.map +1 -0
  63. package/dist/test/tools/contract.test.d.ts +2 -0
  64. package/dist/test/tools/contract.test.d.ts.map +1 -0
  65. package/dist/test/tools/contract.test.js +234 -0
  66. package/dist/test/tools/contract.test.js.map +1 -0
  67. package/dist/test/tools/ens.test.d.ts +2 -0
  68. package/dist/test/tools/ens.test.d.ts.map +1 -0
  69. package/dist/test/tools/ens.test.js +236 -0
  70. package/dist/test/tools/ens.test.js.map +1 -0
  71. package/dist/test/tools/logs.test.d.ts +2 -0
  72. package/dist/test/tools/logs.test.d.ts.map +1 -0
  73. package/dist/test/tools/logs.test.js +196 -0
  74. package/dist/test/tools/logs.test.js.map +1 -0
  75. package/dist/test/tools/signatures.test.d.ts +2 -0
  76. package/dist/test/tools/signatures.test.d.ts.map +1 -0
  77. package/dist/test/tools/signatures.test.js +112 -0
  78. package/dist/test/tools/signatures.test.js.map +1 -0
  79. package/package.json +37 -22
  80. package/src/client.ts +160 -0
  81. package/src/index.ts +96 -0
  82. package/src/tools/advanced.ts +262 -0
  83. package/src/tools/balance.ts +176 -0
  84. package/src/tools/contract-info.ts +582 -0
  85. package/src/tools/contract.ts +180 -0
  86. package/src/tools/ens.ts +493 -0
  87. package/src/tools/index.ts +37 -0
  88. package/src/tools/logs.ts +291 -0
  89. package/src/tools/signatures.ts +126 -0
  90. package/src/types.ts +29 -0
  91. package/src/utils.ts +222 -0
  92. package/dist/hypersync-client.darwin-arm64-7fegfwn5.node +0 -0
  93. package/dist/index.js +0 -28282
@@ -0,0 +1,183 @@
1
+ // Create tool helper
2
+ export function createTool(title, description, schema, handler) {
3
+ return {
4
+ title,
5
+ description,
6
+ schema,
7
+ handler
8
+ };
9
+ }
10
+ // Convert BigInt values to strings for JSON serialization
11
+ export function convertBigIntToString(obj) {
12
+ if (typeof obj === 'bigint') {
13
+ return obj.toString();
14
+ }
15
+ if (Array.isArray(obj)) {
16
+ return obj.map(item => convertBigIntToString(item));
17
+ }
18
+ if (obj && typeof obj === 'object') {
19
+ const converted = {};
20
+ for (const [key, value] of Object.entries(obj)) {
21
+ converted[key] = convertBigIntToString(value);
22
+ }
23
+ return converted;
24
+ }
25
+ return obj;
26
+ }
27
+ // Convert arguments to appropriate types based on ABI
28
+ export function convertArgumentsToTypes(args, abiInputs) {
29
+ return args.map((arg, index) => {
30
+ if (index >= abiInputs.length) {
31
+ throw new Error(`Too many arguments provided. Expected ${abiInputs.length}, got ${args.length}`);
32
+ }
33
+ const param = abiInputs[index];
34
+ if (!param?.type) {
35
+ throw new Error(`Missing type information for parameter at index ${index}`);
36
+ }
37
+ const paramType = param.type;
38
+ // Handle null values
39
+ if (arg === null) {
40
+ return null;
41
+ }
42
+ // Handle different parameter types
43
+ if (paramType === 'address') {
44
+ return String(arg);
45
+ }
46
+ if (paramType === 'bool') {
47
+ if (typeof arg === 'boolean')
48
+ return arg;
49
+ if (typeof arg === 'string')
50
+ return arg.toLowerCase() === 'true';
51
+ return Boolean(arg);
52
+ }
53
+ if (paramType.startsWith('uint') || paramType.startsWith('int')) {
54
+ if (typeof arg === 'number')
55
+ return BigInt(arg);
56
+ if (typeof arg === 'string')
57
+ return BigInt(arg);
58
+ throw new Error(`Invalid type for ${paramType}: ${typeof arg}`);
59
+ }
60
+ if (paramType === 'string') {
61
+ return String(arg);
62
+ }
63
+ if (paramType === 'bytes' || paramType.startsWith('bytes')) {
64
+ return String(arg);
65
+ }
66
+ // For other types, try to convert appropriately
67
+ if (typeof arg === 'string' && arg.startsWith('0x')) {
68
+ return arg; // Assume it's already properly formatted
69
+ }
70
+ return arg;
71
+ });
72
+ }
73
+ // Convert event arguments to appropriate types
74
+ export function convertEventArgsToTypes(eventArgs, abiInputs) {
75
+ const converted = {};
76
+ for (const [argName, argValue] of Object.entries(eventArgs)) {
77
+ // Find the parameter definition for this argument name
78
+ const param = abiInputs.find(input => input.name === argName);
79
+ if (!param) {
80
+ throw new Error(`Parameter '${argName}' not found in event ABI`);
81
+ }
82
+ if (!param.type) {
83
+ throw new Error(`Missing type information for parameter '${argName}'`);
84
+ }
85
+ const paramType = param.type;
86
+ // Handle null/undefined values
87
+ if (argValue === null || argValue === undefined) {
88
+ converted[argName] = null;
89
+ continue;
90
+ }
91
+ // Handle different parameter types
92
+ if (paramType === 'address') {
93
+ converted[argName] = String(argValue);
94
+ }
95
+ else if (paramType === 'bool') {
96
+ if (typeof argValue === 'boolean') {
97
+ converted[argName] = argValue;
98
+ }
99
+ else if (typeof argValue === 'string') {
100
+ converted[argName] = argValue.toLowerCase() === 'true';
101
+ }
102
+ else {
103
+ converted[argName] = Boolean(argValue);
104
+ }
105
+ }
106
+ else if (paramType.startsWith('uint') || paramType.startsWith('int')) {
107
+ if (typeof argValue === 'number') {
108
+ converted[argName] = BigInt(argValue);
109
+ }
110
+ else if (typeof argValue === 'string') {
111
+ converted[argName] = BigInt(argValue);
112
+ }
113
+ else {
114
+ throw new Error(`Invalid type for ${paramType}: ${typeof argValue}`);
115
+ }
116
+ }
117
+ else if (paramType === 'string') {
118
+ converted[argName] = String(argValue);
119
+ }
120
+ else if (paramType === 'bytes' || paramType.startsWith('bytes')) {
121
+ converted[argName] = String(argValue);
122
+ }
123
+ else {
124
+ // For other types, handle arrays and try to convert appropriately
125
+ if (Array.isArray(argValue)) {
126
+ converted[argName] = argValue;
127
+ }
128
+ else if (typeof argValue === 'string' && argValue.startsWith('0x')) {
129
+ converted[argName] = argValue; // Assume it's already properly formatted
130
+ }
131
+ else {
132
+ converted[argName] = argValue;
133
+ }
134
+ }
135
+ }
136
+ return converted;
137
+ }
138
+ // Format response as tool result
139
+ export function formatResponse(data) {
140
+ const serializable = convertBigIntToString(data);
141
+ return {
142
+ content: [
143
+ {
144
+ type: 'text',
145
+ text: JSON.stringify(serializable, null, 2)
146
+ }
147
+ ]
148
+ };
149
+ }
150
+ // Parse command line arguments
151
+ export function parseCommandLineArgs() {
152
+ const config = {};
153
+ function getArgValue(argName) {
154
+ const args = process.argv;
155
+ const index = args.findIndex(arg => arg === argName);
156
+ return index !== -1 && index + 1 < args.length ? args[index + 1] : undefined;
157
+ }
158
+ function hasArg(argName) {
159
+ return process.argv.includes(argName);
160
+ }
161
+ // Check for help flag
162
+ if (hasArg('--help') || hasArg('-h')) {
163
+ config.showHelp = true;
164
+ return config;
165
+ }
166
+ // Parse environment variables and command line arguments
167
+ config.etherscanApiKey = process.env.ETHERSCAN_API_KEY || getArgValue('--etherscan-api-key');
168
+ config.alchemyApiKey = process.env.ALCHEMY_API_KEY || getArgValue('--alchemy-api-key');
169
+ config.infuraApiKey = process.env.INFURA_API_KEY || getArgValue('--infura-api-key');
170
+ config.hypersyncApiKey = process.env.HYPERSYNC_API_KEY || getArgValue('--hypersync-api-key');
171
+ // Parse custom RPC URLs
172
+ const customRpcs = getArgValue('--custom-rpc');
173
+ if (customRpcs) {
174
+ try {
175
+ config.customRpcUrls = JSON.parse(customRpcs);
176
+ }
177
+ catch {
178
+ console.error('Invalid JSON for --custom-rpc:', customRpcs);
179
+ }
180
+ }
181
+ return config;
182
+ }
183
+ //# sourceMappingURL=utils.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"utils.js","sourceRoot":"","sources":["../../src/utils.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=advanced.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"advanced.test.d.ts","sourceRoot":"","sources":["../../../test/tools/advanced.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,235 @@
1
+ import { describe, it, expect, beforeAll } from 'vitest';
2
+ import { config } from 'dotenv';
3
+ import { initializeClientManager } from '../../src/client.js';
4
+ import advancedTools from '../../src/tools/advanced.js';
5
+ // Load environment variables
6
+ config();
7
+ describe('Advanced Tools', () => {
8
+ beforeAll(() => {
9
+ // Initialize client manager with config
10
+ initializeClientManager({
11
+ alchemyApiKey: process.env.ALCHEMY_API_KEY,
12
+ infuraApiKey: process.env.INFURA_API_KEY,
13
+ etherscanApiKey: process.env.ETHERSCAN_API_KEY,
14
+ hypersyncApiKey: process.env.HYPERSYNC_API_KEY
15
+ });
16
+ });
17
+ describe('get_storage_at', () => {
18
+ it('should read storage slot from USDC contract', async () => {
19
+ const USDC_CONTRACT = '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48';
20
+ const result = await advancedTools.get_storage_at.handler({
21
+ chain: 'mainnet',
22
+ address: USDC_CONTRACT,
23
+ slot: '0x0',
24
+ abiType: 'bytes32'
25
+ });
26
+ const data = JSON.parse(result.content[0].text);
27
+ expect(data.address).toBe(USDC_CONTRACT);
28
+ expect(data.slot).toBe('0x0');
29
+ expect(data.rawValue).toBeDefined();
30
+ expect(data.decodedValue).toBeDefined();
31
+ }, 30000);
32
+ it('should decode uint256 storage value', async () => {
33
+ const USDC_CONTRACT = '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48';
34
+ const result = await advancedTools.get_storage_at.handler({
35
+ chain: 'mainnet',
36
+ address: USDC_CONTRACT,
37
+ slot: '0x2', // totalSupply slot in USDC
38
+ abiType: 'uint256'
39
+ });
40
+ const data = JSON.parse(result.content[0].text);
41
+ expect(data.decodedValue).toBeDefined();
42
+ expect(typeof data.formattedValue).toBe('string');
43
+ }, 30000);
44
+ it('should decode address storage value', async () => {
45
+ const USDC_CONTRACT = '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48';
46
+ const result = await advancedTools.get_storage_at.handler({
47
+ chain: 'mainnet',
48
+ address: USDC_CONTRACT,
49
+ slot: '0xa', // owner/admin slot (approximate)
50
+ abiType: 'address'
51
+ });
52
+ const data = JSON.parse(result.content[0].text);
53
+ expect(data.decodedValue).toBeDefined();
54
+ // Should be an address format
55
+ if (data.decodedValue !== '0x0000000000000000000000000000000000000000') {
56
+ expect(data.decodedValue).toMatch(/^0x[a-fA-F0-9]{40}$/);
57
+ }
58
+ }, 30000);
59
+ it('should decode bool storage value', async () => {
60
+ const USDC_CONTRACT = '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48';
61
+ const result = await advancedTools.get_storage_at.handler({
62
+ chain: 'mainnet',
63
+ address: USDC_CONTRACT,
64
+ slot: '0xc', // paused slot (approximate)
65
+ abiType: 'bool'
66
+ });
67
+ const data = JSON.parse(result.content[0].text);
68
+ expect(data.decodedValue).toBeDefined();
69
+ expect(typeof data.decodedValue).toBe('boolean');
70
+ }, 30000);
71
+ it('should read storage at specific block number', async () => {
72
+ const USDC_CONTRACT = '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48';
73
+ const result = await advancedTools.get_storage_at.handler({
74
+ chain: 'mainnet',
75
+ address: USDC_CONTRACT,
76
+ slot: '0x0',
77
+ abiType: 'bytes32',
78
+ blockNumber: '18000000'
79
+ });
80
+ const data = JSON.parse(result.content[0].text);
81
+ expect(data.blockNumber).toBe('18000000');
82
+ }, 30000);
83
+ });
84
+ describe('get_block_info', () => {
85
+ it('should fetch latest block information', async () => {
86
+ const result = await advancedTools.get_block_info.handler({
87
+ chain: 'mainnet'
88
+ });
89
+ const data = JSON.parse(result.content[0].text);
90
+ expect(data.chain).toBe('mainnet');
91
+ expect(data.blockNumber).toBeDefined();
92
+ expect(data.hash).toBeDefined();
93
+ expect(data.timestamp).toBeDefined();
94
+ expect(data.dateIso).toBeDefined();
95
+ }, 30000);
96
+ it('should fetch specific block by number', async () => {
97
+ const BLOCK_NUMBER = '18000000';
98
+ const result = await advancedTools.get_block_info.handler({
99
+ chain: 'mainnet',
100
+ blockNumber: BLOCK_NUMBER
101
+ });
102
+ const data = JSON.parse(result.content[0].text);
103
+ expect(data.blockNumber).toBe(BLOCK_NUMBER);
104
+ expect(data.hash).toBeDefined();
105
+ expect(data.timestamp).toBeDefined();
106
+ expect(data.dateIso).toBeDefined();
107
+ }, 30000);
108
+ it('should include human-readable date', async () => {
109
+ const result = await advancedTools.get_block_info.handler({
110
+ chain: 'mainnet',
111
+ blockNumber: '18000000'
112
+ });
113
+ const data = JSON.parse(result.content[0].text);
114
+ expect(data.dateIso).toBeDefined();
115
+ expect(typeof data.dateIso).toBe('string');
116
+ // Should be ISO format
117
+ expect(data.dateIso).toMatch(/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}/);
118
+ }, 30000);
119
+ it('should work with different chains', async () => {
120
+ const result = await advancedTools.get_block_info.handler({
121
+ chain: 'base'
122
+ });
123
+ const data = JSON.parse(result.content[0].text);
124
+ expect(data.chain).toBe('base');
125
+ expect(data.blockNumber).toBeDefined();
126
+ }, 30000);
127
+ it('should include miner/validator information', async () => {
128
+ const result = await advancedTools.get_block_info.handler({
129
+ chain: 'mainnet',
130
+ blockNumber: '18000000'
131
+ });
132
+ const data = JSON.parse(result.content[0].text);
133
+ expect(data.parentHash).toBeDefined();
134
+ }, 30000);
135
+ });
136
+ describe('trace_transaction', () => {
137
+ it('should trace a simple ETH transfer transaction', async () => {
138
+ // A well-known simple ETH transfer
139
+ const TX_HASH = '0x5c504ed432cb51138bcf09aa5e8a410dd4a1e204ef84bfed1be16dfba1b22060';
140
+ const result = await advancedTools.trace_transaction.handler({
141
+ chain: 'mainnet',
142
+ transactionHash: TX_HASH,
143
+ traceType: 'trace'
144
+ });
145
+ const data = JSON.parse(result.content[0].text);
146
+ expect(data.transactionHash).toBe(TX_HASH);
147
+ expect(data.traceType).toBe('trace');
148
+ expect(data.trace).toBeDefined();
149
+ }, 30000);
150
+ it('should trace a contract interaction transaction', async () => {
151
+ // Use the same real transaction for consistency
152
+ const TX_HASH = '0x5c504ed432cb51138bcf09aa5e8a410dd4a1e204ef84bfed1be16dfba1b22060';
153
+ const result = await advancedTools.trace_transaction.handler({
154
+ chain: 'mainnet',
155
+ transactionHash: TX_HASH,
156
+ traceType: 'trace'
157
+ });
158
+ const data = JSON.parse(result.content[0].text);
159
+ expect(data).toBeDefined();
160
+ expect(data.transactionHash).toBe(TX_HASH);
161
+ expect(data.trace).toBeDefined();
162
+ }, 30000);
163
+ it('should handle vmTrace type', async () => {
164
+ const TX_HASH = '0x5c504ed432cb51138bcf09aa5e8a410dd4a1e204ef84bfed1be16dfba1b22060';
165
+ const result = await advancedTools.trace_transaction.handler({
166
+ chain: 'mainnet',
167
+ transactionHash: TX_HASH,
168
+ traceType: 'vmTrace'
169
+ });
170
+ const data = JSON.parse(result.content[0].text);
171
+ expect(data.transactionHash).toBe(TX_HASH);
172
+ expect(data.traceType).toBe('vmTrace');
173
+ }, 30000);
174
+ it('should handle stateDiff type', async () => {
175
+ const TX_HASH = '0x5c504ed432cb51138bcf09aa5e8a410dd4a1e204ef84bfed1be16dfba1b22060';
176
+ const result = await advancedTools.trace_transaction.handler({
177
+ chain: 'mainnet',
178
+ transactionHash: TX_HASH,
179
+ traceType: 'stateDiff'
180
+ });
181
+ const data = JSON.parse(result.content[0].text);
182
+ expect(data.transactionHash).toBe(TX_HASH);
183
+ expect(data.traceType).toBe('stateDiff');
184
+ }, 30000);
185
+ it('should include call hierarchy in trace', async () => {
186
+ const TX_HASH = '0x5c504ed432cb51138bcf09aa5e8a410dd4a1e204ef84bfed1be16dfba1b22060';
187
+ const result = await advancedTools.trace_transaction.handler({
188
+ chain: 'mainnet',
189
+ transactionHash: TX_HASH,
190
+ traceType: 'trace'
191
+ });
192
+ const data = JSON.parse(result.content[0].text);
193
+ expect(data.success).toBe(true);
194
+ if (data.trace && data.trace.length > 0) {
195
+ const trace = data.trace[0];
196
+ expect(trace.action).toBeDefined();
197
+ expect(trace.result).toBeDefined();
198
+ expect(trace.type).toBeDefined();
199
+ }
200
+ }, 30000);
201
+ it.skip('should handle failed transactions', async () => {
202
+ // Skipping: would need a real failed transaction hash
203
+ const TX_HASH = '0x1234567890abcdef1234567890abcdef1234567890abcdef1234567890abcdef';
204
+ try {
205
+ await advancedTools.trace_transaction.handler({
206
+ chain: 'mainnet',
207
+ transactionHash: TX_HASH,
208
+ traceType: 'trace'
209
+ });
210
+ }
211
+ catch (error) {
212
+ expect(error).toBeDefined();
213
+ }
214
+ }, 30000);
215
+ it.skip('should work with different chains', async () => {
216
+ // Skipping: would need a real Base transaction hash
217
+ const TX_HASH = '0x5c504ed432cb51138bcf09aa5e8a410dd4a1e204ef84bfed1be16dfba1b22060';
218
+ try {
219
+ const result = await advancedTools.trace_transaction.handler({
220
+ chain: 'base',
221
+ transactionHash: TX_HASH,
222
+ traceType: 'trace'
223
+ });
224
+ const data = JSON.parse(result.content[0].text);
225
+ expect(data.transactionHash).toBe(TX_HASH);
226
+ expect(data.chain).toBe('base');
227
+ }
228
+ catch (error) {
229
+ // Transaction might not exist on Base
230
+ expect(error).toBeDefined();
231
+ }
232
+ }, 30000);
233
+ });
234
+ });
235
+ //# sourceMappingURL=advanced.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"advanced.test.js","sourceRoot":"","sources":["../../../test/tools/advanced.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=balance.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"balance.test.d.ts","sourceRoot":"","sources":["../../../test/tools/balance.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,167 @@
1
+ import { describe, it, expect, beforeAll } from 'vitest';
2
+ import { config } from 'dotenv';
3
+ import { initializeClientManager } from '../../src/client.js';
4
+ import balanceTools from '../../src/tools/balance.js';
5
+ // Load environment variables
6
+ config();
7
+ describe('Balance Tools', () => {
8
+ beforeAll(() => {
9
+ // Initialize client manager with config
10
+ initializeClientManager({
11
+ alchemyApiKey: process.env.ALCHEMY_API_KEY,
12
+ infuraApiKey: process.env.INFURA_API_KEY,
13
+ etherscanApiKey: process.env.ETHERSCAN_API_KEY,
14
+ hypersyncApiKey: process.env.HYPERSYNC_API_KEY
15
+ });
16
+ });
17
+ describe('get_balance', () => {
18
+ it('should fetch native ETH balance for an address', async () => {
19
+ const VITALIK_ADDRESS = '0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045';
20
+ const result = await balanceTools.get_balance.handler({
21
+ queries: [
22
+ {
23
+ chain: 'mainnet',
24
+ address: VITALIK_ADDRESS
25
+ }
26
+ ]
27
+ });
28
+ const data = JSON.parse(result.content[0].text);
29
+ expect(data.success).toBe(true);
30
+ expect(data.results).toHaveLength(1);
31
+ expect(data.results[0].success).toBe(true);
32
+ expect(data.results[0].address).toBe(VITALIK_ADDRESS);
33
+ expect(data.results[0].chain).toBe('mainnet');
34
+ expect(data.results[0].balance).toBeDefined();
35
+ expect(data.results[0].balanceFormatted).toBeDefined();
36
+ }, 30000);
37
+ it('should fetch ERC20 token balance (USDC)', async () => {
38
+ const USDC_CONTRACT = '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48';
39
+ const HOLDER_ADDRESS = '0x28C6c06298d514Db089934071355E5743bf21d60'; // Binance 14
40
+ const result = await balanceTools.get_balance.handler({
41
+ queries: [
42
+ {
43
+ chain: 'mainnet',
44
+ address: HOLDER_ADDRESS,
45
+ tokenAddress: USDC_CONTRACT
46
+ }
47
+ ]
48
+ });
49
+ const data = JSON.parse(result.content[0].text);
50
+ expect(data.success).toBe(true);
51
+ expect(data.results).toHaveLength(1);
52
+ expect(data.results[0].success).toBe(true);
53
+ expect(data.results[0].address).toBe(HOLDER_ADDRESS);
54
+ expect(data.results[0].tokenAddress).toBe(USDC_CONTRACT);
55
+ expect(data.results[0].balance).toBeDefined();
56
+ expect(data.results[0].balanceFormatted).toBeDefined();
57
+ expect(data.results[0].decimals).toBe(6);
58
+ expect(BigInt(data.results[0].balance)).toBeGreaterThan(0n);
59
+ }, 30000);
60
+ it('should handle batch queries efficiently', async () => {
61
+ const VITALIK_ADDRESS = '0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045';
62
+ const USDC_CONTRACT = '0xa0b86991c6218b36c1d19d4a2e9eb0ce3606eb48';
63
+ const result = await balanceTools.get_balance.handler({
64
+ queries: [
65
+ {
66
+ chain: 'mainnet',
67
+ address: VITALIK_ADDRESS,
68
+ label: 'Vitalik ETH'
69
+ },
70
+ {
71
+ chain: 'mainnet',
72
+ address: VITALIK_ADDRESS,
73
+ tokenAddress: USDC_CONTRACT,
74
+ label: 'Vitalik USDC'
75
+ }
76
+ ]
77
+ });
78
+ const data = JSON.parse(result.content[0].text);
79
+ expect(data.success).toBe(true);
80
+ expect(data.results).toHaveLength(2);
81
+ expect(data.results[0].label).toBe('Vitalik ETH');
82
+ expect(data.results[1].label).toBe('Vitalik USDC');
83
+ expect(data.results[1].decimals).toBe(6);
84
+ }, 30000);
85
+ it('should fetch balance at specific block number', async () => {
86
+ const VITALIK_ADDRESS = '0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045';
87
+ const BLOCK_NUMBER = '18000000';
88
+ const result = await balanceTools.get_balance.handler({
89
+ queries: [
90
+ {
91
+ chain: 'mainnet',
92
+ address: VITALIK_ADDRESS,
93
+ blockNumber: BLOCK_NUMBER
94
+ }
95
+ ]
96
+ });
97
+ const data = JSON.parse(result.content[0].text);
98
+ expect(data.success).toBe(true);
99
+ expect(data.results).toHaveLength(1);
100
+ expect(data.results[0].success).toBe(true);
101
+ expect(data.results[0].blockNumber).toBe(BLOCK_NUMBER);
102
+ expect(data.results[0].balance).toBeDefined();
103
+ }, 30000);
104
+ it('should handle zero balance addresses', async () => {
105
+ // Use an address that's extremely unlikely to have balance
106
+ const ZERO_ADDRESS = '0x0000000000000000000000000000000000000002';
107
+ const result = await balanceTools.get_balance.handler({
108
+ queries: [
109
+ {
110
+ chain: 'mainnet',
111
+ address: ZERO_ADDRESS
112
+ }
113
+ ]
114
+ });
115
+ const data = JSON.parse(result.content[0].text);
116
+ expect(data.success).toBe(true);
117
+ expect(data.results).toHaveLength(1);
118
+ expect(data.results[0].success).toBe(true);
119
+ // Balance might be 0 or very small
120
+ expect(data.results[0].balance).toBeDefined();
121
+ expect(data.results[0].balanceFormatted).toBeDefined();
122
+ }, 30000);
123
+ it('should handle invalid token address gracefully', async () => {
124
+ const VITALIK_ADDRESS = '0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045';
125
+ const INVALID_TOKEN = '0x0000000000000000000000000000000000000001';
126
+ const result = await balanceTools.get_balance.handler({
127
+ queries: [
128
+ {
129
+ chain: 'mainnet',
130
+ address: VITALIK_ADDRESS,
131
+ tokenAddress: INVALID_TOKEN
132
+ }
133
+ ]
134
+ });
135
+ const data = JSON.parse(result.content[0].text);
136
+ expect(data.success).toBe(true);
137
+ expect(data.results).toHaveLength(1);
138
+ // Should either succeed with 0 balance or fail gracefully
139
+ expect(data.results[0]).toHaveProperty('success');
140
+ }, 30000);
141
+ it('should work across different chains', async () => {
142
+ const TEST_ADDRESS = '0xd8dA6BF26964aF9D7eEd9e03E53415D37aA96045';
143
+ const result = await balanceTools.get_balance.handler({
144
+ queries: [
145
+ {
146
+ chain: 'mainnet',
147
+ address: TEST_ADDRESS,
148
+ label: 'Ethereum'
149
+ },
150
+ {
151
+ chain: 'base',
152
+ address: TEST_ADDRESS,
153
+ label: 'Base'
154
+ }
155
+ ]
156
+ });
157
+ const data = JSON.parse(result.content[0].text);
158
+ expect(data.success).toBe(true);
159
+ expect(data.results).toHaveLength(2);
160
+ expect(data.results[0].chain).toBe('mainnet');
161
+ expect(data.results[0].label).toBe('Ethereum');
162
+ expect(data.results[1].chain).toBe('base');
163
+ expect(data.results[1].label).toBe('Base');
164
+ }, 30000);
165
+ });
166
+ });
167
+ //# sourceMappingURL=balance.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"balance.test.js","sourceRoot":"","sources":["../../../test/tools/balance.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=contract-info.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"contract-info.test.d.ts","sourceRoot":"","sources":["../../../test/tools/contract-info.test.ts"],"names":[],"mappings":""}