@peac/protocol 0.10.8 → 0.10.10
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/dist/discovery.d.ts.map +1 -1
- package/dist/index.cjs +2694 -0
- package/dist/index.cjs.map +1 -0
- package/dist/index.mjs +2612 -0
- package/dist/index.mjs.map +1 -0
- package/dist/issue.d.ts +3 -0
- package/dist/issue.d.ts.map +1 -1
- package/dist/telemetry.d.ts +43 -0
- package/dist/telemetry.d.ts.map +1 -1
- package/dist/transport-profiles.d.ts.map +1 -1
- package/dist/verification-report.d.ts.map +1 -1
- package/dist/verifier-types.d.ts +42 -2
- package/dist/verifier-types.d.ts.map +1 -1
- package/dist/verify-local.cjs +164 -0
- package/dist/verify-local.cjs.map +1 -0
- package/dist/verify-local.d.ts +61 -4
- package/dist/verify-local.d.ts.map +1 -1
- package/dist/verify-local.mjs +160 -0
- package/dist/verify-local.mjs.map +1 -0
- package/dist/verify.d.ts +3 -0
- package/dist/verify.d.ts.map +1 -1
- package/package.json +20 -14
- package/dist/crypto-utils.js +0 -21
- package/dist/crypto-utils.js.map +0 -1
- package/dist/discovery.js +0 -405
- package/dist/discovery.js.map +0 -1
- package/dist/headers.js +0 -110
- package/dist/headers.js.map +0 -1
- package/dist/index.js +0 -44
- package/dist/index.js.map +0 -1
- package/dist/issue.js +0 -208
- package/dist/issue.js.map +0 -1
- package/dist/pointer-fetch.js +0 -305
- package/dist/pointer-fetch.js.map +0 -1
- package/dist/ssrf-safe-fetch.js +0 -671
- package/dist/ssrf-safe-fetch.js.map +0 -1
- package/dist/telemetry.js +0 -18
- package/dist/telemetry.js.map +0 -1
- package/dist/transport-profiles.js +0 -424
- package/dist/transport-profiles.js.map +0 -1
- package/dist/verification-report.js +0 -322
- package/dist/verification-report.js.map +0 -1
- package/dist/verifier-core.js +0 -578
- package/dist/verifier-core.js.map +0 -1
- package/dist/verifier-types.js +0 -161
- package/dist/verifier-types.js.map +0 -1
- package/dist/verify-local.js +0 -189
- package/dist/verify-local.js.map +0 -1
- package/dist/verify.js +0 -202
- package/dist/verify.js.map +0 -1
|
@@ -1,322 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
/**
|
|
3
|
-
* PEAC Verification Report Builder
|
|
4
|
-
*
|
|
5
|
-
* Constructs deterministic verification reports per VERIFICATION-REPORT-FORMAT.md.
|
|
6
|
-
* Reports are designed to be portable, deterministic, safe, and policy-aware.
|
|
7
|
-
*
|
|
8
|
-
* @packageDocumentation
|
|
9
|
-
*/
|
|
10
|
-
Object.defineProperty(exports, "__esModule", { value: true });
|
|
11
|
-
exports.VerificationReportBuilder = void 0;
|
|
12
|
-
exports.createReportBuilder = createReportBuilder;
|
|
13
|
-
exports.computeReceiptDigest = computeReceiptDigest;
|
|
14
|
-
exports.buildFailureReport = buildFailureReport;
|
|
15
|
-
exports.buildSuccessReport = buildSuccessReport;
|
|
16
|
-
const crypto_1 = require("@peac/crypto");
|
|
17
|
-
const kernel_1 = require("@peac/kernel");
|
|
18
|
-
const verifier_types_js_1 = require("./verifier-types.js");
|
|
19
|
-
/**
|
|
20
|
-
* Verification Report Builder
|
|
21
|
-
*
|
|
22
|
-
* Builds verification reports with proper check ordering and short-circuit behavior.
|
|
23
|
-
* Ensures reports conform to VERIFICATION-REPORT-FORMAT.md requirements.
|
|
24
|
-
*
|
|
25
|
-
* Shape-stable: Always emits all checks with pass/fail/skip status.
|
|
26
|
-
*/
|
|
27
|
-
class VerificationReportBuilder {
|
|
28
|
-
state;
|
|
29
|
-
constructor(policy) {
|
|
30
|
-
this.state = {
|
|
31
|
-
policy,
|
|
32
|
-
checks: new Map(),
|
|
33
|
-
shortCircuited: false,
|
|
34
|
-
};
|
|
35
|
-
}
|
|
36
|
-
/**
|
|
37
|
-
* Set the input descriptor with pre-computed digest
|
|
38
|
-
*
|
|
39
|
-
* Use this when you've already computed the SHA-256 hash.
|
|
40
|
-
*
|
|
41
|
-
* @param digestHex - SHA-256 digest as lowercase hex (64 chars)
|
|
42
|
-
* @param type - Input type
|
|
43
|
-
*/
|
|
44
|
-
setInputWithDigest(digestHex, type = 'receipt_jws') {
|
|
45
|
-
this.state.receiptDigestHex = digestHex;
|
|
46
|
-
this.state.input = {
|
|
47
|
-
type,
|
|
48
|
-
receipt_digest: (0, verifier_types_js_1.createDigest)(digestHex),
|
|
49
|
-
};
|
|
50
|
-
return this;
|
|
51
|
-
}
|
|
52
|
-
/**
|
|
53
|
-
* Set the input descriptor (async - computes SHA-256)
|
|
54
|
-
*
|
|
55
|
-
* @param receiptBytes - Raw receipt bytes
|
|
56
|
-
* @param type - Input type
|
|
57
|
-
*/
|
|
58
|
-
async setInputAsync(receiptBytes, type = 'receipt_jws') {
|
|
59
|
-
const digestHex = await (0, crypto_1.sha256Hex)(receiptBytes);
|
|
60
|
-
return this.setInputWithDigest(digestHex, type);
|
|
61
|
-
}
|
|
62
|
-
/**
|
|
63
|
-
* Add a check result
|
|
64
|
-
*
|
|
65
|
-
* Checks can be added in any order; they will be sorted in build().
|
|
66
|
-
* If a previous check failed, subsequent checks should be marked as skip.
|
|
67
|
-
*/
|
|
68
|
-
addCheck(id, status, detail, errorCode) {
|
|
69
|
-
const check = { id, status };
|
|
70
|
-
if (detail && Object.keys(detail).length > 0) {
|
|
71
|
-
check.detail = detail;
|
|
72
|
-
}
|
|
73
|
-
if (errorCode) {
|
|
74
|
-
check.error_code = errorCode;
|
|
75
|
-
}
|
|
76
|
-
this.state.checks.set(id, check);
|
|
77
|
-
// Track short-circuit on failure
|
|
78
|
-
if (status === 'fail' && !this.state.shortCircuited) {
|
|
79
|
-
this.state.shortCircuited = true;
|
|
80
|
-
this.state.failedAtCheck = id;
|
|
81
|
-
}
|
|
82
|
-
return this;
|
|
83
|
-
}
|
|
84
|
-
/**
|
|
85
|
-
* Add a passing check
|
|
86
|
-
*/
|
|
87
|
-
pass(id, detail) {
|
|
88
|
-
return this.addCheck(id, 'pass', detail);
|
|
89
|
-
}
|
|
90
|
-
/**
|
|
91
|
-
* Add a failing check
|
|
92
|
-
*/
|
|
93
|
-
fail(id, errorCode, detail) {
|
|
94
|
-
return this.addCheck(id, 'fail', detail, errorCode);
|
|
95
|
-
}
|
|
96
|
-
/**
|
|
97
|
-
* Add a skipped check
|
|
98
|
-
*/
|
|
99
|
-
skip(id, detail) {
|
|
100
|
-
return this.addCheck(id, 'skip', detail);
|
|
101
|
-
}
|
|
102
|
-
/**
|
|
103
|
-
* Set the final result
|
|
104
|
-
*/
|
|
105
|
-
setResult(valid, reason, options) {
|
|
106
|
-
this.state.result = {
|
|
107
|
-
valid,
|
|
108
|
-
reason,
|
|
109
|
-
severity: (0, verifier_types_js_1.reasonCodeToSeverity)(reason),
|
|
110
|
-
receipt_type: options?.receiptType ?? kernel_1.WIRE_TYPE,
|
|
111
|
-
...(options?.issuer && { issuer: options.issuer }),
|
|
112
|
-
...(options?.kid && { kid: options.kid }),
|
|
113
|
-
};
|
|
114
|
-
return this;
|
|
115
|
-
}
|
|
116
|
-
/**
|
|
117
|
-
* Set success result
|
|
118
|
-
*/
|
|
119
|
-
success(issuer, kid) {
|
|
120
|
-
return this.setResult(true, 'ok', { issuer, kid });
|
|
121
|
-
}
|
|
122
|
-
/**
|
|
123
|
-
* Set failure result
|
|
124
|
-
*/
|
|
125
|
-
failure(reason, issuer, kid) {
|
|
126
|
-
return this.setResult(false, reason, { issuer, kid });
|
|
127
|
-
}
|
|
128
|
-
/**
|
|
129
|
-
* Add artifacts
|
|
130
|
-
*/
|
|
131
|
-
addArtifact(key, value) {
|
|
132
|
-
if (!this.state.artifacts) {
|
|
133
|
-
this.state.artifacts = {};
|
|
134
|
-
}
|
|
135
|
-
this.state.artifacts[key] = value;
|
|
136
|
-
return this;
|
|
137
|
-
}
|
|
138
|
-
/**
|
|
139
|
-
* Set metadata (non-deterministic fields)
|
|
140
|
-
*/
|
|
141
|
-
setMeta(meta) {
|
|
142
|
-
this.state.meta = meta;
|
|
143
|
-
return this;
|
|
144
|
-
}
|
|
145
|
-
/**
|
|
146
|
-
* Add current timestamp to meta
|
|
147
|
-
*/
|
|
148
|
-
addTimestamp() {
|
|
149
|
-
if (!this.state.meta) {
|
|
150
|
-
this.state.meta = {};
|
|
151
|
-
}
|
|
152
|
-
this.state.meta.generated_at = new Date().toISOString();
|
|
153
|
-
return this;
|
|
154
|
-
}
|
|
155
|
-
/**
|
|
156
|
-
* Build the final report
|
|
157
|
-
*
|
|
158
|
-
* Ensures all checks are present (shape-stable).
|
|
159
|
-
* Missing checks after a failure are marked as 'skip'.
|
|
160
|
-
* Missing checks before a failure (or in success) are marked as 'pass'.
|
|
161
|
-
*/
|
|
162
|
-
build() {
|
|
163
|
-
// Validate required fields
|
|
164
|
-
if (!this.state.input) {
|
|
165
|
-
throw new Error('Input is required. Call setInputWithDigest() or setInputAsync() first.');
|
|
166
|
-
}
|
|
167
|
-
if (!this.state.result) {
|
|
168
|
-
throw new Error('Result is required. Call setResult() or success()/failure() first.');
|
|
169
|
-
}
|
|
170
|
-
// Build shape-stable checks array
|
|
171
|
-
const checks = [];
|
|
172
|
-
const failedIndex = this.state.failedAtCheck ? verifier_types_js_1.CHECK_IDS.indexOf(this.state.failedAtCheck) : -1;
|
|
173
|
-
for (let i = 0; i < verifier_types_js_1.CHECK_IDS.length; i++) {
|
|
174
|
-
const checkId = verifier_types_js_1.CHECK_IDS[i];
|
|
175
|
-
const existing = this.state.checks.get(checkId);
|
|
176
|
-
if (existing) {
|
|
177
|
-
checks.push(existing);
|
|
178
|
-
}
|
|
179
|
-
else if (this.state.shortCircuited && i > failedIndex) {
|
|
180
|
-
// After failure, missing checks are skipped
|
|
181
|
-
checks.push({ id: checkId, status: 'skip', detail: { reason: 'short_circuit' } });
|
|
182
|
-
}
|
|
183
|
-
else {
|
|
184
|
-
// Before failure or in success, missing checks get default status
|
|
185
|
-
// For optional checks like transport.profile_binding, mark as skip
|
|
186
|
-
if (checkId === 'transport.profile_binding') {
|
|
187
|
-
checks.push({ id: checkId, status: 'skip', detail: { reason: 'not_applicable' } });
|
|
188
|
-
}
|
|
189
|
-
else {
|
|
190
|
-
// This shouldn't happen in well-formed builds - indicates a bug
|
|
191
|
-
checks.push({ id: checkId, status: 'skip', detail: { reason: 'not_executed' } });
|
|
192
|
-
}
|
|
193
|
-
}
|
|
194
|
-
}
|
|
195
|
-
const report = {
|
|
196
|
-
report_version: kernel_1.VERIFICATION_REPORT_VERSION,
|
|
197
|
-
input: this.state.input,
|
|
198
|
-
policy: this.state.policy,
|
|
199
|
-
result: this.state.result,
|
|
200
|
-
checks,
|
|
201
|
-
};
|
|
202
|
-
if (this.state.artifacts && Object.keys(this.state.artifacts).length > 0) {
|
|
203
|
-
report.artifacts = this.state.artifacts;
|
|
204
|
-
}
|
|
205
|
-
if (this.state.meta) {
|
|
206
|
-
report.meta = this.state.meta;
|
|
207
|
-
}
|
|
208
|
-
return report;
|
|
209
|
-
}
|
|
210
|
-
/**
|
|
211
|
-
* Build in deterministic mode (excludes meta and non-deterministic artifacts)
|
|
212
|
-
*
|
|
213
|
-
* Deterministic mode ensures that the same inputs and policy always produce
|
|
214
|
-
* the same report output, regardless of cache state or timing.
|
|
215
|
-
*
|
|
216
|
-
* Excludes:
|
|
217
|
-
* - `meta`: Contains timestamps and verifier info
|
|
218
|
-
* - Non-deterministic artifacts: `issuer_jwks_digest` (depends on cache state)
|
|
219
|
-
*
|
|
220
|
-
* @returns Report without meta and with only deterministic artifacts
|
|
221
|
-
*/
|
|
222
|
-
buildDeterministic() {
|
|
223
|
-
const report = this.build();
|
|
224
|
-
const { meta: _meta, ...deterministic } = report;
|
|
225
|
-
// Filter out non-deterministic artifacts
|
|
226
|
-
if (deterministic.artifacts) {
|
|
227
|
-
const filteredArtifacts = { ...deterministic.artifacts };
|
|
228
|
-
for (const key of verifier_types_js_1.NON_DETERMINISTIC_ARTIFACT_KEYS) {
|
|
229
|
-
delete filteredArtifacts[key];
|
|
230
|
-
}
|
|
231
|
-
// Remove artifacts object if empty after filtering
|
|
232
|
-
if (Object.keys(filteredArtifacts).length === 0) {
|
|
233
|
-
delete deterministic.artifacts;
|
|
234
|
-
}
|
|
235
|
-
else {
|
|
236
|
-
deterministic.artifacts = filteredArtifacts;
|
|
237
|
-
}
|
|
238
|
-
}
|
|
239
|
-
return deterministic;
|
|
240
|
-
}
|
|
241
|
-
}
|
|
242
|
-
exports.VerificationReportBuilder = VerificationReportBuilder;
|
|
243
|
-
/**
|
|
244
|
-
* Create a new report builder
|
|
245
|
-
*/
|
|
246
|
-
function createReportBuilder(policy) {
|
|
247
|
-
return new VerificationReportBuilder(policy);
|
|
248
|
-
}
|
|
249
|
-
/**
|
|
250
|
-
* Compute receipt digest for report input
|
|
251
|
-
*
|
|
252
|
-
* @param receiptBytes - Raw receipt bytes (JWS string as UTF-8)
|
|
253
|
-
* @returns SHA-256 digest as lowercase hex (64 chars)
|
|
254
|
-
*/
|
|
255
|
-
async function computeReceiptDigest(receiptBytes) {
|
|
256
|
-
const bytes = typeof receiptBytes === 'string' ? new TextEncoder().encode(receiptBytes) : receiptBytes;
|
|
257
|
-
return (0, crypto_1.sha256Hex)(bytes);
|
|
258
|
-
}
|
|
259
|
-
/**
|
|
260
|
-
* Build a quick failure report without going through all checks
|
|
261
|
-
*
|
|
262
|
-
* Useful for early failures like receipt_too_large or malformed_receipt
|
|
263
|
-
* where most checks are skipped.
|
|
264
|
-
*/
|
|
265
|
-
async function buildFailureReport(policy, receiptBytes, reason, failedCheckId, errorCode, detail, options) {
|
|
266
|
-
const bytes = typeof receiptBytes === 'string' ? new TextEncoder().encode(receiptBytes) : receiptBytes;
|
|
267
|
-
const digestHex = await (0, crypto_1.sha256Hex)(bytes);
|
|
268
|
-
const builder = createReportBuilder(policy)
|
|
269
|
-
.setInputWithDigest(digestHex)
|
|
270
|
-
.failure(reason, options?.issuer, options?.kid);
|
|
271
|
-
// Add passing checks up to the failure point
|
|
272
|
-
const failedIndex = verifier_types_js_1.CHECK_IDS.indexOf(failedCheckId);
|
|
273
|
-
for (let i = 0; i < verifier_types_js_1.CHECK_IDS.length; i++) {
|
|
274
|
-
const checkId = verifier_types_js_1.CHECK_IDS[i];
|
|
275
|
-
if (i < failedIndex) {
|
|
276
|
-
builder.pass(checkId);
|
|
277
|
-
}
|
|
278
|
-
else if (i === failedIndex) {
|
|
279
|
-
builder.fail(checkId, errorCode ?? (0, verifier_types_js_1.reasonCodeToErrorCode)(reason), detail);
|
|
280
|
-
}
|
|
281
|
-
// Remaining checks will be auto-skipped by build()
|
|
282
|
-
}
|
|
283
|
-
if (options?.meta) {
|
|
284
|
-
builder.setMeta(options.meta);
|
|
285
|
-
}
|
|
286
|
-
return builder.build();
|
|
287
|
-
}
|
|
288
|
-
/**
|
|
289
|
-
* Build a success report
|
|
290
|
-
*/
|
|
291
|
-
async function buildSuccessReport(policy, receiptBytes, issuer, kid, checkDetails, options) {
|
|
292
|
-
const bytes = typeof receiptBytes === 'string' ? new TextEncoder().encode(receiptBytes) : receiptBytes;
|
|
293
|
-
const digestHex = await (0, crypto_1.sha256Hex)(bytes);
|
|
294
|
-
const builder = createReportBuilder(policy).setInputWithDigest(digestHex).success(issuer, kid);
|
|
295
|
-
// Add all checks as passing (except optional ones)
|
|
296
|
-
for (const checkId of verifier_types_js_1.CHECK_IDS) {
|
|
297
|
-
// Skip issuer.discovery for offline mode
|
|
298
|
-
if (checkId === 'issuer.discovery' && policy.mode === 'offline_only') {
|
|
299
|
-
builder.skip(checkId, { reason: 'offline_mode' });
|
|
300
|
-
continue;
|
|
301
|
-
}
|
|
302
|
-
// transport.profile_binding is optional
|
|
303
|
-
if (checkId === 'transport.profile_binding') {
|
|
304
|
-
if (checkDetails?.[checkId]) {
|
|
305
|
-
builder.pass(checkId, checkDetails[checkId]);
|
|
306
|
-
}
|
|
307
|
-
// Will be marked as skip by build() if not added
|
|
308
|
-
continue;
|
|
309
|
-
}
|
|
310
|
-
builder.pass(checkId, checkDetails?.[checkId]);
|
|
311
|
-
}
|
|
312
|
-
if (options?.artifacts) {
|
|
313
|
-
for (const [key, value] of Object.entries(options.artifacts)) {
|
|
314
|
-
builder.addArtifact(key, value);
|
|
315
|
-
}
|
|
316
|
-
}
|
|
317
|
-
if (options?.meta) {
|
|
318
|
-
builder.setMeta(options.meta);
|
|
319
|
-
}
|
|
320
|
-
return builder.build();
|
|
321
|
-
}
|
|
322
|
-
//# sourceMappingURL=verification-report.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"verification-report.js","sourceRoot":"","sources":["../src/verification-report.ts"],"names":[],"mappings":"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"}
|