web3-tools-mcp 2.0.2 → 3.1.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 +182 -1
- package/README.md +76 -47
- package/dist/anvil.d.ts +17 -19
- package/dist/anvil.d.ts.map +1 -1
- package/dist/anvil.js +124 -228
- package/dist/anvil.js.map +1 -1
- package/dist/chain-meta.d.ts.map +1 -1
- package/dist/chain-meta.js +19 -8
- package/dist/chain-meta.js.map +1 -1
- package/dist/chains.d.ts +9 -1
- package/dist/chains.d.ts.map +1 -1
- package/dist/chains.js +11 -2
- package/dist/chains.js.map +1 -1
- package/dist/clear-signing.d.ts.map +1 -1
- package/dist/clear-signing.js +17 -6
- package/dist/clear-signing.js.map +1 -1
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js.map +1 -1
- package/dist/context.d.ts +22 -0
- package/dist/context.d.ts.map +1 -0
- package/dist/context.js +24 -0
- package/dist/context.js.map +1 -0
- package/dist/hosted.d.ts +12 -0
- package/dist/hosted.d.ts.map +1 -0
- package/dist/hosted.js +12 -0
- package/dist/hosted.js.map +1 -0
- package/dist/http-server.d.ts +13 -0
- package/dist/http-server.d.ts.map +1 -1
- package/dist/http-server.js +22 -7
- package/dist/http-server.js.map +1 -1
- package/dist/index.js +20 -12
- package/dist/index.js.map +1 -1
- package/dist/kv-storage.d.ts +2 -1
- package/dist/kv-storage.d.ts.map +1 -1
- package/dist/kv-storage.js +5 -2
- package/dist/kv-storage.js.map +1 -1
- package/dist/lib.d.ts +24 -0
- package/dist/lib.d.ts.map +1 -0
- package/dist/lib.js +23 -0
- package/dist/lib.js.map +1 -0
- package/dist/mcp-server.d.ts +4 -0
- package/dist/mcp-server.d.ts.map +1 -0
- package/dist/mcp-server.js +43 -0
- package/dist/mcp-server.js.map +1 -0
- package/dist/oauth.d.ts +57 -8
- package/dist/oauth.d.ts.map +1 -1
- package/dist/oauth.js +133 -63
- package/dist/oauth.js.map +1 -1
- package/dist/preview.d.ts +7 -0
- package/dist/preview.d.ts.map +1 -1
- package/dist/preview.js +21 -7
- package/dist/preview.js.map +1 -1
- package/dist/signing-requests.d.ts +81 -0
- package/dist/signing-requests.d.ts.map +1 -0
- package/dist/signing-requests.js +138 -0
- package/dist/signing-requests.js.map +1 -0
- package/dist/tools/index.d.ts +27 -1
- package/dist/tools/index.d.ts.map +1 -1
- package/dist/tools/index.js +50 -15
- package/dist/tools/index.js.map +1 -1
- package/dist/tools/{advanced.d.ts → read/advanced.d.ts} +39 -30
- package/dist/tools/read/advanced.d.ts.map +1 -0
- package/dist/tools/{advanced.js → read/advanced.js} +53 -41
- package/dist/tools/read/advanced.js.map +1 -0
- package/dist/tools/{balance.d.ts → read/balance.d.ts} +8 -7
- package/dist/tools/read/balance.d.ts.map +1 -0
- package/dist/tools/{balance.js → read/balance.js} +18 -33
- package/dist/tools/read/balance.js.map +1 -0
- package/dist/tools/{contract-info.d.ts → read/contract-info.d.ts} +20 -15
- package/dist/tools/read/contract-info.d.ts.map +1 -0
- package/dist/tools/{contract-info.js → read/contract-info.js} +54 -123
- package/dist/tools/read/contract-info.js.map +1 -0
- package/dist/tools/{contract.d.ts → read/contract.d.ts} +14 -12
- package/dist/tools/read/contract.d.ts.map +1 -0
- package/dist/tools/{contract.js → read/contract.js} +3 -2
- package/dist/tools/read/contract.js.map +1 -0
- package/dist/tools/read/ens.d.ts +104 -0
- package/dist/tools/read/ens.d.ts.map +1 -0
- package/dist/tools/{ens.js → read/ens.js} +25 -33
- package/dist/tools/read/ens.js.map +1 -0
- package/dist/tools/read/gas.d.ts +171 -0
- package/dist/tools/read/gas.d.ts.map +1 -0
- package/dist/tools/read/gas.js +333 -0
- package/dist/tools/read/gas.js.map +1 -0
- package/dist/tools/read/logs.d.ts +101 -0
- package/dist/tools/read/logs.d.ts.map +1 -0
- package/dist/tools/read/logs.js +211 -0
- package/dist/tools/read/logs.js.map +1 -0
- package/dist/tools/{signatures.d.ts → read/signatures.d.ts} +8 -4
- package/dist/tools/read/signatures.d.ts.map +1 -0
- package/dist/tools/{signatures.js → read/signatures.js} +4 -3
- package/dist/tools/read/signatures.js.map +1 -0
- package/dist/tools/read/signing.d.ts +27 -0
- package/dist/tools/read/signing.d.ts.map +1 -0
- package/dist/tools/read/signing.js +81 -0
- package/dist/tools/read/signing.js.map +1 -0
- package/dist/tools/sign/errors.d.ts +9 -0
- package/dist/tools/sign/errors.d.ts.map +1 -0
- package/dist/tools/sign/errors.js +29 -0
- package/dist/tools/sign/errors.js.map +1 -0
- package/dist/tools/sign/transactions.d.ts +141 -0
- package/dist/tools/sign/transactions.d.ts.map +1 -0
- package/dist/tools/sign/transactions.js +361 -0
- package/dist/tools/sign/transactions.js.map +1 -0
- package/dist/tools/sign/wallet.d.ts +50 -0
- package/dist/tools/sign/wallet.d.ts.map +1 -0
- package/dist/tools/sign/wallet.js +180 -0
- package/dist/tools/sign/wallet.js.map +1 -0
- package/dist/utils.d.ts +23 -2
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +48 -3
- package/dist/utils.js.map +1 -1
- package/dist/wallet-client.d.ts +34 -4
- package/dist/wallet-client.d.ts.map +1 -1
- package/dist/wallet-client.js +106 -27
- package/dist/wallet-client.js.map +1 -1
- package/dist/walletconnect.d.ts +100 -13
- package/dist/walletconnect.d.ts.map +1 -1
- package/dist/walletconnect.js +215 -50
- package/dist/walletconnect.js.map +1 -1
- package/package.json +12 -9
- package/src/anvil.ts +150 -271
- package/src/chain-meta.ts +16 -7
- package/src/chains.ts +14 -2
- package/src/clear-signing.ts +15 -9
- package/src/client.ts +0 -1
- package/src/context.ts +27 -0
- package/src/hosted.ts +11 -0
- package/src/http-server.ts +38 -8
- package/src/index.ts +20 -13
- package/src/kv-storage.ts +6 -3
- package/src/lib.ts +24 -0
- package/src/mcp-server.ts +47 -0
- package/src/oauth.ts +181 -69
- package/src/preview.ts +28 -7
- package/src/signing-requests.ts +198 -0
- package/src/tools/index.ts +78 -16
- package/src/tools/{advanced.ts → read/advanced.ts} +74 -43
- package/src/tools/{balance.ts → read/balance.ts} +20 -35
- package/src/tools/{contract-info.ts → read/contract-info.ts} +66 -146
- package/src/tools/{contract.ts → read/contract.ts} +4 -3
- package/src/tools/{ens.ts → read/ens.ts} +27 -34
- package/src/tools/read/gas.ts +443 -0
- package/src/tools/read/logs.ts +281 -0
- package/src/tools/{signatures.ts → read/signatures.ts} +5 -5
- package/src/tools/read/signing.ts +92 -0
- package/src/tools/sign/errors.ts +28 -0
- package/src/tools/sign/transactions.ts +479 -0
- package/src/tools/sign/wallet.ts +216 -0
- package/src/utils.ts +52 -3
- package/src/wallet-client.ts +107 -24
- package/src/walletconnect.ts +250 -48
- package/dist/tools/advanced.d.ts.map +0 -1
- package/dist/tools/advanced.js.map +0 -1
- package/dist/tools/balance.d.ts.map +0 -1
- package/dist/tools/balance.js.map +0 -1
- package/dist/tools/contract-info.d.ts.map +0 -1
- package/dist/tools/contract-info.js.map +0 -1
- package/dist/tools/contract.d.ts.map +0 -1
- package/dist/tools/contract.js.map +0 -1
- package/dist/tools/ens.d.ts +0 -119
- package/dist/tools/ens.d.ts.map +0 -1
- package/dist/tools/ens.js.map +0 -1
- package/dist/tools/gas.d.ts +0 -99
- package/dist/tools/gas.d.ts.map +0 -1
- package/dist/tools/gas.js +0 -181
- package/dist/tools/gas.js.map +0 -1
- package/dist/tools/logs.d.ts +0 -39
- package/dist/tools/logs.d.ts.map +0 -1
- package/dist/tools/logs.js +0 -230
- package/dist/tools/logs.js.map +0 -1
- package/dist/tools/signatures.d.ts.map +0 -1
- package/dist/tools/signatures.js.map +0 -1
- package/dist/tools/transactions.d.ts +0 -155
- package/dist/tools/transactions.d.ts.map +0 -1
- package/dist/tools/transactions.js +0 -365
- package/dist/tools/transactions.js.map +0 -1
- package/src/tools/gas.ts +0 -219
- package/src/tools/logs.ts +0 -293
- package/src/tools/transactions.ts +0 -456
|
@@ -0,0 +1,180 @@
|
|
|
1
|
+
import qrcode from 'qrcode-terminal';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import { getClientManager, SUPPORTED_CHAINS } from '../../client.js';
|
|
4
|
+
import { pendingSigningRequests } from '../../signing-requests.js';
|
|
5
|
+
import { createTool, formatResponse } from '../../utils.js';
|
|
6
|
+
import { getWalletClient } from '../../wallet-client.js';
|
|
7
|
+
import { getPhoneSigner, pairingLinks } from '../../walletconnect.js';
|
|
8
|
+
import { describeError, failure } from './errors.js';
|
|
9
|
+
/**
|
|
10
|
+
* Connecting a wallet and reporting what is connected — separate from the tools that ask
|
|
11
|
+
* one to sign, because this is the part a user does once and that has nothing to do with
|
|
12
|
+
* any particular transaction.
|
|
13
|
+
*/
|
|
14
|
+
/** Render a pairing URI as an ASCII QR, so it can be scanned straight from the chat. */
|
|
15
|
+
function qrFor(uri) {
|
|
16
|
+
return new Promise((resolve) => qrcode.generate(uri, { small: true }, resolve));
|
|
17
|
+
}
|
|
18
|
+
export default {
|
|
19
|
+
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. ' +
|
|
20
|
+
'Returns a QR to scan plus links that open a wallet directly — show those to the user as clickable links. ' +
|
|
21
|
+
'Always pairs: call it when the user wants a wallet connected, and call wallet_status instead to find out ' +
|
|
22
|
+
'whether one already is. Pairing again adds a wallet rather than replacing one, and signing tools then take ' +
|
|
23
|
+
'"account" to choose between them. Requires a WalletConnect project id.', z.object({
|
|
24
|
+
chains: z
|
|
25
|
+
.array(z.enum(SUPPORTED_CHAINS))
|
|
26
|
+
.optional()
|
|
27
|
+
.describe('Chains to request access to (defaults to every supported network)'),
|
|
28
|
+
wallet: z.string().optional().describe('Name of the wallet to open, e.g. "rabby" — omit to list the common ones'),
|
|
29
|
+
agent: z
|
|
30
|
+
.string()
|
|
31
|
+
.optional()
|
|
32
|
+
.describe('Who is asking, shown in the wallet approval dialog, e.g. "Claude Code". Say who you actually are — ' +
|
|
33
|
+
'the user reads this when deciding whether to grant signing access.')
|
|
34
|
+
}), async (args, identity) => {
|
|
35
|
+
const phone = getPhoneSigner();
|
|
36
|
+
if (!phone) {
|
|
37
|
+
return formatResponse({
|
|
38
|
+
success: false,
|
|
39
|
+
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.'
|
|
40
|
+
});
|
|
41
|
+
}
|
|
42
|
+
try {
|
|
43
|
+
// Before anything starts the client: its name is fixed the moment it does.
|
|
44
|
+
phone.nameAgent(args.agent);
|
|
45
|
+
const paired = await phone.sessions(identity);
|
|
46
|
+
const chains = (args.chains ?? SUPPORTED_CHAINS.filter((c) => c !== 'localhost'));
|
|
47
|
+
const uri = await phone.pair(chains, identity);
|
|
48
|
+
const projectId = getClientManager().getConfig().walletConnectProjectId;
|
|
49
|
+
return formatResponse({
|
|
50
|
+
qr: await qrFor(uri),
|
|
51
|
+
uri,
|
|
52
|
+
// Pairing adds rather than replaces, so say what is already there — scanning this
|
|
53
|
+
// leaves the user with both, and signing tools take `account` to pick.
|
|
54
|
+
...(paired.length > 0 && {
|
|
55
|
+
alreadyPaired: paired.map((session) => ({ address: session.accounts[0], wallet: session.peer })),
|
|
56
|
+
// Whether both survive is the wallet's call, not this server's, and some keep
|
|
57
|
+
// only one session per site.
|
|
58
|
+
keepingBoth: `Approving this in a wallet app already listed above (${[...new Set(paired.map((s) => s.peer).filter(Boolean))].join(', ')}) ` +
|
|
59
|
+
'may end its existing session — some wallets keep one per site. To hold both at once, approve this in a different wallet app.'
|
|
60
|
+
}),
|
|
61
|
+
// For an agent running on the phone itself there is nothing to scan, so hand over
|
|
62
|
+
// links that open the wallet directly. `wallet` narrows the list to one.
|
|
63
|
+
openOnThisDevice: await pairingLinks(projectId, uri, args.wallet),
|
|
64
|
+
// Approving grants an agent standing permission to request signatures, so the
|
|
65
|
+
// wallet dialog names the agent rather than implying a website is connecting.
|
|
66
|
+
shownInWallet: args.agent ? `${args.agent} via web3-tools-mcp` : 'web3-tools-mcp (AI agent)',
|
|
67
|
+
howToPresent: 'Render each openOnThisDevice entry as a clickable link labelled with the wallet name, and show the ' +
|
|
68
|
+
'uri as copyable text. On a phone that tap is the whole flow. Show the QR only when the user is on a ' +
|
|
69
|
+
'different device from their wallet — it is unreadable inline on the phone that holds the wallet. ' +
|
|
70
|
+
'If a link does nothing, some clients drop custom schemes like rabby://, so tell them to paste the uri.',
|
|
71
|
+
message: 'On another device: scan the QR with your wallet. On this device: tap one of the openOnThisDevice ' +
|
|
72
|
+
'links, or copy the uri and paste it into your wallet under WalletConnect — every wallet supports ' +
|
|
73
|
+
'that, and it is the one that always works. Then run wallet_status to confirm.'
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
catch (error) {
|
|
77
|
+
return failure(error, 'Could not start WalletConnect pairing');
|
|
78
|
+
}
|
|
79
|
+
}),
|
|
80
|
+
disconnect_phone_wallet: createTool('Disconnect Phone Wallet', 'End WalletConnect sessions and drop the pairings underneath them. Without "account" this disconnects every paired wallet, so name one when the user only wants that wallet gone — wallet_status lists them.', z.object({
|
|
81
|
+
account: z
|
|
82
|
+
.string()
|
|
83
|
+
.optional()
|
|
84
|
+
.describe('Address of the one wallet to disconnect. Omit to disconnect every wallet paired here.')
|
|
85
|
+
}), async (args, identity) => {
|
|
86
|
+
const phone = getPhoneSigner();
|
|
87
|
+
if (!phone) {
|
|
88
|
+
return formatResponse({ success: false, message: 'No WalletConnect project id configured — nothing to disconnect.' });
|
|
89
|
+
}
|
|
90
|
+
try {
|
|
91
|
+
const before = await phone.sessions(identity);
|
|
92
|
+
const removed = await phone.disconnect(identity, args.account);
|
|
93
|
+
const left = await phone.sessions(identity);
|
|
94
|
+
return formatResponse({
|
|
95
|
+
success: true,
|
|
96
|
+
disconnectedSessions: removed.sessions,
|
|
97
|
+
droppedPairings: removed.pairings,
|
|
98
|
+
wallets: before.map((session) => `${session.peer ?? 'unknown wallet'} (${session.accounts.join(', ')})`),
|
|
99
|
+
stillPaired: left.map((session) => ({ address: session.accounts[0], wallet: session.peer })),
|
|
100
|
+
message: removed.sessions || removed.pairings
|
|
101
|
+
? left.length > 0
|
|
102
|
+
? `Disconnected. ${left.length} wallet(s) still paired — pass "account" to a signing tool to choose between them.`
|
|
103
|
+
: 'Disconnected. Transactions fall back to the browser wallet until a phone is paired again.'
|
|
104
|
+
: 'Nothing was connected.'
|
|
105
|
+
});
|
|
106
|
+
}
|
|
107
|
+
catch (error) {
|
|
108
|
+
return failure(error, 'Could not disconnect the phone wallet');
|
|
109
|
+
}
|
|
110
|
+
}),
|
|
111
|
+
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 (_args, identity) => {
|
|
112
|
+
// Both signers are reported, never just the first one found: signWith makes this a
|
|
113
|
+
// choice the user owns, so the agent has to see everything available.
|
|
114
|
+
const phone = getPhoneSigner();
|
|
115
|
+
const phonesPaired = (await phone?.sessions(identity).catch(() => undefined)) ?? [];
|
|
116
|
+
const phoneSession = phonesPaired[phonesPaired.length - 1];
|
|
117
|
+
const wallet = getWalletClient(identity);
|
|
118
|
+
const relayError = await wallet
|
|
119
|
+
.connect()
|
|
120
|
+
.then(() => undefined)
|
|
121
|
+
.catch((error) => describeError(error));
|
|
122
|
+
const browserReady = !relayError && wallet.isConnected();
|
|
123
|
+
// Only raise a tab when there is no other way to sign — a status check should not
|
|
124
|
+
// open a window at someone who is about to use their phone.
|
|
125
|
+
if (!browserReady && !phoneSession && !relayError)
|
|
126
|
+
wallet.openBrowser();
|
|
127
|
+
const signers = {
|
|
128
|
+
phone: phoneSession
|
|
129
|
+
? {
|
|
130
|
+
ready: true,
|
|
131
|
+
address: phoneSession.accounts[0],
|
|
132
|
+
// One wallet can expose several addresses; `account` on a signing tool picks.
|
|
133
|
+
...(phoneSession.accounts.length > 1 && { accounts: phoneSession.accounts }),
|
|
134
|
+
wallet: phoneSession.peer,
|
|
135
|
+
chains: phoneSession.chains,
|
|
136
|
+
// Only when there is a choice to make: pass one of these as `account`.
|
|
137
|
+
...(phonesPaired.length > 1 && {
|
|
138
|
+
alsoPaired: phonesPaired.slice(0, -1).map((s) => ({ address: s.accounts[0], wallet: s.peer, chains: s.chains }))
|
|
139
|
+
})
|
|
140
|
+
}
|
|
141
|
+
: {
|
|
142
|
+
ready: false,
|
|
143
|
+
reason: phone
|
|
144
|
+
? 'No phone paired. Run pair_phone_wallet and scan the QR.'
|
|
145
|
+
: 'Phone signing is not configured — set WALLETCONNECT_PROJECT_ID.'
|
|
146
|
+
},
|
|
147
|
+
browser: browserReady
|
|
148
|
+
? { ready: true, address: wallet.getAddress(), openTab: wallet.getPageUrl() }
|
|
149
|
+
: {
|
|
150
|
+
ready: false,
|
|
151
|
+
reason: relayError ?? 'No signing page is open.',
|
|
152
|
+
walletUrl: relayError ? undefined : wallet.getUrl()
|
|
153
|
+
}
|
|
154
|
+
};
|
|
155
|
+
const ready = [phoneSession ? 'phone' : undefined, browserReady ? 'browser' : undefined].filter(Boolean);
|
|
156
|
+
const message = ready.length === 2
|
|
157
|
+
? 'Both signers are ready. Ask the user which one to use, then pass it as signWith.'
|
|
158
|
+
: ready.length === 1
|
|
159
|
+
? `Only ${ready[0]} is ready. Confirm with the user before signing there, or set the other one up.`
|
|
160
|
+
: `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.`;
|
|
161
|
+
// Handed back by a signing tool that outlasted its call, and collectable by id —
|
|
162
|
+
// otherwise a signature waiting on somebody's phone is invisible from here.
|
|
163
|
+
const waiting = pendingSigningRequests(identity);
|
|
164
|
+
return formatResponse({
|
|
165
|
+
ready,
|
|
166
|
+
signers,
|
|
167
|
+
...(waiting.length > 0 && {
|
|
168
|
+
awaitingApproval: waiting.map((request) => ({
|
|
169
|
+
requestId: request.id,
|
|
170
|
+
what: request.summary,
|
|
171
|
+
signedWith: request.signer,
|
|
172
|
+
waitingFor: `${Math.round((Date.now() - request.startedAt) / 1000)}s`
|
|
173
|
+
})),
|
|
174
|
+
nextStep: 'Collect each of these with check_signing_request rather than asking for the signature again.'
|
|
175
|
+
}),
|
|
176
|
+
message
|
|
177
|
+
});
|
|
178
|
+
})
|
|
179
|
+
};
|
|
180
|
+
//# sourceMappingURL=wallet.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wallet.js","sourceRoot":"","sources":["../../../src/tools/sign/wallet.ts"],"names":[],"mappings":"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"}
|
package/dist/utils.d.ts
CHANGED
|
@@ -1,11 +1,14 @@
|
|
|
1
1
|
import type { AbiParameter } from 'viem';
|
|
2
2
|
import type { z } from 'zod';
|
|
3
3
|
import type { Config, ToolResult } from './types.js';
|
|
4
|
-
export declare function createTool<T extends z.ZodType>(title: string, description: string, schema: T, handler: (args: z.infer<T
|
|
4
|
+
export declare function createTool<T extends z.ZodType>(title: string, description: string, schema: T, handler: (args: z.infer<T>, identity: string) => Promise<ToolResult>,
|
|
5
|
+
/** Whether this server can serve the tool at all; one it cannot is never offered. */
|
|
6
|
+
available?: () => boolean): {
|
|
5
7
|
title: string;
|
|
6
8
|
description: string;
|
|
7
9
|
schema: T;
|
|
8
|
-
handler: (args: z.infer<T
|
|
10
|
+
handler: (args: z.infer<T>, identity: string) => Promise<ToolResult>;
|
|
11
|
+
available: (() => boolean) | undefined;
|
|
9
12
|
};
|
|
10
13
|
export declare function convertBigIntToString(obj: unknown): unknown;
|
|
11
14
|
export interface SummarizedCall {
|
|
@@ -23,6 +26,24 @@ export declare function summarizeTrace(trace: unknown): {
|
|
|
23
26
|
};
|
|
24
27
|
export declare function convertArgumentsToTypes(args: (string | number | boolean | null)[], abiInputs: readonly AbiParameter[]): unknown[];
|
|
25
28
|
export declare function convertEventArgsToTypes(eventArgs: Record<string, unknown>, abiInputs: readonly AbiParameter[]): Record<string, unknown>;
|
|
29
|
+
/** One tool call is one quota unit, so an unbounded batch would be a way around the quota. */
|
|
30
|
+
export declare const MAX_BATCH = 25;
|
|
31
|
+
/**
|
|
32
|
+
* Why an RPC call failed, without the request URL — viem puts it in `message`, and with a
|
|
33
|
+
* provider key configured that URL carries the key.
|
|
34
|
+
*/
|
|
35
|
+
export declare function rpcReason(error: unknown): string;
|
|
36
|
+
/** Every configured key blanked out of `text`: RPC URLs carry them, and errors quote the URL. */
|
|
37
|
+
export declare function redactSecrets(text: string, config: Config): string;
|
|
38
|
+
/** A Map whose entries expire after `ttlMs`, dropping the oldest once it holds `maxSize`. */
|
|
39
|
+
export declare class TtlCache<V> {
|
|
40
|
+
private maxSize;
|
|
41
|
+
private ttlMs;
|
|
42
|
+
private entries;
|
|
43
|
+
constructor(maxSize: number, ttlMs: number);
|
|
44
|
+
get(key: string): V | undefined;
|
|
45
|
+
set(key: string, value: V): void;
|
|
46
|
+
}
|
|
26
47
|
export declare function formatResponse(data: unknown): ToolResult;
|
|
27
48
|
export declare function parseCommandLineArgs(): Config & {
|
|
28
49
|
showHelp?: boolean;
|
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,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;;;;
|
|
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,EAAE,QAAQ,EAAE,MAAM,KAAK,OAAO,CAAC,UAAU,CAAC;AACpE,qFAAqF;AACrF,SAAS,CAAC,EAAE,MAAM,OAAO;;;;oBAFT,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,YAAY,MAAM,KAAK,OAAO,CAAC,UAAU,CAAC;sBAElD,OAAO;EAS1B;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;AAkFD,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;AAED,8FAA8F;AAC9F,eAAO,MAAM,SAAS,KAAK,CAAA;AAE3B;;;GAGG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAGhD;AAED,iGAAiG;AACjG,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAKlE;AAED,6FAA6F;AAC7F,qBAAa,QAAQ,CAAC,CAAC;IAInB,OAAO,CAAC,OAAO;IACf,OAAO,CAAC,KAAK;IAJf,OAAO,CAAC,OAAO,CAAmD;gBAGxD,OAAO,EAAE,MAAM,EACf,KAAK,EAAE,MAAM;IAGvB,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,CAAC,GAAG,SAAS;IAQ/B,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,CAAC,GAAG,IAAI;CAKjC;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
|
@@ -1,10 +1,13 @@
|
|
|
1
1
|
// Create tool helper
|
|
2
|
-
export function createTool(title, description, schema, handler
|
|
2
|
+
export function createTool(title, description, schema, handler,
|
|
3
|
+
/** Whether this server can serve the tool at all; one it cannot is never offered. */
|
|
4
|
+
available) {
|
|
3
5
|
return {
|
|
4
6
|
title,
|
|
5
7
|
description,
|
|
6
8
|
schema,
|
|
7
|
-
handler
|
|
9
|
+
handler,
|
|
10
|
+
available
|
|
8
11
|
};
|
|
9
12
|
}
|
|
10
13
|
// Convert BigInt values to strings for JSON serialization
|
|
@@ -101,12 +104,15 @@ function findErrorInTrace(trace) {
|
|
|
101
104
|
return findError(trace, []);
|
|
102
105
|
}
|
|
103
106
|
/**
|
|
104
|
-
* Coerce a JSON value into what viem expects for an ABI type.
|
|
107
|
+
* Coerce a JSON value into what viem expects for an ABI type. A list is coerced element by
|
|
108
|
+
* element — an array argument, or an OR filter on an event argument. Tuples and anything
|
|
105
109
|
* else pass through: viem validates them, and guessing here would only mangle them.
|
|
106
110
|
*/
|
|
107
111
|
function coerce(value, type) {
|
|
108
112
|
if (value === null || value === undefined)
|
|
109
113
|
return null;
|
|
114
|
+
if (Array.isArray(value))
|
|
115
|
+
return value.map((item) => coerce(item, type));
|
|
110
116
|
if (type === 'address' || type === 'string' || type.startsWith('bytes')) {
|
|
111
117
|
return String(value);
|
|
112
118
|
}
|
|
@@ -148,6 +154,45 @@ export function convertEventArgsToTypes(eventArgs, abiInputs) {
|
|
|
148
154
|
return [argName, coerce(argValue, param.type)];
|
|
149
155
|
}));
|
|
150
156
|
}
|
|
157
|
+
/** One tool call is one quota unit, so an unbounded batch would be a way around the quota. */
|
|
158
|
+
export const MAX_BATCH = 25;
|
|
159
|
+
/**
|
|
160
|
+
* Why an RPC call failed, without the request URL — viem puts it in `message`, and with a
|
|
161
|
+
* provider key configured that URL carries the key.
|
|
162
|
+
*/
|
|
163
|
+
export function rpcReason(error) {
|
|
164
|
+
const { details, shortMessage } = error;
|
|
165
|
+
return details || shortMessage || (error instanceof Error ? error.message : String(error));
|
|
166
|
+
}
|
|
167
|
+
/** Every configured key blanked out of `text`: RPC URLs carry them, and errors quote the URL. */
|
|
168
|
+
export function redactSecrets(text, config) {
|
|
169
|
+
return [config.alchemyApiKey, config.infuraApiKey, config.etherscanApiKey, config.hypersyncApiKey].reduce((out, secret) => (secret ? out.replaceAll(secret, '[redacted]') : out), text);
|
|
170
|
+
}
|
|
171
|
+
/** A Map whose entries expire after `ttlMs`, dropping the oldest once it holds `maxSize`. */
|
|
172
|
+
export class TtlCache {
|
|
173
|
+
maxSize;
|
|
174
|
+
ttlMs;
|
|
175
|
+
entries = new Map();
|
|
176
|
+
constructor(maxSize, ttlMs) {
|
|
177
|
+
this.maxSize = maxSize;
|
|
178
|
+
this.ttlMs = ttlMs;
|
|
179
|
+
}
|
|
180
|
+
get(key) {
|
|
181
|
+
const entry = this.entries.get(key);
|
|
182
|
+
if (!entry)
|
|
183
|
+
return undefined;
|
|
184
|
+
if (entry.expires > Date.now())
|
|
185
|
+
return entry.value;
|
|
186
|
+
this.entries.delete(key);
|
|
187
|
+
return undefined;
|
|
188
|
+
}
|
|
189
|
+
set(key, value) {
|
|
190
|
+
this.entries.delete(key);
|
|
191
|
+
this.entries.set(key, { value, expires: Date.now() + this.ttlMs });
|
|
192
|
+
if (this.entries.size > this.maxSize)
|
|
193
|
+
this.entries.delete(this.entries.keys().next().value);
|
|
194
|
+
}
|
|
195
|
+
}
|
|
151
196
|
// Format response as tool result
|
|
152
197
|
export function formatResponse(data) {
|
|
153
198
|
const serializable = convertBigIntToString(data);
|
package/dist/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAIA,qBAAqB;AACrB,MAAM,UAAU,UAAU,CACxB,KAAa,EACb,WAAmB,EACnB,MAAS,EACT,
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"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"}
|
package/dist/wallet-client.d.ts
CHANGED
|
@@ -9,6 +9,7 @@ export declare function localToken(): string;
|
|
|
9
9
|
* WALLET_SERVER_URL is set, otherwise starts one in-process and talks to that.
|
|
10
10
|
*/
|
|
11
11
|
export declare class WalletClient {
|
|
12
|
+
private identity;
|
|
12
13
|
private relayOptions;
|
|
13
14
|
private relay;
|
|
14
15
|
private ws;
|
|
@@ -21,11 +22,19 @@ export declare class WalletClient {
|
|
|
21
22
|
private pageUrl;
|
|
22
23
|
private pageAgent;
|
|
23
24
|
private lastOpenedAt;
|
|
24
|
-
|
|
25
|
+
private idleTimer;
|
|
26
|
+
/** Instance fields so tests can shorten the waits instead of sitting out the real ones. */
|
|
25
27
|
private signerWaitTimeout;
|
|
28
|
+
private idleTimeout;
|
|
29
|
+
private requestTimeout;
|
|
26
30
|
private readonly remoteUrl;
|
|
27
31
|
private readonly remoteToken;
|
|
28
|
-
|
|
32
|
+
/**
|
|
33
|
+
* `identity` is the room this client works in. Everything below it — the socket's token,
|
|
34
|
+
* the pairing link it hands out — is signed for that room, so two identities on one relay
|
|
35
|
+
* cannot see each other's pages or transactions.
|
|
36
|
+
*/
|
|
37
|
+
constructor(identity: string, relayOptions?: {
|
|
29
38
|
port?: number;
|
|
30
39
|
token?: string;
|
|
31
40
|
});
|
|
@@ -47,6 +56,11 @@ export declare class WalletClient {
|
|
|
47
56
|
*/
|
|
48
57
|
private openSocket;
|
|
49
58
|
private onMessage;
|
|
59
|
+
/**
|
|
60
|
+
* Drop the socket, and this client, once nothing has needed it for a while. The owner of
|
|
61
|
+
* a local relay is exempt: it is the one that has to stop that relay at shutdown.
|
|
62
|
+
*/
|
|
63
|
+
private rearmIdle;
|
|
50
64
|
/** Wait for a wallet page to connect, opening the browser first when running locally. */
|
|
51
65
|
waitForSigner(): Promise<void>;
|
|
52
66
|
request(request: TransactionRequest): Promise<unknown>;
|
|
@@ -86,8 +100,24 @@ export declare class WalletClient {
|
|
|
86
100
|
private open;
|
|
87
101
|
stop(): Promise<void>;
|
|
88
102
|
}
|
|
89
|
-
|
|
103
|
+
/**
|
|
104
|
+
* Where the relay is, for every client this process makes.
|
|
105
|
+
*
|
|
106
|
+
* A property of the deployment rather than of any one person: a hosted server runs the
|
|
107
|
+
* relay on its own port with its own secret, and each identity's client has to reach that
|
|
108
|
+
* one. Set it before anybody signs — a client that cannot find a relay starts its own,
|
|
109
|
+
* which then has nobody in it.
|
|
110
|
+
*/
|
|
111
|
+
export declare function configureWalletRelay(options: {
|
|
90
112
|
port?: number;
|
|
91
113
|
token?: string;
|
|
92
|
-
}):
|
|
114
|
+
}): void;
|
|
115
|
+
/**
|
|
116
|
+
* One client per identity, because everything it holds is that person's: the socket, the
|
|
117
|
+
* in-flight requests, and which page is open with which account. A single-user server has
|
|
118
|
+
* exactly one, which is every self-hosted run.
|
|
119
|
+
*/
|
|
120
|
+
export declare function getWalletClient(identity: string): WalletClient;
|
|
121
|
+
/** Every live client, for shutdown — callers outside a tool call have no identity of their own. */
|
|
122
|
+
export declare function allWalletClients(): WalletClient[];
|
|
93
123
|
//# sourceMappingURL=wallet-client.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wallet-client.d.ts","sourceRoot":"","sources":["../src/wallet-client.ts"],"names":[],"mappings":"AAKA,OAAO,
|
|
1
|
+
{"version":3,"file":"wallet-client.d.ts","sourceRoot":"","sources":["../src/wallet-client.ts"],"names":[],"mappings":"AAKA,OAAO,EAAkC,KAAK,kBAAkB,EAAyC,MAAM,mBAAmB,CAAA;AAoDlI;;;GAGG;AACH,wBAAgB,UAAU,IAAI,MAAM,CAoBnC;AAED;;;GAGG;AACH,qBAAa,YAAY;IA2BrB,OAAO,CAAC,QAAQ;IAChB,OAAO,CAAC,YAAY;IA3BtB,OAAO,CAAC,KAAK,CAA2B;IACxC,OAAO,CAAC,EAAE,CAAyB;IACnC,OAAO,CAAC,UAAU,CAA6B;IAC/C,OAAO,CAAC,OAAO,CAA2F;IAC1G,OAAO,CAAC,OAAO,CAAI;IACnB,OAAO,CAAC,KAAK,CAAI;IACjB,OAAO,CAAC,aAAa,CAAoB;IACzC,OAAO,CAAC,UAAU,CAAoB;IACtC,OAAO,CAAC,OAAO,CAAoB;IACnC,OAAO,CAAC,SAAS,CAAoB;IACrC,OAAO,CAAC,YAAY,CAAI;IACxB,OAAO,CAAC,SAAS,CAA8B;IAC/C,2FAA2F;IAC3F,OAAO,CAAC,iBAAiB,CAAsB;IAC/C,OAAO,CAAC,WAAW,CAAe;IAClC,OAAO,CAAC,cAAc,CAAkB;IAExC,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAgC;IAC1D,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA2B;IAEvD;;;;OAIG;gBAEO,QAAQ,EAAE,MAAM,EAChB,YAAY,GAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAO;IAG9D,IAAI,QAAQ,IAAI,OAAO,CAEtB;IAEK,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;YAUhB,SAAS;YAKT,aAAa;IA2B3B;;;;;;OAMG;YACW,YAAY;IAqB1B;;;OAGG;IACH,OAAO,CAAC,UAAU;IAwDlB,OAAO,CAAC,SAAS;IAkCjB;;;OAGG;IACH,OAAO,CAAC,SAAS;IAWjB,yFAAyF;IACnF,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IA2B9B,OAAO,CAAC,OAAO,EAAE,kBAAkB,GAAG,OAAO,CAAC,OAAO,CAAC;IAuB5D,WAAW,IAAI,OAAO;IAItB,UAAU,IAAI,MAAM,GAAG,SAAS;IAIhC,yFAAyF;IACzF,UAAU,IAAI,MAAM,GAAG,SAAS;IAIhC;;;OAGG;IACH,MAAM,IAAI,MAAM;IAShB,yFAAyF;IACzF,OAAO,KAAK,cAAc,GAEzB;IAED,WAAW;IAMX;;;;OAIG;IACH;;;;;;;OAOG;IACH,YAAY;IAQZ;8FAC0F;IAC1F,OAAO,CAAC,WAAW;IAOnB;;;OAGG;IACH,OAAO,CAAC,IAAI;IAoBN,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;CAM5B;AAMD;;;;;;;GAOG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAErF;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,GAAG,YAAY,CAO9D;AAED,mGAAmG;AACnG,wBAAgB,gBAAgB,IAAI,YAAY,EAAE,CAEjD"}
|