@peac/protocol 0.13.4 → 0.14.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/dist/_internal/record-core/validation-gate.d.ts +102 -0
- package/dist/_internal/record-core/validation-gate.d.ts.map +1 -0
- package/dist/_internal/record-core/validators/schema-parse.d.ts +53 -23
- package/dist/_internal/record-core/validators/schema-parse.d.ts.map +1 -1
- package/dist/index.cjs +180 -35
- package/dist/index.cjs.map +1 -1
- package/dist/index.mjs +180 -35
- package/dist/index.mjs.map +1 -1
- package/dist/issue.d.ts.map +1 -1
- package/dist/verify-local.cjs +134 -21
- package/dist/verify-local.cjs.map +1 -1
- package/dist/verify-local.d.ts.map +1 -1
- package/dist/verify-local.mjs +134 -21
- package/dist/verify-local.mjs.map +1 -1
- package/package.json +4 -4
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"verify-local.d.ts","sourceRoot":"","sources":["../src/verify-local.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,KAAK,sBAAsB,EAAE,KAAK,mBAAmB,EAAQ,MAAM,cAAc,CAAC;AAE3F,OAAO,EAGL,KAAK,YAAY,EAYlB,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"verify-local.d.ts","sourceRoot":"","sources":["../src/verify-local.ts"],"names":[],"mappings":"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"}
|
package/dist/verify-local.mjs
CHANGED
|
@@ -341,12 +341,26 @@ function validateExtensionBudgetInternal(extensions) {
|
|
|
341
341
|
function validateSchemaParseInternal(payload) {
|
|
342
342
|
const pr = parseReceiptClaims(payload);
|
|
343
343
|
if (!pr.ok) {
|
|
344
|
-
return {
|
|
344
|
+
return {
|
|
345
|
+
accepted: false,
|
|
346
|
+
errorCode: pr.error.code,
|
|
347
|
+
errorMessage: pr.error.message,
|
|
348
|
+
...pr.error.issues !== void 0 && { errorIssues: pr.error.issues }
|
|
349
|
+
};
|
|
345
350
|
}
|
|
346
351
|
if (pr.wireVersion !== "0.2") {
|
|
347
|
-
return {
|
|
352
|
+
return {
|
|
353
|
+
accepted: false,
|
|
354
|
+
errorCode: "E_UNSUPPORTED_WIRE_VERSION",
|
|
355
|
+
errorMessage: `Unsupported wire version: ${pr.wireVersion}`
|
|
356
|
+
};
|
|
348
357
|
}
|
|
349
|
-
return {
|
|
358
|
+
return {
|
|
359
|
+
accepted: true,
|
|
360
|
+
claims: pr.claims,
|
|
361
|
+
wireVersion: "0.2",
|
|
362
|
+
warnings: pr.warnings
|
|
363
|
+
};
|
|
350
364
|
}
|
|
351
365
|
|
|
352
366
|
// src/_internal/record-core/validators/jose-typ-strictness.ts
|
|
@@ -557,6 +571,71 @@ function runBoundedValidatorShadow(input) {
|
|
|
557
571
|
warnings
|
|
558
572
|
};
|
|
559
573
|
}
|
|
574
|
+
var MAX_SANITIZED_ISSUES = 25;
|
|
575
|
+
function sanitizeIssues(issues) {
|
|
576
|
+
if (!Array.isArray(issues)) return void 0;
|
|
577
|
+
return issues.slice(0, MAX_SANITIZED_ISSUES).map((issue) => {
|
|
578
|
+
const candidate = issue;
|
|
579
|
+
const path = Array.isArray(candidate.path) ? candidate.path.map(
|
|
580
|
+
(segment) => typeof segment === "string" || typeof segment === "number" ? String(segment) : ""
|
|
581
|
+
).join(".") : "";
|
|
582
|
+
const message = typeof candidate.message === "string" ? candidate.message : String(candidate.message ?? issue);
|
|
583
|
+
return { path, message };
|
|
584
|
+
});
|
|
585
|
+
}
|
|
586
|
+
function runBoundedValidationGate(input) {
|
|
587
|
+
return runVerifyLocal(input.payload);
|
|
588
|
+
}
|
|
589
|
+
function runVerifyLocal(payload) {
|
|
590
|
+
const kernelRes = validateKernelConstraints(payload);
|
|
591
|
+
if (!kernelRes.valid) {
|
|
592
|
+
const v = kernelRes.violations[0];
|
|
593
|
+
return {
|
|
594
|
+
ok: false,
|
|
595
|
+
code: "E_CONSTRAINT_VIOLATION",
|
|
596
|
+
message: `Kernel constraint violated: ${v.constraint} (actual: ${v.actual}, limit: ${v.limit})`
|
|
597
|
+
};
|
|
598
|
+
}
|
|
599
|
+
const schemaRes = validateSchemaParseInternal(payload);
|
|
600
|
+
if (!schemaRes.accepted) {
|
|
601
|
+
if (schemaRes.errorCode === "E_UNSUPPORTED_WIRE_VERSION") {
|
|
602
|
+
return {
|
|
603
|
+
ok: false,
|
|
604
|
+
code: "E_UNSUPPORTED_WIRE_VERSION",
|
|
605
|
+
message: "Wire 0.1 receipts are not supported. Re-issue as Wire 0.2 using issue()."
|
|
606
|
+
};
|
|
607
|
+
}
|
|
608
|
+
const sanitized = sanitizeIssues(schemaRes.errorIssues);
|
|
609
|
+
const details = {};
|
|
610
|
+
if (schemaRes.errorCode !== void 0) {
|
|
611
|
+
Object.assign(details, { parse_code: schemaRes.errorCode });
|
|
612
|
+
}
|
|
613
|
+
if (sanitized !== void 0) {
|
|
614
|
+
Object.assign(details, { issues: sanitized });
|
|
615
|
+
}
|
|
616
|
+
return {
|
|
617
|
+
ok: false,
|
|
618
|
+
code: "E_INVALID_FORMAT",
|
|
619
|
+
message: `Receipt schema validation failed: ${schemaRes.errorMessage ?? "unknown"}`,
|
|
620
|
+
...Object.keys(details).length > 0 && { details }
|
|
621
|
+
};
|
|
622
|
+
}
|
|
623
|
+
if (schemaRes.wireVersion !== "0.2" || schemaRes.claims === void 0) {
|
|
624
|
+
return {
|
|
625
|
+
ok: false,
|
|
626
|
+
code: "E_UNSUPPORTED_WIRE_VERSION",
|
|
627
|
+
message: "Wire 0.1 receipts are not supported. Re-issue as Wire 0.2 using issue()."
|
|
628
|
+
};
|
|
629
|
+
}
|
|
630
|
+
return {
|
|
631
|
+
ok: true,
|
|
632
|
+
parsed: {
|
|
633
|
+
wireVersion: "0.2",
|
|
634
|
+
claims: schemaRes.claims,
|
|
635
|
+
parserWarnings: schemaRes.warnings ?? []
|
|
636
|
+
}
|
|
637
|
+
};
|
|
638
|
+
}
|
|
560
639
|
var SECRET_PATTERNS = [
|
|
561
640
|
// Compact JWS / JWT (header.payload.signature with eyJ-prefixed header).
|
|
562
641
|
/eyJ[A-Za-z0-9_-]{20,}\.[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+/g,
|
|
@@ -836,7 +915,7 @@ function sanitizeParseIssues(issues) {
|
|
|
836
915
|
}));
|
|
837
916
|
}
|
|
838
917
|
async function verifyLocal(jws, publicKey, options = {}) {
|
|
839
|
-
|
|
918
|
+
const legacyPath = readLegacyPathFlag(options);
|
|
840
919
|
const {
|
|
841
920
|
issuer,
|
|
842
921
|
subjectUri,
|
|
@@ -869,22 +948,56 @@ async function verifyLocal(jws, publicKey, options = {}) {
|
|
|
869
948
|
message: "JWS typ header is absent; accepted in interop mode"
|
|
870
949
|
});
|
|
871
950
|
}
|
|
872
|
-
|
|
873
|
-
if (
|
|
874
|
-
const
|
|
875
|
-
|
|
876
|
-
|
|
877
|
-
|
|
878
|
-
|
|
879
|
-
|
|
880
|
-
|
|
881
|
-
|
|
882
|
-
|
|
883
|
-
|
|
884
|
-
|
|
885
|
-
|
|
886
|
-
|
|
887
|
-
|
|
951
|
+
let pr;
|
|
952
|
+
if (legacyPath) {
|
|
953
|
+
const constraintResult = validateKernelConstraints(result.payload);
|
|
954
|
+
if (!constraintResult.valid) {
|
|
955
|
+
const v = constraintResult.violations[0];
|
|
956
|
+
return {
|
|
957
|
+
valid: false,
|
|
958
|
+
code: "E_CONSTRAINT_VIOLATION",
|
|
959
|
+
message: `Kernel constraint violated: ${v.constraint} (actual: ${v.actual}, limit: ${v.limit})`
|
|
960
|
+
};
|
|
961
|
+
}
|
|
962
|
+
const parsed = parseReceiptClaims(result.payload);
|
|
963
|
+
if (!parsed.ok) {
|
|
964
|
+
return {
|
|
965
|
+
valid: false,
|
|
966
|
+
code: "E_INVALID_FORMAT",
|
|
967
|
+
message: `Receipt schema validation failed: ${parsed.error.message}`,
|
|
968
|
+
details: {
|
|
969
|
+
parse_code: parsed.error.code,
|
|
970
|
+
issues: sanitizeParseIssues(parsed.error.issues)
|
|
971
|
+
}
|
|
972
|
+
};
|
|
973
|
+
}
|
|
974
|
+
pr = parsed;
|
|
975
|
+
} else {
|
|
976
|
+
const gateResult = runBoundedValidationGate({
|
|
977
|
+
surface: "verifyLocal",
|
|
978
|
+
payload: result.payload
|
|
979
|
+
});
|
|
980
|
+
if (!gateResult.ok) {
|
|
981
|
+
return {
|
|
982
|
+
valid: false,
|
|
983
|
+
code: gateResult.code,
|
|
984
|
+
message: gateResult.message,
|
|
985
|
+
...gateResult.details !== void 0 && { details: gateResult.details }
|
|
986
|
+
};
|
|
987
|
+
}
|
|
988
|
+
const parsedFromGate = gateResult.parsed;
|
|
989
|
+
if (parsedFromGate === void 0) {
|
|
990
|
+
return {
|
|
991
|
+
valid: false,
|
|
992
|
+
code: "E_INTERNAL",
|
|
993
|
+
message: "Bounded validation gate accepted without surfacing parsed claims"
|
|
994
|
+
};
|
|
995
|
+
}
|
|
996
|
+
pr = {
|
|
997
|
+
ok: true,
|
|
998
|
+
wireVersion: parsedFromGate.wireVersion,
|
|
999
|
+
warnings: parsedFromGate.parserWarnings,
|
|
1000
|
+
claims: parsedFromGate.claims
|
|
888
1001
|
};
|
|
889
1002
|
}
|
|
890
1003
|
if (pr.wireVersion === "0.2") {
|
|
@@ -1001,7 +1114,7 @@ async function verifyLocal(jws, publicKey, options = {}) {
|
|
|
1001
1114
|
...callerBindings?.documents !== void 0 && callerBindings.documents.length > 0 && { documents: callerBindings.documents }
|
|
1002
1115
|
};
|
|
1003
1116
|
const sortedWarnings = sortWarnings(accumulatedWarnings);
|
|
1004
|
-
if (isShadowEnabled(options)) {
|
|
1117
|
+
if (legacyPath && isShadowEnabled(options)) {
|
|
1005
1118
|
const headerSnapshot = { ...result.header };
|
|
1006
1119
|
scheduleShadow({
|
|
1007
1120
|
call: "verifyLocal",
|