@nexart/cli 0.15.0 → 0.16.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +64 -0
- package/README.md +129 -24
- package/dist/index.d.ts +49 -14
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +533 -69
- package/dist/index.js.map +1 -1
- package/dist/trustRoots.d.ts +6 -0
- package/dist/trustRoots.d.ts.map +1 -0
- package/dist/trustRoots.js +84 -0
- package/dist/trustRoots.js.map +1 -0
- package/package.json +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,69 @@
|
|
|
1
1
|
# @nexart/cli — Changelog
|
|
2
2
|
|
|
3
|
+
## v0.16.0 (2026-06-17) — `verify-record`: fully automatic, audit-grade, self-contained
|
|
4
|
+
|
|
5
|
+
Feature release. `verify-bundle` is **byte-for-byte unchanged** — the redesigned
|
|
6
|
+
output and automatic key/timestamp resolution apply to `verify-record` only.
|
|
7
|
+
|
|
8
|
+
- **Automatic verification.** `nexart verify-record <file>` now verifies integrity,
|
|
9
|
+
the receipt signature, **and** the RFC 3161 timestamp with no extra flags. The
|
|
10
|
+
`--verify-timestamp` gate is gone — timestamp verification always runs when a token
|
|
11
|
+
is present (the ASN.1 stack still loads lazily, only when a token exists).
|
|
12
|
+
- **Self-contained signing key resolution.** By priority: `--public-key` (explicit
|
|
13
|
+
override) → auto-fetched from the node's published key set at
|
|
14
|
+
`https://node.nexart.io/.well-known/nexart-node.json` (the key whose `kid` matches
|
|
15
|
+
the receipt's `attestorKeyId`) → a bundle-embedded key. The fetch is the **only**
|
|
16
|
+
network call, lives entirely in the CLI layer (the auditable `standaloneVerify.ts`
|
|
17
|
+
core stays `node:crypto`-only / no network), and fails gracefully. New **`--offline`**
|
|
18
|
+
flag disables it; the URL is overridable via `NEXART_NODE_WELLKNOWN_URL`.
|
|
19
|
+
- **Embedded DigiCert trust store.** Timestamps verify against a built-in trust store
|
|
20
|
+
(DigiCert Trusted Root G4 + DigiCert Assured ID Root CA) by default; **`--tsa-roots`**
|
|
21
|
+
overrides it with custom PEM roots.
|
|
22
|
+
- **Flexible input.** The bundle is read from `record.bundle` or, failing that, the
|
|
23
|
+
record root is treated as the bundle. The old "missing bundle" error is removed — a
|
|
24
|
+
malformed record now reports a clean **Integrity: FAIL** (exit `1`).
|
|
25
|
+
- **Timestamp precedence:** `verification.timestamp.token` → `timestamp.token` →
|
|
26
|
+
bundle-embedded (`trustedTimestamps[]` / singular `timestamp`).
|
|
27
|
+
- **Redesigned audit-grade report** (and `--json`): **Integrity**, **Signature**,
|
|
28
|
+
**Timestamp** (`VERIFIED` / `INVALID (<reason>)` / `PRESENT BUT NOT VERIFIED` /
|
|
29
|
+
`NOT INCLUDED IN RECORD` + generation time and authority), **Node** (node id, key id,
|
|
30
|
+
key source, operator), **Identity**, and **Execution** (protocol, provider, model,
|
|
31
|
+
input/output hashes, parameters, created-at). The report now ends with a single
|
|
32
|
+
headline line — **`FINAL STATUS: VERIFIED EVIDENCE RECORD`** or **`FINAL STATUS:
|
|
33
|
+
FAILED`**.
|
|
34
|
+
- **New `nexart verify-url <url>`.** One-command verification: fetches a CER record (or
|
|
35
|
+
a bare bundle) as JSON from a URL and verifies it through the **same** automatic
|
|
36
|
+
key/timestamp resolution and audit-grade renderer as `verify-record`. The payload is
|
|
37
|
+
auto-detected as a full record (`verification.receipt`) or a raw bundle — both route
|
|
38
|
+
through the rich verifier. The URL fetch is the record *source* and always runs;
|
|
39
|
+
`--offline` here only disables the separate signing-key auto-fetch. Bad HTTP status,
|
|
40
|
+
network errors, and non-JSON bodies fail cleanly with exit `1`.
|
|
41
|
+
- **New `nexart verify-hash <certificate_hash>`.** Resolves a record straight from its
|
|
42
|
+
certificate hash: constructs the public node lookup URL
|
|
43
|
+
(`https://node.nexart.io/v1/cer/public?certificate_hash=<hash>`) and verifies it via
|
|
44
|
+
`verify-url`, so the output is **identical** to `verify-url`. The hash must carry the
|
|
45
|
+
canonical `sha256:` prefix (a missing prefix fails cleanly with exit `1` before any
|
|
46
|
+
network call). Supports `--short`, `--offline`, `--json` (and the rest of the
|
|
47
|
+
`verify-url` options). Distinct from the existing `verify <snapshot>` command, which
|
|
48
|
+
is left untouched.
|
|
49
|
+
- **New `verify-record -` (stdin).** A `-` path reads the record from standard input,
|
|
50
|
+
enabling pipelines such as `curl -s … | nexart verify-record -`.
|
|
51
|
+
- **New `--short` flag** (`verify-record` and `verify-url`): prints only a single
|
|
52
|
+
verdict line — `✔ VERIFIED` or `✖ FAILED`.
|
|
53
|
+
- **Unchanged invariants:** the timestamp layer never modifies `certificateHash`, is
|
|
54
|
+
never canonicalised, and **never affects the Integrity/Signature result or the exit
|
|
55
|
+
code** (`0` only when integrity passes and the signature is not invalid, `1`
|
|
56
|
+
otherwise). Operational TSA errors (untrusted root, imprint mismatch, unreadable
|
|
57
|
+
`--tsa-roots`) are reported as a timestamp *status*, never a crash. `verify-bundle`
|
|
58
|
+
remains **byte-for-byte unchanged**.
|
|
59
|
+
|
|
60
|
+
## v0.15.1 (2026-06-17) — docs: correct README version header
|
|
61
|
+
|
|
62
|
+
Docs-only patch. No code or behaviour changes.
|
|
63
|
+
|
|
64
|
+
- **Fixed:** the README title still read `v0.12.0` despite several releases since;
|
|
65
|
+
it now reflects the current package version.
|
|
66
|
+
|
|
3
67
|
## v0.15.0 (2026-06-17) — `verify-record` (full CER record + timestamp verification)
|
|
4
68
|
|
|
5
69
|
Additive feature. No breaking changes. `verify-bundle` is byte-for-byte unchanged.
|
package/README.md
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# @nexart/cli v0.
|
|
1
|
+
# @nexart/cli v0.16.0
|
|
2
2
|
|
|
3
3
|
Command-line interface for NexArt — run, replay, and verify deterministic generative art, plus AI execution certification commands.
|
|
4
4
|
|
|
@@ -798,35 +798,140 @@ optional externally anchored timestamp:
|
|
|
798
798
|
}
|
|
799
799
|
```
|
|
800
800
|
|
|
801
|
-
**
|
|
802
|
-
|
|
803
|
-
|
|
804
|
-
|
|
805
|
-
`verify-bundle` (it reuses the identical internal verifier — no duplicated crypto).
|
|
806
|
-
The record-level `timestamp.token` takes precedence over any token embedded in the
|
|
807
|
-
bundle; if the record omits it, an embedded `trustedTimestamps[]` / `timestamp` is
|
|
808
|
-
used instead. Everything else — flags, output, exit-code semantics — is identical
|
|
809
|
-
to `verify-bundle`.
|
|
801
|
+
**Fully automatic since v0.16.0.** Give it a record file and nothing else — the
|
|
802
|
+
command verifies integrity, the receipt signature, **and** the RFC 3161 timestamp
|
|
803
|
+
automatically, and prints an audit-grade report. It is self-contained: a third party
|
|
804
|
+
needs only the record and this CLI.
|
|
810
805
|
|
|
811
806
|
```bash
|
|
812
|
-
#
|
|
813
|
-
nexart verify-record record.json
|
|
807
|
+
# Full automatic verification: integrity + signature + timestamp
|
|
808
|
+
nexart verify-record record.json
|
|
814
809
|
|
|
815
|
-
# Machine-readable
|
|
816
|
-
nexart verify-record record.json --
|
|
810
|
+
# Machine-readable report
|
|
811
|
+
nexart verify-record record.json --json
|
|
812
|
+
|
|
813
|
+
# Read the record from stdin (use "-" as the path)
|
|
814
|
+
curl -s https://node.example/records/abc.json | nexart verify-record -
|
|
815
|
+
|
|
816
|
+
# One-line verdict only (✔ VERIFIED / ✖ FAILED)
|
|
817
|
+
nexart verify-record record.json --short
|
|
818
|
+
|
|
819
|
+
# Fully offline, with an explicit signing key
|
|
820
|
+
nexart verify-record record.json --offline --public-key node-keys.json
|
|
821
|
+
```
|
|
822
|
+
|
|
823
|
+
**Flexible input.** The bundle is taken from `record.bundle` when present, or the
|
|
824
|
+
record root is treated as the bundle itself (a certified bundle with its receipt and
|
|
825
|
+
signature embedded works directly). There is no "missing bundle" error — a
|
|
826
|
+
structurally invalid record simply reports a clean **Integrity: FAIL**.
|
|
827
|
+
|
|
828
|
+
**Signing key resolution (by priority).**
|
|
829
|
+
|
|
830
|
+
1. **`--public-key <file>`** — an explicit override (PEM, JWK, NodeKeysDocument, or
|
|
831
|
+
raw base64url).
|
|
832
|
+
2. **Auto-fetch** — otherwise the node's published key set is fetched from
|
|
833
|
+
`https://node.nexart.io/.well-known/nexart-node.json` and the key whose `kid`
|
|
834
|
+
matches the receipt's `attestorKeyId` is used. This is the **only** network call
|
|
835
|
+
in the verify path; it lives entirely in the CLI layer (the auditable core never
|
|
836
|
+
touches the network) and fails gracefully — a network error just falls through to
|
|
837
|
+
the next source. Override the URL with `NEXART_NODE_WELLKNOWN_URL`, or disable the
|
|
838
|
+
fetch entirely with **`--offline`**.
|
|
839
|
+
3. **Embedded key** — a key embedded in the bundle, if any.
|
|
840
|
+
|
|
841
|
+
**Automatic timestamp verification.** An RFC 3161 token at
|
|
842
|
+
`verification.timestamp.token`, `timestamp.token`, or embedded in the bundle is
|
|
843
|
+
verified automatically and offline against an **embedded DigiCert trust store**
|
|
844
|
+
(DigiCert Trusted Root G4 + DigiCert Assured ID Root CA). Override the trusted roots
|
|
845
|
+
with **`--tsa-roots <file>`** (PEM). The ASN.1 stack (`pkijs` / `asn1js`) loads
|
|
846
|
+
**only** when a token is actually present. The timestamp layer is **strictly
|
|
847
|
+
additive**: it never modifies `certificateHash`, is never canonicalised, and **never
|
|
848
|
+
affects the Integrity / Signature result or the exit code** (which is `0` only when
|
|
849
|
+
integrity passes and the signature is not invalid, `1` otherwise) — an
|
|
850
|
+
untrusted-root, imprint-mismatch, or unreadable-`--tsa-roots` outcome is reported as
|
|
851
|
+
a timestamp *status*, never a crash.
|
|
852
|
+
|
|
853
|
+
**Input from a file or stdin.** Pass a file path, or **`-`** to read the record from
|
|
854
|
+
standard input — handy for pipelines such as `curl -s … | nexart verify-record -`.
|
|
855
|
+
|
|
856
|
+
**Report.** The default output is an audit-grade summary — **Integrity**,
|
|
857
|
+
**Signature**, **Timestamp** (`VERIFIED` / `INVALID (<reason>)` / `PRESENT BUT NOT
|
|
858
|
+
VERIFIED` / `NOT INCLUDED IN RECORD`, plus generation time and authority), **Node**
|
|
859
|
+
(node id, key id, key source, operator), **Identity** (asserted identity, or none),
|
|
860
|
+
and **Execution** (protocol, provider, model, input/output hashes, parameters,
|
|
861
|
+
created-at). It ends with a single headline line — **`FINAL STATUS: VERIFIED EVIDENCE
|
|
862
|
+
RECORD`** or **`FINAL STATUS: FAILED`**. `--json` emits the same information as a
|
|
863
|
+
structured object; `--short` prints only `✔ VERIFIED` or `✖ FAILED`.
|
|
864
|
+
|
|
865
|
+
| Option | Description |
|
|
866
|
+
| --- | --- |
|
|
867
|
+
| `--public-key <file>` | Override the signing key. Default: auto-fetched from the node `.well-known` key set. |
|
|
868
|
+
| `--offline` | Do not contact the network; use `--public-key` or a bundle-embedded key only. |
|
|
869
|
+
| `--kid <id>` | Key id to select from the key set (default: the receipt's `attestorKeyId`). |
|
|
870
|
+
| `--tsa-roots <file>` | Override the default DigiCert TSA trust roots with custom root certificate(s) (PEM). |
|
|
871
|
+
| `--json` | Emit a machine-readable report. |
|
|
872
|
+
| `--short` | Print only a single verdict line (`✔ VERIFIED` / `✖ FAILED`). |
|
|
873
|
+
| `--verbose` | Show intermediate verification steps. |
|
|
874
|
+
|
|
875
|
+
> **`verify-bundle` is unchanged.** The redesigned output and automatic key/timestamp
|
|
876
|
+
> resolution apply to `verify-record` only;
|
|
877
|
+
> [`verify-bundle`](#independent-verification-nexart-verify-bundle) keeps its existing
|
|
878
|
+
> behaviour, flags, and byte-for-byte output.
|
|
879
|
+
|
|
880
|
+
---
|
|
881
|
+
|
|
882
|
+
## Verifying from a URL (`nexart verify-url`)
|
|
883
|
+
|
|
884
|
+
`nexart verify-url <url>` is the one-command verification experience: it **fetches** a
|
|
885
|
+
CER record (or a bare bundle) as JSON from a URL and verifies it with the exact same
|
|
886
|
+
automatic key/timestamp resolution and audit-grade renderer as `verify-record`.
|
|
887
|
+
|
|
888
|
+
```bash
|
|
889
|
+
# Fetch and fully verify a published record
|
|
890
|
+
nexart verify-url https://node.example/records/abc.json
|
|
817
891
|
|
|
818
|
-
#
|
|
819
|
-
nexart verify-
|
|
820
|
-
|
|
892
|
+
# One-line PASS/FAIL verdict
|
|
893
|
+
nexart verify-url https://node.example/records/abc.json --short
|
|
894
|
+
|
|
895
|
+
# Machine-readable report
|
|
896
|
+
nexart verify-url https://node.example/records/abc.json --json
|
|
897
|
+
```
|
|
898
|
+
|
|
899
|
+
The response is auto-detected as a **full record** (has `verification.receipt`) or a
|
|
900
|
+
**raw bundle**; both route through the same rich verifier (a bare bundle is accepted
|
|
901
|
+
directly). The URL fetch is the record *source* and always happens; **`--offline`**
|
|
902
|
+
here only disables the separate signing-key auto-fetch (so pair it with `--public-key`
|
|
903
|
+
or rely on a bundle-embedded key). A non-2xx response, a network error, or a
|
|
904
|
+
non-JSON body fails cleanly with exit `1`. All other options match `verify-record`
|
|
905
|
+
(`--public-key`, `--kid`, `--tsa-roots`, `--json`, `--short`, `--verbose`).
|
|
906
|
+
|
|
907
|
+
---
|
|
908
|
+
|
|
909
|
+
## Verifying by certificate hash (`nexart verify-hash`)
|
|
910
|
+
|
|
911
|
+
`nexart verify-hash <certificate_hash>` resolves a CER record straight from its
|
|
912
|
+
certificate hash. It constructs the public node lookup URL
|
|
913
|
+
(`https://node.nexart.io/v1/cer/public?certificate_hash=<hash>`) and then verifies it
|
|
914
|
+
through `verify-url`, so the **output is identical** to `verify-url`.
|
|
915
|
+
|
|
916
|
+
```bash
|
|
917
|
+
# Resolve and fully verify a record by certificate hash
|
|
918
|
+
nexart verify-hash sha256:abc123…
|
|
919
|
+
|
|
920
|
+
# One-line PASS/FAIL verdict
|
|
921
|
+
nexart verify-hash sha256:abc123… --short
|
|
922
|
+
|
|
923
|
+
# Machine-readable report
|
|
924
|
+
nexart verify-hash sha256:abc123… --json
|
|
821
925
|
```
|
|
822
926
|
|
|
823
|
-
The
|
|
824
|
-
|
|
825
|
-
|
|
826
|
-
|
|
827
|
-
|
|
828
|
-
|
|
829
|
-
|
|
927
|
+
The hash **must** include the canonical `sha256:` prefix; a missing prefix fails
|
|
928
|
+
cleanly with exit `1` (before any network call). Network failures behave exactly like
|
|
929
|
+
`verify-url`. Options match `verify-url` (`--public-key`, `--kid`, `--tsa-roots`,
|
|
930
|
+
`--json`, `--short`, `--offline`, `--verbose`); as with `verify-url`, `--offline` only
|
|
931
|
+
disables the signing-key auto-fetch — the record itself is always fetched.
|
|
932
|
+
|
|
933
|
+
> Note: this is distinct from `nexart verify <snapshot>`, which verifies that a
|
|
934
|
+
> snapshot reproduces its expected output.
|
|
830
935
|
|
|
831
936
|
---
|
|
832
937
|
|
package/dist/index.d.ts
CHANGED
|
@@ -220,27 +220,62 @@ export declare function verifyBundleStandaloneCommand(file: string, opts: {
|
|
|
220
220
|
/**
|
|
221
221
|
* nexart verify-record — Verify a full NexArt CER RECORD offline and independently.
|
|
222
222
|
*
|
|
223
|
-
* A "record" is the full verification envelope
|
|
224
|
-
*
|
|
225
|
-
*
|
|
223
|
+
* A "record" is the full verification envelope. v0.16.0 makes this command fully
|
|
224
|
+
* automatic, audit-grade, and self-contained — a third party needs only the record
|
|
225
|
+
* file and this CLI:
|
|
226
|
+
* - FLEXIBLE PARSING: the bundle is taken from `record.bundle` when present, or the
|
|
227
|
+
* record root is treated as the bundle itself. There is no "missing bundle" error;
|
|
228
|
+
* a structurally invalid record simply reports a clean Integrity FAIL.
|
|
226
229
|
* - INTEGRITY + SIGNATURE: the record's `verification.receipt` /
|
|
227
|
-
* `verification.receiptSignature` are merged into a SHALLOW copy of
|
|
228
|
-
* (which never affects the recomputed certificateHash
|
|
229
|
-
*
|
|
230
|
-
*
|
|
231
|
-
*
|
|
232
|
-
*
|
|
233
|
-
*
|
|
234
|
-
*
|
|
230
|
+
* `verification.receiptSignature` are merged into a SHALLOW copy of the bundle
|
|
231
|
+
* (which never affects the recomputed certificateHash) and handed to
|
|
232
|
+
* verifyBundleStandalone(). The signing public key is, by priority:
|
|
233
|
+
* 1. `--public-key <file>` (explicit override), else
|
|
234
|
+
* 2. auto-fetched from the node's published key set at
|
|
235
|
+
* https://node.nexart.io/.well-known/nexart-node.json, selecting the key
|
|
236
|
+
* whose kid matches the receipt's attestorKeyId (skipped under --offline),
|
|
237
|
+
* else
|
|
238
|
+
* 3. key material embedded in the bundle, if any.
|
|
239
|
+
* - TIMESTAMP (automatic): an RFC 3161 token at `verification.timestamp.token`,
|
|
240
|
+
* `timestamp.token`, or embedded in the bundle is verified automatically and
|
|
241
|
+
* offline against the embedded DigiCert trust store (override with --tsa-roots).
|
|
242
|
+
* The ASN.1 stack loads only when a token is actually present. The timestamp
|
|
243
|
+
* NEVER affects Integrity, Signature, or the exit code.
|
|
244
|
+
*
|
|
245
|
+
* Exit code: 0 when integrity passes and signature is not a failure, 1 otherwise.
|
|
235
246
|
*/
|
|
236
|
-
export
|
|
247
|
+
export interface RecordVerifyOpts {
|
|
237
248
|
publicKey?: string;
|
|
238
249
|
kid?: string;
|
|
239
250
|
json?: boolean;
|
|
240
251
|
verbose?: boolean;
|
|
241
|
-
verifyTimestamp?: boolean;
|
|
242
252
|
tsaRoots?: string;
|
|
243
|
-
|
|
253
|
+
offline?: boolean;
|
|
254
|
+
wellKnownUrl?: string;
|
|
255
|
+
short?: boolean;
|
|
256
|
+
}
|
|
257
|
+
export declare function verifyRecordStandaloneCommand(file: string, opts: RecordVerifyOpts): Promise<StandaloneVerifyResult>;
|
|
258
|
+
/**
|
|
259
|
+
* Verify an already-parsed CER record (or bare bundle) object and render the
|
|
260
|
+
* audit-grade report. This is the shared core behind `verify-record` (file / stdin)
|
|
261
|
+
* and `verify-url` (network), so key resolution, timestamp verification, and the rich
|
|
262
|
+
* renderer behave identically across all input sources.
|
|
263
|
+
*/
|
|
264
|
+
export declare function verifyRecordFromObject(record: unknown, opts: RecordVerifyOpts): Promise<StandaloneVerifyResult>;
|
|
265
|
+
/**
|
|
266
|
+
* nexart verify-url — Fetch a CER record (or bare bundle) from a URL and verify it
|
|
267
|
+
* automatically, using the SAME rich renderer and key/timestamp resolution as
|
|
268
|
+
* `verify-record`. The single network fetch here is the record SOURCE; `--offline`
|
|
269
|
+
* still disables the (separate) signing-key auto-fetch, exactly as for verify-record.
|
|
270
|
+
*/
|
|
271
|
+
export declare function verifyUrlCommand(url: string, opts: RecordVerifyOpts): Promise<StandaloneVerifyResult>;
|
|
272
|
+
/**
|
|
273
|
+
* nexart verify-hash — Resolve a certificate hash to its public CER record URL and verify it.
|
|
274
|
+
* This is a thin convenience wrapper over `verify-url`: it constructs
|
|
275
|
+
* `${PUBLIC_CER_ENDPOINT}?certificate_hash=<hash>` and delegates, so the output is
|
|
276
|
+
* identical to `verify-url`. The hash must carry the canonical `sha256:` prefix.
|
|
277
|
+
*/
|
|
278
|
+
export declare function verifyHashCommand(certificateHash: string, opts: RecordVerifyOpts): Promise<StandaloneVerifyResult>;
|
|
244
279
|
/**
|
|
245
280
|
* Render the human-readable timestamp STATUS line WITHOUT importing the ASN.1 stack.
|
|
246
281
|
* This deliberately mirrors formatTsaLine() in tsaVerify.ts but lives here so the
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AACA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAsDG;AAcH,OAAO,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|