@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.
@@ -1 +1 @@
1
- {"version":3,"file":"verify-local.d.ts","sourceRoot":"","sources":["../src/verify-local.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"verify-local.d.ts","sourceRoot":"","sources":["../src/verify-local.ts"],"names":[],"mappings":"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"}
@@ -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 { accepted: false, errorCode: pr.error.code };
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 { accepted: false, errorCode: "E_UNSUPPORTED_WIRE_VERSION" };
352
+ return {
353
+ accepted: false,
354
+ errorCode: "E_UNSUPPORTED_WIRE_VERSION",
355
+ errorMessage: `Unsupported wire version: ${pr.wireVersion}`
356
+ };
348
357
  }
349
- return { accepted: true, claims: pr.claims };
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
- void readLegacyPathFlag(options);
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
- const constraintResult = validateKernelConstraints(result.payload);
873
- if (!constraintResult.valid) {
874
- const v = constraintResult.violations[0];
875
- return {
876
- valid: false,
877
- code: "E_CONSTRAINT_VIOLATION",
878
- message: `Kernel constraint violated: ${v.constraint} (actual: ${v.actual}, limit: ${v.limit})`
879
- };
880
- }
881
- const pr = parseReceiptClaims(result.payload);
882
- if (!pr.ok) {
883
- return {
884
- valid: false,
885
- code: "E_INVALID_FORMAT",
886
- message: `Receipt schema validation failed: ${pr.error.message}`,
887
- details: { parse_code: pr.error.code, issues: sanitizeParseIssues(pr.error.issues) }
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",