@peac/schema 0.12.0 → 0.12.2

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.
Files changed (76) hide show
  1. package/dist/actor-binding.d.ts +10 -10
  2. package/dist/agent-identity.d.ts +8 -6
  3. package/dist/agent-identity.d.ts.map +1 -1
  4. package/dist/carrier.d.ts +7 -7
  5. package/dist/carrier.d.ts.map +1 -1
  6. package/dist/constraints.d.ts +4 -4
  7. package/dist/constraints.d.ts.map +1 -1
  8. package/dist/extensions/control-action.d.ts +1 -1
  9. package/dist/extensions/credential-event.d.ts +4 -4
  10. package/dist/extensions/fingerprint-ref.d.ts +1 -1
  11. package/dist/extensions/index.d.ts +1 -1
  12. package/dist/extensions/tool-registry.d.ts +1 -1
  13. package/dist/extensions/treaty.d.ts +2 -2
  14. package/dist/index.cjs +733 -44
  15. package/dist/index.cjs.map +1 -1
  16. package/dist/index.d.ts +3 -3
  17. package/dist/index.d.ts.map +1 -1
  18. package/dist/index.mjs +684 -46
  19. package/dist/index.mjs.map +1 -1
  20. package/dist/issuer-config.d.ts +1 -1
  21. package/dist/policy-binding.d.ts +2 -2
  22. package/dist/receipt-parser.cjs +626 -14
  23. package/dist/receipt-parser.cjs.map +1 -1
  24. package/dist/receipt-parser.mjs +627 -15
  25. package/dist/receipt-parser.mjs.map +1 -1
  26. package/dist/subject.d.ts +33 -12
  27. package/dist/subject.d.ts.map +1 -1
  28. package/dist/types.d.ts +1 -1
  29. package/dist/types.d.ts.map +1 -1
  30. package/dist/wire-02-envelope.d.ts +2 -2
  31. package/dist/wire-02-extensions/access.d.ts +19 -0
  32. package/dist/wire-02-extensions/access.d.ts.map +1 -0
  33. package/dist/wire-02-extensions/accessors.d.ts +44 -0
  34. package/dist/wire-02-extensions/accessors.d.ts.map +1 -0
  35. package/dist/wire-02-extensions/attribution.d.ts +44 -0
  36. package/dist/wire-02-extensions/attribution.d.ts.map +1 -0
  37. package/dist/wire-02-extensions/challenge.d.ts +60 -0
  38. package/dist/wire-02-extensions/challenge.d.ts.map +1 -0
  39. package/dist/wire-02-extensions/commerce.d.ts +29 -0
  40. package/dist/wire-02-extensions/commerce.d.ts.map +1 -0
  41. package/dist/wire-02-extensions/compliance.d.ts +49 -0
  42. package/dist/wire-02-extensions/compliance.d.ts.map +1 -0
  43. package/dist/wire-02-extensions/consent.d.ts +48 -0
  44. package/dist/wire-02-extensions/consent.d.ts.map +1 -0
  45. package/dist/wire-02-extensions/correlation.d.ts +18 -0
  46. package/dist/wire-02-extensions/correlation.d.ts.map +1 -0
  47. package/dist/wire-02-extensions/grammar.d.ts +40 -0
  48. package/dist/wire-02-extensions/grammar.d.ts.map +1 -0
  49. package/dist/wire-02-extensions/identity.d.ts +13 -0
  50. package/dist/wire-02-extensions/identity.d.ts.map +1 -0
  51. package/dist/wire-02-extensions/index.d.ts +40 -0
  52. package/dist/wire-02-extensions/index.d.ts.map +1 -0
  53. package/dist/wire-02-extensions/limits.d.ts +80 -0
  54. package/dist/wire-02-extensions/limits.d.ts.map +1 -0
  55. package/dist/wire-02-extensions/privacy.d.ts +64 -0
  56. package/dist/wire-02-extensions/privacy.d.ts.map +1 -0
  57. package/dist/wire-02-extensions/provenance.d.ts +58 -0
  58. package/dist/wire-02-extensions/provenance.d.ts.map +1 -0
  59. package/dist/wire-02-extensions/purpose-extension.d.ts +26 -0
  60. package/dist/wire-02-extensions/purpose-extension.d.ts.map +1 -0
  61. package/dist/wire-02-extensions/safety.d.ts +65 -0
  62. package/dist/wire-02-extensions/safety.d.ts.map +1 -0
  63. package/dist/wire-02-extensions/schema-map.d.ts +13 -0
  64. package/dist/wire-02-extensions/schema-map.d.ts.map +1 -0
  65. package/dist/wire-02-extensions/shared-validators.d.ts +192 -0
  66. package/dist/wire-02-extensions/shared-validators.d.ts.map +1 -0
  67. package/dist/wire-02-extensions/validation.d.ts +57 -0
  68. package/dist/wire-02-extensions/validation.d.ts.map +1 -0
  69. package/dist/wire-02-extensions.d.ts +7 -211
  70. package/dist/wire-02-extensions.d.ts.map +1 -1
  71. package/dist/wire-02-registries.d.ts +5 -2
  72. package/dist/wire-02-registries.d.ts.map +1 -1
  73. package/dist/wire-02-representation.d.ts +3 -3
  74. package/dist/wire-02-warnings.d.ts +5 -1
  75. package/dist/wire-02-warnings.d.ts.map +1 -1
  76. package/package.json +2 -2
package/dist/index.mjs CHANGED
@@ -1,5 +1,6 @@
1
1
  import * as kernel from '@peac/kernel';
2
- import { ALGORITHMS, HEADERS, POLICY, ISSUER_CONFIG, DISCOVERY, WIRE_TYPE, TYPE_GRAMMAR, ISS_CANONICAL, POLICY_BLOCK, HASH, OCCURRED_AT_TOLERANCE_SECONDS } from '@peac/kernel';
2
+ import { ALGORITHMS, HEADERS, POLICY, ISSUER_CONFIG, DISCOVERY, WIRE_TYPE, HASH, TYPE_GRAMMAR, ISS_CANONICAL, POLICY_BLOCK, RECEIPT_TYPES, EXTENSION_GROUPS, ERROR_CODES as ERROR_CODES$1, EXTENSION_BUDGET, OCCURRED_AT_TOLERANCE_SECONDS } from '@peac/kernel';
3
+ export { EXTENSION_BUDGET } from '@peac/kernel';
3
4
  import { z } from 'zod';
4
5
 
5
6
  // src/errors.ts
@@ -33,9 +34,9 @@ var ERROR_CODES = {
33
34
  E_WORKFLOW_PARENT_NOT_FOUND: "E_WORKFLOW_PARENT_NOT_FOUND",
34
35
  E_WORKFLOW_SUMMARY_INVALID: "E_WORKFLOW_SUMMARY_INVALID",
35
36
  E_WORKFLOW_CYCLE_DETECTED: "E_WORKFLOW_CYCLE_DETECTED",
36
- // Constraint errors (400, DD-121)
37
+ // Constraint errors (400)
37
38
  E_CONSTRAINT_VIOLATION: "E_CONSTRAINT_VIOLATION",
38
- // Wire 0.2 extension errors (400, DD-153/DD-156)
39
+ // Wire 0.2 extension errors (400/)
39
40
  E_INVALID_EXTENSION_KEY: "E_INVALID_EXTENSION_KEY"
40
41
  };
41
42
  function createPEACError(code, category, severity, retryable, options) {
@@ -303,7 +304,7 @@ var KERNEL_CONSTRAINTS = {
303
304
  MAX_STRING_LENGTH: 65536,
304
305
  /** Maximum total nodes to visit during traversal */
305
306
  MAX_TOTAL_NODES: 1e5,
306
- /** Temporal validity clock skew tolerance in seconds (DD-8) */
307
+ /** Temporal validity clock skew tolerance in seconds */
307
308
  CLOCK_SKEW_SECONDS: 60
308
309
  };
309
310
  function validateKernelConstraints(claims) {
@@ -574,7 +575,10 @@ var BindingDetailsSchema = z.object({
574
575
  signed_at: z.string().datetime()
575
576
  }).strict();
576
577
  var AgentProofSchema = z.object({
577
- /** Proof method used */
578
+ /**
579
+ * Proof method used.
580
+ * @see ProofMethodSchema - deprecated in v0.12.2; will migrate in v0.13.0
581
+ */
578
582
  method: ProofMethodSchema,
579
583
  /** Key ID (matches kid in JWS header or JWKS) */
580
584
  key_id: z.string().min(1).max(256),
@@ -1186,7 +1190,7 @@ var ACTOR_BINDING_EXTENSION_KEY = "org.peacprotocol/actor_binding";
1186
1190
  var ActorBindingSchema = z.object({
1187
1191
  /** Stable actor identifier (opaque, no PII) */
1188
1192
  id: z.string().min(1).max(256),
1189
- /** Proof type from DD-143 multi-root vocabulary */
1193
+ /** Proof type from multi-root vocabulary */
1190
1194
  proof_type: ProofTypeSchema,
1191
1195
  /** URI or hash of external proof artifact */
1192
1196
  proof_ref: z.string().max(2048).optional(),
@@ -1194,7 +1198,7 @@ var ActorBindingSchema = z.object({
1194
1198
  origin: z.string().max(2048).refine(isOriginOnly, {
1195
1199
  message: "origin must be an origin-only URL (scheme + host + optional port; no path, query, or fragment)"
1196
1200
  }),
1197
- /** SHA-256 hash of the intent (hash-first per DD-138) */
1201
+ /** SHA-256 hash of the intent (hash-first per ) */
1198
1202
  intent_hash: z.string().regex(/^sha256:[a-f0-9]{64}$/, {
1199
1203
  message: "intent_hash must match sha256:<64 hex chars>"
1200
1204
  }).optional()
@@ -3102,6 +3106,7 @@ var EXTENSION_LIMITS = {
3102
3106
  maxAmountMinorLength: 64,
3103
3107
  maxReferenceLength: 256,
3104
3108
  maxAssetLength: 256,
3109
+ maxCommerceEventLength: 64,
3105
3110
  // Access
3106
3111
  maxResourceLength: 2048,
3107
3112
  maxActionLength: 256,
@@ -3117,8 +3122,61 @@ var EXTENSION_LIMITS = {
3117
3122
  maxSpanIdLength: 16,
3118
3123
  maxWorkflowIdLength: 256,
3119
3124
  maxParentJtiLength: 256,
3120
- maxDependsOnLength: 64
3125
+ maxDependsOnLength: 64,
3126
+ // Consent
3127
+ maxConsentBasisLength: 128,
3128
+ maxConsentMethodLength: 128,
3129
+ maxDataCategoriesCount: 64,
3130
+ maxDataCategoryLength: 128,
3131
+ maxConsentScopeLength: 256,
3132
+ maxJurisdictionLength: 16,
3133
+ // Compliance
3134
+ maxFrameworkLength: 256,
3135
+ maxAuditRefLength: 256,
3136
+ maxAuditorLength: 256,
3137
+ maxComplianceScopeLength: 512,
3138
+ // Privacy
3139
+ maxDataClassificationLength: 128,
3140
+ maxProcessingBasisLength: 128,
3141
+ maxAnonymizationMethodLength: 128,
3142
+ maxDataSubjectCategoryLength: 128,
3143
+ maxTransferMechanismLength: 128,
3144
+ // Safety
3145
+ maxAssessmentMethodLength: 256,
3146
+ maxSafetyMeasuresCount: 32,
3147
+ maxSafetyMeasureLength: 256,
3148
+ maxIncidentRefLength: 256,
3149
+ maxModelRefLength: 256,
3150
+ maxSafetyCategoryLength: 128,
3151
+ // Provenance
3152
+ maxSourceTypeLength: 128,
3153
+ maxSourceRefLength: 256,
3154
+ maxVerificationMethodLength: 128,
3155
+ maxCustodyChainCount: 16,
3156
+ maxCustodianLength: 256,
3157
+ maxCustodyActionLength: 128,
3158
+ maxSlsaTrackLength: 64,
3159
+ maxSlsaVersionLength: 16,
3160
+ // Attribution
3161
+ maxCreatorRefLength: 256,
3162
+ maxObligationTypeLength: 128,
3163
+ maxAttributionTextLength: 1024,
3164
+ maxContentSignalSourceLength: 128,
3165
+ // Purpose
3166
+ maxExternalPurposesCount: 32,
3167
+ maxExternalPurposeLength: 128,
3168
+ maxPurposeBasisLength: 128,
3169
+ maxCompatiblePurposesCount: 32,
3170
+ // Shared field bounds
3171
+ maxHttpsUriLength: 2048,
3172
+ maxSha256DigestLength: 71,
3173
+ // "sha256:" (7) + 64 hex = 71 chars
3174
+ maxIso8601DurationLength: 64,
3175
+ maxIso8601DateLength: 10,
3176
+ maxSpdxExpressionLength: 128
3121
3177
  };
3178
+
3179
+ // src/wire-02-extensions/grammar.ts
3122
3180
  var DNS_LABEL = /^[a-z0-9](?:[a-z0-9-]*[a-z0-9])?$/;
3123
3181
  var SEGMENT_PATTERN = /^[a-z0-9][a-z0-9_-]*$/;
3124
3182
  function isValidExtensionKey(key) {
@@ -3138,11 +3196,6 @@ function isValidExtensionKey(key) {
3138
3196
  }
3139
3197
  return true;
3140
3198
  }
3141
- var COMMERCE_EXTENSION_KEY = "org.peacprotocol/commerce";
3142
- var ACCESS_EXTENSION_KEY = "org.peacprotocol/access";
3143
- var CHALLENGE_EXTENSION_KEY = "org.peacprotocol/challenge";
3144
- var IDENTITY_EXTENSION_KEY = "org.peacprotocol/identity";
3145
- var CORRELATION_EXTENSION_KEY = "org.peacprotocol/correlation";
3146
3199
  function escapePointerSegment(s) {
3147
3200
  return s.replace(/~/g, "~0").replace(/\//g, "~1");
3148
3201
  }
@@ -3151,6 +3204,7 @@ function zodPathToPointer(groupKey, zodPath) {
3151
3204
  const segments = zodPath.map((s) => escapePointerSegment(String(s)));
3152
3205
  return `/extensions/${escaped}` + (segments.length > 0 ? "/" + segments.join("/") : "");
3153
3206
  }
3207
+ var COMMERCE_EXTENSION_KEY = "org.peacprotocol/commerce";
3154
3208
  var AMOUNT_MINOR_PATTERN = /^-?[0-9]+$/;
3155
3209
  var CommerceExtensionSchema = z.object({
3156
3210
  /** Payment rail identifier (e.g., 'stripe', 'x402', 'lightning') */
@@ -3171,8 +3225,11 @@ var CommerceExtensionSchema = z.object({
3171
3225
  /** Asset identifier for non-fiat (e.g., token address) */
3172
3226
  asset: z.string().max(EXTENSION_LIMITS.maxAssetLength).optional(),
3173
3227
  /** Environment discriminant */
3174
- env: z.enum(["live", "test"]).optional()
3228
+ env: z.enum(["live", "test"]).optional(),
3229
+ /** Commerce lifecycle phase. Observational metadata only: does not encode settlement finality or protocol state transitions */
3230
+ event: z.enum(["authorization", "capture", "settlement", "refund", "void", "chargeback"]).optional()
3175
3231
  }).strict();
3232
+ var ACCESS_EXTENSION_KEY = "org.peacprotocol/access";
3176
3233
  var AccessExtensionSchema = z.object({
3177
3234
  /** Resource being accessed (URI or identifier) */
3178
3235
  resource: z.string().min(1).max(EXTENSION_LIMITS.maxResourceLength),
@@ -3181,6 +3238,7 @@ var AccessExtensionSchema = z.object({
3181
3238
  /** Access decision */
3182
3239
  decision: z.enum(["allow", "deny", "review"])
3183
3240
  }).strict();
3241
+ var CHALLENGE_EXTENSION_KEY = "org.peacprotocol/challenge";
3184
3242
  var CHALLENGE_TYPES = [
3185
3243
  "payment_required",
3186
3244
  "identity_required",
@@ -3215,10 +3273,12 @@ var ChallengeExtensionSchema = z.object({
3215
3273
  /** Caller-defined requirements for resolving the challenge */
3216
3274
  requirements: z.record(z.string(), z.unknown()).optional()
3217
3275
  }).strict();
3276
+ var IDENTITY_EXTENSION_KEY = "org.peacprotocol/identity";
3218
3277
  var IdentityExtensionSchema = z.object({
3219
3278
  /** Proof reference (opaque string; no actor_binding: top-level actor is sole location) */
3220
3279
  proof_ref: z.string().max(EXTENSION_LIMITS.maxProofRefLength).optional()
3221
3280
  }).strict();
3281
+ var CORRELATION_EXTENSION_KEY = "org.peacprotocol/correlation";
3222
3282
  var TRACE_ID_PATTERN = /^[0-9a-f]{32}$/;
3223
3283
  var SPAN_ID_PATTERN = /^[0-9a-f]{16}$/;
3224
3284
  var CorrelationExtensionSchema = z.object({
@@ -3233,12 +3293,497 @@ var CorrelationExtensionSchema = z.object({
3233
3293
  /** JTIs this receipt depends on */
3234
3294
  depends_on: z.array(z.string().min(1).max(EXTENSION_LIMITS.maxParentJtiLength)).max(EXTENSION_LIMITS.maxDependsOnLength).optional()
3235
3295
  }).strict();
3236
- var EXTENSION_SCHEMA_MAP = /* @__PURE__ */ new Map();
3237
- EXTENSION_SCHEMA_MAP.set(COMMERCE_EXTENSION_KEY, CommerceExtensionSchema);
3238
- EXTENSION_SCHEMA_MAP.set(ACCESS_EXTENSION_KEY, AccessExtensionSchema);
3239
- EXTENSION_SCHEMA_MAP.set(CHALLENGE_EXTENSION_KEY, ChallengeExtensionSchema);
3240
- EXTENSION_SCHEMA_MAP.set(IDENTITY_EXTENSION_KEY, IdentityExtensionSchema);
3241
- EXTENSION_SCHEMA_MAP.set(CORRELATION_EXTENSION_KEY, CorrelationExtensionSchema);
3296
+ var Sha256DigestSchema = z.string().max(71).regex(HASH.pattern, "must be a valid SHA-256 digest (sha256:<64 lowercase hex>)");
3297
+ var CONTROL_CHAR_PATTERN = /[\x00-\x1f\x7f]/;
3298
+ var HttpsUriHintSchema = z.string().min(1).max(2048).refine(
3299
+ (value) => {
3300
+ if (CONTROL_CHAR_PATTERN.test(value)) return false;
3301
+ if (value.includes("#")) return false;
3302
+ try {
3303
+ const url = new URL(value);
3304
+ if (url.protocol !== "https:") return false;
3305
+ if (url.username !== "" || url.password !== "") return false;
3306
+ if (!url.hostname) return false;
3307
+ return true;
3308
+ } catch {
3309
+ return false;
3310
+ }
3311
+ },
3312
+ {
3313
+ message: "must be a valid HTTPS URI (no credentials, no fragments, no control characters)"
3314
+ }
3315
+ );
3316
+ var DATE_DESIGNATOR_ORDER = ["Y", "M", "W", "D"];
3317
+ var TIME_DESIGNATOR_ORDER = ["H", "M", "S"];
3318
+ function parseIso8601Duration(value) {
3319
+ if (typeof value !== "string" || value.length === 0 || value.length > 64) {
3320
+ return null;
3321
+ }
3322
+ if (value.charAt(0) !== "P") return null;
3323
+ let pos = 1;
3324
+ const len = value.length;
3325
+ if (pos >= len) return null;
3326
+ const result = {
3327
+ years: 0,
3328
+ months: 0,
3329
+ weeks: 0,
3330
+ days: 0,
3331
+ hours: 0,
3332
+ minutes: 0,
3333
+ seconds: 0
3334
+ };
3335
+ let inTimePart = false;
3336
+ let hasAnyComponent = false;
3337
+ const seenDesignators = /* @__PURE__ */ new Set();
3338
+ let dateOrderIdx = 0;
3339
+ let timeOrderIdx = 0;
3340
+ while (pos < len) {
3341
+ if (value.charAt(pos) === "T") {
3342
+ if (inTimePart) return null;
3343
+ inTimePart = true;
3344
+ pos++;
3345
+ if (pos >= len) return null;
3346
+ continue;
3347
+ }
3348
+ const numStart = pos;
3349
+ while (pos < len && value.charAt(pos) >= "0" && value.charAt(pos) <= "9") {
3350
+ pos++;
3351
+ }
3352
+ if (pos === numStart) return null;
3353
+ const digits = value.slice(numStart, pos);
3354
+ if (digits.length > 15) return null;
3355
+ const num = parseInt(digits, 10);
3356
+ if (!Number.isFinite(num) || num < 0) return null;
3357
+ if (pos >= len) return null;
3358
+ const designator = value.charAt(pos);
3359
+ pos++;
3360
+ const designatorKey = (inTimePart ? "T" : "") + designator;
3361
+ if (seenDesignators.has(designatorKey)) return null;
3362
+ seenDesignators.add(designatorKey);
3363
+ if (inTimePart) {
3364
+ const timeIdx = TIME_DESIGNATOR_ORDER.indexOf(designator);
3365
+ if (timeIdx === -1) return null;
3366
+ if (timeIdx < timeOrderIdx) return null;
3367
+ timeOrderIdx = timeIdx + 1;
3368
+ switch (designator) {
3369
+ case "H":
3370
+ result.hours = num;
3371
+ break;
3372
+ case "M":
3373
+ result.minutes = num;
3374
+ break;
3375
+ case "S":
3376
+ result.seconds = num;
3377
+ break;
3378
+ }
3379
+ } else {
3380
+ const dateIdx = DATE_DESIGNATOR_ORDER.indexOf(designator);
3381
+ if (dateIdx === -1) return null;
3382
+ if (dateIdx < dateOrderIdx) return null;
3383
+ dateOrderIdx = dateIdx + 1;
3384
+ switch (designator) {
3385
+ case "Y":
3386
+ result.years = num;
3387
+ break;
3388
+ case "M":
3389
+ result.months = num;
3390
+ break;
3391
+ case "W":
3392
+ result.weeks = num;
3393
+ break;
3394
+ case "D":
3395
+ result.days = num;
3396
+ break;
3397
+ }
3398
+ }
3399
+ hasAnyComponent = true;
3400
+ }
3401
+ if (!hasAnyComponent) return null;
3402
+ if (result.weeks > 0 && (result.years > 0 || result.months > 0 || result.days > 0)) {
3403
+ return null;
3404
+ }
3405
+ return result;
3406
+ }
3407
+ var Iso8601DurationSchema = z.string().min(2).max(64).refine((value) => parseIso8601Duration(value) !== null, {
3408
+ message: "must be a valid ISO 8601 duration (e.g., P30D, P1Y6M, PT1H30M)"
3409
+ });
3410
+ var Iso8601DateStringSchema = z.string().length(10).regex(/^\d{4}-(?:0[1-9]|1[0-2])-(?:0[1-9]|[12]\d|3[01])$/, {
3411
+ message: "must be a structurally valid date string (YYYY-MM-DD)"
3412
+ });
3413
+ var Iso8601DateSchema = Iso8601DateStringSchema;
3414
+ var Iso8601OffsetDateTimeSchema = z.iso.datetime({ offset: true });
3415
+ var RFC3339_SECONDS_PATTERN = /T\d{2}:\d{2}:\d{2}/;
3416
+ var Rfc3339DateTimeSchema = z.iso.datetime({ offset: true }).refine((value) => RFC3339_SECONDS_PATTERN.test(value), {
3417
+ message: "RFC 3339 requires seconds precision (e.g., 2026-03-14T12:00:00Z)"
3418
+ });
3419
+ var Rfc3339TimestampSchema = Iso8601OffsetDateTimeSchema;
3420
+ function isValidSpdxSubsetExpression(expr) {
3421
+ if (typeof expr !== "string" || expr.length === 0 || expr.length > 128) {
3422
+ return false;
3423
+ }
3424
+ const tokens = [];
3425
+ let current = "";
3426
+ for (let i = 0; i < expr.length; i++) {
3427
+ const ch = expr.charAt(i);
3428
+ if (ch === "(" || ch === ")") {
3429
+ if (current.length > 0) {
3430
+ tokens.push(current);
3431
+ current = "";
3432
+ }
3433
+ tokens.push(ch);
3434
+ } else if (ch === " " || ch === " ") {
3435
+ if (current.length > 0) {
3436
+ tokens.push(current);
3437
+ current = "";
3438
+ }
3439
+ } else {
3440
+ current += ch;
3441
+ }
3442
+ }
3443
+ if (current.length > 0) {
3444
+ tokens.push(current);
3445
+ }
3446
+ if (tokens.length === 0) return false;
3447
+ let pos = 0;
3448
+ function peek() {
3449
+ return tokens[pos];
3450
+ }
3451
+ function advance() {
3452
+ return tokens[pos++];
3453
+ }
3454
+ function isLicenseId(token) {
3455
+ const base = token.endsWith("+") ? token.slice(0, -1) : token;
3456
+ if (base.length === 0) return false;
3457
+ if (base.startsWith("LicenseRef-")) {
3458
+ const ref = base.slice(11);
3459
+ return ref.length > 0 && /^[A-Za-z0-9][A-Za-z0-9._-]*$/.test(ref);
3460
+ }
3461
+ return /^[A-Za-z0-9][A-Za-z0-9._-]*$/.test(base);
3462
+ }
3463
+ function isExceptionId(token) {
3464
+ return /^[A-Za-z0-9][A-Za-z0-9._-]*$/.test(token);
3465
+ }
3466
+ function parseExpr() {
3467
+ if (!parseTerm()) return false;
3468
+ while (pos < tokens.length) {
3469
+ const op = peek();
3470
+ if (op === "AND" || op === "OR") {
3471
+ advance();
3472
+ if (!parseTerm()) return false;
3473
+ } else {
3474
+ break;
3475
+ }
3476
+ }
3477
+ return true;
3478
+ }
3479
+ function parseTerm() {
3480
+ if (!parseAtom()) return false;
3481
+ if (peek() === "WITH") {
3482
+ advance();
3483
+ const exception = peek();
3484
+ if (exception === void 0 || !isExceptionId(exception)) return false;
3485
+ advance();
3486
+ }
3487
+ return true;
3488
+ }
3489
+ function parseAtom() {
3490
+ const token = peek();
3491
+ if (token === void 0) return false;
3492
+ if (token === "(") {
3493
+ advance();
3494
+ if (!parseExpr()) return false;
3495
+ if (peek() !== ")") return false;
3496
+ advance();
3497
+ return true;
3498
+ }
3499
+ if (token === ")" || token === "AND" || token === "OR" || token === "WITH") {
3500
+ return false;
3501
+ }
3502
+ if (!isLicenseId(token)) return false;
3503
+ advance();
3504
+ return true;
3505
+ }
3506
+ const result = parseExpr();
3507
+ return result && pos === tokens.length;
3508
+ }
3509
+ var SpdxExpressionSchema = z.string().min(1).max(128).refine(isValidSpdxSubsetExpression, {
3510
+ message: "must be a valid SPDX license expression (e.g., MIT, Apache-2.0, MIT AND Apache-2.0). DocumentRef-* not yet supported."
3511
+ });
3512
+
3513
+ // src/wire-02-extensions/consent.ts
3514
+ var CONSENT_EXTENSION_KEY = "org.peacprotocol/consent";
3515
+ var CONSENT_STATUSES = ["granted", "withdrawn", "denied", "expired"];
3516
+ var ConsentStatusSchema = z.enum(CONSENT_STATUSES);
3517
+ var ConsentExtensionSchema = z.object({
3518
+ /**
3519
+ * Legal basis identifier for consent.
3520
+ * Open string: jurisdictions define different bases
3521
+ * (e.g., explicit, implied, opt_out, legitimate_interest, contractual, legal_obligation).
3522
+ */
3523
+ consent_basis: z.string().min(1).max(EXTENSION_LIMITS.maxConsentBasisLength),
3524
+ /** Consent lifecycle state (closed vocabulary) */
3525
+ consent_status: ConsentStatusSchema,
3526
+ /**
3527
+ * Data categories covered by this consent.
3528
+ * Open vocabulary (e.g., personal, sensitive, biometric).
3529
+ */
3530
+ data_categories: z.array(z.string().min(1).max(EXTENSION_LIMITS.maxDataCategoryLength)).max(EXTENSION_LIMITS.maxDataCategoriesCount).optional(),
3531
+ /** Data retention period as ISO 8601 duration. */
3532
+ retention_period: Iso8601DurationSchema.optional(),
3533
+ /**
3534
+ * How consent was collected.
3535
+ * Open vocabulary (e.g., click_through, double_opt_in, verbal, written).
3536
+ */
3537
+ consent_method: z.string().min(1).max(EXTENSION_LIMITS.maxConsentMethodLength).optional(),
3538
+ /**
3539
+ * HTTPS URI hint for consent withdrawal.
3540
+ * Locator hint only: callers MUST NOT auto-fetch.
3541
+ * Rejects non-HTTPS, embedded credentials, fragments, control chars.
3542
+ */
3543
+ withdrawal_uri: HttpsUriHintSchema.optional(),
3544
+ /** Free-text scope description */
3545
+ scope: z.string().min(1).max(EXTENSION_LIMITS.maxConsentScopeLength).optional(),
3546
+ /**
3547
+ * Jurisdiction code: ISO 3166-1 alpha-2 or composite.
3548
+ * Examples: EU, US-CA, BR, GB, DE, JP, IN.
3549
+ */
3550
+ jurisdiction: z.string().min(1).max(EXTENSION_LIMITS.maxJurisdictionLength).optional()
3551
+ }).strict();
3552
+ var PRIVACY_EXTENSION_KEY = "org.peacprotocol/privacy";
3553
+ var RETENTION_MODES = ["time_bound", "indefinite", "session_only"];
3554
+ var RetentionModeSchema = z.enum(RETENTION_MODES);
3555
+ var RECIPIENT_SCOPES = ["internal", "processor", "third_party", "public"];
3556
+ var RecipientScopeSchema = z.enum(RECIPIENT_SCOPES);
3557
+ var PrivacyExtensionSchema = z.object({
3558
+ /**
3559
+ * Data classification level.
3560
+ * Open taxonomy (e.g., public, internal, confidential, restricted, pii, sensitive_pii).
3561
+ */
3562
+ data_classification: z.string().min(1).max(EXTENSION_LIMITS.maxDataClassificationLength),
3563
+ /**
3564
+ * Legal basis for data processing.
3565
+ * Open vocabulary (e.g., consent, legitimate_interest, contract, legal_obligation).
3566
+ */
3567
+ processing_basis: z.string().min(1).max(EXTENSION_LIMITS.maxProcessingBasisLength).optional(),
3568
+ /**
3569
+ * Data retention period as ISO 8601 duration.
3570
+ * For non-duration retention semantics, use retention_mode instead.
3571
+ */
3572
+ retention_period: Iso8601DurationSchema.optional(),
3573
+ /**
3574
+ * Retention mode for non-duration semantics.
3575
+ * Closed enum: time_bound, indefinite, session_only.
3576
+ * When time_bound, retention_period SHOULD also be present.
3577
+ */
3578
+ retention_mode: RetentionModeSchema.optional(),
3579
+ /**
3580
+ * Data recipient classification.
3581
+ * Closed enum aligned with GDPR Art 13-14 disclosure categories.
3582
+ */
3583
+ recipient_scope: RecipientScopeSchema.optional(),
3584
+ /**
3585
+ * Anonymization or pseudonymization method applied.
3586
+ * Open vocabulary (e.g., k_anonymity, differential_privacy, pseudonymization,
3587
+ * tokenization, aggregation).
3588
+ */
3589
+ anonymization_method: z.string().min(1).max(EXTENSION_LIMITS.maxAnonymizationMethodLength).optional(),
3590
+ /**
3591
+ * Data subject category.
3592
+ * Open vocabulary (e.g., customer, employee, minor, patient, student).
3593
+ */
3594
+ data_subject_category: z.string().min(1).max(EXTENSION_LIMITS.maxDataSubjectCategoryLength).optional(),
3595
+ /**
3596
+ * Cross-border data transfer mechanism.
3597
+ * Open vocabulary (e.g., adequacy_decision, scc, bcr, derogation, consent).
3598
+ */
3599
+ transfer_mechanism: z.string().min(1).max(EXTENSION_LIMITS.maxTransferMechanismLength).optional()
3600
+ }).strict();
3601
+ var SAFETY_EXTENSION_KEY = "org.peacprotocol/safety";
3602
+ var REVIEW_STATUSES = ["reviewed", "pending", "flagged", "not_applicable"];
3603
+ var ReviewStatusSchema = z.enum(REVIEW_STATUSES);
3604
+ var RISK_LEVELS = ["unacceptable", "high", "limited", "minimal"];
3605
+ var RiskLevelSchema = z.enum(RISK_LEVELS);
3606
+ var SafetyExtensionSchema = z.object({
3607
+ /** Safety review status (closed vocabulary, universal lifecycle) */
3608
+ review_status: ReviewStatusSchema,
3609
+ /**
3610
+ * Risk classification level.
3611
+ * Optional at schema level; usage profiles may require it.
3612
+ * Converges across EU AI Act Art 6, NIST AI RMF, ISO 23894.
3613
+ */
3614
+ risk_level: RiskLevelSchema.optional(),
3615
+ /**
3616
+ * Assessment method used.
3617
+ * Open vocabulary (e.g., automated_scan, human_review, red_team,
3618
+ * penetration_test, static_analysis, model_evaluation).
3619
+ */
3620
+ assessment_method: z.string().min(1).max(EXTENSION_LIMITS.maxAssessmentMethodLength).optional(),
3621
+ /**
3622
+ * Safety measures applied.
3623
+ * Open vocabulary. Array bounded by maxSafetyMeasuresCount.
3624
+ */
3625
+ safety_measures: z.array(z.string().min(1).max(EXTENSION_LIMITS.maxSafetyMeasureLength)).max(EXTENSION_LIMITS.maxSafetyMeasuresCount).optional(),
3626
+ /** Incident report reference. Opaque identifier (e.g., ticket ID or digest). */
3627
+ incident_ref: z.string().min(1).max(EXTENSION_LIMITS.maxIncidentRefLength).optional(),
3628
+ /** AI model reference. Opaque identifier (e.g., model version string). */
3629
+ model_ref: z.string().min(1).max(EXTENSION_LIMITS.maxModelRefLength).optional(),
3630
+ /**
3631
+ * Safety category.
3632
+ * Open vocabulary (e.g., content_safety, bias, hallucination,
3633
+ * toxicity, fairness, robustness, privacy_risk).
3634
+ */
3635
+ category: z.string().min(1).max(EXTENSION_LIMITS.maxSafetyCategoryLength).optional()
3636
+ }).strict();
3637
+ var COMPLIANCE_EXTENSION_KEY = "org.peacprotocol/compliance";
3638
+ var COMPLIANCE_STATUSES = [
3639
+ "compliant",
3640
+ "non_compliant",
3641
+ "partial",
3642
+ "under_review",
3643
+ "exempt"
3644
+ ];
3645
+ var ComplianceStatusSchema = z.enum(COMPLIANCE_STATUSES);
3646
+ var ComplianceExtensionSchema = z.object({
3647
+ /**
3648
+ * Framework identifier evaluated.
3649
+ * Open string: preferred grammar is lowercase slugs with hyphens
3650
+ * (e.g., eu-ai-act, soc2-type2, iso-27001, nist-ai-rmf, gdpr, hipaa).
3651
+ */
3652
+ framework: z.string().min(1).max(EXTENSION_LIMITS.maxFrameworkLength),
3653
+ /** Observed compliance status (closed vocabulary) */
3654
+ compliance_status: ComplianceStatusSchema,
3655
+ /** Opaque reference to audit report or evidence (e.g., report ID, ticket number). */
3656
+ audit_ref: z.string().min(1).max(EXTENSION_LIMITS.maxAuditRefLength).optional(),
3657
+ /** Auditor identifier (organization name or DID). */
3658
+ auditor: z.string().min(1).max(EXTENSION_LIMITS.maxAuditorLength).optional(),
3659
+ /** Date the compliance check was performed (YYYY-MM-DD). */
3660
+ audit_date: Iso8601DateStringSchema.optional(),
3661
+ /** Scope of the compliance check. */
3662
+ scope: z.string().min(1).max(EXTENSION_LIMITS.maxComplianceScopeLength).optional(),
3663
+ /** How long this finding remains valid as an ISO 8601 duration. */
3664
+ validity_period: Iso8601DurationSchema.optional(),
3665
+ /** SHA-256 digest of supporting evidence document. */
3666
+ evidence_ref: Sha256DigestSchema.optional()
3667
+ }).strict();
3668
+ var PROVENANCE_EXTENSION_KEY = "org.peacprotocol/provenance";
3669
+ var CustodyEntrySchema = z.object({
3670
+ /** Custodian identifier (organization name, DID, or opaque ID). */
3671
+ custodian: z.string().min(1).max(EXTENSION_LIMITS.maxCustodianLength),
3672
+ /** Action performed (e.g., received, transformed, verified, released). */
3673
+ action: z.string().min(1).max(EXTENSION_LIMITS.maxCustodyActionLength),
3674
+ /** When the custody event occurred (RFC 3339 with seconds). */
3675
+ timestamp: Rfc3339DateTimeSchema
3676
+ }).strict();
3677
+ var SlsaLevelSchema = z.object({
3678
+ /** SLSA track identifier (e.g., build, source). */
3679
+ track: z.string().min(1).max(EXTENSION_LIMITS.maxSlsaTrackLength),
3680
+ /** SLSA level within the track (0-4). */
3681
+ level: z.number().int().min(0).max(4),
3682
+ /** SLSA spec version this metadata references (e.g., 1.0, 1.2). */
3683
+ version: z.string().min(1).max(EXTENSION_LIMITS.maxSlsaVersionLength)
3684
+ }).strict();
3685
+ var ProvenanceExtensionSchema = z.object({
3686
+ /**
3687
+ * Type of source or derivation.
3688
+ * Open vocabulary (e.g., original, derived, curated, synthetic, aggregated, transformed).
3689
+ */
3690
+ source_type: z.string().min(1).max(EXTENSION_LIMITS.maxSourceTypeLength),
3691
+ /** Opaque source reference identifier (e.g., commit hash, artifact ID). */
3692
+ source_ref: z.string().min(1).max(EXTENSION_LIMITS.maxSourceRefLength).optional(),
3693
+ /**
3694
+ * HTTPS URI hint for the source artifact.
3695
+ * Locator hint only: callers MUST NOT auto-fetch.
3696
+ */
3697
+ source_uri: HttpsUriHintSchema.optional(),
3698
+ /**
3699
+ * HTTPS URI hint for build provenance metadata.
3700
+ * Locator hint only: callers MUST NOT auto-fetch.
3701
+ */
3702
+ build_provenance_uri: HttpsUriHintSchema.optional(),
3703
+ /**
3704
+ * How provenance was verified.
3705
+ * Open vocabulary (e.g., signature_check, hash_chain,
3706
+ * manual_attestation, transparency_log).
3707
+ */
3708
+ verification_method: z.string().min(1).max(EXTENSION_LIMITS.maxVerificationMethodLength).optional(),
3709
+ /**
3710
+ * Ordered custody chain entries.
3711
+ * Each entry records a custodian, action, and timestamp.
3712
+ */
3713
+ custody_chain: z.array(CustodyEntrySchema).max(EXTENSION_LIMITS.maxCustodyChainCount).optional(),
3714
+ /**
3715
+ * Structured SLSA-aligned provenance metadata.
3716
+ * Records track, level, and spec version.
3717
+ */
3718
+ slsa: SlsaLevelSchema.optional()
3719
+ }).strict();
3720
+ var ATTRIBUTION_EXTENSION_KEY = "org.peacprotocol/attribution";
3721
+ var CONTENT_SIGNAL_SOURCES = [
3722
+ "tdmrep_json",
3723
+ "content_signal_header",
3724
+ "content_usage_header",
3725
+ "robots_txt",
3726
+ "custom"
3727
+ ];
3728
+ var ContentSignalSourceSchema = z.enum(CONTENT_SIGNAL_SOURCES);
3729
+ var AttributionExtensionSchema = z.object({
3730
+ /**
3731
+ * Creator identifier (DID, URI, or opaque ID).
3732
+ * Not an identity attestation; records observed attribution metadata.
3733
+ */
3734
+ creator_ref: z.string().min(1).max(EXTENSION_LIMITS.maxCreatorRefLength),
3735
+ /** SPDX license expression (parser-grade structural subset validator). */
3736
+ license_spdx: SpdxExpressionSchema.optional(),
3737
+ /**
3738
+ * Obligation type.
3739
+ * Open vocabulary (e.g., attribution_required, share_alike, non_commercial).
3740
+ */
3741
+ obligation_type: z.string().min(1).max(EXTENSION_LIMITS.maxObligationTypeLength).optional(),
3742
+ /** Required attribution text. */
3743
+ attribution_text: z.string().min(1).max(EXTENSION_LIMITS.maxAttributionTextLength).optional(),
3744
+ /** Content signal observation source (closed vocabulary). */
3745
+ content_signal_source: ContentSignalSourceSchema.optional(),
3746
+ /** SHA-256 digest of the attributed content. */
3747
+ content_digest: Sha256DigestSchema.optional()
3748
+ }).strict();
3749
+ var PURPOSE_EXTENSION_KEY = "org.peacprotocol/purpose";
3750
+ var MachineSafePurposeTokenSchema = z.string().min(1).max(EXTENSION_LIMITS.maxExternalPurposeLength).regex(PURPOSE_TOKEN_REGEX, "must be a machine-safe lowercase token");
3751
+ function hasUniqueItems(items) {
3752
+ return new Set(items).size === items.length;
3753
+ }
3754
+ var PurposeExtensionSchema = z.object({
3755
+ /**
3756
+ * External/legal/business purpose labels.
3757
+ * Machine-safe tokens: lowercase alphanumeric with underscores, hyphens,
3758
+ * and optional vendor prefix (e.g., ai_training, analytics, marketing).
3759
+ * Not PEAC operational tokens; use peac_purpose_mapping for bridging.
3760
+ * Items must be unique.
3761
+ */
3762
+ external_purposes: z.array(MachineSafePurposeTokenSchema).min(1).max(EXTENSION_LIMITS.maxExternalPurposesCount).refine(hasUniqueItems, { message: "external_purposes must contain unique items" }),
3763
+ /**
3764
+ * Legal or policy basis for the declared purposes.
3765
+ * Open vocabulary (e.g., consent, legitimate_interest, contract).
3766
+ */
3767
+ purpose_basis: z.string().min(1).max(EXTENSION_LIMITS.maxPurposeBasisLength).optional(),
3768
+ /** Whether purpose limitation applies. */
3769
+ purpose_limitation: z.boolean().optional(),
3770
+ /** Whether data minimization was applied. */
3771
+ data_minimization: z.boolean().optional(),
3772
+ /**
3773
+ * Compatible purposes for secondary use.
3774
+ * Same machine-safe token grammar as external_purposes.
3775
+ * Items must be unique.
3776
+ */
3777
+ compatible_purposes: z.array(MachineSafePurposeTokenSchema).max(EXTENSION_LIMITS.maxCompatiblePurposesCount).refine(hasUniqueItems, { message: "compatible_purposes must contain unique items" }).optional(),
3778
+ /**
3779
+ * Explicit mapping to a PEAC operational CanonicalPurpose token.
3780
+ * Validated against PURPOSE_TOKEN_REGEX from purpose.ts.
3781
+ * Bridges external purpose vocabulary to operational tokens.
3782
+ */
3783
+ peac_purpose_mapping: z.string().min(1).max(MAX_PURPOSE_TOKEN_LENGTH).regex(PURPOSE_TOKEN_REGEX, "must be a valid PEAC purpose token").optional()
3784
+ }).strict();
3785
+
3786
+ // src/wire-02-extensions/accessors.ts
3242
3787
  function getExtension(extensions, key, schema) {
3243
3788
  if (extensions === void 0) return void 0;
3244
3789
  if (!Object.prototype.hasOwnProperty.call(extensions, key)) return void 0;
@@ -3274,9 +3819,88 @@ function getIdentityExtension(extensions) {
3274
3819
  function getCorrelationExtension(extensions) {
3275
3820
  return getExtension(extensions, CORRELATION_EXTENSION_KEY, CorrelationExtensionSchema);
3276
3821
  }
3822
+ function getConsentExtension(extensions) {
3823
+ return getExtension(extensions, CONSENT_EXTENSION_KEY, ConsentExtensionSchema);
3824
+ }
3825
+ function getPrivacyExtension(extensions) {
3826
+ return getExtension(extensions, PRIVACY_EXTENSION_KEY, PrivacyExtensionSchema);
3827
+ }
3828
+ function getSafetyExtension(extensions) {
3829
+ return getExtension(extensions, SAFETY_EXTENSION_KEY, SafetyExtensionSchema);
3830
+ }
3831
+ function getComplianceExtension(extensions) {
3832
+ return getExtension(extensions, COMPLIANCE_EXTENSION_KEY, ComplianceExtensionSchema);
3833
+ }
3834
+ function getProvenanceExtension(extensions) {
3835
+ return getExtension(extensions, PROVENANCE_EXTENSION_KEY, ProvenanceExtensionSchema);
3836
+ }
3837
+ function getAttributionExtension(extensions) {
3838
+ return getExtension(extensions, ATTRIBUTION_EXTENSION_KEY, AttributionExtensionSchema);
3839
+ }
3840
+ function getPurposeExtension(extensions) {
3841
+ return getExtension(extensions, PURPOSE_EXTENSION_KEY, PurposeExtensionSchema);
3842
+ }
3843
+
3844
+ // src/wire-02-extensions/schema-map.ts
3845
+ var EXTENSION_SCHEMA_MAP = /* @__PURE__ */ new Map();
3846
+ EXTENSION_SCHEMA_MAP.set(COMMERCE_EXTENSION_KEY, CommerceExtensionSchema);
3847
+ EXTENSION_SCHEMA_MAP.set(ACCESS_EXTENSION_KEY, AccessExtensionSchema);
3848
+ EXTENSION_SCHEMA_MAP.set(CHALLENGE_EXTENSION_KEY, ChallengeExtensionSchema);
3849
+ EXTENSION_SCHEMA_MAP.set(IDENTITY_EXTENSION_KEY, IdentityExtensionSchema);
3850
+ EXTENSION_SCHEMA_MAP.set(CORRELATION_EXTENSION_KEY, CorrelationExtensionSchema);
3851
+ EXTENSION_SCHEMA_MAP.set(CONSENT_EXTENSION_KEY, ConsentExtensionSchema);
3852
+ EXTENSION_SCHEMA_MAP.set(PRIVACY_EXTENSION_KEY, PrivacyExtensionSchema);
3853
+ EXTENSION_SCHEMA_MAP.set(SAFETY_EXTENSION_KEY, SafetyExtensionSchema);
3854
+ EXTENSION_SCHEMA_MAP.set(COMPLIANCE_EXTENSION_KEY, ComplianceExtensionSchema);
3855
+ EXTENSION_SCHEMA_MAP.set(PROVENANCE_EXTENSION_KEY, ProvenanceExtensionSchema);
3856
+ EXTENSION_SCHEMA_MAP.set(ATTRIBUTION_EXTENSION_KEY, AttributionExtensionSchema);
3857
+ EXTENSION_SCHEMA_MAP.set(PURPOSE_EXTENSION_KEY, PurposeExtensionSchema);
3858
+
3859
+ // src/wire-02-extensions/validation.ts
3860
+ var textEncoder = new TextEncoder();
3861
+ function jsonUtf8ByteLength(value) {
3862
+ try {
3863
+ return textEncoder.encode(JSON.stringify(value)).byteLength;
3864
+ } catch {
3865
+ return Infinity;
3866
+ }
3867
+ }
3868
+ var MAX_JSON_GUARD_DEPTH = 64;
3869
+ function isPlainJsonValueRecursive(value, depth, seen) {
3870
+ if (depth > MAX_JSON_GUARD_DEPTH) return false;
3871
+ if (value === null) return true;
3872
+ const t = typeof value;
3873
+ if (t === "string" || t === "boolean") return true;
3874
+ if (t === "number") return Number.isFinite(value);
3875
+ if (t === "function" || t === "symbol" || t === "bigint" || t === "undefined") return false;
3876
+ if (t !== "object") return false;
3877
+ const obj = value;
3878
+ if (seen.has(obj)) return false;
3879
+ seen.add(obj);
3880
+ if (Array.isArray(obj)) {
3881
+ for (let i = 0; i < obj.length; i++) {
3882
+ if (!isPlainJsonValueRecursive(obj[i], depth + 1, seen)) return false;
3883
+ }
3884
+ return true;
3885
+ }
3886
+ const proto = Object.getPrototypeOf(obj);
3887
+ if (proto !== Object.prototype && proto !== null) return false;
3888
+ if (typeof obj.toJSON === "function") return false;
3889
+ const keys = Object.keys(obj);
3890
+ for (const key of keys) {
3891
+ if (!isPlainJsonValueRecursive(obj[key], depth + 1, seen)) {
3892
+ return false;
3893
+ }
3894
+ }
3895
+ return true;
3896
+ }
3897
+ function isPlainJsonValue(value) {
3898
+ return isPlainJsonValueRecursive(value, 0, /* @__PURE__ */ new WeakSet());
3899
+ }
3277
3900
  function validateKnownExtensions(extensions, ctx) {
3278
3901
  if (extensions === void 0) return;
3279
- for (const key of Object.keys(extensions)) {
3902
+ const keys = Object.keys(extensions);
3903
+ for (const key of keys) {
3280
3904
  if (!isValidExtensionKey(key)) {
3281
3905
  ctx.addIssue({
3282
3906
  code: "custom",
@@ -3285,6 +3909,14 @@ function validateKnownExtensions(extensions, ctx) {
3285
3909
  });
3286
3910
  continue;
3287
3911
  }
3912
+ if (!isPlainJsonValue(extensions[key])) {
3913
+ ctx.addIssue({
3914
+ code: "custom",
3915
+ message: ERROR_CODES$1.E_EXTENSION_NON_JSON_VALUE,
3916
+ path: ["extensions", key]
3917
+ });
3918
+ continue;
3919
+ }
3288
3920
  const schema = EXTENSION_SCHEMA_MAP.get(key);
3289
3921
  if (schema !== void 0) {
3290
3922
  const result = schema.safeParse(extensions[key]);
@@ -3299,6 +3931,25 @@ function validateKnownExtensions(extensions, ctx) {
3299
3931
  }
3300
3932
  }
3301
3933
  }
3934
+ const totalBytes = jsonUtf8ByteLength(extensions);
3935
+ if (totalBytes > EXTENSION_BUDGET.maxTotalBytes) {
3936
+ ctx.addIssue({
3937
+ code: "custom",
3938
+ message: ERROR_CODES$1.E_EXTENSION_SIZE_EXCEEDED,
3939
+ path: ["extensions"]
3940
+ });
3941
+ return;
3942
+ }
3943
+ for (const key of keys) {
3944
+ const groupBytes = jsonUtf8ByteLength(extensions[key]);
3945
+ if (groupBytes > EXTENSION_BUDGET.maxGroupBytes) {
3946
+ ctx.addIssue({
3947
+ code: "custom",
3948
+ message: ERROR_CODES$1.E_EXTENSION_SIZE_EXCEEDED,
3949
+ path: ["extensions", key]
3950
+ });
3951
+ }
3952
+ }
3302
3953
  }
3303
3954
 
3304
3955
  // src/wire-02-envelope.ts
@@ -3376,7 +4027,7 @@ var PolicyBlockSchema = z.object({
3376
4027
  /**
3377
4028
  * HTTPS locator hint for the policy document.
3378
4029
  * MUST be an https:// URL (max 2048 chars).
3379
- * MUST NOT trigger auto-fetch; callers use this as a hint only (DD-55).
4030
+ * MUST NOT trigger auto-fetch; callers use this as a hint only.
3380
4031
  */
3381
4032
  uri: z.string().max(POLICY_BLOCK.uriMaxLength).url().refine((u) => u.startsWith("https://"), "policy.uri must be an https:// URL").optional(),
3382
4033
  /** Caller-assigned version label (max 256 chars) */
@@ -3401,9 +4052,9 @@ var Wire02ClaimsSchema = z.object({
3401
4052
  pillars: PillarsSchema.optional(),
3402
4053
  /** Top-level actor binding (sole location for ActorBinding in Wire 0.2) */
3403
4054
  actor: ActorBindingSchema.optional(),
3404
- /** Policy binding block (DD-151) */
4055
+ /** Policy binding block */
3405
4056
  policy: PolicyBlockSchema.optional(),
3406
- /** Representation fields (DD-152): FingerprintRef validation, sha256-only, strict */
4057
+ /** Representation fields: FingerprintRef validation, sha256-only, strict */
3407
4058
  representation: Wire02RepresentationFieldsSchema.optional(),
3408
4059
  /** ISO 8601 / RFC 3339 timestamp when the interaction occurred; evidence kind only */
3409
4060
  occurred_at: z.string().datetime({ offset: true }).optional(),
@@ -3538,6 +4189,8 @@ var WARNING_TYPE_UNREGISTERED = "type_unregistered";
3538
4189
  var WARNING_UNKNOWN_EXTENSION = "unknown_extension_preserved";
3539
4190
  var WARNING_OCCURRED_AT_SKEW = "occurred_at_skew";
3540
4191
  var WARNING_TYP_MISSING = "typ_missing";
4192
+ var WARNING_EXTENSION_GROUP_MISSING = "extension_group_missing";
4193
+ var WARNING_EXTENSION_GROUP_MISMATCH = "extension_group_mismatch";
3541
4194
  function sortWarnings(warnings) {
3542
4195
  return [...warnings].sort((a, b) => {
3543
4196
  const aHasPtr = a.pointer !== void 0;
@@ -3551,27 +4204,12 @@ function sortWarnings(warnings) {
3551
4204
  return a.code.localeCompare(b.code);
3552
4205
  });
3553
4206
  }
3554
-
3555
- // src/wire-02-registries.ts
3556
- var REGISTERED_RECEIPT_TYPES = /* @__PURE__ */ new Set([
3557
- "org.peacprotocol/payment",
3558
- "org.peacprotocol/access-decision",
3559
- "org.peacprotocol/identity-attestation",
3560
- "org.peacprotocol/consent-record",
3561
- "org.peacprotocol/compliance-check",
3562
- "org.peacprotocol/privacy-signal",
3563
- "org.peacprotocol/safety-review",
3564
- "org.peacprotocol/provenance-record",
3565
- "org.peacprotocol/attribution-event",
3566
- "org.peacprotocol/purpose-declaration"
3567
- ]);
3568
- var REGISTERED_EXTENSION_GROUP_KEYS = /* @__PURE__ */ new Set([
3569
- "org.peacprotocol/commerce",
3570
- "org.peacprotocol/access",
3571
- "org.peacprotocol/challenge",
3572
- "org.peacprotocol/identity",
3573
- "org.peacprotocol/correlation"
3574
- ]);
4207
+ var REGISTERED_RECEIPT_TYPES = new Set(
4208
+ RECEIPT_TYPES.map((entry) => entry.id)
4209
+ );
4210
+ var REGISTERED_EXTENSION_GROUP_KEYS = new Set(
4211
+ EXTENSION_GROUPS.map((entry) => entry.id)
4212
+ );
3575
4213
 
3576
4214
  // src/policy-binding.ts
3577
4215
  function verifyPolicyBinding(receiptDigest, localDigest) {
@@ -3603,6 +4241,6 @@ function findRevokedKey(revokedKeys, kid) {
3603
4241
  return revokedKeys.find((entry) => entry.kid === kid) ?? null;
3604
4242
  }
3605
4243
 
3606
- export { ACCESS_EXTENSION_KEY, ACTOR_BINDING_EXTENSION_KEY, AGENT_IDENTITY_TYPE, AIPREFSnapshot as AIPREFSnapshotSchema, ATTESTATION_LIMITS, ATTESTATION_RECEIPT_TYPE, ATTRIBUTION_LIMITS, ATTRIBUTION_TYPE, ATTRIBUTION_USAGES, AccessExtensionSchema, ActorBindingSchema, AgentIdentityAttestationSchema, AgentIdentityEvidenceSchema, AgentIdentityVerifiedSchema, AgentProofSchema, AttestationExtensionsSchema, AttestationReceiptClaimsSchema, AttestationSchema, AttributionAttestationSchema, AttributionEvidenceSchema, AttributionSourceSchema, AttributionUsageSchema, BindingDetailsSchema, CANONICAL_DIGEST_ALGS, CANONICAL_PURPOSES, CARRIER_TRANSPORT_LIMITS, CHALLENGE_EXTENSION_KEY, CHALLENGE_TYPES, COMMERCE_EXTENSION_KEY, COMMITMENT_CLASSES, CONTRIBUTION_TYPES, CONTROL_ACTIONS, CONTROL_ACTION_EXTENSION_KEY, CONTROL_TRIGGERS, CONTROL_TYPES, CORRELATION_EXTENSION_KEY, CREDENTIAL_EVENTS, CREDENTIAL_EVENT_EXTENSION_KEY, CREDIT_METHODS, CanonicalIssSchema, CanonicalPurposeSchema, CarrierFormatSchema, CarrierMetaSchema, ChallengeExtensionSchema, ChallengeTypeSchema, CommerceExtensionSchema, CommitmentClassSchema, CompactJwsSchema, ContactMethodSchema, ContentHashSchema, ContributionObligationSchema, ContributionTypeSchema, ControlActionSchema, ControlActionTypeSchema, ControlBlockSchema, ControlDecisionSchema, ControlLicensingModeSchema, ControlPurposeSchema, ControlStepSchema, ControlTriggerSchema, ControlTypeSchema, CorrelationExtensionSchema, CredentialEventSchema, CredentialEventTypeSchema, CredentialRefSchema, CreditMethodSchema, CreditObligationSchema, DERIVATION_TYPES, DIGEST_SIZE_CONSTANTS, DIGEST_VALUE_PATTERN, DISPUTE_GROUNDS_CODES, DISPUTE_LIMITS, DISPUTE_OUTCOMES, DISPUTE_STATES, DISPUTE_TARGET_TYPES, DISPUTE_TRANSITIONS, DISPUTE_TYPE, DISPUTE_TYPES, DerivationTypeSchema, DigestAlgSchema, DigestSchema, DisputeAttestationSchema, DisputeContactSchema, DisputeEvidenceSchema, DisputeGroundsCodeSchema, DisputeGroundsSchema, DisputeIdSchema, DisputeOutcomeSchema, DisputeResolutionSchema, DisputeStateSchema, DisputeTargetTypeSchema, DisputeTypeSchema, DocumentRefSchema, ERROR_CATEGORIES_CANONICAL, ERROR_CODES, EXTENSION_KEY_PATTERN, EXTENSION_LIMITS, EvidencePillarSchema, ExecutorSchema, Extensions, ExtensionsSchema, HashAlgorithmSchema, HashEncodingSchema, IDENTITY_EXTENSION_KEY, INTERACTION_EXTENSION_KEY, INTERACTION_LIMITS, INTERNAL_PURPOSE_UNDECLARED, IdentityBindingSchema, IdentityExtensionSchema, InteractionEvidenceV01Schema, JSON_EVIDENCE_LIMITS, JWSHeader, JsonArraySchema, JsonObjectSchema, JsonPrimitiveSchema, JsonValueSchema, KERNEL_CONSTRAINTS, KIND_FORMAT_PATTERN, KindSchema, MAX_PURPOSE_TOKENS_PER_REQUEST, MAX_PURPOSE_TOKEN_LENGTH, MIDDLEWARE_INTERACTION_KEY, MVISFieldsSchema, MVISReplayProtectionSchema, MVISTimeBoundsSchema, MinimalInteractionBindingSchema, NormalizedPayment, OBLIGATIONS_EXTENSION_KEY, ORCHESTRATION_FRAMEWORKS, ObligationsExtensionSchema, OrchestrationFrameworkSchema, PEAC_ALG, PEAC_DISCOVERY_MAX_BYTES, PEAC_DISCOVERY_PATH, PEAC_ISSUER_CONFIG_MAX_BYTES, PEAC_ISSUER_CONFIG_PATH, PEAC_ISSUER_CONFIG_VERSION, PEAC_POLICY_FALLBACK_PATH, PEAC_POLICY_MAX_BYTES, PEAC_POLICY_PATH, PEAC_PURPOSE_APPLIED_HEADER, PEAC_PURPOSE_HEADER, PEAC_PURPOSE_REASON_HEADER, PEAC_RECEIPT_HEADER, PEAC_RECEIPT_SCHEMA_URL, PEAC_WIRE_TYP, POLICY_DECISIONS, PROOF_METHODS, PROOF_TYPES, PURPOSE_REASONS, PURPOSE_TOKEN_REGEX, PayloadRefSchema, PaymentEvidenceSchema, PaymentRoutingSchema, PaymentSplitSchema, PeacEvidenceCarrierSchema, PillarsSchema, PolicyBlockSchema, PolicyContextSchema, ProblemDetailsSchema, ProofMethodSchema, ProofTypeSchema, PurposeReasonSchema, PurposeTokenSchema, REDACTION_MODES, REGISTERED_EXTENSION_GROUP_KEYS, REGISTERED_RECEIPT_TYPES, REMEDIATION_TYPES, REPRESENTATION_LIMITS, RESERVED_KIND_PREFIXES, RESULT_STATUSES, REVOCATION_REASONS, ReceiptClaims, ReceiptClaimsSchema, ReceiptRefSchema2 as ReceiptRefSchema, ReceiptTypeSchema, ReceiptUrlSchema, RefsSchema, RemediationSchema, RemediationTypeSchema, Wire02RepresentationFieldsSchema as RepresentationFieldsSchema, ResourceTargetSchema, ResultSchema, RevokedKeyEntrySchema, RevokedKeysArraySchema, STEP_ID_PATTERN, StepIdSchema, SubjectProfileSchema, SubjectProfileSnapshotSchema, Subject as SubjectSchema, SubjectTypeSchema, TERMINAL_STATES, TOOL_REGISTRY_EXTENSION_KEY, TREATY_EXTENSION_KEY, ToolRegistrySchema, ToolTargetSchema, TreatySchema, VerifyRequest as VerifyRequestSchema, WARNING_OCCURRED_AT_SKEW, WARNING_TYPE_UNREGISTERED, WARNING_TYP_MISSING, WARNING_UNKNOWN_EXTENSION, WELL_KNOWN_KINDS, WORKFLOW_EXTENSION_KEY, WORKFLOW_ID_PATTERN, WORKFLOW_LIMITS, WORKFLOW_STATUSES, WORKFLOW_SUMMARY_TYPE, Wire01JWSHeaderSchema, Wire02ClaimsSchema, Wire02KindSchema, Wire02RepresentationFieldsSchema, WorkflowContextSchema, WorkflowErrorContextSchema, WorkflowIdSchema, WorkflowStatusSchema, WorkflowSummaryAttestationSchema, WorkflowSummaryEvidenceSchema, assertJsonSafeIterative, canTransitionTo, checkOccurredAtSkew, computeReceiptRef, computeTotalWeight, createAgentIdentityAttestation, createAttestationReceiptClaims, createAttributionAttestation, createConstraintViolationError, createContributionObligation, createCreditObligation, createDisputeAttestation, createEvidenceNotJsonError, createInteractionEvidence, createObligationsExtension, createPEACError, createReceiptView, createStepId, createWorkflowContext, createWorkflowContextInvalidError, createWorkflowDagInvalidError, createWorkflowId, createWorkflowSummaryAttestation, deriveKnownPurposes, detectCycleInSources, detectWireVersion, determinePurposeReason, extractObligationsExtension, findRevokedKey, fingerprintRefToString, getAccessExtension, getChallengeExtension, getCommerceExtension, getCorrelationExtension, getIdentityExtension, getInteraction, getValidTransitions, hasInteraction, hasUnknownPurposeTokens, hasValidDagSemantics, isAgentIdentityAttestation, isAttestationExpired, isAttestationNotYetValid, isAttestationOnly, isAttestationReceiptClaims, isAttributionAttestation, isAttributionExpired, isAttributionNotYetValid, isCanonicalIss, isCanonicalPurpose, isContributionRequired, isCreditRequired, isDigestTruncated, isDisputeAttestation, isDisputeExpired, isDisputeNotYetValid, isLegacyPurpose, isMinimalInteractionBinding, isOriginOnly, isPaymentReceipt, isReservedKindPrefix, isTerminalState, isTerminalWorkflowStatus, isUndeclaredPurpose, isValidDisputeAttestation, isValidExtensionKey, isValidInteractionEvidence, isValidPurposeReason, isValidPurposeToken, isValidReceiptType, isValidWorkflowContext, isWellKnownKind, isWorkflowSummaryAttestation, mapLegacyToCanonical, normalizePurposeToken, normalizeToCanonicalOrPreserve, parsePurposeHeader, parseReceiptClaims, setInteraction, sortWarnings, stringToFingerprintRef, toCoreClaims, transitionDisputeState, validateActorBinding, validateAgentIdentityAttestation, validateAttestationReceiptClaims, validateAttributionAttestation, validateAttributionSource, validateCarrierConstraints, validateContentHash, validateContributionObligation, validateControlAction, validateCredentialEvent, validateCreditObligation, validateDisputeAttestation, validateDisputeContact, validateDisputeResolution, validateEvidence, validateIdentityBinding, validateInteraction, validateInteractionEvidence, validateInteractionOrdered, validateKernelConstraints, validateKnownExtensions, validateMVIS, validateMinimalInteractionBinding, validateObligationsExtension, validatePurposeTokens, validateRevokedKeys, validateSubjectSnapshot, validateToolRegistry, validateTreaty, validateWorkflowContext, validateWorkflowContextOrdered, validateWorkflowSummaryAttestation, verifyPolicyBinding, verifyReceiptRefConsistency };
4244
+ export { ACCESS_EXTENSION_KEY, ACTOR_BINDING_EXTENSION_KEY, AGENT_IDENTITY_TYPE, AIPREFSnapshot as AIPREFSnapshotSchema, ATTESTATION_LIMITS, ATTESTATION_RECEIPT_TYPE, ATTRIBUTION_EXTENSION_KEY, ATTRIBUTION_LIMITS, ATTRIBUTION_TYPE, ATTRIBUTION_USAGES, AccessExtensionSchema, ActorBindingSchema, AgentIdentityAttestationSchema, AgentIdentityEvidenceSchema, AgentIdentityVerifiedSchema, AgentProofSchema, AttestationExtensionsSchema, AttestationReceiptClaimsSchema, AttestationSchema, AttributionAttestationSchema, AttributionEvidenceSchema, AttributionExtensionSchema, AttributionSourceSchema, AttributionUsageSchema, BindingDetailsSchema, CANONICAL_DIGEST_ALGS, CANONICAL_PURPOSES, CARRIER_TRANSPORT_LIMITS, CHALLENGE_EXTENSION_KEY, CHALLENGE_TYPES, COMMERCE_EXTENSION_KEY, COMMITMENT_CLASSES, COMPLIANCE_EXTENSION_KEY, COMPLIANCE_STATUSES, CONSENT_EXTENSION_KEY, CONSENT_STATUSES, CONTENT_SIGNAL_SOURCES, CONTRIBUTION_TYPES, CONTROL_ACTIONS, CONTROL_ACTION_EXTENSION_KEY, CONTROL_TRIGGERS, CONTROL_TYPES, CORRELATION_EXTENSION_KEY, CREDENTIAL_EVENTS, CREDENTIAL_EVENT_EXTENSION_KEY, CREDIT_METHODS, CanonicalIssSchema, CanonicalPurposeSchema, CarrierFormatSchema, CarrierMetaSchema, ChallengeExtensionSchema, ChallengeTypeSchema, CommerceExtensionSchema, CommitmentClassSchema, CompactJwsSchema, ComplianceExtensionSchema, ComplianceStatusSchema, ConsentExtensionSchema, ConsentStatusSchema, ContactMethodSchema, ContentHashSchema, ContentSignalSourceSchema, ContributionObligationSchema, ContributionTypeSchema, ControlActionSchema, ControlActionTypeSchema, ControlBlockSchema, ControlDecisionSchema, ControlLicensingModeSchema, ControlPurposeSchema, ControlStepSchema, ControlTriggerSchema, ControlTypeSchema, CorrelationExtensionSchema, CredentialEventSchema, CredentialEventTypeSchema, CredentialRefSchema, CreditMethodSchema, CreditObligationSchema, CustodyEntrySchema, DERIVATION_TYPES, DIGEST_SIZE_CONSTANTS, DIGEST_VALUE_PATTERN, DISPUTE_GROUNDS_CODES, DISPUTE_LIMITS, DISPUTE_OUTCOMES, DISPUTE_STATES, DISPUTE_TARGET_TYPES, DISPUTE_TRANSITIONS, DISPUTE_TYPE, DISPUTE_TYPES, DerivationTypeSchema, DigestAlgSchema, DigestSchema, DisputeAttestationSchema, DisputeContactSchema, DisputeEvidenceSchema, DisputeGroundsCodeSchema, DisputeGroundsSchema, DisputeIdSchema, DisputeOutcomeSchema, DisputeResolutionSchema, DisputeStateSchema, DisputeTargetTypeSchema, DisputeTypeSchema, DocumentRefSchema, ERROR_CATEGORIES_CANONICAL, ERROR_CODES, EXTENSION_KEY_PATTERN, EXTENSION_LIMITS, EvidencePillarSchema, ExecutorSchema, Extensions, ExtensionsSchema, HashAlgorithmSchema, HashEncodingSchema, HttpsUriHintSchema, IDENTITY_EXTENSION_KEY, INTERACTION_EXTENSION_KEY, INTERACTION_LIMITS, INTERNAL_PURPOSE_UNDECLARED, IdentityBindingSchema, IdentityExtensionSchema, InteractionEvidenceV01Schema, Iso8601DateSchema, Iso8601DateStringSchema, Iso8601DurationSchema, Iso8601OffsetDateTimeSchema, JSON_EVIDENCE_LIMITS, JWSHeader, JsonArraySchema, JsonObjectSchema, JsonPrimitiveSchema, JsonValueSchema, KERNEL_CONSTRAINTS, KIND_FORMAT_PATTERN, KindSchema, MAX_PURPOSE_TOKENS_PER_REQUEST, MAX_PURPOSE_TOKEN_LENGTH, MIDDLEWARE_INTERACTION_KEY, MVISFieldsSchema, MVISReplayProtectionSchema, MVISTimeBoundsSchema, MinimalInteractionBindingSchema, NormalizedPayment, OBLIGATIONS_EXTENSION_KEY, ORCHESTRATION_FRAMEWORKS, ObligationsExtensionSchema, OrchestrationFrameworkSchema, PEAC_ALG, PEAC_DISCOVERY_MAX_BYTES, PEAC_DISCOVERY_PATH, PEAC_ISSUER_CONFIG_MAX_BYTES, PEAC_ISSUER_CONFIG_PATH, PEAC_ISSUER_CONFIG_VERSION, PEAC_POLICY_FALLBACK_PATH, PEAC_POLICY_MAX_BYTES, PEAC_POLICY_PATH, PEAC_PURPOSE_APPLIED_HEADER, PEAC_PURPOSE_HEADER, PEAC_PURPOSE_REASON_HEADER, PEAC_RECEIPT_HEADER, PEAC_RECEIPT_SCHEMA_URL, PEAC_WIRE_TYP, POLICY_DECISIONS, PRIVACY_EXTENSION_KEY, PROOF_METHODS, PROOF_TYPES, PROVENANCE_EXTENSION_KEY, PURPOSE_EXTENSION_KEY, PURPOSE_REASONS, PURPOSE_TOKEN_REGEX, PayloadRefSchema, PaymentEvidenceSchema, PaymentRoutingSchema, PaymentSplitSchema, PeacEvidenceCarrierSchema, PillarsSchema, PolicyBlockSchema, PolicyContextSchema, PrivacyExtensionSchema, ProblemDetailsSchema, ProofMethodSchema, ProofTypeSchema, ProvenanceExtensionSchema, PurposeExtensionSchema, PurposeReasonSchema, PurposeTokenSchema, RECIPIENT_SCOPES, REDACTION_MODES, REGISTERED_EXTENSION_GROUP_KEYS, REGISTERED_RECEIPT_TYPES, REMEDIATION_TYPES, REPRESENTATION_LIMITS, RESERVED_KIND_PREFIXES, RESULT_STATUSES, RETENTION_MODES, REVIEW_STATUSES, REVOCATION_REASONS, RISK_LEVELS, ReceiptClaims, ReceiptClaimsSchema, ReceiptRefSchema2 as ReceiptRefSchema, ReceiptTypeSchema, ReceiptUrlSchema, RecipientScopeSchema, RefsSchema, RemediationSchema, RemediationTypeSchema, Wire02RepresentationFieldsSchema as RepresentationFieldsSchema, ResourceTargetSchema, ResultSchema, RetentionModeSchema, ReviewStatusSchema, RevokedKeyEntrySchema, RevokedKeysArraySchema, Rfc3339DateTimeSchema, Rfc3339TimestampSchema, RiskLevelSchema, SAFETY_EXTENSION_KEY, STEP_ID_PATTERN, SafetyExtensionSchema, Sha256DigestSchema, SlsaLevelSchema, SpdxExpressionSchema, StepIdSchema, SubjectProfileSchema, SubjectProfileSnapshotSchema, Subject as SubjectSchema, SubjectTypeSchema, TERMINAL_STATES, TOOL_REGISTRY_EXTENSION_KEY, TREATY_EXTENSION_KEY, ToolRegistrySchema, ToolTargetSchema, TreatySchema, VerifyRequest as VerifyRequestSchema, WARNING_EXTENSION_GROUP_MISMATCH, WARNING_EXTENSION_GROUP_MISSING, WARNING_OCCURRED_AT_SKEW, WARNING_TYPE_UNREGISTERED, WARNING_TYP_MISSING, WARNING_UNKNOWN_EXTENSION, WELL_KNOWN_KINDS, WORKFLOW_EXTENSION_KEY, WORKFLOW_ID_PATTERN, WORKFLOW_LIMITS, WORKFLOW_STATUSES, WORKFLOW_SUMMARY_TYPE, Wire01JWSHeaderSchema, Wire02ClaimsSchema, Wire02KindSchema, Wire02RepresentationFieldsSchema, WorkflowContextSchema, WorkflowErrorContextSchema, WorkflowIdSchema, WorkflowStatusSchema, WorkflowSummaryAttestationSchema, WorkflowSummaryEvidenceSchema, assertJsonSafeIterative, canTransitionTo, checkOccurredAtSkew, computeReceiptRef, computeTotalWeight, createAgentIdentityAttestation, createAttestationReceiptClaims, createAttributionAttestation, createConstraintViolationError, createContributionObligation, createCreditObligation, createDisputeAttestation, createEvidenceNotJsonError, createInteractionEvidence, createObligationsExtension, createPEACError, createReceiptView, createStepId, createWorkflowContext, createWorkflowContextInvalidError, createWorkflowDagInvalidError, createWorkflowId, createWorkflowSummaryAttestation, deriveKnownPurposes, detectCycleInSources, detectWireVersion, determinePurposeReason, extractObligationsExtension, findRevokedKey, fingerprintRefToString, getAccessExtension, getAttributionExtension, getChallengeExtension, getCommerceExtension, getComplianceExtension, getConsentExtension, getCorrelationExtension, getIdentityExtension, getInteraction, getPrivacyExtension, getProvenanceExtension, getPurposeExtension, getSafetyExtension, getValidTransitions, hasInteraction, hasUnknownPurposeTokens, hasValidDagSemantics, isAgentIdentityAttestation, isAttestationExpired, isAttestationNotYetValid, isAttestationOnly, isAttestationReceiptClaims, isAttributionAttestation, isAttributionExpired, isAttributionNotYetValid, isCanonicalIss, isCanonicalPurpose, isContributionRequired, isCreditRequired, isDigestTruncated, isDisputeAttestation, isDisputeExpired, isDisputeNotYetValid, isLegacyPurpose, isMinimalInteractionBinding, isOriginOnly, isPaymentReceipt, isReservedKindPrefix, isTerminalState, isTerminalWorkflowStatus, isUndeclaredPurpose, isValidDisputeAttestation, isValidExtensionKey, isValidInteractionEvidence, isValidPurposeReason, isValidPurposeToken, isValidReceiptType, isValidWorkflowContext, isWellKnownKind, isWorkflowSummaryAttestation, mapLegacyToCanonical, normalizePurposeToken, normalizeToCanonicalOrPreserve, parsePurposeHeader, parseReceiptClaims, setInteraction, sortWarnings, stringToFingerprintRef, toCoreClaims, transitionDisputeState, validateActorBinding, validateAgentIdentityAttestation, validateAttestationReceiptClaims, validateAttributionAttestation, validateAttributionSource, validateCarrierConstraints, validateContentHash, validateContributionObligation, validateControlAction, validateCredentialEvent, validateCreditObligation, validateDisputeAttestation, validateDisputeContact, validateDisputeResolution, validateEvidence, validateIdentityBinding, validateInteraction, validateInteractionEvidence, validateInteractionOrdered, validateKernelConstraints, validateKnownExtensions, validateMVIS, validateMinimalInteractionBinding, validateObligationsExtension, validatePurposeTokens, validateRevokedKeys, validateSubjectSnapshot, validateToolRegistry, validateTreaty, validateWorkflowContext, validateWorkflowContextOrdered, validateWorkflowSummaryAttestation, verifyPolicyBinding, verifyReceiptRefConsistency };
3607
4245
  //# sourceMappingURL=index.mjs.map
3608
4246
  //# sourceMappingURL=index.mjs.map