@nextera.one/axis-server-sdk 2.1.1 → 2.1.3

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.js CHANGED
@@ -334,90 +334,76 @@ var init_sensor_decorator = __esm({
334
334
  });
335
335
 
336
336
  // src/decorators/tlv-field.decorator.ts
337
- var require_tlv_field_decorator = __commonJS({
338
- "src/decorators/tlv-field.decorator.ts"(exports2) {
339
- "use strict";
340
- Object.defineProperty(exports2, "__esModule", { value: true });
341
- exports2.TLV_VALIDATORS_KEY = exports2.TLV_FIELDS_KEY = void 0;
342
- exports2.TlvField = TlvField2;
343
- exports2.TlvValidate = TlvValidate2;
344
- exports2.TlvUtf8Pattern = TlvUtf8Pattern2;
345
- exports2.TlvMinLen = TlvMinLen2;
346
- exports2.TlvEnum = TlvEnum2;
347
- exports2.TlvRange = TlvRange2;
348
- require("reflect-metadata");
349
- exports2.TLV_FIELDS_KEY = "axis:tlv:fields";
350
- exports2.TLV_VALIDATORS_KEY = "axis:tlv:validators";
351
- var textDecoder = new TextDecoder();
352
- function assertUniqueFieldMetadata(existing, property, tag) {
353
- const duplicateProperty = existing.find((item) => item.property === property);
354
- if (duplicateProperty) {
355
- throw new Error(`Duplicate @TlvField for property ${property}`);
356
- }
357
- const duplicateTag = existing.find((item) => item.tag === tag);
358
- if (duplicateTag) {
359
- throw new Error(`Duplicate @TlvField tag ${tag} for ${property}; already used by ${duplicateTag.property}`);
360
- }
361
- }
362
- function TlvField2(tag, options) {
363
- return (target, propertyKey) => {
364
- const existing = Reflect.getOwnMetadata(exports2.TLV_FIELDS_KEY, target.constructor) || [];
365
- const property = String(propertyKey);
366
- assertUniqueFieldMetadata(existing, property, tag);
367
- existing.push({
368
- property,
369
- tag,
370
- options
371
- });
372
- Reflect.defineMetadata(exports2.TLV_FIELDS_KEY, existing, target.constructor);
373
- };
374
- }
375
- function TlvValidate2(validator) {
376
- return (target, propertyKey) => {
377
- const existing = Reflect.getOwnMetadata(exports2.TLV_VALIDATORS_KEY, target.constructor) || [];
378
- const prop = String(propertyKey);
379
- let entry = existing.find((e) => e.property === prop);
380
- if (!entry) {
381
- entry = { property: prop, tag: 0, validators: [] };
382
- existing.push(entry);
383
- }
384
- entry.validators.push(validator);
385
- Reflect.defineMetadata(exports2.TLV_VALIDATORS_KEY, existing, target.constructor);
386
- };
387
- }
388
- function TlvUtf8Pattern2(pattern, message) {
389
- const matcher = new RegExp(pattern.source, pattern.flags);
390
- return TlvValidate2((val, prop) => {
391
- const str = textDecoder.decode(val);
392
- matcher.lastIndex = 0;
393
- return matcher.test(str) ? null : message || `${prop}: failed pattern check`;
394
- });
395
- }
396
- function TlvMinLen2(min, message) {
397
- return TlvValidate2((val, prop) => {
398
- return val.length >= min ? null : message || `${prop}: too short (${val.length} < ${min})`;
399
- });
400
- }
401
- function TlvEnum2(allowed, message) {
402
- const set = new Set(allowed);
403
- return TlvValidate2((val, prop) => {
404
- const str = textDecoder.decode(val);
405
- return set.has(str) ? null : message || `${prop}: must be one of [${allowed.join(", ")}]`;
406
- });
337
+ var tlv_field_decorator_exports = {};
338
+ __export(tlv_field_decorator_exports, {
339
+ TLV_FIELDS_KEY: () => TLV_FIELDS_KEY,
340
+ TLV_VALIDATORS_KEY: () => TLV_VALIDATORS_KEY,
341
+ TlvEnum: () => TlvEnum,
342
+ TlvField: () => TlvField,
343
+ TlvMinLen: () => TlvMinLen,
344
+ TlvRange: () => TlvRange,
345
+ TlvUtf8Pattern: () => TlvUtf8Pattern,
346
+ TlvValidate: () => TlvValidate
347
+ });
348
+ function TlvField(tag, options) {
349
+ return (target, propertyKey) => {
350
+ const existing = Reflect.getOwnMetadata(TLV_FIELDS_KEY, target.constructor) || [];
351
+ existing.push({
352
+ property: String(propertyKey),
353
+ tag,
354
+ options
355
+ });
356
+ Reflect.defineMetadata(TLV_FIELDS_KEY, existing, target.constructor);
357
+ };
358
+ }
359
+ function TlvValidate(validator) {
360
+ return (target, propertyKey) => {
361
+ const existing = Reflect.getOwnMetadata(TLV_VALIDATORS_KEY, target.constructor) || [];
362
+ const prop = String(propertyKey);
363
+ let entry = existing.find((e) => e.property === prop);
364
+ if (!entry) {
365
+ entry = { property: prop, tag: 0, validators: [] };
366
+ existing.push(entry);
407
367
  }
408
- function TlvRange2(min, max, message) {
409
- return TlvValidate2((val, prop) => {
410
- if (val.length !== 8)
411
- return `${prop}: u64 must be 8 bytes`;
412
- let n = 0n;
413
- for (const b of val)
414
- n = n << 8n | BigInt(b);
415
- if (n < min || n > max) {
416
- return message || `${prop}: value ${n} out of range [${min}, ${max}]`;
417
- }
418
- return null;
419
- });
368
+ entry.validators.push(validator);
369
+ Reflect.defineMetadata(TLV_VALIDATORS_KEY, existing, target.constructor);
370
+ };
371
+ }
372
+ function TlvUtf8Pattern(pattern, message) {
373
+ return TlvValidate((val, prop) => {
374
+ const str = new TextDecoder().decode(val);
375
+ return pattern.test(str) ? null : message || `${prop}: failed pattern check`;
376
+ });
377
+ }
378
+ function TlvMinLen(min, message) {
379
+ return TlvValidate((val, prop) => {
380
+ return val.length >= min ? null : message || `${prop}: too short (${val.length} < ${min})`;
381
+ });
382
+ }
383
+ function TlvEnum(allowed, message) {
384
+ const set = new Set(allowed);
385
+ return TlvValidate((val, prop) => {
386
+ const str = new TextDecoder().decode(val);
387
+ return set.has(str) ? null : message || `${prop}: must be one of [${allowed.join(", ")}]`;
388
+ });
389
+ }
390
+ function TlvRange(min, max, message) {
391
+ return TlvValidate((val, prop) => {
392
+ if (val.length !== 8) return `${prop}: u64 must be 8 bytes`;
393
+ let n = 0n;
394
+ for (const b of val) n = n << 8n | BigInt(b);
395
+ if (n < min || n > max) {
396
+ return message || `${prop}: value ${n} out of range [${min}, ${max}]`;
420
397
  }
398
+ return null;
399
+ });
400
+ }
401
+ var import_reflect_metadata8, TLV_FIELDS_KEY, TLV_VALIDATORS_KEY;
402
+ var init_tlv_field_decorator = __esm({
403
+ "src/decorators/tlv-field.decorator.ts"() {
404
+ import_reflect_metadata8 = require("reflect-metadata");
405
+ TLV_FIELDS_KEY = "axis:tlv:fields";
406
+ TLV_VALIDATORS_KEY = "axis:tlv:validators";
421
407
  }
422
408
  });
423
409
 
@@ -446,7 +432,7 @@ var require_dto_schema_util = __commonJS({
446
432
  exports2.extractDtoSchema = extractDtoSchema2;
447
433
  exports2.buildDtoDecoder = buildDtoDecoder2;
448
434
  require("reflect-metadata");
449
- var tlv_field_decorator_1 = require_tlv_field_decorator();
435
+ var tlv_field_decorator_1 = (init_tlv_field_decorator(), __toCommonJS(tlv_field_decorator_exports));
450
436
  var tlv_1 = (init_tlv(), __toCommonJS(tlv_exports));
451
437
  function extractDtoSchema2(dto) {
452
438
  const fieldMetas = Reflect.getMetadata(tlv_field_decorator_1.TLV_FIELDS_KEY, dto) || [];
@@ -555,7 +541,7 @@ var require_axis_id_dto = __commonJS({
555
541
  };
556
542
  Object.defineProperty(exports2, "__esModule", { value: true });
557
543
  exports2.AxisIdDto = void 0;
558
- var tlv_field_decorator_1 = require_tlv_field_decorator();
544
+ var tlv_field_decorator_1 = (init_tlv_field_decorator(), __toCommonJS(tlv_field_decorator_exports));
559
545
  var axis_tlv_dto_1 = (init_axis_tlv_dto(), __toCommonJS(axis_tlv_dto_exports));
560
546
  var AxisIdDto2 = class extends axis_tlv_dto_1.AxisTlvDto {
561
547
  };
@@ -572,27 +558,27 @@ var require_axis_id_dto = __commonJS({
572
558
  function AxisPartialType(BaseDto) {
573
559
  class PartialDto extends BaseDto {
574
560
  }
575
- const fields = Reflect.getOwnMetadata(import_tlv_field.TLV_FIELDS_KEY, BaseDto) || [];
561
+ const fields = Reflect.getOwnMetadata(TLV_FIELDS_KEY, BaseDto) || [];
576
562
  const partialFields = fields.map((f) => ({
577
563
  property: f.property,
578
564
  tag: f.tag,
579
565
  options: { ...f.options, required: false }
580
566
  }));
581
- Reflect.defineMetadata(import_tlv_field.TLV_FIELDS_KEY, partialFields, PartialDto);
582
- const validators = Reflect.getOwnMetadata(import_tlv_field.TLV_VALIDATORS_KEY, BaseDto) || [];
567
+ Reflect.defineMetadata(TLV_FIELDS_KEY, partialFields, PartialDto);
568
+ const validators = Reflect.getOwnMetadata(TLV_VALIDATORS_KEY, BaseDto) || [];
583
569
  if (validators.length > 0) {
584
- Reflect.defineMetadata(import_tlv_field.TLV_VALIDATORS_KEY, [...validators], PartialDto);
570
+ Reflect.defineMetadata(TLV_VALIDATORS_KEY, [...validators], PartialDto);
585
571
  }
586
572
  Object.defineProperty(PartialDto, "name", {
587
573
  value: `Partial${BaseDto.name}`
588
574
  });
589
575
  return PartialDto;
590
576
  }
591
- var import_reflect_metadata8, import_tlv_field;
577
+ var import_reflect_metadata9;
592
578
  var init_axis_partial_type = __esm({
593
579
  "src/base/axis-partial-type.ts"() {
594
- import_reflect_metadata8 = require("reflect-metadata");
595
- import_tlv_field = __toESM(require_tlv_field_decorator());
580
+ import_reflect_metadata9 = require("reflect-metadata");
581
+ init_tlv_field_decorator();
596
582
  }
597
583
  });
598
584
 
@@ -611,7 +597,7 @@ var require_axis_response_dto = __commonJS({
611
597
  };
612
598
  Object.defineProperty(exports2, "__esModule", { value: true });
613
599
  exports2.AxisResponseDto = exports2.RESPONSE_TAG_UPDATED_BY = exports2.RESPONSE_TAG_CREATED_BY = exports2.RESPONSE_TAG_UPDATED_AT = exports2.RESPONSE_TAG_CREATED_AT = exports2.RESPONSE_TAG_ID = void 0;
614
- var tlv_field_decorator_1 = require_tlv_field_decorator();
600
+ var tlv_field_decorator_1 = (init_tlv_field_decorator(), __toCommonJS(tlv_field_decorator_exports));
615
601
  var axis_tlv_dto_1 = (init_axis_tlv_dto(), __toCommonJS(axis_tlv_dto_exports));
616
602
  exports2.RESPONSE_TAG_ID = 1;
617
603
  exports2.RESPONSE_TAG_CREATED_AT = 2;
@@ -649,6 +635,7 @@ var constants_exports = {};
649
635
  __export(constants_exports, {
650
636
  AXIS_MAGIC: () => import_axis_protocol2.AXIS_MAGIC,
651
637
  AXIS_VERSION: () => import_axis_protocol2.AXIS_VERSION,
638
+ AxisMediaTypes: () => AxisMediaTypes,
652
639
  BodyProfile: () => import_axis_protocol2.BodyProfile,
653
640
  ERR_BAD_SIGNATURE: () => import_axis_protocol2.ERR_BAD_SIGNATURE,
654
641
  ERR_CONTRACT_VIOLATION: () => import_axis_protocol2.ERR_CONTRACT_VIOLATION,
@@ -710,10 +697,31 @@ __export(constants_exports, {
710
697
  TLV_TS: () => import_axis_protocol2.TLV_TS,
711
698
  TLV_UPLOAD_ID: () => import_axis_protocol2.TLV_UPLOAD_ID
712
699
  });
713
- var import_axis_protocol2;
700
+ var import_axis_protocol2, _AxisMediaTypes, AxisMediaTypes;
714
701
  var init_constants = __esm({
715
702
  "src/core/constants.ts"() {
716
703
  import_axis_protocol2 = require("@nextera.one/axis-protocol");
704
+ _AxisMediaTypes = class _AxisMediaTypes {
705
+ static normalize(value) {
706
+ if (!value) return void 0;
707
+ return value.split(";", 1)[0].trim().toLowerCase();
708
+ }
709
+ static isAxisContentType(value) {
710
+ const normalized = _AxisMediaTypes.normalize(value);
711
+ return !!normalized && _AxisMediaTypes.VALID_AXIS_CONTENT_TYPES.some(
712
+ (contentType) => contentType === normalized
713
+ );
714
+ }
715
+ };
716
+ _AxisMediaTypes.BINARY = "application/axis-bin";
717
+ _AxisMediaTypes.OCTET_STREAM = "application/octet-stream";
718
+ _AxisMediaTypes.LEGACY_BINARY = "application/x-axis";
719
+ _AxisMediaTypes.VALID_AXIS_CONTENT_TYPES = [
720
+ _AxisMediaTypes.BINARY,
721
+ _AxisMediaTypes.OCTET_STREAM,
722
+ _AxisMediaTypes.LEGACY_BINARY
723
+ ];
724
+ AxisMediaTypes = _AxisMediaTypes;
717
725
  }
718
726
  });
719
727
 
@@ -1898,49 +1906,12 @@ var init_inline_capsule = __esm({
1898
1906
  var require_intent_router = __commonJS({
1899
1907
  "src/engine/intent.router.ts"(exports2) {
1900
1908
  "use strict";
1901
- var __createBinding = exports2 && exports2.__createBinding || (Object.create ? (function(o, m, k, k2) {
1902
- if (k2 === void 0) k2 = k;
1903
- var desc = Object.getOwnPropertyDescriptor(m, k);
1904
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
1905
- desc = { enumerable: true, get: function() {
1906
- return m[k];
1907
- } };
1908
- }
1909
- Object.defineProperty(o, k2, desc);
1910
- }) : (function(o, m, k, k2) {
1911
- if (k2 === void 0) k2 = k;
1912
- o[k2] = m[k];
1913
- }));
1914
- var __setModuleDefault = exports2 && exports2.__setModuleDefault || (Object.create ? (function(o, v) {
1915
- Object.defineProperty(o, "default", { enumerable: true, value: v });
1916
- }) : function(o, v) {
1917
- o["default"] = v;
1918
- });
1919
1909
  var __decorate = exports2 && exports2.__decorate || function(decorators, target, key, desc) {
1920
1910
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
1921
1911
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
1922
1912
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
1923
1913
  return c > 3 && r && Object.defineProperty(target, key, r), r;
1924
1914
  };
1925
- var __importStar = exports2 && exports2.__importStar || /* @__PURE__ */ (function() {
1926
- var ownKeys = function(o) {
1927
- ownKeys = Object.getOwnPropertyNames || function(o2) {
1928
- var ar = [];
1929
- for (var k in o2) if (Object.prototype.hasOwnProperty.call(o2, k)) ar[ar.length] = k;
1930
- return ar;
1931
- };
1932
- return ownKeys(o);
1933
- };
1934
- return function(mod) {
1935
- if (mod && mod.__esModule) return mod;
1936
- var result = {};
1937
- if (mod != null) {
1938
- for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
1939
- }
1940
- __setModuleDefault(result, mod);
1941
- return result;
1942
- };
1943
- })();
1944
1915
  var __metadata = exports2 && exports2.__metadata || function(k, v) {
1945
1916
  if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
1946
1917
  };
@@ -2407,7 +2378,7 @@ var require_intent_router = __commonJS({
2407
2378
  }
2408
2379
  }
2409
2380
  async executeChainRequest(frame, request) {
2410
- const { AxisChainExecutor: AxisChainExecutor2 } = await Promise.resolve().then(() => __importStar(require_axis_chain_executor()));
2381
+ const { AxisChainExecutor: AxisChainExecutor2 } = await Promise.resolve().then(() => require_axis_chain_executor());
2411
2382
  const headerActorId = this.getActorIdFromFrame(frame);
2412
2383
  if (request.actorId && headerActorId && !this.identifiersMatch(request.actorId, headerActorId)) {
2413
2384
  throw new axis_error_1.AxisError("ACTOR_MISMATCH", "CHAIN.EXEC actorId conflicts with authenticated frame identity", 403);
@@ -3266,213 +3237,6 @@ var init_observation_hash = __esm({
3266
3237
  }
3267
3238
  });
3268
3239
 
3269
- // src/engine/observation/truth-scoring.ts
3270
- function scoreTruth(obs, expected) {
3271
- const anomalies = [];
3272
- let passedChecks = 0;
3273
- let totalChecks = 0;
3274
- totalChecks++;
3275
- if (obs.endMs && obs.decision) {
3276
- passedChecks++;
3277
- } else {
3278
- anomalies.push({
3279
- code: "OBS_NOT_FINALIZED",
3280
- level: "critical",
3281
- message: "Observation was not finalized"
3282
- });
3283
- }
3284
- totalChecks++;
3285
- if (obs.stages.length > 0) {
3286
- passedChecks++;
3287
- } else {
3288
- anomalies.push({
3289
- code: "OBS_NO_STAGES",
3290
- level: "warning",
3291
- message: "Observation has no execution stages"
3292
- });
3293
- }
3294
- totalChecks++;
3295
- const failedStages = obs.stages.filter((s) => s.status === "fail");
3296
- if (failedStages.length === 0 || obs.decision === "DENY") {
3297
- passedChecks++;
3298
- } else {
3299
- for (const stage of failedStages) {
3300
- anomalies.push({
3301
- code: "STAGE_FAILED",
3302
- level: "warning",
3303
- message: `Stage '${stage.name}' failed: ${stage.reason ?? "unknown"}`,
3304
- field: `stages.${stage.name}`
3305
- });
3306
- }
3307
- }
3308
- totalChecks++;
3309
- const invalidSensors = obs.sensors.filter((s) => s.durationMs < 0);
3310
- if (invalidSensors.length === 0) {
3311
- passedChecks++;
3312
- } else {
3313
- anomalies.push({
3314
- code: "SENSOR_INVALID_TIMING",
3315
- level: "warning",
3316
- message: `${invalidSensors.length} sensor(s) have negative duration`
3317
- });
3318
- }
3319
- totalChecks++;
3320
- if (obs.durationMs !== void 0 && obs.durationMs >= 0 && obs.durationMs < 3e5) {
3321
- passedChecks++;
3322
- } else {
3323
- anomalies.push({
3324
- code: "OBS_DURATION_ANOMALY",
3325
- level: "warning",
3326
- message: `Observation duration ${obs.durationMs}ms is suspicious`,
3327
- actual: obs.durationMs
3328
- });
3329
- }
3330
- if (expected) {
3331
- if (expected.decision !== void 0) {
3332
- totalChecks++;
3333
- if (obs.decision === expected.decision) {
3334
- passedChecks++;
3335
- } else {
3336
- anomalies.push({
3337
- code: "DECISION_MISMATCH",
3338
- level: "critical",
3339
- message: `Expected decision '${expected.decision}', got '${obs.decision}'`,
3340
- field: "decision",
3341
- expected: expected.decision,
3342
- actual: obs.decision
3343
- });
3344
- }
3345
- }
3346
- if (expected.statusCode !== void 0) {
3347
- totalChecks++;
3348
- if (obs.statusCode === expected.statusCode) {
3349
- passedChecks++;
3350
- } else {
3351
- anomalies.push({
3352
- code: "STATUS_MISMATCH",
3353
- level: "warning",
3354
- message: `Expected status ${expected.statusCode}, got ${obs.statusCode}`,
3355
- field: "statusCode",
3356
- expected: expected.statusCode,
3357
- actual: obs.statusCode
3358
- });
3359
- }
3360
- }
3361
- if (expected.effect !== void 0) {
3362
- totalChecks++;
3363
- if (obs.resultCode === expected.effect || obs.facts?.effect === expected.effect) {
3364
- passedChecks++;
3365
- } else {
3366
- anomalies.push({
3367
- code: "EFFECT_MISMATCH",
3368
- level: "warning",
3369
- message: `Expected effect '${expected.effect}', got '${obs.resultCode}'`,
3370
- field: "resultCode",
3371
- expected: expected.effect,
3372
- actual: obs.resultCode
3373
- });
3374
- }
3375
- }
3376
- if (expected.maxDurationMs !== void 0) {
3377
- totalChecks++;
3378
- if (obs.durationMs !== void 0 && obs.durationMs <= expected.maxDurationMs) {
3379
- passedChecks++;
3380
- } else {
3381
- anomalies.push({
3382
- code: "DURATION_EXCEEDED",
3383
- level: "warning",
3384
- message: `Execution took ${obs.durationMs}ms, max allowed ${expected.maxDurationMs}ms`,
3385
- field: "durationMs",
3386
- expected: expected.maxDurationMs,
3387
- actual: obs.durationMs
3388
- });
3389
- }
3390
- }
3391
- if (expected.minSensorsPassed !== void 0) {
3392
- totalChecks++;
3393
- const passed = obs.sensors.filter((s) => s.allowed).length;
3394
- if (passed >= expected.minSensorsPassed) {
3395
- passedChecks++;
3396
- } else {
3397
- anomalies.push({
3398
- code: "INSUFFICIENT_SENSORS",
3399
- level: "warning",
3400
- message: `Only ${passed} sensors passed, minimum required ${expected.minSensorsPassed}`,
3401
- field: "sensors",
3402
- expected: expected.minSensorsPassed,
3403
- actual: passed
3404
- });
3405
- }
3406
- }
3407
- if (expected.assertions) {
3408
- for (const [key, expectedValue] of Object.entries(expected.assertions)) {
3409
- totalChecks++;
3410
- const actualValue = obs.facts[key];
3411
- if (deepEqual(actualValue, expectedValue)) {
3412
- passedChecks++;
3413
- } else {
3414
- anomalies.push({
3415
- code: "ASSERTION_FAILED",
3416
- level: "warning",
3417
- message: `Assertion failed for facts.${key}`,
3418
- field: `facts.${key}`,
3419
- expected: expectedValue,
3420
- actual: actualValue
3421
- });
3422
- }
3423
- }
3424
- }
3425
- }
3426
- const confidence = totalChecks > 0 ? passedChecks / totalChecks : 0;
3427
- const hasCritical = anomalies.some((a) => a.level === "critical");
3428
- const status = computeTruthStatus(confidence, hasCritical, anomalies.length);
3429
- const isDeed = status === "confirmed" || status === "partial" && !hasCritical;
3430
- return {
3431
- status,
3432
- confidence,
3433
- anomalies,
3434
- passedChecks,
3435
- totalChecks,
3436
- verifiedAt: Date.now(),
3437
- isDeed
3438
- };
3439
- }
3440
- function computeTruthStatus(confidence, hasCritical, anomalyCount) {
3441
- if (hasCritical) return "failed";
3442
- if (confidence === 1) return "confirmed";
3443
- if (confidence >= 0.8) return "partial";
3444
- if (confidence >= 0.5) return "uncertain";
3445
- return "disputed";
3446
- }
3447
- function verifyObservation(obs, expected) {
3448
- const verdict = scoreTruth(obs, expected);
3449
- return { observation: obs, verdict };
3450
- }
3451
- function deepEqual(a, b) {
3452
- if (a === b) return true;
3453
- if (a === null || b === null) return false;
3454
- if (typeof a !== typeof b) return false;
3455
- if (typeof a !== "object") return String(a) === String(b);
3456
- if (Array.isArray(a) && Array.isArray(b)) {
3457
- if (a.length !== b.length) return false;
3458
- return a.every((v, i) => deepEqual(v, b[i]));
3459
- }
3460
- if (Array.isArray(a) !== Array.isArray(b)) return false;
3461
- const aKeys = Object.keys(a);
3462
- const bKeys = Object.keys(b);
3463
- if (aKeys.length !== bKeys.length) return false;
3464
- return aKeys.every(
3465
- (key) => deepEqual(
3466
- a[key],
3467
- b[key]
3468
- )
3469
- );
3470
- }
3471
- var init_truth_scoring = __esm({
3472
- "src/engine/observation/truth-scoring.ts"() {
3473
- }
3474
- });
3475
-
3476
3240
  // src/engine/observation/response-observer.ts
3477
3241
  function verifyResponse(ctx, response) {
3478
3242
  if (!response.effect || typeof response.effect !== "string") {
@@ -3543,15 +3307,97 @@ var init_varint = __esm({
3543
3307
  var axis_bin_exports = {};
3544
3308
  __export(axis_bin_exports, {
3545
3309
  AxisFrameZ: () => AxisFrameZ,
3546
- decodeFrame: () => import_axis_protocol4.decodeFrame,
3547
- encodeFrame: () => import_axis_protocol4.encodeFrame,
3548
- getSignTarget: () => import_axis_protocol4.getSignTarget
3549
- });
3550
- var z, import_axis_protocol4, AxisFrameZ;
3310
+ decodeFrame: () => decodeFrame,
3311
+ encodeFrame: () => encodeFrame,
3312
+ getSignTarget: () => getSignTarget
3313
+ });
3314
+ function encodeFrame(frame) {
3315
+ const hdrBytes = (0, import_axis_protocol.encodeTLVs)(
3316
+ Array.from(frame.headers.entries()).map(([t, v]) => ({
3317
+ type: t,
3318
+ value: v
3319
+ }))
3320
+ );
3321
+ if (hdrBytes.length > import_axis_protocol2.MAX_HDR_LEN) throw new Error("Header too large");
3322
+ if (frame.body.length > import_axis_protocol2.MAX_BODY_LEN) throw new Error("Body too large");
3323
+ if (frame.sig.length > import_axis_protocol2.MAX_SIG_LEN) throw new Error("Signature too large");
3324
+ const hdrLenBytes = (0, import_axis_protocol3.encodeVarint)(hdrBytes.length);
3325
+ const bodyLenBytes = (0, import_axis_protocol3.encodeVarint)(frame.body.length);
3326
+ const sigLenBytes = (0, import_axis_protocol3.encodeVarint)(frame.sig.length);
3327
+ const totalLen = 5 + // Magic (AXIS1)
3328
+ 1 + // Version
3329
+ 1 + // Flags
3330
+ hdrLenBytes.length + bodyLenBytes.length + sigLenBytes.length + hdrBytes.length + frame.body.length + frame.sig.length;
3331
+ if (totalLen > import_axis_protocol2.MAX_FRAME_LEN) throw new Error("Total frame too large");
3332
+ const buf = new Uint8Array(totalLen);
3333
+ let offset = 0;
3334
+ buf.set(import_axis_protocol2.AXIS_MAGIC, offset);
3335
+ offset += 5;
3336
+ buf[offset++] = import_axis_protocol2.AXIS_VERSION;
3337
+ buf[offset++] = frame.flags;
3338
+ buf.set(hdrLenBytes, offset);
3339
+ offset += hdrLenBytes.length;
3340
+ buf.set(bodyLenBytes, offset);
3341
+ offset += bodyLenBytes.length;
3342
+ buf.set(sigLenBytes, offset);
3343
+ offset += sigLenBytes.length;
3344
+ buf.set(hdrBytes, offset);
3345
+ offset += hdrBytes.length;
3346
+ buf.set(frame.body, offset);
3347
+ offset += frame.body.length;
3348
+ buf.set(frame.sig, offset);
3349
+ offset += frame.sig.length;
3350
+ return buf;
3351
+ }
3352
+ function decodeFrame(buf) {
3353
+ let offset = 0;
3354
+ if (offset + 5 > buf.length) throw new Error("Packet too short");
3355
+ for (let i = 0; i < 5; i++) {
3356
+ if (buf[offset + i] !== import_axis_protocol2.AXIS_MAGIC[i]) throw new Error("Invalid Magic");
3357
+ }
3358
+ offset += 5;
3359
+ const ver = buf[offset++];
3360
+ if (ver !== import_axis_protocol2.AXIS_VERSION) throw new Error(`Unsupported version: ${ver}`);
3361
+ const flags = buf[offset++];
3362
+ const { value: hdrLen, length: hlLen } = (0, import_axis_protocol3.decodeVarint)(buf, offset);
3363
+ offset += hlLen;
3364
+ if (hdrLen > import_axis_protocol2.MAX_HDR_LEN) throw new Error("Header limit exceeded");
3365
+ const { value: bodyLen, length: blLen } = (0, import_axis_protocol3.decodeVarint)(buf, offset);
3366
+ offset += blLen;
3367
+ if (bodyLen > import_axis_protocol2.MAX_BODY_LEN) throw new Error("Body limit exceeded");
3368
+ const { value: sigLen, length: slLen } = (0, import_axis_protocol3.decodeVarint)(buf, offset);
3369
+ offset += slLen;
3370
+ if (sigLen > import_axis_protocol2.MAX_SIG_LEN) throw new Error("Signature limit exceeded");
3371
+ if (offset + hdrLen + bodyLen + sigLen > buf.length) {
3372
+ throw new Error("Frame truncated");
3373
+ }
3374
+ const hdrBytes = buf.slice(offset, offset + hdrLen);
3375
+ offset += hdrLen;
3376
+ const bodyBytes = buf.slice(offset, offset + bodyLen);
3377
+ offset += bodyLen;
3378
+ const sigBytes = buf.slice(offset, offset + sigLen);
3379
+ offset += sigLen;
3380
+ const headers = (0, import_axis_protocol.decodeTLVs)(hdrBytes);
3381
+ return {
3382
+ flags,
3383
+ headers,
3384
+ body: bodyBytes,
3385
+ sig: sigBytes
3386
+ };
3387
+ }
3388
+ function getSignTarget(frame) {
3389
+ return encodeFrame({
3390
+ ...frame,
3391
+ sig: new Uint8Array(0)
3392
+ });
3393
+ }
3394
+ var z, AxisFrameZ;
3551
3395
  var init_axis_bin = __esm({
3552
3396
  "src/core/axis-bin.ts"() {
3553
3397
  z = __toESM(require("zod"));
3554
- import_axis_protocol4 = require("@nextera.one/axis-protocol");
3398
+ init_constants();
3399
+ init_tlv();
3400
+ init_varint();
3555
3401
  AxisFrameZ = z.object({
3556
3402
  /** Flag bits for protocol control (e.g., encryption, compression) */
3557
3403
  flags: z.number().int().nonnegative(),
@@ -3570,7 +3416,12 @@ var init_axis_bin = __esm({
3570
3416
 
3571
3417
  // src/core/signature.ts
3572
3418
  function computeSignaturePayload(frame) {
3573
- return Buffer.from((0, import_axis_protocol4.getSignTarget)(frame));
3419
+ const frameWithoutSig = {
3420
+ ...frame,
3421
+ sig: new Uint8Array(0)
3422
+ };
3423
+ const encoded = encodeFrame(frameWithoutSig);
3424
+ return Buffer.from(encoded);
3574
3425
  }
3575
3426
  function signFrame(frame, privateKey) {
3576
3427
  const payload = computeSignaturePayload(frame);
@@ -4458,7 +4309,7 @@ function encodeAxis1Frame(f) {
4458
4309
  if (!Buffer.isBuffer(f.hdr) || !Buffer.isBuffer(f.body) || !Buffer.isBuffer(f.sig)) {
4459
4310
  throw new Error("AXIS1_BAD_BUFFERS");
4460
4311
  }
4461
- if (f.ver !== import_axis_protocol5.AXIS_VERSION) throw new Error("AXIS1_BAD_VER");
4312
+ if (f.ver !== 1) throw new Error("AXIS1_BAD_VER");
4462
4313
  const hdrLen = encVarint(BigInt(f.hdr.length));
4463
4314
  const bodyLen = encVarint(BigInt(f.body.length));
4464
4315
  const sigLen = encVarint(BigInt(f.sig.length));
@@ -4474,18 +4325,17 @@ function encodeAxis1Frame(f) {
4474
4325
  f.sig
4475
4326
  ]);
4476
4327
  }
4477
- var import_axis_protocol5, MAGIC;
4328
+ var MAGIC;
4478
4329
  var init_axis1_encode = __esm({
4479
4330
  "src/codec/axis1.encode.ts"() {
4480
- import_axis_protocol5 = require("@nextera.one/axis-protocol");
4481
4331
  init_tlv_encode();
4482
- MAGIC = Buffer.from(import_axis_protocol5.AXIS_MAGIC);
4332
+ MAGIC = Buffer.from("AXIS1", "ascii");
4483
4333
  }
4484
4334
  });
4485
4335
 
4486
4336
  // src/codec/axis1.signing.ts
4487
4337
  function axis1SigningBytes(params) {
4488
- if (params.ver !== import_axis_protocol6.AXIS_VERSION) throw new Error("AXIS1_BAD_VER");
4338
+ if (params.ver !== 1) throw new Error("AXIS1_BAD_VER");
4489
4339
  const hdrLen = encVarint(BigInt(params.hdr.length));
4490
4340
  const bodyLen = encVarint(BigInt(params.body.length));
4491
4341
  const sigLenZero = encVarint(0n);
@@ -4500,12 +4350,11 @@ function axis1SigningBytes(params) {
4500
4350
  params.body
4501
4351
  ]);
4502
4352
  }
4503
- var import_axis_protocol6, MAGIC2;
4353
+ var MAGIC2;
4504
4354
  var init_axis1_signing = __esm({
4505
4355
  "src/codec/axis1.signing.ts"() {
4506
- import_axis_protocol6 = require("@nextera.one/axis-protocol");
4507
4356
  init_tlv_encode();
4508
- MAGIC2 = Buffer.from(import_axis_protocol6.AXIS_MAGIC);
4357
+ MAGIC2 = Buffer.from("AXIS1", "ascii");
4509
4358
  }
4510
4359
  });
4511
4360
 
@@ -4835,12 +4684,11 @@ function decodeAxis1Frame(buf) {
4835
4684
  if (off !== buf.length) throw new Error("AXIS1_TRAILING_BYTES");
4836
4685
  return { ver, flags, hdr, body, sig, frameSize: buf.length };
4837
4686
  }
4838
- var import_axis_protocol7, MAGIC3;
4687
+ var MAGIC3;
4839
4688
  var init_frame = __esm({
4840
4689
  "src/types/frame.ts"() {
4841
- import_axis_protocol7 = require("@nextera.one/axis-protocol");
4842
4690
  init_tlv2();
4843
- MAGIC3 = Buffer.from(import_axis_protocol7.AXIS_MAGIC);
4691
+ MAGIC3 = Buffer.from("AXIS1", "ascii");
4844
4692
  }
4845
4693
  });
4846
4694
 
@@ -4963,52 +4811,7 @@ var init_capabilities = __esm({
4963
4811
  }
4964
4812
  });
4965
4813
 
4966
- // src/law/law.types.ts
4967
- function buildAxisLawEvaluationContext(input) {
4968
- const metadata = input.metadata ?? {};
4969
- const packet = input.packet;
4970
- const packetBody = input.frameBody ?? packet?.body ?? packet?.args ?? void 0;
4971
- const capsuleId = metadata.capsule_id ?? metadata.capsuleId ?? packet?.capsuleId ?? input.clientId;
4972
- const audience = input.aud ?? metadata.audience ?? packet?.aud;
4973
- const tps = metadata.tps ?? packet?.tps ?? packet?.tickTps;
4974
- return {
4975
- actorId: input.actorId,
4976
- intent: input.intent,
4977
- audience,
4978
- tps,
4979
- country: input.country,
4980
- ip: input.ip,
4981
- path: input.path,
4982
- clientId: input.clientId,
4983
- deviceId: input.deviceId,
4984
- sessionId: input.sessionId,
4985
- capsuleId,
4986
- metadata,
4987
- packet,
4988
- frameBody: packetBody
4989
- };
4990
- }
4991
- var init_law_types = __esm({
4992
- "src/law/law.types.ts"() {
4993
- }
4994
- });
4995
-
4996
- // src/law/index.ts
4997
- var law_exports = {};
4998
- __export(law_exports, {
4999
- buildAxisLawEvaluationContext: () => buildAxisLawEvaluationContext
5000
- });
5001
- var init_law = __esm({
5002
- "src/law/index.ts"() {
5003
- init_law_types();
5004
- }
5005
- });
5006
-
5007
4814
  // src/risk/index.ts
5008
- var risk_exports = {};
5009
- __export(risk_exports, {
5010
- RiskDecision: () => RiskDecision
5011
- });
5012
4815
  var RiskDecision;
5013
4816
  var init_risk = __esm({
5014
4817
  "src/risk/index.ts"() {
@@ -5294,49 +5097,12 @@ var init_upload_types = __esm({
5294
5097
  var require_axis_files_handlers = __commonJS({
5295
5098
  "src/upload/axis-files.handlers.ts"(exports2) {
5296
5099
  "use strict";
5297
- var __createBinding = exports2 && exports2.__createBinding || (Object.create ? (function(o, m, k, k2) {
5298
- if (k2 === void 0) k2 = k;
5299
- var desc = Object.getOwnPropertyDescriptor(m, k);
5300
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
5301
- desc = { enumerable: true, get: function() {
5302
- return m[k];
5303
- } };
5304
- }
5305
- Object.defineProperty(o, k2, desc);
5306
- }) : (function(o, m, k, k2) {
5307
- if (k2 === void 0) k2 = k;
5308
- o[k2] = m[k];
5309
- }));
5310
- var __setModuleDefault = exports2 && exports2.__setModuleDefault || (Object.create ? (function(o, v) {
5311
- Object.defineProperty(o, "default", { enumerable: true, value: v });
5312
- }) : function(o, v) {
5313
- o["default"] = v;
5314
- });
5315
5100
  var __decorate = exports2 && exports2.__decorate || function(decorators, target, key, desc) {
5316
5101
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
5317
5102
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
5318
5103
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
5319
5104
  return c > 3 && r && Object.defineProperty(target, key, r), r;
5320
5105
  };
5321
- var __importStar = exports2 && exports2.__importStar || /* @__PURE__ */ (function() {
5322
- var ownKeys = function(o) {
5323
- ownKeys = Object.getOwnPropertyNames || function(o2) {
5324
- var ar = [];
5325
- for (var k in o2) if (Object.prototype.hasOwnProperty.call(o2, k)) ar[ar.length] = k;
5326
- return ar;
5327
- };
5328
- return ownKeys(o);
5329
- };
5330
- return function(mod) {
5331
- if (mod && mod.__esModule) return mod;
5332
- var result = {};
5333
- if (mod != null) {
5334
- for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
5335
- }
5336
- __setModuleDefault(result, mod);
5337
- return result;
5338
- };
5339
- })();
5340
5106
  var __metadata = exports2 && exports2.__metadata || function(k, v) {
5341
5107
  if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
5342
5108
  };
@@ -5361,7 +5127,7 @@ var require_axis_files_handlers = __commonJS({
5361
5127
  Object.defineProperty(exports2, "__esModule", { value: true });
5362
5128
  exports2.AxisFilesFinalizeHandler = exports2.AxisFilesDownloadHandler = void 0;
5363
5129
  var common_1 = require("@nestjs/common");
5364
- var crypto3 = __importStar(require("crypto"));
5130
+ var crypto3 = require("crypto");
5365
5131
  var axis_bin_1 = (init_axis_bin(), __toCommonJS(axis_bin_exports));
5366
5132
  var varint_1 = (init_varint(), __toCommonJS(varint_exports));
5367
5133
  var handler_decorator_1 = (init_handler_decorator(), __toCommonJS(handler_decorator_exports));
@@ -6118,374 +5884,6 @@ var require_axis_sensor_chain_service = __commonJS({
6118
5884
  }
6119
5885
  });
6120
5886
 
6121
- // src/timeline/timeline.engine.ts
6122
- function generateId(prefix) {
6123
- return `${prefix}_${(0, import_crypto8.randomBytes)(16).toString("hex")}`;
6124
- }
6125
- function sha2566(data) {
6126
- return (0, import_crypto8.createHash)("sha256").update(data).digest("hex");
6127
- }
6128
- function hashPayload2(payload) {
6129
- return sha2566(JSON.stringify(payload));
6130
- }
6131
- function diffObjects(a, b) {
6132
- const diffs = [];
6133
- const allKeys = /* @__PURE__ */ new Set([...Object.keys(a), ...Object.keys(b)]);
6134
- for (const key of allKeys) {
6135
- const va = a[key];
6136
- const vb = b[key];
6137
- if (JSON.stringify(va) !== JSON.stringify(vb)) {
6138
- diffs.push({ field: key, original: va, replayed: vb });
6139
- }
6140
- }
6141
- return diffs;
6142
- }
6143
- var import_crypto8, TimelineEngine;
6144
- var init_timeline_engine = __esm({
6145
- "src/timeline/timeline.engine.ts"() {
6146
- import_crypto8 = require("crypto");
6147
- TimelineEngine = class {
6148
- constructor(store) {
6149
- this.store = store;
6150
- this.handlers = /* @__PURE__ */ new Map();
6151
- }
6152
- /** Register an intent handler for timeline execution */
6153
- registerHandler(handler) {
6154
- this.handlers.set(handler.intent, handler);
6155
- }
6156
- // ──────────────────────────────────────────────────────────────────────
6157
- // Record (store a real execution as a timeline event)
6158
- // ──────────────────────────────────────────────────────────────────────
6159
- async recordEvent(intent, actorId, payload, result, options = {}) {
6160
- const event = {
6161
- event_id: generateId("evt"),
6162
- timeline_id: options.timelineId ?? "prime",
6163
- branch_id: options.branchId ?? "main",
6164
- parent_event_id: options.parentEventId ?? null,
6165
- intent,
6166
- actor_id: actorId,
6167
- capsule_id: options.capsuleId,
6168
- tps_coordinate: options.tpsCoordinate,
6169
- payload_hash: hashPayload2(payload),
6170
- result_hash: hashPayload2(result),
6171
- status: "executed",
6172
- domain: "prime",
6173
- determinism: options.determinism ?? "deterministic",
6174
- witness_id: options.witnessId,
6175
- created_at: Date.now(),
6176
- metadata: { payload, result }
6177
- };
6178
- await this.store.saveEvent(event);
6179
- return event;
6180
- }
6181
- // ──────────────────────────────────────────────────────────────────────
6182
- // Replay
6183
- // ──────────────────────────────────────────────────────────────────────
6184
- async replay(request) {
6185
- const originalEvent = await this.store.getEvent(request.source_event_id);
6186
- if (!originalEvent) {
6187
- throw new Error(`Event ${request.source_event_id} not found`);
6188
- }
6189
- const handler = this.handlers.get(originalEvent.intent);
6190
- if (!handler) {
6191
- throw new Error(`No handler registered for intent '${originalEvent.intent}'`);
6192
- }
6193
- const originalPayload = originalEvent.metadata?.payload ?? {};
6194
- const replayPayload = request.mode === "analytical" && request.override_payload ? request.override_payload : originalPayload;
6195
- const snapshot = await this.store.getSnapshotByEvent(originalEvent.event_id);
6196
- const context = {
6197
- event_id: generateId("evt"),
6198
- timeline_id: originalEvent.timeline_id,
6199
- branch_id: `replay_${originalEvent.branch_id}`,
6200
- domain: "audit",
6201
- actor_id: originalEvent.actor_id,
6202
- tps_coordinate: originalEvent.tps_coordinate,
6203
- snapshot: snapshot ?? void 0,
6204
- is_replay: true,
6205
- is_simulation: false
6206
- };
6207
- const startMs = Date.now();
6208
- const handlerResult = await handler.execute(replayPayload, context);
6209
- const durationMs = Date.now() - startMs;
6210
- const replayedEvent = {
6211
- event_id: context.event_id,
6212
- timeline_id: originalEvent.timeline_id,
6213
- branch_id: context.branch_id,
6214
- parent_event_id: originalEvent.event_id,
6215
- intent: originalEvent.intent,
6216
- actor_id: originalEvent.actor_id,
6217
- capsule_id: originalEvent.capsule_id,
6218
- tps_coordinate: originalEvent.tps_coordinate,
6219
- payload_hash: hashPayload2(replayPayload),
6220
- result_hash: hashPayload2(handlerResult.result_data),
6221
- status: "replayed",
6222
- domain: "audit",
6223
- determinism: originalEvent.determinism,
6224
- created_at: Date.now(),
6225
- metadata: { payload: replayPayload, result: handlerResult.result_data }
6226
- };
6227
- await this.store.saveEvent(replayedEvent);
6228
- const originalResult = originalEvent.metadata?.result ?? {};
6229
- const differences = diffObjects(originalResult, handlerResult.result_data);
6230
- const deterministicMatch = originalEvent.result_hash === replayedEvent.result_hash;
6231
- return {
6232
- original_event: originalEvent,
6233
- replayed_event: replayedEvent,
6234
- mode: request.mode,
6235
- deterministic_match: deterministicMatch,
6236
- differences,
6237
- duration_ms: durationMs
6238
- };
6239
- }
6240
- // ──────────────────────────────────────────────────────────────────────
6241
- // Fork
6242
- // ──────────────────────────────────────────────────────────────────────
6243
- async fork(request) {
6244
- const sourceEvent = await this.store.getEvent(request.source_event_id);
6245
- if (!sourceEvent) {
6246
- throw new Error(`Event ${request.source_event_id} not found`);
6247
- }
6248
- const handler = this.handlers.get(sourceEvent.intent);
6249
- if (!handler) {
6250
- throw new Error(`No handler registered for intent '${sourceEvent.intent}'`);
6251
- }
6252
- const branch = {
6253
- branch_id: generateId("branch"),
6254
- timeline_id: generateId("timeline"),
6255
- origin_timeline_id: sourceEvent.timeline_id,
6256
- origin_event_id: sourceEvent.event_id,
6257
- branch_type: "fork",
6258
- creator_subject_id: request.actor_id,
6259
- purpose: request.purpose,
6260
- status: "active"
6261
- };
6262
- await this.store.saveBranch(branch);
6263
- const snapshot = {
6264
- snapshot_id: generateId("snap"),
6265
- timeline_id: sourceEvent.timeline_id,
6266
- event_id: sourceEvent.event_id,
6267
- tps_coordinate: sourceEvent.tps_coordinate,
6268
- state_hash: hashPayload2(
6269
- sourceEvent.metadata?.result ?? {}
6270
- ),
6271
- state_data: sourceEvent.metadata?.result ?? {},
6272
- created_at: Date.now()
6273
- };
6274
- await this.store.saveSnapshot(snapshot);
6275
- const context = {
6276
- event_id: generateId("evt"),
6277
- timeline_id: branch.timeline_id,
6278
- branch_id: branch.branch_id,
6279
- domain: "fork",
6280
- actor_id: request.actor_id,
6281
- tps_coordinate: sourceEvent.tps_coordinate,
6282
- snapshot,
6283
- is_replay: false,
6284
- is_simulation: false
6285
- };
6286
- const handlerResult = await handler.execute(request.new_payload, context);
6287
- const forkedEvent = {
6288
- event_id: context.event_id,
6289
- timeline_id: branch.timeline_id,
6290
- branch_id: branch.branch_id,
6291
- parent_event_id: sourceEvent.event_id,
6292
- intent: sourceEvent.intent,
6293
- actor_id: request.actor_id,
6294
- tps_coordinate: sourceEvent.tps_coordinate,
6295
- payload_hash: hashPayload2(request.new_payload),
6296
- result_hash: hashPayload2(handlerResult.result_data),
6297
- status: "forked",
6298
- domain: "fork",
6299
- determinism: sourceEvent.determinism,
6300
- created_at: Date.now(),
6301
- metadata: {
6302
- payload: request.new_payload,
6303
- result: handlerResult.result_data
6304
- }
6305
- };
6306
- await this.store.saveEvent(forkedEvent);
6307
- return { branch, forked_event: forkedEvent, snapshot };
6308
- }
6309
- // ──────────────────────────────────────────────────────────────────────
6310
- // Simulate
6311
- // ──────────────────────────────────────────────────────────────────────
6312
- async simulate(request) {
6313
- const handler = this.handlers.get(request.intent);
6314
- if (!handler) {
6315
- throw new Error(`No handler registered for intent '${request.intent}'`);
6316
- }
6317
- let snapshot;
6318
- if (request.from_snapshot_id) {
6319
- const loaded = await this.store.getSnapshot(request.from_snapshot_id);
6320
- if (!loaded) {
6321
- throw new Error(`Snapshot ${request.from_snapshot_id} not found`);
6322
- }
6323
- snapshot = loaded;
6324
- }
6325
- const branch = {
6326
- branch_id: generateId("branch"),
6327
- timeline_id: generateId("timeline"),
6328
- origin_timeline_id: "prime",
6329
- origin_event_id: "simulation_origin",
6330
- branch_type: "simulation",
6331
- created_at_tps: request.at_tps,
6332
- creator_subject_id: request.actor_id,
6333
- purpose: request.purpose,
6334
- status: "active"
6335
- };
6336
- await this.store.saveBranch(branch);
6337
- const context = {
6338
- event_id: generateId("evt"),
6339
- timeline_id: branch.timeline_id,
6340
- branch_id: branch.branch_id,
6341
- domain: "shadow",
6342
- actor_id: request.actor_id,
6343
- tps_coordinate: request.at_tps,
6344
- snapshot,
6345
- is_replay: false,
6346
- is_simulation: true
6347
- };
6348
- const startMs = Date.now();
6349
- const handlerResult = await handler.execute(request.payload, context);
6350
- const durationMs = Date.now() - startMs;
6351
- const simulatedEvent = {
6352
- event_id: context.event_id,
6353
- timeline_id: branch.timeline_id,
6354
- branch_id: branch.branch_id,
6355
- parent_event_id: null,
6356
- intent: request.intent,
6357
- actor_id: request.actor_id,
6358
- tps_coordinate: request.at_tps,
6359
- payload_hash: hashPayload2(request.payload),
6360
- result_hash: hashPayload2(handlerResult.result_data),
6361
- status: "simulated",
6362
- domain: "shadow",
6363
- determinism: "bounded_nondeterministic",
6364
- created_at: Date.now(),
6365
- metadata: { payload: request.payload, result: handlerResult.result_data }
6366
- };
6367
- await this.store.saveEvent(simulatedEvent);
6368
- branch.status = "completed";
6369
- await this.store.saveBranch(branch);
6370
- return {
6371
- branch,
6372
- simulated_event: simulatedEvent,
6373
- predicted_outcome: handlerResult.result_data,
6374
- side_effects: handlerResult.side_effects ?? [],
6375
- duration_ms: durationMs
6376
- };
6377
- }
6378
- // ──────────────────────────────────────────────────────────────────────
6379
- // Compare timelines
6380
- // ──────────────────────────────────────────────────────────────────────
6381
- async compare(timelineIdA, timelineIdB) {
6382
- const eventsA = await this.store.getEventsByTimeline(timelineIdA);
6383
- const eventsB = await this.store.getEventsByTimeline(timelineIdB);
6384
- eventsA.sort((a, b) => a.created_at - b.created_at);
6385
- eventsB.sort((a, b) => a.created_at - b.created_at);
6386
- const maxLen = Math.max(eventsA.length, eventsB.length);
6387
- const eventPairs = [];
6388
- let divergencePoint;
6389
- for (let i = 0; i < maxLen; i++) {
6390
- const a = eventsA[i];
6391
- const b = eventsB[i];
6392
- if (!a || !b) {
6393
- if (!divergencePoint) {
6394
- divergencePoint = a?.event_id ?? b?.event_id;
6395
- }
6396
- continue;
6397
- }
6398
- const match = a.result_hash === b.result_hash;
6399
- const resultA = a.metadata?.result ?? {};
6400
- const resultB = b.metadata?.result ?? {};
6401
- const differences = match ? [] : diffObjects(resultA, resultB);
6402
- if (!match && !divergencePoint) {
6403
- divergencePoint = a.event_id;
6404
- }
6405
- eventPairs.push({ event_a: a, event_b: b, match, differences });
6406
- }
6407
- return {
6408
- timeline_a: timelineIdA,
6409
- timeline_b: timelineIdB,
6410
- event_pairs: eventPairs,
6411
- divergence_point: divergencePoint
6412
- };
6413
- }
6414
- // ──────────────────────────────────────────────────────────────────────
6415
- // State snapshot management
6416
- // ──────────────────────────────────────────────────────────────────────
6417
- async createSnapshot(eventId, stateData) {
6418
- const event = await this.store.getEvent(eventId);
6419
- if (!event) {
6420
- throw new Error(`Event ${eventId} not found`);
6421
- }
6422
- const snapshot = {
6423
- snapshot_id: generateId("snap"),
6424
- timeline_id: event.timeline_id,
6425
- event_id: eventId,
6426
- tps_coordinate: event.tps_coordinate,
6427
- state_hash: hashPayload2(stateData),
6428
- state_data: stateData,
6429
- created_at: Date.now()
6430
- };
6431
- await this.store.saveSnapshot(snapshot);
6432
- return snapshot;
6433
- }
6434
- async restoreSnapshot(snapshotId) {
6435
- const snapshot = await this.store.getSnapshot(snapshotId);
6436
- if (!snapshot) {
6437
- throw new Error(`Snapshot ${snapshotId} not found`);
6438
- }
6439
- return snapshot;
6440
- }
6441
- };
6442
- }
6443
- });
6444
-
6445
- // src/timeline/timeline.store.ts
6446
- var InMemoryTimelineStore;
6447
- var init_timeline_store = __esm({
6448
- "src/timeline/timeline.store.ts"() {
6449
- InMemoryTimelineStore = class {
6450
- constructor() {
6451
- this.events = /* @__PURE__ */ new Map();
6452
- this.branches = /* @__PURE__ */ new Map();
6453
- this.snapshots = /* @__PURE__ */ new Map();
6454
- }
6455
- async saveEvent(event) {
6456
- this.events.set(event.event_id, event);
6457
- }
6458
- async getEvent(eventId) {
6459
- return this.events.get(eventId) ?? null;
6460
- }
6461
- async getEventsByTimeline(timelineId) {
6462
- return [...this.events.values()].filter((e) => e.timeline_id === timelineId);
6463
- }
6464
- async getEventsByBranch(branchId) {
6465
- return [...this.events.values()].filter((e) => e.branch_id === branchId);
6466
- }
6467
- async saveBranch(branch) {
6468
- this.branches.set(branch.branch_id, branch);
6469
- }
6470
- async getBranch(branchId) {
6471
- return this.branches.get(branchId) ?? null;
6472
- }
6473
- async getBranchesByTimeline(timelineId) {
6474
- return [...this.branches.values()].filter((b) => b.timeline_id === timelineId);
6475
- }
6476
- async saveSnapshot(snapshot) {
6477
- this.snapshots.set(snapshot.snapshot_id, snapshot);
6478
- }
6479
- async getSnapshot(snapshotId) {
6480
- return this.snapshots.get(snapshotId) ?? null;
6481
- }
6482
- async getSnapshotByEvent(eventId) {
6483
- return [...this.snapshots.values()].find((s) => s.event_id === eventId) ?? null;
6484
- }
6485
- };
6486
- }
6487
- });
6488
-
6489
5887
  // src/utils/axis-tlv-codec.ts
6490
5888
  function encodeAxisTlvDto(dtoClass, data) {
6491
5889
  const schema = (0, import_dto_schema.extractDtoSchema)(dtoClass);
@@ -6578,1721 +5976,6 @@ var init_loom_types = __esm({
6578
5976
  }
6579
5977
  });
6580
5978
 
6581
- // src/loom/loom.engine.ts
6582
- function sha2567(data) {
6583
- return (0, import_crypto9.createHash)("sha256").update(data).digest("hex");
6584
- }
6585
- function hexToUint8(hex) {
6586
- const bytes2 = new Uint8Array(hex.length / 2);
6587
- for (let i = 0; i < hex.length; i += 2) {
6588
- bytes2[i / 2] = parseInt(hex.substring(i, i + 2), 16);
6589
- }
6590
- return bytes2;
6591
- }
6592
- function uint8ToHex(bytes2) {
6593
- return Array.from(bytes2).map((b) => b.toString(16).padStart(2, "0")).join("");
6594
- }
6595
- function b64ToUint8(b64) {
6596
- const bin = Buffer.from(b64, "base64");
6597
- return new Uint8Array(bin.buffer, bin.byteOffset, bin.byteLength);
6598
- }
6599
- function uint8ToB64(bytes2) {
6600
- return Buffer.from(bytes2).toString("base64");
6601
- }
6602
- function createPresenceChallenge(declaration, ttlMs = DEFAULT_PRESENCE_TTL_MS) {
6603
- const now = Date.now();
6604
- const nonce = (0, import_crypto9.randomBytes)(32).toString("hex");
6605
- const challengeId = sha2567(`${declaration.softid}:${nonce}:${now}`);
6606
- return {
6607
- challenge_id: challengeId,
6608
- nonce,
6609
- temporal_anchor: now,
6610
- ttl_ms: ttlMs,
6611
- expires_at: now + ttlMs
6612
- };
6613
- }
6614
- function presenceSigningData(challenge, deviceMeta) {
6615
- return JSON.stringify({
6616
- nonce: challenge.nonce,
6617
- temporal_anchor: challenge.temporal_anchor,
6618
- device_meta: deviceMeta ?? null
6619
- });
6620
- }
6621
- function signPresenceChallenge(challenge, privateKeyHex, publicKeyHex, declaration, kid) {
6622
- const data = presenceSigningData(challenge, declaration.device_meta);
6623
- const msgBytes = new TextEncoder().encode(data);
6624
- const secretKey = hexToUint8(privateKeyHex);
6625
- const signature = import_tweetnacl.sign.detached(msgBytes, secretKey);
6626
- return {
6627
- challenge_id: challenge.challenge_id,
6628
- signature: uint8ToHex(signature),
6629
- public_key: publicKeyHex,
6630
- kid
6631
- };
6632
- }
6633
- function verifyPresenceProof(challenge, proof, declaration, durationMs = DEFAULT_PRESENCE_DURATION_MS) {
6634
- if (Date.now() > challenge.expires_at) {
6635
- return { valid: false, error: "Challenge expired", code: "CHALLENGE_EXPIRED" };
6636
- }
6637
- if (proof.challenge_id !== challenge.challenge_id) {
6638
- return { valid: false, error: "Challenge ID mismatch", code: "CHALLENGE_MISMATCH" };
6639
- }
6640
- const data = presenceSigningData(challenge, declaration.device_meta);
6641
- const msgBytes = new TextEncoder().encode(data);
6642
- const sigBytes = hexToUint8(proof.signature);
6643
- const pubBytes = hexToUint8(proof.public_key);
6644
- let isValid;
6645
- try {
6646
- isValid = import_tweetnacl.sign.detached.verify(msgBytes, sigBytes, pubBytes);
6647
- } catch {
6648
- return { valid: false, error: "Signature verification failed", code: "SIG_INVALID" };
6649
- }
6650
- if (!isValid) {
6651
- return { valid: false, error: "Invalid signature", code: "SIG_INVALID" };
6652
- }
6653
- const now = Date.now();
6654
- const presenceId = sha2567(
6655
- `${proof.public_key}:${challenge.nonce}:${challenge.temporal_anchor}`
6656
- );
6657
- const anchorReflection = sha2567(
6658
- `ar:openlogs:loom:${proof.public_key}`
6659
- );
6660
- const receipt = {
6661
- presence_id: presenceId,
6662
- softid: declaration.softid,
6663
- anchor_reflection: anchorReflection,
6664
- scope: {
6665
- device_fingerprint: declaration.device_meta?.fingerprint
6666
- },
6667
- issued_at: now,
6668
- expires_at: now + durationMs
6669
- };
6670
- return { valid: true, presence: receipt };
6671
- }
6672
- function getPresenceStatus(receipt) {
6673
- const now = Date.now();
6674
- if (now > receipt.expires_at) return "expired";
6675
- return "active";
6676
- }
6677
- function renewPresence(receipt, extensionMs = DEFAULT_PRESENCE_DURATION_MS) {
6678
- const now = Date.now();
6679
- return {
6680
- ...receipt,
6681
- renewed_at: now,
6682
- expires_at: now + extensionMs
6683
- };
6684
- }
6685
- function createWrit(body, meta, thread, privateKeyHex, kid) {
6686
- const head = { tid: thread.tid, seq: thread.seq };
6687
- const writMeta = { ...meta, prev: thread.prevHash };
6688
- const unsigned = { head, body, meta: writMeta };
6689
- const canonical = canonicalizeWrit(unsigned);
6690
- const msgBytes = new TextEncoder().encode(canonical);
6691
- const secretKey = hexToUint8(privateKeyHex);
6692
- const signature = import_tweetnacl.sign.detached(msgBytes, secretKey);
6693
- const sig = {
6694
- alg: "ed25519",
6695
- value: uint8ToB64(signature),
6696
- kid
6697
- };
6698
- return { head, body, meta: writMeta, sig };
6699
- }
6700
- function validateWrit(writ, publicKeyHex, threadState, grants) {
6701
- const now = Math.floor(Date.now() / 1e3);
6702
- if (now < writ.meta.iat) {
6703
- return {
6704
- valid: false,
6705
- error: "Writ not yet valid (iat in future)",
6706
- code: "TEMPORAL_NOT_YET",
6707
- gate_failed: "temporal"
6708
- };
6709
- }
6710
- if (now > writ.meta.exp) {
6711
- return {
6712
- valid: false,
6713
- error: "Writ expired",
6714
- code: "TEMPORAL_EXPIRED",
6715
- gate_failed: "temporal"
6716
- };
6717
- }
6718
- if (threadState) {
6719
- if (writ.head.tid !== threadState.thread_id) {
6720
- return {
6721
- valid: false,
6722
- error: "Thread ID mismatch",
6723
- code: "CAUSAL_TID",
6724
- gate_failed: "causal"
6725
- };
6726
- }
6727
- if (writ.head.seq !== threadState.sequence + 1) {
6728
- return {
6729
- valid: false,
6730
- error: `Expected seq ${threadState.sequence + 1}, got ${writ.head.seq}`,
6731
- code: "CAUSAL_SEQ",
6732
- gate_failed: "causal"
6733
- };
6734
- }
6735
- if (writ.meta.prev !== threadState.last_receipt_hash) {
6736
- return {
6737
- valid: false,
6738
- error: "Previous receipt hash mismatch",
6739
- code: "CAUSAL_PREV",
6740
- gate_failed: "causal"
6741
- };
6742
- }
6743
- } else {
6744
- if (writ.head.seq !== 1) {
6745
- return {
6746
- valid: false,
6747
- error: "First writ in thread must have seq=1",
6748
- code: "CAUSAL_FIRST_SEQ",
6749
- gate_failed: "causal"
6750
- };
6751
- }
6752
- if (writ.meta.prev !== "") {
6753
- return {
6754
- valid: false,
6755
- error: "First writ must have empty prev hash",
6756
- code: "CAUSAL_FIRST_PREV",
6757
- gate_failed: "causal"
6758
- };
6759
- }
6760
- }
6761
- if (writ.body.law !== "self") {
6762
- const matchingGrant = grants.find(
6763
- (g) => g.grant_id === writ.body.law && g.subject === writ.body.who && grantCoversAction(g, writ.body.act, writ.body.res, now)
6764
- );
6765
- if (!matchingGrant) {
6766
- return {
6767
- valid: false,
6768
- error: `No valid grant found for law=${writ.body.law}`,
6769
- code: "LEGAL_NO_GRANT",
6770
- gate_failed: "legal"
6771
- };
6772
- }
6773
- }
6774
- const unsigned = {
6775
- head: writ.head,
6776
- body: writ.body,
6777
- meta: writ.meta
6778
- };
6779
- const canonical = canonicalizeWrit(unsigned);
6780
- const msgBytes = new TextEncoder().encode(canonical);
6781
- const sigBytes = b64ToUint8(writ.sig.value);
6782
- const pubBytes = hexToUint8(publicKeyHex);
6783
- let sigValid;
6784
- try {
6785
- sigValid = import_tweetnacl.sign.detached.verify(msgBytes, sigBytes, pubBytes);
6786
- } catch {
6787
- return {
6788
- valid: false,
6789
- error: "Signature verification failed",
6790
- code: "AUTH_SIG_FAIL",
6791
- gate_failed: "authentic"
6792
- };
6793
- }
6794
- if (!sigValid) {
6795
- return {
6796
- valid: false,
6797
- error: "Invalid signature",
6798
- code: "AUTH_SIG_INVALID",
6799
- gate_failed: "authentic"
6800
- };
6801
- }
6802
- return { valid: true, writ };
6803
- }
6804
- function grantCoversAction(grant, action, resource, nowUnix) {
6805
- if (nowUnix < grant.meta.iat || nowUnix > grant.meta.exp) {
6806
- return false;
6807
- }
6808
- return grant.caps.some(
6809
- (cap) => matchOec(cap.oec, action) && matchScope(cap.scope, resource)
6810
- );
6811
- }
6812
- function matchOec(pattern, action) {
6813
- if (pattern === "*") return true;
6814
- if (pattern === action) return true;
6815
- if (pattern.endsWith(".*")) {
6816
- const prefix = pattern.slice(0, -2);
6817
- return action.startsWith(prefix + ".");
6818
- }
6819
- return false;
6820
- }
6821
- function matchScope(pattern, resource) {
6822
- if (pattern === "*") return true;
6823
- if (pattern === resource) return true;
6824
- if (pattern.includes("*")) {
6825
- const regex = new RegExp(
6826
- "^" + pattern.replace(/\./g, "\\.").replace(/\*/g, "[^:]*") + "$"
6827
- );
6828
- return regex.test(resource);
6829
- }
6830
- return false;
6831
- }
6832
- function getGrantStatus(grant, revocations) {
6833
- const now = Math.floor(Date.now() / 1e3);
6834
- const revoked = revocations.find(
6835
- (r) => r.target_type === "grant" && r.target_id === grant.grant_id
6836
- );
6837
- if (revoked && revoked.effective_at <= now * 1e3) {
6838
- return "revoked";
6839
- }
6840
- if (now > grant.meta.exp) return "expired";
6841
- return "active";
6842
- }
6843
- function validateGrant(grant, issuerPublicKeyHex) {
6844
- const unsigned = {
6845
- grant_id: grant.grant_id,
6846
- issuer: grant.issuer,
6847
- subject: grant.subject,
6848
- grant_type: grant.grant_type,
6849
- caps: grant.caps,
6850
- meta: grant.meta
6851
- };
6852
- const canonical = canonicalizeGrant(unsigned);
6853
- const msgBytes = new TextEncoder().encode(canonical);
6854
- const sigBytes = b64ToUint8(grant.sig.value);
6855
- const pubBytes = hexToUint8(issuerPublicKeyHex);
6856
- let valid;
6857
- try {
6858
- valid = import_tweetnacl.sign.detached.verify(msgBytes, sigBytes, pubBytes);
6859
- } catch {
6860
- return { valid: false, error: "Grant signature verification failed", code: "GRANT_SIG_FAIL" };
6861
- }
6862
- if (!valid) {
6863
- return { valid: false, error: "Invalid grant signature", code: "GRANT_SIG_INVALID" };
6864
- }
6865
- return { valid: true, grant };
6866
- }
6867
- function createGrant(grantId, issuer, subject, grantType, caps, meta, privateKeyHex, kid) {
6868
- const unsigned = {
6869
- grant_id: grantId,
6870
- issuer,
6871
- subject,
6872
- grant_type: grantType,
6873
- caps,
6874
- meta
6875
- };
6876
- const canonical = canonicalizeGrant(unsigned);
6877
- const msgBytes = new TextEncoder().encode(canonical);
6878
- const secretKey = hexToUint8(privateKeyHex);
6879
- const signature = import_tweetnacl.sign.detached(msgBytes, secretKey);
6880
- return {
6881
- ...unsigned,
6882
- sig: {
6883
- alg: "ed25519",
6884
- value: uint8ToB64(signature),
6885
- kid
6886
- }
6887
- };
6888
- }
6889
- function createReceipt(writ, effect, prevReceipt, metadata) {
6890
- const now = Date.now();
6891
- const sequence = prevReceipt ? prevReceipt.sequence + 1 : 1;
6892
- const prevHash = prevReceipt?.hash ?? null;
6893
- const writHash = sha2567(canonicalizeWrit({
6894
- head: writ.head,
6895
- body: writ.body,
6896
- meta: writ.meta
6897
- }));
6898
- const hashInput = [
6899
- prevHash ?? "",
6900
- writHash,
6901
- writ.head.tid,
6902
- String(sequence),
6903
- effect,
6904
- String(now)
6905
- ].join(":");
6906
- const receiptHash = sha2567(hashInput);
6907
- const receiptId = sha2567(`receipt:${receiptHash}:${now}`);
6908
- return {
6909
- receipt_id: receiptId,
6910
- writ_hash: writHash,
6911
- thread_id: writ.head.tid,
6912
- sequence,
6913
- effect,
6914
- hash: receiptHash,
6915
- prev_hash: prevHash,
6916
- executed_at: now,
6917
- metadata
6918
- };
6919
- }
6920
- function verifyReceiptChain(receipts) {
6921
- if (receipts.length === 0) return { valid: true };
6922
- const sorted = [...receipts].sort((a, b) => a.sequence - b.sequence);
6923
- if (sorted[0].prev_hash !== null) {
6924
- return {
6925
- valid: false,
6926
- brokenAt: 0,
6927
- error: "First receipt must have null prev_hash"
6928
- };
6929
- }
6930
- for (let i = 1; i < sorted.length; i++) {
6931
- if (sorted[i].prev_hash !== sorted[i - 1].hash) {
6932
- return {
6933
- valid: false,
6934
- brokenAt: i,
6935
- error: `Receipt ${i} prev_hash does not match receipt ${i - 1} hash`
6936
- };
6937
- }
6938
- }
6939
- return { valid: true };
6940
- }
6941
- function updateThreadState(receipt, softid) {
6942
- return {
6943
- thread_id: receipt.thread_id,
6944
- softid,
6945
- last_receipt_hash: receipt.hash,
6946
- sequence: receipt.sequence,
6947
- updated_at: receipt.executed_at
6948
- };
6949
- }
6950
- function createRevocation(targetType, targetId, issuerSoftid, privateKeyHex, reason) {
6951
- const now = Date.now();
6952
- const revocationId = sha2567(`revoke:${targetType}:${targetId}:${now}`);
6953
- const payload = JSON.stringify({
6954
- revocation_id: revocationId,
6955
- target_type: targetType,
6956
- target_id: targetId,
6957
- issuer_softid: issuerSoftid,
6958
- effective_at: now,
6959
- reason: reason ?? null
6960
- });
6961
- const msgBytes = new TextEncoder().encode(payload);
6962
- const secretKey = hexToUint8(privateKeyHex);
6963
- const signature = import_tweetnacl.sign.detached(msgBytes, secretKey);
6964
- return {
6965
- revocation_id: revocationId,
6966
- target_type: targetType,
6967
- target_id: targetId,
6968
- issuer_softid: issuerSoftid,
6969
- reason,
6970
- effective_at: now,
6971
- sig_value: uint8ToHex(signature)
6972
- };
6973
- }
6974
- function isRevoked(targetType, targetId, revocations) {
6975
- const now = Date.now();
6976
- return revocations.some(
6977
- (r) => r.target_type === targetType && r.target_id === targetId && r.effective_at <= now
6978
- );
6979
- }
6980
- function executeLoomPipeline(writ, publicKeyHex, presence, threadState, grants, revocations, prevReceipt) {
6981
- const presenceStatus = getPresenceStatus(presence);
6982
- if (presenceStatus !== "active") {
6983
- return { valid: false, error: "Presence not active", code: "PRESENCE_INACTIVE" };
6984
- }
6985
- if (isRevoked("presence", presence.presence_id, revocations)) {
6986
- return { valid: false, error: "Presence revoked", code: "PRESENCE_REVOKED" };
6987
- }
6988
- const activeGrants = grants.filter(
6989
- (g) => getGrantStatus(g, revocations) === "active"
6990
- );
6991
- const writResult = validateWrit(writ, publicKeyHex, threadState, activeGrants);
6992
- if (!writResult.valid) {
6993
- return { valid: false, error: writResult.error, code: writResult.code };
6994
- }
6995
- const receipt = createReceipt(writ, "ALLOW", prevReceipt);
6996
- const newThreadState = updateThreadState(receipt, writ.body.who);
6997
- return {
6998
- receipt,
6999
- threadState: newThreadState,
7000
- writValidation: writResult
7001
- };
7002
- }
7003
- var import_crypto9, import_tweetnacl, DEFAULT_PRESENCE_TTL_MS, DEFAULT_PRESENCE_DURATION_MS;
7004
- var init_loom_engine = __esm({
7005
- "src/loom/loom.engine.ts"() {
7006
- import_crypto9 = require("crypto");
7007
- import_tweetnacl = require("tweetnacl");
7008
- init_loom_types();
7009
- DEFAULT_PRESENCE_TTL_MS = 5e3;
7010
- DEFAULT_PRESENCE_DURATION_MS = 30 * 60 * 1e3;
7011
- }
7012
- });
7013
-
7014
- // src/idel/idel.compiler.ts
7015
- function validateType(value, expectedType) {
7016
- switch (expectedType) {
7017
- case "string":
7018
- return typeof value === "string";
7019
- case "number":
7020
- return typeof value === "number" && Number.isFinite(value);
7021
- case "boolean":
7022
- return typeof value === "boolean";
7023
- case "object":
7024
- return typeof value === "object" && value !== null && !Array.isArray(value);
7025
- case "array":
7026
- return Array.isArray(value);
7027
- default:
7028
- return true;
7029
- }
7030
- }
7031
- function assessRisk(schema, proposal, constraints) {
7032
- const factors = [];
7033
- let score = 0;
7034
- const baseRiskMap = {
7035
- none: 0,
7036
- low: 0.1,
7037
- medium: 0.3,
7038
- high: 0.6,
7039
- critical: 0.9
7040
- };
7041
- score = baseRiskMap[schema.risk_level] ?? 0;
7042
- if (schema.risk_level !== "none") {
7043
- factors.push(`Base risk: ${schema.risk_level}`);
7044
- }
7045
- if (schema.has_side_effects) {
7046
- score += 0.1;
7047
- factors.push("Has side effects");
7048
- }
7049
- if (!schema.reversible) {
7050
- score += 0.1;
7051
- factors.push("Not reversible");
7052
- }
7053
- const failed = constraints.filter((c) => !c.satisfied);
7054
- if (failed.length > 0) {
7055
- score += 0.05 * failed.length;
7056
- factors.push(`${failed.length} unsatisfied constraint(s)`);
7057
- }
7058
- score = Math.min(score, 1);
7059
- let level;
7060
- if (score <= 0) level = "none";
7061
- else if (score <= 0.2) level = "low";
7062
- else if (score <= 0.5) level = "medium";
7063
- else if (score <= 0.8) level = "high";
7064
- else level = "critical";
7065
- return { level, score, factors };
7066
- }
7067
- var IdelSchemaRegistry, IdelCompiler;
7068
- var init_idel_compiler = __esm({
7069
- "src/idel/idel.compiler.ts"() {
7070
- IdelSchemaRegistry = class {
7071
- constructor() {
7072
- this.schemas = /* @__PURE__ */ new Map();
7073
- this.aliases = /* @__PURE__ */ new Map();
7074
- }
7075
- register(schema) {
7076
- this.schemas.set(schema.intent, schema);
7077
- }
7078
- registerAlias(alias, intent) {
7079
- this.aliases.set(alias.toLowerCase(), intent);
7080
- }
7081
- get(intent) {
7082
- return this.schemas.get(intent);
7083
- }
7084
- resolve(raw) {
7085
- const exact = this.schemas.get(raw);
7086
- if (exact) return exact;
7087
- const aliased = this.aliases.get(raw.toLowerCase());
7088
- if (aliased) return this.schemas.get(aliased);
7089
- const candidates = [...this.schemas.keys()].filter(
7090
- (k) => k.startsWith(raw + ".") || k.toLowerCase().includes(raw.toLowerCase())
7091
- );
7092
- if (candidates.length === 1) {
7093
- return this.schemas.get(candidates[0]);
7094
- }
7095
- return void 0;
7096
- }
7097
- /**
7098
- * Find all schemas that partially match the raw input.
7099
- * Returns scored candidates for ambiguity resolution.
7100
- */
7101
- findCandidates(raw) {
7102
- const normalized = raw.toLowerCase().trim();
7103
- const results = [];
7104
- for (const [key, schema] of this.schemas) {
7105
- let score = 0;
7106
- if (key === raw) {
7107
- score = 1;
7108
- } else if (key.toLowerCase() === normalized) {
7109
- score = 0.95;
7110
- } else if (this.aliases.get(normalized) === key) {
7111
- score = 0.9;
7112
- } else if (key.toLowerCase().startsWith(normalized)) {
7113
- score = 0.7;
7114
- } else if (key.toLowerCase().includes(normalized)) {
7115
- score = 0.5;
7116
- } else if (schema.tags?.some((t) => t.toLowerCase().includes(normalized))) {
7117
- score = 0.4;
7118
- } else if (schema.description.toLowerCase().includes(normalized)) {
7119
- score = 0.3;
7120
- }
7121
- if (score > 0) {
7122
- results.push({ schema, score });
7123
- }
7124
- }
7125
- return results.sort((a, b) => b.score - a.score);
7126
- }
7127
- list() {
7128
- return [...this.schemas.values()];
7129
- }
7130
- };
7131
- IdelCompiler = class {
7132
- constructor(registry) {
7133
- this.registry = registry;
7134
- }
7135
- /**
7136
- * Compile a raw intent proposal into a validated, executable structure.
7137
- */
7138
- compile(proposal) {
7139
- const errors = [];
7140
- const candidates = this.registry.findCandidates(proposal.raw);
7141
- if (candidates.length === 0) {
7142
- return {
7143
- ok: false,
7144
- errors: [{
7145
- code: "IDEL_UNKNOWN_INTENT",
7146
- message: `No intent found matching '${proposal.raw}'`
7147
- }]
7148
- };
7149
- }
7150
- const best = candidates[0];
7151
- const schema = best.schema;
7152
- const alternatives = candidates.slice(1, 4).filter((c) => c.score >= 0.3).map((c) => ({
7153
- intent: c.schema.intent,
7154
- confidence: c.score,
7155
- reason: c.schema.description
7156
- }));
7157
- const constraints = [];
7158
- const clarifications = [];
7159
- const params = { ...proposal.params };
7160
- for (const paramSchema of schema.params) {
7161
- const value = params[paramSchema.name];
7162
- if (paramSchema.required && value === void 0) {
7163
- if (paramSchema.default !== void 0) {
7164
- params[paramSchema.name] = paramSchema.default;
7165
- constraints.push({
7166
- kind: "required_param",
7167
- field: paramSchema.name,
7168
- description: `Defaulted to ${JSON.stringify(paramSchema.default)}`,
7169
- satisfied: true,
7170
- value: paramSchema.default
7171
- });
7172
- } else {
7173
- constraints.push({
7174
- kind: "required_param",
7175
- field: paramSchema.name,
7176
- description: `Required parameter '${paramSchema.name}' is missing`,
7177
- satisfied: false
7178
- });
7179
- clarifications.push({
7180
- id: `clarify_${paramSchema.name}`,
7181
- question: paramSchema.description ?? `What is the ${paramSchema.name}?`,
7182
- field: paramSchema.name,
7183
- options: paramSchema.enum?.map(String),
7184
- required: true
7185
- });
7186
- }
7187
- continue;
7188
- }
7189
- if (value === void 0) continue;
7190
- const typeValid = validateType(value, paramSchema.type);
7191
- constraints.push({
7192
- kind: "type_check",
7193
- field: paramSchema.name,
7194
- description: `Must be ${paramSchema.type}`,
7195
- satisfied: typeValid,
7196
- value,
7197
- expected: paramSchema.type
7198
- });
7199
- if (!typeValid) {
7200
- errors.push({
7201
- code: "IDEL_TYPE_ERROR",
7202
- message: `Parameter '${paramSchema.name}' must be ${paramSchema.type}, got ${typeof value}`,
7203
- field: paramSchema.name
7204
- });
7205
- }
7206
- if (paramSchema.min !== void 0 || paramSchema.max !== void 0) {
7207
- const numVal = typeof value === "number" ? value : Number(value);
7208
- const inRange = (paramSchema.min === void 0 || numVal >= paramSchema.min) && (paramSchema.max === void 0 || numVal <= paramSchema.max);
7209
- constraints.push({
7210
- kind: "range",
7211
- field: paramSchema.name,
7212
- description: `Must be between ${paramSchema.min ?? "-\u221E"} and ${paramSchema.max ?? "\u221E"}`,
7213
- satisfied: inRange,
7214
- value: numVal
7215
- });
7216
- }
7217
- if (paramSchema.pattern) {
7218
- const matches = new RegExp(paramSchema.pattern).test(String(value));
7219
- constraints.push({
7220
- kind: "pattern",
7221
- field: paramSchema.name,
7222
- description: `Must match ${paramSchema.pattern}`,
7223
- satisfied: matches,
7224
- value,
7225
- expected: paramSchema.pattern
7226
- });
7227
- }
7228
- if (paramSchema.enum) {
7229
- const inEnum = paramSchema.enum.some(
7230
- (e) => JSON.stringify(e) === JSON.stringify(value)
7231
- );
7232
- constraints.push({
7233
- kind: "custom",
7234
- field: paramSchema.name,
7235
- description: `Must be one of: ${paramSchema.enum.join(", ")}`,
7236
- satisfied: inEnum,
7237
- value,
7238
- expected: paramSchema.enum
7239
- });
7240
- }
7241
- }
7242
- const risk = assessRisk(schema, proposal, constraints);
7243
- const unsatisfied = constraints.filter((c) => !c.satisfied);
7244
- const needsClarification = clarifications.length > 0;
7245
- let confidence = best.score;
7246
- if (unsatisfied.length > 0) {
7247
- confidence *= 1 - unsatisfied.length / Math.max(constraints.length, 1) * 0.5;
7248
- }
7249
- if (errors.length > 0) {
7250
- confidence *= 0.5;
7251
- }
7252
- const compiled = {
7253
- intent: schema.intent,
7254
- actor_id: proposal.actor_id,
7255
- target: proposal.target,
7256
- params,
7257
- constraints,
7258
- confidence,
7259
- alternatives,
7260
- needs_clarification: needsClarification,
7261
- clarifications,
7262
- expected_outcome: schema.description,
7263
- fallback: schema.related?.[0],
7264
- risk,
7265
- metadata: {
7266
- schema_intent: schema.intent,
7267
- resolved_from: proposal.raw,
7268
- has_side_effects: schema.has_side_effects,
7269
- reversible: schema.reversible
7270
- }
7271
- };
7272
- return {
7273
- ok: errors.length === 0 && !needsClarification,
7274
- compiled,
7275
- errors
7276
- };
7277
- }
7278
- /**
7279
- * Apply clarification answers and re-compile.
7280
- */
7281
- applyClarifications(compiled, answers) {
7282
- const proposal = {
7283
- raw: compiled.intent,
7284
- actor_id: compiled.actor_id,
7285
- target: compiled.target,
7286
- params: { ...compiled.params, ...answers }
7287
- };
7288
- return this.compile(proposal);
7289
- }
7290
- };
7291
- }
7292
- });
7293
-
7294
- // src/needle/needle.engine.ts
7295
- function assembleNeedle(params) {
7296
- return {
7297
- needle_id: (0, import_crypto10.randomBytes)(16).toString("hex"),
7298
- phase: "created",
7299
- tps_coordinate: params.tps_coordinate,
7300
- intent: params.intent,
7301
- presence: params.presence,
7302
- writ: params.writ,
7303
- grants: params.grants,
7304
- created_at: Date.now()
7305
- };
7306
- }
7307
- function classifyStitch(observation, verdict) {
7308
- if (verdict.status === "failed" || verdict.status === "disputed") {
7309
- return "torn";
7310
- }
7311
- if (observation.decision === "DENY") {
7312
- return "silent";
7313
- }
7314
- if (verdict.isDeed) {
7315
- return "deed";
7316
- }
7317
- return "silent";
7318
- }
7319
- function formStitch(needle, observation, verdict, receipt) {
7320
- return {
7321
- stitch_id: needle.needle_id,
7322
- kind: classifyStitch(observation, verdict),
7323
- intent: needle.intent.intent,
7324
- actor_id: needle.intent.actor_id,
7325
- tps_coordinate: needle.tps_coordinate,
7326
- observation,
7327
- verdict,
7328
- receipt,
7329
- thread_id: receipt.thread_id,
7330
- sequence: receipt.sequence,
7331
- stitched_at: Date.now()
7332
- };
7333
- }
7334
- async function runNeedlePipeline(needle, config, threadState, prevReceipt, expectedOutcome) {
7335
- const obs = createObservation("http");
7336
- obs.intent = needle.intent.intent;
7337
- obs.actorId = needle.intent.actor_id;
7338
- needle.phase = "validated";
7339
- let stage = startStage(obs, "loom.validate");
7340
- const validation = validateWrit(
7341
- needle.writ,
7342
- config.public_key,
7343
- threadState,
7344
- needle.grants
7345
- );
7346
- if (!validation.valid) {
7347
- endStage(stage, "fail", validation.error);
7348
- return failNeedle(needle, obs, "validated", "LOOM_VALIDATION_FAILED", validation.error ?? "Writ validation failed");
7349
- }
7350
- endStage(stage, "ok");
7351
- if (config.sensors && config.sensors.length > 0) {
7352
- stage = startStage(obs, "sensors.evaluate");
7353
- const sensorInput = {
7354
- intent: needle.intent.intent,
7355
- actorId: needle.intent.actor_id,
7356
- metadata: {
7357
- observation: obs,
7358
- needle_id: needle.needle_id,
7359
- tps_coordinate: needle.tps_coordinate,
7360
- writ: needle.writ,
7361
- grants: needle.grants,
7362
- params: needle.intent.params
7363
- }
7364
- };
7365
- for (const sensor of config.sensors) {
7366
- if (sensor.supports && !sensor.supports(sensorInput)) continue;
7367
- const t0 = Date.now();
7368
- let decision;
7369
- try {
7370
- const rawDecision = await sensor.run(sensorInput);
7371
- decision = normalizeSensorDecision(rawDecision);
7372
- } catch (err) {
7373
- const msg = err instanceof Error ? err.message : String(err);
7374
- recordSensor(obs, sensor.name, false, 100, Date.now() - t0, [`sensor_error:${msg}`]);
7375
- endStage(stage, "fail", `Sensor ${sensor.name} threw: ${msg}`);
7376
- return failNeedle(needle, obs, "validated", "SENSOR_ERROR", `Sensor ${sensor.name} failed: ${msg}`);
7377
- }
7378
- recordSensor(obs, sensor.name, decision.allow, decision.riskScore, Date.now() - t0, decision.reasons);
7379
- if (!decision.allow) {
7380
- endStage(stage, "fail", `Sensor ${sensor.name} denied`);
7381
- return failNeedle(needle, obs, "validated", "SENSOR_DENY", decision.reasons[0] ?? `Denied by ${sensor.name}`);
7382
- }
7383
- }
7384
- endStage(stage, "ok");
7385
- }
7386
- needle.phase = "executing";
7387
- stage = startStage(obs, "handler.execute");
7388
- const handler = config.handlers.get(needle.intent.intent);
7389
- if (!handler) {
7390
- endStage(stage, "fail", `No handler for intent '${needle.intent.intent}'`);
7391
- return failNeedle(needle, obs, "executing", "NO_HANDLER", `No handler registered for intent '${needle.intent.intent}'`);
7392
- }
7393
- const handlerCtx = {
7394
- needle_id: needle.needle_id,
7395
- actor_id: needle.intent.actor_id,
7396
- presence_id: needle.presence.presence_id,
7397
- writ: needle.writ,
7398
- grants: needle.grants,
7399
- tps_coordinate: needle.tps_coordinate
7400
- };
7401
- let handlerResult;
7402
- try {
7403
- handlerResult = await handler(needle.intent, handlerCtx);
7404
- } catch (err) {
7405
- const msg = err instanceof Error ? err.message : String(err);
7406
- endStage(stage, "fail", msg);
7407
- return failNeedle(needle, obs, "executing", "HANDLER_ERROR", msg);
7408
- }
7409
- if (!handlerResult.ok) {
7410
- endStage(stage, "fail", handlerResult.effect);
7411
- obs.decision = "DENY";
7412
- obs.resultCode = handlerResult.effect;
7413
- obs.statusCode = handlerResult.status_code ?? 400;
7414
- } else {
7415
- endStage(stage, "ok");
7416
- obs.decision = "ALLOW";
7417
- obs.resultCode = handlerResult.effect;
7418
- obs.statusCode = handlerResult.status_code ?? 200;
7419
- }
7420
- if (handlerResult.data) {
7421
- obs.facts = { ...obs.facts, ...handlerResult.data };
7422
- }
7423
- needle.phase = "observed";
7424
- finalizeObservation(obs, obs.decision ?? "DENY", obs.statusCode ?? 500, obs.resultCode);
7425
- needle.observation = obs;
7426
- const verdict = scoreTruth(obs, expectedOutcome);
7427
- needle.verdict = verdict;
7428
- needle.phase = "stitched";
7429
- stage = startStage(obs, "stitch.form");
7430
- const receipt = createReceipt(
7431
- needle.writ,
7432
- obs.decision ?? "DENY",
7433
- prevReceipt
7434
- );
7435
- needle.receipt = receipt;
7436
- const newThreadState = updateThreadState(
7437
- receipt,
7438
- needle.intent.actor_id
7439
- );
7440
- const stitch = formStitch(needle, obs, verdict, receipt);
7441
- needle.completed_at = Date.now();
7442
- endStage(stage, "ok");
7443
- return {
7444
- ok: handlerResult.ok,
7445
- needle,
7446
- stitch,
7447
- thread_state: newThreadState
7448
- };
7449
- }
7450
- function failNeedle(needle, obs, phase, code, message) {
7451
- needle.phase = "failed";
7452
- needle.error = { phase, code, message };
7453
- needle.completed_at = Date.now();
7454
- obs.decision = obs.decision ?? "DENY";
7455
- obs.statusCode = obs.statusCode ?? 500;
7456
- finalizeObservation(obs, obs.decision, obs.statusCode, obs.resultCode);
7457
- needle.observation = obs;
7458
- const verdict = scoreTruth(obs);
7459
- needle.verdict = verdict;
7460
- return {
7461
- ok: false,
7462
- needle
7463
- };
7464
- }
7465
- var import_crypto10;
7466
- var init_needle_engine = __esm({
7467
- "src/needle/needle.engine.ts"() {
7468
- import_crypto10 = require("crypto");
7469
- init_axis_observation();
7470
- init_truth_scoring();
7471
- init_loom_engine();
7472
- init_axis_sensor();
7473
- }
7474
- });
7475
-
7476
- // src/needle/knot.engine.ts
7477
- function openKnot(params) {
7478
- const isIrreversible = params.type === "irreversible";
7479
- return {
7480
- knot_id: `knot_${(0, import_crypto11.randomBytes)(16).toString("hex")}`,
7481
- type: params.type,
7482
- status: "open",
7483
- stitch_ids: [],
7484
- thread_id: params.thread_id,
7485
- tps_anchor: params.tps_anchor,
7486
- irreversible: isIrreversible,
7487
- capsule_id: params.capsule_id,
7488
- law_ref: params.law_ref,
7489
- branch_ids: [],
7490
- required_count: params.required_count,
7491
- all_or_nothing: params.all_or_nothing ?? (params.type === "authority" || isIrreversible),
7492
- actor_id: params.actor_id,
7493
- created_at: Date.now()
7494
- };
7495
- }
7496
- function addStitchToKnot(knot, stitch) {
7497
- if (knot.status !== "open") {
7498
- return `Knot ${knot.knot_id} is ${knot.status}, cannot add stitches`;
7499
- }
7500
- if (stitch.thread_id !== knot.thread_id) {
7501
- return `Stitch thread ${stitch.thread_id} does not match knot thread ${knot.thread_id}`;
7502
- }
7503
- if (knot.stitch_ids.includes(stitch.stitch_id)) {
7504
- return `Stitch ${stitch.stitch_id} already in knot`;
7505
- }
7506
- if (knot.type === "authority" && knot.capsule_id) {
7507
- if (stitch.observation.capsuleId && stitch.observation.capsuleId !== knot.capsule_id) {
7508
- return `Stitch capsule ${stitch.observation.capsuleId} does not match knot capsule ${knot.capsule_id}`;
7509
- }
7510
- }
7511
- knot.stitch_ids.push(stitch.stitch_id);
7512
- return null;
7513
- }
7514
- function validateKnot(knot, stitches) {
7515
- const errors = [];
7516
- const passedIds = [];
7517
- const failedIds = [];
7518
- const stitchMap = new Map(stitches.map((s) => [s.stitch_id, s]));
7519
- for (const sid of knot.stitch_ids) {
7520
- const stitch = stitchMap.get(sid);
7521
- if (!stitch) {
7522
- failedIds.push(sid);
7523
- errors.push({
7524
- code: "KNOT_MISSING_STITCH",
7525
- message: `Stitch ${sid} not found`,
7526
- stitch_id: sid
7527
- });
7528
- continue;
7529
- }
7530
- if (stitch.kind === "torn") {
7531
- failedIds.push(sid);
7532
- errors.push({
7533
- code: "KNOT_TORN_STITCH",
7534
- message: `Stitch ${sid} is torn (failed/disputed)`,
7535
- stitch_id: sid
7536
- });
7537
- continue;
7538
- }
7539
- if (knot.type === "irreversible" && stitch.kind !== "deed") {
7540
- failedIds.push(sid);
7541
- errors.push({
7542
- code: "KNOT_REQUIRES_DEED",
7543
- message: `Irreversible knot requires deed stitch, got '${stitch.kind}'`,
7544
- stitch_id: sid
7545
- });
7546
- continue;
7547
- }
7548
- passedIds.push(sid);
7549
- }
7550
- if (knot.required_count !== void 0 && knot.stitch_ids.length < knot.required_count) {
7551
- errors.push({
7552
- code: "KNOT_INSUFFICIENT_STITCHES",
7553
- message: `Knot requires ${knot.required_count} stitches, has ${knot.stitch_ids.length}`
7554
- });
7555
- }
7556
- const allPassed = failedIds.length === 0;
7557
- const canTie = knot.all_or_nothing ? allPassed && (knot.required_count === void 0 || knot.stitch_ids.length >= knot.required_count) : passedIds.length > 0 && (knot.required_count === void 0 || passedIds.length >= knot.required_count);
7558
- return {
7559
- valid: allPassed && errors.length === 0,
7560
- passed_stitch_ids: passedIds,
7561
- failed_stitch_ids: failedIds,
7562
- can_tie: canTie,
7563
- errors
7564
- };
7565
- }
7566
- function tieKnot(knot, stitches) {
7567
- const validation = validateKnot(knot, stitches);
7568
- if (!validation.can_tie) {
7569
- return { ...validation, knot };
7570
- }
7571
- const receiptHashes = validation.passed_stitch_ids.map((sid) => stitches.find((s) => s.stitch_id === sid)).sort((a, b) => a.sequence - b.sequence).map((s) => s.receipt.hash);
7572
- const witnessPayload = receiptHashes.join(":");
7573
- knot.witness_hash = (0, import_crypto11.createHash)("sha256").update(witnessPayload).digest("hex");
7574
- knot.status = "tied";
7575
- knot.tied_at = Date.now();
7576
- return { ...validation, knot };
7577
- }
7578
- function breakKnot(knot, request) {
7579
- if (knot.status === "broken") {
7580
- return { ok: false, error: "Knot is already broken" };
7581
- }
7582
- if (knot.status === "open") {
7583
- knot.status = "broken";
7584
- knot.broken_at = Date.now();
7585
- knot.break_reason = request.reason;
7586
- return { ok: true };
7587
- }
7588
- if (knot.status === "tied") {
7589
- if (!request.reason) {
7590
- return { ok: false, error: "Breaking a tied knot requires a reason" };
7591
- }
7592
- if ((knot.irreversible || knot.type === "law") && !request.override_grant_id) {
7593
- return {
7594
- ok: false,
7595
- error: `Breaking ${knot.type} knot requires override_grant_id from higher authority`
7596
- };
7597
- }
7598
- knot.status = "broken";
7599
- knot.broken_at = Date.now();
7600
- knot.break_reason = request.reason;
7601
- return { ok: true };
7602
- }
7603
- return { ok: false, error: `Cannot break knot in status '${knot.status}'` };
7604
- }
7605
- function forkFromKnot(knot, branchId, decisionStitchId) {
7606
- if (knot.status !== "tied" && knot.status !== "open") {
7607
- return { ok: false, error: `Cannot fork from knot in status '${knot.status}'` };
7608
- }
7609
- if (decisionStitchId) {
7610
- if (!knot.stitch_ids.includes(decisionStitchId)) {
7611
- return { ok: false, error: `Decision stitch ${decisionStitchId} is not part of this knot` };
7612
- }
7613
- knot.decision_stitch_id = decisionStitchId;
7614
- }
7615
- knot.branch_ids.push(branchId);
7616
- knot.status = "forked";
7617
- return { ok: true };
7618
- }
7619
- function isKnotOpen(knot) {
7620
- return knot.status === "open";
7621
- }
7622
- function isPointOfNoReturn(knot) {
7623
- return knot.irreversible && knot.status === "tied";
7624
- }
7625
- function findKnotsForStitch(stitchId, knots) {
7626
- return knots.filter((k) => k.stitch_ids.includes(stitchId));
7627
- }
7628
- function getIrreversibleKnots(knots) {
7629
- return knots.filter((k) => k.irreversible && k.status === "tied");
7630
- }
7631
- function getDecisionPoints(knots) {
7632
- return knots.filter((k) => k.type === "decision" || k.status === "forked");
7633
- }
7634
- var import_crypto11;
7635
- var init_knot_engine = __esm({
7636
- "src/needle/knot.engine.ts"() {
7637
- import_crypto11 = require("crypto");
7638
- }
7639
- });
7640
-
7641
- // src/needle/fabric.engine.ts
7642
- function createFabric() {
7643
- return {
7644
- fabric_id: `fab_${(0, import_crypto12.randomBytes)(16).toString("hex")}`,
7645
- state_hash: hashState(/* @__PURE__ */ new Map()),
7646
- cells: /* @__PURE__ */ new Map(),
7647
- thread_ids: [],
7648
- stitch_count: 0,
7649
- knot_count: 0,
7650
- computed_at: Date.now(),
7651
- version: 0
7652
- };
7653
- }
7654
- function applyStitch(fabric, stitch, effect) {
7655
- for (const [key, value] of Object.entries(effect.mutations)) {
7656
- if (value === null) {
7657
- fabric.cells.delete(key);
7658
- } else {
7659
- const existing = fabric.cells.get(key);
7660
- if (existing?.locked) {
7661
- continue;
7662
- }
7663
- fabric.cells.set(key, {
7664
- key,
7665
- value,
7666
- last_stitch_id: stitch.stitch_id,
7667
- last_tps: stitch.tps_coordinate,
7668
- write_count: (existing?.write_count ?? 0) + 1,
7669
- locked: false
7670
- });
7671
- }
7672
- }
7673
- if (!fabric.thread_ids.includes(stitch.thread_id)) {
7674
- fabric.thread_ids.push(stitch.thread_id);
7675
- }
7676
- fabric.stitch_count++;
7677
- fabric.version++;
7678
- fabric.projected_at_tps = stitch.tps_coordinate ?? fabric.projected_at_tps;
7679
- fabric.computed_at = Date.now();
7680
- fabric.state_hash = hashState(fabric.cells);
7681
- }
7682
- function weave(stitches, resolver, knots) {
7683
- const fabric = createFabric();
7684
- const sorted = [...stitches].sort((a, b) => a.sequence - b.sequence);
7685
- for (const stitch of sorted) {
7686
- if (stitch.kind === "torn") continue;
7687
- const effect = resolver(stitch);
7688
- applyStitch(fabric, stitch, effect);
7689
- }
7690
- if (knots) {
7691
- for (const knot of knots) {
7692
- if (knot.irreversible && knot.status === "tied") {
7693
- lockCellsByKnot(fabric, knot, stitches, resolver);
7694
- fabric.knot_count++;
7695
- }
7696
- }
7697
- }
7698
- return fabric;
7699
- }
7700
- function projectAt(stitches, resolver, tpsFilter, knots) {
7701
- const filtered = stitches.filter((s) => tpsFilter(s.tps_coordinate));
7702
- return weave(filtered, resolver, knots);
7703
- }
7704
- function lockCellsByKnot(fabric, knot, stitches, resolver) {
7705
- const knotStitchIds = new Set(knot.stitch_ids);
7706
- const knotStitches = stitches.filter((s) => knotStitchIds.has(s.stitch_id));
7707
- for (const stitch of knotStitches) {
7708
- const effect = resolver(stitch);
7709
- for (const key of Object.keys(effect.mutations)) {
7710
- const cell = fabric.cells.get(key);
7711
- if (cell) {
7712
- cell.locked = true;
7713
- cell.locked_by_knot = knot.knot_id;
7714
- }
7715
- }
7716
- }
7717
- }
7718
- function lockCells(fabric, keys, knotId) {
7719
- for (const key of keys) {
7720
- const cell = fabric.cells.get(key);
7721
- if (cell) {
7722
- cell.locked = true;
7723
- cell.locked_by_knot = knotId;
7724
- }
7725
- }
7726
- }
7727
- function queryFabric(fabric, query) {
7728
- let results = [...fabric.cells.values()];
7729
- if (query.keys) {
7730
- const keySet = new Set(query.keys);
7731
- results = results.filter((c) => keySet.has(c.key));
7732
- }
7733
- if (query.prefix) {
7734
- const prefix = query.prefix;
7735
- results = results.filter((c) => c.key.startsWith(prefix));
7736
- }
7737
- if (query.locked_only) {
7738
- results = results.filter((c) => c.locked);
7739
- }
7740
- return results;
7741
- }
7742
- function getFabricValue(fabric, key) {
7743
- return fabric.cells.get(key)?.value;
7744
- }
7745
- function diffFabrics(a, b) {
7746
- const entries = [];
7747
- let added = 0;
7748
- let modified = 0;
7749
- let deleted = 0;
7750
- for (const [key, cellB] of b.cells) {
7751
- const cellA = a.cells.get(key);
7752
- if (!cellA) {
7753
- entries.push({
7754
- key,
7755
- kind: "added",
7756
- after: cellB.value,
7757
- caused_by_stitch: cellB.last_stitch_id
7758
- });
7759
- added++;
7760
- } else if (JSON.stringify(cellA.value) !== JSON.stringify(cellB.value)) {
7761
- entries.push({
7762
- key,
7763
- kind: "modified",
7764
- before: cellA.value,
7765
- after: cellB.value,
7766
- caused_by_stitch: cellB.last_stitch_id
7767
- });
7768
- modified++;
7769
- }
7770
- }
7771
- for (const [key, cellA] of a.cells) {
7772
- if (!b.cells.has(key)) {
7773
- entries.push({
7774
- key,
7775
- kind: "deleted",
7776
- before: cellA.value
7777
- });
7778
- deleted++;
7779
- }
7780
- }
7781
- return {
7782
- from_fabric_id: a.fabric_id,
7783
- to_fabric_id: b.fabric_id,
7784
- entries,
7785
- added_count: added,
7786
- modified_count: modified,
7787
- deleted_count: deleted
7788
- };
7789
- }
7790
- function hashState(cells) {
7791
- const keys = [...cells.keys()].sort();
7792
- const payload = keys.map((k) => `${k}=${JSON.stringify(cells.get(k).value)}`).join("\n");
7793
- return (0, import_crypto12.createHash)("sha256").update(payload).digest("hex");
7794
- }
7795
- var import_crypto12;
7796
- var init_fabric_engine = __esm({
7797
- "src/needle/fabric.engine.ts"() {
7798
- import_crypto12 = require("crypto");
7799
- }
7800
- });
7801
-
7802
- // src/needle/pattern.engine.ts
7803
- function detectSequencePatterns(stitches, windowSize, minOccurrences) {
7804
- if (stitches.length < windowSize || windowSize < 2) return [];
7805
- const sorted = [...stitches].sort((a, b) => a.sequence - b.sequence);
7806
- const sequenceCounts = /* @__PURE__ */ new Map();
7807
- for (let i = 0; i <= sorted.length - windowSize; i++) {
7808
- const window = sorted.slice(i, i + windowSize);
7809
- const key = window.map((s) => s.intent).join("\u2192");
7810
- const ids = window.map((s) => s.stitch_id);
7811
- const existing = sequenceCounts.get(key);
7812
- if (existing) {
7813
- existing.count++;
7814
- existing.stitch_ids.push(ids);
7815
- } else {
7816
- sequenceCounts.set(key, { count: 1, stitch_ids: [ids] });
7817
- }
7818
- }
7819
- const patterns = [];
7820
- const now = Date.now();
7821
- for (const [key, data] of sequenceCounts) {
7822
- if (data.count < minOccurrences) continue;
7823
- const intents = key.split("\u2192");
7824
- const confidence = Math.min(data.count / (minOccurrences * 2), 1);
7825
- patterns.push({
7826
- pattern_id: `pat_seq_${(0, import_crypto13.randomBytes)(8).toString("hex")}`,
7827
- kind: "sequence",
7828
- name: `Sequence: ${intents.join(" \u2192 ")}`,
7829
- signature: {
7830
- intent_sequence: intents,
7831
- min_length: windowSize,
7832
- max_length: windowSize
7833
- },
7834
- confidence,
7835
- occurrence_count: data.count,
7836
- first_seen_at: now,
7837
- last_seen_at: now,
7838
- seen_in_threads: [...new Set(
7839
- data.stitch_ids.flatMap(
7840
- (ids) => ids.map((id) => sorted.find((s) => s.stitch_id === id)?.thread_id).filter(Boolean)
7841
- )
7842
- )],
7843
- classification: "unclassified"
7844
- });
7845
- }
7846
- return patterns;
7847
- }
7848
- function detectKnotPatterns(knots, minOccurrences) {
7849
- const groups = /* @__PURE__ */ new Map();
7850
- for (const knot of knots) {
7851
- if (knot.status !== "tied") continue;
7852
- const key = `${knot.type}:${knot.stitch_ids.length}`;
7853
- const group = groups.get(key) ?? [];
7854
- group.push(knot);
7855
- groups.set(key, group);
7856
- }
7857
- const patterns = [];
7858
- const now = Date.now();
7859
- for (const [key, group] of groups) {
7860
- if (group.length < minOccurrences) continue;
7861
- const [type, sizeStr] = key.split(":");
7862
- const size = parseInt(sizeStr, 10);
7863
- const confidence = Math.min(group.length / (minOccurrences * 2), 1);
7864
- patterns.push({
7865
- pattern_id: `pat_knot_${(0, import_crypto13.randomBytes)(8).toString("hex")}`,
7866
- kind: "knot",
7867
- name: `Knot: ${type} (${size} stitches)`,
7868
- signature: {
7869
- knot_type: type,
7870
- knot_size: size
7871
- },
7872
- confidence,
7873
- occurrence_count: group.length,
7874
- first_seen_at: now,
7875
- last_seen_at: now,
7876
- seen_in_threads: [...new Set(group.map((k) => k.thread_id))],
7877
- classification: "unclassified"
7878
- });
7879
- }
7880
- return patterns;
7881
- }
7882
- function matchPatterns(stitches, patterns) {
7883
- const sorted = [...stitches].sort((a, b) => a.sequence - b.sequence);
7884
- const matches = [];
7885
- const now = Date.now();
7886
- for (const pattern of patterns) {
7887
- if (pattern.kind === "sequence" && pattern.signature.intent_sequence) {
7888
- const seq = pattern.signature.intent_sequence;
7889
- const seqLen = seq.length;
7890
- for (let i = 0; i <= sorted.length - seqLen; i++) {
7891
- const window = sorted.slice(i, i + seqLen);
7892
- const windowIntents = window.map((s) => s.intent);
7893
- if (windowIntents.every((intent, idx) => intent === seq[idx])) {
7894
- matches.push({
7895
- pattern_id: pattern.pattern_id,
7896
- matched_stitch_ids: window.map((s) => s.stitch_id),
7897
- match_score: 1,
7898
- thread_id: window[0].thread_id,
7899
- detected_at: now
7900
- });
7901
- }
7902
- }
7903
- }
7904
- }
7905
- return matches;
7906
- }
7907
- function recordOccurrence(pattern, threadId) {
7908
- pattern.occurrence_count++;
7909
- pattern.last_seen_at = Date.now();
7910
- pattern.confidence = 1 - 1 / (1 + pattern.occurrence_count * 0.5);
7911
- if (!pattern.seen_in_threads.includes(threadId)) {
7912
- pattern.seen_in_threads.push(threadId);
7913
- }
7914
- }
7915
- function detectAnomalies(recentStitches, knownPatterns, threshold = 0.7) {
7916
- const anomalies = [];
7917
- const sorted = [...recentStitches].sort((a, b) => a.sequence - b.sequence);
7918
- const now = Date.now();
7919
- for (const pattern of knownPatterns) {
7920
- if (pattern.kind !== "sequence" || !pattern.signature.intent_sequence) continue;
7921
- if (pattern.confidence < threshold) continue;
7922
- const seq = pattern.signature.intent_sequence;
7923
- if (sorted.length >= 1 && sorted.length < seq.length) {
7924
- const partialMatch = sorted.every(
7925
- (s, i) => i < seq.length && s.intent === seq[i]
7926
- );
7927
- if (partialMatch) {
7928
- const expectedNext = seq[sorted.length];
7929
- const lastStitch = sorted[sorted.length - 1];
7930
- if (pattern.occurrence_count >= 3) {
7931
- anomalies.push({
7932
- pattern_id: `pat_anom_${(0, import_crypto13.randomBytes)(8).toString("hex")}`,
7933
- kind: "anomaly",
7934
- name: `Incomplete: ${pattern.name}`,
7935
- description: `Expected '${expectedNext}' after '${lastStitch.intent}' based on pattern '${pattern.name}'`,
7936
- signature: pattern.signature,
7937
- confidence: pattern.confidence * 0.8,
7938
- occurrence_count: 1,
7939
- first_seen_at: now,
7940
- last_seen_at: now,
7941
- seen_in_threads: [lastStitch.thread_id],
7942
- classification: "anomalous"
7943
- });
7944
- }
7945
- }
7946
- }
7947
- }
7948
- return anomalies;
7949
- }
7950
- var import_crypto13, InMemoryPatternStore;
7951
- var init_pattern_engine = __esm({
7952
- "src/needle/pattern.engine.ts"() {
7953
- import_crypto13 = require("crypto");
7954
- InMemoryPatternStore = class {
7955
- constructor() {
7956
- this.patterns = /* @__PURE__ */ new Map();
7957
- }
7958
- save(pattern) {
7959
- this.patterns.set(pattern.pattern_id, pattern);
7960
- }
7961
- get(patternId) {
7962
- return this.patterns.get(patternId);
7963
- }
7964
- findByKind(kind) {
7965
- return [...this.patterns.values()].filter((p) => p.kind === kind);
7966
- }
7967
- findByIntent(intent) {
7968
- return [...this.patterns.values()].filter(
7969
- (p) => p.signature.intent_sequence?.includes(intent)
7970
- );
7971
- }
7972
- all() {
7973
- return [...this.patterns.values()];
7974
- }
7975
- };
7976
- }
7977
- });
7978
-
7979
- // src/sensors/tps.sensor.ts
7980
- var require_tps_sensor = __commonJS({
7981
- "src/sensors/tps.sensor.ts"(exports2) {
7982
- "use strict";
7983
- var __decorate = exports2 && exports2.__decorate || function(decorators, target, key, desc) {
7984
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
7985
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
7986
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
7987
- return c > 3 && r && Object.defineProperty(target, key, r), r;
7988
- };
7989
- var __metadata = exports2 && exports2.__metadata || function(k, v) {
7990
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
7991
- };
7992
- Object.defineProperty(exports2, "__esModule", { value: true });
7993
- exports2.TpsSensor = void 0;
7994
- var common_1 = require("@nestjs/common");
7995
- var sensor_decorator_1 = (init_sensor_decorator(), __toCommonJS(sensor_decorator_exports));
7996
- var sensor_bands_1 = (init_sensor_bands(), __toCommonJS(sensor_bands_exports));
7997
- var TPS_EPOCH_MS = 9343548e5;
7998
- function parseINotation(tps) {
7999
- if (!tps.startsWith("i"))
8000
- return null;
8001
- const num = Number(tps.slice(1));
8002
- if (!Number.isFinite(num))
8003
- return null;
8004
- return TPS_EPOCH_MS + num;
8005
- }
8006
- var TpsSensor2 = class TpsSensor {
8007
- constructor(options = {}) {
8008
- this.name = "TpsSensor";
8009
- this.order = sensor_bands_1.BAND.POLICY + 2;
8010
- this.maxDriftMs = options.maxDriftMs ?? 3e4;
8011
- this.resolver = options.resolver ?? parseINotation;
8012
- }
8013
- supports(input) {
8014
- const tps = input.metadata?.tps_coordinate ?? input.metadata?.tps ?? input.packet?.tps;
8015
- return typeof tps === "string" && tps.length > 0;
8016
- }
8017
- async run(input) {
8018
- const tps = input.metadata?.tps_coordinate ?? input.metadata?.tps ?? input.packet?.tps;
8019
- const resolved = this.resolver(tps);
8020
- if (resolved === null) {
8021
- return {
8022
- allow: false,
8023
- riskScore: 80,
8024
- reasons: [`TPS coordinate '${tps}' is structurally invalid`],
8025
- code: "TPS_INVALID_FORMAT"
8026
- };
8027
- }
8028
- const now = Date.now();
8029
- const drift = Math.abs(now - resolved);
8030
- if (drift > this.maxDriftMs) {
8031
- const direction = resolved > now ? "future" : "past";
8032
- return {
8033
- allow: false,
8034
- riskScore: 70,
8035
- reasons: [
8036
- `TPS drift ${drift}ms exceeds max ${this.maxDriftMs}ms (${direction})`
8037
- ],
8038
- code: "TPS_DRIFT_EXCEEDED",
8039
- tags: { tpsDriftMs: drift, tpsDirection: direction }
8040
- };
8041
- }
8042
- return {
8043
- allow: true,
8044
- riskScore: 0,
8045
- reasons: [],
8046
- tags: {
8047
- tpsResolved: resolved,
8048
- tpsDriftMs: drift
8049
- }
8050
- };
8051
- }
8052
- };
8053
- exports2.TpsSensor = TpsSensor2;
8054
- exports2.TpsSensor = TpsSensor2 = __decorate([
8055
- (0, sensor_decorator_1.Sensor)(),
8056
- (0, common_1.Injectable)(),
8057
- __metadata("design:paramtypes", [Object])
8058
- ], TpsSensor2);
8059
- }
8060
- });
8061
-
8062
- // src/sensors/risk-gate.sensor.ts
8063
- var require_risk_gate_sensor = __commonJS({
8064
- "src/sensors/risk-gate.sensor.ts"(exports2) {
8065
- "use strict";
8066
- var __decorate = exports2 && exports2.__decorate || function(decorators, target, key, desc) {
8067
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
8068
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
8069
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
8070
- return c > 3 && r && Object.defineProperty(target, key, r), r;
8071
- };
8072
- var __metadata = exports2 && exports2.__metadata || function(k, v) {
8073
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
8074
- };
8075
- Object.defineProperty(exports2, "__esModule", { value: true });
8076
- exports2.RiskGateSensor = void 0;
8077
- var common_1 = require("@nestjs/common");
8078
- var sensor_decorator_1 = (init_sensor_decorator(), __toCommonJS(sensor_decorator_exports));
8079
- var sensor_bands_1 = (init_sensor_bands(), __toCommonJS(sensor_bands_exports));
8080
- var risk_1 = (init_risk(), __toCommonJS(risk_exports));
8081
- var SEVERITY_WEIGHT = {
8082
- low: 10,
8083
- medium: 25,
8084
- high: 50,
8085
- critical: 100
8086
- };
8087
- var RiskGateSensor2 = class RiskGateSensor {
8088
- constructor(options) {
8089
- this.name = "RiskGateSensor";
8090
- this.order = sensor_bands_1.BAND.BUSINESS + 10;
8091
- this.collectors = options.collectors;
8092
- this.denyThreshold = options.denyThreshold ?? 75;
8093
- this.flagThreshold = options.flagThreshold ?? 40;
8094
- }
8095
- async run(input) {
8096
- const results = await Promise.all(this.collectors.map((c) => c(input)));
8097
- const signals = results.flat();
8098
- let totalWeight = 0;
8099
- let weightedSum = 0;
8100
- for (const signal of signals) {
8101
- const w = SEVERITY_WEIGHT[signal.severity];
8102
- totalWeight += 1;
8103
- weightedSum += w;
8104
- }
8105
- const aggregateScore = totalWeight > 0 ? Math.min(100, Math.round(weightedSum / totalWeight)) : 0;
8106
- const evaluation = this.evaluate(aggregateScore, signals);
8107
- input.metadata = {
8108
- ...input.metadata ?? {},
8109
- riskEvaluation: evaluation
8110
- };
8111
- if (evaluation.decision === risk_1.RiskDecision.DENY) {
8112
- return {
8113
- allow: false,
8114
- riskScore: aggregateScore,
8115
- reasons: signals.map((s) => s.message),
8116
- code: "RISK_GATE_DENY",
8117
- tags: { riskDecision: evaluation.decision, signalCount: signals.length }
8118
- };
8119
- }
8120
- if (evaluation.decision === risk_1.RiskDecision.THROTTLE) {
8121
- return {
8122
- allow: false,
8123
- riskScore: aggregateScore,
8124
- reasons: signals.map((s) => s.message),
8125
- code: "RISK_GATE_THROTTLE",
8126
- retryAfterMs: evaluation.retryAfterMs,
8127
- tags: { riskDecision: evaluation.decision, signalCount: signals.length }
8128
- };
8129
- }
8130
- return {
8131
- allow: true,
8132
- riskScore: aggregateScore,
8133
- reasons: signals.filter((s) => s.severity === "medium" || s.severity === "high").map((s) => s.message),
8134
- tags: {
8135
- riskDecision: evaluation.decision,
8136
- signalCount: signals.length
8137
- }
8138
- };
8139
- }
8140
- evaluate(score, signals) {
8141
- const hasCritical = signals.some((s) => s.severity === "critical");
8142
- if (hasCritical) {
8143
- return {
8144
- decision: risk_1.RiskDecision.DENY,
8145
- reason: "Critical risk signal detected",
8146
- confidence: 1,
8147
- signals
8148
- };
8149
- }
8150
- if (score >= this.denyThreshold) {
8151
- return {
8152
- decision: risk_1.RiskDecision.DENY,
8153
- reason: `Aggregate risk score ${score} exceeds deny threshold ${this.denyThreshold}`,
8154
- confidence: score / 100,
8155
- signals
8156
- };
8157
- }
8158
- if (score >= this.flagThreshold) {
8159
- return {
8160
- decision: risk_1.RiskDecision.STEP_UP,
8161
- reason: `Aggregate risk score ${score} exceeds flag threshold ${this.flagThreshold}`,
8162
- confidence: score / 100,
8163
- signals
8164
- };
8165
- }
8166
- return {
8167
- decision: risk_1.RiskDecision.ALLOW,
8168
- confidence: 1 - score / 100,
8169
- signals
8170
- };
8171
- }
8172
- };
8173
- exports2.RiskGateSensor = RiskGateSensor2;
8174
- exports2.RiskGateSensor = RiskGateSensor2 = __decorate([
8175
- (0, sensor_decorator_1.Sensor)(),
8176
- (0, common_1.Injectable)(),
8177
- __metadata("design:paramtypes", [Object])
8178
- ], RiskGateSensor2);
8179
- }
8180
- });
8181
-
8182
- // src/sensors/tickauth.sensor.ts
8183
- var require_tickauth_sensor = __commonJS({
8184
- "src/sensors/tickauth.sensor.ts"(exports2) {
8185
- "use strict";
8186
- var __decorate = exports2 && exports2.__decorate || function(decorators, target, key, desc) {
8187
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
8188
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
8189
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
8190
- return c > 3 && r && Object.defineProperty(target, key, r), r;
8191
- };
8192
- var __metadata = exports2 && exports2.__metadata || function(k, v) {
8193
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
8194
- };
8195
- Object.defineProperty(exports2, "__esModule", { value: true });
8196
- exports2.TickAuthSensor = void 0;
8197
- var common_1 = require("@nestjs/common");
8198
- var sensor_decorator_1 = (init_sensor_decorator(), __toCommonJS(sensor_decorator_exports));
8199
- var sensor_bands_1 = (init_sensor_bands(), __toCommonJS(sensor_bands_exports));
8200
- var TickAuthSensor2 = class TickAuthSensor {
8201
- constructor(options = {}) {
8202
- this.name = "TickAuthSensor";
8203
- this.order = sensor_bands_1.BAND.IDENTITY + 40;
8204
- this.verifier = options.verifier;
8205
- this.matchIntent = options.matchIntent ?? true;
8206
- this.acceptTypes = options.acceptTypes?.length ? new Set(options.acceptTypes) : null;
8207
- }
8208
- supports(input) {
8209
- return !!(input.metadata?.capsule || input.metadata?.tickauthCapsule || input.metadata?.cceEnvelope?.capsule);
8210
- }
8211
- async run(input) {
8212
- const capsule = input.metadata?.capsule ?? input.metadata?.tickauthCapsule ?? input.metadata?.cceEnvelope?.capsule;
8213
- if (!capsule) {
8214
- return {
8215
- allow: false,
8216
- riskScore: 90,
8217
- reasons: ["TickAuth capsule not found"],
8218
- code: "TICKAUTH_MISSING"
8219
- };
8220
- }
8221
- if (!capsule.capsule_id || typeof capsule.capsule_id !== "string") {
8222
- return {
8223
- allow: false,
8224
- riskScore: 100,
8225
- reasons: ["TickAuth capsule has no valid capsule_id"],
8226
- code: "TICKAUTH_INVALID_ID"
8227
- };
8228
- }
8229
- const status = capsule.verification?.status;
8230
- if (status && status !== "approved") {
8231
- return {
8232
- allow: false,
8233
- riskScore: 100,
8234
- reasons: [
8235
- `TickAuth capsule status is '${status}'${capsule.verification?.reason ? `: ${capsule.verification.reason}` : ""}`
8236
- ],
8237
- code: `TICKAUTH_STATUS_${status.toUpperCase()}`
8238
- };
8239
- }
8240
- if (this.acceptTypes && capsule.capsule_type) {
8241
- if (!this.acceptTypes.has(capsule.capsule_type)) {
8242
- return {
8243
- allow: false,
8244
- riskScore: 80,
8245
- reasons: [
8246
- `TickAuth capsule type '${capsule.capsule_type}' is not in accept list`
8247
- ],
8248
- code: "TICKAUTH_TYPE_REJECTED"
8249
- };
8250
- }
8251
- }
8252
- if (this.matchIntent && input.intent && capsule.intent) {
8253
- if (capsule.intent !== input.intent) {
8254
- return {
8255
- allow: false,
8256
- riskScore: 80,
8257
- reasons: [
8258
- `TickAuth capsule intent '${capsule.intent}' does not match AXIS intent '${input.intent}'`
8259
- ],
8260
- code: "TICKAUTH_INTENT_MISMATCH"
8261
- };
8262
- }
8263
- }
8264
- if (this.verifier) {
8265
- const error = await this.verifier(capsule, input);
8266
- if (error) {
8267
- return {
8268
- allow: false,
8269
- riskScore: 90,
8270
- reasons: [`TickAuth verification failed: ${error}`],
8271
- code: "TICKAUTH_VERIFY_FAILED"
8272
- };
8273
- }
8274
- }
8275
- return {
8276
- allow: true,
8277
- riskScore: 0,
8278
- reasons: [],
8279
- tags: {
8280
- tickauthCapsuleId: capsule.capsule_id,
8281
- tickauthMode: capsule.mode,
8282
- tickauthSingleUse: capsule.single_use
8283
- }
8284
- };
8285
- }
8286
- };
8287
- exports2.TickAuthSensor = TickAuthSensor2;
8288
- exports2.TickAuthSensor = TickAuthSensor2 = __decorate([
8289
- (0, sensor_decorator_1.Sensor)(),
8290
- (0, common_1.Injectable)(),
8291
- __metadata("design:paramtypes", [Object])
8292
- ], TickAuthSensor2);
8293
- }
8294
- });
8295
-
8296
5979
  // src/cce/sensors/cce-envelope-validation.sensor.ts
8297
5980
  var REQUIRED_FIELDS, CceEnvelopeValidationSensor;
8298
5981
  var init_cce_envelope_validation_sensor = __esm({
@@ -9101,18 +6784,95 @@ var init_cce = __esm({
9101
6784
  // src/core/index.ts
9102
6785
  var core_exports = {};
9103
6786
  __export(core_exports, {
6787
+ AXIS_MAGIC: () => import_axis_protocol2.AXIS_MAGIC,
6788
+ AXIS_VERSION: () => import_axis_protocol2.AXIS_VERSION,
9104
6789
  AxisError: () => AxisError,
9105
6790
  AxisFrameZ: () => AxisFrameZ,
6791
+ AxisMediaTypes: () => AxisMediaTypes,
6792
+ BodyProfile: () => import_axis_protocol2.BodyProfile,
6793
+ ERR_BAD_SIGNATURE: () => import_axis_protocol2.ERR_BAD_SIGNATURE,
6794
+ ERR_CONTRACT_VIOLATION: () => import_axis_protocol2.ERR_CONTRACT_VIOLATION,
6795
+ ERR_INVALID_PACKET: () => import_axis_protocol2.ERR_INVALID_PACKET,
6796
+ ERR_REPLAY_DETECTED: () => import_axis_protocol2.ERR_REPLAY_DETECTED,
6797
+ FLAG_BODY_TLV: () => import_axis_protocol2.FLAG_BODY_TLV,
6798
+ FLAG_CHAIN_REQ: () => import_axis_protocol2.FLAG_CHAIN_REQ,
6799
+ FLAG_HAS_WITNESS: () => import_axis_protocol2.FLAG_HAS_WITNESS,
6800
+ MAX_BODY_LEN: () => import_axis_protocol2.MAX_BODY_LEN,
6801
+ MAX_FRAME_LEN: () => import_axis_protocol2.MAX_FRAME_LEN,
6802
+ MAX_HDR_LEN: () => import_axis_protocol2.MAX_HDR_LEN,
6803
+ MAX_SIG_LEN: () => import_axis_protocol2.MAX_SIG_LEN,
6804
+ NCERT_ALG: () => import_axis_protocol2.NCERT_ALG,
6805
+ NCERT_EXP: () => import_axis_protocol2.NCERT_EXP,
6806
+ NCERT_ISSUER_KID: () => import_axis_protocol2.NCERT_ISSUER_KID,
6807
+ NCERT_KID: () => import_axis_protocol2.NCERT_KID,
6808
+ NCERT_NBF: () => import_axis_protocol2.NCERT_NBF,
6809
+ NCERT_NODE_ID: () => import_axis_protocol2.NCERT_NODE_ID,
6810
+ NCERT_PAYLOAD: () => import_axis_protocol2.NCERT_PAYLOAD,
6811
+ NCERT_PUB: () => import_axis_protocol2.NCERT_PUB,
6812
+ NCERT_SCOPE: () => import_axis_protocol2.NCERT_SCOPE,
6813
+ NCERT_SIG: () => import_axis_protocol2.NCERT_SIG,
6814
+ PROOF_CAPSULE: () => import_axis_protocol2.PROOF_CAPSULE,
6815
+ PROOF_JWT: () => import_axis_protocol2.PROOF_JWT,
6816
+ PROOF_LOOM: () => import_axis_protocol2.PROOF_LOOM,
6817
+ PROOF_MTLS: () => import_axis_protocol2.PROOF_MTLS,
6818
+ PROOF_NONE: () => import_axis_protocol2.PROOF_NONE,
6819
+ PROOF_WITNESS: () => import_axis_protocol2.PROOF_WITNESS,
6820
+ ProofType: () => import_axis_protocol2.ProofType,
6821
+ TLV: () => import_axis_protocol.TLV,
6822
+ TLV_ACTOR_ID: () => import_axis_protocol2.TLV_ACTOR_ID,
6823
+ TLV_AUD: () => import_axis_protocol2.TLV_AUD,
6824
+ TLV_BODY_ARR: () => import_axis_protocol2.TLV_BODY_ARR,
6825
+ TLV_BODY_OBJ: () => import_axis_protocol2.TLV_BODY_OBJ,
6826
+ TLV_CAPSULE: () => import_axis_protocol2.TLV_CAPSULE,
6827
+ TLV_EFFECT: () => import_axis_protocol2.TLV_EFFECT,
6828
+ TLV_ERROR_CODE: () => import_axis_protocol2.TLV_ERROR_CODE,
6829
+ TLV_ERROR_MSG: () => import_axis_protocol2.TLV_ERROR_MSG,
6830
+ TLV_INDEX: () => import_axis_protocol2.TLV_INDEX,
6831
+ TLV_INTENT: () => import_axis_protocol2.TLV_INTENT,
6832
+ TLV_KID: () => import_axis_protocol2.TLV_KID,
6833
+ TLV_LOOM_PRESENCE_ID: () => import_axis_protocol2.TLV_LOOM_PRESENCE_ID,
6834
+ TLV_LOOM_THREAD_HASH: () => import_axis_protocol2.TLV_LOOM_THREAD_HASH,
6835
+ TLV_LOOM_WRIT: () => import_axis_protocol2.TLV_LOOM_WRIT,
6836
+ TLV_NODE: () => import_axis_protocol2.TLV_NODE,
6837
+ TLV_NODE_CERT_HASH: () => import_axis_protocol2.TLV_NODE_CERT_HASH,
6838
+ TLV_NODE_KID: () => import_axis_protocol2.TLV_NODE_KID,
6839
+ TLV_NONCE: () => import_axis_protocol2.TLV_NONCE,
6840
+ TLV_OFFSET: () => import_axis_protocol2.TLV_OFFSET,
6841
+ TLV_OK: () => import_axis_protocol2.TLV_OK,
6842
+ TLV_PID: () => import_axis_protocol2.TLV_PID,
6843
+ TLV_PREV_HASH: () => import_axis_protocol2.TLV_PREV_HASH,
6844
+ TLV_PROOF_REF: () => import_axis_protocol2.TLV_PROOF_REF,
6845
+ TLV_PROOF_TYPE: () => import_axis_protocol2.TLV_PROOF_TYPE,
6846
+ TLV_REALM: () => import_axis_protocol2.TLV_REALM,
6847
+ TLV_RECEIPT_HASH: () => import_axis_protocol2.TLV_RECEIPT_HASH,
6848
+ TLV_RID: () => import_axis_protocol2.TLV_RID,
6849
+ TLV_SHA256_CHUNK: () => import_axis_protocol2.TLV_SHA256_CHUNK,
6850
+ TLV_TRACE_ID: () => import_axis_protocol2.TLV_TRACE_ID,
6851
+ TLV_TS: () => import_axis_protocol2.TLV_TS,
6852
+ TLV_UPLOAD_ID: () => import_axis_protocol2.TLV_UPLOAD_ID,
9106
6853
  computeReceiptHash: () => computeReceiptHash,
9107
6854
  computeSignaturePayload: () => computeSignaturePayload,
6855
+ decodeArray: () => import_axis_protocol.decodeArray,
6856
+ decodeFrame: () => decodeFrame,
6857
+ decodeObject: () => import_axis_protocol.decodeObject,
6858
+ decodeTLVs: () => import_axis_protocol.decodeTLVs,
6859
+ decodeTLVsList: () => import_axis_protocol.decodeTLVsList,
6860
+ decodeVarint: () => import_axis_protocol3.decodeVarint,
6861
+ encodeFrame: () => encodeFrame,
6862
+ encodeTLVs: () => import_axis_protocol.encodeTLVs,
6863
+ encodeVarint: () => import_axis_protocol3.encodeVarint,
9108
6864
  generateEd25519KeyPair: () => generateEd25519KeyPair,
6865
+ getSignTarget: () => getSignTarget,
9109
6866
  sha256: () => sha2564,
9110
6867
  signFrame: () => signFrame,
6868
+ varintLength: () => import_axis_protocol3.varintLength,
9111
6869
  verifyFrameSignature: () => verifyFrameSignature
9112
6870
  });
9113
6871
  var init_core = __esm({
9114
6872
  "src/core/index.ts"() {
9115
- __reExport(core_exports, require("@nextera.one/axis-protocol"));
6873
+ init_constants();
6874
+ init_varint();
6875
+ init_tlv();
9116
6876
  init_axis_bin();
9117
6877
  init_signature();
9118
6878
  init_axis_error();
@@ -9129,55 +6889,18 @@ var init_types = __esm({
9129
6889
  var require_proof_verification_service = __commonJS({
9130
6890
  "src/crypto/proof-verification.service.ts"(exports2) {
9131
6891
  "use strict";
9132
- var __createBinding = exports2 && exports2.__createBinding || (Object.create ? (function(o, m, k, k2) {
9133
- if (k2 === void 0) k2 = k;
9134
- var desc = Object.getOwnPropertyDescriptor(m, k);
9135
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
9136
- desc = { enumerable: true, get: function() {
9137
- return m[k];
9138
- } };
9139
- }
9140
- Object.defineProperty(o, k2, desc);
9141
- }) : (function(o, m, k, k2) {
9142
- if (k2 === void 0) k2 = k;
9143
- o[k2] = m[k];
9144
- }));
9145
- var __setModuleDefault = exports2 && exports2.__setModuleDefault || (Object.create ? (function(o, v) {
9146
- Object.defineProperty(o, "default", { enumerable: true, value: v });
9147
- }) : function(o, v) {
9148
- o["default"] = v;
9149
- });
9150
6892
  var __decorate = exports2 && exports2.__decorate || function(decorators, target, key, desc) {
9151
6893
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
9152
6894
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
9153
6895
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
9154
6896
  return c > 3 && r && Object.defineProperty(target, key, r), r;
9155
6897
  };
9156
- var __importStar = exports2 && exports2.__importStar || /* @__PURE__ */ (function() {
9157
- var ownKeys = function(o) {
9158
- ownKeys = Object.getOwnPropertyNames || function(o2) {
9159
- var ar = [];
9160
- for (var k in o2) if (Object.prototype.hasOwnProperty.call(o2, k)) ar[ar.length] = k;
9161
- return ar;
9162
- };
9163
- return ownKeys(o);
9164
- };
9165
- return function(mod) {
9166
- if (mod && mod.__esModule) return mod;
9167
- var result = {};
9168
- if (mod != null) {
9169
- for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
9170
- }
9171
- __setModuleDefault(result, mod);
9172
- return result;
9173
- };
9174
- })();
9175
6898
  var ProofVerificationService_1;
9176
6899
  Object.defineProperty(exports2, "__esModule", { value: true });
9177
6900
  exports2.ProofVerificationService = void 0;
9178
6901
  var common_1 = require("@nestjs/common");
9179
- var crypto3 = __importStar(require("crypto"));
9180
- var nacl = __importStar(require("tweetnacl"));
6902
+ var crypto3 = require("crypto");
6903
+ var nacl = require("tweetnacl");
9181
6904
  var ProofVerificationService = ProofVerificationService_1 = class ProofVerificationService {
9182
6905
  constructor() {
9183
6906
  this.logger = new common_1.Logger(ProofVerificationService_1.name);
@@ -9346,13 +7069,127 @@ var init_crypto = __esm({
9346
7069
  }
9347
7070
  });
9348
7071
 
7072
+ // src/decorators/intent-policy.decorator.ts
7073
+ function Sensitivity(level) {
7074
+ return ((target, propertyKey) => {
7075
+ if (propertyKey !== void 0) {
7076
+ Reflect.defineMetadata(
7077
+ SENSITIVITY_METADATA_KEY,
7078
+ level,
7079
+ target,
7080
+ propertyKey
7081
+ );
7082
+ return;
7083
+ }
7084
+ Reflect.defineMetadata(SENSITIVITY_METADATA_KEY, level, target);
7085
+ });
7086
+ }
7087
+ function Contract(options) {
7088
+ return ((target, propertyKey) => {
7089
+ if (propertyKey !== void 0) {
7090
+ Reflect.defineMetadata(
7091
+ CONTRACT_METADATA_KEY,
7092
+ options,
7093
+ target,
7094
+ propertyKey
7095
+ );
7096
+ return;
7097
+ }
7098
+ Reflect.defineMetadata(CONTRACT_METADATA_KEY, options, target);
7099
+ });
7100
+ }
7101
+ function RequiredProof(proofs) {
7102
+ return ((target, propertyKey) => {
7103
+ if (propertyKey !== void 0) {
7104
+ Reflect.defineMetadata(
7105
+ REQUIRED_PROOF_METADATA_KEY,
7106
+ proofs,
7107
+ target,
7108
+ propertyKey
7109
+ );
7110
+ return;
7111
+ }
7112
+ Reflect.defineMetadata(
7113
+ REQUIRED_PROOF_METADATA_KEY,
7114
+ proofs,
7115
+ target
7116
+ );
7117
+ });
7118
+ }
7119
+ function Capsule() {
7120
+ return ((target, propertyKey) => {
7121
+ const existing = propertyKey !== void 0 ? Reflect.getMetadata(
7122
+ REQUIRED_PROOF_METADATA_KEY,
7123
+ target,
7124
+ propertyKey
7125
+ ) ?? [] : Reflect.getMetadata(
7126
+ REQUIRED_PROOF_METADATA_KEY,
7127
+ target
7128
+ ) ?? [];
7129
+ const merged = existing.includes("CAPSULE") ? existing : [...existing, "CAPSULE"];
7130
+ if (propertyKey !== void 0) {
7131
+ Reflect.defineMetadata(
7132
+ REQUIRED_PROOF_METADATA_KEY,
7133
+ merged,
7134
+ target,
7135
+ propertyKey
7136
+ );
7137
+ } else {
7138
+ Reflect.defineMetadata(
7139
+ REQUIRED_PROOF_METADATA_KEY,
7140
+ merged,
7141
+ target
7142
+ );
7143
+ }
7144
+ });
7145
+ }
7146
+ function Witness() {
7147
+ return ((target, propertyKey) => {
7148
+ const existing = propertyKey !== void 0 ? Reflect.getMetadata(
7149
+ REQUIRED_PROOF_METADATA_KEY,
7150
+ target,
7151
+ propertyKey
7152
+ ) ?? [] : Reflect.getMetadata(
7153
+ REQUIRED_PROOF_METADATA_KEY,
7154
+ target
7155
+ ) ?? [];
7156
+ const merged = existing.includes("WITNESS") ? existing : [...existing, "WITNESS"];
7157
+ if (propertyKey !== void 0) {
7158
+ Reflect.defineMetadata(
7159
+ REQUIRED_PROOF_METADATA_KEY,
7160
+ merged,
7161
+ target,
7162
+ propertyKey
7163
+ );
7164
+ } else {
7165
+ Reflect.defineMetadata(
7166
+ REQUIRED_PROOF_METADATA_KEY,
7167
+ merged,
7168
+ target
7169
+ );
7170
+ }
7171
+ });
7172
+ }
7173
+ var import_reflect_metadata10, SENSITIVITY_METADATA_KEY, CONTRACT_METADATA_KEY, REQUIRED_PROOF_METADATA_KEY;
7174
+ var init_intent_policy_decorator = __esm({
7175
+ "src/decorators/intent-policy.decorator.ts"() {
7176
+ import_reflect_metadata10 = require("reflect-metadata");
7177
+ SENSITIVITY_METADATA_KEY = "axis:sensitivity";
7178
+ CONTRACT_METADATA_KEY = "axis:contract";
7179
+ REQUIRED_PROOF_METADATA_KEY = "axis:required_proof";
7180
+ }
7181
+ });
7182
+
9349
7183
  // src/decorators/index.ts
9350
7184
  var decorators_exports = {};
9351
7185
  __export(decorators_exports, {
9352
7186
  CAPSULE_POLICY_METADATA_KEY: () => CAPSULE_POLICY_METADATA_KEY,
9353
7187
  CHAIN_METADATA_KEY: () => CHAIN_METADATA_KEY,
7188
+ CONTRACT_METADATA_KEY: () => CONTRACT_METADATA_KEY,
7189
+ Capsule: () => Capsule,
9354
7190
  CapsulePolicy: () => CapsulePolicy,
9355
7191
  Chain: () => Chain,
7192
+ Contract: () => Contract,
9356
7193
  HANDLER_METADATA_KEY: () => HANDLER_METADATA_KEY,
9357
7194
  Handler: () => Handler,
9358
7195
  INTENT_BODY_KEY: () => INTENT_BODY_KEY,
@@ -9365,8 +7202,21 @@ __export(decorators_exports, {
9365
7202
  OBSERVER_BINDINGS_KEY: () => OBSERVER_BINDINGS_KEY,
9366
7203
  OBSERVER_METADATA_KEY: () => OBSERVER_METADATA_KEY,
9367
7204
  Observer: () => Observer,
7205
+ REQUIRED_PROOF_METADATA_KEY: () => REQUIRED_PROOF_METADATA_KEY,
7206
+ RequiredProof: () => RequiredProof,
7207
+ SENSITIVITY_METADATA_KEY: () => SENSITIVITY_METADATA_KEY,
9368
7208
  SENSOR_METADATA_KEY: () => SENSOR_METADATA_KEY,
7209
+ Sensitivity: () => Sensitivity,
9369
7210
  Sensor: () => Sensor,
7211
+ TLV_FIELDS_KEY: () => TLV_FIELDS_KEY,
7212
+ TLV_VALIDATORS_KEY: () => TLV_VALIDATORS_KEY,
7213
+ TlvEnum: () => TlvEnum,
7214
+ TlvField: () => TlvField,
7215
+ TlvMinLen: () => TlvMinLen,
7216
+ TlvRange: () => TlvRange,
7217
+ TlvUtf8Pattern: () => TlvUtf8Pattern,
7218
+ TlvValidate: () => TlvValidate,
7219
+ Witness: () => Witness,
9370
7220
  mergeCapsulePolicyOptions: () => mergeCapsulePolicyOptions,
9371
7221
  normalizeCapsulePolicyOptions: () => normalizeCapsulePolicyOptions
9372
7222
  });
@@ -9374,6 +7224,7 @@ var init_decorators = __esm({
9374
7224
  "src/decorators/index.ts"() {
9375
7225
  __reExport(decorators_exports, __toESM(require_axis_request_decorator()));
9376
7226
  init_capsule_policy_decorator();
7227
+ init_intent_policy_decorator();
9377
7228
  init_chain_decorator();
9378
7229
  __reExport(decorators_exports, __toESM(require_dto_schema_util()));
9379
7230
  init_handler_decorator();
@@ -9382,7 +7233,7 @@ var init_decorators = __esm({
9382
7233
  init_intent_decorator();
9383
7234
  init_observer_decorator();
9384
7235
  init_sensor_decorator();
9385
- __reExport(decorators_exports, __toESM(require_tlv_field_decorator()));
7236
+ init_tlv_field_decorator();
9386
7237
  }
9387
7238
  });
9388
7239
 
@@ -9483,25 +7334,6 @@ var init_engine = __esm({
9483
7334
  }
9484
7335
  });
9485
7336
 
9486
- // src/idel/idel.types.ts
9487
- var init_idel_types = __esm({
9488
- "src/idel/idel.types.ts"() {
9489
- }
9490
- });
9491
-
9492
- // src/idel/index.ts
9493
- var idel_exports = {};
9494
- __export(idel_exports, {
9495
- IdelCompiler: () => IdelCompiler,
9496
- IdelSchemaRegistry: () => IdelSchemaRegistry
9497
- });
9498
- var init_idel = __esm({
9499
- "src/idel/index.ts"() {
9500
- init_idel_types();
9501
- init_idel_compiler();
9502
- }
9503
- });
9504
-
9505
7337
  // src/loom/index.ts
9506
7338
  var loom_exports = {};
9507
7339
  __export(loom_exports, {
@@ -9511,98 +7343,11 @@ __export(loom_exports, {
9511
7343
  TLV_WRIT: () => import_axis_protocol2.TLV_LOOM_WRIT,
9512
7344
  canonicalizeGrant: () => canonicalizeGrant,
9513
7345
  canonicalizeWrit: () => canonicalizeWrit,
9514
- createGrant: () => createGrant,
9515
- createPresenceChallenge: () => createPresenceChallenge,
9516
- createReceipt: () => createReceipt,
9517
- createRevocation: () => createRevocation,
9518
- createWrit: () => createWrit,
9519
- deriveAnchorReflection: () => deriveAnchorReflection,
9520
- executeLoomPipeline: () => executeLoomPipeline,
9521
- getGrantStatus: () => getGrantStatus,
9522
- getPresenceStatus: () => getPresenceStatus,
9523
- grantCoversAction: () => grantCoversAction,
9524
- isRevoked: () => isRevoked,
9525
- renewPresence: () => renewPresence,
9526
- signPresenceChallenge: () => signPresenceChallenge,
9527
- updateThreadState: () => updateThreadState,
9528
- validateGrant: () => validateGrant,
9529
- validateWrit: () => validateWrit,
9530
- verifyPresenceProof: () => verifyPresenceProof,
9531
- verifyReceiptChain: () => verifyReceiptChain
7346
+ deriveAnchorReflection: () => deriveAnchorReflection
9532
7347
  });
9533
7348
  var init_loom = __esm({
9534
7349
  "src/loom/index.ts"() {
9535
7350
  init_loom_types();
9536
- init_loom_engine();
9537
- }
9538
- });
9539
-
9540
- // src/needle/needle.types.ts
9541
- var init_needle_types = __esm({
9542
- "src/needle/needle.types.ts"() {
9543
- }
9544
- });
9545
-
9546
- // src/needle/knot.types.ts
9547
- var init_knot_types = __esm({
9548
- "src/needle/knot.types.ts"() {
9549
- }
9550
- });
9551
-
9552
- // src/needle/fabric.types.ts
9553
- var init_fabric_types = __esm({
9554
- "src/needle/fabric.types.ts"() {
9555
- }
9556
- });
9557
-
9558
- // src/needle/pattern.types.ts
9559
- var init_pattern_types = __esm({
9560
- "src/needle/pattern.types.ts"() {
9561
- }
9562
- });
9563
-
9564
- // src/needle/index.ts
9565
- var needle_exports = {};
9566
- __export(needle_exports, {
9567
- InMemoryPatternStore: () => InMemoryPatternStore,
9568
- addStitchToKnot: () => addStitchToKnot,
9569
- applyStitch: () => applyStitch,
9570
- assembleNeedle: () => assembleNeedle,
9571
- breakKnot: () => breakKnot,
9572
- createFabric: () => createFabric,
9573
- detectAnomalies: () => detectAnomalies,
9574
- detectKnotPatterns: () => detectKnotPatterns,
9575
- detectSequencePatterns: () => detectSequencePatterns,
9576
- diffFabrics: () => diffFabrics,
9577
- findKnotsForStitch: () => findKnotsForStitch,
9578
- forkFromKnot: () => forkFromKnot,
9579
- formStitch: () => formStitch,
9580
- getDecisionPoints: () => getDecisionPoints,
9581
- getFabricValue: () => getFabricValue,
9582
- getIrreversibleKnots: () => getIrreversibleKnots,
9583
- isKnotOpen: () => isKnotOpen,
9584
- isPointOfNoReturn: () => isPointOfNoReturn,
9585
- lockCells: () => lockCells,
9586
- matchPatterns: () => matchPatterns,
9587
- openKnot: () => openKnot,
9588
- projectAt: () => projectAt,
9589
- queryFabric: () => queryFabric,
9590
- recordOccurrence: () => recordOccurrence,
9591
- runNeedlePipeline: () => runNeedlePipeline,
9592
- tieKnot: () => tieKnot,
9593
- validateKnot: () => validateKnot,
9594
- weave: () => weave
9595
- });
9596
- var init_needle = __esm({
9597
- "src/needle/index.ts"() {
9598
- init_needle_types();
9599
- init_needle_engine();
9600
- init_knot_types();
9601
- init_knot_engine();
9602
- init_fabric_types();
9603
- init_fabric_engine();
9604
- init_pattern_types();
9605
- init_pattern_engine();
9606
7351
  }
9607
7352
  });
9608
7353
 
@@ -10385,54 +8130,17 @@ var require_chunk_hash_sensor = __commonJS({
10385
8130
  var require_entropy_sensor = __commonJS({
10386
8131
  "src/sensors/entropy.sensor.ts"(exports2) {
10387
8132
  "use strict";
10388
- var __createBinding = exports2 && exports2.__createBinding || (Object.create ? (function(o, m, k, k2) {
10389
- if (k2 === void 0) k2 = k;
10390
- var desc = Object.getOwnPropertyDescriptor(m, k);
10391
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
10392
- desc = { enumerable: true, get: function() {
10393
- return m[k];
10394
- } };
10395
- }
10396
- Object.defineProperty(o, k2, desc);
10397
- }) : (function(o, m, k, k2) {
10398
- if (k2 === void 0) k2 = k;
10399
- o[k2] = m[k];
10400
- }));
10401
- var __setModuleDefault = exports2 && exports2.__setModuleDefault || (Object.create ? (function(o, v) {
10402
- Object.defineProperty(o, "default", { enumerable: true, value: v });
10403
- }) : function(o, v) {
10404
- o["default"] = v;
10405
- });
10406
8133
  var __decorate = exports2 && exports2.__decorate || function(decorators, target, key, desc) {
10407
8134
  var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
10408
8135
  if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
10409
8136
  else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
10410
8137
  return c > 3 && r && Object.defineProperty(target, key, r), r;
10411
8138
  };
10412
- var __importStar = exports2 && exports2.__importStar || /* @__PURE__ */ (function() {
10413
- var ownKeys = function(o) {
10414
- ownKeys = Object.getOwnPropertyNames || function(o2) {
10415
- var ar = [];
10416
- for (var k in o2) if (Object.prototype.hasOwnProperty.call(o2, k)) ar[ar.length] = k;
10417
- return ar;
10418
- };
10419
- return ownKeys(o);
10420
- };
10421
- return function(mod) {
10422
- if (mod && mod.__esModule) return mod;
10423
- var result = {};
10424
- if (mod != null) {
10425
- for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
10426
- }
10427
- __setModuleDefault(result, mod);
10428
- return result;
10429
- };
10430
- })();
10431
8139
  var EntropySensor_1;
10432
8140
  Object.defineProperty(exports2, "__esModule", { value: true });
10433
8141
  exports2.EntropySensor = void 0;
10434
8142
  var common_1 = require("@nestjs/common");
10435
- var crypto3 = __importStar(require("crypto"));
8143
+ var crypto3 = require("crypto");
10436
8144
  var sensor_decorator_1 = (init_sensor_decorator(), __toCommonJS(sensor_decorator_exports));
10437
8145
  var sensor_bands_1 = (init_sensor_bands(), __toCommonJS(sensor_bands_exports));
10438
8146
  var constants_1 = (init_constants(), __toCommonJS(constants_exports));
@@ -10888,143 +8596,6 @@ var require_intent_registry_sensor = __commonJS({
10888
8596
  }
10889
8597
  });
10890
8598
 
10891
- // src/sensors/law-evaluation.sensor.ts
10892
- var require_law_evaluation_sensor = __commonJS({
10893
- "src/sensors/law-evaluation.sensor.ts"(exports2) {
10894
- "use strict";
10895
- var __decorate = exports2 && exports2.__decorate || function(decorators, target, key, desc) {
10896
- var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;
10897
- if (typeof Reflect === "object" && typeof Reflect.decorate === "function") r = Reflect.decorate(decorators, target, key, desc);
10898
- else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;
10899
- return c > 3 && r && Object.defineProperty(target, key, r), r;
10900
- };
10901
- var __metadata = exports2 && exports2.__metadata || function(k, v) {
10902
- if (typeof Reflect === "object" && typeof Reflect.metadata === "function") return Reflect.metadata(k, v);
10903
- };
10904
- var LawEvaluationSensor_1;
10905
- Object.defineProperty(exports2, "__esModule", { value: true });
10906
- exports2.LawEvaluationSensor = void 0;
10907
- var common_1 = require("@nestjs/common");
10908
- var sensor_decorator_1 = (init_sensor_decorator(), __toCommonJS(sensor_decorator_exports));
10909
- var sensor_bands_1 = (init_sensor_bands(), __toCommonJS(sensor_bands_exports));
10910
- var law_1 = (init_law(), __toCommonJS(law_exports));
10911
- var LawEvaluationSensor = LawEvaluationSensor_1 = class LawEvaluationSensor {
10912
- constructor(options = {}) {
10913
- this.options = options;
10914
- this.logger = new common_1.Logger(LawEvaluationSensor_1.name);
10915
- this.name = "LawEvaluationSensor";
10916
- this.order = sensor_bands_1.BAND.POLICY + 5;
10917
- }
10918
- supports(input) {
10919
- return !!this.options.evaluator && !!input.intent;
10920
- }
10921
- async run(input) {
10922
- const evaluator = this.options.evaluator;
10923
- if (!evaluator) {
10924
- return { action: "ALLOW" };
10925
- }
10926
- const context = (0, law_1.buildAxisLawEvaluationContext)(input);
10927
- let result;
10928
- try {
10929
- result = await evaluator(context);
10930
- } catch (error) {
10931
- const message = error instanceof Error ? error.message : "Unknown law evaluation error";
10932
- this.logger.error(`Law evaluation failed for ${input.intent}: ${message}`);
10933
- input.metadata = {
10934
- ...input.metadata ?? {},
10935
- lawEvaluation: {
10936
- decision: "deny",
10937
- reason: "Law evaluation failed",
10938
- explanation: message
10939
- }
10940
- };
10941
- return {
10942
- action: "DENY",
10943
- code: "LAW_EVALUATION_ERROR",
10944
- reason: message,
10945
- meta: { lawDecision: "deny" }
10946
- };
10947
- }
10948
- input.metadata = {
10949
- ...input.metadata ?? {},
10950
- lawEvaluation: {
10951
- ...result,
10952
- context: sanitizeLawContext(context)
10953
- }
10954
- };
10955
- if (result.decision === "allow") {
10956
- return {
10957
- allow: true,
10958
- riskScore: 0,
10959
- reasons: result.reason ? [result.reason] : [],
10960
- tags: {
10961
- lawDecision: "allow",
10962
- ...result.applicable ? { lawApplicableArticles: result.applicable.length } : {}
10963
- },
10964
- meta: result
10965
- };
10966
- }
10967
- if (result.decision === "conditional") {
10968
- const mode = this.options.conditionalDecision ?? "deny";
10969
- const reasons = [result.reason, result.explanation].filter(Boolean);
10970
- if (mode === "allow") {
10971
- return {
10972
- allow: true,
10973
- riskScore: 0,
10974
- reasons,
10975
- tags: {
10976
- lawDecision: "conditional"
10977
- },
10978
- meta: result
10979
- };
10980
- }
10981
- if (mode === "flag") {
10982
- return {
10983
- action: "FLAG",
10984
- scoreDelta: 25,
10985
- reasons: reasons.length > 0 ? reasons : ["Execution is conditionally permitted pending additional requirements"],
10986
- meta: result
10987
- };
10988
- }
10989
- return {
10990
- action: "DENY",
10991
- code: "LAW_CONDITIONAL",
10992
- reason: reasons.join(" | ") || "Execution is conditionally permitted pending additional requirements",
10993
- meta: { lawDecision: "conditional", evaluation: result }
10994
- };
10995
- }
10996
- return {
10997
- action: "DENY",
10998
- code: "LAW_DENIED",
10999
- reason: [result.reason, result.explanation].filter(Boolean).join(" | ") || "Execution denied by law evaluation",
11000
- meta: { lawDecision: "deny", evaluation: result }
11001
- };
11002
- }
11003
- };
11004
- exports2.LawEvaluationSensor = LawEvaluationSensor;
11005
- exports2.LawEvaluationSensor = LawEvaluationSensor = LawEvaluationSensor_1 = __decorate([
11006
- (0, sensor_decorator_1.Sensor)(),
11007
- (0, common_1.Injectable)(),
11008
- __metadata("design:paramtypes", [Object])
11009
- ], LawEvaluationSensor);
11010
- function sanitizeLawContext(context) {
11011
- return {
11012
- actorId: context.actorId,
11013
- intent: context.intent,
11014
- audience: context.audience,
11015
- tps: context.tps,
11016
- country: context.country,
11017
- ip: context.ip,
11018
- path: context.path,
11019
- clientId: context.clientId,
11020
- deviceId: context.deviceId,
11021
- sessionId: context.sessionId,
11022
- capsuleId: context.capsuleId
11023
- };
11024
- }
11025
- }
11026
- });
11027
-
11028
8599
  // src/sensors/proof-presence.sensor.ts
11029
8600
  var require_proof_presence_sensor = __commonJS({
11030
8601
  "src/sensors/proof-presence.sensor.ts"(exports2) {
@@ -11229,12 +8800,7 @@ var require_protocol_strict_sensor = __commonJS({
11229
8800
  return true;
11230
8801
  }
11231
8802
  isValidContentType(contentType) {
11232
- const valid = [
11233
- "application/axis-bin",
11234
- "application/octet-stream",
11235
- "application/x-axis"
11236
- ];
11237
- return valid.some((v) => contentType.toLowerCase().includes(v));
8803
+ return constants_1.AxisMediaTypes.isAxisContentType(contentType);
11238
8804
  }
11239
8805
  isValidFlags(flags) {
11240
8806
  return VALID_FLAGS.includes(flags);
@@ -11732,40 +9298,16 @@ var init_sensors2 = __esm({
11732
9298
  __reExport(sensors_exports, __toESM(require_header_tlv_limit_sensor()));
11733
9299
  __reExport(sensors_exports, __toESM(require_intent_allowlist_sensor()));
11734
9300
  __reExport(sensors_exports, __toESM(require_intent_registry_sensor()));
11735
- __reExport(sensors_exports, __toESM(require_law_evaluation_sensor()));
11736
9301
  __reExport(sensors_exports, __toESM(require_proof_presence_sensor()));
11737
9302
  __reExport(sensors_exports, __toESM(require_protocol_strict_sensor()));
11738
9303
  __reExport(sensors_exports, __toESM(require_receipt_policy_sensor()));
11739
- __reExport(sensors_exports, __toESM(require_risk_gate_sensor()));
11740
9304
  __reExport(sensors_exports, __toESM(require_schema_validation_sensor()));
11741
9305
  __reExport(sensors_exports, __toESM(require_stream_scope_sensor()));
11742
- __reExport(sensors_exports, __toESM(require_tickauth_sensor()));
11743
9306
  __reExport(sensors_exports, __toESM(require_tlv_parse_sensor()));
11744
- __reExport(sensors_exports, __toESM(require_tps_sensor()));
11745
9307
  __reExport(sensors_exports, __toESM(require_varint_hardening_sensor()));
11746
9308
  }
11747
9309
  });
11748
9310
 
11749
- // src/timeline/timeline.types.ts
11750
- var init_timeline_types = __esm({
11751
- "src/timeline/timeline.types.ts"() {
11752
- }
11753
- });
11754
-
11755
- // src/timeline/index.ts
11756
- var timeline_exports = {};
11757
- __export(timeline_exports, {
11758
- InMemoryTimelineStore: () => InMemoryTimelineStore,
11759
- TimelineEngine: () => TimelineEngine
11760
- });
11761
- var init_timeline = __esm({
11762
- "src/timeline/index.ts"() {
11763
- init_timeline_types();
11764
- init_timeline_store();
11765
- init_timeline_engine();
11766
- }
11767
- });
11768
-
11769
9311
  // src/utils/index.ts
11770
9312
  var utils_exports = {};
11771
9313
  __export(utils_exports, {
@@ -11800,6 +9342,7 @@ __export(index_exports, {
11800
9342
  AxisFrameZ: () => AxisFrameZ,
11801
9343
  AxisIdDto: () => import_axis_id.AxisIdDto,
11802
9344
  AxisIp: () => import_axis_request.AxisIp,
9345
+ AxisMediaTypes: () => AxisMediaTypes,
11803
9346
  AxisPacketTags: () => T,
11804
9347
  AxisPartialType: () => AxisPartialType,
11805
9348
  AxisRaw: () => import_axis_request.AxisRaw,
@@ -11842,10 +9385,6 @@ __export(index_exports, {
11842
9385
  INTENT_SENSITIVITY_MAP: () => INTENT_SENSITIVITY_MAP,
11843
9386
  INTENT_SENSORS_KEY: () => INTENT_SENSORS_KEY,
11844
9387
  INTENT_TIMEOUTS: () => INTENT_TIMEOUTS,
11845
- IdelCompiler: () => IdelCompiler,
11846
- IdelSchemaRegistry: () => IdelSchemaRegistry,
11847
- InMemoryPatternStore: () => InMemoryPatternStore,
11848
- InMemoryTimelineStore: () => InMemoryTimelineStore,
11849
9388
  Intent: () => Intent,
11850
9389
  IntentBody: () => IntentBody,
11851
9390
  IntentRouter: () => import_intent2.IntentRouter,
@@ -11887,7 +9426,6 @@ __export(index_exports, {
11887
9426
  RESPONSE_TAG_UPDATED_BY: () => import_axis_response.RESPONSE_TAG_UPDATED_BY,
11888
9427
  ResponseObserver: () => ResponseObserver,
11889
9428
  RiskDecision: () => RiskDecision,
11890
- RiskGateSensor: () => import_risk_gate.RiskGateSensor,
11891
9429
  SENSOR_METADATA_KEY: () => SENSOR_METADATA_KEY,
11892
9430
  Schema2002_PasskeyLoginOptionsRes: () => Schema2002_PasskeyLoginOptionsRes,
11893
9431
  Schema2011_PasskeyLoginVerifyReq: () => Schema2011_PasskeyLoginVerifyReq,
@@ -11906,7 +9444,7 @@ __export(index_exports, {
11906
9444
  TLV_EFFECT: () => import_axis_protocol2.TLV_EFFECT,
11907
9445
  TLV_ERROR_CODE: () => import_axis_protocol2.TLV_ERROR_CODE,
11908
9446
  TLV_ERROR_MSG: () => import_axis_protocol2.TLV_ERROR_MSG,
11909
- TLV_FIELDS_KEY: () => import_tlv_field2.TLV_FIELDS_KEY,
9447
+ TLV_FIELDS_KEY: () => TLV_FIELDS_KEY,
11910
9448
  TLV_INDEX: () => import_axis_protocol2.TLV_INDEX,
11911
9449
  TLV_INTENT: () => import_axis_protocol2.TLV_INTENT,
11912
9450
  TLV_KID: () => import_axis_protocol2.TLV_KID,
@@ -11932,28 +9470,20 @@ __export(index_exports, {
11932
9470
  TLV_TRACE_ID: () => import_axis_protocol2.TLV_TRACE_ID,
11933
9471
  TLV_TS: () => import_axis_protocol2.TLV_TS,
11934
9472
  TLV_UPLOAD_ID: () => import_axis_protocol2.TLV_UPLOAD_ID,
11935
- TLV_VALIDATORS_KEY: () => import_tlv_field2.TLV_VALIDATORS_KEY,
9473
+ TLV_VALIDATORS_KEY: () => TLV_VALIDATORS_KEY,
11936
9474
  TLV_WRIT: () => import_axis_protocol2.TLV_LOOM_WRIT,
11937
- TickAuthSensor: () => import_tickauth.TickAuthSensor,
11938
- TimelineEngine: () => TimelineEngine,
11939
- TlvEnum: () => import_tlv_field2.TlvEnum,
11940
- TlvField: () => import_tlv_field2.TlvField,
11941
- TlvMinLen: () => import_tlv_field2.TlvMinLen,
11942
- TlvRange: () => import_tlv_field2.TlvRange,
11943
- TlvUtf8Pattern: () => import_tlv_field2.TlvUtf8Pattern,
11944
- TlvValidate: () => import_tlv_field2.TlvValidate,
11945
- TpsSensor: () => import_tps.TpsSensor,
11946
- addStitchToKnot: () => addStitchToKnot,
11947
- applyStitch: () => applyStitch,
11948
- assembleNeedle: () => assembleNeedle,
9475
+ TlvEnum: () => TlvEnum,
9476
+ TlvField: () => TlvField,
9477
+ TlvMinLen: () => TlvMinLen,
9478
+ TlvRange: () => TlvRange,
9479
+ TlvUtf8Pattern: () => TlvUtf8Pattern,
9480
+ TlvValidate: () => TlvValidate,
11949
9481
  axis1SigningBytes: () => axis1SigningBytes,
11950
9482
  b64urlDecode: () => b64urlDecode,
11951
9483
  b64urlDecodeString: () => b64urlDecodeString,
11952
9484
  b64urlEncode: () => b64urlEncode,
11953
9485
  b64urlEncodeString: () => b64urlEncodeString,
11954
- breakKnot: () => breakKnot,
11955
9486
  buildAts1Hdr: () => buildAts1Hdr,
11956
- buildAxisLawEvaluationContext: () => buildAxisLawEvaluationContext,
11957
9487
  buildDtoDecoder: () => import_dto_schema.buildDtoDecoder,
11958
9488
  buildPacket: () => buildPacket,
11959
9489
  buildQueueMessage: () => buildQueueMessage,
@@ -11972,17 +9502,11 @@ __export(index_exports, {
11972
9502
  computeReceiptHash: () => computeReceiptHash,
11973
9503
  computeSignaturePayload: () => computeSignaturePayload,
11974
9504
  core: () => core_exports,
11975
- createFabric: () => createFabric,
11976
- createGrant: () => createGrant,
11977
9505
  createObservation: () => createObservation,
11978
- createPresenceChallenge: () => createPresenceChallenge,
11979
- createReceipt: () => createReceipt,
11980
- createRevocation: () => createRevocation,
11981
- createWrit: () => createWrit,
11982
9506
  crypto: () => crypto_exports,
11983
9507
  decodeArray: () => import_axis_protocol.decodeArray,
11984
9508
  decodeAxis1Frame: () => decodeAxis1Frame,
11985
- decodeFrame: () => import_axis_protocol4.decodeFrame,
9509
+ decodeFrame: () => decodeFrame,
11986
9510
  decodeObject: () => import_axis_protocol.decodeObject,
11987
9511
  decodeQueueMessage: () => decodeQueueMessage,
11988
9512
  decodeTLVs: () => import_axis_protocol.decodeTLVs,
@@ -11990,52 +9514,30 @@ __export(index_exports, {
11990
9514
  decodeVarint: () => import_axis_protocol3.decodeVarint,
11991
9515
  decorators: () => decorators_exports,
11992
9516
  deriveAnchorReflection: () => deriveAnchorReflection,
11993
- detectAnomalies: () => detectAnomalies,
11994
- detectKnotPatterns: () => detectKnotPatterns,
11995
- detectSequencePatterns: () => detectSequencePatterns,
11996
- diffFabrics: () => diffFabrics,
11997
9517
  encVarint: () => encVarint,
11998
9518
  encodeAxis1Frame: () => encodeAxis1Frame,
11999
9519
  encodeAxisTlvDto: () => encodeAxisTlvDto,
12000
- encodeFrame: () => import_axis_protocol4.encodeFrame,
9520
+ encodeFrame: () => encodeFrame,
12001
9521
  encodeQueueMessage: () => encodeQueueMessage,
12002
9522
  encodeTLVs: () => import_axis_protocol.encodeTLVs,
12003
9523
  encodeVarint: () => import_axis_protocol3.encodeVarint,
12004
9524
  endStage: () => endStage,
12005
9525
  engine: () => engine_exports,
12006
9526
  executeCcePipeline: () => executeCcePipeline,
12007
- executeLoomPipeline: () => executeLoomPipeline,
12008
9527
  extractDtoSchema: () => import_dto_schema.extractDtoSchema,
12009
9528
  finalizeObservation: () => finalizeObservation,
12010
- findKnotsForStitch: () => findKnotsForStitch,
12011
- forkFromKnot: () => forkFromKnot,
12012
- formStitch: () => formStitch,
12013
9529
  generateEd25519KeyPair: () => generateEd25519KeyPair,
12014
9530
  getAxisExecutionContext: () => getAxisExecutionContext,
12015
- getDecisionPoints: () => getDecisionPoints,
12016
- getFabricValue: () => getFabricValue,
12017
- getGrantStatus: () => getGrantStatus,
12018
- getIrreversibleKnots: () => getIrreversibleKnots,
12019
- getPresenceStatus: () => getPresenceStatus,
12020
- getSignTarget: () => import_axis_protocol4.getSignTarget,
12021
- grantCoversAction: () => grantCoversAction,
9531
+ getSignTarget: () => getSignTarget,
12022
9532
  hasScope: () => hasScope,
12023
9533
  hashObservation: () => hashObservation,
12024
- idel: () => idel_exports,
12025
9534
  isAdminOpcode: () => isAdminOpcode,
12026
- isKnotOpen: () => isKnotOpen,
12027
9535
  isKnownOpcode: () => isKnownOpcode,
12028
- isPointOfNoReturn: () => isPointOfNoReturn,
12029
- isRevoked: () => isRevoked,
12030
9536
  isTimestampValid: () => isTimestampValid,
12031
- lockCells: () => lockCells,
12032
9537
  loom: () => loom_exports,
12033
- matchPatterns: () => matchPatterns,
12034
9538
  mergeAxisExecutionContext: () => mergeAxisExecutionContext,
12035
- needle: () => needle_exports,
12036
9539
  nonce16: () => nonce16,
12037
9540
  normalizeSensorDecision: () => normalizeSensorDecision,
12038
- openKnot: () => openKnot,
12039
9541
  packPasskeyLoginOptionsReq: () => packPasskeyLoginOptionsReq,
12040
9542
  packPasskeyLoginOptionsRes: () => packPasskeyLoginOptionsRes,
12041
9543
  packPasskeyLoginVerifyReq: () => packPasskeyLoginVerifyReq,
@@ -12044,49 +9546,32 @@ __export(index_exports, {
12044
9546
  parseAutoClaimEntries: () => parseAutoClaimEntries,
12045
9547
  parseScope: () => parseScope,
12046
9548
  parseStreamEntries: () => parseStreamEntries,
12047
- projectAt: () => projectAt,
12048
- queryFabric: () => queryFabric,
12049
- recordOccurrence: () => recordOccurrence,
12050
9549
  recordSensor: () => recordSensor,
12051
- renewPresence: () => renewPresence,
12052
9550
  resolveTimeout: () => resolveTimeout,
12053
- runNeedlePipeline: () => runNeedlePipeline,
12054
9551
  schemas: () => schemas_exports,
12055
- scoreTruth: () => scoreTruth,
12056
9552
  security: () => security_exports,
12057
9553
  sensitivityName: () => sensitivityName,
12058
9554
  sensors: () => sensors_exports,
12059
9555
  sha256: () => sha2564,
12060
9556
  signFrame: () => signFrame,
12061
- signPresenceChallenge: () => signPresenceChallenge,
12062
9557
  stableJsonStringify: () => stableJsonStringify,
12063
9558
  startStage: () => startStage,
12064
- tieKnot: () => tieKnot,
12065
- timeline: () => timeline_exports,
12066
9559
  tlv: () => tlv,
12067
9560
  u64be: () => u64be,
12068
9561
  unpackPasskeyLoginOptionsReq: () => unpackPasskeyLoginOptionsReq,
12069
9562
  unpackPasskeyLoginVerifyReq: () => unpackPasskeyLoginVerifyReq,
12070
9563
  unpackPasskeyRegisterOptionsReq: () => unpackPasskeyRegisterOptionsReq,
12071
- updateThreadState: () => updateThreadState,
12072
9564
  utf8: () => utf8,
12073
9565
  utils: () => utils_exports,
12074
9566
  validateFrameShape: () => validateFrameShape,
12075
- validateGrant: () => validateGrant,
12076
- validateKnot: () => validateKnot,
12077
- validateWrit: () => validateWrit,
12078
9567
  varintLength: () => import_axis_protocol3.varintLength,
12079
9568
  varintU: () => varintU,
12080
9569
  verifyFrameSignature: () => verifyFrameSignature,
12081
- verifyObservation: () => verifyObservation,
12082
- verifyPresenceProof: () => verifyPresenceProof,
12083
- verifyReceiptChain: () => verifyReceiptChain,
12084
9570
  verifyResponse: () => verifyResponse,
12085
- weave: () => weave,
12086
9571
  withAxisExecutionContext: () => withAxisExecutionContext
12087
9572
  });
12088
9573
  module.exports = __toCommonJS(index_exports);
12089
- var import_tlv_field2, import_dto_schema, import_axis_id, import_axis_response, import_axis_chain, import_intent2, import_axis_files, import_axis_request, import_observer_discovery, import_observer_dispatcher, import_handler_discovery, import_sensor_discovery, import_observer2, import_sensor2, import_axis_sensor_chain, import_tps, import_risk_gate, import_tickauth;
9574
+ var import_dto_schema, import_axis_id, import_axis_response, import_axis_chain, import_intent2, import_axis_files, import_axis_request, import_observer_discovery, import_observer_dispatcher, import_handler_discovery, import_sensor_discovery, import_observer2, import_sensor2, import_axis_sensor_chain;
12090
9575
  var init_index = __esm({
12091
9576
  "src/index.ts"() {
12092
9577
  init_chain_decorator();
@@ -12098,7 +9583,7 @@ var init_index = __esm({
12098
9583
  init_observer_decorator();
12099
9584
  init_handler_sensors_decorator();
12100
9585
  init_sensor_decorator();
12101
- import_tlv_field2 = __toESM(require_tlv_field_decorator());
9586
+ init_tlv_field_decorator();
12102
9587
  import_dto_schema = __toESM(require_dto_schema_util());
12103
9588
  init_axis_tlv_dto();
12104
9589
  import_axis_id = __toESM(require_axis_id_dto());
@@ -12111,7 +9596,6 @@ var init_index = __esm({
12111
9596
  init_stable_json();
12112
9597
  init_observation_queue_codec();
12113
9598
  init_observation_hash();
12114
- init_truth_scoring();
12115
9599
  init_response_observer();
12116
9600
  init_constants();
12117
9601
  init_varint();
@@ -12133,7 +9617,6 @@ var init_index = __esm({
12133
9617
  init_axis_sensor();
12134
9618
  init_scopes();
12135
9619
  init_capabilities();
12136
- init_law();
12137
9620
  init_risk();
12138
9621
  init_opcodes();
12139
9622
  init_receipt();
@@ -12153,33 +9636,19 @@ var init_index = __esm({
12153
9636
  import_sensor2 = __toESM(require_sensor_registry());
12154
9637
  init_axis_observation();
12155
9638
  import_axis_sensor_chain = __toESM(require_axis_sensor_chain_service());
12156
- init_timeline_engine();
12157
- init_timeline_store();
12158
9639
  init_cce_pipeline();
12159
9640
  init_cce_types();
12160
9641
  init_axis_tlv_codec();
12161
9642
  init_loom_types();
12162
- init_loom_engine();
12163
- init_idel_compiler();
12164
- init_needle_engine();
12165
- init_knot_engine();
12166
- init_fabric_engine();
12167
- init_pattern_engine();
12168
- import_tps = __toESM(require_tps_sensor());
12169
- import_risk_gate = __toESM(require_risk_gate_sensor());
12170
- import_tickauth = __toESM(require_tickauth_sensor());
12171
9643
  init_cce();
12172
9644
  init_core();
12173
9645
  init_crypto();
12174
9646
  init_decorators();
12175
9647
  init_engine();
12176
- init_idel();
12177
9648
  init_loom();
12178
- init_needle();
12179
9649
  init_schemas();
12180
9650
  init_security();
12181
9651
  init_sensors2();
12182
- init_timeline();
12183
9652
  init_utils();
12184
9653
  }
12185
9654
  });
@@ -12206,6 +9675,7 @@ init_index();
12206
9675
  AxisFrameZ,
12207
9676
  AxisIdDto,
12208
9677
  AxisIp,
9678
+ AxisMediaTypes,
12209
9679
  AxisPacketTags,
12210
9680
  AxisPartialType,
12211
9681
  AxisRaw,
@@ -12248,10 +9718,6 @@ init_index();
12248
9718
  INTENT_SENSITIVITY_MAP,
12249
9719
  INTENT_SENSORS_KEY,
12250
9720
  INTENT_TIMEOUTS,
12251
- IdelCompiler,
12252
- IdelSchemaRegistry,
12253
- InMemoryPatternStore,
12254
- InMemoryTimelineStore,
12255
9721
  Intent,
12256
9722
  IntentBody,
12257
9723
  IntentRouter,
@@ -12293,7 +9759,6 @@ init_index();
12293
9759
  RESPONSE_TAG_UPDATED_BY,
12294
9760
  ResponseObserver,
12295
9761
  RiskDecision,
12296
- RiskGateSensor,
12297
9762
  SENSOR_METADATA_KEY,
12298
9763
  Schema2002_PasskeyLoginOptionsRes,
12299
9764
  Schema2011_PasskeyLoginVerifyReq,
@@ -12340,26 +9805,18 @@ init_index();
12340
9805
  TLV_UPLOAD_ID,
12341
9806
  TLV_VALIDATORS_KEY,
12342
9807
  TLV_WRIT,
12343
- TickAuthSensor,
12344
- TimelineEngine,
12345
9808
  TlvEnum,
12346
9809
  TlvField,
12347
9810
  TlvMinLen,
12348
9811
  TlvRange,
12349
9812
  TlvUtf8Pattern,
12350
9813
  TlvValidate,
12351
- TpsSensor,
12352
- addStitchToKnot,
12353
- applyStitch,
12354
- assembleNeedle,
12355
9814
  axis1SigningBytes,
12356
9815
  b64urlDecode,
12357
9816
  b64urlDecodeString,
12358
9817
  b64urlEncode,
12359
9818
  b64urlEncodeString,
12360
- breakKnot,
12361
9819
  buildAts1Hdr,
12362
- buildAxisLawEvaluationContext,
12363
9820
  buildDtoDecoder,
12364
9821
  buildPacket,
12365
9822
  buildQueueMessage,
@@ -12378,13 +9835,7 @@ init_index();
12378
9835
  computeReceiptHash,
12379
9836
  computeSignaturePayload,
12380
9837
  core,
12381
- createFabric,
12382
- createGrant,
12383
9838
  createObservation,
12384
- createPresenceChallenge,
12385
- createReceipt,
12386
- createRevocation,
12387
- createWrit,
12388
9839
  crypto,
12389
9840
  decodeArray,
12390
9841
  decodeAxis1Frame,
@@ -12396,10 +9847,6 @@ init_index();
12396
9847
  decodeVarint,
12397
9848
  decorators,
12398
9849
  deriveAnchorReflection,
12399
- detectAnomalies,
12400
- detectKnotPatterns,
12401
- detectSequencePatterns,
12402
- diffFabrics,
12403
9850
  encVarint,
12404
9851
  encodeAxis1Frame,
12405
9852
  encodeAxisTlvDto,
@@ -12410,38 +9857,20 @@ init_index();
12410
9857
  endStage,
12411
9858
  engine,
12412
9859
  executeCcePipeline,
12413
- executeLoomPipeline,
12414
9860
  extractDtoSchema,
12415
9861
  finalizeObservation,
12416
- findKnotsForStitch,
12417
- forkFromKnot,
12418
- formStitch,
12419
9862
  generateEd25519KeyPair,
12420
9863
  getAxisExecutionContext,
12421
- getDecisionPoints,
12422
- getFabricValue,
12423
- getGrantStatus,
12424
- getIrreversibleKnots,
12425
- getPresenceStatus,
12426
9864
  getSignTarget,
12427
- grantCoversAction,
12428
9865
  hasScope,
12429
9866
  hashObservation,
12430
- idel,
12431
9867
  isAdminOpcode,
12432
- isKnotOpen,
12433
9868
  isKnownOpcode,
12434
- isPointOfNoReturn,
12435
- isRevoked,
12436
9869
  isTimestampValid,
12437
- lockCells,
12438
9870
  loom,
12439
- matchPatterns,
12440
9871
  mergeAxisExecutionContext,
12441
- needle,
12442
9872
  nonce16,
12443
9873
  normalizeSensorDecision,
12444
- openKnot,
12445
9874
  packPasskeyLoginOptionsReq,
12446
9875
  packPasskeyLoginOptionsRes,
12447
9876
  packPasskeyLoginVerifyReq,
@@ -12450,45 +9879,28 @@ init_index();
12450
9879
  parseAutoClaimEntries,
12451
9880
  parseScope,
12452
9881
  parseStreamEntries,
12453
- projectAt,
12454
- queryFabric,
12455
- recordOccurrence,
12456
9882
  recordSensor,
12457
- renewPresence,
12458
9883
  resolveTimeout,
12459
- runNeedlePipeline,
12460
9884
  schemas,
12461
- scoreTruth,
12462
9885
  security,
12463
9886
  sensitivityName,
12464
9887
  sensors,
12465
9888
  sha256,
12466
9889
  signFrame,
12467
- signPresenceChallenge,
12468
9890
  stableJsonStringify,
12469
9891
  startStage,
12470
- tieKnot,
12471
- timeline,
12472
9892
  tlv,
12473
9893
  u64be,
12474
9894
  unpackPasskeyLoginOptionsReq,
12475
9895
  unpackPasskeyLoginVerifyReq,
12476
9896
  unpackPasskeyRegisterOptionsReq,
12477
- updateThreadState,
12478
9897
  utf8,
12479
9898
  utils,
12480
9899
  validateFrameShape,
12481
- validateGrant,
12482
- validateKnot,
12483
- validateWrit,
12484
9900
  varintLength,
12485
9901
  varintU,
12486
9902
  verifyFrameSignature,
12487
- verifyObservation,
12488
- verifyPresenceProof,
12489
- verifyReceiptChain,
12490
9903
  verifyResponse,
12491
- weave,
12492
9904
  withAxisExecutionContext
12493
9905
  });
12494
9906
  //# sourceMappingURL=index.js.map