chit402-verify 0.3.5 → 0.4.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/LICENSE +1 -1
- package/README.md +205 -17
- package/dist/anchor-trust.d.ts +144 -0
- package/dist/anchor-trust.d.ts.map +1 -0
- package/dist/anchor-trust.js +441 -0
- package/dist/anchor-trust.js.map +1 -0
- package/dist/anchor-witness.d.ts +265 -0
- package/dist/anchor-witness.d.ts.map +1 -0
- package/dist/anchor-witness.js +833 -0
- package/dist/anchor-witness.js.map +1 -0
- package/dist/base-payer.d.ts +65 -0
- package/dist/base-payer.d.ts.map +1 -0
- package/dist/base-payer.js +222 -0
- package/dist/base-payer.js.map +1 -0
- package/dist/binding.d.ts +52 -0
- package/dist/binding.d.ts.map +1 -0
- package/dist/binding.js +80 -0
- package/dist/binding.js.map +1 -0
- package/dist/canonical-preimage.d.ts +9 -0
- package/dist/canonical-preimage.d.ts.map +1 -0
- package/dist/canonical-preimage.js +25 -0
- package/dist/canonical-preimage.js.map +1 -0
- package/dist/carry-forward.d.ts +79 -0
- package/dist/carry-forward.d.ts.map +1 -0
- package/dist/carry-forward.js +184 -0
- package/dist/carry-forward.js.map +1 -0
- package/dist/cli.d.ts +18 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +2090 -0
- package/dist/cli.js.map +1 -0
- package/dist/epoch.d.ts +143 -0
- package/dist/epoch.d.ts.map +1 -0
- package/dist/epoch.js +352 -0
- package/dist/epoch.js.map +1 -0
- package/dist/head-binding.d.ts +24 -0
- package/dist/head-binding.d.ts.map +1 -0
- package/dist/head-binding.js +61 -0
- package/dist/head-binding.js.map +1 -0
- package/dist/index.d.ts +585 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +1648 -0
- package/dist/index.js.map +1 -0
- package/dist/issuer-history.d.ts +151 -0
- package/dist/issuer-history.d.ts.map +1 -0
- package/dist/issuer-history.js +595 -0
- package/dist/issuer-history.js.map +1 -0
- package/dist/issuer-pin.d.ts +126 -0
- package/dist/issuer-pin.d.ts.map +1 -0
- package/dist/issuer-pin.js +567 -0
- package/dist/issuer-pin.js.map +1 -0
- package/dist/jcs.d.ts +8 -0
- package/dist/jcs.d.ts.map +1 -0
- package/dist/jcs.js +64 -0
- package/dist/jcs.js.map +1 -0
- package/dist/jws.d.ts +46 -0
- package/dist/jws.d.ts.map +1 -0
- package/dist/jws.js +129 -0
- package/dist/jws.js.map +1 -0
- package/dist/payer.d.ts +65 -0
- package/dist/payer.d.ts.map +1 -0
- package/dist/payer.js +148 -0
- package/dist/payer.js.map +1 -0
- package/dist/preimage.d.ts +78 -0
- package/dist/preimage.d.ts.map +1 -0
- package/dist/preimage.js +363 -0
- package/dist/preimage.js.map +1 -0
- package/dist/receipt-lane.d.ts +235 -0
- package/dist/receipt-lane.d.ts.map +1 -0
- package/dist/receipt-lane.js +446 -0
- package/dist/receipt-lane.js.map +1 -0
- package/dist/receipt-version.d.ts +98 -0
- package/dist/receipt-version.d.ts.map +1 -0
- package/dist/receipt-version.js +364 -0
- package/dist/receipt-version.js.map +1 -0
- package/dist/refusal.d.ts +93 -0
- package/dist/refusal.d.ts.map +1 -0
- package/dist/refusal.js +249 -0
- package/dist/refusal.js.map +1 -0
- package/dist/request-binding.d.ts +7 -0
- package/dist/request-binding.d.ts.map +1 -0
- package/dist/request-binding.js +26 -0
- package/dist/request-binding.js.map +1 -0
- package/dist/row-hash.d.ts +22 -0
- package/dist/row-hash.d.ts.map +1 -0
- package/dist/row-hash.js +26 -0
- package/dist/row-hash.js.map +1 -0
- package/dist/shell.d.ts +65 -0
- package/dist/shell.d.ts.map +1 -0
- package/dist/shell.js +268 -0
- package/dist/shell.js.map +1 -0
- package/dist/solana-payer.d.ts +99 -0
- package/dist/solana-payer.d.ts.map +1 -0
- package/dist/solana-payer.js +258 -0
- package/dist/solana-payer.js.map +1 -0
- package/dist/v11-receipt.d.ts +23 -0
- package/dist/v11-receipt.d.ts.map +1 -0
- package/dist/v11-receipt.js +368 -0
- package/dist/v11-receipt.js.map +1 -0
- package/dist/verdict.d.ts +94 -0
- package/dist/verdict.d.ts.map +1 -0
- package/dist/verdict.js +381 -0
- package/dist/verdict.js.map +1 -0
- package/issuer-history.snapshot.json +1 -0
- package/package.json +32 -22
- package/cli.js +0 -42
- package/index.cjs +0 -8
- package/index.d.ts +0 -5
- package/index.js +0 -7
|
@@ -0,0 +1,446 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Unsigned receipt-lane decision beside book_seq.
|
|
4
|
+
*
|
|
5
|
+
* Design by Turbo on 1F916 (post 6579, comments 88201 and 88403):
|
|
6
|
+
* freeze a receipt-lane row only when seq is present, settled_by is
|
|
7
|
+
* `receipt`, the anchored tree head changed after that row was bound, and
|
|
8
|
+
* the row is not settled. anchor_changed_since_binding alone does not freeze.
|
|
9
|
+
*
|
|
10
|
+
* Comment 88596 freezes that ordering — seq + settled_by + (anchor_changed
|
|
11
|
+
* AND not settled) — and states the boundary: complete over registry marks,
|
|
12
|
+
* blind to payments the registry never joined. A binding past expiry with
|
|
13
|
+
* settled_by, receipt_id, observed_tx_hash, and observed_transfer_id all
|
|
14
|
+
* null is unverifiable_from_registry, not unpaid.
|
|
15
|
+
*
|
|
16
|
+
* These fields are derived. They are not inside the payment JWS and not
|
|
17
|
+
* inside the signed book_seq claims. payload_version is unchanged.
|
|
18
|
+
*
|
|
19
|
+
* Keep this rule in lockstep with services/gateway/src/receipt-lane.js.
|
|
20
|
+
*/
|
|
21
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
22
|
+
exports.BASE_USDC_ADDRESS = exports.RECEIPT_LANE_BOUNDARY = exports.RECEIPT_LANE_ORDERING = exports.RECEIPT_LANE_RULE = exports.RECEIPT_LANE_SCHEMA = void 0;
|
|
23
|
+
exports.normalizeRoot = normalizeRoot;
|
|
24
|
+
exports.anchorIdentity = anchorIdentity;
|
|
25
|
+
exports.anchorChangedSinceBinding = anchorChangedSinceBinding;
|
|
26
|
+
exports.isPayoutBinding = isPayoutBinding;
|
|
27
|
+
exports.expiryMillis = expiryMillis;
|
|
28
|
+
exports.isPastExpiry = isPastExpiry;
|
|
29
|
+
exports.classifyReceiptLane = classifyReceiptLane;
|
|
30
|
+
exports.baseUsdcLocalCheckHint = baseUsdcLocalCheckHint;
|
|
31
|
+
exports.deriveSettledBy = deriveSettledBy;
|
|
32
|
+
exports.deriveSettled = deriveSettled;
|
|
33
|
+
exports.bookSeqOf = bookSeqOf;
|
|
34
|
+
exports.receiptLaneDecision = receiptLaneDecision;
|
|
35
|
+
exports.buildReceiptLane = buildReceiptLane;
|
|
36
|
+
exports.receiptLaneFromVerification = receiptLaneFromVerification;
|
|
37
|
+
exports.RECEIPT_LANE_SCHEMA = 'chit402.receipt_lane.v1';
|
|
38
|
+
exports.RECEIPT_LANE_RULE = 'Freeze when book_seq is present, settled_by is receipt, anchor_changed_since_binding is true, and settled is false. '
|
|
39
|
+
+ 'anchor_changed_since_binding alone does not freeze. observed_transfer is outside the receipt lane.';
|
|
40
|
+
/** Frozen partition order. `settled_by` here is the receipt-lane conjunct (value `receipt`). */
|
|
41
|
+
exports.RECEIPT_LANE_ORDERING = 'seq + settled_by + (anchor_changed AND not settled)';
|
|
42
|
+
/** The ordering reads registry marks only. A transfer the registry never joined is outside it. */
|
|
43
|
+
exports.RECEIPT_LANE_BOUNDARY = 'complete over registry marks, blind to payments the registry never joined';
|
|
44
|
+
/**
|
|
45
|
+
* Base mainnet USDC. Same contract as USDC_ADDRESSES.base in
|
|
46
|
+
* services/gateway/src/foreign-x402-ingest.js. The hint does not call RPC.
|
|
47
|
+
*/
|
|
48
|
+
exports.BASE_USDC_ADDRESS = '0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913';
|
|
49
|
+
const BASE_CHAIN_ID = 8453;
|
|
50
|
+
const SETTLED_STATUS = new Set(['settled', 'idempotent_replay']);
|
|
51
|
+
const SETTLED_EVIDENCE = new Set([
|
|
52
|
+
'collected',
|
|
53
|
+
'foreign_ingest',
|
|
54
|
+
'refund_owed',
|
|
55
|
+
'board_close',
|
|
56
|
+
]);
|
|
57
|
+
const UNSETTLED_EVIDENCE = new Set([
|
|
58
|
+
'policy_blocked',
|
|
59
|
+
'UNVERIFIED',
|
|
60
|
+
'ARRIVAL_UNVERIFIED',
|
|
61
|
+
'inflow_claimed',
|
|
62
|
+
'inflow_correction',
|
|
63
|
+
'RECORDED_BY_SETTLE',
|
|
64
|
+
'openrouter_reported',
|
|
65
|
+
'a2a_escrow',
|
|
66
|
+
]);
|
|
67
|
+
const RECEIPT_ASSERTION_EVIDENCE = new Set([
|
|
68
|
+
'collected',
|
|
69
|
+
'RECORDED_BY_SETTLE',
|
|
70
|
+
'refund_owed',
|
|
71
|
+
'board_stamp',
|
|
72
|
+
'board_close',
|
|
73
|
+
]);
|
|
74
|
+
function normalizeRoot(root) {
|
|
75
|
+
if (root == null || root === '')
|
|
76
|
+
return null;
|
|
77
|
+
const hex = String(root).replace(/^0x/i, '').toLowerCase();
|
|
78
|
+
return /^[0-9a-f]{64}$/.test(hex) ? hex : String(root);
|
|
79
|
+
}
|
|
80
|
+
function anchorIdentity(head) {
|
|
81
|
+
if (!head || typeof head !== 'object')
|
|
82
|
+
return null;
|
|
83
|
+
const base = head.anchors?.base || head.anchor || null;
|
|
84
|
+
const sol = head.anchors?.solana || null;
|
|
85
|
+
const baseAnchored = !base || base.status == null || base.status === 'anchored';
|
|
86
|
+
const solAnchored = Boolean(sol && (sol.status == null || sol.status === 'anchored'));
|
|
87
|
+
const tx = baseAnchored ? (base?.tx || head.anchor_tx || null) : null;
|
|
88
|
+
const sig = solAnchored ? (sol?.signature || null) : null;
|
|
89
|
+
const root = head.root != null && head.root !== '' ? normalizeRoot(head.root) : null;
|
|
90
|
+
const size = Number(head.tree_size);
|
|
91
|
+
const treeSize = Number.isInteger(size) ? size : null;
|
|
92
|
+
if (root == null && !tx && !sig && treeSize == null)
|
|
93
|
+
return null;
|
|
94
|
+
return {
|
|
95
|
+
root,
|
|
96
|
+
tree_size: treeSize,
|
|
97
|
+
anchor_tx: tx || null,
|
|
98
|
+
solana_signature: sig || null,
|
|
99
|
+
};
|
|
100
|
+
}
|
|
101
|
+
function sameIdentity(a, b) {
|
|
102
|
+
if (!a || !b)
|
|
103
|
+
return null;
|
|
104
|
+
if (a.root == null || b.root == null)
|
|
105
|
+
return null;
|
|
106
|
+
return a.root === b.root
|
|
107
|
+
&& (a.anchor_tx || null) === (b.anchor_tx || null)
|
|
108
|
+
&& (a.solana_signature || null) === (b.solana_signature || null);
|
|
109
|
+
}
|
|
110
|
+
function anchorChangedSinceBinding(heads, leafIndex) {
|
|
111
|
+
if (!Array.isArray(heads) || heads.length === 0) {
|
|
112
|
+
return { changed: null, at: null, current: null };
|
|
113
|
+
}
|
|
114
|
+
const current = anchorIdentity(heads[heads.length - 1]);
|
|
115
|
+
const index = Number(leafIndex);
|
|
116
|
+
if (!Number.isInteger(index) || index < 0) {
|
|
117
|
+
return { changed: null, at: null, current };
|
|
118
|
+
}
|
|
119
|
+
let binding = null;
|
|
120
|
+
for (const head of heads) {
|
|
121
|
+
const size = Number(head?.tree_size);
|
|
122
|
+
if (Number.isInteger(size) && size > index) {
|
|
123
|
+
binding = head;
|
|
124
|
+
break;
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
if (!binding)
|
|
128
|
+
return { changed: null, at: null, current };
|
|
129
|
+
const at = anchorIdentity(binding);
|
|
130
|
+
const same = sameIdentity(at, current);
|
|
131
|
+
return { changed: same == null ? null : same === false, at, current };
|
|
132
|
+
}
|
|
133
|
+
function paymentRefOf(input) {
|
|
134
|
+
const ref = input?.payment?.ref ?? input?.payment_ref ?? null;
|
|
135
|
+
if (ref == null)
|
|
136
|
+
return null;
|
|
137
|
+
const text = String(ref).trim();
|
|
138
|
+
return text || null;
|
|
139
|
+
}
|
|
140
|
+
function hasIngress(input) {
|
|
141
|
+
if (input.arrival_status === 'confirmed')
|
|
142
|
+
return true;
|
|
143
|
+
const ingress = input.ingress_receipt;
|
|
144
|
+
if (!ingress || typeof ingress !== 'object')
|
|
145
|
+
return false;
|
|
146
|
+
const ref = ingress.ref != null ? String(ingress.ref).trim() : '';
|
|
147
|
+
return ref.length > 0;
|
|
148
|
+
}
|
|
149
|
+
function isReported(input) {
|
|
150
|
+
if (input.evidence === 'openrouter_reported')
|
|
151
|
+
return true;
|
|
152
|
+
if (input.source === 'openrouter_broadcast')
|
|
153
|
+
return true;
|
|
154
|
+
const rail = String(input.rail || input.payment?.rail || '').toLowerCase();
|
|
155
|
+
return rail === 'reported';
|
|
156
|
+
}
|
|
157
|
+
const PAYOUT_BINDING_KEYS = [
|
|
158
|
+
'payout_address',
|
|
159
|
+
'address',
|
|
160
|
+
'docket_id',
|
|
161
|
+
'receipt_id',
|
|
162
|
+
'observed_tx_hash',
|
|
163
|
+
'observed_transfer_id',
|
|
164
|
+
'settled_by',
|
|
165
|
+
];
|
|
166
|
+
/** A 1F916 payout binding carries expiry plus a registry mark key. A book row does not. */
|
|
167
|
+
function isPayoutBinding(input) {
|
|
168
|
+
if (!input || typeof input !== 'object')
|
|
169
|
+
return false;
|
|
170
|
+
if (!Object.prototype.hasOwnProperty.call(input, 'expiry'))
|
|
171
|
+
return false;
|
|
172
|
+
return PAYOUT_BINDING_KEYS.some((key) => Object.prototype.hasOwnProperty.call(input, key));
|
|
173
|
+
}
|
|
174
|
+
function explicitSettledBy(input) {
|
|
175
|
+
const value = input?.settled_by;
|
|
176
|
+
if (value === 'observed_transfer' || value === 'receipt')
|
|
177
|
+
return value;
|
|
178
|
+
return null;
|
|
179
|
+
}
|
|
180
|
+
function blankMark(value) {
|
|
181
|
+
return value == null || String(value).trim() === '';
|
|
182
|
+
}
|
|
183
|
+
/** Unix seconds, unix ms, or an ISO timestamp. Null when the field is absent or not a time. */
|
|
184
|
+
function expiryMillis(expiry) {
|
|
185
|
+
if (blankMark(expiry))
|
|
186
|
+
return null;
|
|
187
|
+
if (typeof expiry === 'string' && /[T-]/.test(expiry)) {
|
|
188
|
+
const parsed = Date.parse(expiry);
|
|
189
|
+
return Number.isFinite(parsed) ? parsed : null;
|
|
190
|
+
}
|
|
191
|
+
const n = Number(expiry);
|
|
192
|
+
if (!Number.isFinite(n))
|
|
193
|
+
return null;
|
|
194
|
+
return n < 1e12 ? n * 1000 : n;
|
|
195
|
+
}
|
|
196
|
+
function isPastExpiry(expiry, nowMs = Date.now()) {
|
|
197
|
+
const at = expiryMillis(expiry);
|
|
198
|
+
if (at == null)
|
|
199
|
+
return false;
|
|
200
|
+
return nowMs >= at;
|
|
201
|
+
}
|
|
202
|
+
function registryUnmarked(input, settledBy) {
|
|
203
|
+
return settledBy == null
|
|
204
|
+
&& blankMark(input?.receipt_id)
|
|
205
|
+
&& blankMark(input?.observed_tx_hash)
|
|
206
|
+
&& blankMark(input?.observed_transfer_id);
|
|
207
|
+
}
|
|
208
|
+
/**
|
|
209
|
+
* Partition a row. Expired and unmarked is unverifiable_from_registry, ahead
|
|
210
|
+
* of the clean-unsettled and anchor-changed buckets, and behind a joined
|
|
211
|
+
* settled_by (receipt or observed_transfer).
|
|
212
|
+
*/
|
|
213
|
+
function classifyReceiptLane({ entry = null, settled_by = null, settled = null, anchor_changed_since_binding = null, now = Date.now(), } = {}) {
|
|
214
|
+
if (settled_by === 'receipt')
|
|
215
|
+
return 'receipt';
|
|
216
|
+
if (settled_by === 'observed_transfer')
|
|
217
|
+
return 'observed_transfer';
|
|
218
|
+
if (isPastExpiry(entry?.expiry, now) && registryUnmarked(entry, settled_by)) {
|
|
219
|
+
return 'unverifiable_from_registry';
|
|
220
|
+
}
|
|
221
|
+
if (anchor_changed_since_binding === true && settled !== true)
|
|
222
|
+
return 'anchor_changed_unsettled';
|
|
223
|
+
return 'unsettled';
|
|
224
|
+
}
|
|
225
|
+
/**
|
|
226
|
+
* Payee and amount a stranger can feed to the existing per-tx Base USDC check.
|
|
227
|
+
* Null unless this row is Base mainnet USDC. Does not claim the transfer happened
|
|
228
|
+
* and does not read the chain.
|
|
229
|
+
*/
|
|
230
|
+
function baseUsdcLocalCheckHint(entry) {
|
|
231
|
+
if (!entry || typeof entry !== 'object')
|
|
232
|
+
return null;
|
|
233
|
+
const chain = entry.chain_id ?? entry.chainId ?? null;
|
|
234
|
+
const chainName = String(chain ?? '').toLowerCase();
|
|
235
|
+
const chainOk = chain === BASE_CHAIN_ID
|
|
236
|
+
|| chainName === String(BASE_CHAIN_ID)
|
|
237
|
+
|| chainName === 'base'
|
|
238
|
+
|| chainName === 'eip155:8453';
|
|
239
|
+
if (!chainOk)
|
|
240
|
+
return null;
|
|
241
|
+
const token = entry.token ?? entry.asset ?? null;
|
|
242
|
+
if (token == null || String(token).toLowerCase() !== exports.BASE_USDC_ADDRESS.toLowerCase())
|
|
243
|
+
return null;
|
|
244
|
+
const payee = entry.payout_address || entry.address || entry.payee || null;
|
|
245
|
+
const amount = entry.amount_atomic ?? null;
|
|
246
|
+
if (blankMark(payee) || blankMark(amount))
|
|
247
|
+
return null;
|
|
248
|
+
return {
|
|
249
|
+
method: 'base_usdc_transfer',
|
|
250
|
+
chain_id: BASE_CHAIN_ID,
|
|
251
|
+
token: exports.BASE_USDC_ADDRESS,
|
|
252
|
+
payee: String(payee),
|
|
253
|
+
amount_atomic: String(amount),
|
|
254
|
+
claims_paid: false,
|
|
255
|
+
};
|
|
256
|
+
}
|
|
257
|
+
function deriveSettledBy(input, { payer = null, issuerAssertsSettlement = null } = {}) {
|
|
258
|
+
if (!input || typeof input !== 'object')
|
|
259
|
+
return null;
|
|
260
|
+
if (isPayoutBinding(input))
|
|
261
|
+
return explicitSettledBy(input);
|
|
262
|
+
if (payer?.checked === true && payer.valid === true)
|
|
263
|
+
return 'observed_transfer';
|
|
264
|
+
if (isReported(input))
|
|
265
|
+
return null;
|
|
266
|
+
const ref = paymentRefOf(input);
|
|
267
|
+
const evidence = input.evidence || null;
|
|
268
|
+
if (ref && (evidence === 'foreign_ingest' || input.source === 'foreign_ingest' || input.foreign_x402 === true)) {
|
|
269
|
+
return 'observed_transfer';
|
|
270
|
+
}
|
|
271
|
+
if (hasIngress(input))
|
|
272
|
+
return 'observed_transfer';
|
|
273
|
+
if (issuerAssertsSettlement === true && ref)
|
|
274
|
+
return 'receipt';
|
|
275
|
+
if (issuerAssertsSettlement === false)
|
|
276
|
+
return null;
|
|
277
|
+
if (!ref)
|
|
278
|
+
return null;
|
|
279
|
+
if (input.payment?.collected === true || input.collected === true)
|
|
280
|
+
return 'receipt';
|
|
281
|
+
const status = input.settlement_status || input.usage_settled?.settlement_status || null;
|
|
282
|
+
if (status && SETTLED_STATUS.has(status))
|
|
283
|
+
return 'receipt';
|
|
284
|
+
if (evidence && RECEIPT_ASSERTION_EVIDENCE.has(evidence))
|
|
285
|
+
return 'receipt';
|
|
286
|
+
return null;
|
|
287
|
+
}
|
|
288
|
+
function deriveSettled(input, { payer = null } = {}) {
|
|
289
|
+
if (!input || typeof input !== 'object')
|
|
290
|
+
return null;
|
|
291
|
+
if (isPayoutBinding(input))
|
|
292
|
+
return explicitSettledBy(input) ? true : null;
|
|
293
|
+
if (payer?.checked === true && payer.valid === true)
|
|
294
|
+
return true;
|
|
295
|
+
if (payer?.checked === true && payer.valid === false)
|
|
296
|
+
return false;
|
|
297
|
+
if (isReported(input))
|
|
298
|
+
return false;
|
|
299
|
+
const status = input.settlement_status || input.usage_settled?.settlement_status || null;
|
|
300
|
+
if (status && SETTLED_STATUS.has(status))
|
|
301
|
+
return true;
|
|
302
|
+
const evidence = input.evidence || null;
|
|
303
|
+
if (evidence && UNSETTLED_EVIDENCE.has(evidence))
|
|
304
|
+
return false;
|
|
305
|
+
if (evidence && SETTLED_EVIDENCE.has(evidence))
|
|
306
|
+
return true;
|
|
307
|
+
if (input.payment?.collected === true || input.collected === true)
|
|
308
|
+
return true;
|
|
309
|
+
if (input.payment?.collected === false || input.collected === false)
|
|
310
|
+
return false;
|
|
311
|
+
return null;
|
|
312
|
+
}
|
|
313
|
+
function bookSeqOf(input) {
|
|
314
|
+
const raw = input?.book_seq ?? input?.seq ?? input?.book_chain?.seq ?? null;
|
|
315
|
+
if (raw == null || raw === '')
|
|
316
|
+
return null;
|
|
317
|
+
const n = Number(raw);
|
|
318
|
+
return Number.isInteger(n) && n > 0 ? n : null;
|
|
319
|
+
}
|
|
320
|
+
function receiptLaneDecision(input) {
|
|
321
|
+
const hasSeq = Number.isInteger(input.book_seq) && input.book_seq > 0;
|
|
322
|
+
const freeze = hasSeq
|
|
323
|
+
&& input.settled_by === 'receipt'
|
|
324
|
+
&& input.anchor_changed_since_binding === true
|
|
325
|
+
&& input.settled === false;
|
|
326
|
+
return {
|
|
327
|
+
freeze,
|
|
328
|
+
reason: freeze ? 'unsettled_anchor_changed' : null,
|
|
329
|
+
};
|
|
330
|
+
}
|
|
331
|
+
function changedFromIdentities(at, current) {
|
|
332
|
+
const same = sameIdentity(at, current);
|
|
333
|
+
return {
|
|
334
|
+
changed: same == null ? null : same === false,
|
|
335
|
+
at: at || null,
|
|
336
|
+
current: current || null,
|
|
337
|
+
};
|
|
338
|
+
}
|
|
339
|
+
function buildReceiptLane({ entry = null, payer = null, leafIndex = null, heads = null, issuerAssertsSettlement = null, anchorAtBinding = null, anchorCurrent = null, now = Date.now(), } = {}) {
|
|
340
|
+
const book_seq = bookSeqOf(entry);
|
|
341
|
+
const settled_by = deriveSettledBy(entry, { payer, issuerAssertsSettlement });
|
|
342
|
+
const settled = deriveSettled(entry, { payer });
|
|
343
|
+
let anchor;
|
|
344
|
+
if (Array.isArray(heads) && heads.length > 0 && leafIndex != null) {
|
|
345
|
+
anchor = anchorChangedSinceBinding(heads, leafIndex);
|
|
346
|
+
}
|
|
347
|
+
else if (anchorAtBinding || anchorCurrent) {
|
|
348
|
+
anchor = changedFromIdentities(anchorAtBinding ?? null, anchorCurrent ?? null);
|
|
349
|
+
}
|
|
350
|
+
else if (typeof entry?.anchor_changed_since_binding === 'boolean') {
|
|
351
|
+
anchor = { changed: entry.anchor_changed_since_binding, at: null, current: null };
|
|
352
|
+
}
|
|
353
|
+
else {
|
|
354
|
+
anchor = changedFromIdentities(anchorAtBinding ?? null, anchorCurrent ?? null);
|
|
355
|
+
}
|
|
356
|
+
const decision = receiptLaneDecision({
|
|
357
|
+
book_seq,
|
|
358
|
+
settled_by,
|
|
359
|
+
settled,
|
|
360
|
+
anchor_changed_since_binding: anchor.changed,
|
|
361
|
+
});
|
|
362
|
+
const classification = classifyReceiptLane({
|
|
363
|
+
entry,
|
|
364
|
+
settled_by,
|
|
365
|
+
settled,
|
|
366
|
+
anchor_changed_since_binding: anchor.changed,
|
|
367
|
+
now,
|
|
368
|
+
});
|
|
369
|
+
return {
|
|
370
|
+
schema: exports.RECEIPT_LANE_SCHEMA,
|
|
371
|
+
signed: false,
|
|
372
|
+
book_seq,
|
|
373
|
+
settled_by,
|
|
374
|
+
settled,
|
|
375
|
+
anchor_at_binding: anchor.at,
|
|
376
|
+
anchor_current: anchor.current,
|
|
377
|
+
anchor_changed_since_binding: anchor.changed,
|
|
378
|
+
freeze: decision.freeze,
|
|
379
|
+
reason: decision.reason,
|
|
380
|
+
rule: exports.RECEIPT_LANE_RULE,
|
|
381
|
+
ordering: exports.RECEIPT_LANE_ORDERING,
|
|
382
|
+
boundary: exports.RECEIPT_LANE_BOUNDARY,
|
|
383
|
+
classification,
|
|
384
|
+
local_check: classification === 'unverifiable_from_registry' ? baseUsdcLocalCheckHint(entry) : null,
|
|
385
|
+
};
|
|
386
|
+
}
|
|
387
|
+
/**
|
|
388
|
+
* Stranger view. Uses verified signed claims and an on-chain payer check.
|
|
389
|
+
* Ignores a stamped freeze bit. Unsigned payment.ref is not an assertion.
|
|
390
|
+
*/
|
|
391
|
+
function receiptLaneFromVerification({ receipt, claims = null, issuerValid = false, payer = null, head = null, now = Date.now(), }) {
|
|
392
|
+
const kind = claims?.settlement?.kind ?? null;
|
|
393
|
+
const signedRef = claims?.payment?.ref ?? null;
|
|
394
|
+
const reported = kind === 'reported';
|
|
395
|
+
const foreignPayout = issuerValid === true && claims?.schema === 'chit402.foreign_payout.v1';
|
|
396
|
+
const asserts = issuerValid === true && !!signedRef && !reported && !foreignPayout;
|
|
397
|
+
const collected = kind === 'settled' || kind === 'inherited'
|
|
398
|
+
? true
|
|
399
|
+
: (kind === 'unsettled' || reported ? false : (claims?.payment?.collected ?? null));
|
|
400
|
+
const binding = receipt
|
|
401
|
+
&& Object.prototype.hasOwnProperty.call(receipt, 'expiry')
|
|
402
|
+
&& (Object.prototype.hasOwnProperty.call(receipt, 'docket_id')
|
|
403
|
+
|| Object.prototype.hasOwnProperty.call(receipt, 'payout_address')
|
|
404
|
+
|| Object.prototype.hasOwnProperty.call(receipt, 'authorization_hash'))
|
|
405
|
+
? receipt
|
|
406
|
+
: null;
|
|
407
|
+
const entry = {
|
|
408
|
+
book_seq: receipt?.book_seq ?? null,
|
|
409
|
+
book_chain: receipt?.book_chain ?? null,
|
|
410
|
+
payment: issuerValid ? {
|
|
411
|
+
ref: signedRef,
|
|
412
|
+
rail: claims?.payment?.rail ?? null,
|
|
413
|
+
collected,
|
|
414
|
+
} : null,
|
|
415
|
+
collected,
|
|
416
|
+
evidence: foreignPayout ? 'foreign_ingest' : (reported ? 'openrouter_reported' : null),
|
|
417
|
+
source: foreignPayout ? 'foreign_ingest' : null,
|
|
418
|
+
foreign_x402: foreignPayout ? true : undefined,
|
|
419
|
+
...(binding ? {
|
|
420
|
+
expiry: binding.expiry ?? null,
|
|
421
|
+
receipt_id: binding.receipt_id ?? null,
|
|
422
|
+
observed_tx_hash: binding.observed_tx_hash ?? null,
|
|
423
|
+
observed_transfer_id: binding.observed_transfer_id ?? null,
|
|
424
|
+
settled_by: binding.settled_by ?? null,
|
|
425
|
+
anchor_changed_since_binding: binding.anchor_changed_since_binding,
|
|
426
|
+
chain_id: binding.chain_id ?? null,
|
|
427
|
+
token: binding.token ?? null,
|
|
428
|
+
payout_address: binding.payout_address ?? binding.address ?? null,
|
|
429
|
+
amount_atomic: binding.amount_atomic ?? null,
|
|
430
|
+
docket_id: binding.docket_id ?? null,
|
|
431
|
+
} : {}),
|
|
432
|
+
};
|
|
433
|
+
const stamped = receipt?.receipt_lane || null;
|
|
434
|
+
const currentHead = head || receipt?.tree_head || receipt?.head || null;
|
|
435
|
+
const anchorCurrent = currentHead ? anchorIdentity(currentHead) : (stamped?.anchor_current ?? null);
|
|
436
|
+
const anchorAtBinding = stamped?.anchor_at_binding ?? null;
|
|
437
|
+
return buildReceiptLane({
|
|
438
|
+
entry,
|
|
439
|
+
payer,
|
|
440
|
+
issuerAssertsSettlement: asserts,
|
|
441
|
+
anchorAtBinding,
|
|
442
|
+
anchorCurrent,
|
|
443
|
+
now,
|
|
444
|
+
});
|
|
445
|
+
}
|
|
446
|
+
//# sourceMappingURL=receipt-lane.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"receipt-lane.js","sourceRoot":"","sources":["../src/receipt-lane.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Exact-type allowlist for receipt versions.
|
|
3
|
+
*
|
|
4
|
+
* The signed JWS payload is the only version that counts. `Number()` and
|
|
5
|
+
* `parseInt` are not used: strings, booleans, arrays, null, and non-integers
|
|
6
|
+
* are unsupported. JSON `11.0` and `1.1e1` are the number 11 after parse.
|
|
7
|
+
*
|
|
8
|
+
* `hmac_attestation.payload_version` is the HMAC field-list version (5 or 8).
|
|
9
|
+
* It is not a copy of the JWS payload version. chit-1ebc5616 is signed
|
|
10
|
+
* payload_version 6 with HMAC 8. That pair still verifies.
|
|
11
|
+
*/
|
|
12
|
+
export declare const LEGACY_PAYLOAD_VERSIONS: readonly [1, 2, 3, 4, 5, 6, 7, 8, 9, 10];
|
|
13
|
+
export declare const ISSUER_ROOT_PAYLOAD_VERSION = 11;
|
|
14
|
+
export declare const V11_VERSION = 11;
|
|
15
|
+
export declare const UNVERSIONED_OUTER_VERSIONS: readonly [4, 5];
|
|
16
|
+
export declare const REFUSAL_EXACT_VERSIONS: readonly [1, 2, 3];
|
|
17
|
+
export declare const SUPPORTED_RECEIPT_VERSIONS: {
|
|
18
|
+
readonly v: readonly [11];
|
|
19
|
+
readonly payload_version: readonly [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11];
|
|
20
|
+
readonly refusal_payload_version: readonly [1, 2, 3];
|
|
21
|
+
readonly legacy_unversioned_outer: readonly [4, 5];
|
|
22
|
+
};
|
|
23
|
+
export declare const VERIFIER_MIN = "0.3.5";
|
|
24
|
+
export declare const UNSUPPORTED_VERSION = "unsupported_version";
|
|
25
|
+
export declare const VERSION_MISMATCH = "version_mismatch";
|
|
26
|
+
export declare const INVALID_JWS = "invalid_jws";
|
|
27
|
+
export declare const UPGRADE_HINT = "this receipt requires a verifier newer than @xfuel/verify 0.3.5";
|
|
28
|
+
export type VersionReason = typeof UNSUPPORTED_VERSION | typeof VERSION_MISMATCH | typeof INVALID_JWS;
|
|
29
|
+
export type ReceiptVersionDecision = {
|
|
30
|
+
ok: true;
|
|
31
|
+
family: 'unsigned';
|
|
32
|
+
} | {
|
|
33
|
+
ok: true;
|
|
34
|
+
family: 'v11';
|
|
35
|
+
version: 11;
|
|
36
|
+
version_source: 'signed';
|
|
37
|
+
} | {
|
|
38
|
+
ok: true;
|
|
39
|
+
family: 'legacy';
|
|
40
|
+
version: number;
|
|
41
|
+
version_source: 'signed' | 'inferred';
|
|
42
|
+
} | {
|
|
43
|
+
ok: false;
|
|
44
|
+
reason: VersionReason;
|
|
45
|
+
errors: string[];
|
|
46
|
+
};
|
|
47
|
+
export declare function isPlainObject(value: unknown): value is Record<string, unknown>;
|
|
48
|
+
/** JSON number that is a whole integer. Rejects strings, booleans, arrays, and floats. */
|
|
49
|
+
export declare function isJsonInteger(value: unknown): value is number;
|
|
50
|
+
/** True when every claim key belongs to the v4/v5 object, before v6 fields existed. */
|
|
51
|
+
export declare function claimsAreUnversionedV4V5(claims: Record<string, unknown>): boolean;
|
|
52
|
+
/**
|
|
53
|
+
* Outer payload_version slots that may name a v4/v5 receipt whose JWS
|
|
54
|
+
* itself has no version. They must all be the same integer, 4 or 5.
|
|
55
|
+
*/
|
|
56
|
+
export declare function unversionedOuterVersion(receipt: Record<string, unknown>): number | null;
|
|
57
|
+
export declare function readSignedClaims(jws: unknown): {
|
|
58
|
+
ok: true;
|
|
59
|
+
claims: Record<string, unknown>;
|
|
60
|
+
} | {
|
|
61
|
+
ok: false;
|
|
62
|
+
reason: typeof INVALID_JWS | typeof UNSUPPORTED_VERSION;
|
|
63
|
+
};
|
|
64
|
+
/**
|
|
65
|
+
* Allowlist on the signed claims. `outer` is the receipt document.
|
|
66
|
+
* Pass null to ignore outer copies (builders, claims-only checks).
|
|
67
|
+
*/
|
|
68
|
+
export declare function classifySignedClaims(claims: unknown, outer: Record<string, unknown> | null): ReceiptVersionDecision;
|
|
69
|
+
/** True when the signed claims are on the allowlist. Outer copies are not checked. */
|
|
70
|
+
export declare function signedClaimsOnAllowlist(claims: unknown): boolean;
|
|
71
|
+
/**
|
|
72
|
+
* UUID ids must match the receipt version. Non-uuid task ids are documented
|
|
73
|
+
* legacy formats and are not this check. A wrong prefix is reported even
|
|
74
|
+
* when the version is otherwise unsupported.
|
|
75
|
+
*/
|
|
76
|
+
export declare function legacyIdentityErrors(receipt: unknown): string[];
|
|
77
|
+
export declare function classifyReceiptDocument(receipt: unknown): ReceiptVersionDecision;
|
|
78
|
+
/**
|
|
79
|
+
* Public shell with no holder JWS. Exact types. Unknown versions are not
|
|
80
|
+
* INCLUDED_SHELL. null payload_version is not a version.
|
|
81
|
+
*/
|
|
82
|
+
export declare function classifyShellDocument(shell: unknown): {
|
|
83
|
+
ok: true;
|
|
84
|
+
} | {
|
|
85
|
+
ok: false;
|
|
86
|
+
reason: VersionReason;
|
|
87
|
+
errors: string[];
|
|
88
|
+
};
|
|
89
|
+
export declare function formatSupportedReceiptVersions(): string;
|
|
90
|
+
/** Legacy refusal versions. Exact integers. v11 refusals use the v: 11 rule. */
|
|
91
|
+
export declare function refusalPayloadVersion(claims: unknown): {
|
|
92
|
+
ok: true;
|
|
93
|
+
version: 1 | 2 | 3;
|
|
94
|
+
} | {
|
|
95
|
+
ok: false;
|
|
96
|
+
reason: typeof UNSUPPORTED_VERSION;
|
|
97
|
+
};
|
|
98
|
+
//# sourceMappingURL=receipt-version.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"receipt-version.d.ts","sourceRoot":"","sources":["../src/receipt-version.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,eAAO,MAAM,uBAAuB,0CAA2C,CAAC;AAChF,eAAO,MAAM,2BAA2B,KAAK,CAAC;AAC9C,eAAO,MAAM,WAAW,KAAK,CAAC;AAC9B,eAAO,MAAM,0BAA0B,iBAAkB,CAAC;AAC1D,eAAO,MAAM,sBAAsB,oBAAqB,CAAC;AAEzD,eAAO,MAAM,0BAA0B;;;;;CAK7B,CAAC;AAEX,eAAO,MAAM,YAAY,UAAU,CAAC;AACpC,eAAO,MAAM,mBAAmB,wBAAwB,CAAC;AACzD,eAAO,MAAM,gBAAgB,qBAAqB,CAAC;AACnD,eAAO,MAAM,WAAW,gBAAgB,CAAC;AACzC,eAAO,MAAM,YAAY,oEAAoE,CAAC;AA+B9F,MAAM,MAAM,aAAa,GAAG,OAAO,mBAAmB,GAAG,OAAO,gBAAgB,GAAG,OAAO,WAAW,CAAC;AAEtG,MAAM,MAAM,sBAAsB,GAC9B;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,UAAU,CAAA;CAAE,GAChC;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,KAAK,CAAC;IAAC,OAAO,EAAE,EAAE,CAAC;IAAC,cAAc,EAAE,QAAQ,CAAA;CAAE,GAClE;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,QAAQ,CAAC;IAAC,OAAO,EAAE,MAAM,CAAC;IAAC,cAAc,EAAE,QAAQ,GAAG,UAAU,CAAA;CAAE,GACtF;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,aAAa,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CAAC;AAM3D,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAE9E;AAED,0FAA0F;AAC1F,wBAAgB,aAAa,CAAC,KAAK,EAAE,OAAO,GAAG,KAAK,IAAI,MAAM,CAE7D;AAeD,uFAAuF;AACvF,wBAAgB,wBAAwB,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAYjF;AAUD;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,GAAG,IAAI,CAavF;AAuBD,wBAAgB,gBAAgB,CAAC,GAAG,EAAE,OAAO,GACzC;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAA;CAAE,GAC7C;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,OAAO,WAAW,GAAG,OAAO,mBAAmB,CAAA;CAAE,CAmBzE;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAClC,MAAM,EAAE,OAAO,EACf,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,GACpC,sBAAsB,CAuCxB;AAED,sFAAsF;AACtF,wBAAgB,uBAAuB,CAAC,MAAM,EAAE,OAAO,GAAG,OAAO,CAGhE;AAID;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,OAAO,GAAG,MAAM,EAAE,CAyB/D;AAED,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,OAAO,GAAG,sBAAsB,CAehF;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,OAAO,GAAG;IAAE,EAAE,EAAE,IAAI,CAAA;CAAE,GAAG;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,aAAa,CAAC;IAAC,MAAM,EAAE,MAAM,EAAE,CAAA;CAAE,CAkB3H;AAED,wBAAgB,8BAA8B,IAAI,MAAM,CAWvD;AAED,gFAAgF;AAChF,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,OAAO,GACjD;IAAE,EAAE,EAAE,IAAI,CAAC;IAAC,OAAO,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;CAAE,GAChC;IAAE,EAAE,EAAE,KAAK,CAAC;IAAC,MAAM,EAAE,OAAO,mBAAmB,CAAA;CAAE,CAapD"}
|