@walletchan/rpc 0.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/LICENSE.md +9 -0
- package/README.md +166 -0
- package/SKILL.md +149 -0
- package/dist/chains.d.ts +20 -0
- package/dist/chains.d.ts.map +1 -0
- package/dist/chains.js +130 -0
- package/dist/chains.js.map +1 -0
- package/dist/cli.d.ts +14 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +78 -0
- package/dist/cli.js.map +1 -0
- package/dist/clipboard.d.ts +7 -0
- package/dist/clipboard.d.ts.map +1 -0
- package/dist/clipboard.js +75 -0
- package/dist/clipboard.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +104 -0
- package/dist/index.js.map +1 -0
- package/dist/logger.d.ts +21 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/logger.js +117 -0
- package/dist/logger.js.map +1 -0
- package/dist/rpcHandler.d.ts +14 -0
- package/dist/rpcHandler.d.ts.map +1 -0
- package/dist/rpcHandler.js +197 -0
- package/dist/rpcHandler.js.map +1 -0
- package/dist/rpcServer.d.ts +5 -0
- package/dist/rpcServer.d.ts.map +1 -0
- package/dist/rpcServer.js +59 -0
- package/dist/rpcServer.js.map +1 -0
- package/dist/rpcTypes.d.ts +29 -0
- package/dist/rpcTypes.d.ts.map +1 -0
- package/dist/rpcTypes.js +39 -0
- package/dist/rpcTypes.js.map +1 -0
- package/dist/skill.d.ts +4 -0
- package/dist/skill.d.ts.map +1 -0
- package/dist/skill.js +158 -0
- package/dist/skill.js.map +1 -0
- package/dist/upstream.d.ts +4 -0
- package/dist/upstream.d.ts.map +1 -0
- package/dist/upstream.js +21 -0
- package/dist/upstream.js.map +1 -0
- package/dist/walletConnect.d.ts +44 -0
- package/dist/walletConnect.d.ts.map +1 -0
- package/dist/walletConnect.js +277 -0
- package/dist/walletConnect.js.map +1 -0
- package/package.json +63 -0
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import { spawn } from "node:child_process";
|
|
2
|
+
export async function copyToClipboard(value) {
|
|
3
|
+
const commands = getClipboardCommands();
|
|
4
|
+
let lastError = "No clipboard command configured for this platform";
|
|
5
|
+
for (const command of commands) {
|
|
6
|
+
const result = await tryClipboardCommand(command, value);
|
|
7
|
+
if (result.success)
|
|
8
|
+
return result;
|
|
9
|
+
lastError = result.error || lastError;
|
|
10
|
+
}
|
|
11
|
+
return { success: false, error: lastError };
|
|
12
|
+
}
|
|
13
|
+
function getClipboardCommands() {
|
|
14
|
+
if (process.platform === "darwin") {
|
|
15
|
+
return [{ command: "pbcopy", args: [] }];
|
|
16
|
+
}
|
|
17
|
+
if (process.platform === "win32") {
|
|
18
|
+
return [{ command: "clip.exe", args: [] }];
|
|
19
|
+
}
|
|
20
|
+
return [
|
|
21
|
+
{ command: "wl-copy", args: [] },
|
|
22
|
+
{ command: "xclip", args: ["-selection", "clipboard"] },
|
|
23
|
+
{ command: "xsel", args: ["--clipboard", "--input"] },
|
|
24
|
+
];
|
|
25
|
+
}
|
|
26
|
+
function tryClipboardCommand(command, value) {
|
|
27
|
+
return new Promise((resolve) => {
|
|
28
|
+
let settled = false;
|
|
29
|
+
let stderr = "";
|
|
30
|
+
const child = spawn(command.command, command.args, {
|
|
31
|
+
stdio: ["pipe", "ignore", "pipe"],
|
|
32
|
+
});
|
|
33
|
+
const timeout = setTimeout(() => {
|
|
34
|
+
if (settled)
|
|
35
|
+
return;
|
|
36
|
+
settled = true;
|
|
37
|
+
child.kill("SIGTERM");
|
|
38
|
+
resolve({
|
|
39
|
+
success: false,
|
|
40
|
+
command: command.command,
|
|
41
|
+
error: `${command.command} timed out`,
|
|
42
|
+
});
|
|
43
|
+
}, 2_000);
|
|
44
|
+
child.stderr?.on("data", (chunk) => {
|
|
45
|
+
stderr += chunk.toString();
|
|
46
|
+
});
|
|
47
|
+
child.on("error", (error) => {
|
|
48
|
+
if (settled)
|
|
49
|
+
return;
|
|
50
|
+
settled = true;
|
|
51
|
+
clearTimeout(timeout);
|
|
52
|
+
resolve({
|
|
53
|
+
success: false,
|
|
54
|
+
command: command.command,
|
|
55
|
+
error: error.message,
|
|
56
|
+
});
|
|
57
|
+
});
|
|
58
|
+
child.on("close", (code) => {
|
|
59
|
+
if (settled)
|
|
60
|
+
return;
|
|
61
|
+
settled = true;
|
|
62
|
+
clearTimeout(timeout);
|
|
63
|
+
resolve(code === 0
|
|
64
|
+
? { success: true, command: command.command }
|
|
65
|
+
: {
|
|
66
|
+
success: false,
|
|
67
|
+
command: command.command,
|
|
68
|
+
error: stderr.trim() ||
|
|
69
|
+
`${command.command} exited with status ${code ?? "unknown"}`,
|
|
70
|
+
});
|
|
71
|
+
});
|
|
72
|
+
child.stdin.end(value);
|
|
73
|
+
});
|
|
74
|
+
}
|
|
75
|
+
//# sourceMappingURL=clipboard.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"clipboard.js","sourceRoot":"","sources":["../src/clipboard.ts"],"names":[],"mappings":"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"}
|
package/dist/index.d.ts
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}
|
package/dist/index.js
ADDED
|
@@ -0,0 +1,104 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
import qrcode from "qrcode-terminal";
|
|
3
|
+
import { formatCliSummary, parseCli } from "./cli.js";
|
|
4
|
+
import { copyToClipboard } from "./clipboard.js";
|
|
5
|
+
import { formatChains } from "./chains.js";
|
|
6
|
+
import { log, stopActiveSpinner, style, withSpinner } from "./logger.js";
|
|
7
|
+
import { startRpcServer } from "./rpcServer.js";
|
|
8
|
+
import { WalletConnectBridge } from "./walletConnect.js";
|
|
9
|
+
async function main() {
|
|
10
|
+
const config = parseCli(process.argv);
|
|
11
|
+
let activeChain = config.chains[0];
|
|
12
|
+
let server = null;
|
|
13
|
+
let shuttingDown = false;
|
|
14
|
+
const wallet = new WalletConnectBridge({
|
|
15
|
+
chains: config.chains,
|
|
16
|
+
forceNewSession: config.forceNewSession,
|
|
17
|
+
host: config.host,
|
|
18
|
+
includeBatching: config.includeBatching,
|
|
19
|
+
port: config.port,
|
|
20
|
+
projectId: config.projectId,
|
|
21
|
+
requestTimeoutSeconds: config.requestTimeoutSeconds,
|
|
22
|
+
});
|
|
23
|
+
const context = {
|
|
24
|
+
bundleChains: new Map(),
|
|
25
|
+
chains: config.chains,
|
|
26
|
+
getActiveChain: () => activeChain,
|
|
27
|
+
includeBatching: config.includeBatching,
|
|
28
|
+
setActiveChain: (chain) => {
|
|
29
|
+
activeChain = chain;
|
|
30
|
+
log.dim(`Active chain switched to ${chain.name} (${chain.chainId})`);
|
|
31
|
+
},
|
|
32
|
+
upstreamTimeoutMs: config.upstreamTimeoutMs,
|
|
33
|
+
wallet,
|
|
34
|
+
};
|
|
35
|
+
const shutdown = async (signal) => {
|
|
36
|
+
if (shuttingDown)
|
|
37
|
+
return;
|
|
38
|
+
shuttingDown = true;
|
|
39
|
+
stopActiveSpinner();
|
|
40
|
+
log.dim(`\n${signal} received. Stopping RPC server. WalletConnect session remains paired.`);
|
|
41
|
+
server?.close();
|
|
42
|
+
wallet.close();
|
|
43
|
+
process.exit(0);
|
|
44
|
+
};
|
|
45
|
+
process.once("SIGINT", () => void shutdown("SIGINT"));
|
|
46
|
+
process.once("SIGTERM", () => void shutdown("SIGTERM"));
|
|
47
|
+
log.raw(style.bold("WalletChan RPC"));
|
|
48
|
+
log.raw(formatCliSummary(config));
|
|
49
|
+
log.raw("");
|
|
50
|
+
server = startRpcServer(config, context);
|
|
51
|
+
let session = await wallet.init();
|
|
52
|
+
if (session) {
|
|
53
|
+
log.success(`Reused WalletConnect session: ${session.accounts.join(", ")}`);
|
|
54
|
+
if (session.peerName) {
|
|
55
|
+
log.dim(`Wallet: ${session.peerName}${session.peerUrl ? ` (${session.peerUrl})` : ""}`);
|
|
56
|
+
}
|
|
57
|
+
log.raw(style.blue("Force a fresh pairing with --force-new-session"));
|
|
58
|
+
}
|
|
59
|
+
if (!session) {
|
|
60
|
+
if (config.forceNewSession) {
|
|
61
|
+
log.dim("Stored WalletConnect sessions cleared.");
|
|
62
|
+
}
|
|
63
|
+
const proposal = await wallet.createSessionProposal();
|
|
64
|
+
const clipboard = await copyToClipboard(proposal.uri);
|
|
65
|
+
log.info("Pair with a wallet:");
|
|
66
|
+
if (clipboard.success) {
|
|
67
|
+
log.info(" WalletChan extension: More -> WalletConnect -> paste");
|
|
68
|
+
}
|
|
69
|
+
else {
|
|
70
|
+
log.info(" WalletChan extension: More -> WalletConnect -> paste the URI below");
|
|
71
|
+
}
|
|
72
|
+
log.info(" Mobile wallet: scan the QR");
|
|
73
|
+
log.raw("");
|
|
74
|
+
qrcode.generate(proposal.uri, { small: true }, (qr) => log.raw(qr));
|
|
75
|
+
log.raw(proposal.uri);
|
|
76
|
+
if (clipboard.success) {
|
|
77
|
+
log.success(`Copied to clipboard (${clipboard.command})`);
|
|
78
|
+
}
|
|
79
|
+
else {
|
|
80
|
+
log.warn(`Clipboard copy failed: ${clipboard.error || "unknown error"}`);
|
|
81
|
+
log.warn("Copy the WalletConnect URI above manually.");
|
|
82
|
+
}
|
|
83
|
+
log.raw("");
|
|
84
|
+
session = await withSpinner("Waiting for wallet approval", proposal.approval);
|
|
85
|
+
log.success(`Connected: ${session.accounts.join(", ")}`);
|
|
86
|
+
if (session.peerName) {
|
|
87
|
+
log.dim(`Wallet: ${session.peerName}${session.peerUrl ? ` (${session.peerUrl})` : ""}`);
|
|
88
|
+
}
|
|
89
|
+
}
|
|
90
|
+
log.raw("");
|
|
91
|
+
log.info(`Chains: ${formatChains(config.chains)}`);
|
|
92
|
+
log.info(`Active chain: ${activeChain.name} (${activeChain.chainId})`);
|
|
93
|
+
log.raw("");
|
|
94
|
+
log.info("Cast example:");
|
|
95
|
+
log.raw(` cast send 0xContractAddress "transfer(address,uint256)" 0xRecipient 1000000000000000000 --rpc-url http://${config.host}:${config.port} --unlocked --from ${session.accounts[0] || "0xYourAddress"}`);
|
|
96
|
+
log.raw("");
|
|
97
|
+
log.info("Forge script example:");
|
|
98
|
+
log.raw(` forge script script/Deploy.s.sol --rpc-url http://${config.host}:${config.port} --broadcast --unlocked --sender ${session.accounts[0] || "0xYourAddress"}`);
|
|
99
|
+
}
|
|
100
|
+
main().catch((error) => {
|
|
101
|
+
log.error(error instanceof Error ? error.message : String(error));
|
|
102
|
+
process.exit(1);
|
|
103
|
+
});
|
|
104
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/dist/logger.d.ts
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
export declare const style: {
|
|
2
|
+
bold: (value: string) => string;
|
|
3
|
+
dim: (value: string) => string;
|
|
4
|
+
green: (value: string) => string;
|
|
5
|
+
yellow: (value: string) => string;
|
|
6
|
+
red: (value: string) => string;
|
|
7
|
+
blue: (value: string) => string;
|
|
8
|
+
purple: (value: string) => string;
|
|
9
|
+
cyan: (value: string) => string;
|
|
10
|
+
};
|
|
11
|
+
export declare const log: {
|
|
12
|
+
raw(message?: string): void;
|
|
13
|
+
info(message: string): void;
|
|
14
|
+
dim(message: string): void;
|
|
15
|
+
success(message: string): void;
|
|
16
|
+
warn(message: string): void;
|
|
17
|
+
error(message: string): void;
|
|
18
|
+
};
|
|
19
|
+
export declare function withSpinner<T>(message: string, operation: () => Promise<T>): Promise<T>;
|
|
20
|
+
export declare function stopActiveSpinner(): void;
|
|
21
|
+
//# sourceMappingURL=logger.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"AAmFA,eAAO,MAAM,KAAK;kBACF,MAAM;iBACP,MAAM;mBACJ,MAAM;oBACL,MAAM;iBACT,MAAM;kBACL,MAAM;oBACJ,MAAM;kBACR,MAAM;CACrB,CAAC;AAEF,eAAO,MAAM,GAAG;2BACK,IAAI;kBAGT,MAAM,GAAG,IAAI;iBAGd,MAAM,GAAG,IAAI;qBAGT,MAAM,GAAG,IAAI;kBAGhB,MAAM,GAAG,IAAI;mBAGZ,MAAM,GAAG,IAAI;CAG7B,CAAC;AAEF,wBAAsB,WAAW,CAAC,CAAC,EACjC,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAC1B,OAAO,CAAC,CAAC,CAAC,CAQZ;AAED,wBAAgB,iBAAiB,IAAI,IAAI,CAExC"}
|
package/dist/logger.js
ADDED
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
const useColor = Boolean(process.stdout.isTTY) && !process.env.NO_COLOR;
|
|
2
|
+
const useAnimation = Boolean(process.stdout.isTTY) && !process.env.CI;
|
|
3
|
+
const SPINNER_FRAMES = ["|", "/", "-", "\\"];
|
|
4
|
+
let activeSpinner = null;
|
|
5
|
+
function color(code, value) {
|
|
6
|
+
return useColor ? `\u001b[${code}m${value}\u001b[0m` : value;
|
|
7
|
+
}
|
|
8
|
+
function writeLine(stream, message = "") {
|
|
9
|
+
const spinner = activeSpinner;
|
|
10
|
+
spinner?.clearLine();
|
|
11
|
+
stream.write(`${message}\n`);
|
|
12
|
+
spinner?.render();
|
|
13
|
+
}
|
|
14
|
+
function formatElapsed(ms) {
|
|
15
|
+
const seconds = Math.max(0, Math.floor(ms / 1000));
|
|
16
|
+
const minutes = Math.floor(seconds / 60);
|
|
17
|
+
const remainingSeconds = String(seconds % 60).padStart(2, "0");
|
|
18
|
+
return minutes > 0 ? `${minutes}:${remainingSeconds}` : `${seconds}s`;
|
|
19
|
+
}
|
|
20
|
+
class TerminalSpinner {
|
|
21
|
+
message;
|
|
22
|
+
startedAt = Date.now();
|
|
23
|
+
enabled = false;
|
|
24
|
+
frameIndex = 0;
|
|
25
|
+
lineVisible = false;
|
|
26
|
+
stopped = false;
|
|
27
|
+
timer = null;
|
|
28
|
+
constructor(message) {
|
|
29
|
+
this.message = message;
|
|
30
|
+
}
|
|
31
|
+
start() {
|
|
32
|
+
if (!useAnimation || activeSpinner) {
|
|
33
|
+
log.dim(`${this.message}...`);
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
this.enabled = true;
|
|
37
|
+
activeSpinner = this;
|
|
38
|
+
this.render();
|
|
39
|
+
this.timer = setInterval(() => this.render(), 120);
|
|
40
|
+
this.timer.unref?.();
|
|
41
|
+
}
|
|
42
|
+
render() {
|
|
43
|
+
if (!this.enabled || this.stopped || activeSpinner !== this)
|
|
44
|
+
return;
|
|
45
|
+
const elapsedMs = Date.now() - this.startedAt;
|
|
46
|
+
const frame = SPINNER_FRAMES[this.frameIndex % SPINNER_FRAMES.length];
|
|
47
|
+
const dotCount = Math.floor(elapsedMs / 400) % 4;
|
|
48
|
+
const dots = ".".repeat(dotCount).padEnd(3, " ");
|
|
49
|
+
this.frameIndex += 1;
|
|
50
|
+
this.lineVisible = true;
|
|
51
|
+
process.stdout.write(`\r${style.cyan(frame)} ${this.message}${dots} ${style.dim(formatElapsed(elapsedMs))}`);
|
|
52
|
+
}
|
|
53
|
+
clearLine() {
|
|
54
|
+
if (!this.enabled || !this.lineVisible)
|
|
55
|
+
return;
|
|
56
|
+
process.stdout.clearLine(0);
|
|
57
|
+
process.stdout.cursorTo(0);
|
|
58
|
+
this.lineVisible = false;
|
|
59
|
+
}
|
|
60
|
+
stop() {
|
|
61
|
+
if (this.stopped)
|
|
62
|
+
return;
|
|
63
|
+
this.stopped = true;
|
|
64
|
+
if (this.timer) {
|
|
65
|
+
clearInterval(this.timer);
|
|
66
|
+
this.timer = null;
|
|
67
|
+
}
|
|
68
|
+
this.clearLine();
|
|
69
|
+
if (activeSpinner === this) {
|
|
70
|
+
activeSpinner = null;
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
export const style = {
|
|
75
|
+
bold: (value) => color(1, value),
|
|
76
|
+
dim: (value) => color(2, value),
|
|
77
|
+
green: (value) => color(32, value),
|
|
78
|
+
yellow: (value) => color(33, value),
|
|
79
|
+
red: (value) => color(31, value),
|
|
80
|
+
blue: (value) => color(34, value),
|
|
81
|
+
purple: (value) => color(35, value),
|
|
82
|
+
cyan: (value) => color(36, value),
|
|
83
|
+
};
|
|
84
|
+
export const log = {
|
|
85
|
+
raw(message = "") {
|
|
86
|
+
writeLine(process.stdout, message);
|
|
87
|
+
},
|
|
88
|
+
info(message) {
|
|
89
|
+
writeLine(process.stdout, message);
|
|
90
|
+
},
|
|
91
|
+
dim(message) {
|
|
92
|
+
writeLine(process.stdout, style.dim(message));
|
|
93
|
+
},
|
|
94
|
+
success(message) {
|
|
95
|
+
writeLine(process.stdout, style.green(message));
|
|
96
|
+
},
|
|
97
|
+
warn(message) {
|
|
98
|
+
writeLine(process.stderr, style.yellow(message));
|
|
99
|
+
},
|
|
100
|
+
error(message) {
|
|
101
|
+
writeLine(process.stderr, style.red(message));
|
|
102
|
+
},
|
|
103
|
+
};
|
|
104
|
+
export async function withSpinner(message, operation) {
|
|
105
|
+
const spinner = new TerminalSpinner(message);
|
|
106
|
+
spinner.start();
|
|
107
|
+
try {
|
|
108
|
+
return await operation();
|
|
109
|
+
}
|
|
110
|
+
finally {
|
|
111
|
+
spinner.stop();
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
export function stopActiveSpinner() {
|
|
115
|
+
activeSpinner?.stop();
|
|
116
|
+
}
|
|
117
|
+
//# sourceMappingURL=logger.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logger.js","sourceRoot":"","sources":["../src/logger.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { type RuntimeChain } from "./chains.js";
|
|
2
|
+
import { type JsonRpcRequest, type JsonRpcResponse } from "./rpcTypes.js";
|
|
3
|
+
import type { WalletConnectBridge } from "./walletConnect.js";
|
|
4
|
+
export interface RpcContext {
|
|
5
|
+
bundleChains: Map<string, number>;
|
|
6
|
+
chains: RuntimeChain[];
|
|
7
|
+
getActiveChain: () => RuntimeChain;
|
|
8
|
+
includeBatching: boolean;
|
|
9
|
+
setActiveChain: (chain: RuntimeChain) => void;
|
|
10
|
+
upstreamTimeoutMs: number;
|
|
11
|
+
wallet: WalletConnectBridge;
|
|
12
|
+
}
|
|
13
|
+
export declare function handleRpcRequest(request: JsonRpcRequest, context: RpcContext): Promise<JsonRpcResponse | null>;
|
|
14
|
+
//# sourceMappingURL=rpcHandler.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rpcHandler.d.ts","sourceRoot":"","sources":["../src/rpcHandler.ts"],"names":[],"mappings":"AAAA,OAAO,EAIL,KAAK,YAAY,EAClB,MAAM,aAAa,CAAC;AACrB,OAAO,EAOL,KAAK,cAAc,EACnB,KAAK,eAAe,EACrB,MAAM,eAAe,CAAC;AAEvB,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,oBAAoB,CAAC;AAE9D,MAAM,WAAW,UAAU;IACzB,YAAY,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAClC,MAAM,EAAE,YAAY,EAAE,CAAC;IACvB,cAAc,EAAE,MAAM,YAAY,CAAC;IACnC,eAAe,EAAE,OAAO,CAAC;IACzB,cAAc,EAAE,CAAC,KAAK,EAAE,YAAY,KAAK,IAAI,CAAC;IAC9C,iBAAiB,EAAE,MAAM,CAAC;IAC1B,MAAM,EAAE,mBAAmB,CAAC;CAC7B;AAcD,wBAAsB,gBAAgB,CACpC,OAAO,EAAE,cAAc,EACvB,OAAO,EAAE,UAAU,GAClB,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAqBjC"}
|
|
@@ -0,0 +1,197 @@
|
|
|
1
|
+
import { getChainById, parseChainId, toHexChainId, } from "./chains.js";
|
|
2
|
+
import { errorResponse, getErrorCode, getErrorMessage, getParamsArray, RpcError, successResponse, } from "./rpcTypes.js";
|
|
3
|
+
import { forwardToUpstream } from "./upstream.js";
|
|
4
|
+
const BATCH_METHODS = new Set([
|
|
5
|
+
"wallet_getCapabilities",
|
|
6
|
+
"wallet_sendCalls",
|
|
7
|
+
"wallet_getCallsStatus",
|
|
8
|
+
"wallet_showCallsStatus",
|
|
9
|
+
]);
|
|
10
|
+
const UNSUPPORTED_WALLET_METHODS = new Set([
|
|
11
|
+
"eth_sign",
|
|
12
|
+
"eth_signTransaction",
|
|
13
|
+
]);
|
|
14
|
+
export async function handleRpcRequest(request, context) {
|
|
15
|
+
const id = request.id ?? null;
|
|
16
|
+
if (typeof request.method !== "string" || request.method.length === 0) {
|
|
17
|
+
return errorResponse(id, -32600, "Invalid JSON-RPC request");
|
|
18
|
+
}
|
|
19
|
+
const isNotification = request.id === undefined;
|
|
20
|
+
try {
|
|
21
|
+
const handled = await handleMethod(request, context);
|
|
22
|
+
if (isNotification)
|
|
23
|
+
return null;
|
|
24
|
+
if (handled)
|
|
25
|
+
return handled;
|
|
26
|
+
return await forwardToUpstream(request, context.getActiveChain(), context.upstreamTimeoutMs);
|
|
27
|
+
}
|
|
28
|
+
catch (error) {
|
|
29
|
+
if (isNotification)
|
|
30
|
+
return null;
|
|
31
|
+
return errorResponse(id, getErrorCode(error), getErrorMessage(error), error instanceof RpcError ? error.data : undefined);
|
|
32
|
+
}
|
|
33
|
+
}
|
|
34
|
+
async function handleMethod(request, context) {
|
|
35
|
+
const id = request.id ?? null;
|
|
36
|
+
const method = request.method;
|
|
37
|
+
if (UNSUPPORTED_WALLET_METHODS.has(method)) {
|
|
38
|
+
throw new RpcError(-32601, `${method} is unsafe or unsupported`);
|
|
39
|
+
}
|
|
40
|
+
if (method === "eth_sendRawTransaction") {
|
|
41
|
+
throw new RpcError(-32000, "eth_sendRawTransaction is rejected because it bypasses WalletChan approval. Use Foundry --unlocked --sender so the tool sends eth_sendTransaction.");
|
|
42
|
+
}
|
|
43
|
+
if (BATCH_METHODS.has(method) && !context.includeBatching) {
|
|
44
|
+
throw new RpcError(-32601, `${method} is disabled because --skip-batching was set`);
|
|
45
|
+
}
|
|
46
|
+
switch (method) {
|
|
47
|
+
case "eth_accounts":
|
|
48
|
+
case "eth_requestAccounts":
|
|
49
|
+
return successResponse(id, context.wallet.getAccounts());
|
|
50
|
+
case "eth_chainId":
|
|
51
|
+
return successResponse(id, toHexChainId(context.getActiveChain().chainId));
|
|
52
|
+
case "net_version":
|
|
53
|
+
return successResponse(id, String(context.getActiveChain().chainId));
|
|
54
|
+
case "web3_clientVersion":
|
|
55
|
+
return successResponse(id, "WalletChanRPC/0.1.0");
|
|
56
|
+
case "wallet_switchEthereumChain":
|
|
57
|
+
return successResponse(id, await switchEthereumChain(request, context));
|
|
58
|
+
case "eth_sendTransaction":
|
|
59
|
+
return successResponse(id, await sendTransaction(request, context));
|
|
60
|
+
case "personal_sign":
|
|
61
|
+
case "eth_signTypedData_v3":
|
|
62
|
+
case "eth_signTypedData_v4":
|
|
63
|
+
return successResponse(id, await sendWalletRequest(request, context, resolveSignatureChain(request, context)));
|
|
64
|
+
case "wallet_getCapabilities":
|
|
65
|
+
return successResponse(id, await sendWalletRequest(request, context, resolveCapabilitiesChain(request, context)));
|
|
66
|
+
case "wallet_sendCalls":
|
|
67
|
+
return successResponse(id, await sendCalls(request, context));
|
|
68
|
+
case "wallet_getCallsStatus":
|
|
69
|
+
case "wallet_showCallsStatus":
|
|
70
|
+
return successResponse(id, await sendBundleStatusRequest(request, context));
|
|
71
|
+
default:
|
|
72
|
+
return null;
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
async function switchEthereumChain(request, context) {
|
|
76
|
+
const params = getParamsArray(request);
|
|
77
|
+
const targetChainId = parseChainId(params[0]?.chainId);
|
|
78
|
+
if (!targetChainId) {
|
|
79
|
+
throw new RpcError(-32602, "wallet_switchEthereumChain requires params[0].chainId");
|
|
80
|
+
}
|
|
81
|
+
const target = requireConfiguredChain(context, targetChainId);
|
|
82
|
+
context.setActiveChain(target);
|
|
83
|
+
return null;
|
|
84
|
+
}
|
|
85
|
+
async function sendTransaction(request, context) {
|
|
86
|
+
const params = getParamsArray(request);
|
|
87
|
+
const tx = params[0];
|
|
88
|
+
if (!isRecord(tx)) {
|
|
89
|
+
throw new RpcError(-32602, "eth_sendTransaction requires a transaction object");
|
|
90
|
+
}
|
|
91
|
+
const chain = resolveChainFromValue(tx.chainId, context) || context.getActiveChain();
|
|
92
|
+
const from = typeof tx.from === "string" ? tx.from.toLowerCase() : null;
|
|
93
|
+
if (from && !context.wallet.getAccounts(chain.chainId).includes(from)) {
|
|
94
|
+
throw new RpcError(4100, `Account ${tx.from} is not approved for chain ${chain.chainId}`);
|
|
95
|
+
}
|
|
96
|
+
return sendWalletRequest(request, context, chain);
|
|
97
|
+
}
|
|
98
|
+
async function sendCalls(request, context) {
|
|
99
|
+
const params = getParamsArray(request);
|
|
100
|
+
const calls = params[0];
|
|
101
|
+
if (!isRecord(calls)) {
|
|
102
|
+
throw new RpcError(-32602, "wallet_sendCalls requires a calls object");
|
|
103
|
+
}
|
|
104
|
+
const chain = resolveChainFromValue(calls.chainId, context);
|
|
105
|
+
if (!chain) {
|
|
106
|
+
throw new RpcError(-32602, "wallet_sendCalls requires a configured chainId");
|
|
107
|
+
}
|
|
108
|
+
const result = await sendWalletRequest(request, context, chain);
|
|
109
|
+
const bundleId = getBundleId(result);
|
|
110
|
+
if (bundleId) {
|
|
111
|
+
context.bundleChains.set(bundleId, chain.chainId);
|
|
112
|
+
}
|
|
113
|
+
return result;
|
|
114
|
+
}
|
|
115
|
+
async function sendBundleStatusRequest(request, context) {
|
|
116
|
+
const params = getParamsArray(request);
|
|
117
|
+
const bundleId = getBundleIdParam(params);
|
|
118
|
+
if (!bundleId) {
|
|
119
|
+
throw new RpcError(-32602, `${request.method} requires a bundle ID`);
|
|
120
|
+
}
|
|
121
|
+
const chainId = context.bundleChains.get(bundleId) || context.getActiveChain().chainId;
|
|
122
|
+
const chain = requireConfiguredChain(context, chainId);
|
|
123
|
+
return sendWalletRequest(request, context, chain);
|
|
124
|
+
}
|
|
125
|
+
async function sendWalletRequest(request, context, chain) {
|
|
126
|
+
return context.wallet.request(chain.chainId, request.method, getParamsArray(request));
|
|
127
|
+
}
|
|
128
|
+
function resolveSignatureChain(request, context) {
|
|
129
|
+
if (request.method !== "eth_signTypedData_v3" &&
|
|
130
|
+
request.method !== "eth_signTypedData_v4") {
|
|
131
|
+
return context.getActiveChain();
|
|
132
|
+
}
|
|
133
|
+
const params = getParamsArray(request);
|
|
134
|
+
const typedData = parseTypedData(params[1]);
|
|
135
|
+
const domainChain = parseChainId(typedData?.domain?.chainId);
|
|
136
|
+
return domainChain ? requireConfiguredChain(context, domainChain) : context.getActiveChain();
|
|
137
|
+
}
|
|
138
|
+
function resolveCapabilitiesChain(request, context) {
|
|
139
|
+
const params = getParamsArray(request);
|
|
140
|
+
const first = params[0];
|
|
141
|
+
const chainIds = Array.isArray(params[1])
|
|
142
|
+
? params[1]
|
|
143
|
+
: isRecord(first) && Array.isArray(first.chainIds)
|
|
144
|
+
? first.chainIds
|
|
145
|
+
: [];
|
|
146
|
+
for (const value of chainIds) {
|
|
147
|
+
const chain = resolveChainFromValue(value, context);
|
|
148
|
+
if (chain)
|
|
149
|
+
return chain;
|
|
150
|
+
}
|
|
151
|
+
return context.getActiveChain();
|
|
152
|
+
}
|
|
153
|
+
function resolveChainFromValue(value, context) {
|
|
154
|
+
const chainId = parseChainId(value);
|
|
155
|
+
return chainId ? requireConfiguredChain(context, chainId) : null;
|
|
156
|
+
}
|
|
157
|
+
function requireConfiguredChain(context, chainId) {
|
|
158
|
+
const chain = getChainById(context.chains, chainId);
|
|
159
|
+
if (!chain) {
|
|
160
|
+
throw new RpcError(4902, `Chain ${chainId} is not configured in walletchan-rpc`);
|
|
161
|
+
}
|
|
162
|
+
return chain;
|
|
163
|
+
}
|
|
164
|
+
function parseTypedData(value) {
|
|
165
|
+
if (isRecord(value))
|
|
166
|
+
return value;
|
|
167
|
+
if (typeof value !== "string")
|
|
168
|
+
return null;
|
|
169
|
+
try {
|
|
170
|
+
const parsed = JSON.parse(value);
|
|
171
|
+
return isRecord(parsed) ? parsed : null;
|
|
172
|
+
}
|
|
173
|
+
catch {
|
|
174
|
+
throw new RpcError(-32602, "Invalid EIP-712 typed data JSON");
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
function getBundleId(value) {
|
|
178
|
+
if (typeof value === "string" && value.length > 0)
|
|
179
|
+
return value;
|
|
180
|
+
if (isRecord(value) && typeof value.id === "string" && value.id.length > 0) {
|
|
181
|
+
return value.id;
|
|
182
|
+
}
|
|
183
|
+
return null;
|
|
184
|
+
}
|
|
185
|
+
function getBundleIdParam(params) {
|
|
186
|
+
const first = params[0];
|
|
187
|
+
if (typeof first === "string" && first.length > 0)
|
|
188
|
+
return first;
|
|
189
|
+
if (isRecord(first) && typeof first.id === "string" && first.id.length > 0) {
|
|
190
|
+
return first.id;
|
|
191
|
+
}
|
|
192
|
+
return null;
|
|
193
|
+
}
|
|
194
|
+
function isRecord(value) {
|
|
195
|
+
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
196
|
+
}
|
|
197
|
+
//# sourceMappingURL=rpcHandler.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rpcHandler.js","sourceRoot":"","sources":["../src/rpcHandler.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { type ServerType } from "@hono/node-server";
|
|
2
|
+
import type { CliConfig } from "./cli.js";
|
|
3
|
+
import { type RpcContext } from "./rpcHandler.js";
|
|
4
|
+
export declare function startRpcServer(config: CliConfig, context: RpcContext): ServerType;
|
|
5
|
+
//# sourceMappingURL=rpcServer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rpcServer.d.ts","sourceRoot":"","sources":["../src/rpcServer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAS,KAAK,UAAU,EAAE,MAAM,mBAAmB,CAAC;AAE3D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAG1C,OAAO,EAAoB,KAAK,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAIpE,wBAAgB,cAAc,CAAC,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,UAAU,GAAG,UAAU,CA0DjF"}
|