@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/attribution.cjs +2 -0
- package/dist/attribution.cjs.map +1 -1
- package/dist/attribution.mjs +2 -0
- package/dist/attribution.mjs.map +1 -1
- package/dist/constraints.d.ts +68 -0
- package/dist/constraints.d.ts.map +1 -0
- package/dist/errors.d.ts.map +1 -1
- package/dist/index.cjs +129 -7
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.ts +2 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.mjs +110 -9
- package/dist/index.mjs.map +1 -1
- package/dist/json.d.ts +3 -2
- package/dist/json.d.ts.map +1 -1
- package/dist/receipt-parser.cjs +2 -0
- package/dist/receipt-parser.cjs.map +1 -1
- package/dist/receipt-parser.mjs +2 -0
- package/dist/receipt-parser.mjs.map +1 -1
- package/package.json +3 -3
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 =
|
|
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:
|
|
428
|
+
maxDepth: KERNEL_CONSTRAINTS.MAX_NESTED_DEPTH,
|
|
309
429
|
/** Maximum array length (default: 10,000) */
|
|
310
|
-
maxArrayLength:
|
|
430
|
+
maxArrayLength: KERNEL_CONSTRAINTS.MAX_ARRAY_LENGTH,
|
|
311
431
|
/** Maximum object keys (default: 1,000) */
|
|
312
|
-
maxObjectKeys:
|
|
313
|
-
/** Maximum string length in
|
|
314
|
-
maxStringLength:
|
|
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:
|
|
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;
|