@peac/schema 0.10.12 → 0.10.14

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/index.cjs CHANGED
@@ -3,8 +3,28 @@
3
3
  var kernel = require('@peac/kernel');
4
4
  var zod = require('zod');
5
5
 
6
+ function _interopNamespace(e) {
7
+ if (e && e.__esModule) return e;
8
+ var n = Object.create(null);
9
+ if (e) {
10
+ Object.keys(e).forEach(function (k) {
11
+ if (k !== 'default') {
12
+ var d = Object.getOwnPropertyDescriptor(e, k);
13
+ Object.defineProperty(n, k, d.get ? d : {
14
+ enumerable: true,
15
+ get: function () { return e[k]; }
16
+ });
17
+ }
18
+ });
19
+ }
20
+ n.default = e;
21
+ return Object.freeze(n);
22
+ }
23
+
24
+ var kernel__namespace = /*#__PURE__*/_interopNamespace(kernel);
25
+
6
26
  // src/errors.ts
7
- var ERROR_CATEGORIES_CANONICAL = kernel.ERROR_CATEGORIES;
27
+ var ERROR_CATEGORIES_CANONICAL = kernel__namespace.ERROR_CATEGORIES;
8
28
  var ERROR_CODES = {
9
29
  // Validation errors (400)
10
30
  E_CONTROL_REQUIRED: "E_CONTROL_REQUIRED",
@@ -277,6 +297,106 @@ function determinePurposeReason(context) {
277
297
  function hasUnknownPurposeTokens(tokens) {
278
298
  return tokens.some((token) => !isCanonicalPurpose(token));
279
299
  }
300
+
301
+ // src/constraints.ts
302
+ var KERNEL_CONSTRAINTS = {
303
+ /** Maximum nesting depth for JSON evidence */
304
+ MAX_NESTED_DEPTH: 32,
305
+ /** Maximum array length in evidence */
306
+ MAX_ARRAY_LENGTH: 1e4,
307
+ /** Maximum object keys in a single object */
308
+ MAX_OBJECT_KEYS: 1e3,
309
+ /** Maximum string length in code units (JS .length). Matches assertJsonSafeIterative. */
310
+ MAX_STRING_LENGTH: 65536,
311
+ /** Maximum total nodes to visit during traversal */
312
+ MAX_TOTAL_NODES: 1e5,
313
+ /** Temporal validity clock skew tolerance in seconds (DD-8) */
314
+ CLOCK_SKEW_SECONDS: 60
315
+ };
316
+ function validateKernelConstraints(claims) {
317
+ const violations = [];
318
+ if (claims === null || claims === void 0 || typeof claims !== "object") {
319
+ return { valid: true, violations };
320
+ }
321
+ let totalNodes = 0;
322
+ const stack = [
323
+ { value: claims, depth: 0, path: "" }
324
+ ];
325
+ while (stack.length > 0) {
326
+ const item = stack.pop();
327
+ totalNodes++;
328
+ if (totalNodes > KERNEL_CONSTRAINTS.MAX_TOTAL_NODES) {
329
+ violations.push({
330
+ constraint: "MAX_TOTAL_NODES",
331
+ actual: totalNodes,
332
+ limit: KERNEL_CONSTRAINTS.MAX_TOTAL_NODES,
333
+ path: item.path
334
+ });
335
+ break;
336
+ }
337
+ if (item.depth > KERNEL_CONSTRAINTS.MAX_NESTED_DEPTH) {
338
+ violations.push({
339
+ constraint: "MAX_NESTED_DEPTH",
340
+ actual: item.depth,
341
+ limit: KERNEL_CONSTRAINTS.MAX_NESTED_DEPTH,
342
+ path: item.path
343
+ });
344
+ continue;
345
+ }
346
+ if (item.value === null || typeof item.value !== "object") {
347
+ if (typeof item.value === "string") {
348
+ if (item.value.length > KERNEL_CONSTRAINTS.MAX_STRING_LENGTH) {
349
+ violations.push({
350
+ constraint: "MAX_STRING_LENGTH",
351
+ actual: item.value.length,
352
+ limit: KERNEL_CONSTRAINTS.MAX_STRING_LENGTH,
353
+ path: item.path
354
+ });
355
+ }
356
+ }
357
+ continue;
358
+ }
359
+ if (Array.isArray(item.value)) {
360
+ if (item.value.length > KERNEL_CONSTRAINTS.MAX_ARRAY_LENGTH) {
361
+ violations.push({
362
+ constraint: "MAX_ARRAY_LENGTH",
363
+ actual: item.value.length,
364
+ limit: KERNEL_CONSTRAINTS.MAX_ARRAY_LENGTH,
365
+ path: item.path
366
+ });
367
+ }
368
+ for (let i = item.value.length - 1; i >= 0; i--) {
369
+ stack.push({
370
+ value: item.value[i],
371
+ depth: item.depth + 1,
372
+ path: `${item.path}[${i}]`
373
+ });
374
+ }
375
+ continue;
376
+ }
377
+ const keys = Object.keys(item.value);
378
+ if (keys.length > KERNEL_CONSTRAINTS.MAX_OBJECT_KEYS) {
379
+ violations.push({
380
+ constraint: "MAX_OBJECT_KEYS",
381
+ actual: keys.length,
382
+ limit: KERNEL_CONSTRAINTS.MAX_OBJECT_KEYS,
383
+ path: item.path
384
+ });
385
+ }
386
+ for (let i = keys.length - 1; i >= 0; i--) {
387
+ const key = keys[i];
388
+ const childPath = item.path ? `${item.path}.${key}` : key;
389
+ stack.push({
390
+ value: item.value[key],
391
+ depth: item.depth + 1,
392
+ path: childPath
393
+ });
394
+ }
395
+ }
396
+ return { valid: violations.length === 0, violations };
397
+ }
398
+
399
+ // src/json.ts
280
400
  function isPlainObject(value) {
281
401
  if (value === null || typeof value !== "object") {
282
402
  return false;
@@ -305,15 +425,15 @@ var JsonObjectSchema = PlainObjectSchema.transform(
305
425
  var JsonArraySchema = zod.z.array(JsonValueSchema);
306
426
  var JSON_EVIDENCE_LIMITS = {
307
427
  /** Maximum nesting depth (default: 32) */
308
- maxDepth: 32,
428
+ maxDepth: KERNEL_CONSTRAINTS.MAX_NESTED_DEPTH,
309
429
  /** Maximum array length (default: 10,000) */
310
- maxArrayLength: 1e4,
430
+ maxArrayLength: KERNEL_CONSTRAINTS.MAX_ARRAY_LENGTH,
311
431
  /** Maximum object keys (default: 1,000) */
312
- maxObjectKeys: 1e3,
313
- /** Maximum string length in bytes (default: 65,536 = 64KB) */
314
- maxStringLength: 65536,
432
+ maxObjectKeys: KERNEL_CONSTRAINTS.MAX_OBJECT_KEYS,
433
+ /** Maximum string length in code units (default: 65,536) */
434
+ maxStringLength: KERNEL_CONSTRAINTS.MAX_STRING_LENGTH,
315
435
  /** Maximum total nodes to visit (default: 100,000) */
316
- maxTotalNodes: 1e5
436
+ maxTotalNodes: KERNEL_CONSTRAINTS.MAX_TOTAL_NODES
317
437
  };
318
438
  function assertJsonSafeIterative(value, limits = {}) {
319
439
  const maxDepth = limits.maxDepth ?? JSON_EVIDENCE_LIMITS.maxDepth;
@@ -2656,6 +2776,7 @@ exports.JsonArraySchema = JsonArraySchema;
2656
2776
  exports.JsonObjectSchema = JsonObjectSchema;
2657
2777
  exports.JsonPrimitiveSchema = JsonPrimitiveSchema;
2658
2778
  exports.JsonValueSchema = JsonValueSchema;
2779
+ exports.KERNEL_CONSTRAINTS = KERNEL_CONSTRAINTS;
2659
2780
  exports.KIND_FORMAT_PATTERN = KIND_FORMAT_PATTERN;
2660
2781
  exports.KindSchema = KindSchema;
2661
2782
  exports.MAX_PURPOSE_TOKENS_PER_REQUEST = MAX_PURPOSE_TOKENS_PER_REQUEST;
@@ -2807,6 +2928,7 @@ exports.validateIdentityBinding = validateIdentityBinding;
2807
2928
  exports.validateInteraction = validateInteraction;
2808
2929
  exports.validateInteractionEvidence = validateInteractionEvidence;
2809
2930
  exports.validateInteractionOrdered = validateInteractionOrdered;
2931
+ exports.validateKernelConstraints = validateKernelConstraints;
2810
2932
  exports.validateMinimalInteractionBinding = validateMinimalInteractionBinding;
2811
2933
  exports.validateObligationsExtension = validateObligationsExtension;
2812
2934
  exports.validatePurposeTokens = validatePurposeTokens;