@intent-engine/cli 0.1.23 → 0.1.26
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/src/admin-commands.d.ts +12 -0
- package/dist/src/admin-commands.js +140 -0
- package/dist/src/admin-commands.js.map +1 -0
- package/dist/src/agent/actions.d.ts +2 -0
- package/dist/src/agent/actions.js +1 -1
- package/dist/src/agent/actions.js.map +1 -1
- package/dist/src/agent/claims.js +13 -12
- package/dist/src/agent/claims.js.map +1 -1
- package/dist/src/agent/create.d.ts +1 -0
- package/dist/src/agent/create.js +7 -3
- package/dist/src/agent/create.js.map +1 -1
- package/dist/src/agent/mandate-agent.d.ts +2 -0
- package/dist/src/agent/mandate-agent.js +136 -0
- package/dist/src/agent/mandate-agent.js.map +1 -0
- package/dist/src/agent/mandate-grant.d.ts +2 -0
- package/dist/src/agent/mandate-grant.js +192 -0
- package/dist/src/agent/mandate-grant.js.map +1 -0
- package/dist/src/agent/mandate-revoke.d.ts +1 -0
- package/dist/src/agent/mandate-revoke.js +142 -0
- package/dist/src/agent/mandate-revoke.js.map +1 -0
- package/dist/src/agent/mandate-state.d.ts +33 -0
- package/dist/src/agent/mandate-state.js +85 -0
- package/dist/src/agent/mandate-state.js.map +1 -0
- package/dist/src/agent/mandate.d.ts +4 -26
- package/dist/src/agent/mandate.js +4 -479
- package/dist/src/agent/mandate.js.map +1 -1
- package/dist/src/agent/mcp.js +7 -3
- package/dist/src/agent/mcp.js.map +1 -1
- package/dist/src/agent/prepare.js +1 -1
- package/dist/src/agent/prepare.js.map +1 -1
- package/dist/src/agent/problems.d.ts +13 -1
- package/dist/src/agent/problems.js +32 -1
- package/dist/src/agent/problems.js.map +1 -1
- package/dist/src/agent/read.d.ts +12 -0
- package/dist/src/agent/read.js +20 -6
- package/dist/src/agent/read.js.map +1 -1
- package/dist/src/agent/registry.js +6 -1
- package/dist/src/agent/registry.js.map +1 -1
- package/dist/src/agent/relay.d.ts +2 -0
- package/dist/src/agent/relay.js +11 -3
- package/dist/src/agent/relay.js.map +1 -1
- package/dist/src/agent/sales.d.ts +29 -0
- package/dist/src/agent/sales.js +248 -0
- package/dist/src/agent/sales.js.map +1 -0
- package/dist/src/agent/signed-prepare.d.ts +1 -0
- package/dist/src/agent/signed-prepare.js +141 -0
- package/dist/src/agent/signed-prepare.js.map +1 -0
- package/dist/src/agent/signed-relay.d.ts +25 -0
- package/dist/src/agent/signed-relay.js +68 -0
- package/dist/src/agent/signed-relay.js.map +1 -0
- package/dist/src/agent/signed-submit.d.ts +2 -0
- package/dist/src/agent/signed-submit.js +137 -0
- package/dist/src/agent/signed-submit.js.map +1 -0
- package/dist/src/agent/signed-terms.d.ts +85 -0
- package/dist/src/agent/signed-terms.js +84 -0
- package/dist/src/agent/signed-terms.js.map +1 -0
- package/dist/src/agent/signed.d.ts +4 -13
- package/dist/src/agent/signed.js +4 -361
- package/dist/src/agent/signed.js.map +1 -1
- package/dist/src/agent/wallet/account.d.ts +4 -0
- package/dist/src/agent/wallet/account.js +84 -0
- package/dist/src/agent/wallet/account.js.map +1 -0
- package/dist/src/agent/wallet/attest.d.ts +4 -0
- package/dist/src/agent/wallet/attest.js +178 -0
- package/dist/src/agent/wallet/attest.js.map +1 -0
- package/dist/src/agent/wallet/delivery.d.ts +13 -0
- package/dist/src/agent/wallet/delivery.js +171 -0
- package/dist/src/agent/wallet/delivery.js.map +1 -0
- package/dist/src/agent/wallet/escrow.d.ts +7 -0
- package/dist/src/agent/wallet/escrow.js +164 -0
- package/dist/src/agent/wallet/escrow.js.map +1 -0
- package/dist/src/agent/wallet/fills.d.ts +27 -0
- package/dist/src/agent/wallet/fills.js +80 -0
- package/dist/src/agent/wallet/fills.js.map +1 -0
- package/dist/src/agent/wallet/guard.d.ts +57 -0
- package/dist/src/agent/wallet/guard.js +205 -0
- package/dist/src/agent/wallet/guard.js.map +1 -0
- package/dist/src/agent/wallet/offer.d.ts +50 -0
- package/dist/src/agent/wallet/offer.js +80 -0
- package/dist/src/agent/wallet/offer.js.map +1 -0
- package/dist/src/agent/wallet/receipt.d.ts +42 -0
- package/dist/src/agent/wallet/receipt.js +102 -0
- package/dist/src/agent/wallet/receipt.js.map +1 -0
- package/dist/src/agent/wallet/record.d.ts +31 -0
- package/dist/src/agent/wallet/record.js +178 -0
- package/dist/src/agent/wallet/record.js.map +1 -0
- package/dist/src/agent/wallet/releases.d.ts +40 -0
- package/dist/src/agent/wallet/releases.js +236 -0
- package/dist/src/agent/wallet/releases.js.map +1 -0
- package/dist/src/agent/wallet/split.d.ts +10 -0
- package/dist/src/agent/wallet/split.js +271 -0
- package/dist/src/agent/wallet/split.js.map +1 -0
- package/dist/src/agent/wallet/trade.d.ts +14 -0
- package/dist/src/agent/wallet/trade.js +243 -0
- package/dist/src/agent/wallet/trade.js.map +1 -0
- package/dist/src/agent/wallet/wait.d.ts +5 -0
- package/dist/src/agent/wallet/wait.js +99 -0
- package/dist/src/agent/wallet/wait.js.map +1 -0
- package/dist/src/agent/wallet.d.ts +18 -73
- package/dist/src/agent/wallet.js +24 -1322
- package/dist/src/agent/wallet.js.map +1 -1
- package/dist/src/arg-options.d.ts +333 -0
- package/dist/src/arg-options.js +310 -0
- package/dist/src/arg-options.js.map +1 -0
- package/dist/src/arg-usage.d.ts +7 -0
- package/dist/src/arg-usage.js +53 -0
- package/dist/src/arg-usage.js.map +1 -0
- package/dist/src/arg-values.d.ts +47 -0
- package/dist/src/arg-values.js +280 -0
- package/dist/src/arg-values.js.map +1 -0
- package/dist/src/args.d.ts +7 -545
- package/dist/src/args.js +55 -923
- package/dist/src/args.js.map +1 -1
- package/dist/src/artifact.d.ts +22 -0
- package/dist/src/artifact.js +89 -0
- package/dist/src/artifact.js.map +1 -0
- package/dist/src/check-process.d.ts +39 -0
- package/dist/src/check-process.js +338 -0
- package/dist/src/check-process.js.map +1 -0
- package/dist/src/command-builders.d.ts +37 -0
- package/dist/src/command-builders.js +216 -0
- package/dist/src/command-builders.js.map +1 -0
- package/dist/src/command-types.d.ts +227 -0
- package/dist/src/command-types.js +2 -0
- package/dist/src/command-types.js.map +1 -0
- package/dist/src/commands.d.ts +7 -43
- package/dist/src/commands.js +60 -457
- package/dist/src/commands.js.map +1 -1
- package/dist/src/event-feed.d.ts +13 -0
- package/dist/src/event-feed.js +46 -0
- package/dist/src/event-feed.js.map +1 -0
- package/dist/src/flow-commands.d.ts +8 -0
- package/dist/src/flow-commands.js +116 -0
- package/dist/src/flow-commands.js.map +1 -0
- package/dist/src/flows.d.ts +6 -0
- package/dist/src/flows.js +84 -10
- package/dist/src/flows.js.map +1 -1
- package/dist/src/job-commands.d.ts +9 -0
- package/dist/src/job-commands.js +89 -0
- package/dist/src/job-commands.js.map +1 -0
- package/dist/src/judge-errors.d.ts +12 -0
- package/dist/src/judge-errors.js +16 -0
- package/dist/src/judge-errors.js.map +1 -0
- package/dist/src/judge.d.ts +11 -16
- package/dist/src/judge.js +120 -100
- package/dist/src/judge.js.map +1 -1
- package/dist/src/main.d.ts +4 -1
- package/dist/src/main.js +25 -9
- package/dist/src/main.js.map +1 -1
- package/dist/src/order-builders.d.ts +10 -0
- package/dist/src/order-builders.js +172 -0
- package/dist/src/order-builders.js.map +1 -0
- package/dist/src/render.d.ts +1 -0
- package/dist/src/render.js +9 -0
- package/dist/src/render.js.map +1 -1
- package/dist/src/runtime.d.ts +22 -0
- package/dist/src/runtime.js +2 -0
- package/dist/src/runtime.js.map +1 -0
- package/dist/src/solve-commands.d.ts +25 -0
- package/dist/src/solve-commands.js +171 -0
- package/dist/src/solve-commands.js.map +1 -0
- package/dist/src/tokens.js +2 -1
- package/dist/src/tokens.js.map +1 -1
- package/dist/src/version.d.ts +1 -1
- package/dist/src/version.js +1 -1
- package/dist/src/wallet.d.ts +4 -1
- package/dist/src/wallet.js +25 -5
- package/dist/src/wallet.js.map +1 -1
- package/package.json +16 -7
- package/dist/src/events.d.ts +0 -8
- package/dist/src/events.js +0 -43
- package/dist/src/events.js.map +0 -1
- package/dist/src/transport.d.ts +0 -208
- package/dist/src/transport.js +0 -441
- package/dist/src/transport.js.map +0 -1
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export declare class JudgeRefused extends Error {
|
|
2
|
+
constructor(reason: string);
|
|
3
|
+
}
|
|
4
|
+
export declare class JudgeInterrupted extends Error {
|
|
5
|
+
readonly exitCode: number;
|
|
6
|
+
constructor(signal: InterruptSignal, reason?: string);
|
|
7
|
+
}
|
|
8
|
+
export declare const SIGNAL_EXIT: {
|
|
9
|
+
readonly SIGINT: 130;
|
|
10
|
+
readonly SIGTERM: 143;
|
|
11
|
+
};
|
|
12
|
+
export type InterruptSignal = keyof typeof SIGNAL_EXIT;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export class JudgeRefused extends Error {
|
|
2
|
+
constructor(reason) {
|
|
3
|
+
super(reason);
|
|
4
|
+
this.name = "JudgeRefused";
|
|
5
|
+
}
|
|
6
|
+
}
|
|
7
|
+
export class JudgeInterrupted extends Error {
|
|
8
|
+
exitCode;
|
|
9
|
+
constructor(signal, reason) {
|
|
10
|
+
super(reason ?? `the check was interrupted by ${signal}; nothing was paid and no verdict was written`);
|
|
11
|
+
this.name = "JudgeInterrupted";
|
|
12
|
+
this.exitCode = SIGNAL_EXIT[signal];
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
export const SIGNAL_EXIT = { SIGINT: 130, SIGTERM: 143 };
|
|
16
|
+
//# sourceMappingURL=judge-errors.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"judge-errors.js","sourceRoot":"","sources":["../../src/judge-errors.ts"],"names":[],"mappings":"AAAA,MAAM,OAAO,YAAa,SAAQ,KAAK;IACrC,YAAY,MAAc;QACxB,KAAK,CAAC,MAAM,CAAC,CAAC;QACd,IAAI,CAAC,IAAI,GAAG,cAAc,CAAC;IAC7B,CAAC;CACF;AAED,MAAM,OAAO,gBAAiB,SAAQ,KAAK;IAChC,QAAQ,CAAS;IAE1B,YAAY,MAAuB,EAAE,MAAe;QAClD,KAAK,CAAC,MAAM,IAAI,gCAAgC,MAAM,+CAA+C,CAAC,CAAC;QACvG,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;QAC/B,IAAI,CAAC,QAAQ,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC;IACtC,CAAC;CACF;AAED,MAAM,CAAC,MAAM,WAAW,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAW,CAAC"}
|
package/dist/src/judge.d.ts
CHANGED
|
@@ -1,14 +1,11 @@
|
|
|
1
|
-
import type
|
|
1
|
+
import { type Address, type Signature } from "@solana/kit";
|
|
2
2
|
import { type Transport } from "@intent-engine/client";
|
|
3
|
-
import {
|
|
3
|
+
import type { Command } from "./args.js";
|
|
4
4
|
import type { Runtime } from "./commands.js";
|
|
5
|
-
|
|
6
|
-
export
|
|
7
|
-
export
|
|
8
|
-
export
|
|
9
|
-
export declare class JudgeRefused extends Error {
|
|
10
|
-
constructor(reason: string);
|
|
11
|
-
}
|
|
5
|
+
import { type InterruptSignal } from "./judge-errors.js";
|
|
6
|
+
export { type InterruptSignal, JudgeInterrupted, JudgeRefused, SIGNAL_EXIT } from "./judge-errors.js";
|
|
7
|
+
export { artifactSha256, CLEANUP_RETRIES, removeCopy, SKIPPED, SPEC_COPY } from "./artifact.js";
|
|
8
|
+
export { type Check, CHECK_ENV, checkEnv, type CheckOptions, claim, ENV_ARTIFACT_PATH, ENV_ARTIFACT_SHA256, ENV_SPEC_PATH, leftRunning, type Recorded, runCheck, type Running, stillRunning, } from "./check-process.js";
|
|
12
9
|
export type JudgeCommand = Extract<Command, {
|
|
13
10
|
name: "judge";
|
|
14
11
|
}>;
|
|
@@ -22,12 +19,10 @@ export type Verdict = {
|
|
|
22
19
|
payTo: Address;
|
|
23
20
|
signature: Signature | null;
|
|
24
21
|
next?: string;
|
|
22
|
+
cleanup?: string;
|
|
25
23
|
};
|
|
26
|
-
export
|
|
27
|
-
|
|
28
|
-
timedOut: boolean;
|
|
29
|
-
};
|
|
30
|
-
export declare function artifactSha256(path: string): Promise<string>;
|
|
31
|
-
export declare function runCheck(command: string, env: NodeJS.ProcessEnv, timeoutSeconds: number): Promise<Check>;
|
|
32
|
-
export declare function checkEnv(base: NodeJS.ProcessEnv, spec: string, artifact: string, sha256: string): NodeJS.ProcessEnv;
|
|
24
|
+
export declare const pagesRead: (pages: number) => string;
|
|
25
|
+
export declare const resultOutside: (result: bigint, intent: Address, min: bigint, max: bigint) => string;
|
|
33
26
|
export declare function judge(command: JudgeCommand, runtime: Runtime, transport: Transport): Promise<Verdict>;
|
|
27
|
+
export declare const notSent: (signal: InterruptSignal) => string;
|
|
28
|
+
export declare const mayHaveLanded: (signal: InterruptSignal, address: Address, signature: Signature | undefined) => string;
|
package/dist/src/judge.js
CHANGED
|
@@ -1,91 +1,21 @@
|
|
|
1
|
-
import { spawn } from "node:child_process";
|
|
2
1
|
import { createHash } from "node:crypto";
|
|
3
|
-
import {
|
|
4
|
-
import {
|
|
5
|
-
import {
|
|
6
|
-
import {
|
|
7
|
-
import {
|
|
2
|
+
import { readFile, rm, writeFile } from "node:fs/promises";
|
|
3
|
+
import { resolve } from "node:path";
|
|
4
|
+
import { getBase58Decoder } from "@solana/kit";
|
|
5
|
+
import { decodeParams, IntentStatus, Kind } from "@intent-engine/core";
|
|
6
|
+
import { chainTime, createClient, deliveryRecord, firstDelivery, loadIntent, SIGNATURE_PAGE } from "@intent-engine/client";
|
|
8
7
|
import { NOT_SENT } from "./flows.js";
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
export
|
|
13
|
-
export
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
this.name = "JudgeRefused";
|
|
17
|
-
}
|
|
18
|
-
}
|
|
8
|
+
import { JudgeInterrupted, JudgeRefused, SIGNAL_EXIT } from "./judge-errors.js";
|
|
9
|
+
import { copyOf, readArtifact, removeCopy } from "./artifact.js";
|
|
10
|
+
import { checkEnv, holdSignals, runCheck } from "./check-process.js";
|
|
11
|
+
export { JudgeInterrupted, JudgeRefused, SIGNAL_EXIT } from "./judge-errors.js";
|
|
12
|
+
export { artifactSha256, CLEANUP_RETRIES, removeCopy, SKIPPED, SPEC_COPY } from "./artifact.js";
|
|
13
|
+
export { CHECK_ENV, checkEnv, claim, ENV_ARTIFACT_PATH, ENV_ARTIFACT_SHA256, ENV_SPEC_PATH, leftRunning, runCheck, stillRunning, } from "./check-process.js";
|
|
14
|
+
const FORCED_EXIT_MS = 200;
|
|
19
15
|
const hex = (bytes) => Buffer.from(bytes).toString("hex");
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
if (SKIPPED.has(entry.name)) {
|
|
24
|
-
continue;
|
|
25
|
-
}
|
|
26
|
-
const path = prefix === "" ? entry.name : `${prefix}/${entry.name}`;
|
|
27
|
-
const full = join(root, entry.name);
|
|
28
|
-
if (entry.isDirectory()) {
|
|
29
|
-
entries.push(...(await filesUnder(full, path)));
|
|
30
|
-
}
|
|
31
|
-
else if (entry.isFile()) {
|
|
32
|
-
entries.push({ path, bytes: await readFile(full) });
|
|
33
|
-
}
|
|
34
|
-
else {
|
|
35
|
-
throw new JudgeRefused(`the artifact holds ${path}, which is neither a regular file nor a directory; the judge hashes only those`);
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
return entries;
|
|
39
|
-
}
|
|
40
|
-
export async function artifactSha256(path) {
|
|
41
|
-
const found = await stat(path);
|
|
42
|
-
if (found.isFile()) {
|
|
43
|
-
return createHash("sha256").update(await readFile(path)).digest("hex");
|
|
44
|
-
}
|
|
45
|
-
if (found.isDirectory()) {
|
|
46
|
-
return manifestSha256(await filesUnder(path, ""));
|
|
47
|
-
}
|
|
48
|
-
throw new JudgeRefused(`--artifact ${path} is neither a regular file nor a directory`);
|
|
49
|
-
}
|
|
50
|
-
function killTree(pid) {
|
|
51
|
-
if (pid === undefined) {
|
|
52
|
-
return;
|
|
53
|
-
}
|
|
54
|
-
if (process.platform === "win32") {
|
|
55
|
-
spawn("taskkill", ["/pid", String(pid), "/T", "/F"], { stdio: "ignore", windowsHide: true }).on("error", () => undefined);
|
|
56
|
-
return;
|
|
57
|
-
}
|
|
58
|
-
try {
|
|
59
|
-
process.kill(-pid, "SIGKILL");
|
|
60
|
-
}
|
|
61
|
-
catch {
|
|
62
|
-
return;
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
export function runCheck(command, env, timeoutSeconds) {
|
|
66
|
-
return new Promise((done, failed) => {
|
|
67
|
-
const child = spawn(command, { shell: true, env, stdio: ["ignore", 2, 2], detached: process.platform !== "win32", windowsHide: true });
|
|
68
|
-
let timedOut = false;
|
|
69
|
-
const timer = setTimeout(() => {
|
|
70
|
-
timedOut = true;
|
|
71
|
-
killTree(child.pid);
|
|
72
|
-
}, timeoutSeconds * 1000);
|
|
73
|
-
child.once("error", (error) => {
|
|
74
|
-
clearTimeout(timer);
|
|
75
|
-
failed(error);
|
|
76
|
-
});
|
|
77
|
-
child.once("exit", (code) => {
|
|
78
|
-
clearTimeout(timer);
|
|
79
|
-
killTree(child.pid);
|
|
80
|
-
done({ exitCode: timedOut ? null : code, timedOut });
|
|
81
|
-
});
|
|
82
|
-
});
|
|
83
|
-
}
|
|
84
|
-
export function checkEnv(base, spec, artifact, sha256) {
|
|
85
|
-
const env = { ...base, [ENV_SPEC_PATH]: spec, [ENV_ARTIFACT_PATH]: artifact, [ENV_ARTIFACT_SHA256]: sha256 };
|
|
86
|
-
delete env[ENV_KEYPAIR];
|
|
87
|
-
return env;
|
|
88
|
-
}
|
|
16
|
+
const reasonOf = (error) => (error instanceof Error ? error.message : String(error));
|
|
17
|
+
export const pagesRead = (pages) => `It read ${pages} ${pages === 1 ? "page" : "pages"} of ${SIGNATURE_PAGE} signatures; a higher --max-pages reads further, but does not help when the RPC node's ledger does not reach back to the escrow's creation or the node cannot page signatures or report its first available slot`;
|
|
18
|
+
export const resultOutside = (result, intent, min, max) => `--result ${result} lies outside the results intent ${intent} accepts, ${min} to ${max}; nothing was run or paid`;
|
|
89
19
|
async function escrowFor(transport, judge, owner, nonce) {
|
|
90
20
|
const { address, intent } = await loadIntent(transport, owner, nonce);
|
|
91
21
|
const params = decodeParams(intent.kind, Uint8Array.from(intent.params));
|
|
@@ -98,19 +28,31 @@ async function escrowFor(transport, judge, owner, nonce) {
|
|
|
98
28
|
if (params.attestor !== judge) {
|
|
99
29
|
throw new JudgeRefused(`intent ${address} names ${params.attestor} as its judge, not ${judge}`);
|
|
100
30
|
}
|
|
101
|
-
return { address, specHash: hex(params.specHash) };
|
|
31
|
+
return { address, specHash: hex(params.specHash), minResult: params.minResult, maxResult: params.maxResult };
|
|
102
32
|
}
|
|
103
33
|
export async function judge(command, runtime, transport) {
|
|
34
|
+
if (command.verdict !== undefined) {
|
|
35
|
+
await rm(command.verdict, { force: true });
|
|
36
|
+
}
|
|
104
37
|
const signer = await runtime.loadSigner(command.keypair);
|
|
105
|
-
const { address, specHash } = await escrowFor(transport, signer.address, command.owner, command.nonce);
|
|
106
|
-
const
|
|
107
|
-
|
|
38
|
+
const { address, specHash, minResult, maxResult } = await escrowFor(transport, signer.address, command.owner, command.nonce);
|
|
39
|
+
const result = command.result ?? minResult;
|
|
40
|
+
if (result < minResult || result > maxResult) {
|
|
41
|
+
throw new JudgeRefused(resultOutside(result, address, minResult, maxResult));
|
|
42
|
+
}
|
|
43
|
+
const specBytes = await readFile(resolve(command.spec));
|
|
44
|
+
const specSha256 = createHash("sha256").update(specBytes).digest("hex");
|
|
108
45
|
if (specSha256 !== specHash) {
|
|
109
46
|
throw new JudgeRefused(`--spec ${command.spec} has sha256 ${specSha256}, but intent ${address} commits ${specHash}`);
|
|
110
47
|
}
|
|
111
48
|
const artifact = resolve(command.artifact);
|
|
112
|
-
const
|
|
113
|
-
const
|
|
49
|
+
const read = await readArtifact(artifact);
|
|
50
|
+
const sha256 = read.sha256;
|
|
51
|
+
const record = await deliveryRecord(transport, signer.address, address, command.maxPages);
|
|
52
|
+
if (!record.complete) {
|
|
53
|
+
throw new JudgeRefused(`the delivery record is incomplete because the judge's history is too long to read in full or the RPC node cannot serve all of it, so the earliest announcer of the artifact with sha256 ${sha256} for intent ${address} cannot be known; nothing was run or paid. ${pagesRead(record.pages)}`);
|
|
54
|
+
}
|
|
55
|
+
const first = firstDelivery(record.deliveries, sha256);
|
|
114
56
|
const payTo = command.payTo ?? first?.worker;
|
|
115
57
|
if (payTo === undefined) {
|
|
116
58
|
throw new JudgeRefused(`nobody announced the artifact with sha256 ${sha256} for intent ${address}; pass --pay-to to pay a worker who did not announce it`);
|
|
@@ -118,18 +60,91 @@ export async function judge(command, runtime, transport) {
|
|
|
118
60
|
if (first !== null && first.worker !== payTo) {
|
|
119
61
|
throw new JudgeRefused(`${first.worker} announced the artifact with sha256 ${sha256} first, in ${first.signature}; it is paid, not --pay-to ${payTo}`);
|
|
120
62
|
}
|
|
121
|
-
const
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
63
|
+
const signals = holdSignals();
|
|
64
|
+
try {
|
|
65
|
+
return await checkAndSettle(command, transport, signer, signals, { address, specHash, sha256, payTo, result, read, specBytes });
|
|
66
|
+
}
|
|
67
|
+
finally {
|
|
68
|
+
signals.release();
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
export const notSent = (signal) => `the check passed, but ${signal} arrived before the release was sent; nothing was paid and no verdict was written`;
|
|
72
|
+
export const mayHaveLanded = (signal, address, signature) => `the check passed and the release was sent${signature === undefined ? "" : ` in ${signature}`}; a second ${signal} stopped the judge before the send was confirmed, so the release may have landed. Read intent ${address} before judging it again; no verdict was written`;
|
|
73
|
+
function sendRelease(command, transport, signer, signals, release) {
|
|
74
|
+
return new Promise((done, failed) => {
|
|
75
|
+
let sent = false;
|
|
76
|
+
let signature;
|
|
77
|
+
let after = 0;
|
|
78
|
+
const signTransactions = async (transactions, config) => {
|
|
79
|
+
const caught = signals.caught();
|
|
80
|
+
if (caught !== undefined) {
|
|
81
|
+
throw new JudgeInterrupted(caught, notSent(caught));
|
|
82
|
+
}
|
|
83
|
+
sent = true;
|
|
84
|
+
const signed = await signer.signTransactions(transactions, config);
|
|
85
|
+
const own = signed[0]?.[signer.address];
|
|
86
|
+
signature = own === undefined ? signature : getBase58Decoder().decode(own);
|
|
87
|
+
return signed;
|
|
88
|
+
};
|
|
89
|
+
signals.listen((signal) => {
|
|
90
|
+
if (!sent) {
|
|
91
|
+
failed(new JudgeInterrupted(signal, notSent(signal)));
|
|
92
|
+
return;
|
|
93
|
+
}
|
|
94
|
+
after += 1;
|
|
95
|
+
if (after > 1) {
|
|
96
|
+
failed(new JudgeInterrupted(signal, mayHaveLanded(signal, release.address, signature)));
|
|
97
|
+
setTimeout(() => process.exit(SIGNAL_EXIT[signal]), FORCED_EXIT_MS).unref();
|
|
98
|
+
}
|
|
99
|
+
});
|
|
100
|
+
createClient({ url: command.url, transport })
|
|
101
|
+
.settleProof({
|
|
102
|
+
judge: Object.freeze({ ...signer, signTransactions }),
|
|
126
103
|
owner: command.owner,
|
|
127
104
|
nonce: command.nonce,
|
|
128
|
-
payTo,
|
|
129
|
-
result:
|
|
130
|
-
deliveredSha256: sha256,
|
|
105
|
+
payTo: release.payTo,
|
|
106
|
+
result: release.result,
|
|
107
|
+
deliveredSha256: release.sha256,
|
|
131
108
|
})
|
|
132
|
-
|
|
109
|
+
.then((confirmed) => {
|
|
110
|
+
signals.listen(() => undefined);
|
|
111
|
+
done(confirmed);
|
|
112
|
+
}, failed);
|
|
113
|
+
});
|
|
114
|
+
}
|
|
115
|
+
async function checkAndSettle(command, transport, signer, signals, { address, specHash, sha256, payTo, result, read, specBytes }) {
|
|
116
|
+
const copy = await copyOf(read, specBytes);
|
|
117
|
+
let check = { exitCode: null, timedOut: false };
|
|
118
|
+
let cleanup;
|
|
119
|
+
try {
|
|
120
|
+
if (signals.caught() === undefined) {
|
|
121
|
+
check = await runCheck(command.run, checkEnv(process.env, copy.spec, copy.path, sha256), command.timeout, { cwd: copy.root });
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
finally {
|
|
125
|
+
cleanup = await removeCopy(copy.root);
|
|
126
|
+
}
|
|
127
|
+
const interrupted = check.interrupted ?? signals.caught();
|
|
128
|
+
if (interrupted !== undefined) {
|
|
129
|
+
throw new JudgeInterrupted(interrupted);
|
|
130
|
+
}
|
|
131
|
+
const passed = check.exitCode === 0;
|
|
132
|
+
let signature = null;
|
|
133
|
+
if (passed && command.yes) {
|
|
134
|
+
try {
|
|
135
|
+
signature = await sendRelease(command, transport, signer, signals, { address, payTo, result, sha256 });
|
|
136
|
+
}
|
|
137
|
+
catch (error) {
|
|
138
|
+
if (error instanceof JudgeInterrupted) {
|
|
139
|
+
throw error;
|
|
140
|
+
}
|
|
141
|
+
const during = signals.caught();
|
|
142
|
+
if (during !== undefined) {
|
|
143
|
+
throw new JudgeInterrupted(during, `the check passed and ${during} arrived while the release was being sent; the send failed, but the release may have landed: ${reasonOf(error)}. Read intent ${address} before judging it again; no verdict was written`);
|
|
144
|
+
}
|
|
145
|
+
throw error;
|
|
146
|
+
}
|
|
147
|
+
}
|
|
133
148
|
const verdict = {
|
|
134
149
|
intent: address,
|
|
135
150
|
specHash,
|
|
@@ -140,10 +155,15 @@ export async function judge(command, runtime, transport) {
|
|
|
140
155
|
payTo,
|
|
141
156
|
signature,
|
|
142
157
|
...(passed && !command.yes ? { next: NOT_SENT } : {}),
|
|
158
|
+
...(cleanup !== undefined ? { cleanup } : {}),
|
|
143
159
|
};
|
|
144
160
|
if (command.verdict !== undefined) {
|
|
145
161
|
await writeFile(command.verdict, `${JSON.stringify(verdict, null, 2)}\n`);
|
|
146
162
|
}
|
|
163
|
+
const during = signals.caught();
|
|
164
|
+
if (signature !== null && during !== undefined) {
|
|
165
|
+
throw new JudgeInterrupted(during, `the check passed and ${during} arrived while the release was being sent; it was sent in ${signature}${command.verdict !== undefined ? ` and the verdict was written to ${command.verdict}` : ""}`);
|
|
166
|
+
}
|
|
147
167
|
return verdict;
|
|
148
168
|
}
|
|
149
169
|
//# sourceMappingURL=judge.js.map
|
package/dist/src/judge.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"judge.js","sourceRoot":"","sources":["../../src/judge.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"judge.js","sourceRoot":"","sources":["../../src/judge.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AAC3D,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAgB,gBAAgB,EAAsC,MAAM,aAAa,CAAC;AACjG,OAAO,EAAE,YAAY,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,qBAAqB,CAAC;AACvE,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,cAAc,EAAE,aAAa,EAAE,UAAU,EAAE,cAAc,EAAkB,MAAM,uBAAuB,CAAC;AAE3I,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AAEtC,OAAO,EAAwB,gBAAgB,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACtG,OAAO,EAAiB,MAAM,EAAE,YAAY,EAAE,UAAU,EAAE,MAAM,eAAe,CAAC;AAChF,OAAO,EAAc,QAAQ,EAAoB,WAAW,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAEnG,OAAO,EAAwB,gBAAgB,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AACtG,OAAO,EAAE,cAAc,EAAE,eAAe,EAAE,UAAU,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAChG,OAAO,EAEL,SAAS,EACT,QAAQ,EAER,KAAK,EACL,iBAAiB,EACjB,mBAAmB,EACnB,aAAa,EACb,WAAW,EAEX,QAAQ,EAER,YAAY,GACb,MAAM,oBAAoB,CAAC;AAE5B,MAAM,cAAc,GAAG,GAAG,CAAC;AAiB3B,MAAM,GAAG,GAAG,CAAC,KAAiB,EAAU,EAAE,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAE9E,MAAM,QAAQ,GAAG,CAAC,KAAc,EAAU,EAAE,CAAC,CAAC,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC;AAEtG,MAAM,CAAC,MAAM,SAAS,GAAG,CAAC,KAAa,EAAU,EAAE,CACjD,WAAW,KAAK,IAAI,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,OAAO,OAAO,cAAc,kNAAkN,CAAC;AAE5R,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,MAAc,EAAE,MAAe,EAAE,GAAW,EAAE,GAAW,EAAU,EAAE,CACjG,YAAY,MAAM,oCAAoC,MAAM,aAAa,GAAG,OAAO,GAAG,2BAA2B,CAAC;AAEpH,KAAK,UAAU,SAAS,CAAC,SAAoB,EAAE,KAAc,EAAE,KAAc,EAAE,KAAa;IAC1F,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,GAAG,MAAM,UAAU,CAAC,SAAS,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;IACtE,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC;IACzE,IAAI,MAAM,CAAC,IAAI,KAAK,IAAI,CAAC,cAAc,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC;QACjF,MAAM,IAAI,YAAY,CAAC,UAAU,OAAO,2EAA2E,CAAC,CAAC;IACvH,CAAC;IACD,IAAI,MAAM,CAAC,MAAM,KAAK,YAAY,CAAC,IAAI,IAAI,MAAM,CAAC,SAAS,IAAI,CAAC,MAAM,SAAS,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC;QAC5F,MAAM,IAAI,YAAY,CAAC,UAAU,OAAO,oBAAoB,CAAC,CAAC;IAChE,CAAC;IACD,IAAI,MAAM,CAAC,QAAQ,KAAK,KAAK,EAAE,CAAC;QAC9B,MAAM,IAAI,YAAY,CAAC,UAAU,OAAO,UAAU,MAAM,CAAC,QAAQ,sBAAsB,KAAK,EAAE,CAAC,CAAC;IAClG,CAAC;IACD,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,CAAC;AAC/G,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,KAAK,CAAC,OAAqB,EAAE,OAAgB,EAAE,SAAoB;IACvF,IAAI,OAAO,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QAClC,MAAM,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7C,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;IACzD,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE,GAAG,MAAM,SAAS,CAAC,SAAS,EAAE,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,KAAK,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IAC7H,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,SAAS,CAAC;IAC3C,IAAI,MAAM,GAAG,SAAS,IAAI,MAAM,GAAG,SAAS,EAAE,CAAC;QAC7C,MAAM,IAAI,YAAY,CAAC,aAAa,CAAC,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,CAAC,CAAC,CAAC;IAC/E,CAAC;IACD,MAAM,SAAS,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;IACxD,MAAM,UAAU,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACxE,IAAI,UAAU,KAAK,QAAQ,EAAE,CAAC;QAC5B,MAAM,IAAI,YAAY,CAAC,UAAU,OAAO,CAAC,IAAI,eAAe,UAAU,gBAAgB,OAAO,YAAY,QAAQ,EAAE,CAAC,CAAC;IACvH,CAAC;IACD,MAAM,QAAQ,GAAG,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC3C,MAAM,IAAI,GAAG,MAAM,YAAY,CAAC,QAAQ,CAAC,CAAC;IAC1C,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC;IAC3B,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,SAAS,EAAE,MAAM,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC1F,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,CAAC;QACrB,MAAM,IAAI,YAAY,CACpB,2LAA2L,MAAM,eAAe,OAAO,8CAA8C,SAAS,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAC/R,CAAC;IACJ,CAAC;IACD,MAAM,KAAK,GAAG,aAAa,CAAC,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;IACvD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,IAAI,KAAK,EAAE,MAAM,CAAC;IAC7C,IAAI,KAAK,KAAK,SAAS,EAAE,CAAC;QACxB,MAAM,IAAI,YAAY,CAAC,6CAA6C,MAAM,eAAe,OAAO,yDAAyD,CAAC,CAAC;IAC7J,CAAC;IACD,IAAI,KAAK,KAAK,IAAI,IAAI,KAAK,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;QAC7C,MAAM,IAAI,YAAY,CAAC,GAAG,KAAK,CAAC,MAAM,uCAAuC,MAAM,cAAc,KAAK,CAAC,SAAS,8BAA8B,KAAK,EAAE,CAAC,CAAC;IACzJ,CAAC;IACD,MAAM,OAAO,GAAG,WAAW,EAAE,CAAC;IAC9B,IAAI,CAAC;QACH,OAAO,MAAM,cAAc,CAAC,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC;IAClI,CAAC;YAAS,CAAC;QACT,OAAO,CAAC,OAAO,EAAE,CAAC;IACpB,CAAC;AACH,CAAC;AAED,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,MAAuB,EAAU,EAAE,CACzD,yBAAyB,MAAM,mFAAmF,CAAC;AAErH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,MAAuB,EAAE,OAAgB,EAAE,SAAgC,EAAU,EAAE,CACnH,4CAA4C,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,SAAS,EAAE,cAAc,MAAM,iGAAiG,OAAO,kDAAkD,CAAC;AAI9Q,SAAS,WAAW,CAAC,OAAqB,EAAE,SAAoB,EAAE,MAAqB,EAAE,OAAoB,EAAE,OAAgB;IAC7H,OAAO,IAAI,OAAO,CAAC,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE;QAClC,IAAI,IAAI,GAAG,KAAK,CAAC;QACjB,IAAI,SAAgC,CAAC;QACrC,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,MAAM,gBAAgB,GAAsC,KAAK,EAAE,YAAY,EAAE,MAAM,EAAE,EAAE;YACzF,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;YAChC,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;gBACzB,MAAM,IAAI,gBAAgB,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC;YACtD,CAAC;YACD,IAAI,GAAG,IAAI,CAAC;YACZ,MAAM,MAAM,GAAG,MAAM,MAAM,CAAC,gBAAgB,CAAC,YAAY,EAAE,MAAM,CAAC,CAAC;YACnE,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;YACxC,SAAS,GAAG,GAAG,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAE,gBAAgB,EAAE,CAAC,MAAM,CAAC,GAAG,CAAe,CAAC;YAC1F,OAAO,MAAM,CAAC;QAChB,CAAC,CAAC;QACF,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE;YACxB,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,MAAM,CAAC,IAAI,gBAAgB,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;gBACtD,OAAO;YACT,CAAC;YACD,KAAK,IAAI,CAAC,CAAC;YACX,IAAI,KAAK,GAAG,CAAC,EAAE,CAAC;gBACd,MAAM,CAAC,IAAI,gBAAgB,CAAC,MAAM,EAAE,aAAa,CAAC,MAAM,EAAE,OAAO,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;gBACxF,UAAU,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC,EAAE,cAAc,CAAC,CAAC,KAAK,EAAE,CAAC;YAC9E,CAAC;QACH,CAAC,CAAC,CAAC;QACH,YAAY,CAAC,EAAE,GAAG,EAAE,OAAO,CAAC,GAAG,EAAE,SAAS,EAAE,CAAC;aAC1C,WAAW,CAAC;YACX,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,EAAE,GAAG,MAAM,EAAE,gBAAgB,EAAE,CAAC;YACrD,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,eAAe,EAAE,OAAO,CAAC,MAAM;SAChC,CAAC;aACD,IAAI,CAAC,CAAC,SAAS,EAAE,EAAE;YAClB,OAAO,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,SAAS,CAAC,CAAC;YAChC,IAAI,CAAC,SAAS,CAAC,CAAC;QAClB,CAAC,EAAE,MAAM,CAAC,CAAC;IACf,CAAC,CAAC,CAAC;AACL,CAAC;AAID,KAAK,UAAU,cAAc,CAC3B,OAAqB,EACrB,SAAoB,EACpB,MAAqB,EACrB,OAAoB,EACpB,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,SAAS,EAAU;IAErE,MAAM,IAAI,GAAG,MAAM,MAAM,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IAC3C,IAAI,KAAK,GAAU,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;IACvD,IAAI,OAA2B,CAAC;IAChC,IAAI,CAAC;QACH,IAAI,OAAO,CAAC,MAAM,EAAE,KAAK,SAAS,EAAE,CAAC;YACnC,KAAK,GAAG,MAAM,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,QAAQ,CAAC,OAAO,CAAC,GAAG,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,OAAO,CAAC,OAAO,EAAE,EAAE,GAAG,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QAChI,CAAC;IACH,CAAC;YAAS,CAAC;QACT,OAAO,GAAG,MAAM,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACxC,CAAC;IACD,MAAM,WAAW,GAAG,KAAK,CAAC,WAAW,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAC1D,IAAI,WAAW,KAAK,SAAS,EAAE,CAAC;QAC9B,MAAM,IAAI,gBAAgB,CAAC,WAAW,CAAC,CAAC;IAC1C,CAAC;IACD,MAAM,MAAM,GAAG,KAAK,CAAC,QAAQ,KAAK,CAAC,CAAC;IACpC,IAAI,SAAS,GAAqB,IAAI,CAAC;IACvC,IAAI,MAAM,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;QAC1B,IAAI,CAAC;YACH,SAAS,GAAG,MAAM,WAAW,CAAC,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,CAAC;QACzG,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,KAAK,YAAY,gBAAgB,EAAE,CAAC;gBACtC,MAAM,KAAK,CAAC;YACd,CAAC;YACD,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;YAChC,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;gBACzB,MAAM,IAAI,gBAAgB,CACxB,MAAM,EACN,wBAAwB,MAAM,gGAAgG,QAAQ,CAAC,KAAK,CAAC,iBAAiB,OAAO,kDAAkD,CACxN,CAAC;YACJ,CAAC;YACD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IACD,MAAM,OAAO,GAAY;QACvB,MAAM,EAAE,OAAO;QACf,QAAQ;QACR,cAAc,EAAE,MAAM;QACtB,OAAO,EAAE,OAAO,CAAC,GAAG;QACpB,QAAQ,EAAE,KAAK,CAAC,QAAQ;QACxB,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM;QACjC,KAAK;QACL,SAAS;QACT,GAAG,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACrD,GAAG,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAC9C,CAAC;IACF,IAAI,OAAO,CAAC,OAAO,KAAK,SAAS,EAAE,CAAC;QAClC,MAAM,SAAS,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC;IAC5E,CAAC;IACD,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,EAAE,CAAC;IAChC,IAAI,SAAS,KAAK,IAAI,IAAI,MAAM,KAAK,SAAS,EAAE,CAAC;QAC/C,MAAM,IAAI,gBAAgB,CACxB,MAAM,EACN,wBAAwB,MAAM,6DAA6D,SAAS,GAAG,OAAO,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,mCAAmC,OAAO,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CACnM,CAAC;IACJ,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
package/dist/src/main.d.ts
CHANGED
|
@@ -4,6 +4,7 @@ import { type Runtime } from "./commands.js";
|
|
|
4
4
|
export declare const EXIT_OK = 0;
|
|
5
5
|
export declare const EXIT_FAILED = 1;
|
|
6
6
|
export declare const EXIT_USAGE = 2;
|
|
7
|
+
export declare const EXIT_PARTIAL = 3;
|
|
7
8
|
export declare const KEYPAIR_UNREADABLE = "--keypair must name a readable JSON file holding a 64-byte keypair";
|
|
8
9
|
export declare const KEYPAIR_EXPOSED = "--keypair names a file other users can read or change; restrict it with chmod 600";
|
|
9
10
|
type Io = {
|
|
@@ -12,8 +13,10 @@ type Io = {
|
|
|
12
13
|
};
|
|
13
14
|
export { render } from "./render.js";
|
|
14
15
|
export declare const unreachable: (url: string) => string;
|
|
16
|
+
export declare const PREVIEW_ONLY = "nothing was sent; pass --yes to sign and send it";
|
|
15
17
|
export declare function main(argv: readonly string[], runtime: Runtime, io: Io): Promise<number>;
|
|
16
|
-
export declare
|
|
18
|
+
export declare const keypairUnreadable: (path: string) => string;
|
|
19
|
+
export declare function loadKeypairFile(path: string, platform?: string, home?: string): Promise<KeyPairSigner>;
|
|
17
20
|
type Pipes = {
|
|
18
21
|
stdin: Readable;
|
|
19
22
|
stdout: Writable;
|
package/dist/src/main.js
CHANGED
|
@@ -7,20 +7,24 @@ import { changesFrom, intentNotifications, rpcTransport, signatureWatch } from "
|
|
|
7
7
|
import { ENV_URL, outputOf, parse, UsageError } from "./args.js";
|
|
8
8
|
import { follow, run, watchSolve } from "./commands.js";
|
|
9
9
|
import { withPriority } from "./compute.js";
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
10
|
+
import { JudgeInterrupted } from "./judge.js";
|
|
11
|
+
import { printableLines, redactUrl, render, renderText } from "./render.js";
|
|
12
|
+
import { expandHome, withSettings } from "./wallet.js";
|
|
12
13
|
import { WALLET_NOTICE } from "./agent/wallet.js";
|
|
13
14
|
export const EXIT_OK = 0;
|
|
14
15
|
export const EXIT_FAILED = 1;
|
|
15
16
|
export const EXIT_USAGE = 2;
|
|
17
|
+
export const EXIT_PARTIAL = 3;
|
|
16
18
|
export const KEYPAIR_UNREADABLE = "--keypair must name a readable JSON file holding a 64-byte keypair";
|
|
17
19
|
export const KEYPAIR_EXPOSED = "--keypair names a file other users can read or change; restrict it with chmod 600";
|
|
18
20
|
export { render } from "./render.js";
|
|
19
|
-
export const unreachable = (url) => `cannot reach the RPC node at ${url};
|
|
21
|
+
export const unreachable = (url) => `cannot reach the RPC node at ${url}; check your network connection and that this endpoint is up, or pass another --url or set ${ENV_URL}`;
|
|
22
|
+
export const PREVIEW_ONLY = "nothing was sent; pass --yes to sign and send it";
|
|
23
|
+
const PREVIEWED = new Set(["cancel", "expire", "close"]);
|
|
20
24
|
const offline = (error) => error instanceof TypeError && error.message === "fetch failed";
|
|
21
25
|
function message(error, url) {
|
|
22
26
|
if (url !== undefined && offline(error)) {
|
|
23
|
-
return unreachable(url);
|
|
27
|
+
return unreachable(redactUrl(url));
|
|
24
28
|
}
|
|
25
29
|
return printableLines(error instanceof Error ? error.message : String(error));
|
|
26
30
|
}
|
|
@@ -46,22 +50,34 @@ export async function main(argv, runtime, io) {
|
|
|
46
50
|
if (result !== null) {
|
|
47
51
|
show(result);
|
|
48
52
|
}
|
|
53
|
+
if (PREVIEWED.has(command.name) && result !== null && "sent" in result && result.sent === false) {
|
|
54
|
+
io.err(PREVIEW_ONLY);
|
|
55
|
+
}
|
|
56
|
+
if (command.name === "flow" && command.flow === "mandate-revoke" && result !== null && ("failed" in result || "unknown" in result)) {
|
|
57
|
+
return EXIT_PARTIAL;
|
|
58
|
+
}
|
|
49
59
|
return command.name === "judge" && result !== null && "verdict" in result && result.verdict !== "pass" ? EXIT_FAILED : EXIT_OK;
|
|
50
60
|
}
|
|
51
61
|
catch (error) {
|
|
52
62
|
io.err(message(error, url));
|
|
63
|
+
if (error instanceof JudgeInterrupted) {
|
|
64
|
+
return error.exitCode;
|
|
65
|
+
}
|
|
53
66
|
return error instanceof UsageError ? EXIT_USAGE : EXIT_FAILED;
|
|
54
67
|
}
|
|
55
68
|
}
|
|
56
|
-
|
|
69
|
+
const keyLike = (path) => /^[1-9A-HJ-NP-Za-km-z]{32,}$/.test(path) || path.trimStart().startsWith("[");
|
|
70
|
+
export const keypairUnreadable = (path) => keyLike(path) ? `${KEYPAIR_UNREADABLE}; the value given looks like a key, not a file path, so it is not repeated here` : `${KEYPAIR_UNREADABLE}; tried ${path}`;
|
|
71
|
+
export async function loadKeypairFile(path, platform = process.platform, home = homedir()) {
|
|
72
|
+
const file = expandHome(path, home);
|
|
57
73
|
let bytes;
|
|
58
74
|
let mode;
|
|
59
75
|
try {
|
|
60
|
-
mode = (await stat(
|
|
61
|
-
bytes = JSON.parse(await readFile(
|
|
76
|
+
mode = (await stat(file)).mode;
|
|
77
|
+
bytes = JSON.parse(await readFile(file, "utf8"));
|
|
62
78
|
}
|
|
63
79
|
catch {
|
|
64
|
-
throw new UsageError(
|
|
80
|
+
throw new UsageError(keypairUnreadable(file));
|
|
65
81
|
}
|
|
66
82
|
if (platform !== "win32" && (mode & 0o077) !== 0) {
|
|
67
83
|
throw new UsageError(KEYPAIR_EXPOSED);
|
|
@@ -69,7 +85,7 @@ export async function loadKeypairFile(path, platform = process.platform) {
|
|
|
69
85
|
if (!Array.isArray(bytes) ||
|
|
70
86
|
bytes.length !== 64 ||
|
|
71
87
|
!bytes.every((b) => Number.isInteger(b) && b >= 0 && b <= 255)) {
|
|
72
|
-
throw new UsageError(
|
|
88
|
+
throw new UsageError(keypairUnreadable(file));
|
|
73
89
|
}
|
|
74
90
|
return createKeyPairSignerFromBytes(new Uint8Array(bytes));
|
|
75
91
|
}
|
package/dist/src/main.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"main.js","sourceRoot":"","sources":["../../src/main.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACpE,OAAO,EAAE,OAAO,EAAE,MAAM,SAAS,CAAC;AAClC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAEpC,OAAO,EAAE,oBAAoB,EAAE,MAAM,oCAAoC,CAAC;AAC1E,OAAO,EAAE,4BAA4B,EAAE,eAAe,EAAsB,MAAM,aAAa,CAAC;AAChG,OAAO,EAAE,WAAW,EAAE,mBAAmB,EAAgB,YAAY,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACrH,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AACjE,OAAO,EAAE,MAAM,EAAE,GAAG,EAAgB,UAAU,EAAE,MAAM,eAAe,CAAC;AACtE,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,cAAc,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"main.js","sourceRoot":"","sources":["../../src/main.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { type Values } from "./arg-options.js";
|
|
2
|
+
import type { Command, Remote, ToolInput } from "./command-types.js";
|
|
3
|
+
export declare const MANDATE_USE_KINDS = "a mandate covers swap, limit and dutch orders; name one of those";
|
|
4
|
+
export declare function order(kind: string | undefined, values: Values): ToolInput;
|
|
5
|
+
export declare function expiry(values: Values): ToolInput;
|
|
6
|
+
export declare function terms(kind: string | undefined, values: Values): ToolInput;
|
|
7
|
+
export declare function mandate(sub: string | undefined, kind: string | undefined, remote: Remote, values: Values): Command;
|
|
8
|
+
export declare const SPEC_HASH_FORMAT = "--spec-hash must be the spec's sha256 as 64 hex digits";
|
|
9
|
+
export declare const needsSpecHash: (option: string) => string;
|
|
10
|
+
export declare function createTerms(kind: string | undefined, values: Values): ToolInput;
|