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