web3-tools-mcp 1.6.0 → 2.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.
- package/CHANGELOG.md +95 -0
- package/README.md +328 -234
- package/dist/anvil.d.ts +1 -1
- package/dist/anvil.d.ts.map +1 -1
- package/dist/anvil.js +11 -9
- package/dist/anvil.js.map +1 -1
- package/dist/chain-meta.d.ts.map +1 -1
- package/dist/chain-meta.js +7 -3
- package/dist/chain-meta.js.map +1 -1
- package/dist/chains.d.ts +960 -0
- package/dist/chains.d.ts.map +1 -0
- package/dist/chains.js +108 -0
- package/dist/chains.js.map +1 -0
- package/dist/client.d.ts +10 -1717
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +33 -218
- package/dist/client.js.map +1 -1
- package/dist/http-server.d.ts +6 -0
- package/dist/http-server.d.ts.map +1 -1
- package/dist/http-server.js +55 -40
- package/dist/http-server.js.map +1 -1
- package/dist/index.js +50 -29
- package/dist/index.js.map +1 -1
- package/dist/oauth.d.ts +31 -0
- package/dist/oauth.d.ts.map +1 -0
- package/dist/oauth.js +227 -0
- package/dist/oauth.js.map +1 -0
- package/dist/preview.d.ts.map +1 -1
- package/dist/preview.js +2 -2
- package/dist/preview.js.map +1 -1
- package/dist/tools/advanced.d.ts +4 -4
- package/dist/tools/advanced.d.ts.map +1 -1
- package/dist/tools/advanced.js +228 -247
- package/dist/tools/advanced.js.map +1 -1
- package/dist/tools/balance.d.ts +1 -1
- package/dist/tools/balance.d.ts.map +1 -1
- package/dist/tools/balance.js +97 -103
- package/dist/tools/balance.js.map +1 -1
- package/dist/tools/contract-info.d.ts +3 -3
- package/dist/tools/contract-info.d.ts.map +1 -1
- package/dist/tools/contract-info.js +150 -161
- package/dist/tools/contract-info.js.map +1 -1
- package/dist/tools/contract.d.ts +4 -4
- package/dist/tools/contract.d.ts.map +1 -1
- package/dist/tools/contract.js +91 -110
- package/dist/tools/contract.js.map +1 -1
- package/dist/tools/ens.d.ts +6 -6
- package/dist/tools/ens.d.ts.map +1 -1
- package/dist/tools/ens.js +239 -297
- package/dist/tools/ens.js.map +1 -1
- package/dist/tools/gas.d.ts +4 -4
- package/dist/tools/gas.d.ts.map +1 -1
- package/dist/tools/gas.js +90 -138
- package/dist/tools/gas.js.map +1 -1
- package/dist/tools/index.d.ts +1 -1
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/logs.d.ts +1 -1
- package/dist/tools/logs.d.ts.map +1 -1
- package/dist/tools/logs.js +36 -37
- package/dist/tools/logs.js.map +1 -1
- package/dist/tools/signatures.d.ts.map +1 -1
- package/dist/tools/signatures.js +67 -89
- package/dist/tools/signatures.js.map +1 -1
- package/dist/tools/transactions.d.ts +35 -5
- package/dist/tools/transactions.d.ts.map +1 -1
- package/dist/tools/transactions.js +148 -74
- package/dist/tools/transactions.js.map +1 -1
- package/dist/types.d.ts +1 -1
- package/dist/types.d.ts.map +1 -1
- package/dist/utils.d.ts +1 -1
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +35 -98
- package/dist/utils.js.map +1 -1
- package/dist/wallet-client.d.ts +11 -1
- package/dist/wallet-client.d.ts.map +1 -1
- package/dist/wallet-client.js +27 -9
- package/dist/wallet-client.js.map +1 -1
- package/dist/walletconnect.d.ts +22 -1
- package/dist/walletconnect.d.ts.map +1 -1
- package/dist/walletconnect.js +101 -8
- package/dist/walletconnect.js.map +1 -1
- package/package.json +17 -9
- package/src/anvil.ts +15 -18
- package/src/chain-meta.ts +8 -4
- package/src/chains.ts +145 -0
- package/src/client.ts +39 -254
- package/src/http-server.ts +67 -44
- package/src/index.ts +77 -53
- package/src/oauth.ts +270 -0
- package/src/preview.ts +3 -12
- package/src/tools/advanced.ts +195 -213
- package/src/tools/balance.ts +103 -108
- package/src/tools/contract-info.ts +163 -184
- package/src/tools/contract.ts +123 -144
- package/src/tools/ens.ts +290 -345
- package/src/tools/gas.ts +122 -170
- package/src/tools/index.ts +2 -2
- package/src/tools/logs.ts +45 -43
- package/src/tools/signatures.ts +68 -86
- package/src/tools/transactions.ts +194 -87
- package/src/types.ts +1 -15
- package/src/utils.ts +52 -110
- package/src/wallet-client.ts +31 -9
- package/src/walletconnect.ts +119 -7
|
@@ -1,12 +1,12 @@
|
|
|
1
|
+
import { randomBytes } from 'node:crypto';
|
|
2
|
+
import qrcode from 'qrcode-terminal';
|
|
3
|
+
import { encodeFunctionData, isAddress, parseAbiItem, parseUnits, toHex } from 'viem';
|
|
1
4
|
import { z } from 'zod';
|
|
2
|
-
import { getWalletClient } from '../wallet-client.js';
|
|
3
5
|
import { getClientManager, SUPPORTED_CHAINS } from '../client.js';
|
|
4
|
-
import { encodeFunctionData, isAddress, parseAbiItem, parseUnits, toHex } from 'viem';
|
|
5
|
-
import { randomBytes } from 'node:crypto';
|
|
6
6
|
import { buildTxPreview } from '../preview.js';
|
|
7
|
-
import { getPhoneSigner } from '../walletconnect.js';
|
|
8
7
|
import { createTool, formatResponse } from '../utils.js';
|
|
9
|
-
import
|
|
8
|
+
import { getWalletClient } from '../wallet-client.js';
|
|
9
|
+
import { getPhoneSigner, pairingLinks } from '../walletconnect.js';
|
|
10
10
|
/** Render a pairing URI as an ASCII QR, so it can be scanned straight from the chat. */
|
|
11
11
|
function qrFor(uri) {
|
|
12
12
|
return new Promise((resolve) => qrcode.generate(uri, { small: true }, resolve));
|
|
@@ -20,27 +20,38 @@ function requireAddress(label, address) {
|
|
|
20
20
|
return address;
|
|
21
21
|
}
|
|
22
22
|
function explorerTxUrl(chain, txHash) {
|
|
23
|
-
return
|
|
23
|
+
return getClientManager().explorerUrl(chain, `/tx/${txHash}`);
|
|
24
24
|
}
|
|
25
25
|
/**
|
|
26
|
-
*
|
|
26
|
+
* Which wallet to send the request to. Deliberately required on every signing tool: both
|
|
27
|
+
* signers can be live at once, and only the person holding the devices knows which one is
|
|
28
|
+
* actually to hand. Guessing strands the request in front of a screen nobody is looking at.
|
|
27
29
|
*
|
|
28
|
-
*
|
|
29
|
-
*
|
|
30
|
-
* simulated first — the phone wallet shows its own summary, so the preview is returned to
|
|
31
|
-
* the caller as well, where it can be read before the prompt is approved.
|
|
30
|
+
* Either way the transaction is decoded and simulated first — the wallet shows its own
|
|
31
|
+
* summary, so the preview is returned to the caller too, to be read before approving.
|
|
32
32
|
*/
|
|
33
|
-
|
|
33
|
+
const SignWithSchema = z
|
|
34
|
+
.enum(['phone', 'browser'])
|
|
35
|
+
.describe('Where to approve this: "phone" for a paired WalletConnect wallet, "browser" for the wallet signing page. Ask the user which they want — do not assume, even when only one is connected. Call wallet_status first: it says which signers are ready, and when no signing page is open it returns walletUrl. In that case give the user that link, ask them to open it and connect a wallet, and only call this once they confirm — a signing request cannot reach a page nobody has open.');
|
|
36
|
+
async function signOnPhone(chain, tx) {
|
|
34
37
|
const phone = getPhoneSigner();
|
|
35
|
-
if (
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
{ from, to: tx.to, value: tx.value ?? '0x0', ...(tx.data && { data: tx.data }) }
|
|
41
|
-
]);
|
|
42
|
-
return { txHash, preview, signedWith: 'phone' };
|
|
38
|
+
if (!phone) {
|
|
39
|
+
throw new Error('Phone signing is not configured on this server. Set WALLETCONNECT_PROJECT_ID, or sign in the browser instead.');
|
|
40
|
+
}
|
|
41
|
+
if (!(await phone.isPaired())) {
|
|
42
|
+
throw new Error('No phone wallet is paired. Run pair_phone_wallet and scan the QR, or sign in the browser instead.');
|
|
43
43
|
}
|
|
44
|
+
const session = await phone.session();
|
|
45
|
+
const from = session?.accounts[0];
|
|
46
|
+
const preview = await buildTxPreview(chain, tx, from);
|
|
47
|
+
const txHash = await phone.request(chain, 'eth_sendTransaction', [
|
|
48
|
+
{ from, to: tx.to, value: tx.value ?? '0x0', ...(tx.data && { data: tx.data }) }
|
|
49
|
+
]);
|
|
50
|
+
return { txHash, preview, signedWith: 'phone' };
|
|
51
|
+
}
|
|
52
|
+
async function requestSignature(chain, tx, signWith) {
|
|
53
|
+
if (signWith === 'phone')
|
|
54
|
+
return signOnPhone(chain, tx);
|
|
44
55
|
const wallet = getWalletClient();
|
|
45
56
|
await wallet.waitForSigner();
|
|
46
57
|
const preview = await buildTxPreview(chain, tx, wallet.getAddress());
|
|
@@ -91,16 +102,17 @@ function failure(error, message) {
|
|
|
91
102
|
});
|
|
92
103
|
}
|
|
93
104
|
export default {
|
|
94
|
-
send_native_token: createTool('Send Native Token', 'Send native tokens (ETH, MATIC, BNB, etc.) to an address. Simulates the transaction, then
|
|
105
|
+
send_native_token: createTool('Send Native Token', 'Send native tokens (ETH, MATIC, BNB, etc.) to an address. Simulates the transaction, then sends it to the signer you choose for approval.', z.object({
|
|
95
106
|
chain: z.enum(SUPPORTED_CHAINS).describe('Blockchain network'),
|
|
96
107
|
to: z.string().describe('Recipient address'),
|
|
97
108
|
amount: z.string().describe('Amount in native token (e.g., "0.1" for 0.1 ETH)'),
|
|
98
|
-
data: z.string().optional().describe('Optional hex-encoded data to include with transaction')
|
|
109
|
+
data: z.string().optional().describe('Optional hex-encoded data to include with transaction'),
|
|
110
|
+
signWith: SignWithSchema
|
|
99
111
|
}), async (args) => {
|
|
100
112
|
try {
|
|
101
113
|
const to = requireAddress('recipient address', args.to);
|
|
102
114
|
const value = `0x${parseUnits(args.amount, 18).toString(16)}`;
|
|
103
|
-
const { txHash, preview, signedWith } = await requestSignature(args.chain, { to, value, data: args.data });
|
|
115
|
+
const { txHash, preview, signedWith } = await requestSignature(args.chain, { to, value, data: args.data }, args.signWith);
|
|
104
116
|
return formatResponse({
|
|
105
117
|
success: true,
|
|
106
118
|
chain: args.chain,
|
|
@@ -116,12 +128,13 @@ export default {
|
|
|
116
128
|
return failure(error, 'Transaction failed or was rejected');
|
|
117
129
|
}
|
|
118
130
|
}),
|
|
119
|
-
send_erc20_token: createTool('Send ERC20 Token', 'Send ERC20 tokens to an address. Simulates the transfer, then
|
|
131
|
+
send_erc20_token: createTool('Send ERC20 Token', 'Send ERC20 tokens to an address. Simulates the transfer, then sends it to the signer you choose for approval.', z.object({
|
|
120
132
|
chain: z.enum(SUPPORTED_CHAINS).describe('Blockchain network'),
|
|
121
133
|
tokenAddress: z.string().describe('ERC20 token contract address'),
|
|
122
134
|
to: z.string().describe('Recipient address'),
|
|
123
135
|
amount: z.string().describe('Amount in token units (e.g., "100" for 100 USDC)'),
|
|
124
|
-
decimals: z.number().optional().default(18).describe('Token decimals (default: 18)')
|
|
136
|
+
decimals: z.number().optional().default(18).describe('Token decimals (default: 18)'),
|
|
137
|
+
signWith: SignWithSchema
|
|
125
138
|
}), async (args) => {
|
|
126
139
|
try {
|
|
127
140
|
const tokenAddress = requireAddress('token address', args.tokenAddress);
|
|
@@ -130,7 +143,11 @@ export default {
|
|
|
130
143
|
abi: [parseAbiItem('function transfer(address to, uint256 amount)')],
|
|
131
144
|
args: [to, parseUnits(args.amount, args.decimals ?? 18)]
|
|
132
145
|
});
|
|
133
|
-
const { txHash, preview, signedWith } = await requestSignature(args.chain, {
|
|
146
|
+
const { txHash, preview, signedWith } = await requestSignature(args.chain, {
|
|
147
|
+
to: tokenAddress,
|
|
148
|
+
data,
|
|
149
|
+
value: '0x0'
|
|
150
|
+
}, args.signWith);
|
|
134
151
|
return formatResponse({
|
|
135
152
|
success: true,
|
|
136
153
|
chain: args.chain,
|
|
@@ -147,7 +164,7 @@ export default {
|
|
|
147
164
|
return failure(error, 'Token transfer failed or was rejected');
|
|
148
165
|
}
|
|
149
166
|
}),
|
|
150
|
-
|
|
167
|
+
write_contract: createTool('Write Contract', 'Send a transaction that calls a state-changing contract function. Simulates it first, then asks your wallet to approve. Costs gas.', z.object({
|
|
151
168
|
chain: z.enum(SUPPORTED_CHAINS).describe('Blockchain network'),
|
|
152
169
|
contractAddress: z.string().describe('Contract address'),
|
|
153
170
|
functionAbi: z.string().describe('Function ABI definition (e.g., "function transfer(address to, uint256 amount)")'),
|
|
@@ -155,7 +172,8 @@ export default {
|
|
|
155
172
|
.array(z.union([z.string(), z.number(), z.boolean()]))
|
|
156
173
|
.optional()
|
|
157
174
|
.describe('Function arguments in order matching the ABI signature'),
|
|
158
|
-
value: z.string().optional().describe('Optional native value to send with transaction (in ETH units, e.g., "0.1")')
|
|
175
|
+
value: z.string().optional().describe('Optional native value to send with transaction (in ETH units, e.g., "0.1")'),
|
|
176
|
+
signWith: SignWithSchema
|
|
159
177
|
}), async (args) => {
|
|
160
178
|
try {
|
|
161
179
|
const contractAddress = requireAddress('contract address', args.contractAddress);
|
|
@@ -166,7 +184,11 @@ export default {
|
|
|
166
184
|
args: (args.args || [])
|
|
167
185
|
});
|
|
168
186
|
const value = args.value ? `0x${parseUnits(args.value, 18).toString(16)}` : '0x0';
|
|
169
|
-
const { txHash, preview, signedWith } = await requestSignature(args.chain, {
|
|
187
|
+
const { txHash, preview, signedWith } = await requestSignature(args.chain, {
|
|
188
|
+
to: contractAddress,
|
|
189
|
+
data,
|
|
190
|
+
value
|
|
191
|
+
}, args.signWith);
|
|
170
192
|
return formatResponse({
|
|
171
193
|
success: true,
|
|
172
194
|
chain: args.chain,
|
|
@@ -182,26 +204,34 @@ export default {
|
|
|
182
204
|
return failure(error, 'Contract call failed or was rejected');
|
|
183
205
|
}
|
|
184
206
|
}),
|
|
185
|
-
sign_message: createTool('Sign Message', 'Sign a message with
|
|
186
|
-
message: z.string().describe('Message to sign')
|
|
207
|
+
sign_message: createTool('Sign Message', 'Sign a message with your wallet, on whichever signer you choose.', z.object({
|
|
208
|
+
message: z.string().describe('Message to sign'),
|
|
209
|
+
signWith: SignWithSchema
|
|
187
210
|
}), async (args) => {
|
|
188
211
|
try {
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
212
|
+
let signature;
|
|
213
|
+
if (args.signWith === 'phone') {
|
|
214
|
+
const phone = getPhoneSigner();
|
|
215
|
+
const session = await phone?.session();
|
|
216
|
+
if (!session) {
|
|
217
|
+
throw new Error('No phone wallet is paired. Run pair_phone_wallet and scan the QR, or sign in the browser instead.');
|
|
218
|
+
}
|
|
219
|
+
signature = await phone.request('mainnet', 'personal_sign', [toHex(args.message), session.accounts[0]]);
|
|
220
|
+
}
|
|
221
|
+
else {
|
|
222
|
+
await getWalletClient().waitForSigner();
|
|
223
|
+
signature = await getWalletClient().request({
|
|
195
224
|
id: generateRequestId(),
|
|
196
225
|
type: 'sign_message',
|
|
197
226
|
chain: 'any',
|
|
198
227
|
data: { message: args.message }
|
|
199
228
|
});
|
|
229
|
+
}
|
|
200
230
|
return formatResponse({
|
|
201
231
|
success: true,
|
|
202
232
|
message: args.message,
|
|
203
233
|
signature,
|
|
204
|
-
signedWith:
|
|
234
|
+
signedWith: args.signWith,
|
|
205
235
|
signatureType: 'personal_sign'
|
|
206
236
|
});
|
|
207
237
|
}
|
|
@@ -209,17 +239,25 @@ export default {
|
|
|
209
239
|
return failure(error, 'Message signing failed or was rejected');
|
|
210
240
|
}
|
|
211
241
|
}),
|
|
212
|
-
pair_phone_wallet: createTool('Pair Phone Wallet', 'Pair a phone wallet over WalletConnect, so transactions are signed on the phone instead of in a browser.
|
|
242
|
+
pair_phone_wallet: createTool('Pair Phone Wallet', 'Pair a phone wallet over WalletConnect, so transactions are signed on the phone instead of in a browser. ' +
|
|
243
|
+
'Returns a QR to scan plus links that open a wallet directly — show those to the user as clickable links. ' +
|
|
244
|
+
'Requires a WalletConnect project id.', z.object({
|
|
213
245
|
chains: z
|
|
214
246
|
.array(z.enum(SUPPORTED_CHAINS))
|
|
215
247
|
.optional()
|
|
216
|
-
.describe('Chains to request access to (defaults to every supported network)')
|
|
248
|
+
.describe('Chains to request access to (defaults to every supported network)'),
|
|
249
|
+
wallet: z.string().optional().describe('Name of the wallet to open, e.g. "rabby" — omit to list the common ones'),
|
|
250
|
+
agent: z
|
|
251
|
+
.string()
|
|
252
|
+
.optional()
|
|
253
|
+
.describe('Who is asking, shown in the wallet approval dialog, e.g. "Claude Code". Say who you actually are — ' +
|
|
254
|
+
'the user reads this when deciding whether to grant signing access.')
|
|
217
255
|
}), async (args) => {
|
|
218
256
|
const phone = getPhoneSigner();
|
|
219
257
|
if (!phone) {
|
|
220
258
|
return formatResponse({
|
|
221
259
|
success: false,
|
|
222
|
-
message: 'No WalletConnect project id configured. Get a free one at https://dashboard.
|
|
260
|
+
message: 'No WalletConnect project id configured. Get a free one at https://dashboard.walletconnect.com and pass --walletconnect-project-id or set WALLETCONNECT_PROJECT_ID.'
|
|
223
261
|
});
|
|
224
262
|
}
|
|
225
263
|
try {
|
|
@@ -233,55 +271,91 @@ export default {
|
|
|
233
271
|
});
|
|
234
272
|
}
|
|
235
273
|
const chains = (args.chains ?? SUPPORTED_CHAINS.filter((c) => c !== 'localhost'));
|
|
236
|
-
const uri = await phone.pair(chains);
|
|
274
|
+
const uri = await phone.pair(chains, args.agent);
|
|
275
|
+
const projectId = getClientManager().getConfig().walletConnectProjectId;
|
|
237
276
|
return formatResponse({
|
|
238
277
|
qr: await qrFor(uri),
|
|
239
278
|
uri,
|
|
240
|
-
|
|
241
|
-
|
|
279
|
+
// For an agent running on the phone itself there is nothing to scan, so hand over
|
|
280
|
+
// links that open the wallet directly. `wallet` narrows the list to one.
|
|
281
|
+
openOnThisDevice: await pairingLinks(projectId, uri, args.wallet),
|
|
282
|
+
// Approving grants an agent standing permission to request signatures, so the
|
|
283
|
+
// wallet dialog names the agent rather than implying a website is connecting.
|
|
284
|
+
shownInWallet: args.agent ? `${args.agent} via web3-tools-mcp` : 'web3-tools-mcp (AI agent)',
|
|
285
|
+
howToPresent: 'Render each openOnThisDevice entry as a clickable link labelled with the wallet name, and show the ' +
|
|
286
|
+
'uri as copyable text. On a phone that tap is the whole flow. Show the QR only when the user is on a ' +
|
|
287
|
+
'different device from their wallet — it is unreadable inline on the phone that holds the wallet. ' +
|
|
288
|
+
'If a link does nothing, some clients drop custom schemes like rabby://, so tell them to paste the uri.',
|
|
289
|
+
message: 'On another device: scan the QR with your wallet. On this device: tap one of the openOnThisDevice ' +
|
|
290
|
+
'links, or copy the uri and paste it into your wallet under WalletConnect — every wallet supports ' +
|
|
291
|
+
'that, and it is the one that always works. Then run wallet_status to confirm.'
|
|
242
292
|
});
|
|
243
293
|
}
|
|
244
294
|
catch (error) {
|
|
245
295
|
return failure(error, 'Could not start WalletConnect pairing');
|
|
246
296
|
}
|
|
247
297
|
}),
|
|
248
|
-
|
|
249
|
-
// A paired phone is the signer of record, so look there first. Connecting to the
|
|
250
|
-
// browser relay before checking would start one on a hosted server, which has no
|
|
251
|
-
// browser to open it in.
|
|
298
|
+
disconnect_phone_wallet: createTool('Disconnect Phone Wallet', 'End every WalletConnect session and drop the pairings underneath them. Use before pairing a different wallet, or to clear out attempts that were never approved.', z.object({}), async () => {
|
|
252
299
|
const phone = getPhoneSigner();
|
|
253
|
-
|
|
254
|
-
|
|
255
|
-
return formatResponse({
|
|
256
|
-
connected: true,
|
|
257
|
-
signer: 'phone',
|
|
258
|
-
address: phoneSession.accounts[0],
|
|
259
|
-
wallet: phoneSession.peer,
|
|
260
|
-
chains: phoneSession.chains,
|
|
261
|
-
message: 'A phone wallet is paired over WalletConnect. Transactions are sent there for signing.'
|
|
262
|
-
});
|
|
300
|
+
if (!phone) {
|
|
301
|
+
return formatResponse({ success: false, message: 'No WalletConnect project id configured — nothing to disconnect.' });
|
|
263
302
|
}
|
|
264
|
-
const wallet = getWalletClient();
|
|
265
303
|
try {
|
|
266
|
-
await
|
|
304
|
+
const before = await phone.sessions();
|
|
305
|
+
const removed = await phone.disconnectAll();
|
|
306
|
+
return formatResponse({
|
|
307
|
+
success: true,
|
|
308
|
+
disconnectedSessions: removed.sessions,
|
|
309
|
+
droppedPairings: removed.pairings,
|
|
310
|
+
wallets: before.map((session) => `${session.peer ?? 'unknown wallet'} (${session.accounts[0]})`),
|
|
311
|
+
message: removed.sessions || removed.pairings
|
|
312
|
+
? 'Disconnected. Transactions fall back to the browser wallet until a phone is paired again.'
|
|
313
|
+
: 'Nothing was connected.'
|
|
314
|
+
});
|
|
267
315
|
}
|
|
268
316
|
catch (error) {
|
|
269
|
-
return failure(error, '
|
|
317
|
+
return failure(error, 'Could not disconnect the phone wallet');
|
|
270
318
|
}
|
|
271
|
-
|
|
319
|
+
}),
|
|
320
|
+
wallet_status: createTool('Wallet Status', 'Report every signer and whether it is ready, so a signing tool can be given the right signWith.', z.object({}), async () => {
|
|
321
|
+
// Both signers are reported, never just the first one found: signWith makes this a
|
|
322
|
+
// choice the user owns, so the agent has to see everything available.
|
|
323
|
+
const phone = getPhoneSigner();
|
|
324
|
+
const phoneSession = await phone?.session().catch(() => undefined);
|
|
325
|
+
const wallet = getWalletClient();
|
|
326
|
+
const relayError = await wallet
|
|
327
|
+
.connect()
|
|
328
|
+
.then(() => undefined)
|
|
329
|
+
.catch((error) => describeError(error));
|
|
330
|
+
const browserReady = !relayError && wallet.isConnected();
|
|
331
|
+
// Only raise a tab when there is no other way to sign — a status check should not
|
|
332
|
+
// open a window at someone who is about to use their phone.
|
|
333
|
+
if (!browserReady && !phoneSession && !relayError)
|
|
272
334
|
wallet.openBrowser();
|
|
273
|
-
|
|
274
|
-
|
|
275
|
-
|
|
276
|
-
|
|
277
|
-
|
|
278
|
-
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
:
|
|
284
|
-
|
|
335
|
+
const signers = {
|
|
336
|
+
phone: phoneSession
|
|
337
|
+
? { ready: true, address: phoneSession.accounts[0], wallet: phoneSession.peer, chains: phoneSession.chains }
|
|
338
|
+
: {
|
|
339
|
+
ready: false,
|
|
340
|
+
reason: phone
|
|
341
|
+
? 'No phone paired. Run pair_phone_wallet and scan the QR.'
|
|
342
|
+
: 'Phone signing is not configured — set WALLETCONNECT_PROJECT_ID.'
|
|
343
|
+
},
|
|
344
|
+
browser: browserReady
|
|
345
|
+
? { ready: true, address: wallet.getAddress(), openTab: wallet.getPageUrl() }
|
|
346
|
+
: {
|
|
347
|
+
ready: false,
|
|
348
|
+
reason: relayError ?? 'No signing page is open.',
|
|
349
|
+
walletUrl: relayError ? undefined : wallet.getUrl()
|
|
350
|
+
}
|
|
351
|
+
};
|
|
352
|
+
const ready = [phoneSession ? 'phone' : undefined, browserReady ? 'browser' : undefined].filter(Boolean);
|
|
353
|
+
const message = ready.length === 2
|
|
354
|
+
? 'Both signers are ready. Ask the user which one to use, then pass it as signWith.'
|
|
355
|
+
: ready.length === 1
|
|
356
|
+
? `Only ${ready[0]} is ready. Confirm with the user before signing there, or set the other one up.`
|
|
357
|
+
: `No signer is ready. For a browser, give the user this link and ask them to open it and connect a wallet: ${signers.browser.walletUrl ?? '(relay unavailable)'}. For a phone, run pair_phone_wallet.`;
|
|
358
|
+
return formatResponse({ ready, signers, message });
|
|
285
359
|
})
|
|
286
360
|
};
|
|
287
361
|
//# sourceMappingURL=transactions.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"transactions.js","sourceRoot":"","sources":["../../src/tools/transactions.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"transactions.js","sourceRoot":"","sources":["../../src/tools/transactions.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -12,7 +12,7 @@ export interface Config {
|
|
|
12
12
|
hypersyncApiKey?: string;
|
|
13
13
|
walletConnectProjectId?: string;
|
|
14
14
|
}
|
|
15
|
-
export type ChainName
|
|
15
|
+
export type { ChainName } from './chains.js';
|
|
16
16
|
export interface ToolResult {
|
|
17
17
|
[x: string]: unknown;
|
|
18
18
|
content: Array<{
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,MAAM,CAAA;AAGxC,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,OAAO,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,SAAS,YAAY,EAAE,CAAA;CAChC;AAGD,MAAM,WAAW,MAAM;IACrB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACtC,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,sBAAsB,CAAC,EAAE,MAAM,CAAA;CAChC;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,MAAM,CAAA;AAGxC,MAAM,WAAW,QAAQ;IACvB,IAAI,EAAE,OAAO,CAAA;IACb,IAAI,EAAE,MAAM,CAAA;IACZ,MAAM,EAAE,SAAS,YAAY,EAAE,CAAA;CAChC;AAGD,MAAM,WAAW,MAAM;IACrB,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,YAAY,CAAC,EAAE,MAAM,CAAA;IACrB,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAA;IACtC,eAAe,CAAC,EAAE,MAAM,CAAA;IACxB,sBAAsB,CAAC,EAAE,MAAM,CAAA;CAChC;AAED,YAAY,EAAE,SAAS,EAAE,MAAM,aAAa,CAAA;AAG5C,MAAM,WAAW,UAAU;IACzB,CAAC,CAAC,EAAE,MAAM,GAAG,OAAO,CAAA;IACpB,OAAO,EAAE,KAAK,CAAC;QACb,IAAI,EAAE,MAAM,CAAA;QACZ,IAAI,EAAE,MAAM,CAAA;KACb,CAAC,CAAA;CACH"}
|
package/dist/utils.d.ts
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type { AbiParameter } from 'viem';
|
|
2
|
+
import type { z } from 'zod';
|
|
2
3
|
import type { Config, ToolResult } from './types.js';
|
|
3
|
-
import { z } from 'zod';
|
|
4
4
|
export declare function createTool<T extends z.ZodType>(title: string, description: string, schema: T, handler: (args: z.infer<T>) => Promise<ToolResult>): {
|
|
5
5
|
title: string;
|
|
6
6
|
description: string;
|
package/dist/utils.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,MAAM,CAAA;AACxC,OAAO,KAAK,EAAE,
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,MAAM,CAAA;AACxC,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAC5B,OAAO,KAAK,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,YAAY,CAAA;AAGpD,wBAAgB,UAAU,CAAC,CAAC,SAAS,CAAC,CAAC,OAAO,EAC5C,KAAK,EAAE,MAAM,EACb,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,CAAC,EACT,OAAO,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,UAAU,CAAC;;;;oBAAlC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,OAAO,CAAC,UAAU,CAAC;EAQnD;AAGD,wBAAgB,qBAAqB,CAAC,GAAG,EAAE,OAAO,GAAG,OAAO,CAe3D;AAGD,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAA;IACZ,IAAI,EAAE,MAAM,CAAA;IACZ,EAAE,EAAE,MAAM,CAAA;IACV,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,KAAK,EAAE,MAAM,CAAA;CACd;AAED,wBAAgB,cAAc,CAAC,KAAK,EAAE,OAAO,GAAG;IAAE,QAAQ,EAAE,OAAO,CAAC;IAAC,SAAS,EAAE,cAAc,EAAE,GAAG,IAAI,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAgCzH;AAgFD,wBAAgB,uBAAuB,CACrC,IAAI,EAAE,CAAC,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,IAAI,CAAC,EAAE,EAC1C,SAAS,EAAE,SAAS,YAAY,EAAE,GACjC,OAAO,EAAE,CAYX;AAED,wBAAgB,uBAAuB,CACrC,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAClC,SAAS,EAAE,SAAS,YAAY,EAAE,GACjC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAazB;AAGD,wBAAgB,cAAc,CAAC,IAAI,EAAE,OAAO,GAAG,UAAU,CAUxD;AAGD,wBAAgB,oBAAoB,IAAI,MAAM,GAAG;IAAE,QAAQ,CAAC,EAAE,OAAO,CAAA;CAAE,CAqCtE"}
|
package/dist/utils.js
CHANGED
|
@@ -13,7 +13,7 @@ export function convertBigIntToString(obj) {
|
|
|
13
13
|
return obj.toString();
|
|
14
14
|
}
|
|
15
15
|
if (Array.isArray(obj)) {
|
|
16
|
-
return obj.map(item => convertBigIntToString(item));
|
|
16
|
+
return obj.map((item) => convertBigIntToString(item));
|
|
17
17
|
}
|
|
18
18
|
if (obj && typeof obj === 'object') {
|
|
19
19
|
const converted = {};
|
|
@@ -100,116 +100,53 @@ function findErrorInTrace(trace) {
|
|
|
100
100
|
}
|
|
101
101
|
return findError(trace, []);
|
|
102
102
|
}
|
|
103
|
-
|
|
103
|
+
/**
|
|
104
|
+
* Coerce a JSON value into what viem expects for an ABI type. Tuples, arrays and anything
|
|
105
|
+
* else pass through: viem validates them, and guessing here would only mangle them.
|
|
106
|
+
*/
|
|
107
|
+
function coerce(value, type) {
|
|
108
|
+
if (value === null || value === undefined)
|
|
109
|
+
return null;
|
|
110
|
+
if (type === 'address' || type === 'string' || type.startsWith('bytes')) {
|
|
111
|
+
return String(value);
|
|
112
|
+
}
|
|
113
|
+
if (type === 'bool') {
|
|
114
|
+
if (typeof value === 'boolean')
|
|
115
|
+
return value;
|
|
116
|
+
if (typeof value === 'string')
|
|
117
|
+
return value.toLowerCase() === 'true';
|
|
118
|
+
return Boolean(value);
|
|
119
|
+
}
|
|
120
|
+
if (type.startsWith('uint') || type.startsWith('int')) {
|
|
121
|
+
if (typeof value === 'number' || typeof value === 'string')
|
|
122
|
+
return BigInt(value);
|
|
123
|
+
throw new Error(`Invalid type for ${type}: ${typeof value}`);
|
|
124
|
+
}
|
|
125
|
+
return value;
|
|
126
|
+
}
|
|
104
127
|
export function convertArgumentsToTypes(args, abiInputs) {
|
|
128
|
+
if (args.length > abiInputs.length) {
|
|
129
|
+
throw new Error(`Too many arguments provided. Expected ${abiInputs.length}, got ${args.length}`);
|
|
130
|
+
}
|
|
105
131
|
return args.map((arg, index) => {
|
|
106
|
-
if (index >= abiInputs.length) {
|
|
107
|
-
throw new Error(`Too many arguments provided. Expected ${abiInputs.length}, got ${args.length}`);
|
|
108
|
-
}
|
|
109
132
|
const param = abiInputs[index];
|
|
110
133
|
if (!param?.type) {
|
|
111
134
|
throw new Error(`Missing type information for parameter at index ${index}`);
|
|
112
135
|
}
|
|
113
|
-
|
|
114
|
-
// Handle null values
|
|
115
|
-
if (arg === null) {
|
|
116
|
-
return null;
|
|
117
|
-
}
|
|
118
|
-
// Handle different parameter types
|
|
119
|
-
if (paramType === 'address') {
|
|
120
|
-
return String(arg);
|
|
121
|
-
}
|
|
122
|
-
if (paramType === 'bool') {
|
|
123
|
-
if (typeof arg === 'boolean')
|
|
124
|
-
return arg;
|
|
125
|
-
if (typeof arg === 'string')
|
|
126
|
-
return arg.toLowerCase() === 'true';
|
|
127
|
-
return Boolean(arg);
|
|
128
|
-
}
|
|
129
|
-
if (paramType.startsWith('uint') || paramType.startsWith('int')) {
|
|
130
|
-
if (typeof arg === 'number')
|
|
131
|
-
return BigInt(arg);
|
|
132
|
-
if (typeof arg === 'string')
|
|
133
|
-
return BigInt(arg);
|
|
134
|
-
throw new Error(`Invalid type for ${paramType}: ${typeof arg}`);
|
|
135
|
-
}
|
|
136
|
-
if (paramType === 'string') {
|
|
137
|
-
return String(arg);
|
|
138
|
-
}
|
|
139
|
-
if (paramType === 'bytes' || paramType.startsWith('bytes')) {
|
|
140
|
-
return String(arg);
|
|
141
|
-
}
|
|
142
|
-
// For other types, try to convert appropriately
|
|
143
|
-
if (typeof arg === 'string' && arg.startsWith('0x')) {
|
|
144
|
-
return arg; // Assume it's already properly formatted
|
|
145
|
-
}
|
|
146
|
-
return arg;
|
|
136
|
+
return coerce(arg, param.type);
|
|
147
137
|
});
|
|
148
138
|
}
|
|
149
|
-
// Convert event arguments to appropriate types
|
|
150
139
|
export function convertEventArgsToTypes(eventArgs, abiInputs) {
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
// Find the parameter definition for this argument name
|
|
154
|
-
const param = abiInputs.find(input => input.name === argName);
|
|
140
|
+
return Object.fromEntries(Object.entries(eventArgs).map(([argName, argValue]) => {
|
|
141
|
+
const param = abiInputs.find((input) => input.name === argName);
|
|
155
142
|
if (!param) {
|
|
156
143
|
throw new Error(`Parameter '${argName}' not found in event ABI`);
|
|
157
144
|
}
|
|
158
145
|
if (!param.type) {
|
|
159
146
|
throw new Error(`Missing type information for parameter '${argName}'`);
|
|
160
147
|
}
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
if (argValue === null || argValue === undefined) {
|
|
164
|
-
converted[argName] = null;
|
|
165
|
-
continue;
|
|
166
|
-
}
|
|
167
|
-
// Handle different parameter types
|
|
168
|
-
if (paramType === 'address') {
|
|
169
|
-
converted[argName] = String(argValue);
|
|
170
|
-
}
|
|
171
|
-
else if (paramType === 'bool') {
|
|
172
|
-
if (typeof argValue === 'boolean') {
|
|
173
|
-
converted[argName] = argValue;
|
|
174
|
-
}
|
|
175
|
-
else if (typeof argValue === 'string') {
|
|
176
|
-
converted[argName] = argValue.toLowerCase() === 'true';
|
|
177
|
-
}
|
|
178
|
-
else {
|
|
179
|
-
converted[argName] = Boolean(argValue);
|
|
180
|
-
}
|
|
181
|
-
}
|
|
182
|
-
else if (paramType.startsWith('uint') || paramType.startsWith('int')) {
|
|
183
|
-
if (typeof argValue === 'number') {
|
|
184
|
-
converted[argName] = BigInt(argValue);
|
|
185
|
-
}
|
|
186
|
-
else if (typeof argValue === 'string') {
|
|
187
|
-
converted[argName] = BigInt(argValue);
|
|
188
|
-
}
|
|
189
|
-
else {
|
|
190
|
-
throw new Error(`Invalid type for ${paramType}: ${typeof argValue}`);
|
|
191
|
-
}
|
|
192
|
-
}
|
|
193
|
-
else if (paramType === 'string') {
|
|
194
|
-
converted[argName] = String(argValue);
|
|
195
|
-
}
|
|
196
|
-
else if (paramType === 'bytes' || paramType.startsWith('bytes')) {
|
|
197
|
-
converted[argName] = String(argValue);
|
|
198
|
-
}
|
|
199
|
-
else {
|
|
200
|
-
// For other types, handle arrays and try to convert appropriately
|
|
201
|
-
if (Array.isArray(argValue)) {
|
|
202
|
-
converted[argName] = argValue;
|
|
203
|
-
}
|
|
204
|
-
else if (typeof argValue === 'string' && argValue.startsWith('0x')) {
|
|
205
|
-
converted[argName] = argValue; // Assume it's already properly formatted
|
|
206
|
-
}
|
|
207
|
-
else {
|
|
208
|
-
converted[argName] = argValue;
|
|
209
|
-
}
|
|
210
|
-
}
|
|
211
|
-
}
|
|
212
|
-
return converted;
|
|
148
|
+
return [argName, coerce(argValue, param.type)];
|
|
149
|
+
}));
|
|
213
150
|
}
|
|
214
151
|
// Format response as tool result
|
|
215
152
|
export function formatResponse(data) {
|
|
@@ -228,7 +165,7 @@ export function parseCommandLineArgs() {
|
|
|
228
165
|
const config = {};
|
|
229
166
|
function getArgValue(argName) {
|
|
230
167
|
const args = process.argv;
|
|
231
|
-
const index = args.
|
|
168
|
+
const index = args.indexOf(argName);
|
|
232
169
|
return index !== -1 && index + 1 < args.length ? args[index + 1] : undefined;
|
|
233
170
|
}
|
|
234
171
|
function hasArg(argName) {
|
|
@@ -246,7 +183,7 @@ export function parseCommandLineArgs() {
|
|
|
246
183
|
config.hypersyncApiKey = process.env.HYPERSYNC_API_KEY || getArgValue('--hypersync-api-key');
|
|
247
184
|
config.walletConnectProjectId = process.env.WALLETCONNECT_PROJECT_ID || getArgValue('--walletconnect-project-id');
|
|
248
185
|
// Parse custom RPC URLs
|
|
249
|
-
const customRpcs = getArgValue('--custom-rpc');
|
|
186
|
+
const customRpcs = process.env.CUSTOM_RPC || getArgValue('--custom-rpc');
|
|
250
187
|
if (customRpcs) {
|
|
251
188
|
try {
|
|
252
189
|
config.customRpcUrls = JSON.parse(customRpcs);
|