@xfuel/verify 0.2.1 → 0.3.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.
Files changed (42) hide show
  1. package/README.md +27 -0
  2. package/dist/anchor-witness.d.ts +138 -0
  3. package/dist/anchor-witness.d.ts.map +1 -0
  4. package/dist/anchor-witness.js +365 -0
  5. package/dist/anchor-witness.js.map +1 -0
  6. package/dist/canonical-preimage.d.ts +9 -0
  7. package/dist/canonical-preimage.d.ts.map +1 -0
  8. package/dist/canonical-preimage.js +25 -0
  9. package/dist/canonical-preimage.js.map +1 -0
  10. package/dist/cli.d.ts +1 -0
  11. package/dist/cli.d.ts.map +1 -1
  12. package/dist/cli.js +359 -7
  13. package/dist/cli.js.map +1 -1
  14. package/dist/head-binding.d.ts +24 -0
  15. package/dist/head-binding.d.ts.map +1 -0
  16. package/dist/head-binding.js +61 -0
  17. package/dist/head-binding.js.map +1 -0
  18. package/dist/index.d.ts +123 -1
  19. package/dist/index.d.ts.map +1 -1
  20. package/dist/index.js +248 -2
  21. package/dist/index.js.map +1 -1
  22. package/dist/issuer-history.d.ts +91 -0
  23. package/dist/issuer-history.d.ts.map +1 -0
  24. package/dist/issuer-history.js +292 -0
  25. package/dist/issuer-history.js.map +1 -0
  26. package/dist/jcs.d.ts +8 -0
  27. package/dist/jcs.d.ts.map +1 -0
  28. package/dist/jcs.js +64 -0
  29. package/dist/jcs.js.map +1 -0
  30. package/dist/preimage.d.ts +49 -0
  31. package/dist/preimage.d.ts.map +1 -0
  32. package/dist/preimage.js +203 -0
  33. package/dist/preimage.js.map +1 -0
  34. package/dist/receipt-lane.d.ts +234 -0
  35. package/dist/receipt-lane.d.ts.map +1 -0
  36. package/dist/receipt-lane.js +443 -0
  37. package/dist/receipt-lane.js.map +1 -0
  38. package/dist/refusal.d.ts +90 -0
  39. package/dist/refusal.d.ts.map +1 -0
  40. package/dist/refusal.js +226 -0
  41. package/dist/refusal.js.map +1 -0
  42. package/package.json +6 -4
package/dist/index.d.ts CHANGED
@@ -10,11 +10,15 @@
10
10
  *
11
11
  * See docs/specs/RECEIPT_V2_SEMANTICS.md for the verification algorithm.
12
12
  */
13
+ import { type InclusionStep } from './anchor-witness.js';
13
14
  import { computePaymentCommitment, computeInferenceBinding, type PaymentCommitmentInput, type InferenceBindingInput } from './binding.js';
14
15
  import { verifyBasePayer, parseBasePaymentRef, isEvmAddress, sumUsdcTransfersFromPayer, fetchBaseTransactionReceipt, USDC_ADDRESSES, ERC20_TRANSFER_TOPIC, BASE_RPC_URL, type BasePayerVerification, type BaseReceiptFetcher } from './base-payer.js';
15
16
  import { verifySolanaPayer, parseSolanaPaymentRef, isSolanaBase58Pubkey, extractUsdcTransfersFromTx, inferUsdcOutflowFromBalances, fetchSolanaTransaction, SOLANA_RPC_URL, SOLANA_USDC_MINT_MAINNET, SOLANA_USDC_MINT_DEVNET, type SolanaPayerVerification, type SolanaRpcFetcher, type SolanaRpcGetTransactionResult } from './solana-payer.js';
16
17
  import { verifyPayerBinding, receiptPayerClaimsFromEnvelope, decodeJwsPayload, type PayerBindingVerification, type ReceiptPayerClaims, type PayerRail } from './payer.js';
17
18
  import { resolvePinnedIssuerJwk, verifyIssuerJws } from './jws.js';
19
+ import { type ReceiptLane, type ReceiptTreeHead } from './receipt-lane.js';
20
+ import { type PreimageCheck } from './preimage.js';
21
+ import { type IssuerHistoryCheck, type IssuerHistoryDocument } from './issuer-history.js';
18
22
  export { computePaymentCommitment, computeInferenceBinding, type PaymentCommitmentInput, type InferenceBindingInput, verifyBasePayer, parseBasePaymentRef, isEvmAddress, sumUsdcTransfersFromPayer, fetchBaseTransactionReceipt, USDC_ADDRESSES, ERC20_TRANSFER_TOPIC, BASE_RPC_URL, type BasePayerVerification, type BaseReceiptFetcher, verifySolanaPayer, parseSolanaPaymentRef, isSolanaBase58Pubkey, extractUsdcTransfersFromTx, inferUsdcOutflowFromBalances, fetchSolanaTransaction, SOLANA_RPC_URL, SOLANA_USDC_MINT_MAINNET, SOLANA_USDC_MINT_DEVNET, type SolanaPayerVerification, type SolanaRpcFetcher, type SolanaRpcGetTransactionResult, verifyPayerBinding, receiptPayerClaimsFromEnvelope, decodeJwsPayload, type PayerBindingVerification, type ReceiptPayerClaims, type PayerRail, };
19
23
  /** ZKVerifierSP1 contract on Base mainnet. */
20
24
  export declare const ZK_VERIFIER_ADDRESS = "0x9373499645292715a2275A78eD65B14215C41c06";
@@ -24,6 +28,7 @@ export declare const BASE_SEPOLIA_RPC_URL = "https://sepolia.base.org";
24
28
  export interface XFuelReceipt {
25
29
  schema?: string;
26
30
  task_id: string;
31
+ created_at?: number | string;
27
32
  status: string;
28
33
  proof_outcome?: string;
29
34
  verify_url?: string;
@@ -98,8 +103,10 @@ export interface XFuelReceipt {
98
103
  value?: string;
99
104
  kid?: string;
100
105
  jws?: string;
101
- issuer_jwk?: Es256Jwk;
102
106
  payload_version?: number;
107
+ payload_hash?: string;
108
+ canonical_preimage?: string;
109
+ issuer_jwk?: Es256Jwk;
103
110
  };
104
111
  verification?: {
105
112
  source_of_truth?: string;
@@ -111,7 +118,45 @@ export interface XFuelReceipt {
111
118
  payer_wallet?: string | null;
112
119
  agent_pubkey?: string | null;
113
120
  api_key_hash?: string | null;
121
+ agent_id?: string | number | null;
122
+ } | null;
123
+ /** Book agent_id. Present on claim_id-era JWS payloads. Absent on older v8 receipts. */
124
+ claim_id?: string | null;
125
+ /**
126
+ * v9. Transparency-log head hash inside the issuer JWS. The outer copy is
127
+ * display only. Absent on v8 and earlier.
128
+ */
129
+ tree_head_hash?: string | null;
130
+ /** v9. Clock tolerance bound inside the issuer JWS. Absent on v8 and earlier. */
131
+ tolerance?: {
132
+ base?: number;
133
+ solana?: number;
134
+ } | null;
135
+ /** Append position. Unsigned relative to the payment JWS; signed inside book_chain. */
136
+ book_seq?: number | null;
137
+ book_chain?: {
138
+ seq?: number | null;
139
+ row_hash?: string | null;
140
+ } | null;
141
+ /** Unsigned derived refusal section. Ignored by signature verification. */
142
+ receipt_lane?: {
143
+ anchor_at_binding?: {
144
+ root: string | null;
145
+ tree_size: number | null;
146
+ anchor_tx: string | null;
147
+ solana_signature: string | null;
148
+ } | null;
149
+ anchor_current?: {
150
+ root: string | null;
151
+ tree_size: number | null;
152
+ anchor_tx: string | null;
153
+ solana_signature: string | null;
154
+ } | null;
155
+ freeze?: boolean;
156
+ anchor_changed_since_binding?: boolean | null;
114
157
  } | null;
158
+ tree_head?: ReceiptTreeHead | null;
159
+ head?: ReceiptTreeHead | null;
115
160
  }
116
161
  /** JWK public key for ES256 verification. */
117
162
  export interface Es256Jwk {
@@ -189,6 +234,32 @@ export interface ReceiptVerification {
189
234
  tx: string | null;
190
235
  /** Unsigned outer fields that disagree with the JWS payload. */
191
236
  claim_mismatches: ClaimMismatch[];
237
+ /**
238
+ * `not_present_legacy` — v8 (or older) payload with no claim_id key. Still verifies.
239
+ * `ok` — claim_id-era payload, and a payment.ref is paired with a seat.
240
+ * `refused` — claim_id-era payload, payment.ref set, claim_id null.
241
+ */
242
+ claim_id: 'not_present_legacy' | 'ok' | 'refused';
243
+ /**
244
+ * v9 head binding from verified claims only. Null when the signature is not
245
+ * trusted, when the payload is v8 or earlier, or when the pair is missing.
246
+ * Never copied from the unsigned outer fields.
247
+ */
248
+ head_binding: {
249
+ tree_head_hash: string | null;
250
+ tolerance: unknown;
251
+ } | null;
252
+ /**
253
+ * Unsigned refusal decision beside book_seq. Not part of the payment JWS.
254
+ * freeze is true only for an unsettled receipt-lane row whose anchor changed
255
+ * after binding. It does not change `overall`.
256
+ */
257
+ receipt_lane: ReceiptLane;
258
+ /** Recompute of published preimages. Absent block is skipped unless requirePreimages. */
259
+ preimages: PreimageCheck;
260
+ /** Kid window against the signed issuer history. Unreachable is a warning unless strict. */
261
+ issuer_history: IssuerHistoryCheck;
262
+ warnings: string[];
192
263
  overall: 'verified' | 'partial' | 'failed';
193
264
  errors: string[];
194
265
  }
@@ -295,6 +366,11 @@ export declare const canonicalSignedPayload: typeof canonicalIssuerPayload;
295
366
  * Hash the canonical payload (for ERC-8004 response_hash).
296
367
  */
297
368
  export declare function hashCanonicalPayload(receipt: XFuelReceipt): string;
369
+ /**
370
+ * claim_id-era receipts include the key even when the value is null.
371
+ * Older payloads omit the key and stay valid.
372
+ */
373
+ export declare function claimIdVerdict(claims: Record<string, unknown> | null | undefined): 'not_present_legacy' | 'ok' | 'refused';
298
374
  /** Flag unsigned outer copies that disagree with the JWS payload. */
299
375
  export declare function diffOuterClaims(receipt: XFuelReceipt, claims: Record<string, unknown> | null): ClaimMismatch[];
300
376
  /** Fetch a JWKS document. Caller decides whether the URL is a trust root. */
@@ -331,9 +407,55 @@ export interface VerifyReceiptOptions {
331
407
  verifierAddress?: string;
332
408
  fetchSolanaTransaction?: SolanaRpcFetcher;
333
409
  fetchBaseReceipt?: BaseReceiptFetcher;
410
+ /**
411
+ * Tree head to check against the signed `tree_head_hash`. An equal root is
412
+ * the issuance prefix and proves inclusion of this receipt. A different root
413
+ * verifies only when `inclusion` proves the leaf is in that head.
414
+ */
415
+ head?: ReceiptTreeHead | null;
416
+ /**
417
+ * Inclusion witness for `head` when its root is not the signed prefix.
418
+ * `leaf` is the 32-byte leaf hash hex. Without it the leaf is
419
+ * SHA-256(0x00 || `${task_id}|${row_hash}`).
420
+ */
421
+ inclusion?: {
422
+ leaf?: string | null;
423
+ leaf_index?: number | null;
424
+ tree_size?: number | null;
425
+ row_hash?: string | null;
426
+ proof?: InclusionStep[] | null;
427
+ } | null;
428
+ /**
429
+ * Fail when a recomputable hash has no preimage. A present `preimages`
430
+ * block is always checked, even when this is false.
431
+ */
432
+ requirePreimages?: boolean;
433
+ /** Signed issuer history document. Skips the network when set. */
434
+ issuerHistory?: IssuerHistoryDocument | null;
435
+ /** Fetch /.well-known/issuer-history.json. Unreachable warns unless strict. */
436
+ fetchIssuerHistory?: boolean;
437
+ /** Fail closed when the history cannot be loaded. */
438
+ strictIssuerHistory?: boolean;
439
+ /** Explicit history URL. Any https URL. */
440
+ issuerHistoryUrl?: string | null;
441
+ /** Exact issuer-history response bytes. SHA-256 must match a signed pin. */
442
+ issuerHistoryBytes?: string | null;
443
+ /** `--no-issuer-history`. A signed pin is not checked. */
444
+ skipIssuerHistory?: boolean;
445
+ /**
446
+ * Stored canonical object (the GET /preimage body). SHA-256 must match
447
+ * the signed payload_hash. Absent bytes are not rebuilt.
448
+ */
449
+ canonicalPreimage?: string | null;
334
450
  }
335
451
  export declare function verifyReceipt(receipt: XFuelReceipt, options?: VerifyReceiptOptions): Promise<ReceiptVerification>;
336
452
  export { resolvePinnedIssuerJwk, verifyIssuerJws, DEFAULT_TRUSTED_ISSUER_KIDS, DEFAULT_TRUSTED_JWKS_HOSTS, KEY_UNTRUSTED, jwkThumbprint, isPinnedTrustedJwk, jwksHostAllowed, } from './jws.js';
453
+ export { buildReceiptLane, receiptLaneFromVerification, receiptLaneDecision, deriveSettledBy, deriveSettled, anchorChangedSinceBinding, RECEIPT_LANE_SCHEMA, RECEIPT_LANE_RULE, RECEIPT_LANE_ORDERING, RECEIPT_LANE_BOUNDARY, type ReceiptLane, type SettledBy, type RegistryClassification, type LocalCheckHint, type AnchorIdentity, type ReceiptTreeHead, } from './receipt-lane.js';
454
+ export { headBindingVerdict, signedHeadBinding, outerHeadDisagrees, HEAD_BINDING_PAYLOAD_VERSION, type HeadBindingVerdict, type SignedHeadBinding, } from './head-binding.js';
455
+ export { isRefusalDocument, verifyRefusal, REFUSAL_SCHEMA, REFUSAL_PAYLOAD_VERSION, REFUSAL_PROVES, REFUSAL_DOES_NOT_PROVE, type RefusalDocument, type RefusalVerification, type RefusalJwks, } from './refusal.js';
456
+ export { verifyAnchoredRoot, verifyMerkleInclusion, extractMemos, parseAnchorMemo, leafHash, ANCHOR_PROVES, ANCHOR_DOES_NOT_PROVE, SOLANA_GENESIS, BASE_MAINNET_CHAIN_ID, type AnchorWitnessResult, type AnchorReceipt, type AnchorInclusion, type AnchorHead, type VerifyAnchoredRootInput, } from './anchor-witness.js';
457
+ export { verifyCanonicalPreimageBytes, CANONICAL_PAYLOAD_VERSION, } from './canonical-preimage.js';
458
+ export { readIssuerHistoryPin, issuerHistoryDocumentHash, type IssuerHistoryPin, } from './issuer-history.js';
337
459
  declare const _default: {
338
460
  verifyBinding: typeof verifyBinding;
339
461
  verifyIssuerSignature: typeof verifyIssuerSignature;
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -12,7 +12,8 @@
12
12
  * See docs/specs/RECEIPT_V2_SEMANTICS.md for the verification algorithm.
13
13
  */
14
14
  Object.defineProperty(exports, "__esModule", { value: true });
15
- exports.jwksHostAllowed = exports.isPinnedTrustedJwk = exports.jwkThumbprint = exports.KEY_UNTRUSTED = exports.DEFAULT_TRUSTED_JWKS_HOSTS = exports.DEFAULT_TRUSTED_ISSUER_KIDS = exports.verifyIssuerJws = exports.resolvePinnedIssuerJwk = exports.canonicalSignedPayload = exports.BASE_SEPOLIA_RPC_URL = exports.ZK_VERIFIER_ADDRESS = exports.decodeJwsPayload = exports.receiptPayerClaimsFromEnvelope = exports.verifyPayerBinding = exports.SOLANA_USDC_MINT_DEVNET = exports.SOLANA_USDC_MINT_MAINNET = exports.SOLANA_RPC_URL = exports.fetchSolanaTransaction = exports.inferUsdcOutflowFromBalances = exports.extractUsdcTransfersFromTx = exports.isSolanaBase58Pubkey = exports.parseSolanaPaymentRef = exports.verifySolanaPayer = exports.BASE_RPC_URL = exports.ERC20_TRANSFER_TOPIC = exports.USDC_ADDRESSES = exports.fetchBaseTransactionReceipt = exports.sumUsdcTransfersFromPayer = exports.isEvmAddress = exports.parseBasePaymentRef = exports.verifyBasePayer = exports.computeInferenceBinding = exports.computePaymentCommitment = void 0;
15
+ exports.REFUSAL_SCHEMA = exports.verifyRefusal = exports.isRefusalDocument = exports.HEAD_BINDING_PAYLOAD_VERSION = exports.outerHeadDisagrees = exports.signedHeadBinding = exports.headBindingVerdict = exports.RECEIPT_LANE_BOUNDARY = exports.RECEIPT_LANE_ORDERING = exports.RECEIPT_LANE_RULE = exports.RECEIPT_LANE_SCHEMA = exports.anchorChangedSinceBinding = exports.deriveSettled = exports.deriveSettledBy = exports.receiptLaneDecision = exports.receiptLaneFromVerification = exports.buildReceiptLane = exports.jwksHostAllowed = exports.isPinnedTrustedJwk = exports.jwkThumbprint = exports.KEY_UNTRUSTED = exports.DEFAULT_TRUSTED_JWKS_HOSTS = exports.DEFAULT_TRUSTED_ISSUER_KIDS = exports.verifyIssuerJws = exports.resolvePinnedIssuerJwk = exports.canonicalSignedPayload = exports.BASE_SEPOLIA_RPC_URL = exports.ZK_VERIFIER_ADDRESS = exports.decodeJwsPayload = exports.receiptPayerClaimsFromEnvelope = exports.verifyPayerBinding = exports.SOLANA_USDC_MINT_DEVNET = exports.SOLANA_USDC_MINT_MAINNET = exports.SOLANA_RPC_URL = exports.fetchSolanaTransaction = exports.inferUsdcOutflowFromBalances = exports.extractUsdcTransfersFromTx = exports.isSolanaBase58Pubkey = exports.parseSolanaPaymentRef = exports.verifySolanaPayer = exports.BASE_RPC_URL = exports.ERC20_TRANSFER_TOPIC = exports.USDC_ADDRESSES = exports.fetchBaseTransactionReceipt = exports.sumUsdcTransfersFromPayer = exports.isEvmAddress = exports.parseBasePaymentRef = exports.verifyBasePayer = exports.computeInferenceBinding = exports.computePaymentCommitment = void 0;
16
+ exports.issuerHistoryDocumentHash = exports.readIssuerHistoryPin = exports.CANONICAL_PAYLOAD_VERSION = exports.verifyCanonicalPreimageBytes = exports.BASE_MAINNET_CHAIN_ID = exports.SOLANA_GENESIS = exports.ANCHOR_DOES_NOT_PROVE = exports.ANCHOR_PROVES = exports.leafHash = exports.parseAnchorMemo = exports.extractMemos = exports.verifyMerkleInclusion = exports.verifyAnchoredRoot = exports.REFUSAL_DOES_NOT_PROVE = exports.REFUSAL_PROVES = exports.REFUSAL_PAYLOAD_VERSION = void 0;
16
17
  exports.canonicalPayloadVersion = canonicalPayloadVersion;
17
18
  exports.canonicalIssuerPayload = canonicalIssuerPayload;
18
19
  exports.sumUsdcTransfersToPayee = sumUsdcTransfersToPayee;
@@ -22,11 +23,13 @@ exports.verifyIssuerSignatureWithJwks = verifyIssuerSignatureWithJwks;
22
23
  exports.verifyBinding = verifyBinding;
23
24
  exports.verifyNullifier = verifyNullifier;
24
25
  exports.hashCanonicalPayload = hashCanonicalPayload;
26
+ exports.claimIdVerdict = claimIdVerdict;
25
27
  exports.diffOuterClaims = diffOuterClaims;
26
28
  exports.fetchIssuerJwks = fetchIssuerJwks;
27
29
  exports.receiptPayerClaims = receiptPayerClaims;
28
30
  exports.verifyReceipt = verifyReceipt;
29
31
  const ethers_1 = require("ethers");
32
+ const anchor_witness_js_1 = require("./anchor-witness.js");
30
33
  const node_crypto_1 = require("node:crypto");
31
34
  const binding_js_1 = require("./binding.js");
32
35
  Object.defineProperty(exports, "computePaymentCommitment", { enumerable: true, get: function () { return binding_js_1.computePaymentCommitment; } });
@@ -55,6 +58,12 @@ Object.defineProperty(exports, "verifyPayerBinding", { enumerable: true, get: fu
55
58
  Object.defineProperty(exports, "receiptPayerClaimsFromEnvelope", { enumerable: true, get: function () { return payer_js_1.receiptPayerClaimsFromEnvelope; } });
56
59
  Object.defineProperty(exports, "decodeJwsPayload", { enumerable: true, get: function () { return payer_js_1.decodeJwsPayload; } });
57
60
  const jws_js_1 = require("./jws.js");
61
+ const head_binding_js_1 = require("./head-binding.js");
62
+ const receipt_lane_js_1 = require("./receipt-lane.js");
63
+ const refusal_js_1 = require("./refusal.js");
64
+ const preimage_js_1 = require("./preimage.js");
65
+ const issuer_history_js_1 = require("./issuer-history.js");
66
+ const canonical_preimage_js_1 = require("./canonical-preimage.js");
58
67
  /** ZKVerifierSP1 contract on Base mainnet. */
59
68
  exports.ZK_VERIFIER_ADDRESS = '0x9373499645292715a2275A78eD65B14215C41c06';
60
69
  /** Base Sepolia testnet RPC. */
@@ -613,6 +622,23 @@ exports.canonicalSignedPayload = canonicalIssuerPayload;
613
622
  function hashCanonicalPayload(receipt) {
614
623
  return (0, ethers_1.keccak256)((0, ethers_1.toUtf8Bytes)((0, exports.canonicalSignedPayload)(receipt)));
615
624
  }
625
+ /**
626
+ * claim_id-era receipts include the key even when the value is null.
627
+ * Older payloads omit the key and stay valid.
628
+ */
629
+ function claimIdVerdict(claims) {
630
+ if (!claims || !Object.prototype.hasOwnProperty.call(claims, 'claim_id')) {
631
+ return 'not_present_legacy';
632
+ }
633
+ const payment = asRecord(claims.payment);
634
+ const ref = payment?.ref;
635
+ const hasRef = ref != null && String(ref) !== '';
636
+ const id = claims.claim_id;
637
+ const missing = id == null || id === '';
638
+ if (hasRef && missing)
639
+ return 'refused';
640
+ return 'ok';
641
+ }
616
642
  function claimString(value) {
617
643
  if (value == null || value === '')
618
644
  return null;
@@ -645,6 +671,7 @@ const CLAIM_COMPARE = [
645
671
  { field: 'caller_binding.payer_wallet', outer: (r) => r.caller_binding?.payer_wallet, signed: (c) => asRecord(c.caller_binding)?.payer_wallet, address: true },
646
672
  { field: 'caller_binding.agent_pubkey', outer: (r) => r.caller_binding?.agent_pubkey, signed: (c) => asRecord(c.caller_binding)?.agent_pubkey },
647
673
  { field: 'caller_binding.api_key_hash', outer: (r) => r.caller_binding?.api_key_hash, signed: (c) => asRecord(c.caller_binding)?.api_key_hash },
674
+ { field: 'claim_id', outer: (r) => r.claim_id, signed: (c) => c.claim_id },
648
675
  { field: 'route.model', outer: (r) => r.route?.model, signed: (c) => asRecord(c.route)?.model },
649
676
  { field: 'route.provider', outer: (r) => r.route?.provider, signed: (c) => asRecord(c.route)?.provider },
650
677
  { field: 'output.hash', outer: (r) => r.output?.hash, signed: (c) => asRecord(c.output)?.hash },
@@ -667,6 +694,20 @@ function diffOuterClaims(receipt, claims) {
667
694
  signed: claimString(spec.signed(claims)),
668
695
  });
669
696
  }
697
+ // v9 head pair. Compared when the outer key is present, including a null
698
+ // signed hash against a filled-in outer copy. v8 claims skip this.
699
+ if ((0, head_binding_js_1.headBindingVerdict)(claims) === 'ok') {
700
+ const disagree = (0, head_binding_js_1.outerHeadDisagrees)(receipt, claims);
701
+ if (disagree) {
702
+ const outerValue = disagree === 'tree_head_hash' ? receipt.tree_head_hash : receipt.tolerance;
703
+ const signedValue = disagree === 'tree_head_hash' ? claims.tree_head_hash : claims.tolerance;
704
+ mismatches.push({
705
+ field: disagree,
706
+ outer: outerValue == null ? null : JSON.stringify(outerValue),
707
+ signed: signedValue == null ? null : JSON.stringify(signedValue),
708
+ });
709
+ }
710
+ }
670
711
  return mismatches;
671
712
  }
672
713
  function receiptViewFromClaims(receipt, claims) {
@@ -809,6 +850,38 @@ async function fetchIssuerJwks(uri, fetchImpl = globalThis.fetch) {
809
850
  function receiptPayerClaims(receipt) {
810
851
  return (0, payer_js_1.receiptPayerClaimsFromEnvelope)(receipt);
811
852
  }
853
+ function normalizeBoundRoot(root) {
854
+ if (root == null || root === '')
855
+ return null;
856
+ const hex = String(root).replace(/^0x/i, '').toLowerCase();
857
+ return /^[0-9a-f]{64}$/.test(hex) ? hex : null;
858
+ }
859
+ /**
860
+ * True when the supplied head is the signed prefix, or a later head whose
861
+ * inclusion proof contains this receipt's leaf.
862
+ */
863
+ function suppliedHeadCovers(receipt, signedRoot, head, inclusion) {
864
+ const signed = normalizeBoundRoot(signedRoot);
865
+ const supplied = normalizeBoundRoot(head?.root);
866
+ if (!signed || !supplied)
867
+ return false;
868
+ if (signed === supplied)
869
+ return true;
870
+ if (!inclusion || !Array.isArray(inclusion.proof) || inclusion.leaf_index == null)
871
+ return true;
872
+ if (receipt.task_id == null)
873
+ return false;
874
+ const row = inclusion.row_hash ?? receipt.book_chain?.row_hash ?? '';
875
+ const leaf = (0, anchor_witness_js_1.leafHash)(Buffer.from(`${receipt.task_id}|${row}`));
876
+ if (typeof inclusion.leaf === 'string' && /^[0-9a-fA-F]{64}$/.test(inclusion.leaf)
877
+ && inclusion.leaf.toLowerCase() !== leaf.toString('hex')) {
878
+ return false;
879
+ }
880
+ const size = inclusion.tree_size ?? head.tree_size;
881
+ if (size == null || !Number.isInteger(Number(size)))
882
+ return false;
883
+ return (0, anchor_witness_js_1.verifyMerkleInclusion)(leaf, Number(inclusion.leaf_index), Number(size), supplied, inclusion.proof);
884
+ }
812
885
  async function verifyReceipt(receipt, options = {}) {
813
886
  const errors = [];
814
887
  const trustedKids = options.trustedKids ?? jws_js_1.DEFAULT_TRUSTED_ISSUER_KIDS;
@@ -867,6 +940,26 @@ async function verifyReceipt(receipt, options = {}) {
867
940
  errors.push(`outer/signed mismatch: ${mismatch.field} (outer ${mismatch.outer}, signed ${mismatch.signed})`);
868
941
  }
869
942
  const verifiedClaims = issuer_signature.valid ? issuer_signature.payload : undefined;
943
+ const claim_id = claimIdVerdict(issuer_signature.valid ? verifiedClaims : decoded);
944
+ if (issuer_signature.valid && claim_id === 'refused') {
945
+ errors.push('payment.ref is set and claim_id is null');
946
+ }
947
+ const headVerdict = (0, head_binding_js_1.headBindingVerdict)(issuer_signature.valid ? verifiedClaims : null);
948
+ const headMissing = headVerdict === 'missing';
949
+ if (headMissing) {
950
+ errors.push('payload v9 requires tree_head_hash and tolerance inside signed claims');
951
+ }
952
+ const signedBinding = headVerdict === 'ok' ? (0, head_binding_js_1.signedHeadBinding)(verifiedClaims) : null;
953
+ // A published head may differ from the signed prefix. That is not a failure.
954
+ // An inclusion proof, when one is supplied, must be for this receipt's leaf
955
+ // (`task_id|row_hash`), not an arbitrary hash already in the tree.
956
+ let headMismatch = false;
957
+ if (signedBinding?.tree_head_hash && options.head?.root && options.inclusion) {
958
+ if (!suppliedHeadCovers(receipt, signedBinding.tree_head_hash, options.head, options.inclusion)) {
959
+ headMismatch = true;
960
+ errors.push('tree_head_mismatch');
961
+ }
962
+ }
870
963
  let binding;
871
964
  if (receipt.issuer_signature?.jws) {
872
965
  if (verifiedClaims) {
@@ -976,8 +1069,86 @@ async function verifyReceipt(receipt, options = {}) {
976
1069
  };
977
1070
  }
978
1071
  const facts = factsFromClaims(verifiedClaims);
1072
+ const warnings = [];
1073
+ const preimages = await (0, preimage_js_1.verifyPublishedPreimages)(receipt, {
1074
+ requirePreimages: options.requirePreimages === true,
1075
+ fetchImpl: options.fetchImpl,
1076
+ trustedHosts,
1077
+ });
1078
+ if (!preimages.ok)
1079
+ errors.push(...preimages.errors);
1080
+ const signedPayloadHash = verifiedClaims && 'payload_hash' in verifiedClaims
1081
+ ? verifiedClaims.payload_hash
1082
+ : null;
1083
+ const storedPreimage = typeof receipt.issuer_signature?.canonical_preimage === 'string'
1084
+ ? receipt.issuer_signature.canonical_preimage
1085
+ : null;
1086
+ let canonicalPreimageFailed = false;
1087
+ if (storedPreimage != null) {
1088
+ const storedCheck = (0, canonical_preimage_js_1.verifyCanonicalPreimageBytes)(storedPreimage, signedPayloadHash);
1089
+ if (!storedCheck.ok) {
1090
+ canonicalPreimageFailed = true;
1091
+ if (storedCheck.reason)
1092
+ errors.push(`canonical preimage: ${storedCheck.reason}`);
1093
+ }
1094
+ }
1095
+ if (typeof options.canonicalPreimage === 'string') {
1096
+ const fileCheck = (0, canonical_preimage_js_1.verifyCanonicalPreimageBytes)(options.canonicalPreimage, signedPayloadHash);
1097
+ if (!fileCheck.ok) {
1098
+ canonicalPreimageFailed = true;
1099
+ if (fileCheck.reason)
1100
+ errors.push(`canonical preimage: ${fileCheck.reason}`);
1101
+ }
1102
+ }
1103
+ const issuedAt = (verifiedClaims && 'iat' in verifiedClaims ? verifiedClaims.iat : null)
1104
+ ?? decoded?.iat
1105
+ ?? receipt.created_at
1106
+ ?? null;
1107
+ const historyPin = (0, issuer_history_js_1.readIssuerHistoryPin)(verifiedClaims);
1108
+ const payloadVersion = Number(verifiedClaims?.payload_version);
1109
+ // Payload v10 signs the history pin. A missing pin fails even when the
1110
+ // caller did not pass a history file or ask for a fetch.
1111
+ const pinRequired = !options.skipIssuerHistory
1112
+ && Number.isFinite(payloadVersion)
1113
+ && payloadVersion >= canonical_preimage_js_1.CANONICAL_PAYLOAD_VERSION;
1114
+ const historyAsked = pinRequired || (!options.skipIssuerHistory && !!(options.issuerHistory
1115
+ || options.issuerHistoryBytes
1116
+ || options.fetchIssuerHistory
1117
+ || options.strictIssuerHistory
1118
+ || options.issuerHistoryUrl
1119
+ || historyPin));
1120
+ const issuer_history = historyAsked
1121
+ ? await (0, issuer_history_js_1.checkReceiptIssuerHistory)(receipt, {
1122
+ document: options.issuerHistory ?? null,
1123
+ documentBytes: options.issuerHistoryBytes ?? null,
1124
+ fetchHistory: options.fetchIssuerHistory === true || options.strictIssuerHistory === true,
1125
+ strict: options.strictIssuerHistory === true,
1126
+ historyUrl: options.issuerHistoryUrl ?? null,
1127
+ jwks,
1128
+ trustedKids,
1129
+ fetchImpl: options.fetchImpl,
1130
+ trustedHosts,
1131
+ issuedAt,
1132
+ kid: issuer_signature.kid ?? receipt.issuer_signature?.kid ?? null,
1133
+ pin: historyPin,
1134
+ requirePin: pinRequired,
1135
+ })
1136
+ : {
1137
+ checked: false,
1138
+ ok: true,
1139
+ unreachable: false,
1140
+ warning: null,
1141
+ reason: null,
1142
+ kid: issuer_signature.kid ?? receipt.issuer_signature?.kid ?? null,
1143
+ };
1144
+ if (issuer_history.warning)
1145
+ warnings.push(issuer_history.warning);
1146
+ if (issuer_history.checked && !issuer_history.ok && issuer_history.reason) {
1147
+ errors.push(`issuer history: ${issuer_history.reason}`);
1148
+ }
979
1149
  const hasIssuerSig = !!receipt.issuer_signature;
980
1150
  const jwksWasSupplied = !!(options.jwks || options.jwksUri || (options.fetchJwks && jwks));
1151
+ const claimRefused = issuer_signature.valid && claim_id === 'refused';
981
1152
  const signatureFailed = hasIssuerSig && !issuer_signature.valid && (!!issuer_signature.checked
982
1153
  || jwksWasSupplied
983
1154
  || issuer_signature.reason === jws_js_1.KEY_UNTRUSTED
@@ -991,7 +1162,9 @@ async function verifyReceipt(receipt, options = {}) {
991
1162
  && nullifier.anchored === false);
992
1163
  const signatureUnchecked = hasIssuerSig && !issuer_signature.checked;
993
1164
  let overall;
994
- if (signatureFailed || mismatchFailed || bindingFailed || payerFailed || nullifierFailed) {
1165
+ const preimageFailed = !preimages.ok;
1166
+ const historyFailed = issuer_history.checked && !issuer_history.ok;
1167
+ if (signatureFailed || mismatchFailed || bindingFailed || payerFailed || nullifierFailed || claimRefused || headMissing || headMismatch || preimageFailed || historyFailed || canonicalPreimageFailed) {
995
1168
  overall = 'failed';
996
1169
  }
997
1170
  else if (signatureUnchecked) {
@@ -1009,6 +1182,32 @@ async function verifyReceipt(receipt, options = {}) {
1009
1182
  else {
1010
1183
  overall = 'partial';
1011
1184
  }
1185
+ // A refusal is a different document. Recognition uses the signed JWS
1186
+ // schema, not only the unsigned outer schema. A valid issuer signature
1187
+ // here must not be reported as a verified payment.
1188
+ const verifiedSchema = typeof verifiedClaims?.schema === 'string' ? verifiedClaims.schema : null;
1189
+ if (verifiedSchema === refusal_js_1.REFUSAL_SCHEMA || (0, refusal_js_1.isRefusalDocument)(receipt)) {
1190
+ errors.push('refusal document is not a payment receipt');
1191
+ overall = 'failed';
1192
+ }
1193
+ const signedPayment = asRecord(verifiedClaims?.payment);
1194
+ const signedSettlement = asRecord(verifiedClaims?.settlement);
1195
+ const receipt_lane = (0, receipt_lane_js_1.receiptLaneFromVerification)({
1196
+ receipt,
1197
+ claims: {
1198
+ payment: signedPayment ? {
1199
+ ref: typeof signedPayment.ref === 'string' ? signedPayment.ref : null,
1200
+ rail: typeof signedPayment.rail === 'string' ? signedPayment.rail : null,
1201
+ collected: typeof signedPayment.collected === 'boolean' ? signedPayment.collected : null,
1202
+ } : null,
1203
+ settlement: signedSettlement ? {
1204
+ kind: typeof signedSettlement.kind === 'string' ? signedSettlement.kind : null,
1205
+ } : null,
1206
+ },
1207
+ issuerValid: issuer_signature.valid === true,
1208
+ payer: { checked: payer.checked, valid: payer.valid },
1209
+ head: options.head ?? null,
1210
+ });
1012
1211
  return {
1013
1212
  receipt_id: receipt.task_id,
1014
1213
  binding,
@@ -1021,6 +1220,14 @@ async function verifyReceipt(receipt, options = {}) {
1021
1220
  amount_usdc: facts.amount_usdc,
1022
1221
  tx: facts.tx,
1023
1222
  claim_mismatches,
1223
+ claim_id,
1224
+ head_binding: signedBinding
1225
+ ? { tree_head_hash: signedBinding.tree_head_hash, tolerance: signedBinding.tolerance }
1226
+ : null,
1227
+ receipt_lane,
1228
+ preimages,
1229
+ issuer_history,
1230
+ warnings,
1024
1231
  overall,
1025
1232
  errors,
1026
1233
  };
@@ -1034,6 +1241,45 @@ Object.defineProperty(exports, "KEY_UNTRUSTED", { enumerable: true, get: functio
1034
1241
  Object.defineProperty(exports, "jwkThumbprint", { enumerable: true, get: function () { return jws_js_2.jwkThumbprint; } });
1035
1242
  Object.defineProperty(exports, "isPinnedTrustedJwk", { enumerable: true, get: function () { return jws_js_2.isPinnedTrustedJwk; } });
1036
1243
  Object.defineProperty(exports, "jwksHostAllowed", { enumerable: true, get: function () { return jws_js_2.jwksHostAllowed; } });
1244
+ var receipt_lane_js_2 = require("./receipt-lane.js");
1245
+ Object.defineProperty(exports, "buildReceiptLane", { enumerable: true, get: function () { return receipt_lane_js_2.buildReceiptLane; } });
1246
+ Object.defineProperty(exports, "receiptLaneFromVerification", { enumerable: true, get: function () { return receipt_lane_js_2.receiptLaneFromVerification; } });
1247
+ Object.defineProperty(exports, "receiptLaneDecision", { enumerable: true, get: function () { return receipt_lane_js_2.receiptLaneDecision; } });
1248
+ Object.defineProperty(exports, "deriveSettledBy", { enumerable: true, get: function () { return receipt_lane_js_2.deriveSettledBy; } });
1249
+ Object.defineProperty(exports, "deriveSettled", { enumerable: true, get: function () { return receipt_lane_js_2.deriveSettled; } });
1250
+ Object.defineProperty(exports, "anchorChangedSinceBinding", { enumerable: true, get: function () { return receipt_lane_js_2.anchorChangedSinceBinding; } });
1251
+ Object.defineProperty(exports, "RECEIPT_LANE_SCHEMA", { enumerable: true, get: function () { return receipt_lane_js_2.RECEIPT_LANE_SCHEMA; } });
1252
+ Object.defineProperty(exports, "RECEIPT_LANE_RULE", { enumerable: true, get: function () { return receipt_lane_js_2.RECEIPT_LANE_RULE; } });
1253
+ Object.defineProperty(exports, "RECEIPT_LANE_ORDERING", { enumerable: true, get: function () { return receipt_lane_js_2.RECEIPT_LANE_ORDERING; } });
1254
+ Object.defineProperty(exports, "RECEIPT_LANE_BOUNDARY", { enumerable: true, get: function () { return receipt_lane_js_2.RECEIPT_LANE_BOUNDARY; } });
1255
+ var head_binding_js_2 = require("./head-binding.js");
1256
+ Object.defineProperty(exports, "headBindingVerdict", { enumerable: true, get: function () { return head_binding_js_2.headBindingVerdict; } });
1257
+ Object.defineProperty(exports, "signedHeadBinding", { enumerable: true, get: function () { return head_binding_js_2.signedHeadBinding; } });
1258
+ Object.defineProperty(exports, "outerHeadDisagrees", { enumerable: true, get: function () { return head_binding_js_2.outerHeadDisagrees; } });
1259
+ Object.defineProperty(exports, "HEAD_BINDING_PAYLOAD_VERSION", { enumerable: true, get: function () { return head_binding_js_2.HEAD_BINDING_PAYLOAD_VERSION; } });
1260
+ var refusal_js_2 = require("./refusal.js");
1261
+ Object.defineProperty(exports, "isRefusalDocument", { enumerable: true, get: function () { return refusal_js_2.isRefusalDocument; } });
1262
+ Object.defineProperty(exports, "verifyRefusal", { enumerable: true, get: function () { return refusal_js_2.verifyRefusal; } });
1263
+ Object.defineProperty(exports, "REFUSAL_SCHEMA", { enumerable: true, get: function () { return refusal_js_2.REFUSAL_SCHEMA; } });
1264
+ Object.defineProperty(exports, "REFUSAL_PAYLOAD_VERSION", { enumerable: true, get: function () { return refusal_js_2.REFUSAL_PAYLOAD_VERSION; } });
1265
+ Object.defineProperty(exports, "REFUSAL_PROVES", { enumerable: true, get: function () { return refusal_js_2.REFUSAL_PROVES; } });
1266
+ Object.defineProperty(exports, "REFUSAL_DOES_NOT_PROVE", { enumerable: true, get: function () { return refusal_js_2.REFUSAL_DOES_NOT_PROVE; } });
1267
+ var anchor_witness_js_2 = require("./anchor-witness.js");
1268
+ Object.defineProperty(exports, "verifyAnchoredRoot", { enumerable: true, get: function () { return anchor_witness_js_2.verifyAnchoredRoot; } });
1269
+ Object.defineProperty(exports, "verifyMerkleInclusion", { enumerable: true, get: function () { return anchor_witness_js_2.verifyMerkleInclusion; } });
1270
+ Object.defineProperty(exports, "extractMemos", { enumerable: true, get: function () { return anchor_witness_js_2.extractMemos; } });
1271
+ Object.defineProperty(exports, "parseAnchorMemo", { enumerable: true, get: function () { return anchor_witness_js_2.parseAnchorMemo; } });
1272
+ Object.defineProperty(exports, "leafHash", { enumerable: true, get: function () { return anchor_witness_js_2.leafHash; } });
1273
+ Object.defineProperty(exports, "ANCHOR_PROVES", { enumerable: true, get: function () { return anchor_witness_js_2.ANCHOR_PROVES; } });
1274
+ Object.defineProperty(exports, "ANCHOR_DOES_NOT_PROVE", { enumerable: true, get: function () { return anchor_witness_js_2.ANCHOR_DOES_NOT_PROVE; } });
1275
+ Object.defineProperty(exports, "SOLANA_GENESIS", { enumerable: true, get: function () { return anchor_witness_js_2.SOLANA_GENESIS; } });
1276
+ Object.defineProperty(exports, "BASE_MAINNET_CHAIN_ID", { enumerable: true, get: function () { return anchor_witness_js_2.BASE_MAINNET_CHAIN_ID; } });
1277
+ var canonical_preimage_js_2 = require("./canonical-preimage.js");
1278
+ Object.defineProperty(exports, "verifyCanonicalPreimageBytes", { enumerable: true, get: function () { return canonical_preimage_js_2.verifyCanonicalPreimageBytes; } });
1279
+ Object.defineProperty(exports, "CANONICAL_PAYLOAD_VERSION", { enumerable: true, get: function () { return canonical_preimage_js_2.CANONICAL_PAYLOAD_VERSION; } });
1280
+ var issuer_history_js_2 = require("./issuer-history.js");
1281
+ Object.defineProperty(exports, "readIssuerHistoryPin", { enumerable: true, get: function () { return issuer_history_js_2.readIssuerHistoryPin; } });
1282
+ Object.defineProperty(exports, "issuerHistoryDocumentHash", { enumerable: true, get: function () { return issuer_history_js_2.issuerHistoryDocumentHash; } });
1037
1283
  exports.default = {
1038
1284
  verifyBinding,
1039
1285
  verifyIssuerSignature,