arc402-cli 0.6.0 → 0.7.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/dist/commands/config.d.ts.map +1 -1
- package/dist/commands/config.js +11 -1
- package/dist/commands/config.js.map +1 -1
- package/dist/commands/doctor.d.ts +3 -0
- package/dist/commands/doctor.d.ts.map +1 -0
- package/dist/commands/doctor.js +205 -0
- package/dist/commands/doctor.js.map +1 -0
- package/dist/commands/wallet.d.ts.map +1 -1
- package/dist/commands/wallet.js +56 -6
- package/dist/commands/wallet.js.map +1 -1
- package/dist/config.d.ts +1 -0
- package/dist/config.d.ts.map +1 -1
- package/dist/config.js +10 -2
- package/dist/config.js.map +1 -1
- package/dist/daemon/index.d.ts.map +1 -1
- package/dist/daemon/index.js +294 -208
- package/dist/daemon/index.js.map +1 -1
- package/dist/endpoint-notify.d.ts +7 -0
- package/dist/endpoint-notify.d.ts.map +1 -1
- package/dist/endpoint-notify.js +104 -0
- package/dist/endpoint-notify.js.map +1 -1
- package/dist/program.d.ts.map +1 -1
- package/dist/program.js +2 -0
- package/dist/program.js.map +1 -1
- package/dist/repl.d.ts.map +1 -1
- package/dist/repl.js +45 -34
- package/dist/repl.js.map +1 -1
- package/dist/ui/format.d.ts.map +1 -1
- package/dist/ui/format.js +2 -0
- package/dist/ui/format.js.map +1 -1
- package/package.json +1 -1
- package/src/commands/config.ts +12 -2
- package/src/commands/doctor.ts +172 -0
- package/src/commands/wallet.ts +57 -6
- package/src/config.ts +9 -1
- package/src/daemon/index.ts +234 -140
- package/src/endpoint-notify.ts +73 -0
- package/src/program.ts +2 -0
- package/src/repl.ts +53 -42
- package/src/ui/format.ts +1 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA6D7D"}
|
package/dist/commands/config.js
CHANGED
|
@@ -22,7 +22,7 @@ function registerConfigCommands(program) {
|
|
|
22
22
|
const defaults = config_1.NETWORK_DEFAULTS[answers.network] ?? {};
|
|
23
23
|
const cfg = {
|
|
24
24
|
network: answers.network,
|
|
25
|
-
walletConnectProjectId:
|
|
25
|
+
walletConnectProjectId: (0, config_1.getWcProjectId)(),
|
|
26
26
|
rpcUrl: defaults.rpcUrl ?? "https://mainnet.base.org",
|
|
27
27
|
trustRegistryAddress: defaults.trustRegistryAddress ?? "",
|
|
28
28
|
agentRegistryAddress: defaults.agentRegistryV2Address ?? defaults.agentRegistryAddress,
|
|
@@ -54,6 +54,16 @@ function registerConfigCommands(program) {
|
|
|
54
54
|
console.log(JSON.stringify({ ...cfg, privateKey: cfg.privateKey ? "***" : undefined, subdomainApi: (0, config_1.getSubdomainApi)(cfg) }, null, 2));
|
|
55
55
|
});
|
|
56
56
|
config.command("set <key> <value>").description("Set a config value: arc402 config set <key> <value>").action((key, value) => {
|
|
57
|
+
const BLOCKED_KEYS = ["privateKey", "guardianPrivateKey", "cdpPrivateKey", "machineKey"];
|
|
58
|
+
const ALLOWED_KEYS = ["network", "rpcUrl", "walletContractAddress", "ownerAddress", "walletConnectProjectId", "subdomainApi", "telegramBotToken", "telegramChatId", "telegramThreadId"];
|
|
59
|
+
if (BLOCKED_KEYS.includes(key)) {
|
|
60
|
+
console.error(chalk_1.default.red("Cannot set sensitive keys via config set. Edit ~/.arc402/config.json directly."));
|
|
61
|
+
process.exit(1);
|
|
62
|
+
}
|
|
63
|
+
if (!ALLOWED_KEYS.includes(key)) {
|
|
64
|
+
console.error(chalk_1.default.red(`Unknown config key: ${key}. Allowed keys: ${ALLOWED_KEYS.join(", ")}`));
|
|
65
|
+
process.exit(1);
|
|
66
|
+
}
|
|
57
67
|
const cfg = (0, config_1.loadConfig)();
|
|
58
68
|
cfg[key] = value;
|
|
59
69
|
(0, config_1.saveConfig)(cfg);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":";;;;;AAMA,
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/commands/config.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doctor.d.ts","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAoCpC,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAuI5D"}
|
|
@@ -0,0 +1,205 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.registerDoctorCommand = registerDoctorCommand;
|
|
40
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
41
|
+
const fs = __importStar(require("fs"));
|
|
42
|
+
const path = __importStar(require("path"));
|
|
43
|
+
const os = __importStar(require("os"));
|
|
44
|
+
const child_process_1 = require("child_process");
|
|
45
|
+
const config_1 = require("../config");
|
|
46
|
+
const colors_1 = require("../ui/colors");
|
|
47
|
+
const ARC402_DIR = path.join(os.homedir(), ".arc402");
|
|
48
|
+
const CONFIG_PATH = path.join(ARC402_DIR, "config.json");
|
|
49
|
+
const DAEMON_PID_PATH = path.join(ARC402_DIR, "daemon.pid");
|
|
50
|
+
function ok(label, detail) {
|
|
51
|
+
process.stdout.write(" " + chalk_1.default.green("✓") + " " + chalk_1.default.white(label) + (detail ? chalk_1.default.dim(" " + detail) : "") + "\n");
|
|
52
|
+
}
|
|
53
|
+
function fail(label, detail) {
|
|
54
|
+
process.stdout.write(" " + chalk_1.default.red("✗") + " " + chalk_1.default.white(label) + (detail ? chalk_1.default.dim(" " + detail) : "") + "\n");
|
|
55
|
+
}
|
|
56
|
+
function warn(label, detail) {
|
|
57
|
+
process.stdout.write(" " + chalk_1.default.yellow("⚠") + " " + chalk_1.default.white(label) + (detail ? chalk_1.default.dim(" " + detail) : "") + "\n");
|
|
58
|
+
}
|
|
59
|
+
async function fetchJson(url, timeoutMs = 4000) {
|
|
60
|
+
const res = await fetch(url, { signal: AbortSignal.timeout(timeoutMs) });
|
|
61
|
+
return res.json();
|
|
62
|
+
}
|
|
63
|
+
function registerDoctorCommand(program) {
|
|
64
|
+
program
|
|
65
|
+
.command("doctor")
|
|
66
|
+
.description("Check ARC-402 environment health")
|
|
67
|
+
.action(async () => {
|
|
68
|
+
process.stdout.write("\n" + colors_1.c.cyan("◈ ") + chalk_1.default.white("arc402 doctor") + "\n\n");
|
|
69
|
+
// ── 1. Config exists ───────────────────────────────────────────────────
|
|
70
|
+
if ((0, config_1.configExists)()) {
|
|
71
|
+
ok("Config found", CONFIG_PATH);
|
|
72
|
+
}
|
|
73
|
+
else {
|
|
74
|
+
fail("Config not found", "Run: arc402 config init");
|
|
75
|
+
process.stdout.write("\n");
|
|
76
|
+
return;
|
|
77
|
+
}
|
|
78
|
+
const config = (0, config_1.loadConfig)();
|
|
79
|
+
// ── 2. RPC reachable ───────────────────────────────────────────────────
|
|
80
|
+
try {
|
|
81
|
+
const body = JSON.stringify({ jsonrpc: "2.0", method: "eth_blockNumber", params: [], id: 1 });
|
|
82
|
+
const res = await fetch(config.rpcUrl, {
|
|
83
|
+
method: "POST",
|
|
84
|
+
headers: { "Content-Type": "application/json" },
|
|
85
|
+
body,
|
|
86
|
+
signal: AbortSignal.timeout(5000),
|
|
87
|
+
});
|
|
88
|
+
const json = await res.json();
|
|
89
|
+
if (json.result) {
|
|
90
|
+
const block = parseInt(json.result, 16);
|
|
91
|
+
ok("RPC reachable", `block #${block.toLocaleString()}`);
|
|
92
|
+
}
|
|
93
|
+
else {
|
|
94
|
+
fail("RPC returned no block", config.rpcUrl);
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
catch (err) {
|
|
98
|
+
fail("RPC unreachable", config.rpcUrl + " — " + (err instanceof Error ? err.message : String(err)));
|
|
99
|
+
}
|
|
100
|
+
// ── 3. Wallet deployed ─────────────────────────────────────────────────
|
|
101
|
+
if (config.walletContractAddress) {
|
|
102
|
+
try {
|
|
103
|
+
const body = JSON.stringify({
|
|
104
|
+
jsonrpc: "2.0",
|
|
105
|
+
method: "eth_getCode",
|
|
106
|
+
params: [config.walletContractAddress, "latest"],
|
|
107
|
+
id: 1,
|
|
108
|
+
});
|
|
109
|
+
const res = await fetch(config.rpcUrl, {
|
|
110
|
+
method: "POST",
|
|
111
|
+
headers: { "Content-Type": "application/json" },
|
|
112
|
+
body,
|
|
113
|
+
signal: AbortSignal.timeout(5000),
|
|
114
|
+
});
|
|
115
|
+
const json = await res.json();
|
|
116
|
+
if (json.result && json.result !== "0x" && json.result.length > 2) {
|
|
117
|
+
ok("Wallet deployed", config.walletContractAddress);
|
|
118
|
+
}
|
|
119
|
+
else {
|
|
120
|
+
fail("Wallet not deployed", config.walletContractAddress + " — no code at address");
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
catch (err) {
|
|
124
|
+
warn("Wallet check failed", err instanceof Error ? err.message : String(err));
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
else {
|
|
128
|
+
warn("Wallet not configured", "Run: arc402 wallet deploy");
|
|
129
|
+
}
|
|
130
|
+
// ── 4. Machine key authorized ──────────────────────────────────────────
|
|
131
|
+
if (config.privateKey && config.walletContractAddress) {
|
|
132
|
+
try {
|
|
133
|
+
const { ethers } = await Promise.resolve().then(() => __importStar(require("ethers")));
|
|
134
|
+
const machineKey = new ethers.Wallet(config.privateKey);
|
|
135
|
+
const provider = new ethers.JsonRpcProvider(config.rpcUrl);
|
|
136
|
+
const iface = new ethers.Interface(["function authorizedMachineKeys(address) external view returns (bool)"]);
|
|
137
|
+
const data = iface.encodeFunctionData("authorizedMachineKeys", [machineKey.address]);
|
|
138
|
+
const result = await Promise.race([
|
|
139
|
+
provider.call({ to: config.walletContractAddress, data }),
|
|
140
|
+
new Promise((_, r) => setTimeout(() => r(new Error("timeout")), 4000)),
|
|
141
|
+
]);
|
|
142
|
+
const authorized = iface.decodeFunctionResult("authorizedMachineKeys", result)[0];
|
|
143
|
+
if (authorized) {
|
|
144
|
+
ok("Machine key authorized", machineKey.address);
|
|
145
|
+
}
|
|
146
|
+
else {
|
|
147
|
+
fail("Machine key not authorized", machineKey.address + " — run: arc402 wallet onboard");
|
|
148
|
+
}
|
|
149
|
+
}
|
|
150
|
+
catch (err) {
|
|
151
|
+
warn("Machine key check failed", err instanceof Error ? err.message : String(err));
|
|
152
|
+
}
|
|
153
|
+
}
|
|
154
|
+
else if (!config.privateKey) {
|
|
155
|
+
warn("Machine key not configured", "No privateKey in config");
|
|
156
|
+
}
|
|
157
|
+
// ── 5. Daemon running ──────────────────────────────────────────────────
|
|
158
|
+
let daemonRunning = false;
|
|
159
|
+
if (fs.existsSync(DAEMON_PID_PATH)) {
|
|
160
|
+
try {
|
|
161
|
+
const pid = parseInt(fs.readFileSync(DAEMON_PID_PATH, "utf-8").trim(), 10);
|
|
162
|
+
// Check if process is alive
|
|
163
|
+
process.kill(pid, 0);
|
|
164
|
+
daemonRunning = true;
|
|
165
|
+
ok("Daemon running", `PID ${pid}`);
|
|
166
|
+
}
|
|
167
|
+
catch {
|
|
168
|
+
fail("Daemon PID file stale", "Run: arc402 daemon start");
|
|
169
|
+
}
|
|
170
|
+
}
|
|
171
|
+
else {
|
|
172
|
+
fail("Daemon not running", "Run: arc402 daemon start");
|
|
173
|
+
}
|
|
174
|
+
// ── 6. Docker available ────────────────────────────────────────────────
|
|
175
|
+
try {
|
|
176
|
+
const docker = (0, child_process_1.spawnSync)("docker", ["--version"], { encoding: "utf-8", timeout: 3000 });
|
|
177
|
+
if (docker.status === 0) {
|
|
178
|
+
ok("Docker available", docker.stdout.trim().split("\n")[0]);
|
|
179
|
+
}
|
|
180
|
+
else {
|
|
181
|
+
warn("Docker not found", "Install from https://docs.docker.com/get-docker/");
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
catch {
|
|
185
|
+
warn("Docker not found", "Install from https://docs.docker.com/get-docker/");
|
|
186
|
+
}
|
|
187
|
+
// ── 7. HTTP relay reachable (if daemon is running) ─────────────────────
|
|
188
|
+
if (daemonRunning) {
|
|
189
|
+
try {
|
|
190
|
+
const health = await fetchJson("http://localhost:4402/health");
|
|
191
|
+
if (health.status === "online") {
|
|
192
|
+
ok("HTTP relay reachable", "http://localhost:4402");
|
|
193
|
+
}
|
|
194
|
+
else {
|
|
195
|
+
warn("HTTP relay responded", JSON.stringify(health));
|
|
196
|
+
}
|
|
197
|
+
}
|
|
198
|
+
catch {
|
|
199
|
+
fail("HTTP relay not reachable", "http://localhost:4402 — daemon may still be starting");
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
process.stdout.write("\n");
|
|
203
|
+
});
|
|
204
|
+
}
|
|
205
|
+
//# sourceMappingURL=doctor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"doctor.js","sourceRoot":"","sources":["../../src/commands/doctor.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"wallet.d.ts","sourceRoot":"","sources":["../../src/commands/wallet.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"wallet.d.ts","sourceRoot":"","sources":["../../src/commands/wallet.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAyiBpC,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CA+yF7D"}
|
package/dist/commands/wallet.js
CHANGED
|
@@ -240,12 +240,15 @@ async function runCompleteOnboardingCeremony(walletAddress, ownerAddress, config
|
|
|
240
240
|
const guardianInput = guardianAns.guardian?.trim() ?? "";
|
|
241
241
|
if (guardianInput.toLowerCase() === "g") {
|
|
242
242
|
const generatedGuardian = ethers_1.ethers.Wallet.createRandom();
|
|
243
|
-
|
|
243
|
+
// Save guardian private key to a separate restricted file, NOT config.json
|
|
244
|
+
const guardianKeyPath = path_1.default.join(os_1.default.homedir(), ".arc402", "guardian.key");
|
|
245
|
+
fs_1.default.mkdirSync(path_1.default.dirname(guardianKeyPath), { recursive: true, mode: 0o700 });
|
|
246
|
+
fs_1.default.writeFileSync(guardianKeyPath, generatedGuardian.privateKey + "\n", { mode: 0o400 });
|
|
247
|
+
// Only save address (not private key) to config
|
|
244
248
|
config.guardianAddress = generatedGuardian.address;
|
|
245
249
|
(0, config_1.saveConfig)(config);
|
|
246
250
|
guardianAddress = generatedGuardian.address;
|
|
247
|
-
console.log("\n " + colors_1.c.warning + "
|
|
248
|
-
console.log(" " + colors_1.c.dim(generatedGuardian.privateKey));
|
|
251
|
+
console.log("\n " + colors_1.c.warning + " Guardian key saved to ~/.arc402/guardian.key — move offline for security");
|
|
249
252
|
console.log(" " + colors_1.c.dim("Address: ") + colors_1.c.white(generatedGuardian.address) + "\n");
|
|
250
253
|
const guardianIface = new ethers_1.ethers.Interface(["function setGuardian(address _guardian) external"]);
|
|
251
254
|
await sendTx({ to: walletAddress, data: guardianIface.encodeFunctionData("setGuardian", [guardianAddress]), value: "0x0" }, "setGuardian");
|
|
@@ -637,16 +640,40 @@ function registerWalletCommands(program) {
|
|
|
637
640
|
console.log(colors_1.c.dim("Next: fund your wallet with ETH, then run: arc402 wallet deploy"));
|
|
638
641
|
});
|
|
639
642
|
// ─── import ────────────────────────────────────────────────────────────────
|
|
640
|
-
wallet.command("import
|
|
641
|
-
.description("Import an existing private key")
|
|
643
|
+
wallet.command("import")
|
|
644
|
+
.description("Import an existing private key (use --key-file or stdin prompt)")
|
|
642
645
|
.option("--network <network>", "Network (base-mainnet or base-sepolia)", "base-sepolia")
|
|
643
|
-
.
|
|
646
|
+
.option("--key-file <path>", "Read private key from file instead of prompting")
|
|
647
|
+
.action(async (opts) => {
|
|
644
648
|
const network = opts.network;
|
|
645
649
|
const defaults = config_1.NETWORK_DEFAULTS[network];
|
|
646
650
|
if (!defaults) {
|
|
647
651
|
console.error(`Unknown network: ${network}. Use base-mainnet or base-sepolia.`);
|
|
648
652
|
process.exit(1);
|
|
649
653
|
}
|
|
654
|
+
let privateKey;
|
|
655
|
+
if (opts.keyFile) {
|
|
656
|
+
try {
|
|
657
|
+
privateKey = fs_1.default.readFileSync(opts.keyFile, "utf-8").trim();
|
|
658
|
+
}
|
|
659
|
+
catch (e) {
|
|
660
|
+
console.error(`Cannot read key file: ${e instanceof Error ? e.message : String(e)}`);
|
|
661
|
+
process.exit(1);
|
|
662
|
+
}
|
|
663
|
+
}
|
|
664
|
+
else {
|
|
665
|
+
// Interactive prompt — hidden input avoids shell history
|
|
666
|
+
const answer = await (0, prompts_1.default)({
|
|
667
|
+
type: "password",
|
|
668
|
+
name: "key",
|
|
669
|
+
message: "Paste private key (hidden):",
|
|
670
|
+
});
|
|
671
|
+
privateKey = (answer.key ?? "").trim();
|
|
672
|
+
if (!privateKey) {
|
|
673
|
+
console.error("No private key entered.");
|
|
674
|
+
process.exit(1);
|
|
675
|
+
}
|
|
676
|
+
}
|
|
650
677
|
let imported;
|
|
651
678
|
try {
|
|
652
679
|
imported = new ethers_1.ethers.Wallet(privateKey);
|
|
@@ -794,8 +821,31 @@ function registerWalletCommands(program) {
|
|
|
794
821
|
.option("--smart-wallet", "Connect via Base Smart Wallet (Coinbase Wallet SDK) instead of WalletConnect")
|
|
795
822
|
.option("--hardware", "Hardware wallet mode: show raw wc: URI only (for Ledger Live, Trezor Suite, etc.)")
|
|
796
823
|
.option("--sponsored", "Use CDP paymaster for gas sponsorship (requires paymasterUrl + cdpKeyName + CDP_PRIVATE_KEY env)")
|
|
824
|
+
.option("--dry-run", "Simulate the deployment ceremony without sending transactions")
|
|
797
825
|
.action(async (opts) => {
|
|
798
826
|
const config = (0, config_1.loadConfig)();
|
|
827
|
+
if (opts.dryRun) {
|
|
828
|
+
const factoryAddr = config.walletFactoryAddress ?? config_1.NETWORK_DEFAULTS[config.network]?.walletFactoryAddress ?? "(not configured)";
|
|
829
|
+
const chainId = config.network === "base-mainnet" ? 8453 : 84532;
|
|
830
|
+
console.log();
|
|
831
|
+
console.log(" " + colors_1.c.dim("── Dry run: wallet deploy ──────────────────────────────────────"));
|
|
832
|
+
console.log(" " + colors_1.c.dim("Network: ") + colors_1.c.white(config.network));
|
|
833
|
+
console.log(" " + colors_1.c.dim("Chain ID: ") + colors_1.c.white(String(chainId)));
|
|
834
|
+
console.log(" " + colors_1.c.dim("RPC: ") + colors_1.c.white(config.rpcUrl));
|
|
835
|
+
console.log(" " + colors_1.c.dim("WalletFactory: ") + colors_1.c.white(factoryAddr));
|
|
836
|
+
console.log(" " + colors_1.c.dim("Signing method: ") + colors_1.c.white(opts.smartWallet ? "Base Smart Wallet" : opts.hardware ? "Hardware (WC URI)" : "WalletConnect"));
|
|
837
|
+
console.log(" " + colors_1.c.dim("Sponsored: ") + colors_1.c.white(opts.sponsored ? "yes" : "no"));
|
|
838
|
+
console.log();
|
|
839
|
+
console.log(" " + colors_1.c.dim("Steps that would run:"));
|
|
840
|
+
console.log(" 1. Connect " + (opts.smartWallet ? "Coinbase Smart Wallet" : "WalletConnect") + " session");
|
|
841
|
+
console.log(" 2. Call WalletFactory.createWallet() → deploy ARC402Wallet");
|
|
842
|
+
console.log(" 3. Save walletContractAddress to config");
|
|
843
|
+
console.log(" 4. Run onboarding ceremony (PolicyEngine, machine key, agent registration)");
|
|
844
|
+
console.log();
|
|
845
|
+
console.log(" " + colors_1.c.dim("No transactions sent (--dry-run mode)."));
|
|
846
|
+
console.log();
|
|
847
|
+
return;
|
|
848
|
+
}
|
|
799
849
|
const factoryAddress = config.walletFactoryAddress ?? config_1.NETWORK_DEFAULTS[config.network]?.walletFactoryAddress;
|
|
800
850
|
if (!factoryAddress) {
|
|
801
851
|
console.error("walletFactoryAddress not found in config or NETWORK_DEFAULTS. Add walletFactoryAddress to your config.");
|