arc402-cli 0.7.5 → 0.8.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/MIGRATION-SPEC.md +108 -0
- package/dist/abis.js +14 -17
- package/dist/abis.js.map +1 -1
- package/dist/bundler.d.ts +1 -1
- package/dist/bundler.d.ts.map +1 -1
- package/dist/bundler.js +27 -61
- package/dist/bundler.js.map +1 -1
- package/dist/client.d.ts +1 -1
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +5 -9
- package/dist/client.js.map +1 -1
- package/dist/coinbase-smart-wallet.js +1 -4
- package/dist/coinbase-smart-wallet.js.map +1 -1
- package/dist/commands/accept.js +25 -28
- package/dist/commands/accept.js.map +1 -1
- package/dist/commands/agent-handshake.js +15 -18
- package/dist/commands/agent-handshake.js.map +1 -1
- package/dist/commands/agent.js +98 -104
- package/dist/commands/agent.js.map +1 -1
- package/dist/commands/agreements.js +62 -98
- package/dist/commands/agreements.js.map +1 -1
- package/dist/commands/arbitrator.js +45 -81
- package/dist/commands/arbitrator.js.map +1 -1
- package/dist/commands/arena-handshake.js +27 -30
- package/dist/commands/arena-handshake.js.map +1 -1
- package/dist/commands/arena.js +12 -18
- package/dist/commands/arena.js.map +1 -1
- package/dist/commands/backup.js +30 -36
- package/dist/commands/backup.js.map +1 -1
- package/dist/commands/cancel.js +15 -18
- package/dist/commands/cancel.js.map +1 -1
- package/dist/commands/channel.js +45 -81
- package/dist/commands/channel.js.map +1 -1
- package/dist/commands/coldstart.js +31 -34
- package/dist/commands/coldstart.js.map +1 -1
- package/dist/commands/config.js +23 -29
- package/dist/commands/config.js.map +1 -1
- package/dist/commands/contract-interaction.js +12 -15
- package/dist/commands/contract-interaction.js.map +1 -1
- package/dist/commands/daemon.d.ts.map +1 -1
- package/dist/commands/daemon.js +98 -135
- package/dist/commands/daemon.js.map +1 -1
- package/dist/commands/deliver.js +37 -76
- package/dist/commands/deliver.js.map +1 -1
- package/dist/commands/discover.js +24 -27
- package/dist/commands/discover.js.map +1 -1
- package/dist/commands/dispute.js +104 -110
- package/dist/commands/dispute.js.map +1 -1
- package/dist/commands/doctor.js +16 -55
- package/dist/commands/doctor.js.map +1 -1
- package/dist/commands/endpoint.js +56 -95
- package/dist/commands/endpoint.js.map +1 -1
- package/dist/commands/feed.js +11 -18
- package/dist/commands/feed.js.map +1 -1
- package/dist/commands/hire.js +37 -40
- package/dist/commands/hire.js.map +1 -1
- package/dist/commands/migrate.js +30 -33
- package/dist/commands/migrate.js.map +1 -1
- package/dist/commands/negotiate.d.ts.map +1 -1
- package/dist/commands/negotiate.js +34 -36
- package/dist/commands/negotiate.js.map +1 -1
- package/dist/commands/openshell.js +68 -104
- package/dist/commands/openshell.js.map +1 -1
- package/dist/commands/owner.js +17 -20
- package/dist/commands/owner.js.map +1 -1
- package/dist/commands/policy.js +41 -43
- package/dist/commands/policy.js.map +1 -1
- package/dist/commands/relay.d.ts.map +1 -1
- package/dist/commands/relay.js +18 -51
- package/dist/commands/relay.js.map +1 -1
- package/dist/commands/remediate.js +20 -23
- package/dist/commands/remediate.js.map +1 -1
- package/dist/commands/reputation.js +25 -27
- package/dist/commands/reputation.js.map +1 -1
- package/dist/commands/setup.js +65 -104
- package/dist/commands/setup.js.map +1 -1
- package/dist/commands/trust.js +17 -20
- package/dist/commands/trust.js.map +1 -1
- package/dist/commands/verify.js +18 -21
- package/dist/commands/verify.js.map +1 -1
- package/dist/commands/wallet.js +619 -625
- package/dist/commands/wallet.js.map +1 -1
- package/dist/commands/watch.js +33 -36
- package/dist/commands/watch.js.map +1 -1
- package/dist/commands/watchtower.js +37 -73
- package/dist/commands/watchtower.js.map +1 -1
- package/dist/commands/workroom.d.ts.map +1 -1
- package/dist/commands/workroom.js +138 -171
- package/dist/commands/workroom.js.map +1 -1
- package/dist/config.js +21 -65
- package/dist/config.js.map +1 -1
- package/dist/daemon/config.d.ts.map +1 -1
- package/dist/daemon/config.js +16 -53
- package/dist/daemon/config.js.map +1 -1
- package/dist/daemon/hire-listener.d.ts +3 -3
- package/dist/daemon/hire-listener.d.ts.map +1 -1
- package/dist/daemon/hire-listener.js +13 -47
- package/dist/daemon/hire-listener.js.map +1 -1
- package/dist/daemon/index.d.ts +1 -1
- package/dist/daemon/index.d.ts.map +1 -1
- package/dist/daemon/index.js +50 -88
- package/dist/daemon/index.js.map +1 -1
- package/dist/daemon/job-lifecycle.d.ts +1 -1
- package/dist/daemon/job-lifecycle.d.ts.map +1 -1
- package/dist/daemon/job-lifecycle.js +11 -51
- package/dist/daemon/job-lifecycle.js.map +1 -1
- package/dist/daemon/notify.d.ts +1 -1
- package/dist/daemon/notify.d.ts.map +1 -1
- package/dist/daemon/notify.js +19 -53
- package/dist/daemon/notify.js.map +1 -1
- package/dist/daemon/token-metering.js +8 -47
- package/dist/daemon/token-metering.js.map +1 -1
- package/dist/daemon/userops.d.ts +2 -2
- package/dist/daemon/userops.d.ts.map +1 -1
- package/dist/daemon/userops.js +23 -27
- package/dist/daemon/userops.js.map +1 -1
- package/dist/daemon/wallet-monitor.d.ts +1 -1
- package/dist/daemon/wallet-monitor.d.ts.map +1 -1
- package/dist/daemon/wallet-monitor.js +8 -12
- package/dist/daemon/wallet-monitor.js.map +1 -1
- package/dist/drain-v4.js +26 -64
- package/dist/drain-v4.js.map +1 -1
- package/dist/endpoint-config.js +20 -63
- package/dist/endpoint-config.js.map +1 -1
- package/dist/endpoint-notify.js +9 -48
- package/dist/endpoint-notify.js.map +1 -1
- package/dist/index.js +16 -50
- package/dist/index.js.map +1 -1
- package/dist/openshell-runtime.d.ts.map +1 -1
- package/dist/openshell-runtime.js +38 -82
- package/dist/openshell-runtime.js.map +1 -1
- package/dist/program.d.ts.map +1 -1
- package/dist/program.js +77 -83
- package/dist/program.js.map +1 -1
- package/dist/repl.js +25 -31
- package/dist/repl.js.map +1 -1
- package/dist/signing.js +3 -6
- package/dist/signing.js.map +1 -1
- package/dist/telegram-notify.js +3 -40
- package/dist/telegram-notify.js.map +1 -1
- package/dist/tui/App.d.ts +1 -9
- package/dist/tui/App.d.ts.map +1 -1
- package/dist/tui/App.js +47 -65
- package/dist/tui/App.js.map +1 -1
- package/dist/tui/Footer.js +4 -7
- package/dist/tui/Footer.js.map +1 -1
- package/dist/tui/Header.d.ts +1 -2
- package/dist/tui/Header.d.ts.map +1 -1
- package/dist/tui/Header.js +8 -14
- package/dist/tui/Header.js.map +1 -1
- package/dist/tui/InputLine.js +17 -23
- package/dist/tui/InputLine.js.map +1 -1
- package/dist/tui/Viewport.d.ts +5 -4
- package/dist/tui/Viewport.d.ts.map +1 -1
- package/dist/tui/Viewport.js +20 -13
- package/dist/tui/Viewport.js.map +1 -1
- package/dist/tui/WalletConnectPairing.d.ts +23 -0
- package/dist/tui/WalletConnectPairing.d.ts.map +1 -0
- package/dist/tui/WalletConnectPairing.js +75 -0
- package/dist/tui/WalletConnectPairing.js.map +1 -0
- package/dist/tui/index.d.ts.map +1 -1
- package/dist/tui/index.js +14 -21
- package/dist/tui/index.js.map +1 -1
- package/dist/tui/useChat.js +13 -19
- package/dist/tui/useChat.js.map +1 -1
- package/dist/tui/useCommand.d.ts +2 -7
- package/dist/tui/useCommand.d.ts.map +1 -1
- package/dist/tui/useCommand.js +77 -165
- package/dist/tui/useCommand.js.map +1 -1
- package/dist/tui/useScroll.js +9 -12
- package/dist/tui/useScroll.js.map +1 -1
- package/dist/ui/banner.js +12 -19
- package/dist/ui/banner.js.map +1 -1
- package/dist/ui/colors.js +13 -19
- package/dist/ui/colors.js.map +1 -1
- package/dist/ui/format.js +6 -14
- package/dist/ui/format.js.map +1 -1
- package/dist/ui/spinner.js +6 -12
- package/dist/ui/spinner.js.map +1 -1
- package/dist/ui/tree.js +3 -6
- package/dist/ui/tree.js.map +1 -1
- package/dist/utils/format.js +27 -41
- package/dist/utils/format.js.map +1 -1
- package/dist/utils/hash.js +4 -42
- package/dist/utils/hash.js.map +1 -1
- package/dist/utils/time.js +2 -6
- package/dist/utils/time.js.map +1 -1
- package/dist/wallet-router.d.ts +1 -1
- package/dist/wallet-router.d.ts.map +1 -1
- package/dist/wallet-router.js +12 -19
- package/dist/wallet-router.js.map +1 -1
- package/dist/walletconnect-session.d.ts +1 -1
- package/dist/walletconnect-session.d.ts.map +1 -1
- package/dist/walletconnect-session.js +6 -11
- package/dist/walletconnect-session.js.map +1 -1
- package/dist/walletconnect.d.ts +6 -1
- package/dist/walletconnect.d.ts.map +1 -1
- package/dist/walletconnect.js +32 -35
- package/dist/walletconnect.js.map +1 -1
- package/package.json +7 -6
- package/src/bundler.ts +1 -1
- package/src/client.ts +1 -1
- package/src/commands/accept.ts +7 -7
- package/src/commands/agent-handshake.ts +4 -4
- package/src/commands/agent.ts +9 -9
- package/src/commands/agreements.ts +8 -8
- package/src/commands/arbitrator.ts +5 -5
- package/src/commands/arena-handshake.ts +6 -6
- package/src/commands/arena.ts +2 -2
- package/src/commands/backup.ts +1 -1
- package/src/commands/cancel.ts +6 -6
- package/src/commands/channel.ts +6 -6
- package/src/commands/coldstart.ts +5 -5
- package/src/commands/config.ts +2 -2
- package/src/commands/contract-interaction.ts +2 -2
- package/src/commands/daemon.ts +14 -11
- package/src/commands/deliver.ts +9 -9
- package/src/commands/discover.ts +5 -5
- package/src/commands/dispute.ts +7 -7
- package/src/commands/doctor.ts +2 -2
- package/src/commands/endpoint.ts +6 -6
- package/src/commands/feed.ts +1 -1
- package/src/commands/hire.ts +10 -10
- package/src/commands/migrate.ts +7 -7
- package/src/commands/negotiate.ts +6 -5
- package/src/commands/openshell.ts +4 -4
- package/src/commands/owner.ts +5 -5
- package/src/commands/policy.ts +5 -5
- package/src/commands/relay.ts +5 -1
- package/src/commands/remediate.ts +5 -5
- package/src/commands/reputation.ts +6 -6
- package/src/commands/setup.ts +1 -1
- package/src/commands/trust.ts +6 -6
- package/src/commands/verify.ts +6 -6
- package/src/commands/wallet.ts +15 -15
- package/src/commands/watch.ts +3 -3
- package/src/commands/watchtower.ts +6 -6
- package/src/commands/workroom.ts +14 -10
- package/src/daemon/config.ts +2 -1
- package/src/daemon/hire-listener.ts +3 -3
- package/src/daemon/index.ts +10 -9
- package/src/daemon/job-lifecycle.ts +1 -1
- package/src/daemon/notify.ts +4 -4
- package/src/daemon/userops.ts +4 -4
- package/src/daemon/wallet-monitor.ts +2 -2
- package/src/endpoint-notify.ts +1 -1
- package/src/index.ts +8 -7
- package/src/openshell-runtime.ts +5 -1
- package/src/program.ts +36 -36
- package/src/repl.ts +3 -3
- package/src/tui/App.tsx +26 -47
- package/src/tui/Header.tsx +3 -10
- package/src/tui/InputLine.tsx +1 -1
- package/src/tui/Viewport.tsx +22 -18
- package/src/tui/WalletConnectPairing.tsx +131 -0
- package/src/tui/index.tsx +7 -8
- package/src/tui/useChat.ts +1 -1
- package/src/tui/useCommand.ts +86 -183
- package/src/ui/banner.ts +2 -2
- package/src/ui/tree.ts +1 -1
- package/src/wallet-router.ts +2 -2
- package/src/walletconnect-session.ts +1 -1
- package/src/walletconnect.ts +20 -5
- package/tsconfig.json +16 -7
package/dist/commands/backup.js
CHANGED
|
@@ -1,15 +1,9 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
const child_process_1 = require("child_process");
|
|
8
|
-
const fs_1 = __importDefault(require("fs"));
|
|
9
|
-
const path_1 = __importDefault(require("path"));
|
|
10
|
-
const os_1 = __importDefault(require("os"));
|
|
11
|
-
const colors_1 = require("../ui/colors");
|
|
12
|
-
const ARC402_DIR = path_1.default.join(os_1.default.homedir(), ".arc402");
|
|
1
|
+
import { execSync } from "child_process";
|
|
2
|
+
import fs from "fs";
|
|
3
|
+
import path from "path";
|
|
4
|
+
import os from "os";
|
|
5
|
+
import { c } from "../ui/colors.js";
|
|
6
|
+
const ARC402_DIR = path.join(os.homedir(), ".arc402");
|
|
13
7
|
// Files/patterns to exclude from backup
|
|
14
8
|
const EXCLUDE_PATTERNS = [
|
|
15
9
|
"daemon.db",
|
|
@@ -25,41 +19,41 @@ function todayStr() {
|
|
|
25
19
|
const day = d.getDate().toString().padStart(2, "0");
|
|
26
20
|
return `${y}-${m}-${day}`;
|
|
27
21
|
}
|
|
28
|
-
function registerBackupCommand(program) {
|
|
22
|
+
export function registerBackupCommand(program) {
|
|
29
23
|
// ── backup ─────────────────────────────────────────────────────────────────
|
|
30
24
|
program
|
|
31
25
|
.command("backup")
|
|
32
26
|
.description("Backup ~/.arc402/ config, keys, and wallet storage to a tar.gz archive")
|
|
33
27
|
.option("--output <path>", "Output file path (default: arc402-backup-YYYY-MM-DD.tar.gz)")
|
|
34
28
|
.action((opts) => {
|
|
35
|
-
if (!
|
|
36
|
-
console.error(` ${
|
|
29
|
+
if (!fs.existsSync(ARC402_DIR)) {
|
|
30
|
+
console.error(` ${c.failure} No ~/.arc402/ directory found. Nothing to back up.`);
|
|
37
31
|
process.exit(1);
|
|
38
32
|
}
|
|
39
33
|
const outFile = opts.output ?? `arc402-backup-${todayStr()}.tar.gz`;
|
|
40
|
-
const absOut =
|
|
34
|
+
const absOut = path.isAbsolute(outFile) ? outFile : path.join(process.cwd(), outFile);
|
|
41
35
|
// Build --exclude flags
|
|
42
36
|
const excludeFlags = EXCLUDE_PATTERNS.map((p) => `--exclude='.arc402/${p}'`).join(" ");
|
|
43
37
|
try {
|
|
44
|
-
|
|
38
|
+
execSync(`tar -czf "${absOut}" ${excludeFlags} -C "${os.homedir()}" .arc402`, { stdio: "pipe" });
|
|
45
39
|
}
|
|
46
40
|
catch (err) {
|
|
47
41
|
const msg = err instanceof Error ? err.message : String(err);
|
|
48
|
-
console.error(` ${
|
|
42
|
+
console.error(` ${c.failure} Backup failed: ${msg}`);
|
|
49
43
|
process.exit(1);
|
|
50
44
|
}
|
|
51
45
|
// Verify the file was created
|
|
52
|
-
if (!
|
|
53
|
-
console.error(` ${
|
|
46
|
+
if (!fs.existsSync(absOut)) {
|
|
47
|
+
console.error(` ${c.failure} Archive not found after tar completed.`);
|
|
54
48
|
process.exit(1);
|
|
55
49
|
}
|
|
56
|
-
const sizeBytes =
|
|
50
|
+
const sizeBytes = fs.statSync(absOut).size;
|
|
57
51
|
const sizeStr = sizeBytes < 1024
|
|
58
52
|
? `${sizeBytes} B`
|
|
59
53
|
: sizeBytes < 1024 * 1024
|
|
60
54
|
? `${(sizeBytes / 1024).toFixed(1)} KB`
|
|
61
55
|
: `${(sizeBytes / (1024 * 1024)).toFixed(2)} MB`;
|
|
62
|
-
console.log(` ${
|
|
56
|
+
console.log(` ${c.success} Backup saved to ${c.white(path.basename(absOut))} ${c.dim(`(${sizeStr})`)}`);
|
|
63
57
|
});
|
|
64
58
|
// ── restore ────────────────────────────────────────────────────────────────
|
|
65
59
|
program
|
|
@@ -67,40 +61,40 @@ function registerBackupCommand(program) {
|
|
|
67
61
|
.description("Restore ~/.arc402/ from a backup archive")
|
|
68
62
|
.argument("<archive>", "Path to arc402-backup-*.tar.gz")
|
|
69
63
|
.action((archive) => {
|
|
70
|
-
const absArchive =
|
|
71
|
-
if (!
|
|
72
|
-
console.error(` ${
|
|
64
|
+
const absArchive = path.isAbsolute(archive) ? archive : path.join(process.cwd(), archive);
|
|
65
|
+
if (!fs.existsSync(absArchive)) {
|
|
66
|
+
console.error(` ${c.failure} Archive not found: ${absArchive}`);
|
|
73
67
|
process.exit(1);
|
|
74
68
|
}
|
|
75
69
|
// Warn if ~/.arc402/ already exists
|
|
76
|
-
if (
|
|
77
|
-
const existing =
|
|
70
|
+
if (fs.existsSync(ARC402_DIR)) {
|
|
71
|
+
const existing = fs.readdirSync(ARC402_DIR);
|
|
78
72
|
if (existing.length > 0) {
|
|
79
|
-
console.warn(` ${
|
|
73
|
+
console.warn(` ${c.warning} Existing ~/.arc402/ has ${existing.length} file(s) — merging (existing files take precedence for conflicts).`);
|
|
80
74
|
}
|
|
81
75
|
}
|
|
82
76
|
try {
|
|
83
77
|
// Extract to home dir — tar archive has .arc402/ as the root entry
|
|
84
|
-
|
|
78
|
+
execSync(`tar -xzf "${absArchive}" -C "${os.homedir()}"`, { stdio: "pipe" });
|
|
85
79
|
}
|
|
86
80
|
catch (err) {
|
|
87
81
|
const msg = err instanceof Error ? err.message : String(err);
|
|
88
|
-
console.error(` ${
|
|
82
|
+
console.error(` ${c.failure} Restore failed: ${msg}`);
|
|
89
83
|
process.exit(1);
|
|
90
84
|
}
|
|
91
85
|
// Verify config.json is present
|
|
92
|
-
const configPath =
|
|
93
|
-
if (!
|
|
94
|
-
console.error(` ${
|
|
86
|
+
const configPath = path.join(ARC402_DIR, "config.json");
|
|
87
|
+
if (!fs.existsSync(configPath)) {
|
|
88
|
+
console.error(` ${c.failure} config.json not found after restore — archive may be incomplete.`);
|
|
95
89
|
process.exit(1);
|
|
96
90
|
}
|
|
97
91
|
// Fix permissions on restored directory
|
|
98
92
|
try {
|
|
99
|
-
|
|
100
|
-
|
|
93
|
+
fs.chmodSync(ARC402_DIR, 0o700);
|
|
94
|
+
fs.chmodSync(configPath, 0o600);
|
|
101
95
|
}
|
|
102
96
|
catch { /* best-effort */ }
|
|
103
|
-
console.log(` ${
|
|
97
|
+
console.log(` ${c.success} Config restored. Run ${c.white("arc402 doctor")} to verify.`);
|
|
104
98
|
});
|
|
105
99
|
}
|
|
106
100
|
//# sourceMappingURL=backup.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"backup.js","sourceRoot":"","sources":["../../src/commands/backup.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"backup.js","sourceRoot":"","sources":["../../src/commands/backup.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/cancel.js
CHANGED
|
@@ -1,28 +1,25 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
const colors_1 = require("../ui/colors");
|
|
10
|
-
const spinner_1 = require("../ui/spinner");
|
|
11
|
-
function registerCancelCommand(program) {
|
|
1
|
+
import { ServiceAgreementClient } from "@arc402/sdk";
|
|
2
|
+
import { loadConfig } from "../config.js";
|
|
3
|
+
import { requireSigner } from "../client.js";
|
|
4
|
+
import { printSenderInfo, executeContractWriteViaWallet } from "../wallet-router.js";
|
|
5
|
+
import { SERVICE_AGREEMENT_ABI } from "../abis.js";
|
|
6
|
+
import { c } from "../ui/colors.js";
|
|
7
|
+
import { startSpinner } from "../ui/spinner.js";
|
|
8
|
+
export function registerCancelCommand(program) {
|
|
12
9
|
program.command("cancel <id>").description("Cancel a proposed agreement; use --expired for post-deadline recovery paths").option("--expired", "Call expiredCancel()", false).action(async (id, opts) => {
|
|
13
|
-
const config =
|
|
10
|
+
const config = loadConfig();
|
|
14
11
|
if (!config.serviceAgreementAddress)
|
|
15
12
|
throw new Error("serviceAgreementAddress missing in config");
|
|
16
|
-
const { signer } = await
|
|
17
|
-
|
|
18
|
-
const spinner =
|
|
13
|
+
const { signer } = await requireSigner(config);
|
|
14
|
+
printSenderInfo(config);
|
|
15
|
+
const spinner = startSpinner("Submitting transaction...");
|
|
19
16
|
try {
|
|
20
17
|
if (config.walletContractAddress) {
|
|
21
18
|
const fn = opts.expired ? "expiredCancel" : "cancel";
|
|
22
|
-
await
|
|
19
|
+
await executeContractWriteViaWallet(config.walletContractAddress, signer, config.serviceAgreementAddress, SERVICE_AGREEMENT_ABI, fn, [BigInt(id)]);
|
|
23
20
|
}
|
|
24
21
|
else {
|
|
25
|
-
const client = new
|
|
22
|
+
const client = new ServiceAgreementClient(config.serviceAgreementAddress, signer);
|
|
26
23
|
if (opts.expired)
|
|
27
24
|
await client.expiredCancel(BigInt(id));
|
|
28
25
|
else
|
|
@@ -34,7 +31,7 @@ function registerCancelCommand(program) {
|
|
|
34
31
|
spinner.fail();
|
|
35
32
|
throw err;
|
|
36
33
|
}
|
|
37
|
-
console.log(' ' +
|
|
34
|
+
console.log(' ' + c.success + c.white(` Cancelled — agreement #${id}`));
|
|
38
35
|
});
|
|
39
36
|
}
|
|
40
37
|
//# sourceMappingURL=cancel.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cancel.js","sourceRoot":"","sources":["../../src/commands/cancel.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"cancel.js","sourceRoot":"","sources":["../../src/commands/cancel.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,MAAM,cAAc,CAAC;AAC1C,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,eAAe,EAAE,6BAA6B,EAAE,MAAM,qBAAqB,CAAC;AACrF,OAAO,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC;AACnD,OAAO,EAAE,CAAC,EAAE,MAAM,iBAAiB,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAEhD,MAAM,UAAU,qBAAqB,CAAC,OAAgB;IACpD,OAAO,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC,WAAW,CAAC,6EAA6E,CAAC,CAAC,MAAM,CAAC,WAAW,EAAE,sBAAsB,EAAE,KAAK,CAAC,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE;QACrM,MAAM,MAAM,GAAG,UAAU,EAAE,CAAC;QAC5B,IAAI,CAAC,MAAM,CAAC,uBAAuB;YAAE,MAAM,IAAI,KAAK,CAAC,2CAA2C,CAAC,CAAC;QAClG,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,aAAa,CAAC,MAAM,CAAC,CAAC;QAC/C,eAAe,CAAC,MAAM,CAAC,CAAC;QACxB,MAAM,OAAO,GAAG,YAAY,CAAC,2BAA2B,CAAC,CAAC;QAC1D,IAAI,CAAC;YACH,IAAI,MAAM,CAAC,qBAAqB,EAAE,CAAC;gBACjC,MAAM,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,QAAQ,CAAC;gBACrD,MAAM,6BAA6B,CACjC,MAAM,CAAC,qBAAqB,EAAE,MAAM,EAAE,MAAM,CAAC,uBAAuB,EACpE,qBAAqB,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CACxC,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,MAAM,MAAM,GAAG,IAAI,sBAAsB,CAAC,MAAM,CAAC,uBAAuB,EAAE,MAAM,CAAC,CAAC;gBAClF,IAAI,IAAI,CAAC,OAAO;oBAAE,MAAM,MAAM,CAAC,aAAa,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;;oBAAM,MAAM,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;YACjG,CAAC;YACD,OAAO,CAAC,OAAO,EAAE,CAAC;QACpB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,OAAO,CAAC,IAAI,EAAE,CAAC;YACf,MAAM,GAAG,CAAC;QACZ,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC,CAAC,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,2BAA2B,EAAE,EAAE,CAAC,CAAC,CAAC;IAC1E,CAAC,CAAC,CAAC;AACL,CAAC"}
|
package/dist/commands/channel.js
CHANGED
|
@@ -1,49 +1,13 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
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
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
-
exports.registerChannelCommands = registerChannelCommands;
|
|
37
|
-
const config_1 = require("../config");
|
|
38
|
-
const client_1 = require("../client");
|
|
39
|
-
const sdk_1 = require("@arc402/sdk");
|
|
40
|
-
const fs = __importStar(require("fs"));
|
|
41
|
-
const path = __importStar(require("path"));
|
|
42
|
-
const os = __importStar(require("os"));
|
|
43
|
-
const colors_1 = require("../ui/colors");
|
|
44
|
-
const spinner_1 = require("../ui/spinner");
|
|
45
|
-
const tree_1 = require("../ui/tree");
|
|
46
|
-
const format_1 = require("../ui/format");
|
|
1
|
+
import { loadConfig } from "../config.js";
|
|
2
|
+
import { requireSigner, getClient } from "../client.js";
|
|
3
|
+
import { ChannelClient } from "@arc402/sdk";
|
|
4
|
+
import * as fs from "fs";
|
|
5
|
+
import * as path from "path";
|
|
6
|
+
import * as os from "os";
|
|
7
|
+
import { c } from '../ui/colors.js';
|
|
8
|
+
import { startSpinner } from '../ui/spinner.js';
|
|
9
|
+
import { renderTree } from '../ui/tree.js';
|
|
10
|
+
import { formatAddress } from '../ui/format.js';
|
|
47
11
|
const CHANNEL_STATES_DIR = path.join(os.homedir(), ".arc402", "channel-states");
|
|
48
12
|
function loadStateFile(path) {
|
|
49
13
|
const raw = fs.readFileSync(path, "utf-8");
|
|
@@ -53,7 +17,7 @@ function loadStateFile(path) {
|
|
|
53
17
|
cumulativePayment: BigInt(obj.cumulativePayment),
|
|
54
18
|
};
|
|
55
19
|
}
|
|
56
|
-
function registerChannelCommands(program) {
|
|
20
|
+
export function registerChannelCommands(program) {
|
|
57
21
|
const channel = program.command("channel").description("Session channel management — open, close, challenge, reclaim");
|
|
58
22
|
channel.command("open <provider>")
|
|
59
23
|
.description("Open a session channel with a provider")
|
|
@@ -63,12 +27,12 @@ function registerChannelCommands(program) {
|
|
|
63
27
|
.requiredOption("--deadline <timestamp>", "Channel expiry unix timestamp")
|
|
64
28
|
.option("--json", "JSON output")
|
|
65
29
|
.action(async (provider, opts) => {
|
|
66
|
-
const config =
|
|
30
|
+
const config = loadConfig();
|
|
67
31
|
if (!config.serviceAgreementAddress)
|
|
68
32
|
throw new Error("serviceAgreementAddress missing in config");
|
|
69
|
-
const { signer } = await
|
|
70
|
-
const client = new
|
|
71
|
-
const spinner =
|
|
33
|
+
const { signer } = await requireSigner(config);
|
|
34
|
+
const client = new ChannelClient(config.serviceAgreementAddress, signer);
|
|
35
|
+
const spinner = startSpinner('Opening session channel…');
|
|
72
36
|
const result = await client.openSessionChannel(provider, opts.token, BigInt(opts.max), BigInt(opts.rate), Number(opts.deadline));
|
|
73
37
|
if (opts.json || program.opts().json) {
|
|
74
38
|
spinner.stop();
|
|
@@ -76,7 +40,7 @@ function registerChannelCommands(program) {
|
|
|
76
40
|
}
|
|
77
41
|
else {
|
|
78
42
|
spinner.succeed(' Opened — channel ' + result.channelId);
|
|
79
|
-
|
|
43
|
+
renderTree([
|
|
80
44
|
{ label: 'Channel', value: result.channelId },
|
|
81
45
|
{ label: 'Tx', value: result.txHash, last: true },
|
|
82
46
|
]);
|
|
@@ -86,21 +50,21 @@ function registerChannelCommands(program) {
|
|
|
86
50
|
.description("Get channel status")
|
|
87
51
|
.option("--json", "JSON output")
|
|
88
52
|
.action(async (channelId, opts) => {
|
|
89
|
-
const config =
|
|
53
|
+
const config = loadConfig();
|
|
90
54
|
if (!config.serviceAgreementAddress)
|
|
91
55
|
throw new Error("serviceAgreementAddress missing in config");
|
|
92
|
-
const { provider } = await
|
|
93
|
-
const client = new
|
|
56
|
+
const { provider } = await getClient(config);
|
|
57
|
+
const client = new ChannelClient(config.serviceAgreementAddress, provider);
|
|
94
58
|
const ch = await client.getChannelStatus(channelId);
|
|
95
59
|
if (opts.json || program.opts().json) {
|
|
96
60
|
console.log(JSON.stringify(ch, (_k, v) => typeof v === "bigint" ? v.toString() : v, 2));
|
|
97
61
|
}
|
|
98
62
|
else {
|
|
99
|
-
console.log('\n ' +
|
|
100
|
-
|
|
63
|
+
console.log('\n ' + c.mark + c.white(` Channel ${channelId}`));
|
|
64
|
+
renderTree([
|
|
101
65
|
{ label: 'Status', value: ch.status },
|
|
102
|
-
{ label: 'Client', value:
|
|
103
|
-
{ label: 'Provider', value:
|
|
66
|
+
{ label: 'Client', value: formatAddress(ch.client) },
|
|
67
|
+
{ label: 'Provider', value: formatAddress(ch.provider) },
|
|
104
68
|
{ label: 'Deposit', value: ch.depositAmount.toString() },
|
|
105
69
|
{ label: 'Settled', value: ch.settledAmount.toString() },
|
|
106
70
|
{ label: 'Seq', value: ch.lastSequenceNumber.toString(), last: true },
|
|
@@ -111,11 +75,11 @@ function registerChannelCommands(program) {
|
|
|
111
75
|
.description("List open channels for a wallet (client or provider)")
|
|
112
76
|
.option("--json", "JSON output")
|
|
113
77
|
.action(async (wallet, opts) => {
|
|
114
|
-
const config =
|
|
78
|
+
const config = loadConfig();
|
|
115
79
|
if (!config.serviceAgreementAddress)
|
|
116
80
|
throw new Error("serviceAgreementAddress missing in config");
|
|
117
|
-
const { provider } = await
|
|
118
|
-
const client = new
|
|
81
|
+
const { provider } = await getClient(config);
|
|
82
|
+
const client = new ChannelClient(config.serviceAgreementAddress, provider);
|
|
119
83
|
const channels = await client.getOpenChannels(wallet);
|
|
120
84
|
if (opts.json || program.opts().json) {
|
|
121
85
|
console.log(JSON.stringify(channels, (_k, v) => typeof v === "bigint" ? v.toString() : v, 2));
|
|
@@ -136,19 +100,19 @@ function registerChannelCommands(program) {
|
|
|
136
100
|
.requiredOption("--state <path>", "Path to signed state JSON file")
|
|
137
101
|
.option("--json", "JSON output")
|
|
138
102
|
.action(async (channelId, opts) => {
|
|
139
|
-
const config =
|
|
103
|
+
const config = loadConfig();
|
|
140
104
|
if (!config.serviceAgreementAddress)
|
|
141
105
|
throw new Error("serviceAgreementAddress missing in config");
|
|
142
|
-
const { signer } = await
|
|
143
|
-
const client = new
|
|
106
|
+
const { signer } = await requireSigner(config);
|
|
107
|
+
const client = new ChannelClient(config.serviceAgreementAddress, signer);
|
|
144
108
|
const state = loadStateFile(opts.state);
|
|
145
109
|
const result = await client.closeChannel(channelId, state);
|
|
146
110
|
if (opts.json || program.opts().json) {
|
|
147
111
|
console.log(JSON.stringify(result, null, 2));
|
|
148
112
|
}
|
|
149
113
|
else {
|
|
150
|
-
console.log(' ' +
|
|
151
|
-
console.log(' ' +
|
|
114
|
+
console.log(' ' + c.success + c.white(` Close submitted — ${result.txHash}`));
|
|
115
|
+
console.log(' ' + c.dim('Challenge window open (24h)'));
|
|
152
116
|
}
|
|
153
117
|
});
|
|
154
118
|
channel.command("challenge <channelId>")
|
|
@@ -156,52 +120,52 @@ function registerChannelCommands(program) {
|
|
|
156
120
|
.requiredOption("--state <path>", "Path to signed state JSON file with higher sequenceNumber")
|
|
157
121
|
.option("--json", "JSON output")
|
|
158
122
|
.action(async (channelId, opts) => {
|
|
159
|
-
const config =
|
|
123
|
+
const config = loadConfig();
|
|
160
124
|
if (!config.serviceAgreementAddress)
|
|
161
125
|
throw new Error("serviceAgreementAddress missing in config");
|
|
162
|
-
const { signer } = await
|
|
163
|
-
const client = new
|
|
126
|
+
const { signer } = await requireSigner(config);
|
|
127
|
+
const client = new ChannelClient(config.serviceAgreementAddress, signer);
|
|
164
128
|
const state = loadStateFile(opts.state);
|
|
165
129
|
const result = await client.challengeChannel(channelId, state);
|
|
166
130
|
if (opts.json || program.opts().json) {
|
|
167
131
|
console.log(JSON.stringify(result, null, 2));
|
|
168
132
|
}
|
|
169
133
|
else {
|
|
170
|
-
console.log(' ' +
|
|
134
|
+
console.log(' ' + c.success + c.white(` Challenge submitted — ${result.txHash}`));
|
|
171
135
|
}
|
|
172
136
|
});
|
|
173
137
|
channel.command("finalise <channelId>")
|
|
174
138
|
.description("Finalise a close after the challenge window expires")
|
|
175
139
|
.option("--json", "JSON output")
|
|
176
140
|
.action(async (channelId, opts) => {
|
|
177
|
-
const config =
|
|
141
|
+
const config = loadConfig();
|
|
178
142
|
if (!config.serviceAgreementAddress)
|
|
179
143
|
throw new Error("serviceAgreementAddress missing in config");
|
|
180
|
-
const { signer } = await
|
|
181
|
-
const client = new
|
|
144
|
+
const { signer } = await requireSigner(config);
|
|
145
|
+
const client = new ChannelClient(config.serviceAgreementAddress, signer);
|
|
182
146
|
const result = await client.finaliseChallenge(channelId);
|
|
183
147
|
if (opts.json || program.opts().json) {
|
|
184
148
|
console.log(JSON.stringify(result, null, 2));
|
|
185
149
|
}
|
|
186
150
|
else {
|
|
187
|
-
console.log(' ' +
|
|
151
|
+
console.log(' ' + c.success + c.white(` Finalised — ${result.txHash}`));
|
|
188
152
|
}
|
|
189
153
|
});
|
|
190
154
|
channel.command("reclaim <channelId>")
|
|
191
155
|
.description("Client: reclaim deposit from expired channel")
|
|
192
156
|
.option("--json", "JSON output")
|
|
193
157
|
.action(async (channelId, opts) => {
|
|
194
|
-
const config =
|
|
158
|
+
const config = loadConfig();
|
|
195
159
|
if (!config.serviceAgreementAddress)
|
|
196
160
|
throw new Error("serviceAgreementAddress missing in config");
|
|
197
|
-
const { signer } = await
|
|
198
|
-
const client = new
|
|
161
|
+
const { signer } = await requireSigner(config);
|
|
162
|
+
const client = new ChannelClient(config.serviceAgreementAddress, signer);
|
|
199
163
|
const result = await client.reclaimExpiredChannel(channelId);
|
|
200
164
|
if (opts.json || program.opts().json) {
|
|
201
165
|
console.log(JSON.stringify(result, null, 2));
|
|
202
166
|
}
|
|
203
167
|
else {
|
|
204
|
-
console.log(' ' +
|
|
168
|
+
console.log(' ' + c.success + c.white(` Reclaimed — ${result.txHash}`));
|
|
205
169
|
}
|
|
206
170
|
});
|
|
207
171
|
channel.command("store-state <channelId> <statePath>")
|
|
@@ -240,8 +204,8 @@ function registerChannelCommands(program) {
|
|
|
240
204
|
console.log(JSON.stringify({ stored: true, channelId, path: dest }));
|
|
241
205
|
}
|
|
242
206
|
else {
|
|
243
|
-
console.log(' ' +
|
|
244
|
-
console.log(' ' +
|
|
207
|
+
console.log(' ' + c.success + c.white(` State stored — ${dest}`));
|
|
208
|
+
console.log(' ' + c.dim(`seq: ${state.sequenceNumber}`));
|
|
245
209
|
}
|
|
246
210
|
});
|
|
247
211
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"channel.js","sourceRoot":"","sources":["../../src/commands/channel.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"channel.js","sourceRoot":"","sources":["../../src/commands/channel.ts"],"names":[],"mappings":"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"}
|