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