@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/jcs.js ADDED
@@ -0,0 +1,64 @@
1
+ "use strict";
2
+ /**
3
+ * RFC 8785 JSON Canonicalization.
4
+ * Same rules as `jcsCanonicalize` in services/gateway/src/offer-receipt.js.
5
+ * Issuer-history entry hashes and the receipt canonical object use this form.
6
+ * Per-field receipt hashes keep the encoding they were signed with.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.jcsCanonicalize = jcsCanonicalize;
10
+ function jcsCanonicalize(value) {
11
+ return jcsValue(value);
12
+ }
13
+ function jcsValue(value) {
14
+ if (value === null || value === undefined)
15
+ return 'null';
16
+ const type = typeof value;
17
+ if (type === 'boolean')
18
+ return value ? 'true' : 'false';
19
+ if (type === 'number') {
20
+ if (!Number.isFinite(value))
21
+ throw new Error('Cannot canonicalize Infinity or NaN');
22
+ if (Object.is(value, -0))
23
+ return '0';
24
+ return String(value);
25
+ }
26
+ if (type === 'string')
27
+ return jcsString(value);
28
+ if (Array.isArray(value))
29
+ return `[${value.map(jcsValue).join(',')}]`;
30
+ if (type === 'object')
31
+ return jcsObject(value);
32
+ throw new Error(`Cannot canonicalize value of type ${type}`);
33
+ }
34
+ function jcsString(str) {
35
+ let result = '"';
36
+ for (let i = 0; i < str.length; i += 1) {
37
+ const char = str[i];
38
+ const code = str.charCodeAt(i);
39
+ if (code < 32) {
40
+ result += `\\u${code.toString(16).padStart(4, '0')}`;
41
+ }
42
+ else if (char === '"') {
43
+ result += '\\"';
44
+ }
45
+ else if (char === '\\') {
46
+ result += '\\\\';
47
+ }
48
+ else {
49
+ result += char;
50
+ }
51
+ }
52
+ return `${result}"`;
53
+ }
54
+ function jcsObject(obj) {
55
+ const keys = Object.keys(obj).sort((a, b) => (a < b ? -1 : a > b ? 1 : 0));
56
+ const pairs = [];
57
+ for (const key of keys) {
58
+ const value = obj[key];
59
+ if (value !== undefined)
60
+ pairs.push(`${jcsString(key)}:${jcsValue(value)}`);
61
+ }
62
+ return `{${pairs.join(',')}}`;
63
+ }
64
+ //# sourceMappingURL=jcs.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"jcs.js","sourceRoot":"","sources":["../src/jcs.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,49 @@
1
+ export interface PreimageLeaf {
2
+ preimage_utf8?: string;
3
+ preimage_hex?: string;
4
+ }
5
+ export interface PreimageEntry {
6
+ field?: string;
7
+ alg?: string;
8
+ recomputable?: boolean;
9
+ preimage_utf8?: string;
10
+ preimage_hex?: string;
11
+ hash?: string;
12
+ merkle?: string;
13
+ leaves?: PreimageLeaf[];
14
+ url?: string;
15
+ }
16
+ export interface PreimageBlock {
17
+ schema?: string;
18
+ fields?: Record<string, PreimageEntry>;
19
+ not_recomputable?: {
20
+ field?: string;
21
+ hash?: string | null;
22
+ reason?: string;
23
+ }[];
24
+ links?: {
25
+ preimage?: string;
26
+ };
27
+ }
28
+ export interface PreimageCheck {
29
+ checked: boolean;
30
+ ok: boolean;
31
+ errors: string[];
32
+ fields: {
33
+ field: string;
34
+ ok: boolean;
35
+ reason?: string;
36
+ }[];
37
+ }
38
+ /**
39
+ * Fields a stranger is expected to recompute when they are present.
40
+ * Coverage and tree_head_hash count only when the issuer published a preimage.
41
+ * Output, HMAC, and book-row universe hashes do not.
42
+ */
43
+ export declare function requiredPreimageFields(receipt: Record<string, unknown>): string[];
44
+ export declare function verifyPublishedPreimages(receipt: Record<string, unknown>, { requirePreimages, fetchImpl, trustedHosts, }?: {
45
+ requirePreimages?: boolean;
46
+ fetchImpl?: typeof fetch;
47
+ trustedHosts?: readonly string[];
48
+ }): Promise<PreimageCheck>;
49
+ //# sourceMappingURL=preimage.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"preimage.d.ts","sourceRoot":"","sources":["../src/preimage.ts"],"names":[],"mappings":"AAQA,MAAM,WAAW,YAAY;IAC3B,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,YAAY,EAAE,CAAC;IACxB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;IACvC,gBAAgB,CAAC,EAAE;QAAE,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,IAAI,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;IAC/E,KAAK,CAAC,EAAE;QAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;CAC/B;AAED,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,EAAE,EAAE,OAAO,CAAC;QAAC,MAAM,CAAC,EAAE,MAAM,CAAA;KAAE,EAAE,CAAC;CAC3D;AAkGD;;;;GAIG;AACH,wBAAgB,sBAAsB,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,EAAE,CAUjF;AAmBD,wBAAsB,wBAAwB,CAC5C,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAChC,EACE,gBAAwB,EACxB,SAA4B,EAC5B,YAAkC,GACnC,GAAE;IACD,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,SAAS,CAAC,EAAE,OAAO,KAAK,CAAC;IACzB,YAAY,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;CAC7B,GACL,OAAO,CAAC,aAAa,CAAC,CAoDxB"}
@@ -0,0 +1,203 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.requiredPreimageFields = requiredPreimageFields;
4
+ exports.verifyPublishedPreimages = verifyPublishedPreimages;
5
+ /**
6
+ * Recompute published receipt preimages.
7
+ * A missing or mismatched preimage fails closed when the caller requires it,
8
+ * and whenever a `preimages` block is present.
9
+ */
10
+ const node_crypto_1 = require("node:crypto");
11
+ const ethers_1 = require("ethers");
12
+ const ALWAYS_REQUIRED = [
13
+ 'book_chain.row_hash',
14
+ 'book_row.row_hash',
15
+ 'inclusion.leaf',
16
+ 'binding.expected_commitment',
17
+ 'job_spec_hash',
18
+ 'response_hash',
19
+ ];
20
+ function sha256(buf) {
21
+ return (0, node_crypto_1.createHash)('sha256').update(buf).digest();
22
+ }
23
+ function bytesOf(entry) {
24
+ if (!entry)
25
+ return null;
26
+ if (typeof entry.preimage_hex === 'string' && entry.preimage_hex !== '') {
27
+ const hex = entry.preimage_hex.replace(/^0x/, '');
28
+ if (!/^[0-9a-fA-F]*$/.test(hex) || hex.length % 2)
29
+ return null;
30
+ return Buffer.from(hex, 'hex');
31
+ }
32
+ if (typeof entry.preimage_utf8 === 'string')
33
+ return Buffer.from(entry.preimage_utf8, 'utf8');
34
+ return null;
35
+ }
36
+ function leafInput(leaf) {
37
+ if (typeof leaf.preimage_hex === 'string' && leaf.preimage_hex !== '') {
38
+ return bytesOf(leaf);
39
+ }
40
+ if (typeof leaf.preimage_utf8 === 'string') {
41
+ return Buffer.concat([Buffer.from([0x00]), Buffer.from(leaf.preimage_utf8, 'utf8')]);
42
+ }
43
+ return null;
44
+ }
45
+ function merkleRoot(leaves) {
46
+ const level = [];
47
+ for (const leaf of leaves) {
48
+ const input = leafInput(leaf);
49
+ if (!input)
50
+ return null;
51
+ level.push(sha256(input));
52
+ }
53
+ if (!level.length)
54
+ return null;
55
+ let nodes = level;
56
+ while (nodes.length > 1) {
57
+ const next = [];
58
+ for (let i = 0; i < nodes.length; i += 2) {
59
+ if (i + 1 === nodes.length)
60
+ next.push(nodes[i]);
61
+ else
62
+ next.push(sha256(Buffer.concat([Buffer.from([0x01]), nodes[i], nodes[i + 1]])));
63
+ }
64
+ nodes = next;
65
+ }
66
+ return nodes[0].toString('hex');
67
+ }
68
+ function digestHex(entry) {
69
+ if (entry.merkle === 'rfc6962' && Array.isArray(entry.leaves)) {
70
+ return merkleRoot(entry.leaves);
71
+ }
72
+ const bytes = bytesOf(entry);
73
+ if (!bytes)
74
+ return null;
75
+ if (entry.alg === 'keccak256')
76
+ return (0, ethers_1.keccak256)(bytes).toLowerCase();
77
+ if (entry.alg === 'sha256') {
78
+ const hex = sha256(bytes).toString('hex');
79
+ const published = String(entry.hash || '');
80
+ if (published.startsWith('0x') || published.startsWith('sha256:'))
81
+ return `0x${hex}`;
82
+ return hex;
83
+ }
84
+ return null;
85
+ }
86
+ function sameHash(left, right) {
87
+ const norm = (value) => value.trim().toLowerCase().replace(/^sha256=/, '');
88
+ return norm(left) === norm(right);
89
+ }
90
+ function readPath(receipt, field) {
91
+ if (field === 'job_spec_hash') {
92
+ return receipt.job_spec_hash
93
+ ?? receipt.board?.job_spec_hash
94
+ ?? receipt.a2a_escrow?.job_spec_hash
95
+ ?? null;
96
+ }
97
+ return field.split('.').reduce((obj, key) => {
98
+ if (obj == null || typeof obj !== 'object')
99
+ return undefined;
100
+ return obj[key];
101
+ }, receipt);
102
+ }
103
+ function hasHash(value) {
104
+ return value != null && value !== '';
105
+ }
106
+ function withheld(block, field) {
107
+ return (block?.not_recomputable || []).some((row) => row.field === field);
108
+ }
109
+ /**
110
+ * Fields a stranger is expected to recompute when they are present.
111
+ * Coverage and tree_head_hash count only when the issuer published a preimage.
112
+ * Output, HMAC, and book-row universe hashes do not.
113
+ */
114
+ function requiredPreimageFields(receipt) {
115
+ const block = (receipt.preimages || null);
116
+ const fields = [];
117
+ for (const field of ALWAYS_REQUIRED) {
118
+ if (hasHash(readPath(receipt, field)) && !withheld(block, field))
119
+ fields.push(field);
120
+ }
121
+ for (const field of ['tree_head_hash', 'coverage.universe_hash', 'coverage.enumerated_hash']) {
122
+ if (block?.fields?.[field])
123
+ fields.push(field);
124
+ }
125
+ return [...new Set(fields)];
126
+ }
127
+ async function loadRemote(entry, fetchImpl, hosts) {
128
+ if (!entry.url)
129
+ return null;
130
+ let url;
131
+ try {
132
+ url = new URL(entry.url);
133
+ }
134
+ catch {
135
+ return null;
136
+ }
137
+ if (url.protocol !== 'https:' || !hosts.some((host) => host.toLowerCase() === url.hostname.toLowerCase())) {
138
+ return null;
139
+ }
140
+ const res = await fetchImpl(entry.url);
141
+ if (!res.ok)
142
+ return null;
143
+ const body = await res.json();
144
+ return body && typeof body === 'object' ? { ...entry, ...body } : null;
145
+ }
146
+ async function verifyPublishedPreimages(receipt, { requirePreimages = false, fetchImpl = globalThis.fetch, trustedHosts = ['api.chit402.com'], } = {}) {
147
+ const block = (receipt.preimages || null);
148
+ const required = requiredPreimageFields(receipt);
149
+ if (!block && !requirePreimages) {
150
+ return { checked: false, ok: true, errors: [], fields: [] };
151
+ }
152
+ if (!block && required.length === 0) {
153
+ return { checked: true, ok: true, errors: [], fields: [] };
154
+ }
155
+ const errors = [];
156
+ const fields = [];
157
+ const published = block?.fields || {};
158
+ const targets = new Set([...required, ...Object.keys(published)]);
159
+ for (const field of targets) {
160
+ if (withheld(block, field) && !published[field])
161
+ continue;
162
+ let entry = published[field];
163
+ if (!entry) {
164
+ const message = `preimage missing for ${field}`;
165
+ errors.push(message);
166
+ fields.push({ field, ok: false, reason: 'preimage_missing' });
167
+ continue;
168
+ }
169
+ if (entry.recomputable === false)
170
+ continue;
171
+ if (!bytesOf(entry) && !(entry.leaves && entry.leaves.length) && entry.url && fetchImpl) {
172
+ try {
173
+ const remote = await loadRemote(entry, fetchImpl, trustedHosts);
174
+ if (remote)
175
+ entry = remote;
176
+ }
177
+ catch {
178
+ /* fall through to missing */
179
+ }
180
+ }
181
+ const digest = digestHex(entry);
182
+ const expected = entry.hash != null ? String(entry.hash) : '';
183
+ const onReceipt = readPath(receipt, field);
184
+ if (digest == null) {
185
+ errors.push(`preimage missing for ${field}`);
186
+ fields.push({ field, ok: false, reason: 'preimage_missing' });
187
+ continue;
188
+ }
189
+ if (!sameHash(digest, expected)) {
190
+ errors.push(`preimage mismatch for ${field}: hash does not match the published bytes`);
191
+ fields.push({ field, ok: false, reason: 'preimage_mismatch' });
192
+ continue;
193
+ }
194
+ if (hasHash(onReceipt) && !sameHash(digest, String(onReceipt))) {
195
+ errors.push(`preimage mismatch for ${field}: recomputed hash does not match the receipt`);
196
+ fields.push({ field, ok: false, reason: 'preimage_mismatch' });
197
+ continue;
198
+ }
199
+ fields.push({ field, ok: true });
200
+ }
201
+ return { checked: true, ok: errors.length === 0, errors, fields };
202
+ }
203
+ //# sourceMappingURL=preimage.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"preimage.js","sourceRoot":"","sources":["../src/preimage.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,234 @@
1
+ /**
2
+ * Unsigned receipt-lane decision beside book_seq.
3
+ *
4
+ * Design by Turbo on 1F916 (post 6579, comments 88201 and 88403):
5
+ * freeze a receipt-lane row only when seq is present, settled_by is
6
+ * `receipt`, the anchored tree head changed after that row was bound, and
7
+ * the row is not settled. anchor_changed_since_binding alone does not freeze.
8
+ *
9
+ * Comment 88596 freezes that ordering — seq + settled_by + (anchor_changed
10
+ * AND not settled) — and states the boundary: complete over registry marks,
11
+ * blind to payments the registry never joined. A binding past expiry with
12
+ * settled_by, receipt_id, observed_tx_hash, and observed_transfer_id all
13
+ * null is unverifiable_from_registry, not unpaid.
14
+ *
15
+ * These fields are derived. They are not inside the payment JWS and not
16
+ * inside the signed book_seq claims. payload_version is unchanged.
17
+ *
18
+ * Keep this rule in lockstep with services/gateway/src/receipt-lane.js.
19
+ */
20
+ export declare const RECEIPT_LANE_SCHEMA = "chit402.receipt_lane.v1";
21
+ export declare const RECEIPT_LANE_RULE: string;
22
+ /** Frozen partition order. `settled_by` here is the receipt-lane conjunct (value `receipt`). */
23
+ export declare const RECEIPT_LANE_ORDERING = "seq + settled_by + (anchor_changed AND not settled)";
24
+ /** The ordering reads registry marks only. A transfer the registry never joined is outside it. */
25
+ export declare const RECEIPT_LANE_BOUNDARY = "complete over registry marks, blind to payments the registry never joined";
26
+ /**
27
+ * Base mainnet USDC. Same contract as USDC_ADDRESSES.base in
28
+ * services/gateway/src/foreign-x402-ingest.js. The hint does not call RPC.
29
+ */
30
+ export declare const BASE_USDC_ADDRESS = "0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913";
31
+ export type SettledBy = 'observed_transfer' | 'receipt' | null;
32
+ export type RegistryClassification = 'receipt' | 'observed_transfer' | 'anchor_changed_unsettled' | 'unsettled' | 'unverifiable_from_registry';
33
+ export interface LocalCheckHint {
34
+ method: 'base_usdc_transfer';
35
+ chain_id: 8453;
36
+ token: string;
37
+ payee: string;
38
+ amount_atomic: string;
39
+ claims_paid: false;
40
+ }
41
+ export interface AnchorIdentity {
42
+ root: string | null;
43
+ tree_size: number | null;
44
+ anchor_tx: string | null;
45
+ solana_signature: string | null;
46
+ }
47
+ export interface ReceiptLane {
48
+ schema: typeof RECEIPT_LANE_SCHEMA;
49
+ signed: false;
50
+ book_seq: number | null;
51
+ settled_by: SettledBy;
52
+ settled: boolean | null;
53
+ anchor_at_binding: AnchorIdentity | null;
54
+ anchor_current: AnchorIdentity | null;
55
+ anchor_changed_since_binding: boolean | null;
56
+ freeze: boolean;
57
+ reason: 'unsettled_anchor_changed' | null;
58
+ rule: string;
59
+ ordering: typeof RECEIPT_LANE_ORDERING;
60
+ boundary: typeof RECEIPT_LANE_BOUNDARY;
61
+ classification: RegistryClassification;
62
+ local_check: LocalCheckHint | null;
63
+ }
64
+ export interface LanePayer {
65
+ checked?: boolean;
66
+ valid?: boolean;
67
+ }
68
+ export interface LaneEntry {
69
+ book_seq?: number | null;
70
+ seq?: number | null;
71
+ book_chain?: {
72
+ seq?: number | null;
73
+ } | null;
74
+ payment?: {
75
+ ref?: string | null;
76
+ rail?: string | null;
77
+ collected?: boolean | null;
78
+ } | null;
79
+ payment_ref?: string | null;
80
+ rail?: string | null;
81
+ collected?: boolean | null;
82
+ evidence?: string | null;
83
+ source?: string | null;
84
+ foreign_x402?: boolean;
85
+ arrival_status?: string | null;
86
+ ingress_receipt?: {
87
+ ref?: string | null;
88
+ } | null;
89
+ settlement_status?: string | null;
90
+ usage_settled?: {
91
+ settlement_status?: string | null;
92
+ } | null;
93
+ expiry?: number | string | null;
94
+ receipt_id?: string | number | null;
95
+ observed_tx_hash?: string | null;
96
+ observed_transfer_id?: string | number | null;
97
+ settled_by?: SettledBy;
98
+ anchor_changed_since_binding?: boolean | null;
99
+ chain_id?: number | string | null;
100
+ chainId?: number | string | null;
101
+ token?: string | null;
102
+ asset?: string | null;
103
+ payout_address?: string | null;
104
+ address?: string | null;
105
+ payee?: string | null;
106
+ amount_atomic?: string | number | null;
107
+ docket_id?: string | null;
108
+ }
109
+ export interface ReceiptTreeHead {
110
+ root?: string | null;
111
+ tree_size?: number | null;
112
+ anchor_tx?: string | null;
113
+ anchor?: {
114
+ tx?: string | null;
115
+ status?: string | null;
116
+ } | null;
117
+ anchors?: {
118
+ base?: {
119
+ tx?: string | null;
120
+ status?: string | null;
121
+ } | null;
122
+ solana?: {
123
+ signature?: string | null;
124
+ status?: string | null;
125
+ } | null;
126
+ } | null;
127
+ }
128
+ export declare function normalizeRoot(root: string | null | undefined): string | null;
129
+ export declare function anchorIdentity(head: ReceiptTreeHead | null | undefined): AnchorIdentity | null;
130
+ export declare function anchorChangedSinceBinding(heads: ReceiptTreeHead[] | null | undefined, leafIndex: number | null | undefined): {
131
+ changed: boolean | null;
132
+ at: AnchorIdentity | null;
133
+ current: AnchorIdentity | null;
134
+ };
135
+ /** A 1F916 payout binding carries expiry plus a registry mark key. A book row does not. */
136
+ export declare function isPayoutBinding(input: LaneEntry | null | undefined): boolean;
137
+ /** Unix seconds, unix ms, or an ISO timestamp. Null when the field is absent or not a time. */
138
+ export declare function expiryMillis(expiry: number | string | null | undefined): number | null;
139
+ export declare function isPastExpiry(expiry: number | string | null | undefined, nowMs?: number): boolean;
140
+ /**
141
+ * Partition a row. Expired and unmarked is unverifiable_from_registry, ahead
142
+ * of the clean-unsettled and anchor-changed buckets, and behind a joined
143
+ * settled_by (receipt or observed_transfer).
144
+ */
145
+ export declare function classifyReceiptLane({ entry, settled_by, settled, anchor_changed_since_binding, now, }?: {
146
+ entry?: LaneEntry | null;
147
+ settled_by?: SettledBy;
148
+ settled?: boolean | null;
149
+ anchor_changed_since_binding?: boolean | null;
150
+ now?: number;
151
+ }): RegistryClassification;
152
+ /**
153
+ * Payee and amount a stranger can feed to the existing per-tx Base USDC check.
154
+ * Null unless this row is Base mainnet USDC. Does not claim the transfer happened
155
+ * and does not read the chain.
156
+ */
157
+ export declare function baseUsdcLocalCheckHint(entry: LaneEntry | null | undefined): LocalCheckHint | null;
158
+ export declare function deriveSettledBy(input: LaneEntry | null | undefined, { payer, issuerAssertsSettlement }?: {
159
+ payer?: LanePayer | null;
160
+ issuerAssertsSettlement?: boolean | null;
161
+ }): SettledBy;
162
+ export declare function deriveSettled(input: LaneEntry | null | undefined, { payer }?: {
163
+ payer?: LanePayer | null;
164
+ }): boolean | null;
165
+ export declare function bookSeqOf(input: LaneEntry | null | undefined): number | null;
166
+ export declare function receiptLaneDecision(input: {
167
+ book_seq: number | null;
168
+ settled_by: SettledBy;
169
+ settled: boolean | null;
170
+ anchor_changed_since_binding: boolean | null;
171
+ }): {
172
+ freeze: boolean;
173
+ reason: 'unsettled_anchor_changed' | null;
174
+ };
175
+ export declare function buildReceiptLane({ entry, payer, leafIndex, heads, issuerAssertsSettlement, anchorAtBinding, anchorCurrent, now, }?: {
176
+ entry?: LaneEntry | null;
177
+ payer?: LanePayer | null;
178
+ leafIndex?: number | null;
179
+ heads?: ReceiptTreeHead[] | null;
180
+ issuerAssertsSettlement?: boolean | null;
181
+ anchorAtBinding?: AnchorIdentity | null;
182
+ anchorCurrent?: AnchorIdentity | null;
183
+ now?: number;
184
+ }): ReceiptLane;
185
+ interface SignedClaims {
186
+ payment?: {
187
+ ref?: string | null;
188
+ rail?: string | null;
189
+ collected?: boolean | null;
190
+ } | null;
191
+ settlement?: {
192
+ kind?: string | null;
193
+ } | null;
194
+ }
195
+ interface ReceiptLaneSource {
196
+ book_seq?: number | null;
197
+ book_chain?: {
198
+ seq?: number | null;
199
+ } | null;
200
+ tree_head?: ReceiptTreeHead | null;
201
+ head?: ReceiptTreeHead | null;
202
+ expiry?: number | string | null;
203
+ receipt_id?: string | number | null;
204
+ observed_tx_hash?: string | null;
205
+ observed_transfer_id?: string | number | null;
206
+ settled_by?: SettledBy;
207
+ anchor_changed_since_binding?: boolean | null;
208
+ chain_id?: number | string | null;
209
+ token?: string | null;
210
+ payout_address?: string | null;
211
+ address?: string | null;
212
+ amount_atomic?: string | number | null;
213
+ docket_id?: string | null;
214
+ receipt_lane?: {
215
+ anchor_at_binding?: AnchorIdentity | null;
216
+ anchor_current?: AnchorIdentity | null;
217
+ freeze?: boolean;
218
+ anchor_changed_since_binding?: boolean | null;
219
+ } | null;
220
+ }
221
+ /**
222
+ * Stranger view. Uses verified signed claims and an on-chain payer check.
223
+ * Ignores a stamped freeze bit. Unsigned payment.ref is not an assertion.
224
+ */
225
+ export declare function receiptLaneFromVerification({ receipt, claims, issuerValid, payer, head, now, }: {
226
+ receipt: ReceiptLaneSource | null | undefined;
227
+ claims?: SignedClaims | null;
228
+ issuerValid?: boolean;
229
+ payer?: LanePayer | null;
230
+ head?: ReceiptTreeHead | null;
231
+ now?: number;
232
+ }): ReceiptLane;
233
+ export {};
234
+ //# sourceMappingURL=receipt-lane.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"receipt-lane.d.ts","sourceRoot":"","sources":["../src/receipt-lane.ts"],"names":[],"mappings":"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"}