@xfuel/verify 0.3.0 → 0.3.1

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/README.md CHANGED
@@ -31,9 +31,14 @@ console.log(fullResult.receipt_lane.freeze); // unsigned; does not change overal
31
31
  ### CLI
32
32
 
33
33
  ```bash
34
- # Local binding verification (no network required)
34
+ # Local binding verification.
35
+ # Issuer history is fetched unless you pass --issuer-history-file or --no-issuer-history.
36
+ # A payload v10 receipt fails offline (exit 1) when that fetch cannot run.
35
37
  npx xfuel-verify receipt.json
36
38
 
39
+ # Explicit offline. --no-issuer-history skips the kid window.
40
+ npx xfuel-verify receipt.json --no-issuer-history
41
+
37
42
  # Hash the canonical object (must match signed payload_hash) and read not_after
38
43
  # from a pinned issuer-history snapshot. Both flags are offline.
39
44
  npx xfuel-verify receipt.json --canonical-preimage preimage.json --issuer-history-file issuer-history.json
@@ -67,7 +72,7 @@ npx xfuel-verify receipt.json inclusion.json head.json --rpc
67
72
  | Nullifier anchor | Yes | Query ZKVerifierSP1 contract |
68
73
  | Anchored receipt root | Yes, with `--rpc` | Inclusion proof, then Solana memo and Base calldata for that root |
69
74
  | Canonical preimage | No | SHA-256 of `--canonical-preimage`, or the stored canonical object, matches signed `payload_hash` |
70
- | Issuer history | No, with `--issuer-history-file` | `iat` is inside the kid's `not_before` / `not_after`. A payload v10 pin must match the snapshot hash |
75
+ | Issuer history | Yes, unless `--no-issuer-history` or `--issuer-history-file` | `iat` is inside the kid's `not_before` / `not_after`. A payload v10 pin must match the snapshot hash. Offline v10 fails if the fetch cannot run |
71
76
 
72
77
  ## Issuer Signature Verification (ES256)
73
78
 
@@ -81,20 +86,26 @@ counts only when the verifying key is trusted:
81
86
  production kid `IvFpmC-vPhkY_v0vidsrWVT9uzlE5XWKZgAEOeJTq1Q`. Override with
82
87
  `--trusted-kid`, or disable with `--no-trusted-kid`.
83
88
 
89
+ The epoch record checked by `xfuel-verify receipt.json inclusion.json head.json --rpc` uses those same sources. An embedded epoch key still has to match the trusted-kid pin.
90
+
84
91
  `issuer_jwk` on the receipt is not a trust root. A copy re-signed with an
85
92
  arbitrary P-256 key reports `key untrusted` (`issuer_signature.valid === false`),
86
93
  including when `--jwks-file` points at the real JWKS.
87
94
 
88
95
  ```bash
89
- # Offline: default production pin, no network
90
- npx xfuel-verify receipt.json
91
-
92
- # Recompute published preimages and check the kid window.
93
- # A payload v10 receipt pins issuer_history. Hash the stored canonical object:
94
- curl -sS "https://api.chit402.com/receipt/RECEIPT_ID?format=json" -o receipt.json
95
- curl -sS "https://api.chit402.com/receipt/RECEIPT_ID/preimage" -o preimage.json
96
- curl -sS "https://api.chit402.com/.well-known/issuer-history.json?version=1" -o issuer-history.json
97
- npx xfuel-verify receipt.json --canonical-preimage preimage.json --issuer-history-file issuer-history.json
96
+ # Explicit offline. The default command fetches issuer history.
97
+ npx xfuel-verify receipt.json --no-issuer-history
98
+
99
+ # Recompute a published canonical preimage and check the kid window.
100
+ # curl -f stops on HTTP errors. Most receipts have no /preimage (a 404).
101
+ # A missing preimage is not a verification failure: omit --canonical-preimage.
102
+ curl -fsS "https://api.chit402.com/receipt/RECEIPT_ID?format=json" -o receipt.json
103
+ curl -fsS "https://api.chit402.com/.well-known/issuer-history.json?version=1" -o issuer-history.json
104
+ if curl -fsS "https://api.chit402.com/receipt/RECEIPT_ID/preimage" -o preimage.json; then
105
+ npx xfuel-verify receipt.json --canonical-preimage preimage.json --issuer-history-file issuer-history.json
106
+ else
107
+ npx xfuel-verify receipt.json --issuer-history-file issuer-history.json
108
+ fi
98
109
 
99
110
  # Trust the published JWKS instead of (or in addition to) the pin
100
111
  curl -o issuer-jwks.json https://api.chit402.com/.well-known/jwks.json
@@ -1,6 +1,11 @@
1
+ import { type EpochRecord } from './epoch.js';
1
2
  export declare const MEMO_PROGRAM_ID = "MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr";
2
3
  export declare const MEMO_PROGRAM_ID_V1 = "Memo1UhkJRfHyvLMcVucJwxXeuD728EqVDDwQDxFMNo";
3
- /** Genesis hashes from the Solana cluster CAIP-2 references. */
4
+ /**
5
+ * Full `getGenesisHash` values. CAIP-2 references keep only the first 32
6
+ * characters, and `getGenesisHash` returns the whole base58 hash. A prefix
7
+ * compare never matches mainnet-beta.
8
+ */
4
9
  export declare const SOLANA_GENESIS: Record<string, string>;
5
10
  export declare const BASE_MAINNET_CHAIN_ID = 8453;
6
11
  export declare const ANCHOR_PROVES: string[];
@@ -28,6 +33,9 @@ export interface AnchorInclusion {
28
33
  export interface AnchorHead {
29
34
  root: string;
30
35
  tree_size?: number;
36
+ epoch?: number | null;
37
+ prev_epoch_root?: string | null;
38
+ prev_epoch_size?: number | null;
31
39
  anchor_tx?: string | null;
32
40
  anchor?: {
33
41
  tx?: string | null;
@@ -111,12 +119,19 @@ export declare function leafHash(bytes: Uint8Array): Buffer;
111
119
  export declare function normalizeRoot(root: string | null | undefined): string | null;
112
120
  /** RFC 6962-style inclusion. Same rule as the gateway tree. */
113
121
  export declare function verifyMerkleInclusion(leaf: Buffer, index: number, treeSize: number, rootHex: string, proof: InclusionStep[]): boolean;
114
- export declare function parseAnchorMemo(memo: string): {
122
+ export interface ParsedAnchorMemo {
123
+ version?: 1 | 2;
115
124
  scope: string;
116
125
  day: string;
117
126
  root: string;
118
127
  prev: string;
119
- } | null;
128
+ epoch?: number;
129
+ prev_epoch_root?: string;
130
+ prev_epoch_size?: number;
131
+ bundle_index_hash?: string;
132
+ }
133
+ /** v1 memos stay valid. v2 adds epoch, prev_epoch_root, prev_epoch_size, and the bundle index hash. */
134
+ export declare function parseAnchorMemo(memo: string): ParsedAnchorMemo | null;
120
135
  export declare function extractMemos(tx: SolanaAnchorTx | null | undefined): string[];
121
136
  export declare function fetchSolanaGenesisHash(rpcUrl: string): Promise<string>;
122
137
  export declare function fetchBaseAnchorTransaction(txHash: string, rpcUrl: string): Promise<BaseAnchorTx | null>;
@@ -129,6 +144,8 @@ export interface VerifyAnchoredRootInput {
129
144
  fetchSolanaTx?: (signature: string, rpcUrl: string) => Promise<SolanaAnchorTx | null>;
130
145
  fetchGenesis?: (rpcUrl: string) => Promise<string>;
131
146
  fetchBaseTx?: (txHash: string, rpcUrl: string) => Promise<BaseAnchorTx | null>;
147
+ epochRecord?: EpochRecord | null;
148
+ verifyEpochSignature?: (jws: string) => boolean;
132
149
  }
133
150
  /**
134
151
  * Verify inclusion, then the Solana memo and the Base calldata for that root.
@@ -1 +1 @@
1
- {"version":3,"file":"anchor-witness.d.ts","sourceRoot":"","sources":["../src/anchor-witness.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"anchor-witness.d.ts","sourceRoot":"","sources":["../src/anchor-witness.ts"],"names":[],"mappings":"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"}
@@ -19,12 +19,17 @@ exports.verifyAnchoredRoot = verifyAnchoredRoot;
19
19
  */
20
20
  const node_crypto_1 = require("node:crypto");
21
21
  const base_payer_js_1 = require("./base-payer.js");
22
+ const epoch_js_1 = require("./epoch.js");
22
23
  const solana_payer_js_1 = require("./solana-payer.js");
23
24
  exports.MEMO_PROGRAM_ID = 'MemoSq4gqABAXKb96qnH8TysNcWxMyWCqXgDLGmfcHr';
24
25
  exports.MEMO_PROGRAM_ID_V1 = 'Memo1UhkJRfHyvLMcVucJwxXeuD728EqVDDwQDxFMNo';
25
- /** Genesis hashes from the Solana cluster CAIP-2 references. */
26
+ /**
27
+ * Full `getGenesisHash` values. CAIP-2 references keep only the first 32
28
+ * characters, and `getGenesisHash` returns the whole base58 hash. A prefix
29
+ * compare never matches mainnet-beta.
30
+ */
26
31
  exports.SOLANA_GENESIS = {
27
- 'mainnet-beta': '5eykt4UsFv8P8NJdTREpY1vzqKqZKvdp',
32
+ 'mainnet-beta': '5eykt4UsFv8P8NJdTREpY1vzqKqZKvdpKuc147dw2N9d',
28
33
  devnet: 'EtWTRABZaYq6iMfeYKouRu166VU2xqa1wcaWoxPkrZBG',
29
34
  testnet: '4uhcVJyU9pJkvQyS88uRDiswHXSCkY3zQawwpjk2NsNY',
30
35
  };
@@ -67,16 +72,7 @@ function verifyMerkleInclusion(leaf, index, treeSize, rootHex, proof) {
67
72
  }
68
73
  return Buffer.from(hash).toString('hex') === String(rootHex).replace(/^0x/, '').toLowerCase();
69
74
  }
70
- function parseAnchorMemo(memo) {
71
- const parts = String(memo || '').split(':');
72
- if (parts.length !== 7)
73
- return null;
74
- if (parts[0] !== 'chit402' || parts[1] !== 'root' || parts[2] !== 'v1')
75
- return null;
76
- const scope = parts[3];
77
- const day = parts[4];
78
- const root = parts[5];
79
- const prev = parts[6];
75
+ function memoIdentity(scope, day, root, prev) {
80
76
  if (!/^[A-Za-z0-9_-]{1,64}$/.test(scope))
81
77
  return null;
82
78
  if (!/^\d{4}-\d{2}-\d{2}$/.test(day))
@@ -85,6 +81,40 @@ function parseAnchorMemo(memo) {
85
81
  return null;
86
82
  return { scope, day, root, prev };
87
83
  }
84
+ /** v1 memos stay valid. v2 adds epoch, prev_epoch_root, prev_epoch_size, and the bundle index hash. */
85
+ function parseAnchorMemo(memo) {
86
+ const parts = String(memo || '').split(':');
87
+ if (parts[0] !== 'chit402' || parts[1] !== 'root')
88
+ return null;
89
+ if (parts.length === 7 && parts[2] === 'v1') {
90
+ const base = memoIdentity(parts[3], parts[4], parts[5], parts[6]);
91
+ return base ? { version: 1, ...base } : null;
92
+ }
93
+ if (parts.length === 11 && parts[2] === 'v2') {
94
+ const base = memoIdentity(parts[3], parts[4], parts[5], parts[6]);
95
+ if (!base)
96
+ return null;
97
+ const epoch = Number(parts[7]);
98
+ const prevEpoch = parts[8];
99
+ const size = Number(parts[9]);
100
+ const bundle = parts[10];
101
+ if (!Number.isInteger(epoch) || epoch < 1)
102
+ return null;
103
+ if (!/^[0-9a-f]{64}$/.test(prevEpoch) || !/^[0-9a-f]{64}$/.test(bundle))
104
+ return null;
105
+ if (!Number.isInteger(size) || size < 0)
106
+ return null;
107
+ return {
108
+ version: 2,
109
+ ...base,
110
+ epoch,
111
+ prev_epoch_root: prevEpoch,
112
+ prev_epoch_size: size,
113
+ bundle_index_hash: bundle,
114
+ };
115
+ }
116
+ return null;
117
+ }
88
118
  function isMemoIx(ix) {
89
119
  const program = ix.program || '';
90
120
  const programId = ix.programId || '';
@@ -187,7 +217,11 @@ async function verifyAnchoredRoot(input) {
187
217
  let inclusionValid = false;
188
218
  let inclusionReason;
189
219
  const taskId = input.receipt?.task_id ? String(input.receipt.task_id) : '';
190
- if (!taskId) {
220
+ const inclusionError = input.inclusion?.error;
221
+ if (inclusionError === 'not_in_tree') {
222
+ inclusionReason = 'not_in_tree';
223
+ }
224
+ else if (!taskId) {
191
225
  inclusionReason = 'missing_task_id';
192
226
  }
193
227
  else if (input.inclusion?.task_id && String(input.inclusion.task_id) !== taskId) {
@@ -230,6 +264,38 @@ async function verifyAnchoredRoot(input) {
230
264
  }
231
265
  if (!inclusionValid && inclusionReason)
232
266
  errors.push(inclusionReason);
267
+ let epochReason;
268
+ if (input.head?.epoch == null) {
269
+ const link = (0, epoch_js_1.verifyEpochLink)(input.head, null);
270
+ if (!link.ok)
271
+ epochReason = link.reason || 'epoch_missing';
272
+ }
273
+ const needsEpoch = input.head?.epoch != null || input.epochRecord != null;
274
+ if (!epochReason && needsEpoch) {
275
+ if (!input.epochRecord)
276
+ epochReason = 'epoch_record_missing';
277
+ else {
278
+ const checked = (0, epoch_js_1.verifyEpochRecord)(input.epochRecord, { verifySignature: input.verifyEpochSignature });
279
+ if (!checked.ok)
280
+ epochReason = checked.reason || 'epoch_record';
281
+ else if (input.head?.epoch != null && Number(input.head.epoch) > 1) {
282
+ const prev = (input.epochRecord.epochs || []).find((row) => Number(row.epoch) === Number(input.head.epoch) - 1);
283
+ const link = (0, epoch_js_1.verifyEpochLink)(input.head, prev ? {
284
+ root: prev.final_root || prev.opening_root || null,
285
+ tree_size: prev.final_size ?? prev.opening_size ?? null,
286
+ } : null);
287
+ if (!link.ok)
288
+ epochReason = link.reason || 'epoch_link';
289
+ }
290
+ else if (input.head) {
291
+ const link = (0, epoch_js_1.verifyEpochLink)(input.head, null);
292
+ if (!link.ok)
293
+ epochReason = link.reason || 'epoch_link';
294
+ }
295
+ }
296
+ }
297
+ if (epochReason)
298
+ errors.push(epochReason);
233
299
  const solanaRpc = input.solanaRpcUrl || process.env.SOLANA_RPC_URL || solana_payer_js_1.SOLANA_RPC_URL;
234
300
  const baseRpc = input.baseRpcUrl || base_payer_js_1.BASE_RPC_URL;
235
301
  const signature = root && inclusionValid ? solanaSignature(input.head) : null;
@@ -345,7 +411,7 @@ async function verifyAnchoredRoot(input) {
345
411
  }
346
412
  }
347
413
  let overall;
348
- if (!inclusionValid || (solana.checked && !solana.valid) || (base.checked && !base.valid))
414
+ if (!inclusionValid || epochReason || (solana.checked && !solana.valid) || (base.checked && !base.valid))
349
415
  overall = 'failed';
350
416
  else if (solana.valid && base.valid)
351
417
  overall = 'verified';
@@ -1 +1 @@
1
- {"version":3,"file":"anchor-witness.js","sourceRoot":"","sources":["../src/anchor-witness.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"anchor-witness.js","sourceRoot":"","sources":["../src/anchor-witness.ts"],"names":[],"mappings":"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"}
package/dist/cli.js CHANGED
@@ -20,6 +20,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
20
20
  const node_fs_1 = require("node:fs");
21
21
  const index_js_1 = require("./index.js");
22
22
  const anchor_witness_js_1 = require("./anchor-witness.js");
23
+ const jws_js_1 = require("./jws.js");
23
24
  const preimage_js_1 = require("./preimage.js");
24
25
  const issuer_history_js_1 = require("./issuer-history.js");
25
26
  const canonical_preimage_js_1 = require("./canonical-preimage.js");
@@ -52,9 +53,13 @@ Options:
52
53
  --solana-rpc <url> Solana RPC URL (default: https://api.mainnet-beta.solana.com or SOLANA_RPC_URL)
53
54
  --rpc <url> Base RPC URL (default: https://mainnet.base.org)
54
55
  --rpc With a receipt, an inclusion proof, and a tree head: check the
55
- leaf, then the Solana memo and the Base calldata for that root
56
+ leaf, then the Solana memo and the Base calldata for that root.
57
+ A v2 head also needs the signed epoch record.
58
+ --epoch-record <f> Signed epoch record JSON. Skips the network fetch.
59
+ --epoch-url <url> GET this epoch record. Default: the receipt verify_url
60
+ origin plus /v1/receipts/tree/epoch
56
61
  --inclusion <file> Inclusion proof JSON (chit402.inclusion.v1)
57
- --head <file> Signed tree head JSON (chit402.tree_head.v1)
62
+ --head <file> Signed tree head JSON (chit402.tree_head.v1 or v2)
58
63
  --json Output JSON instead of human-readable
59
64
  --quiet Only output errors
60
65
  --strict-issuer-history
@@ -82,11 +87,17 @@ Trust:
82
87
  with the unsigned outer payment / caller_binding copy is a failure.
83
88
 
84
89
  Network behavior:
85
- By default, no network requests are made. Network is only used when:
86
- - --fetch-jwks or --jwks-url is passed
87
- - --check-nullifier is passed (queries Base RPC for on-chain anchor)
88
- - --check-payer is passed (queries Base or Solana RPC for USDC settlement)
89
- - --rpc is passed with a receipt, an inclusion proof, and a tree head
90
+ JWKS, nullifiers, and anchors are not fetched unless you pass a flag.
91
+ Issuer history is fetched by default when the receipt names a history URL
92
+ and neither --issuer-history-file nor --no-issuer-history is set. A payload
93
+ v10 receipt fails (exit 1) when that fetch cannot run. Offline mode is
94
+ --issuer-history-file <snapshot>, or --no-issuer-history to skip the window.
95
+ Other network uses:
96
+ - --fetch-jwks or --jwks-url
97
+ - --check-nullifier (Base RPC)
98
+ - --check-payer (Base or Solana RPC)
99
+ - --rpc with a receipt, an inclusion proof, and a tree head
100
+ - a v2 head, which fetches GET /v1/receipts/tree/epoch unless --epoch-record
90
101
 
91
102
  Solana payer verify uses SOLANA_RPC_URL when set, else the public mainnet RPC.
92
103
 
@@ -116,8 +127,8 @@ Receipt lane (unsigned, beside book_seq):
116
127
  88201, 88403, and 88596).
117
128
 
118
129
  Examples:
119
- # Local binding verification (no network)
120
- xfuel-verify my-receipt.json
130
+ # Skip the issuer-history fetch. A v10 receipt otherwise needs that network call.
131
+ xfuel-verify my-receipt.json --no-issuer-history
121
132
 
122
133
  # Verify issuer signature with JWKS file
123
134
  xfuel-verify my-receipt.json --jwks-file issuer-jwks.json
@@ -144,6 +155,8 @@ function parseArgs(args) {
144
155
  anchorFlag: false,
145
156
  inclusionFile: null,
146
157
  headFile: null,
158
+ epochRecordFile: null,
159
+ epochUrl: null,
147
160
  positionals: [],
148
161
  json: false,
149
162
  quiet: false,
@@ -195,6 +208,12 @@ function parseArgs(args) {
195
208
  else if (arg === '--head' && args[i + 1]) {
196
209
  result.headFile = args[++i];
197
210
  }
211
+ else if (arg === '--epoch-record' && args[i + 1]) {
212
+ result.epochRecordFile = args[++i];
213
+ }
214
+ else if (arg === '--epoch-url' && args[i + 1]) {
215
+ result.epochUrl = args[++i];
216
+ }
198
217
  else if (arg === '--solana-rpc' && args[i + 1]) {
199
218
  result.solanaRpcUrl = args[++i];
200
219
  }
@@ -250,6 +269,15 @@ function readJson(file) {
250
269
  const content = file === '-' ? (0, node_fs_1.readFileSync)(0, 'utf8') : (0, node_fs_1.readFileSync)(file, 'utf8');
251
270
  return JSON.parse(content);
252
271
  }
272
+ function headStatus(file) {
273
+ try {
274
+ const doc = readJson(file);
275
+ return typeof doc?.status === 'string' ? doc.status : null;
276
+ }
277
+ catch {
278
+ return null;
279
+ }
280
+ }
253
281
  function printLane(lane) {
254
282
  const bit = (value) => (value == null ? 'unknown' : (value ? 'true' : 'false'));
255
283
  console.log(` Receipt lane (unsigned)`);
@@ -318,11 +346,77 @@ function printAnchor(result, json, quiet) {
318
346
  console.log(` Errors: ${result.errors.join(', ')}`);
319
347
  console.log('');
320
348
  }
349
+ function headNeedsEpochRecord(head) {
350
+ const schema = head.schema;
351
+ const version = head.payload_version;
352
+ return head.epoch != null || schema === 'chit402.tree_head.v2' || version === 2;
353
+ }
354
+ function epochUrlFromReceipt(receipt) {
355
+ const raw = receipt?.verify_url;
356
+ if (!raw)
357
+ return null;
358
+ try {
359
+ return `${new URL(raw).origin}/v1/receipts/tree/epoch`;
360
+ }
361
+ catch {
362
+ return null;
363
+ }
364
+ }
365
+ async function loadEpochRecord(args, receipt) {
366
+ if (args.epochRecordFile) {
367
+ return JSON.parse((0, node_fs_1.readFileSync)(args.epochRecordFile, 'utf8'));
368
+ }
369
+ const url = args.epochUrl || epochUrlFromReceipt(receipt);
370
+ if (!url)
371
+ return null;
372
+ const res = await fetch(url);
373
+ if (!res.ok)
374
+ return null;
375
+ const body = await res.json();
376
+ if (!body?.issuer_signature?.jws)
377
+ return null;
378
+ return body;
379
+ }
380
+ function epochSignatureOk(record, jws, jwks, trustedKids) {
381
+ const sig = record.issuer_signature;
382
+ const embedded = sig && 'issuer_jwk' in sig
383
+ ? sig.issuer_jwk
384
+ : undefined;
385
+ const kid = (0, jws_js_1.readJwsHeader)(jws)?.kid;
386
+ const keys = [];
387
+ for (const key of jwks?.keys || []) {
388
+ if (!key || key.kty !== 'EC')
389
+ continue;
390
+ const jwk = key;
391
+ if (kid && jwk.kid !== kid)
392
+ continue;
393
+ keys.push(jwk);
394
+ }
395
+ if (embedded && trustedKids?.includes((0, jws_js_1.jwkThumbprint)(embedded)))
396
+ keys.push(embedded);
397
+ for (const key of keys) {
398
+ const verified = (0, jws_js_1.verifyIssuerJws)(jws, key);
399
+ if (!verified.valid || !verified.payload)
400
+ continue;
401
+ const payload = verified.payload;
402
+ if (JSON.stringify(payload.epochs ?? null) !== JSON.stringify(record.epochs ?? null))
403
+ return false;
404
+ if (JSON.stringify(payload.orphans ?? []) !== JSON.stringify(record.orphans ?? []))
405
+ return false;
406
+ return true;
407
+ }
408
+ return false;
409
+ }
321
410
  async function runAnchor(args) {
322
411
  const receiptPath = args.file;
323
412
  const inclusionPath = args.inclusionFile || args.positionals[1] || null;
324
413
  const headPath = args.headFile || (args.inclusionFile ? null : args.positionals[2]) || null;
325
414
  if (!receiptPath || !inclusionPath || !headPath) {
415
+ const candidates = [args.headFile, headPath, ...args.positionals];
416
+ if (candidates.some((file) => file && headStatus(file) === 'not_yet_published')) {
417
+ console.error('Tree head is not_yet_published.');
418
+ return 3;
419
+ }
326
420
  console.error('Anchor check needs a receipt, an inclusion proof, and a tree head.');
327
421
  console.error(' xfuel-verify receipt.json inclusion.json head.json --rpc');
328
422
  return 3;
@@ -339,12 +433,45 @@ async function runAnchor(args) {
339
433
  console.error(`Error reading anchor inputs: ${err instanceof Error ? err.message : String(err)}`);
340
434
  return 3;
341
435
  }
436
+ let epochRecord = null;
437
+ let verifyEpochSignature;
438
+ if (headNeedsEpochRecord(head)) {
439
+ try {
440
+ epochRecord = await loadEpochRecord(args, receipt);
441
+ }
442
+ catch {
443
+ epochRecord = null;
444
+ }
445
+ if (epochRecord?.issuer_signature?.jws) {
446
+ let fileJwks;
447
+ if (args.jwksFile) {
448
+ try {
449
+ fileJwks = JSON.parse((0, node_fs_1.readFileSync)(args.jwksFile, 'utf8'));
450
+ }
451
+ catch (err) {
452
+ console.error(`Error reading JWKS file: ${err instanceof Error ? err.message : String(err)}`);
453
+ return 3;
454
+ }
455
+ }
456
+ const loaded = await (0, index_js_1.loadIssuerJwks)(receipt, {
457
+ jwks: fileJwks,
458
+ jwksUri: args.jwksUrl || undefined,
459
+ fetchJwks: args.fetchJwks,
460
+ });
461
+ const trustedKids = args.noTrustedKid
462
+ ? []
463
+ : (args.trustedKids ?? [...index_js_1.DEFAULT_TRUSTED_ISSUER_KIDS]);
464
+ verifyEpochSignature = (jws) => epochSignatureOk(epochRecord, jws, loaded.jwks, trustedKids);
465
+ }
466
+ }
342
467
  const result = await (0, anchor_witness_js_1.verifyAnchoredRoot)({
343
468
  receipt,
344
469
  inclusion,
345
470
  head,
346
471
  baseRpcUrl: args.rpcUrl || undefined,
347
472
  solanaRpcUrl: args.solanaRpcUrl || undefined,
473
+ epochRecord,
474
+ verifyEpochSignature,
348
475
  });
349
476
  const verified = await (0, index_js_1.verifyReceipt)(receipt, { head });
350
477
  const lane = verified.receipt_lane;
@@ -661,10 +788,43 @@ async function main() {
661
788
  return 1;
662
789
  }
663
790
  }
791
+ /**
792
+ * Node's fetch keeps its undici agent on this symbol after the first request.
793
+ * There is no public handle for that pool. Closing it lets the loop drain.
794
+ */
795
+ const UNDICI_GLOBAL_DISPATCHER = Symbol.for('undici.globalDispatcher.1');
796
+ function fetchDispatcher() {
797
+ const bag = globalThis;
798
+ return bag[UNDICI_GLOBAL_DISPATCHER];
799
+ }
800
+ /**
801
+ * process.exit() while a fetch keep-alive socket is already CLOSING aborts
802
+ * on Windows: Assertion failed: !(handle->flags & UV_HANDLE_CLOSING)
803
+ * (src/win/async.c). Set the code and close the pool so the loop can drain.
804
+ */
805
+ async function finish(code) {
806
+ process.exitCode = code;
807
+ const dispatcher = fetchDispatcher();
808
+ if (!dispatcher)
809
+ return;
810
+ try {
811
+ const closing = dispatcher.close?.();
812
+ if (closing)
813
+ await closing;
814
+ }
815
+ catch {
816
+ try {
817
+ await dispatcher.destroy?.();
818
+ }
819
+ catch {
820
+ // The verification result is already the exit code.
821
+ }
822
+ }
823
+ }
664
824
  main()
665
- .then((code) => process.exit(code))
825
+ .then((code) => finish(code))
666
826
  .catch((err) => {
667
827
  console.error('Unexpected error:', err);
668
- process.exit(3);
828
+ return finish(3);
669
829
  });
670
830
  //# sourceMappingURL=cli.js.map