@nextera.one/axis-server-sdk 2.3.18 → 2.3.20
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-Bb2pRr93.d.mts → index-BCFbHQxo.d.mts} +1 -14
- package/dist/{index-Q8wrM2PV.d.ts → index-BsnV_K_l.d.ts} +1 -14
- package/dist/index.d.mts +13 -13
- package/dist/index.d.ts +13 -13
- package/dist/index.js +5 -13
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +6 -13
- package/dist/index.mjs.map +1 -1
- package/dist/needle/index.js.map +1 -1
- package/dist/needle/index.mjs +1 -0
- package/dist/needle/index.mjs.map +1 -1
- package/dist/sensors/index.d.mts +1 -1
- package/dist/sensors/index.d.ts +1 -1
- package/dist/sensors/index.js +4 -13
- package/dist/sensors/index.js.map +1 -1
- package/dist/sensors/index.mjs +5 -13
- package/dist/sensors/index.mjs.map +1 -1
- package/package.json +1 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/decorators/chain.decorator.ts","../src/decorators/capsule-policy.decorator.ts","../src/decorators/intent-policy.decorator.ts","../src/decorators/handler-sensors.decorator.ts","../src/decorators/observer.decorator.ts","../src/decorators/intent-body.decorator.ts","../src/decorators/intent.decorator.ts","../src/decorators/handler.decorator.ts","../src/decorators/intent-sensors.decorator.ts","../src/decorators/sensor.decorator.ts","../src/decorators/tlv-field.decorator.ts","../src/core/tlv.ts","../src/decorators/dto-schema.util.ts","../src/base/axis-tlv.dto.ts","../src/base/axis-id.dto.ts","../src/base/axis-partial-type.ts","../src/base/axis-response.dto.ts","../src/core/constants.ts","../src/engine/axis-execution-context.ts","../src/utils/axis-logger.ts","../src/engine/axis-chain.executor.ts","../src/security/scopes.ts","../src/security/inline-capsule.ts","../src/sensor/axis-sensor.ts","../src/cce/cce.types.ts","../src/cce/cce-derivation.service.ts","../src/cce/cce-crypto.ts","../src/cce/cce-response.service.ts","../src/cce/cce-witness.observer.ts","../src/cce/cce-pipeline.ts","../src/core/axis-error.ts","../src/engine/intent-builtins.ts","../src/engine/intent-proof-policy.ts","../src/engine/intent.router.ts","../src/engine/sensor-bands.ts","../src/engine/observation/stable-json.ts","../src/engine/observation/observation-queue.codec.ts","../src/engine/observation/observation-hash.ts","../src/engine/observation/truth-scoring.ts","../src/engine/observation/response-observer.ts","../src/core/varint.ts","../src/core/axis-bin.ts","../src/core/signature.ts","../src/codec/ats1.constants.ts","../src/codec/ats1.ts","../src/codec/ats1.passkey.schemas.ts","../src/codec/tlv.encode.ts","../src/codec/axis1.encode.ts","../src/codec/axis1.signing.ts","../src/crypto/b64url.ts","../src/crypto/canonical-json.ts","../src/contract/execution-meter.ts","../src/contract/contract.interface.ts","../src/types/tlv.ts","../src/types/frame.ts","../src/types/packet.ts","../src/security/capabilities.ts","../node_modules/tweetnacl/nacl-fast.js","../src/crypto/proof-verification.service.ts","../src/schemas/body-profile.validator.ts","../src/law/law.types.ts","../src/law/index.ts","../src/risk/index.ts","../src/core/opcodes.ts","../src/core/receipt.ts","../src/core/intent-sensitivity.ts","../src/core/timeouts.ts","../src/core/frame-validator.ts","../src/upload/upload.tokens.ts","../src/upload/disk-upload-file.store.ts","../src/engine/observer-dispatcher.service.ts","../src/engine/registry/observer.registry.ts","../src/engine/registry/sensor.registry.ts","../src/engine/axis-observation.ts","../src/security/axis-sensor-chain.service.ts","../src/timeline/timeline.engine.ts","../src/timeline/timeline.store.ts","../src/utils/axis-tlv-codec.ts","../src/loom/loom.types.ts","../src/loom/loom.engine.ts","../src/idel/idel.compiler.ts","../src/needle/needle.engine.ts","../src/needle/knot.engine.ts","../src/needle/fabric.engine.ts","../src/needle/pattern.engine.ts","../src/sensors/access-profile-resolver.sensor.ts","../src/sensors/body-budget.sensor.ts","../src/sensors/capability-enforcement.sensor.ts","../src/sensors/chunk-hash.sensor.ts","../src/sensors/entropy.sensor.ts","../src/sensors/execution-timeout.sensor.ts","../src/sensors/frame-budget.sensor.ts","../src/sensors/frame-header-sanity.sensor.ts","../src/sensors/header-tlv-limit.sensor.ts","../src/sensors/intent-allowlist.sensor.ts","../src/sensors/intent-registry.sensor.ts","../src/sensors/law-article-presence.sensor.ts","../src/sensors/law-evaluation.sensor.ts","../src/schemas/axis-schemas.ts","../src/sensors/proof-presence.sensor.ts","../src/sensors/protocol-strict.sensor.ts","../src/sensors/receipt-policy.sensor.ts","../src/sensors/risk-gate.sensor.ts","../src/sensors/schema-validation.sensor.ts","../src/sensors/stream-scope.sensor.ts","../src/sensors/tickauth.sensor.ts","../src/sensors/tlv-parse.sensor.ts","../src/sensors/tps.sensor.ts","../src/sensors/varint-hardening.sensor.ts","../src/sensors/index.ts","../src/index.ts"],"sourcesContent":["import \"reflect-metadata\";\n\nimport type { ChainOptions, RegisteredChainConfig } from \"../engine/axis-chain.types\";\n\nexport const CHAIN_METADATA_KEY = \"axis:chain\";\n\nexport function Chain(options: ChainOptions = {}): MethodDecorator {\n return (target: object, propertyKey: string | symbol) => {\n const value: RegisteredChainConfig = {\n enabled: true,\n ...options,\n };\n\n Reflect.defineMetadata(CHAIN_METADATA_KEY, value, target, propertyKey);\n };\n}","import \"reflect-metadata\";\n\nexport const CAPSULE_POLICY_METADATA_KEY = \"axis:capsule:policy\";\n\nexport type CapsuleScopeMode = \"all\" | \"any\";\n\nexport interface CapsulePolicyOptions {\n required?: boolean;\n scopes?: string | string[];\n scopeMode?: CapsuleScopeMode;\n intentBound?: boolean;\n allowCapsuleRef?: boolean;\n}\n\nexport function CapsulePolicy(\n options: CapsulePolicyOptions = {},\n): ClassDecorator & MethodDecorator {\n const normalized = normalizeCapsulePolicyOptions(options);\n\n return ((target: object | Function, propertyKey?: string | symbol) => {\n if (propertyKey !== undefined) {\n Reflect.defineMetadata(\n CAPSULE_POLICY_METADATA_KEY,\n normalized,\n target,\n propertyKey,\n );\n return;\n }\n\n Reflect.defineMetadata(\n CAPSULE_POLICY_METADATA_KEY,\n normalized,\n target as Function,\n );\n }) as ClassDecorator & MethodDecorator;\n}\n\nexport function normalizeCapsulePolicyOptions(\n options: CapsulePolicyOptions = {},\n): CapsulePolicyOptions {\n return {\n required: options.required ?? true,\n scopes: normalizeScopeValue(options.scopes),\n scopeMode: options.scopeMode ?? \"all\",\n intentBound: options.intentBound ?? true,\n allowCapsuleRef: options.allowCapsuleRef ?? false,\n };\n}\n\nexport function mergeCapsulePolicyOptions(\n base?: CapsulePolicyOptions,\n override?: CapsulePolicyOptions,\n): CapsulePolicyOptions | undefined {\n if (!base && !override) {\n return undefined;\n }\n\n const normalizedBase = base ? normalizeCapsulePolicyOptions(base) : undefined;\n const normalizedOverride = override\n ? normalizeCapsulePolicyOptions(override)\n : undefined;\n\n const scopes = [\n ...toScopeList(normalizedBase?.scopes),\n ...toScopeList(normalizedOverride?.scopes),\n ];\n\n return {\n required: normalizedOverride?.required ?? normalizedBase?.required ?? true,\n scopes: normalizeScopeValue(scopes),\n scopeMode:\n normalizedOverride?.scopeMode ?? normalizedBase?.scopeMode ?? \"all\",\n intentBound:\n normalizedOverride?.intentBound ??\n normalizedBase?.intentBound ??\n true,\n allowCapsuleRef:\n normalizedOverride?.allowCapsuleRef ??\n normalizedBase?.allowCapsuleRef ??\n false,\n };\n}\n\nfunction normalizeScopeValue(\n value?: string | string[],\n): string | string[] | undefined {\n const list = toScopeList(value);\n if (list.length === 0) {\n return undefined;\n }\n return list.length === 1 ? list[0] : list;\n}\n\nfunction toScopeList(value?: string | string[]): string[] {\n if (!value) {\n return [];\n }\n\n return Array.from(new Set(Array.isArray(value) ? value : [value])).filter(\n (entry) => entry.trim().length > 0,\n );\n}","import \"reflect-metadata\";\n\nimport type { ExecutionContract } from \"../contract/contract.interface\";\nimport type { ProofKind, SensitivityLevel } from \"../schemas/axis-schemas\";\n\n// ─── Metadata Keys ────────────────────────────────────────────────────────────\n\n/** Metadata key stamped by @Axis on the protocol entry class. */\nexport const AXIS_META_KEY = \"axis:axis\";\n\n/** Metadata key stamped by @AxisStream on a stream protocol entry class. */\nexport const AXIS_STREAM_META_KEY = \"axis:stream\";\n\nexport const SENSITIVITY_METADATA_KEY = \"axis:sensitivity\";\nexport const CONTRACT_METADATA_KEY = \"axis:contract\";\nexport const REQUIRED_PROOF_METADATA_KEY = \"axis:required_proof\";\n\n// ─── Types ────────────────────────────────────────────────────────────────────\n\n/**\n * Extends ProofKind with WITNESS — requires a co-signer witness signature\n * in addition to the standard proof kinds (CAPSULE, PASSPORT, MTLS, JWT).\n */\nexport type RequiredProofKind = ProofKind;\nexport type RequiredProofInput = RequiredProofKind | RequiredProofKind[];\n\nexport interface AxisStreamOptions {\n /** WebSocket path handled by the stream entry. */\n path?: string;\n /** WebSocket subprotocol advertised by the stream entry. */\n protocol?: string;\n}\n\nexport function normalizeRequiredProof(\n proofs: RequiredProofInput | undefined,\n): RequiredProofKind[] | undefined {\n if (proofs === undefined) return undefined;\n\n const normalized = Array.from(\n new Set(Array.isArray(proofs) ? proofs : [proofs]),\n );\n return normalized.length > 0 ? normalized : undefined;\n}\n\nfunction appendRequiredProof(\n target: object | Function,\n propertyKey: string | symbol | undefined,\n proof: RequiredProofKind,\n): void {\n const existing: RequiredProofKind[] =\n propertyKey !== undefined\n ? (Reflect.getMetadata(\n REQUIRED_PROOF_METADATA_KEY,\n target,\n propertyKey,\n ) ?? [])\n : (Reflect.getMetadata(REQUIRED_PROOF_METADATA_KEY, target as Function) ??\n []);\n\n const merged: RequiredProofKind[] = existing.includes(proof)\n ? existing\n : [...existing, proof];\n\n if (propertyKey !== undefined) {\n Reflect.defineMetadata(\n REQUIRED_PROOF_METADATA_KEY,\n merged,\n target,\n propertyKey,\n );\n return;\n }\n\n Reflect.defineMetadata(\n REQUIRED_PROOF_METADATA_KEY,\n merged,\n target as Function,\n );\n}\n\n// ─── @Sensitivity ─────────────────────────────────────────────────────────────\n\n/**\n * Declares the sensitivity tier of an intent.\n *\n * Used by risk gates and audit trails to apply appropriate scrutiny.\n *\n * @example\n * ```ts\n * @Sensitivity('CRITICAL')\n * @Intent('axis.actor_keys.list')\n * async list() { ... }\n * ```\n */\nexport function Sensitivity(\n level: SensitivityLevel,\n): ClassDecorator & MethodDecorator {\n return ((target: object | Function, propertyKey?: string | symbol) => {\n if (propertyKey !== undefined) {\n Reflect.defineMetadata(\n SENSITIVITY_METADATA_KEY,\n level,\n target,\n propertyKey,\n );\n return;\n }\n Reflect.defineMetadata(SENSITIVITY_METADATA_KEY, level, target as Function);\n }) as ClassDecorator & MethodDecorator;\n}\n\n// ─── @Contract ────────────────────────────────────────────────────────────────\n\n/**\n * Declares the execution contract (resource ceiling) for an intent.\n *\n * The execution meter enforces these limits at runtime. Unspecified fields\n * fall back to handler-level or global defaults.\n *\n * @example\n * ```ts\n * @Contract({ maxDbWrites: 5, maxTimeMs: 300 })\n * @Intent('axis.actor_keys.list')\n * async list() { ... }\n * ```\n */\nexport function Contract(\n options: Partial<ExecutionContract>,\n): ClassDecorator & MethodDecorator {\n return ((target: object | Function, propertyKey?: string | symbol) => {\n if (propertyKey !== undefined) {\n Reflect.defineMetadata(\n CONTRACT_METADATA_KEY,\n options,\n target,\n propertyKey,\n );\n return;\n }\n Reflect.defineMetadata(CONTRACT_METADATA_KEY, options, target as Function);\n }) as ClassDecorator & MethodDecorator;\n}\n\n// ─── @RequiredProof ───────────────────────────────────────────────────────────\n\n/**\n * Specifies which proof kinds are accepted to satisfy this intent.\n * At least one of the listed kinds must be present in the request.\n *\n * Use `@Capsule()` or `@Witness()` as ergonomic shorthands for the\n * single-proof case.\n *\n * @example\n * ```ts\n * @RequiredProof(['CAPSULE', 'WITNESS'])\n * @Intent('axis.actor_keys.list')\n * async list() { ... }\n * ```\n */\nexport function RequiredProof(\n proofs: [RequiredProofKind, ...RequiredProofKind[]],\n): ClassDecorator & MethodDecorator {\n return ((target: object | Function, propertyKey?: string | symbol) => {\n if (propertyKey !== undefined) {\n Reflect.defineMetadata(\n REQUIRED_PROOF_METADATA_KEY,\n proofs,\n target,\n propertyKey,\n );\n return;\n }\n Reflect.defineMetadata(\n REQUIRED_PROOF_METADATA_KEY,\n proofs,\n target as Function,\n );\n }) as ClassDecorator & MethodDecorator;\n}\n\n// ─── @Capsule ─────────────────────────────────────────────────────────────────\n\n/**\n * Shorthand for `@RequiredProof(['CAPSULE'])`.\n *\n * Merges with any proof kinds already declared on the target so that\n * combining `@Capsule()` with `@Witness()` behaves identically to\n * `@RequiredProof(['CAPSULE', 'WITNESS'])`.\n *\n * @example\n * ```ts\n * @Capsule()\n * @Intent('axis.actor_keys.get')\n * async get() { ... }\n * ```\n */\nexport function Capsule(): ClassDecorator & MethodDecorator {\n return ((target: object | Function, propertyKey?: string | symbol) => {\n appendRequiredProof(target, propertyKey, \"CAPSULE\");\n }) as ClassDecorator & MethodDecorator;\n}\n\n// ─── @Witness ─────────────────────────────────────────────────────────────────\n\n/**\n * Shorthand for `@RequiredProof(['WITNESS'])`.\n *\n * Declares that the intent requires a co-signer witness signature\n * (maps to `ProofType.WITNESS_SIG` at the protocol layer).\n *\n * Merges with any proof kinds already declared on the target, so\n * `@Capsule()` + `@Witness()` is equivalent to\n * `@RequiredProof(['CAPSULE', 'WITNESS'])`.\n *\n * @example\n * ```ts\n * @Witness()\n * @Sensitivity('CRITICAL')\n * @Intent('axis.actor_keys.list')\n * async list() { ... }\n * ```\n */\nexport function Witness(): ClassDecorator & MethodDecorator {\n return ((target: object | Function, propertyKey?: string | symbol) => {\n appendRequiredProof(target, propertyKey, \"WITNESS\");\n }) as ClassDecorator & MethodDecorator;\n}\n\n// ─── @Axis ───────────────────────────────────────────────────────────────────\n\n/**\n * @Axis — AXIS protocol entry point decorator.\n *\n * Marks a class as the single binary pipeline entry. The decorated class\n * is auto-discovered by `AxisEngineModule` and wired to `POST /axis`.\n * There must be exactly ONE `@Axis()` class in the application.\n *\n * @example\n * ```typescript\n * @Axis()\n * @Injectable()\n * export class AxisEntry implements NestMiddleware { ... }\n * ```\n */\nexport function Axis(): ClassDecorator {\n return (target: Function) => {\n Reflect.defineMetadata(AXIS_META_KEY, { entry: true }, target);\n };\n}\n\n// ─── @AxisStream ─────────────────────────────────────────────────────────────\n\n/**\n * @AxisStream — AXIS stream protocol entry point decorator.\n *\n * Marks a class as the WebSocket stream entry without overloading `@Axis()`,\n * which stays reserved for the HTTP `POST /axis` binary entry.\n *\n * @example\n * ```typescript\n * @AxisStream({ path: '/axis/stream', protocol: 'axis-stream-v1' })\n * @Injectable()\n * export class AxisStreamEntry { ... }\n * ```\n */\nexport function AxisStream(options: AxisStreamOptions = {}): ClassDecorator {\n return (target: Function) => {\n Reflect.defineMetadata(\n AXIS_STREAM_META_KEY,\n {\n entry: true,\n transport: \"stream\",\n role: \"entry\",\n path: options.path,\n protocol: options.protocol,\n },\n target,\n );\n };\n}\n\n// ─── @AxisPublic ──────────────────────────────────────────────────────────────\n\n/**\n * Metadata key stamped on a class or method to mark it as public.\n * Read by HandlerDiscoveryService and injected into SensorInput.metadata.isPublic.\n */\nexport const AXIS_PUBLIC_KEY = \"axis:public\";\n\n/**\n * @AxisPublic — Marks a handler class or individual intent method as public.\n *\n * Public intents bypass signature verification and authentication sensors.\n * Use for discovery/catalog endpoints, health checks, and registration flows.\n *\n * Applied at class level → all intents in the handler are public.\n * Applied at method level → only that intent is public.\n *\n * @example\n * ```typescript\n * @AxisPublic()\n * @Handler('catalog')\n * export class CatalogHandler { ... }\n *\n * // Single public intent inside an authenticated handler:\n * @Handler('axis.auth')\n * export class AuthHandler {\n * @AxisPublic()\n * @Intent('axis.auth.register', { absolute: true, kind: 'action' })\n * async register(...) { ... }\n * }\n * ```\n */\nexport function AxisPublic(): ClassDecorator & MethodDecorator {\n return (\n target: any,\n propertyKey?: string | symbol,\n descriptor?: PropertyDescriptor,\n ) => {\n if (propertyKey !== undefined) {\n Reflect.defineMetadata(AXIS_PUBLIC_KEY, true, target, propertyKey!);\n appendRequiredProof(target, propertyKey, \"NONE\");\n return descriptor;\n }\n Reflect.defineMetadata(AXIS_PUBLIC_KEY, true, target);\n appendRequiredProof(target, undefined, \"NONE\");\n return target;\n };\n}\n\n// ─── @AxisAnonymous ───────────────────────────────────────────────────────────\n\n/**\n * Metadata key stamped on a class or method to mark it as anonymous-accessible.\n * Anonymous intents can be called with an anonymous-session capsule.\n * Read by HandlerDiscoveryService and injected into SensorInput.metadata.isAnonymous.\n */\nexport const AXIS_ANONYMOUS_KEY = \"axis:anonymous\";\n\n// ─── @AxisAuthorized ──────────────────────────────────────────────────────────\n\nexport const AXIS_AUTHORIZED_KEY = \"axis:authorized\";\n\nexport function AxisAuthorized(): ClassDecorator & MethodDecorator {\n return (\n target: any,\n propertyKey?: string | symbol,\n descriptor?: PropertyDescriptor,\n ) => {\n if (propertyKey !== undefined) {\n Reflect.defineMetadata(AXIS_AUTHORIZED_KEY, true, target, propertyKey!);\n appendRequiredProof(target, propertyKey, \"AUTHORIZED\");\n return descriptor;\n }\n Reflect.defineMetadata(AXIS_AUTHORIZED_KEY, true, target);\n appendRequiredProof(target, undefined, \"AUTHORIZED\");\n return target;\n };\n}\n/**\n * @AxisAnonymous — Marks a handler class or individual intent method as\n * accessible to anonymous sessions.\n *\n * Anonymous intents require an anonymous-session capsule (issued via\n * `public.session.anonymous`) but do NOT require full actor authentication.\n * A step above `@AxisPublic` (which needs no capsule at all).\n *\n * Applied at class level → all intents in the handler are anonymous-accessible.\n * Applied at method level → only that intent is anonymous-accessible.\n *\n * @example\n * ```typescript\n * @Handler('catalog')\n * export class CatalogHandler {\n * @AxisAnonymous()\n * @Intent('catalog.list', { absolute: true, kind: 'read' })\n * async list(body: Uint8Array) { ... }\n * }\n * ```\n */\nexport function AxisAnonymous(): ClassDecorator & MethodDecorator {\n return (\n target: any,\n propertyKey?: string | symbol,\n descriptor?: PropertyDescriptor,\n ) => {\n if (propertyKey !== undefined) {\n Reflect.defineMetadata(AXIS_ANONYMOUS_KEY, true, target, propertyKey!);\n appendRequiredProof(target, propertyKey, \"ANONYMOUS\");\n return descriptor;\n }\n Reflect.defineMetadata(AXIS_ANONYMOUS_KEY, true, target);\n appendRequiredProof(target, undefined, \"ANONYMOUS\");\n return target;\n };\n}\n\n// ─── @AxisRateLimit ───────────────────────────────────────────────────────────\n\n/**\n * Metadata key for per-intent rate limit config.\n * Stamped on a method by @AxisRateLimit.\n * Read by HandlerDiscoveryService and consumed by RateLimitSensor at runtime.\n */\nexport const AXIS_RATE_LIMIT_KEY = \"axis:rateLimit\";\n\nexport interface AxisRateLimitConfig {\n /** Maximum requests allowed within the window. */\n max: number;\n /** Sliding window duration in seconds. */\n windowSec: number;\n /**\n * Key strategy or named bucket.\n * e.g. 'ip_fingerprint' | 'actor_capsule' | 'auth' | 'qr-scan'\n */\n key?: string;\n}\n\n/**\n * @AxisRateLimit — Per-intent rate limit configuration.\n *\n * Overrides the handler-level or global default rate limit for a single intent.\n * The config is read by HandlerDiscoveryService and injected into\n * SensorInput.metadata.rateLimit, consumed by RateLimitSensor at runtime.\n *\n * @example\n * ```typescript\n * @AxisRateLimit({ max: 5, windowSec: 60, key: 'ip_fingerprint' })\n * @Intent('axis.auth.login', { absolute: true, kind: 'action' })\n * async login(body: Uint8Array) { ... }\n * ```\n */\nexport function AxisRateLimit(config: AxisRateLimitConfig): MethodDecorator {\n return (\n target: object,\n propertyKey: string | symbol,\n descriptor: PropertyDescriptor,\n ) => {\n Reflect.defineMetadata(AXIS_RATE_LIMIT_KEY, config, target, propertyKey);\n return descriptor;\n };\n}\n","import \"reflect-metadata\";\n\nimport type { AxisIntentSensorBindingInput } from \"./intent.decorator\";\n\nexport const HANDLER_SENSORS_KEY = \"axis:handler:sensors\";\n\n/**\n * @HandlerSensors — Attach sensors that must pass before ANY intent in this\n * handler class executes. Per-intent @IntentSensors still run after these.\n *\n * @example\n * ```ts\n * @Handler('axis.vault')\n * @HandlerSensors([RateLimitSensor, AuditSensor])\n * export class VaultHandler {\n * @Intent('create')\n * async create(body: Uint8Array) { ... }\n *\n * @Intent('delete')\n * @IntentSensors([MfaSensor]) // Runs AFTER handler-level sensors\n * async delete(body: Uint8Array) { ... }\n * }\n * ```\n */\nexport function HandlerSensors(\n sensors: AxisIntentSensorBindingInput[],\n): ClassDecorator {\n return (target: Function) => {\n Reflect.defineMetadata(HANDLER_SENSORS_KEY, sensors, target);\n };\n}\n","import \"reflect-metadata\";\n\nimport type { AxisObserverEvent } from \"../engine/axis-chain.types\";\n\nexport const OBSERVER_METADATA_KEY = \"axis:observer\";\nexport const OBSERVER_BINDINGS_KEY = \"axis:observer:bindings\";\n\nexport type AxisObserverRef = string | Function;\n\nexport interface AxisObserverDefinition {\n name?: string;\n tags?: string[];\n events?: AxisObserverEvent[];\n intents?: string[];\n handlers?: string[];\n}\n\nexport interface AxisObserverBinding {\n refs: AxisObserverRef[];\n tags?: string[];\n events?: AxisObserverEvent[];\n}\n\nexport interface AxisObserverBindingOptions {\n use: AxisObserverRef | AxisObserverRef[];\n tags?: string[];\n events?: AxisObserverEvent[];\n}\n\nexport type AxisObserverBindingInput =\n | AxisObserverDefinition\n | AxisObserverBindingOptions\n | AxisObserverRef\n | AxisObserverRef[];\n\nfunction isBindingOptions(\n value: unknown,\n): value is AxisObserverBindingOptions {\n return !!value && typeof value === \"object\" && \"use\" in value;\n}\n\nfunction isDefinitionOptions(value: unknown): value is AxisObserverDefinition {\n return (\n !!value &&\n typeof value === \"object\" &&\n !Array.isArray(value) &&\n !isBindingOptions(value)\n );\n}\n\nexport function toObserverBinding(\n input?: AxisObserverBindingInput,\n): AxisObserverBinding | null {\n if (!input) return null;\n\n if (isBindingOptions(input)) {\n const refs = Array.isArray(input.use) ? input.use : [input.use];\n return { refs, tags: input.tags, events: input.events };\n }\n\n if (Array.isArray(input)) {\n return { refs: input };\n }\n\n if (typeof input === \"function\" || typeof input === \"string\") {\n return { refs: [input] };\n }\n\n return null;\n}\n\nexport function Observer(\n input?: AxisObserverBindingInput,\n): ClassDecorator & MethodDecorator {\n return ((\n target: object | Function,\n propertyKey?: string | symbol,\n ) => {\n const binding = toObserverBinding(input);\n if (binding) {\n if (propertyKey !== undefined) {\n const existing: AxisObserverBinding[] =\n Reflect.getMetadata(OBSERVER_BINDINGS_KEY, target, propertyKey) || [];\n existing.push(binding);\n Reflect.defineMetadata(\n OBSERVER_BINDINGS_KEY,\n existing,\n target,\n propertyKey,\n );\n return;\n }\n\n const existing: AxisObserverBinding[] =\n Reflect.getMetadata(OBSERVER_BINDINGS_KEY, target as Function) || [];\n existing.push(binding);\n Reflect.defineMetadata(OBSERVER_BINDINGS_KEY, existing, target as Function);\n return;\n }\n\n if (propertyKey !== undefined) {\n throw new Error(\n \"@Observer method usage must reference one or more observer classes or names\",\n );\n }\n\n const definition = isDefinitionOptions(input) ? input : {};\n Reflect.defineMetadata(OBSERVER_METADATA_KEY, definition, target as Function);\n }) as ClassDecorator & MethodDecorator;\n}\n","import 'reflect-metadata';\n\nexport const INTENT_BODY_KEY = 'axis:intent:body';\n\n/**\n * @IntentBody — Auto-decode the raw Uint8Array body before the handler runs.\n *\n * The router reads this metadata and applies the decoder so handlers can\n * receive a parsed payload instead of raw bytes.\n */\nexport function IntentBody(decoder: (buf: Buffer) => any): MethodDecorator {\n return (target: object, propertyKey: string | symbol) => {\n Reflect.defineMetadata(INTENT_BODY_KEY, decoder, target, propertyKey);\n };\n}\n","import \"reflect-metadata\";\n\nimport type { ChainOptions } from \"../engine/axis-chain.types\";\nimport type { SensitivityLevel } from \"../schemas/axis-schemas\";\nimport { INTENT_BODY_KEY } from \"./intent-body.decorator\";\nimport {\n normalizeRequiredProof,\n REQUIRED_PROOF_METADATA_KEY,\n SENSITIVITY_METADATA_KEY,\n type RequiredProofKind,\n} from \"./intent-policy.decorator\";\n\nexport const INTENT_METADATA_KEY = \"axis:intent\";\nexport const INTENT_ROUTES_KEY = \"axis:intent_routes\";\n\n/**\n * CRUD + action classification for an intent.\n */\nexport type IntentKind = \"create\" | \"read\" | \"update\" | \"delete\" | \"action\";\n\n/**\n * A sensor reference declared on an intent.\n * - `string`: resolved from SensorRegistry by sensor name\n * - `Function`: resolved from SensorRegistry by provider class, with DI fallback\n */\nexport type AxisIntentSensorRef = string | Function;\n\nexport type AxisIntentSensorWhen = \"before\" | \"after\" | \"both\";\n\nexport interface AxisIntentSensorBindingOptions {\n /** Sensor ref resolved from registry or DI */\n use: AxisIntentSensorRef;\n /** When the sensor should run relative to handler execution */\n when?: AxisIntentSensorWhen;\n}\n\nexport interface AxisIntentSensorBinding {\n ref: AxisIntentSensorRef;\n when: AxisIntentSensorWhen;\n}\n\nexport type AxisIntentSensorBindingInput =\n | AxisIntentSensorRef\n | AxisIntentSensorBindingOptions;\n\nfunction isIntentSensorBindingOptions(\n value: AxisIntentSensorBindingInput,\n): value is AxisIntentSensorBindingOptions {\n return (\n !!value &&\n typeof value === \"object\" &&\n !Array.isArray(value) &&\n \"use\" in value\n );\n}\n\nexport function toIntentSensorBinding(\n input: AxisIntentSensorBindingInput,\n): AxisIntentSensorBinding {\n if (isIntentSensorBindingOptions(input)) {\n return {\n ref: input.use,\n when: input.when || \"before\",\n };\n }\n\n return {\n ref: input,\n when: \"before\",\n };\n}\n\n/**\n * Shared options for attaching intent-specific sensors.\n * Kept separate so other decorators / route metadata can extend it cleanly.\n */\nexport interface AxisIntentSensorOptions {\n /** Intent-specific sensors resolved before/after the handler executes */\n is?: AxisIntentSensorBindingInput[];\n}\n\n/**\n * Describes a single TLV field expected by an intent.\n * Used by SchemaValidationSensor to enforce field contracts.\n */\nexport interface IntentTlvField {\n /** Human-readable field name (used in error messages) */\n name: string;\n /** TLV tag number */\n tag: number;\n /** Value type for type-specific validation */\n kind: \"utf8\" | \"u64\" | \"bytes\" | \"bytes16\" | \"bool\" | \"obj\" | \"arr\";\n /** If true, sensor denies when this tag is missing */\n required?: boolean;\n /** Maximum byte length of the value */\n maxLen?: number;\n /** Maximum numeric value (string for bigint-safe limits) */\n max?: string;\n /** Which frame section contains this field (default: 'body') */\n scope?: \"header\" | \"body\";\n}\n\nexport interface IntentRoute extends AxisIntentSensorOptions {\n action: string;\n methodName: string | symbol;\n absolute?: boolean;\n frame?: boolean;\n kind?: IntentKind;\n sensitivity?: SensitivityLevel;\n requiredProof?: RequiredProofKind[];\n chain?: boolean | ChainOptions;\n bodyProfile?: \"TLV_MAP\" | \"RAW\" | \"TLV_OBJ\" | \"TLV_ARR\";\n tlv?: IntentTlvField[];\n dto?: Function;\n}\n\nexport interface IntentOptions extends AxisIntentSensorOptions {\n /** Operation classification for this intent */\n kind?: IntentKind;\n /** Risk tier applied to this intent for policy enforcement and audit */\n sensitivity?: SensitivityLevel;\n /** Proof kinds accepted for this intent. Overrides class-level proof defaults. */\n requiredProof?: RequiredProofKind | RequiredProofKind[];\n /** If true, the action is the full intent name (not prefixed with handler name) */\n absolute?: boolean;\n /** If true, register as { handle: fn } for frame-based handlers */\n frame?: boolean;\n /** Enables intent-chain semantics for this intent, optionally with chain defaults */\n chain?: boolean | ChainOptions;\n /**\n * How the body is encoded. Drives TLVParseSensor behavior:\n * - `TLV_MAP` — flat TLV map (canonical ordering enforced)\n * - `RAW` — raw bytes, skip TLV body validation\n * - `TLV_OBJ` — nested TLV object\n * - `TLV_ARR` — TLV array container\n */\n bodyProfile?: \"TLV_MAP\" | \"RAW\" | \"TLV_OBJ\" | \"TLV_ARR\";\n /** Inline TLV field definitions for schema validation */\n tlv?: IntentTlvField[];\n /** DTO class decorated with @TlvField for schema extraction */\n dto?: Function;\n /**\n * Optional inline body decoder. Equivalent to applying @IntentBody(fn)\n * on the same method. Takes the raw body Buffer and returns the decoded\n * payload passed to the handler.\n *\n * When omitted, if `dto` is provided the router builds a default decoder\n * via `buildDtoDecoder(dto)` which also invokes the DTO's optional\n * `static afterDecode()` hook for normalisation.\n */\n decoder?: (buf: Buffer) => any;\n}\n\n/**\n * Marks a method as an intent handler.\n *\n * Stores both per-method metadata (INTENT_METADATA_KEY) and\n * route-collection metadata (INTENT_ROUTES_KEY) for backward compatibility.\n *\n * @example\n * ```ts\n * @Handler('axis.actor_keys')\n * class MyHandler {\n * @Intent('create', { kind: 'create', dto: CreateDto })\n * async create(body: Uint8Array) { ... }\n *\n * @Intent('axis.auth.login', { absolute: true, kind: 'action', dto: LoginDto })\n * async login(body: Uint8Array) { ... }\n * }\n * ```\n */\nexport function Intent(\n action: string,\n options?: IntentOptions,\n): MethodDecorator {\n return (target, propertyKey) => {\n const requiredProof = normalizeRequiredProof(options?.requiredProof);\n const metadata = {\n intent: action,\n ...options,\n ...(requiredProof ? { requiredProof } : {}),\n };\n\n // Per-method metadata (backend-style)\n Reflect.defineMetadata(INTENT_METADATA_KEY, metadata, target, propertyKey);\n\n // Inline decoder: equivalent to @IntentBody, written to the same key so\n // the router resolves it through the existing path.\n if (options?.decoder) {\n Reflect.defineMetadata(\n INTENT_BODY_KEY,\n options.decoder,\n target,\n propertyKey,\n );\n }\n\n if (options?.sensitivity) {\n Reflect.defineMetadata(\n SENSITIVITY_METADATA_KEY,\n options.sensitivity,\n target,\n propertyKey,\n );\n }\n\n if (requiredProof) {\n Reflect.defineMetadata(\n REQUIRED_PROOF_METADATA_KEY,\n requiredProof,\n target,\n propertyKey,\n );\n }\n\n // Route-collection metadata (SDK-style, backward compat)\n const routes: IntentRoute[] =\n Reflect.getMetadata(INTENT_ROUTES_KEY, target.constructor) || [];\n routes.push({\n action,\n methodName: propertyKey,\n absolute: options?.absolute,\n frame: options?.frame,\n kind: options?.kind,\n sensitivity: options?.sensitivity,\n requiredProof,\n chain: options?.chain,\n bodyProfile: options?.bodyProfile,\n tlv: options?.tlv,\n dto: options?.dto,\n is: options?.is,\n });\n Reflect.defineMetadata(INTENT_ROUTES_KEY, routes, target.constructor);\n };\n}\n","import \"reflect-metadata\";\n\nimport { HANDLER_SENSORS_KEY } from \"./handler-sensors.decorator\";\nimport {\n OBSERVER_BINDINGS_KEY,\n type AxisObserverBinding,\n type AxisObserverBindingInput,\n toObserverBinding,\n} from \"./observer.decorator\";\nimport {\n type AxisIntentSensorOptions,\n type AxisIntentSensorBindingInput,\n toIntentSensorBinding,\n} from \"./intent.decorator\";\n\nexport const HANDLER_METADATA_KEY = \"axis:handler\";\n\nexport interface HandlerOptions extends AxisIntentSensorOptions {\n observe?: AxisObserverBindingInput[];\n}\n\n/**\n * Decorator to mark a class as an Axis Handler.\n * Handlers are responsible for processing intents or specific logic\n * for Axis modules.\n */\nexport function Handler(\n intentOrOptions?: string | HandlerOptions,\n options?: HandlerOptions,\n): ClassDecorator {\n return (target: Function) => {\n const intent =\n typeof intentOrOptions === \"string\" ? intentOrOptions : undefined;\n const handlerOptions =\n typeof intentOrOptions === \"string\" ? options : intentOrOptions;\n const sensorBindings = Array.isArray(handlerOptions?.is)\n ? handlerOptions.is.map((input: AxisIntentSensorBindingInput) =>\n toIntentSensorBinding(input),\n )\n : [];\n const observerBindings: AxisObserverBinding[] = Array.isArray(\n handlerOptions?.observe,\n )\n ? handlerOptions.observe\n .map((input) => toObserverBinding(input))\n .filter((binding): binding is AxisObserverBinding => !!binding)\n : [];\n\n Reflect.defineMetadata(\n HANDLER_METADATA_KEY,\n { intent, ...(handlerOptions || {}) },\n target,\n );\n\n if (sensorBindings.length > 0) {\n const existing =\n Reflect.getMetadata(HANDLER_SENSORS_KEY, target) || [];\n Reflect.defineMetadata(\n HANDLER_SENSORS_KEY,\n [...existing, ...sensorBindings],\n target,\n );\n }\n\n if (observerBindings.length > 0) {\n const existing: AxisObserverBinding[] =\n Reflect.getMetadata(OBSERVER_BINDINGS_KEY, target) || [];\n Reflect.defineMetadata(\n OBSERVER_BINDINGS_KEY,\n [...existing, ...observerBindings],\n target,\n );\n }\n };\n}\n","import 'reflect-metadata';\n\nimport type { AxisIntentSensorBindingInput } from './intent.decorator';\n\nexport const INTENT_SENSORS_KEY = 'axis:intent:sensors';\n\n/**\n * @IntentSensors — Attach additional sensors that must pass before the\n * annotated intent handler executes.\n */\nexport function IntentSensors(\n sensors: AxisIntentSensorBindingInput[],\n): MethodDecorator {\n return (target: object, propertyKey: string | symbol) => {\n Reflect.defineMetadata(INTENT_SENSORS_KEY, sensors, target, propertyKey);\n };\n}\n","import \"reflect-metadata\";\n\nimport { RequiredProofKind } from \"./intent-policy.decorator\";\n\nexport const SENSOR_METADATA_KEY = \"axis:sensor\";\n\nexport type SensorPhase = \"PRE_DECODE\" | \"POST_DECODE\";\n\nexport interface SensorOptions {\n /** Explicit phase override. If omitted, auto-derived from order at bootstrap. */\n phase?: SensorPhase;\n proofKind?: RequiredProofKind | RequiredProofKind[];\n excludeProofKind?: RequiredProofKind | RequiredProofKind[];\n}\n\n/**\n * Marks a class as an AXIS sensor for auto-registration.\n *\n * The SensorDiscoveryService finds all @Sensor() classes at bootstrap\n * and registers them with the SensorRegistry automatically.\n *\n * Sensors still declare `name`, `order`, `supports()`, and `run()` as\n * instance members. The decorator replaces manual `registry.register(this)`\n * in `onModuleInit()`.\n *\n * Phase can be set explicitly via options or auto-derived from order:\n * < PRE_DECODE_BOUNDARY (40) = PRE_DECODE, >= 40 = POST_DECODE.\n */\nexport function Sensor(options?: SensorOptions): ClassDecorator {\n return (target) => {\n Reflect.defineMetadata(SENSOR_METADATA_KEY, options ?? true, target);\n };\n}\n","import 'reflect-metadata';\n\nexport const TLV_FIELDS_KEY = 'axis:tlv:fields';\nexport const TLV_VALIDATORS_KEY = 'axis:tlv:validators';\nconst textDecoder = new TextDecoder();\n\nexport type TlvFieldKind =\n | 'utf8'\n | 'u64'\n | 'bytes'\n | 'bytes16'\n | 'bool'\n | 'obj'\n | 'arr';\n\nexport interface TlvFieldOptions {\n /** Value type for type-specific validation */\n kind: TlvFieldKind;\n /** If true, sensor denies when this tag is missing */\n required?: boolean;\n /** Maximum byte length of the value */\n maxLen?: number;\n /** Maximum numeric value (string for bigint-safe limits) */\n max?: string;\n /** Which frame section contains this field (default: 'body') */\n scope?: 'header' | 'body';\n}\n\n/** Stored per-property metadata from @TlvField */\nexport interface TlvFieldMeta {\n /** Property name on the DTO class */\n property: string;\n /** TLV tag number */\n tag: number;\n /** Field options */\n options: TlvFieldOptions;\n}\n\n/**\n * Custom validation function applied via @TlvValidate.\n * Receives the raw TLV value bytes and the property name.\n * Return null/undefined to pass, or a string error message to deny.\n */\nexport type TlvValidatorFn = (\n value: Uint8Array,\n property: string,\n) => string | null | undefined;\n\n/** Stored per-property validator from @TlvValidate */\nexport interface TlvValidatorMeta {\n property: string;\n tag: number;\n validators: TlvValidatorFn[];\n}\n\nfunction assertUniqueFieldMetadata(\n existing: TlvFieldMeta[],\n property: string,\n tag: number,\n): void {\n const duplicateProperty = existing.find((item) => item.property === property);\n if (duplicateProperty) {\n throw new Error(`Duplicate @TlvField for property ${property}`);\n }\n\n const duplicateTag = existing.find((item) => item.tag === tag);\n if (duplicateTag) {\n throw new Error(\n `Duplicate @TlvField tag ${tag} for ${property}; already used by ${duplicateTag.property}`,\n );\n }\n}\n\n/**\n * @TlvField — Declare a TLV field contract on a DTO property.\n *\n * Applied to properties of a class passed to `@Intent({ dto: MyDto })`.\n * The schema is extracted at bootstrap and forwarded to SchemaValidationSensor.\n *\n * @example\n * ```typescript\n * class LoginDto {\n * @TlvField(100, { kind: 'utf8', required: true, maxLen: 256 })\n * email: string;\n *\n * @TlvField(105, { kind: 'bytes16', required: true })\n * deviceId: Buffer;\n *\n * @TlvField(103, { kind: 'bool' })\n * remember?: boolean;\n * }\n * ```\n */\nexport function TlvField(\n tag: number,\n options: TlvFieldOptions,\n): PropertyDecorator {\n return (target: object, propertyKey: string | symbol) => {\n const existing: TlvFieldMeta[] =\n Reflect.getOwnMetadata(TLV_FIELDS_KEY, target.constructor) || [];\n\n const property = String(propertyKey);\n assertUniqueFieldMetadata(existing, property, tag);\n\n existing.push({\n property,\n tag,\n options,\n });\n\n Reflect.defineMetadata(TLV_FIELDS_KEY, existing, target.constructor);\n };\n}\n\n/**\n * @TlvValidate — Attach custom validation logic to a TLV field.\n *\n * Runs after standard type/size checks. The validator receives raw bytes\n * and must return null (pass) or an error string (deny).\n *\n * Multiple @TlvValidate decorators can be stacked on the same property.\n */\nexport function TlvValidate(validator: TlvValidatorFn): PropertyDecorator {\n return (target: object, propertyKey: string | symbol) => {\n const existing: TlvValidatorMeta[] =\n Reflect.getOwnMetadata(TLV_VALIDATORS_KEY, target.constructor) || [];\n\n const prop = String(propertyKey);\n let entry = existing.find((e) => e.property === prop);\n\n if (!entry) {\n entry = { property: prop, tag: 0, validators: [] };\n existing.push(entry);\n }\n\n entry.validators.push(validator);\n\n Reflect.defineMetadata(TLV_VALIDATORS_KEY, existing, target.constructor);\n };\n}\n\n// ─── Built-in Validators (composable with @TlvValidate) ───\n\n/**\n * @TlvUtf8Pattern — Validate a UTF-8 field against a regex.\n */\nexport function TlvUtf8Pattern(\n pattern: RegExp,\n message?: string,\n): PropertyDecorator {\n const matcher = new RegExp(pattern.source, pattern.flags);\n return TlvValidate((val, prop) => {\n const str = textDecoder.decode(val);\n matcher.lastIndex = 0;\n return matcher.test(str)\n ? null\n : message || `${prop}: failed pattern check`;\n });\n}\n\n/**\n * @TlvMinLen — Minimum byte length for a field value.\n */\nexport function TlvMinLen(min: number, message?: string): PropertyDecorator {\n return TlvValidate((val, prop) => {\n return val.length >= min\n ? null\n : message || `${prop}: too short (${val.length} < ${min})`;\n });\n}\n\n/**\n * @TlvEnum — UTF-8 field must be one of the listed values.\n */\nexport function TlvEnum(\n allowed: string[],\n message?: string,\n): PropertyDecorator {\n const set = new Set(allowed);\n return TlvValidate((val, prop) => {\n const str = textDecoder.decode(val);\n return set.has(str)\n ? null\n : message || `${prop}: must be one of [${allowed.join(', ')}]`;\n });\n}\n\n/**\n * @TlvRange — Numeric u64 field must be within [min, max].\n */\nexport function TlvRange(\n min: bigint,\n max: bigint,\n message?: string,\n): PropertyDecorator {\n return TlvValidate((val, prop) => {\n if (val.length !== 8) return `${prop}: u64 must be 8 bytes`;\n let n = 0n;\n for (const b of val) n = (n << 8n) | BigInt(b);\n if (n < min || n > max) {\n return message || `${prop}: value ${n} out of range [${min}, ${max}]`;\n }\n return null;\n });\n}\n","export {\n TLV, encodeTLVs, decodeTLVs, decodeTLVsList, decodeObject, decodeArray,\n} from '@nextera.one/axis-protocol';\n","import \"reflect-metadata\";\n\nimport { AxisTlvDto } from \"../base/axis-tlv.dto\";\nimport type { IntentTlvField } from \"./intent.decorator\";\nimport {\n TLV_FIELDS_KEY,\n TLV_VALIDATORS_KEY,\n TlvFieldMeta,\n TlvValidatorFn,\n TlvValidatorMeta,\n} from \"./tlv-field.decorator\";\nimport { decodeTLVs } from \"../core/tlv\";\n\n/** Extracted schema from a DTO class — fields + optional validators */\nexport interface DtoSchema {\n fields: IntentTlvField[];\n validators: Map<number, TlvValidatorFn[]>;\n}\n\n/**\n * Extracts TLV field definitions and validators from a DTO class\n * decorated with @TlvField and @TlvValidate.\n */\nexport function extractDtoSchema(dto: Function): DtoSchema {\n if (typeof dto !== \"function\") {\n throw new Error(\n `extractDtoSchema expected a class constructor but received ${typeof dto} (${String(dto)}) — ` +\n `did you pass a plain object or instance to @Intent({ dto }) instead of a class?`,\n );\n }\n\n const fieldMetas: TlvFieldMeta[] =\n Reflect.getMetadata(TLV_FIELDS_KEY, dto) || [];\n\n if (fieldMetas.length === 0) {\n throw new Error(\n `DTO class ${dto.name || \"<anonymous>\"} has no @TlvField decorators — nothing to validate. ` +\n `Make sure the class extends AxisTlvDto and its fields are annotated with @TlvField(tag, { kind }).`,\n );\n }\n\n const tagByProp = new Map<string, number>();\n const fields: IntentTlvField[] = fieldMetas.map((m) => {\n tagByProp.set(m.property, m.tag);\n return {\n name: m.property,\n tag: m.tag,\n kind: m.options.kind,\n required: m.options.required,\n maxLen: m.options.maxLen,\n max: m.options.max,\n scope: m.options.scope,\n };\n });\n\n const validatorMetas: TlvValidatorMeta[] =\n Reflect.getMetadata(TLV_VALIDATORS_KEY, dto) || [];\n\n const validators = new Map<number, TlvValidatorFn[]>();\n for (const vm of validatorMetas) {\n const tag = tagByProp.get(vm.property);\n if (tag === undefined) {\n throw new Error(\n `@TlvValidate on ${dto.name}.${vm.property} but no @TlvField found for that property`,\n );\n }\n vm.tag = tag;\n validators.set(tag, vm.validators);\n }\n\n return { fields, validators };\n}\n\n/**\n * Builds a decoder function for a DTO class.\n *\n * The returned function takes raw TLV body bytes and returns a plain object\n * with property names as keys and decoded values matching the DTO shape.\n *\n * Value decoding by kind:\n * - utf8 → string\n * - u64 → bigint\n * - bytes / bytes16 → Uint8Array\n * - bool → boolean (0x00 = false, anything else = true)\n * - obj → JSON.parse of utf8\n * - arr → JSON.parse of utf8\n */\nexport function buildDtoDecoder(\n dto: Function,\n): (bodyBytes: Buffer) => Record<string, any> {\n if (typeof dto !== \"function\") {\n throw new Error(\n `buildDtoDecoder expected a class constructor but received ${typeof dto} (${String(dto)}) — ` +\n `did you pass a plain object or instance to @Intent({ dto }) instead of a class?`,\n );\n }\n\n const fieldMetas: TlvFieldMeta[] =\n Reflect.getMetadata(TLV_FIELDS_KEY, dto) || [];\n\n if (fieldMetas.length === 0) {\n throw new Error(\n `DTO class ${dto.name || \"<anonymous>\"} has no @TlvField decorators — cannot build decoder. ` +\n `Make sure the class extends AxisTlvDto and its fields are annotated with @TlvField(tag, { kind }).`,\n );\n }\n\n const tagMap = new Map<number, { property: string; kind: string }>();\n for (const m of fieldMetas) {\n tagMap.set(m.tag, { property: m.property, kind: m.options.kind });\n }\n\n const dtoClass = dto as (typeof AxisTlvDto & Function);\n const afterDecode =\n typeof dtoClass.afterDecode === \"function\"\n ? dtoClass.afterDecode.bind(dtoClass)\n : undefined;\n\n return (bodyBytes: Buffer): Record<string, any> => {\n const tlvMap = decodeTLVs(new Uint8Array(bodyBytes));\n const result: Record<string, any> = {};\n\n for (const [tag, raw] of tlvMap) {\n const meta = tagMap.get(tag);\n if (!meta) continue;\n\n switch (meta.kind) {\n case \"utf8\":\n result[meta.property] = new TextDecoder().decode(raw);\n break;\n case \"u64\": {\n let n = 0n;\n for (let i = 0; i < raw.length; i++) {\n n = (n << 8n) | BigInt(raw[i]);\n }\n result[meta.property] = n;\n break;\n }\n case \"bytes\":\n case \"bytes16\":\n result[meta.property] = raw;\n break;\n case \"bool\":\n result[meta.property] = raw.length > 0 && raw[0] !== 0;\n break;\n case \"obj\":\n case \"arr\":\n result[meta.property] = JSON.parse(new TextDecoder().decode(raw));\n break;\n default:\n result[meta.property] = raw;\n }\n }\n\n afterDecode?.(result);\n\n return result;\n };\n}\n","/**\n * AxisTlvDto — Base class for all TLV-decoded DTO classes.\n *\n * Any DTO decorated with @TlvField that is passed to @Intent({ dto })\n * should extend this class. This gives the CRUD handler interface\n * a type-safe union: `Uint8Array | AxisTlvDto`.\n *\n * Subclasses may override `afterDecode()` to normalize decoded payloads\n * without needing a custom decoder for every intent.\n */\nexport abstract class AxisTlvDto {\n static afterDecode(_dto: Record<string, any>): void {\n // Default no-op hook for subclasses.\n }\n}\n","import { TlvField, TlvMinLen } from '../decorators/tlv-field.decorator';\nimport { AxisTlvDto } from './axis-tlv.dto';\n\nexport class AxisIdDto extends AxisTlvDto {\n @TlvField(1, { kind: 'utf8', required: true, maxLen: 128 })\n @TlvMinLen(1, 'id must not be empty')\n id!: string;\n}\n","import 'reflect-metadata';\n\nimport {\n TLV_FIELDS_KEY,\n TLV_VALIDATORS_KEY,\n TlvFieldMeta,\n TlvValidatorMeta,\n} from '../decorators/tlv-field.decorator';\nimport { AxisTlvDto } from './axis-tlv.dto';\n\n/**\n * AxisPartialType — Creates a DTO class where all TLV fields are optional.\n *\n * Copies TLV metadata (`axis:tlv:fields` + `axis:tlv:validators`)\n * and sets `required: false` on every field.\n *\n * TLV naturally supports partial payloads — only fields present in the\n * binary body get decoded. This utility makes the schema/sensor layer\n * aware that missing fields are acceptable for update operations.\n *\n * @example\n * ```typescript\n * export class UpdateBlocklistDto extends AxisPartialType(CreateBlocklistDto) {}\n * ```\n */\nexport function AxisPartialType<T extends new (...args: any[]) => AxisTlvDto>(\n BaseDto: T,\n): new (...args: any[]) => Partial<InstanceType<T>> & AxisTlvDto {\n class PartialDto extends (BaseDto as any) {}\n\n const fields: TlvFieldMeta[] =\n Reflect.getOwnMetadata(TLV_FIELDS_KEY, BaseDto) || [];\n\n const partialFields: TlvFieldMeta[] = fields.map((f) => ({\n property: f.property,\n tag: f.tag,\n options: { ...f.options, required: false },\n }));\n\n Reflect.defineMetadata(TLV_FIELDS_KEY, partialFields, PartialDto);\n\n const validators: TlvValidatorMeta[] =\n Reflect.getOwnMetadata(TLV_VALIDATORS_KEY, BaseDto) || [];\n\n if (validators.length > 0) {\n Reflect.defineMetadata(TLV_VALIDATORS_KEY, [...validators], PartialDto);\n }\n\n Object.defineProperty(PartialDto, 'name', {\n value: `Partial${BaseDto.name}`,\n });\n\n return PartialDto as any;\n}\n","import { TlvField } from '../decorators/tlv-field.decorator';\nimport { AxisTlvDto } from './axis-tlv.dto';\n\n/**\n * Reserved TLV body tags for server-generated response fields.\n *\n * Tags 1–10 are reserved for system/audit fields in response bodies.\n * Entity-specific fields start at tag 100+.\n */\nexport const RESPONSE_TAG_ID = 1;\nexport const RESPONSE_TAG_CREATED_AT = 2;\nexport const RESPONSE_TAG_UPDATED_AT = 3;\nexport const RESPONSE_TAG_CREATED_BY = 4;\nexport const RESPONSE_TAG_UPDATED_BY = 5;\n\n/**\n * AxisResponseDto — Base class for outbound TLV response bodies.\n *\n * Server-generated audit fields that the backend appends to every\n * entity response. These are NEVER sent by the client — they flow\n * server → client only.\n *\n * Timestamps are u64 Unix milliseconds (same as TLV_TS in headers).\n */\nexport abstract class AxisResponseDto extends AxisTlvDto {\n @TlvField(RESPONSE_TAG_ID, { kind: 'utf8' })\n id?: string;\n\n @TlvField(RESPONSE_TAG_CREATED_AT, { kind: 'u64' })\n created_at?: bigint;\n\n @TlvField(RESPONSE_TAG_UPDATED_AT, { kind: 'u64' })\n updated_at?: bigint;\n\n @TlvField(RESPONSE_TAG_CREATED_BY, { kind: 'utf8' })\n created_by?: string;\n\n @TlvField(RESPONSE_TAG_UPDATED_BY, { kind: 'utf8' })\n updated_by?: string;\n}\n","export {\n AXIS_MAGIC,\n AXIS_VERSION,\n MAX_HDR_LEN,\n MAX_BODY_LEN,\n MAX_SIG_LEN,\n MAX_FRAME_LEN,\n FLAG_BODY_TLV,\n FLAG_CHAIN_REQ,\n FLAG_HAS_WITNESS,\n TLV_PID,\n TLV_TS,\n TLV_INTENT,\n TLV_ACTOR_ID,\n TLV_PROOF_TYPE,\n TLV_PROOF_REF,\n TLV_NONCE,\n TLV_AUD,\n TLV_REALM,\n TLV_NODE,\n TLV_TRACE_ID,\n TLV_KID,\n TLV_RID,\n TLV_OK,\n TLV_EFFECT,\n TLV_ERROR_CODE,\n TLV_ERROR_MSG,\n TLV_PREV_HASH,\n TLV_RECEIPT_HASH,\n TLV_NODE_KID,\n TLV_NODE_CERT_HASH,\n TLV_LOOM_PRESENCE_ID,\n TLV_LOOM_WRIT,\n TLV_LOOM_THREAD_HASH,\n TLV_UPLOAD_ID,\n TLV_INDEX,\n TLV_OFFSET,\n TLV_SHA256_CHUNK,\n TLV_CAPSULE,\n TLV_BODY_OBJ,\n TLV_BODY_ARR,\n NCERT_NODE_ID,\n NCERT_KID,\n NCERT_ALG,\n NCERT_PUB,\n NCERT_NBF,\n NCERT_EXP,\n NCERT_SCOPE,\n NCERT_ISSUER_KID,\n NCERT_PAYLOAD,\n NCERT_SIG,\n PROOF_NONE,\n PROOF_CAPSULE,\n PROOF_JWT,\n PROOF_MTLS,\n PROOF_LOOM,\n PROOF_WITNESS,\n ProofType,\n BodyProfile,\n ERR_INVALID_PACKET,\n ERR_BAD_SIGNATURE,\n ERR_REPLAY_DETECTED,\n ERR_CONTRACT_VIOLATION,\n} from '@nextera.one/axis-protocol';\n\nexport abstract class AxisMediaTypes {\n static readonly BINARY = 'application/axis-bin';\n static readonly OCTET_STREAM = 'application/octet-stream';\n static readonly LEGACY_BINARY = 'application/x-axis';\n\n static readonly VALID_AXIS_CONTENT_TYPES = [\n AxisMediaTypes.BINARY,\n AxisMediaTypes.OCTET_STREAM,\n AxisMediaTypes.LEGACY_BINARY,\n ] as const;\n\n static normalize(value?: string | null): string | undefined {\n if (!value) return undefined;\n return value.split(';', 1)[0].trim().toLowerCase();\n }\n\n static isAxisContentType(value?: string | null): boolean {\n const normalized = AxisMediaTypes.normalize(value);\n return (\n !!normalized &&\n AxisMediaTypes.VALID_AXIS_CONTENT_TYPES.some(\n (contentType) => contentType === normalized,\n )\n );\n }\n}\n","import type { AxisFrame } from \"../core/axis-bin\";\n\nimport type { AxisCapsuleRef, AxisChainEnvelope, AxisChainStep } from \"./axis-chain.types\";\n\nexport const AXIS_EXECUTION_CONTEXT_KEY = Symbol.for(\"axis.executionContext\");\n\nexport interface AxisExecutionContext {\n metaIntent?: \"INTENT.EXEC\" | \"CHAIN.EXEC\";\n actorId?: string;\n inlineCapsule?: Record<string, unknown>;\n capsuleRef?: AxisCapsuleRef;\n chainEnvelope?: AxisChainEnvelope;\n chainStep?: AxisChainStep;\n}\n\ntype FrameLike = Partial<AxisFrame> & {\n [AXIS_EXECUTION_CONTEXT_KEY]?: AxisExecutionContext;\n};\n\nexport function getAxisExecutionContext(\n frame?: Partial<AxisFrame>,\n): AxisExecutionContext | undefined {\n return (frame as FrameLike | undefined)?.[AXIS_EXECUTION_CONTEXT_KEY];\n}\n\nexport function withAxisExecutionContext<T extends object>(\n target: T,\n context: AxisExecutionContext,\n): T {\n Object.defineProperty(target, AXIS_EXECUTION_CONTEXT_KEY, {\n value: context,\n writable: true,\n configurable: true,\n enumerable: false,\n });\n\n return target;\n}\n\nexport function mergeAxisExecutionContext(\n base?: AxisExecutionContext,\n override?: AxisExecutionContext,\n): AxisExecutionContext | undefined {\n if (!base && !override) {\n return undefined;\n }\n\n return {\n ...base,\n ...override,\n capsuleRef: {\n ...(base?.capsuleRef || {}),\n ...(override?.capsuleRef || {}),\n },\n };\n}","export interface AxisLogger {\n debug(message: string): void;\n log(message: string): void;\n warn(message: string): void;\n error(message: string): void;\n}\n\nfunction write(\n method: \"debug\" | \"log\" | \"warn\" | \"error\",\n scope: string,\n message: string,\n): void {\n const consoleMethod = console[method] ?? console.log;\n consoleMethod.call(console, `[${scope}] ${message}`);\n}\n\nexport function createAxisLogger(scope: string): AxisLogger {\n return {\n debug: (message) => write(\"debug\", scope, message),\n log: (message) => write(\"log\", scope, message),\n warn: (message) => write(\"warn\", scope, message),\n error: (message) => write(\"error\", scope, message),\n };\n}\n","import { createHash } from \"crypto\";\n\nimport type { AxisFrame } from \"../core/axis-bin\";\nimport { FLAG_CHAIN_REQ, TLV_ACTOR_ID, TLV_CAPSULE, TLV_INTENT, TLV_TRACE_ID } from \"../core/constants\";\nimport type { AxisObserverBinding } from \"../decorators/observer.decorator\";\nimport type {\n AxisChainEnvelope,\n AxisChainResult,\n AxisChainStatus,\n AxisChainStep,\n AxisChainStepResult,\n AxisChainStepStatus,\n AxisExecutionMode,\n} from \"./axis-chain.types\";\nimport {\n getAxisExecutionContext,\n mergeAxisExecutionContext,\n withAxisExecutionContext,\n} from \"./axis-execution-context\";\nimport { ObserverDispatcherService } from \"./observer-dispatcher.service\";\nimport { AxisEffect, IntentRouter } from \"./intent.router\";\nimport { createAxisLogger } from \"../utils/axis-logger\";\n\nexport interface AxisChainExecutionOptions {\n actorId?: string;\n baseFrame?: Partial<AxisFrame>;\n}\n\nexport class AxisChainExecutor {\n private readonly logger = createAxisLogger(AxisChainExecutor.name);\n private readonly encoder = new TextEncoder();\n private readonly decoder = new TextDecoder();\n\n constructor(\n private readonly router: IntentRouter,\n private readonly observerDispatcher?: ObserverDispatcherService,\n ) {}\n\n async execute(\n envelope: AxisChainEnvelope,\n options: AxisChainExecutionOptions = {},\n ): Promise<AxisChainResult> {\n this.validateEnvelope(envelope);\n\n const startedAt = Date.now();\n const results = new Map<string, AxisChainStepResult>();\n const bindings = this.collectChainBindings(envelope);\n\n await this.dispatch(bindings, {\n event: \"chain.received\",\n timestamp: startedAt,\n chainId: envelope.chainId,\n envelope,\n observerTags: envelope.observerTags,\n capsule: envelope.capsule,\n keyExchange: envelope.keyExchange,\n });\n\n await this.dispatch(bindings, {\n event: \"chain.admitted\",\n timestamp: Date.now(),\n chainId: envelope.chainId,\n envelope,\n observerTags: envelope.observerTags,\n capsule: envelope.capsule,\n keyExchange: envelope.keyExchange,\n });\n\n const stepsById = new Map(envelope.steps.map((step) => [step.stepId, step]));\n const pending = new Set(stepsById.keys());\n\n while (pending.size > 0) {\n const ready = Array.from(pending)\n .map((stepId) => stepsById.get(stepId)!)\n .filter((step) => this.canRun(step, results));\n\n if (ready.length === 0) {\n this.markUnresolvedSteps(\n pending,\n stepsById,\n results,\n \"BLOCKED\",\n \"UNRESOLVED_DEPENDENCIES\",\n );\n break;\n }\n\n if (envelope.mode === \"parallel\") {\n const waveResults = await Promise.all(\n ready.map((step) => this.executeStep(step, envelope, results, options)),\n );\n for (const result of waveResults) {\n results.set(result.stepId, result);\n pending.delete(result.stepId);\n }\n } else {\n for (const step of ready) {\n const result = await this.executeStep(step, envelope, results, options);\n results.set(result.stepId, result);\n pending.delete(result.stepId);\n\n if (\n result.status === \"FAILED\" &&\n (envelope.mode === \"strict\" || envelope.mode === \"atomic\")\n ) {\n this.markUnresolvedSteps(\n pending,\n stepsById,\n results,\n \"SKIPPED\",\n \"CHAIN_HALTED\",\n );\n pending.clear();\n break;\n }\n }\n }\n\n this.blockStepsWithFailedDependencies(pending, stepsById, results);\n }\n\n const finishedAt = Date.now();\n const orderedResults = envelope.steps.map((step) => results.get(step.stepId)!);\n const summary = this.buildSummary(envelope.mode, orderedResults, startedAt, finishedAt, envelope.chainId);\n\n await this.dispatch(bindings, {\n event:\n summary.status === \"SUCCEEDED\"\n ? \"chain.completed\"\n : summary.status === \"PARTIAL\"\n ? \"chain.partial\"\n : \"chain.failed\",\n timestamp: finishedAt,\n chainId: envelope.chainId,\n envelope,\n result: summary,\n observerTags: envelope.observerTags,\n capsule: envelope.capsule,\n keyExchange: envelope.keyExchange,\n });\n\n return summary;\n }\n\n private async executeStep(\n step: AxisChainStep,\n envelope: AxisChainEnvelope,\n results: Map<string, AxisChainStepResult>,\n options: AxisChainExecutionOptions,\n ): Promise<AxisChainStepResult> {\n const stepBindings = this.router.getObservers(step.intent);\n const startedAt = Date.now();\n const input = this.resolveStepInput(step.input, results);\n\n await this.dispatch(stepBindings, {\n event: \"step.started\",\n timestamp: startedAt,\n chainId: envelope.chainId,\n stepId: step.stepId,\n handler: step.handler,\n intent: step.intent,\n envelope,\n step,\n observerTags: [...(envelope.observerTags || []), ...(step.observerTags || [])],\n capsule: step.capsuleScope\n ? {\n ...envelope.capsule,\n scope: step.capsuleScope,\n }\n : envelope.capsule,\n keyExchange: step.keyExchange || envelope.keyExchange,\n });\n\n try {\n const frame = this.buildFrame(step, envelope, input, options);\n const effect = await this.router.route(frame);\n const finishedAt = Date.now();\n const output = this.decodeOutput(effect.body);\n const proofHash = this.computeProofHash(envelope.chainId, step.stepId, effect, output);\n\n const result: AxisChainStepResult = {\n stepId: step.stepId,\n intent: step.intent,\n status: \"SUCCEEDED\",\n effect: effect.effect,\n output,\n dependsOn: step.dependsOn,\n startedAt,\n finishedAt,\n proofHash,\n observerTags: [...(envelope.observerTags || []), ...(step.observerTags || [])],\n metadata: effect.metadata,\n };\n\n await this.dispatch(stepBindings, {\n event: \"handler.completed\",\n timestamp: finishedAt,\n chainId: envelope.chainId,\n stepId: step.stepId,\n handler: step.handler,\n intent: step.intent,\n effect,\n envelope,\n step,\n result,\n observerTags: result.observerTags,\n capsule: envelope.capsule,\n keyExchange: step.keyExchange || envelope.keyExchange,\n });\n\n await this.dispatch(stepBindings, {\n event: \"proof.recorded\",\n timestamp: finishedAt,\n chainId: envelope.chainId,\n stepId: step.stepId,\n handler: step.handler,\n intent: step.intent,\n envelope,\n step,\n result,\n observerTags: result.observerTags,\n capsule: envelope.capsule,\n keyExchange: step.keyExchange || envelope.keyExchange,\n metadata: { proofHash },\n });\n\n await this.dispatch(stepBindings, {\n event: \"step.completed\",\n timestamp: finishedAt,\n chainId: envelope.chainId,\n stepId: step.stepId,\n handler: step.handler,\n intent: step.intent,\n effect,\n envelope,\n step,\n result,\n observerTags: result.observerTags,\n capsule: envelope.capsule,\n keyExchange: step.keyExchange || envelope.keyExchange,\n });\n\n return result;\n } catch (error: any) {\n const finishedAt = Date.now();\n const result: AxisChainStepResult = {\n stepId: step.stepId,\n intent: step.intent,\n status: \"FAILED\",\n error: error.message,\n dependsOn: step.dependsOn,\n startedAt,\n finishedAt,\n observerTags: [...(envelope.observerTags || []), ...(step.observerTags || [])],\n };\n\n this.logger.warn(\n `Chain ${envelope.chainId} step ${step.stepId} failed: ${error.message}`,\n );\n\n await this.dispatch(stepBindings, {\n event: \"step.failed\",\n timestamp: finishedAt,\n chainId: envelope.chainId,\n stepId: step.stepId,\n handler: step.handler,\n intent: step.intent,\n error: error.message,\n envelope,\n step,\n result,\n observerTags: result.observerTags,\n capsule: envelope.capsule,\n keyExchange: step.keyExchange || envelope.keyExchange,\n });\n\n return result;\n }\n }\n\n private buildFrame(\n step: AxisChainStep,\n envelope: AxisChainEnvelope,\n input: unknown,\n options: AxisChainExecutionOptions,\n ): AxisFrame {\n const baseContext = getAxisExecutionContext(options.baseFrame);\n const baseHeaders = new Map(options.baseFrame?.headers || []);\n baseHeaders.set(TLV_INTENT, this.encoder.encode(step.intent));\n baseHeaders.set(TLV_TRACE_ID, this.encoder.encode(envelope.chainId));\n\n const capsuleId = envelope.capsule?.capsuleId;\n if (capsuleId) {\n baseHeaders.set(TLV_CAPSULE, this.encoder.encode(capsuleId));\n }\n\n if (options.actorId) {\n baseHeaders.set(TLV_ACTOR_ID, this.encoder.encode(options.actorId));\n }\n\n return withAxisExecutionContext(\n {\n flags: (options.baseFrame?.flags || 0) | FLAG_CHAIN_REQ,\n headers: baseHeaders,\n body: this.serializeInput(input),\n sig: options.baseFrame?.sig || new Uint8Array(0),\n },\n mergeAxisExecutionContext(baseContext, {\n metaIntent: \"CHAIN.EXEC\",\n actorId: options.actorId || baseContext?.actorId,\n capsuleRef: step.capsuleScope\n ? {\n ...(envelope.capsule || {}),\n scope: step.capsuleScope,\n }\n : envelope.capsule,\n chainEnvelope: envelope,\n chainStep: step,\n }) || {},\n );\n }\n\n private validateEnvelope(envelope: AxisChainEnvelope): void {\n if (!envelope.chainId) {\n throw new Error(\"CHAIN_ID_REQUIRED\");\n }\n\n if (!envelope.steps || envelope.steps.length === 0) {\n throw new Error(\"CHAIN_STEPS_REQUIRED\");\n }\n\n const seen = new Set<string>();\n for (const step of envelope.steps) {\n if (!step.stepId) {\n throw new Error(\"CHAIN_STEP_ID_REQUIRED\");\n }\n\n if (!step.intent) {\n throw new Error(`CHAIN_STEP_INTENT_REQUIRED:${step.stepId}`);\n }\n\n if (seen.has(step.stepId)) {\n throw new Error(`CHAIN_STEP_DUPLICATE:${step.stepId}`);\n }\n seen.add(step.stepId);\n }\n\n for (const step of envelope.steps) {\n for (const dependency of step.dependsOn || []) {\n if (!seen.has(dependency)) {\n throw new Error(\n `CHAIN_STEP_DEPENDENCY_UNKNOWN:${step.stepId}:${dependency}`,\n );\n }\n }\n }\n }\n\n private canRun(\n step: AxisChainStep,\n results: Map<string, AxisChainStepResult>,\n ): boolean {\n return (step.dependsOn || []).every((dependency) => results.has(dependency));\n }\n\n private blockStepsWithFailedDependencies(\n pending: Set<string>,\n stepsById: Map<string, AxisChainStep>,\n results: Map<string, AxisChainStepResult>,\n ): void {\n for (const stepId of Array.from(pending)) {\n const step = stepsById.get(stepId);\n if (!step || !step.dependsOn || step.dependsOn.length === 0) continue;\n\n const dependencyResults = step.dependsOn\n .map((dependency) => results.get(dependency))\n .filter(Boolean) as AxisChainStepResult[];\n\n if (dependencyResults.length !== step.dependsOn.length) continue;\n\n const hasFailure = dependencyResults.some(\n (dependency) => dependency.status !== \"SUCCEEDED\",\n );\n if (!hasFailure) continue;\n\n results.set(step.stepId, {\n stepId: step.stepId,\n intent: step.intent,\n status: \"BLOCKED\",\n error: \"DEPENDENCY_FAILED\",\n dependsOn: step.dependsOn,\n startedAt: Date.now(),\n finishedAt: Date.now(),\n observerTags: step.observerTags,\n });\n pending.delete(step.stepId);\n }\n }\n\n private markUnresolvedSteps(\n pending: Set<string>,\n stepsById: Map<string, AxisChainStep>,\n results: Map<string, AxisChainStepResult>,\n status: AxisChainStepStatus,\n error: string,\n ): void {\n for (const stepId of pending) {\n const step = stepsById.get(stepId);\n if (!step) continue;\n results.set(stepId, {\n stepId,\n intent: step.intent,\n status,\n error,\n dependsOn: step.dependsOn,\n startedAt: Date.now(),\n finishedAt: Date.now(),\n observerTags: step.observerTags,\n });\n }\n }\n\n private buildSummary(\n mode: AxisExecutionMode,\n results: AxisChainStepResult[],\n startedAt: number,\n finishedAt: number,\n chainId: string,\n ): AxisChainResult {\n const completedSteps = results.filter((result) => result.status === \"SUCCEEDED\").length;\n const failedSteps = results.filter((result) => result.status === \"FAILED\").length;\n const blockedSteps = results.filter((result) => result.status === \"BLOCKED\").length;\n const skippedSteps = results.filter((result) => result.status === \"SKIPPED\").length;\n\n let status: AxisChainStatus = \"SUCCEEDED\";\n if (failedSteps > 0 || blockedSteps > 0 || skippedSteps > 0) {\n status =\n mode === \"best_effort\" || mode === \"parallel\"\n ? completedSteps > 0\n ? \"PARTIAL\"\n : \"FAILED\"\n : \"FAILED\";\n }\n\n return {\n chainId,\n mode,\n status,\n completedSteps,\n failedSteps,\n blockedSteps,\n skippedSteps,\n startedAt,\n finishedAt,\n results,\n rollback:\n mode === \"atomic\"\n ? {\n supported: false,\n attempted: false,\n reason: \"AXIS handlers do not expose rollback semantics yet\",\n }\n : undefined,\n };\n }\n\n private resolveStepInput(\n value: unknown,\n results: Map<string, AxisChainStepResult>,\n ): unknown {\n if (typeof value === \"string\") {\n if (!value.startsWith(\"$\")) return value;\n return this.lookupReference(value.slice(1), results);\n }\n\n if (Array.isArray(value)) {\n return value.map((entry) => this.resolveStepInput(entry, results));\n }\n\n if (value && typeof value === \"object\") {\n return Object.fromEntries(\n Object.entries(value).map(([key, entry]) => [\n key,\n this.resolveStepInput(entry, results),\n ]),\n );\n }\n\n return value;\n }\n\n private lookupReference(\n path: string,\n results: Map<string, AxisChainStepResult>,\n ): unknown {\n const [stepId, ...segments] = path.split(\".\");\n const result = results.get(stepId);\n if (!result) return undefined;\n\n let current: unknown = result;\n for (const segment of segments) {\n if (current === undefined || current === null) return undefined;\n if (typeof current !== \"object\") return undefined;\n current = (current as Record<string, unknown>)[segment];\n }\n return current;\n }\n\n private serializeInput(input: unknown): Uint8Array {\n if (input instanceof Uint8Array) return input;\n if (typeof input === \"string\") return this.encoder.encode(input);\n if (input === undefined) return new Uint8Array(0);\n return this.encoder.encode(JSON.stringify(input));\n }\n\n private decodeOutput(body?: Uint8Array): unknown {\n if (!body || body.length === 0) return undefined;\n\n try {\n const text = this.decoder.decode(body);\n try {\n return JSON.parse(text);\n } catch {\n return /^[\\x20-\\x7E\\s]+$/.test(text) ? text : body;\n }\n } catch {\n return body;\n }\n }\n\n private computeProofHash(\n chainId: string,\n stepId: string,\n effect: AxisEffect,\n output: unknown,\n ): string {\n const hash = createHash(\"sha256\");\n hash.update(chainId);\n hash.update(\":\");\n hash.update(stepId);\n hash.update(\":\");\n hash.update(effect.effect);\n hash.update(\":\");\n hash.update(JSON.stringify(output ?? null));\n return hash.digest(\"hex\");\n }\n\n private collectChainBindings(\n envelope: AxisChainEnvelope,\n ): AxisObserverBinding[] {\n const uniqueBindings = new Map<string, AxisObserverBinding>();\n\n for (const step of envelope.steps) {\n for (const binding of this.router.getObservers(step.intent)) {\n const key = binding.refs.map((ref) => String(ref)).sort().join(\"|\");\n if (!uniqueBindings.has(key)) {\n uniqueBindings.set(key, binding);\n }\n }\n }\n\n return Array.from(uniqueBindings.values());\n }\n\n private async dispatch(\n bindings: AxisObserverBinding[],\n context: Parameters<ObserverDispatcherService[\"dispatch\"]>[1],\n ): Promise<void> {\n if (!this.observerDispatcher) return;\n await this.observerDispatcher.dispatch(bindings, context);\n }\n}\n","/**\n * AXIS Scope Utilities\n * Validates capsule scopes against required resource access.\n * Prevents BOLA (Broken Object Level Authorization) attacks.\n */\n\n/**\n * Check if a capsule has the required scope.\n * Scopes use colon notation: resource:id or resource:*\n *\n * Examples:\n * - wallet:w_123\n * - merchant:m_456\n * - payment:*\n */\nexport function hasScope(scopes: string[], required: string): boolean {\n if (!Array.isArray(scopes) || scopes.length === 0) {\n return false;\n }\n\n // Exact match\n if (scopes.includes(required)) {\n return true;\n }\n\n // Wildcard match: resource:* matches resource:anything\n const [resource, id] = required.split(':');\n if (resource && id) {\n const wildcard = `${resource}:*`;\n if (scopes.includes(wildcard)) {\n return true;\n }\n }\n\n return false;\n}\n\n/**\n * Extract resource type and ID from scope.\n */\nexport function parseScope(\n scope: string,\n): { resource: string; id: string } | null {\n const parts = scope.split(':');\n if (parts.length !== 2) return null;\n return { resource: parts[0], id: parts[1] };\n}\n\n/**\n * Check if actor can access a specific resource based on capsule scopes.\n */\nexport function canAccessResource(\n scopes: string[],\n resourceType: string,\n resourceId: string,\n): boolean {\n const required = `${resourceType}:${resourceId}`;\n return hasScope(scopes, required);\n}\n","import { hasScope } from \"./scopes\";\n\nexport interface InlineCapsuleClaims {\n id?: string;\n actorId?: string;\n intents?: string[];\n issuedAt?: bigint;\n expiresAt?: bigint;\n realm?: string;\n node?: string;\n scopes?: string[];\n raw: Record<string, unknown>;\n}\n\nexport function normalizeInlineCapsule(\n input: unknown,\n): InlineCapsuleClaims | null {\n if (!input || typeof input !== \"object\" || Array.isArray(input)) {\n return null;\n }\n\n const raw = input as Record<string, unknown>;\n const scopes = normalizeStringList(raw.scopes ?? raw.scope);\n\n return {\n id: normalizeScalar(raw.id),\n actorId: normalizeScalar(raw.actorId),\n intents: normalizeStringList(raw.intents),\n issuedAt: normalizeTimestamp(raw.issuedAt ?? raw.iat),\n expiresAt: normalizeTimestamp(raw.expiresAt ?? raw.exp),\n realm: normalizeScalar(raw.realm),\n node: normalizeScalar(raw.node),\n scopes,\n raw,\n };\n}\n\nexport function inlineCapsuleAllowsIntent(\n capsule: InlineCapsuleClaims,\n intent: string,\n): boolean {\n if (!capsule.intents || capsule.intents.length === 0) {\n return false;\n }\n\n for (const pattern of capsule.intents) {\n if (pattern === \"*\" || pattern === intent) {\n return true;\n }\n\n if (pattern.endsWith(\".*\")) {\n const prefix = pattern.slice(0, -1);\n if (intent.startsWith(prefix)) {\n return true;\n }\n }\n }\n\n return false;\n}\n\nexport function isInlineCapsuleExpired(\n capsule: InlineCapsuleClaims,\n clockSkewMs = 30000,\n): boolean {\n if (capsule.expiresAt === undefined) {\n return false;\n }\n\n return BigInt(Date.now()) > capsule.expiresAt + BigInt(clockSkewMs);\n}\n\nexport function resolvePolicyScopes(\n scopes: string[],\n context: {\n body?: unknown;\n intent: string;\n actorId?: string;\n chainId?: string;\n stepId?: string;\n },\n): string[] {\n return scopes.map((scope) =>\n scope.replace(/\\$\\{([^}]+)\\}/g, (_match, expression: string) => {\n const resolved = resolveTemplateExpression(expression.trim(), context);\n if (resolved === undefined || resolved === null || resolved === \"\") {\n throw new Error(`CAPSULE_SCOPE_TEMPLATE_UNRESOLVED:${expression}`);\n }\n return String(resolved);\n }),\n );\n}\n\nexport function inlineCapsuleSatisfiesScopes(\n capsule: InlineCapsuleClaims,\n requiredScopes: string[],\n mode: \"all\" | \"any\" = \"all\",\n): boolean {\n if (!capsule.scopes || capsule.scopes.length === 0) {\n return false;\n }\n\n if (mode === \"any\") {\n return requiredScopes.some((scope) => hasScope(capsule.scopes!, scope));\n }\n\n return requiredScopes.every((scope) => hasScope(capsule.scopes!, scope));\n}\n\nfunction resolveTemplateExpression(\n expression: string,\n context: {\n body?: unknown;\n intent: string;\n actorId?: string;\n chainId?: string;\n stepId?: string;\n },\n): unknown {\n if (expression === \"intent\") {\n return context.intent;\n }\n\n if (expression === \"actorId\") {\n return context.actorId;\n }\n\n if (expression === \"chainId\") {\n return context.chainId;\n }\n\n if (expression === \"stepId\") {\n return context.stepId;\n }\n\n if (expression.startsWith(\"body.\")) {\n return getNestedValue(context.body, expression.slice(5));\n }\n\n return undefined;\n}\n\nfunction getNestedValue(value: unknown, path: string): unknown {\n if (!value || typeof value !== \"object\") {\n return undefined;\n }\n\n return path.split(\".\").reduce<unknown>((current, segment) => {\n if (!current || typeof current !== \"object\") {\n return undefined;\n }\n return (current as Record<string, unknown>)[segment];\n }, value);\n}\n\nfunction normalizeScalar(value: unknown): string | undefined {\n if (typeof value === \"string\") {\n return value;\n }\n\n if (value instanceof Uint8Array) {\n return Buffer.from(value).toString(\"hex\");\n }\n\n return undefined;\n}\n\nfunction normalizeStringList(value: unknown): string[] | undefined {\n if (!value) {\n return undefined;\n }\n\n const list = Array.isArray(value) ? value : [value];\n const normalized = list\n .map((entry) => (typeof entry === \"string\" ? entry : undefined))\n .filter((entry): entry is string => !!entry && entry.trim().length > 0);\n\n return normalized.length > 0 ? Array.from(new Set(normalized)) : undefined;\n}\n\nfunction normalizeTimestamp(value: unknown): bigint | undefined {\n if (typeof value === \"bigint\") {\n return value;\n }\n\n if (typeof value === \"number\" && Number.isFinite(value)) {\n return BigInt(Math.trunc(value));\n }\n\n if (typeof value === \"string\" && value.trim().length > 0) {\n try {\n return BigInt(value);\n } catch {\n return undefined;\n }\n }\n\n return undefined;\n}","import type { AxisObservedContext } from \"../types/axis-frame.types\";\n\n/**\n * Sensor Phase Metadata\n *\n * Metadata describing which phase(s) a sensor executes in.\n * Used for validation and optimization.\n *\n * @interface SensorPhaseMetadata\n */\nexport interface SensorPhaseMetadata {\n /** Execution phase: pre-decode (middleware) or post-decode (controller) */\n phase: \"PRE_DECODE\" | \"POST_DECODE\";\n\n /** Other sensors that must run before this one */\n dependencies?: string[];\n\n /** Whether this sensor can perform async I/O */\n asyncOk?: boolean;\n\n /** Whether this sensor can use cryptographic operations */\n cryptoOk?: boolean;\n\n /** Human-readable description of sensor purpose */\n description?: string;\n}\n\n/**\n * AXIS Sensor Interface\n *\n * Core interface for all security sensors in the AXIS pipeline.\n */\nexport interface AxisSensor {\n readonly name: string;\n readonly order?: number; // Lower runs first\n /** Execution phase hint */\n phase?: SensorPhaseMetadata | \"PRE_DECODE\" | \"POST_DECODE\";\n /**\n * Synchronous applicability gate.\n *\n * Return `false` when the sensor does not apply to this input. The chain will\n * skip the sensor without recording a deny decision. Do not perform policy\n * decisions or async I/O here; put those in `run()`.\n */\n supports?(input: SensorInput): boolean;\n /**\n * Executes the sensor's actual check after `supports()` has passed.\n *\n * Return a SensorDecision to allow, deny, throttle, flag, or tighten the\n * request. This method may perform async work according to the sensor phase\n * and metadata.\n */\n run(input: SensorInput): Promise<SensorDecision>;\n}\n\n// Optional lifecycle hook for frameworks that support module initialization.\nexport interface AxisSensorInit extends AxisSensor {\n onModuleInit?(): void | Promise<void>;\n}\n\n/**\n * Sensors that run before frame decoding/deserialization.\n * They should be fast, avoid I/O, and fail fast on malformed traffic.\n */\nexport interface AxisPreSensor extends AxisSensor {\n phase: \"PRE_DECODE\";\n}\n\n/**\n * Sensors that run after a frame is fully decoded and parsed.\n * They may use full context (intent, actor, proofs) and can perform I/O.\n */\nexport interface AxisPostSensor extends AxisSensor {\n phase: \"POST_DECODE\";\n}\n\n/**\n * Sensor Input\n *\n * Represents the structured data passed to a security sensor for evaluation.\n * Depending on the execution phase, different fields may be populated.\n *\n * **Flow:**\n * - **Phase 1 (Pre-decode):** `rawBytes`, `ip`, `path`, and `peek` are typically available.\n * - **Phase 2/3 (Post-decode):** `intent`, `contentLength`, and `metadata` are populated after frame parsing.\n *\n * @interface SensorInput\n */\nexport interface SensorInput {\n /** The full raw binary frame from the wire (if available) */\n rawBytes?: Buffer | Uint8Array;\n\n /** The AXIS intent string extracted from the frame header (e.g., 'system.info') */\n intent?: string;\n\n /** IPv4/IPv6 address of the edge client */\n ip?: string;\n\n /** The HTTP or transport path being accessed */\n path?: string;\n\n /** Total size of the frame body in bytes */\n contentLength?: number;\n\n /** A small slice of the beginning of the body for early pattern matching */\n peek?: Uint8Array;\n\n /** Geolocation country code (if resolved by upstream middleware) */\n country?: string;\n\n /** Client identifier from the transport layer (e.g., Capsule ID or Socket ID) */\n clientId?: string;\n\n /** Whether the request is coming via a WebSocket connection */\n isWs?: boolean;\n\n /** Extensible metadata for cross-sensor communication */\n metadata?: Record<string, any>;\n\n /** Actor ID from frame or request */\n actorId?: string;\n\n /** Operation code */\n opcode?: string;\n\n /** Audience field */\n aud?: string;\n\n /** Observed context from frame parsing */\n observed?: AxisObservedContext;\n\n /** Parsed frame body */\n frameBody?: any;\n\n /** Device identifier */\n deviceId?: string;\n\n /** Session identifier */\n sessionId?: string;\n\n /** Parsed packet data */\n packet?: Record<string, any>;\n\n /** Dynamic field access for sensor-specific data */\n [key: string]: any;\n}\n\nexport enum Decision {\n ALLOW = \"ALLOW\",\n DENY = \"DENY\",\n THROTTLE = \"THROTTLE\",\n FLAG = \"FLAG\",\n}\n/**\n * Sensor Decision\n *\n * Represents the outcome of an individual sensor's evaluation.\n * Supports two formats for backward compatibility:\n *\n * 1. Modern format (preferred): Uses decision/allow/riskScore/reasons\n * 2. Legacy format: Uses action/code/reason (deprecated, will be removed)\n */\nexport type SensorDecision =\n // Modern format (preferred)\n | {\n /** Final decision outcome (optional for backward compatibility) */\n decision?: Decision;\n /** Whether the request may continue immediately */\n allow: boolean;\n /** Risk score from 0–100 (0 = safe, 100 = blocked) */\n riskScore: number;\n /** Human & machine traceable reasons */\n reasons: string[];\n /** Machine-readable error or control code */\n code?: string;\n /** Throttle hint (only relevant for THROTTLE) */\n retryAfterMs?: number;\n /** Optional delta applied to rolling risk/anomaly state */\n scoreDelta?: number;\n /** Extra signals for audit, observability, forensics */\n tags?: Record<string, any>;\n /** Optional capsule / verification metadata */\n meta?: any;\n /** Optional constraint tightening instructions */\n tighten?: {\n expSecondsMax?: number;\n constraintsPatch?: Record<string, any>;\n };\n }\n // Legacy action-based format (deprecated)\n | { action: \"ALLOW\"; meta?: any }\n | {\n action: \"DENY\";\n code: string;\n reason?: string;\n retryAfterMs?: number;\n meta?: any;\n }\n | { action: \"THROTTLE\"; retryAfterMs: number; meta?: any }\n | { action: \"FLAG\"; scoreDelta: number; reasons: string[]; meta?: any };\n\nexport type SensorMinifiedDecision = {\n allow: boolean;\n riskScore: number;\n reasons: string[];\n tags?: Record<string, any>;\n meta?: any;\n tighten?: { expSecondsMax?: number; constraintsPatch?: Record<string, any> };\n /** Legacy fields for compatibility */\n retryAfterMs?: number;\n};\n\n/**\n * Helper to normalize SensorDecision (handles both legacy and modern formats)\n */\nexport function normalizeSensorDecision(\n sensorDecision: SensorDecision,\n): SensorMinifiedDecision {\n // Check if it's a legacy action-based format\n if (\"action\" in sensorDecision) {\n // Convert legacy format to modern\n switch (sensorDecision.action) {\n case \"ALLOW\":\n return {\n allow: true,\n riskScore: 0,\n reasons: [],\n meta: sensorDecision.meta,\n };\n case \"DENY\":\n return {\n allow: false,\n riskScore: 100,\n reasons: [sensorDecision.code, sensorDecision.reason].filter(\n Boolean,\n ) as string[],\n meta: sensorDecision.meta,\n retryAfterMs: sensorDecision.retryAfterMs,\n };\n case \"THROTTLE\":\n return {\n allow: false,\n riskScore: 50,\n reasons: [\"RATE_LIMIT\"],\n retryAfterMs: sensorDecision.retryAfterMs,\n meta: sensorDecision.meta,\n };\n case \"FLAG\":\n return {\n allow: true,\n riskScore: sensorDecision.scoreDelta,\n reasons: sensorDecision.reasons,\n meta: sensorDecision.meta,\n };\n }\n }\n\n // Modern format - already has the required fields\n return {\n allow: sensorDecision.allow,\n riskScore: sensorDecision.riskScore,\n reasons: sensorDecision.reasons,\n tags: sensorDecision.tags,\n meta: sensorDecision.meta,\n tighten: sensorDecision.tighten,\n retryAfterMs: sensorDecision.retryAfterMs,\n };\n}\n\n/**\n * Helper factories for creating SensorDecision objects\n */\nexport const SensorDecisions = {\n allow(meta?: any, tags?: Record<string, any>): SensorDecision {\n return {\n decision: Decision.ALLOW,\n allow: true,\n riskScore: 0,\n reasons: [],\n tags,\n meta,\n };\n },\n\n deny(code: string, reason?: string, meta?: any): SensorDecision {\n return {\n decision: Decision.DENY,\n allow: false,\n riskScore: 100,\n code,\n reasons: [code, reason].filter(Boolean) as string[],\n meta,\n };\n },\n\n throttle(retryAfterMs: number, meta?: any): SensorDecision {\n return {\n decision: Decision.THROTTLE,\n allow: false,\n riskScore: 50,\n retryAfterMs,\n code: \"RATE_LIMIT\",\n reasons: [\"RATE_LIMIT\"],\n meta,\n };\n },\n\n flag(scoreDelta: number, reasons: string[], meta?: any): SensorDecision {\n return {\n decision: Decision.FLAG,\n allow: true,\n riskScore: scoreDelta,\n scoreDelta,\n reasons,\n meta,\n };\n },\n};\n","/**\n * Capsule-Carried Encryption (CCE) Types — v1\n *\n * Defines the core types for the CCE protocol where:\n * - TickAuth issues capsules (authority)\n * - AXIS verifies capsules, decrypts payloads, derives execution context\n * - Payload confidentiality uses hybrid encryption (AES-GCM + AXIS public key)\n */\n\n// ============================================================================\n// CCE Protocol Constants\n// ============================================================================\n\nexport const CCE_PROTOCOL_VERSION = \"cce-v1\" as const;\n\n/** Derivation context prefixes for HKDF */\nexport const CCE_DERIVATION = {\n /** Request execution context */\n REQUEST: \"axis:cce:req:v1\",\n /** Response execution context */\n RESPONSE: \"axis:cce:resp:v1\",\n /** Witness binding context */\n WITNESS: \"axis:cce:witness:v1\",\n} as const;\n\n/** Supported encryption algorithms */\nexport type CceAlgorithm = \"AES-256-GCM\";\n/** Supported key encapsulation algorithms */\nexport type CceKemAlgorithm = \"X25519\" | \"RSA-OAEP-256\";\n/** Supported KDF algorithms */\nexport type CceKdfAlgorithm = \"HKDF-SHA256\";\n\nexport const CCE_AES_KEY_BYTES = 32; // 256-bit AES key\nexport const CCE_IV_BYTES = 12; // 96-bit GCM nonce\nexport const CCE_TAG_BYTES = 16; // 128-bit GCM auth tag\nexport const CCE_NONCE_BYTES = 32; // 256-bit request/response nonce\n\n// ============================================================================\n// CCE Capsule Claims (extends TickAuth capsule for AXIS binding)\n// ============================================================================\n\n/**\n * CCE-specific claims that extend the TickAuth capsule.\n * These claims bind the capsule to a specific AXIS audience and intent.\n */\nexport interface CceCapsuleClaims {\n /** Capsule identifier (content-addressed) */\n capsule_id: string;\n /** Protocol version */\n ver: typeof CCE_PROTOCOL_VERSION;\n /** Subject / actor identity */\n sub: string;\n /** Client key identifier */\n kid: string;\n /** Bound intent */\n intent: string;\n /** AXIS audience (service identity) */\n aud: string;\n /** TPS window start (Unix ms or TPS index) */\n tps_from: number;\n /** TPS window end (Unix ms or TPS index) */\n tps_to: number;\n /** Capsule nonce (hex, from challenge) */\n capsule_nonce: string;\n /** Reference to originating challenge */\n challenge_id: string;\n /** Content hash of the validated proof used to issue this capsule */\n proof_hash?: string;\n /** Policy hash (hex) — Digital Fabric Law binding */\n policy_hash?: string;\n /** Issued-at timestamp (Unix seconds) */\n iat: number;\n /** Expires-at timestamp (Unix seconds) */\n exp: number;\n /** Capsule usage mode */\n mode: \"SINGLE_USE\" | \"SESSION\";\n /** Scope capabilities */\n scope?: string[];\n /** Constraints */\n constraints?: CceConstraints;\n /** TickAuth issuer signature over claims */\n issuer_sig: CceSignature;\n}\n\nexport interface CceConstraints {\n max_payload_bytes?: number;\n ip_allow?: string[];\n device_allow?: string[];\n country_allow?: string[];\n}\n\nexport interface CceSignature {\n alg: \"EdDSA\" | \"ES256\";\n kid: string;\n value: string; // base64url or hex\n}\n\n// ============================================================================\n// CCE Request Envelope\n// ============================================================================\n\n/**\n * The encrypted request envelope sent from Client → AXIS.\n *\n * The client:\n * 1. Generates ephemeral AES-256 key\n * 2. Encrypts payload with AES-256-GCM\n * 3. Encrypts AES key with AXIS public key (X25519 or RSA-OAEP)\n * 4. Signs the envelope with client private key\n * 5. Attaches capsule\n */\nexport interface CceRequestEnvelope {\n /** Protocol version */\n ver: typeof CCE_PROTOCOL_VERSION;\n /** Unique request identifier */\n request_id: string;\n /** Correlation identifier (for request/response binding) */\n correlation_id: string;\n /** Client key identifier */\n client_kid: string;\n /** The capsule claims (signed by TickAuth) */\n capsule: CceCapsuleClaims;\n /** Encrypted transport key (AXIS public key encrypted) */\n encrypted_key: CceEncryptedKey;\n /** Encrypted payload */\n encrypted_payload: CceEncryptedPayload;\n /** Request nonce (hex, 32 bytes) */\n request_nonce: string;\n /** Client signature over canonical envelope */\n client_sig: CceSignature;\n /** Content type of the plaintext payload */\n content_type: string;\n /** Algorithm descriptors */\n algorithms: CceAlgorithmDescriptor;\n /** Additional authenticated data descriptor */\n aad_descriptor?: string;\n}\n\n/**\n * Encrypted symmetric key wrapped by AXIS public key.\n */\nexport interface CceEncryptedKey {\n /** Key encapsulation algorithm */\n alg: CceKemAlgorithm;\n /** AXIS key identifier used for encapsulation */\n axis_kid: string;\n /** Encrypted key bytes (base64url) */\n ciphertext: string;\n /** Ephemeral public key (for X25519 ECDH, base64url) */\n ephemeral_pk?: string;\n}\n\n/**\n * Encrypted payload with AEAD metadata.\n */\nexport interface CceEncryptedPayload {\n /** Encryption algorithm */\n alg: CceAlgorithm;\n /** Initialization vector / nonce (base64url, 12 bytes) */\n iv: string;\n /** Ciphertext (base64url) */\n ciphertext: string;\n /** Authentication tag (base64url, 16 bytes) */\n tag: string;\n}\n\n/**\n * Algorithm descriptor for the envelope.\n */\nexport interface CceAlgorithmDescriptor {\n /** Key encapsulation */\n kem: CceKemAlgorithm;\n /** Symmetric encryption */\n enc: CceAlgorithm;\n /** Key derivation (for execution context) */\n kdf: CceKdfAlgorithm;\n /** Signature algorithm */\n sig: \"EdDSA\" | \"ES256\";\n}\n\n// ============================================================================\n// CCE Response Envelope\n// ============================================================================\n\n/**\n * The encrypted response envelope sent from AXIS → Client.\n */\nexport interface CceResponseEnvelope {\n /** Protocol version */\n ver: typeof CCE_PROTOCOL_VERSION;\n /** Response identifier */\n response_id: string;\n /** Request identifier (binding) */\n request_id: string;\n /** Correlation identifier */\n correlation_id: string;\n /** Capsule identifier of the originating request */\n capsule_id: string;\n /** Encrypted transport key (Client public key encrypted) */\n encrypted_key: CceEncryptedKey;\n /** Encrypted response payload */\n encrypted_payload: CceEncryptedPayload;\n /** Response nonce (hex, 32 bytes) */\n response_nonce: string;\n /** AXIS signature over canonical response */\n axis_sig: CceSignature;\n /** Witness reference */\n witness_ref?: string;\n /** Algorithm descriptors */\n algorithms: CceAlgorithmDescriptor;\n /** Response status (plaintext, allowed on error) */\n status: CceResponseStatus;\n}\n\nexport type CceResponseStatus =\n | \"SUCCESS\"\n | \"DENIED\"\n | \"PARTIAL\"\n | \"FAILED\"\n | \"ERROR\";\n\n// ============================================================================\n// CCE Execution Context (derived inside AXIS)\n// ============================================================================\n\n/**\n * Execution context derived from capsule claims + AXIS local secret.\n * Proves that the request was not only decrypted but legally executable.\n */\nexport interface CceExecutionContext {\n /** Derived execution key (used for witness binding, never exposed) */\n execution_key_hash: string;\n /** Request identifier */\n request_id: string;\n /** Capsule identifier */\n capsule_id: string;\n /** Subject identity */\n sub: string;\n /** Client key identifier */\n kid: string;\n /** Intent */\n intent: string;\n /** Audience */\n aud: string;\n /** TPS window */\n tps_from: number;\n tps_to: number;\n /** Policy hash (if bound) */\n policy_hash?: string;\n /** Timestamp of context derivation */\n derived_at: number;\n /** Whether this context is valid */\n valid: boolean;\n}\n\n// ============================================================================\n// CCE Witness Record\n// ============================================================================\n\n/**\n * Witness record for the CCE request/response lifecycle.\n */\nexport interface CceWitnessRecord {\n /** Witness identifier */\n witness_id: string;\n /** Request identifier */\n request_id: string;\n /** Capsule identifier */\n capsule_id: string;\n /** Subject identity */\n sub: string;\n /** Intent */\n intent: string;\n /** Audience */\n aud: string;\n /** TPS window */\n tps_from: number;\n tps_to: number;\n /** Timestamp */\n timestamp: number;\n\n /** Verification results */\n verification: {\n client_sig: boolean;\n capsule_sig: boolean;\n tps_valid: boolean;\n audience_match: boolean;\n intent_match: boolean;\n replay_clean: boolean;\n nonce_unique: boolean;\n decryption_ok: boolean;\n };\n\n /** Handler execution result */\n execution: {\n status: CceResponseStatus;\n handler_duration_ms: number;\n effect?: string;\n };\n\n /** Response encryption result */\n response_encrypted: boolean;\n\n /** Execution context hash (proves legal execution) */\n execution_context_hash: string;\n\n /** Payload hash (redacted, never raw content) */\n request_payload_hash?: string;\n response_payload_hash?: string;\n}\n\n// ============================================================================\n// CCE Error Codes\n// ============================================================================\n\nexport const CCE_ERROR = {\n // Envelope errors\n INVALID_ENVELOPE: \"CCE_INVALID_ENVELOPE\",\n UNSUPPORTED_VERSION: \"CCE_UNSUPPORTED_VERSION\",\n MISSING_CAPSULE: \"CCE_MISSING_CAPSULE\",\n MISSING_ENCRYPTED_KEY: \"CCE_MISSING_ENCRYPTED_KEY\",\n\n // Signature errors\n CLIENT_SIG_INVALID: \"CCE_CLIENT_SIG_INVALID\",\n CLIENT_KEY_NOT_FOUND: \"CCE_CLIENT_KEY_NOT_FOUND\",\n\n // Capsule errors\n CAPSULE_SIG_INVALID: \"CCE_CAPSULE_SIG_INVALID\",\n CAPSULE_EXPIRED: \"CCE_CAPSULE_EXPIRED\",\n CAPSULE_NOT_YET_VALID: \"CCE_CAPSULE_NOT_YET_VALID\",\n CAPSULE_REVOKED: \"CCE_CAPSULE_REVOKED\",\n CAPSULE_CONSUMED: \"CCE_CAPSULE_CONSUMED\",\n CAPSULE_NOT_VERIFIED: \"CCE_CAPSULE_NOT_VERIFIED\",\n // Binding errors\n AUDIENCE_MISMATCH: \"CCE_AUDIENCE_MISMATCH\",\n INTENT_MISMATCH: \"CCE_INTENT_MISMATCH\",\n TPS_WINDOW_EXPIRED: \"CCE_TPS_WINDOW_EXPIRED\",\n TPS_WINDOW_FUTURE: \"CCE_TPS_WINDOW_FUTURE\",\n\n // Replay / nonce errors\n REPLAY_DETECTED: \"CCE_REPLAY_DETECTED\",\n NONCE_REUSED: \"CCE_NONCE_REUSED\",\n\n // Decryption errors\n DECRYPTION_FAILED: \"CCE_DECRYPTION_FAILED\",\n KEY_UNWRAP_FAILED: \"CCE_KEY_UNWRAP_FAILED\",\n AEAD_TAG_MISMATCH: \"CCE_AEAD_TAG_MISMATCH\",\n PAYLOAD_TOO_LARGE: \"CCE_PAYLOAD_TOO_LARGE\",\n\n // Schema / validation errors\n PAYLOAD_SCHEMA_INVALID: \"CCE_PAYLOAD_SCHEMA_INVALID\",\n INTENT_SCHEMA_MISMATCH: \"CCE_INTENT_SCHEMA_MISMATCH\",\n\n // Policy errors\n POLICY_DENIED: \"CCE_POLICY_DENIED\",\n CONSTRAINT_VIOLATED: \"CCE_CONSTRAINT_VIOLATED\",\n\n // Handler errors\n HANDLER_NOT_FOUND: \"CCE_HANDLER_NOT_FOUND\",\n HANDLER_EXECUTION_FAILED: \"CCE_HANDLER_EXECUTION_FAILED\",\n HANDLER_TIMEOUT: \"CCE_HANDLER_TIMEOUT\",\n\n // Response errors\n RESPONSE_ENCRYPTION_FAILED: \"CCE_RESPONSE_ENCRYPTION_FAILED\",\n} as const;\n\nexport type CceErrorCode = (typeof CCE_ERROR)[keyof typeof CCE_ERROR];\n\n/**\n * Structured CCE error.\n */\nexport class CceError extends Error {\n constructor(\n public readonly code: CceErrorCode,\n message: string,\n public readonly metadata?: Record<string, unknown>,\n ) {\n super(`[${code}] ${message}`);\n this.name = \"CceError\";\n }\n\n /** Whether this error is safe to expose to the client */\n get clientSafe(): boolean {\n // Never expose internal decryption/handler details\n const internal: CceErrorCode[] = [\n CCE_ERROR.DECRYPTION_FAILED,\n CCE_ERROR.KEY_UNWRAP_FAILED,\n CCE_ERROR.AEAD_TAG_MISMATCH,\n CCE_ERROR.HANDLER_EXECUTION_FAILED,\n CCE_ERROR.RESPONSE_ENCRYPTION_FAILED,\n ];\n return !internal.includes(this.code);\n }\n\n /** Get client-safe representation */\n toClientError(): { code: CceErrorCode; message: string } {\n if (this.clientSafe) {\n return { code: this.code, message: this.message };\n }\n return {\n code: CCE_ERROR.DECRYPTION_FAILED,\n message: \"Request processing failed\",\n };\n }\n}\n","import { bytesToHex, hexToBytes } from \"@noble/hashes/utils.js\";\n/**\n * CCE Key Derivation Service\n *\n * Implements HKDF-based key derivation for the Capsule-Carried Encryption protocol.\n * Keys are never placed in capsules — they are derived from:\n * - AXIS local secret (IKM)\n * - Capsule claims (salt + info)\n * - Request/response nonce (direction binding)\n * - Protocol version (upgrade protection)\n *\n * Uses @noble/hashes HKDF (RFC 5869) with SHA-256.\n */\nimport { hkdf } from \"@noble/hashes/hkdf.js\";\nimport { sha256 } from \"@noble/hashes/sha2.js\";\n\nimport { CCE_AES_KEY_BYTES, CCE_DERIVATION, CCE_NONCE_BYTES, type CceCapsuleClaims, type CceExecutionContext } from \"./cce.types\";\n\n/**\n * Input parameters for key derivation.\n */\nexport interface CceDerivationInput {\n /** AXIS local secret (hex, must be kept private) */\n axisLocalSecret: string;\n /** Capsule claims from the request */\n capsule: CceCapsuleClaims;\n /** Request nonce (hex) */\n requestNonce: string;\n /** Response nonce (hex, only for response derivation) */\n responseNonce?: string;\n}\n\n/**\n * Build the salt for HKDF from capsule + nonce.\n *\n * salt = SHA-256(capsule_id || capsule_nonce || request_nonce)\n */\nfunction buildSalt(\n capsuleId: string,\n capsuleNonce: string,\n requestNonce: string,\n): Uint8Array {\n const encoder = new TextEncoder();\n const data = encoder.encode(\n capsuleId + \"|\" + capsuleNonce + \"|\" + requestNonce,\n );\n return sha256(data);\n}\n\n/**\n * Build the info string for HKDF.\n * Binds the derived key to all authority dimensions.\n *\n * info = context_prefix | sub | kid | intent | aud | tps_from | tps_to | policy_hash | ver\n */\nfunction buildInfo(\n contextPrefix: string,\n capsule: CceCapsuleClaims,\n extraNonce?: string,\n): Uint8Array {\n const encoder = new TextEncoder();\n const parts = [\n contextPrefix,\n capsule.sub,\n capsule.kid,\n capsule.intent,\n capsule.aud,\n String(capsule.tps_from),\n String(capsule.tps_to),\n capsule.policy_hash ?? \"\",\n capsule.ver,\n ];\n if (extraNonce) {\n parts.push(extraNonce);\n }\n return encoder.encode(parts.join(\"|\"));\n}\n\n/**\n * Derive the request execution key.\n *\n * This key is used internally by AXIS to prove that:\n * 1. The request arrived with a valid capsule\n * 2. The capsule was bound to this specific intent/audience/subject\n * 3. AXIS possessed the local secret at derivation time\n *\n * The key itself is NEVER exposed — only its hash appears in witness records.\n */\nexport function deriveRequestExecutionKey(\n input: CceDerivationInput,\n): Uint8Array {\n const ikm = hexToBytes(input.axisLocalSecret);\n const salt = buildSalt(\n input.capsule.capsule_id,\n input.capsule.capsule_nonce,\n input.requestNonce,\n );\n const info = buildInfo(CCE_DERIVATION.REQUEST, input.capsule);\n\n return hkdf(sha256, ikm, salt, info, CCE_AES_KEY_BYTES);\n}\n\n/**\n * Derive the response execution key.\n * Uses a different context prefix and includes the response nonce,\n * ensuring request and response keys are always distinct.\n */\nexport function deriveResponseExecutionKey(\n input: CceDerivationInput & { responseNonce: string },\n): Uint8Array {\n const ikm = hexToBytes(input.axisLocalSecret);\n\n // Response salt uses a different construction\n const encoder = new TextEncoder();\n const saltData = encoder.encode(\n input.capsule.capsule_id +\n \"|\" +\n input.capsule.capsule_nonce +\n \"|\" +\n input.requestNonce +\n \"|\" +\n input.responseNonce,\n );\n const salt = sha256(saltData);\n\n const info = buildInfo(\n CCE_DERIVATION.RESPONSE,\n input.capsule,\n input.responseNonce,\n );\n\n return hkdf(sha256, ikm, salt, info, CCE_AES_KEY_BYTES);\n}\n\n/**\n * Derive the witness binding key.\n * Used to create tamper-evident witness records.\n */\nexport function deriveWitnessKey(input: CceDerivationInput): Uint8Array {\n const ikm = hexToBytes(input.axisLocalSecret);\n const salt = buildSalt(\n input.capsule.capsule_id,\n input.capsule.capsule_nonce,\n input.requestNonce,\n );\n const info = buildInfo(CCE_DERIVATION.WITNESS, input.capsule);\n\n return hkdf(sha256, ikm, salt, info, CCE_AES_KEY_BYTES);\n}\n\n/**\n * Build a complete execution context from capsule claims and derivation.\n * The execution key is derived but only its hash is stored.\n */\nexport function buildExecutionContext(\n input: CceDerivationInput,\n requestId: string,\n): CceExecutionContext {\n const executionKey = deriveRequestExecutionKey(input);\n const keyHash = bytesToHex(sha256(executionKey));\n\n // Clear the raw key from memory (best effort)\n executionKey.fill(0);\n\n return {\n execution_key_hash: keyHash,\n request_id: requestId,\n capsule_id: input.capsule.capsule_id,\n sub: input.capsule.sub,\n kid: input.capsule.kid,\n intent: input.capsule.intent,\n aud: input.capsule.aud,\n tps_from: input.capsule.tps_from,\n tps_to: input.capsule.tps_to,\n policy_hash: input.capsule.policy_hash,\n derived_at: Math.floor(Date.now() / 1000),\n valid: true,\n };\n}\n\n/**\n * Generate a cryptographically secure nonce for CCE requests/responses.\n */\nexport function generateCceNonce(): string {\n const bytes = new Uint8Array(CCE_NONCE_BYTES);\n crypto.getRandomValues(bytes);\n return bytesToHex(bytes);\n}\n","import { bytesToHex } from \"@noble/hashes/utils.js\";\nimport { sha256 } from \"@noble/hashes/sha2.js\";\n/**\n * CCE Crypto Primitives\n *\n * AES-256-GCM encryption/decryption and X25519 key exchange\n * for the Capsule-Carried Encryption protocol.\n *\n * Uses Node.js native crypto for AES-GCM (performant and FIPS-capable).\n */\nimport { createCipheriv, createDecipheriv, randomBytes } from \"crypto\";\n\nimport { CCE_AES_KEY_BYTES, CCE_IV_BYTES, CCE_TAG_BYTES } from \"./cce.types\";\n\n// ============================================================================\n// AES-256-GCM\n// ============================================================================\n\n/**\n * Encrypt plaintext with AES-256-GCM.\n */\nexport function aesGcmEncrypt(\n key: Uint8Array,\n plaintext: Uint8Array,\n aad?: Uint8Array,\n): { iv: Uint8Array; ciphertext: Uint8Array; tag: Uint8Array } {\n if (key.length !== CCE_AES_KEY_BYTES) {\n throw new Error(`AES key must be ${CCE_AES_KEY_BYTES} bytes`);\n }\n\n const iv = randomBytes(CCE_IV_BYTES);\n const cipher = createCipheriv(\"aes-256-gcm\", key, iv);\n\n if (aad) {\n cipher.setAAD(aad);\n }\n\n const encrypted = Buffer.concat([cipher.update(plaintext), cipher.final()]);\n const tag = cipher.getAuthTag();\n\n return {\n iv: new Uint8Array(iv),\n ciphertext: new Uint8Array(encrypted),\n tag: new Uint8Array(tag),\n };\n}\n\n/**\n * Decrypt ciphertext with AES-256-GCM.\n * Returns null if AEAD tag verification fails.\n */\nexport function aesGcmDecrypt(\n key: Uint8Array,\n iv: Uint8Array,\n ciphertext: Uint8Array,\n tag: Uint8Array,\n aad?: Uint8Array,\n): Uint8Array | null {\n if (key.length !== CCE_AES_KEY_BYTES) {\n throw new Error(`AES key must be ${CCE_AES_KEY_BYTES} bytes`);\n }\n if (iv.length !== CCE_IV_BYTES) {\n throw new Error(`IV must be ${CCE_IV_BYTES} bytes`);\n }\n if (tag.length !== CCE_TAG_BYTES) {\n throw new Error(`Tag must be ${CCE_TAG_BYTES} bytes`);\n }\n\n try {\n const decipher = createDecipheriv(\"aes-256-gcm\", key, iv);\n decipher.setAuthTag(tag);\n\n if (aad) {\n decipher.setAAD(aad);\n }\n\n const decrypted = Buffer.concat([\n decipher.update(ciphertext),\n decipher.final(),\n ]);\n return new Uint8Array(decrypted);\n } catch {\n // AEAD tag mismatch or other decryption failure\n return null;\n }\n}\n\n/**\n * Generate an ephemeral AES-256 key.\n */\nexport function generateAesKey(): Uint8Array {\n return new Uint8Array(randomBytes(CCE_AES_KEY_BYTES));\n}\n\n/**\n * Generate a random IV for AES-GCM.\n */\nexport function generateIv(): Uint8Array {\n return new Uint8Array(randomBytes(CCE_IV_BYTES));\n}\n\n// ============================================================================\n// Base64url helpers\n// ============================================================================\n\nexport function base64UrlEncode(bytes: Uint8Array): string {\n return Buffer.from(bytes)\n .toString(\"base64\")\n .replace(/\\+/g, \"-\")\n .replace(/\\//g, \"_\")\n .replace(/=+$/, \"\");\n}\n\nexport function base64UrlDecode(input: string): Uint8Array {\n const base64 = input.replace(/-/g, \"+\").replace(/_/g, \"/\");\n const padding = \"=\".repeat((4 - (base64.length % 4)) % 4);\n return new Uint8Array(Buffer.from(base64 + padding, \"base64\"));\n}\n\n// ============================================================================\n// Payload hashing (for witness records)\n// ============================================================================\n\n/**\n * Hash a payload for witness records (never store raw plaintext).\n */\nexport function hashPayload(payload: Uint8Array): string {\n return bytesToHex(sha256(payload));\n}\n\n// ============================================================================\n// Default AES-GCM Provider (for sensor injection)\n// ============================================================================\n\nimport type { CceAesGcmProvider } from \"./sensors/cce-payload-decryption.sensor\";\n\n/**\n * Node.js native AES-GCM provider.\n */\nexport const nodeAesGcmProvider: CceAesGcmProvider = {\n async decrypt(\n key: Uint8Array,\n iv: Uint8Array,\n ciphertext: Uint8Array,\n tag: Uint8Array,\n aad?: Uint8Array,\n ): Promise<Uint8Array | null> {\n return aesGcmDecrypt(key, iv, ciphertext, tag, aad);\n },\n};\n","import { bytesToHex } from \"@noble/hashes/utils.js\";\n/**\n * CCE Response Encryption Service\n *\n * Encrypts AXIS response payloads back to the client.\n *\n * v1 model:\n * - Generate ephemeral AES-256 key\n * - Encrypt response body with AES-GCM\n * - Encrypt AES key with client public key\n * - Sign response envelope with AXIS private key\n */\nimport { randomBytes } from \"crypto\";\n\nimport { aesGcmEncrypt, base64UrlEncode, generateAesKey, hashPayload } from \"./cce-crypto\";\nimport { CCE_NONCE_BYTES, CCE_PROTOCOL_VERSION, type CceAlgorithmDescriptor, type CceCapsuleClaims, type CceEncryptedKey, type CceEncryptedPayload, type CceRequestEnvelope, type CceResponseEnvelope, type CceResponseStatus, type CceSignature } from \"./cce.types\";\n\n/**\n * Client public key encryptor — wraps AES key with client's public key.\n */\nexport interface CceClientKeyEncryptor {\n wrapKey(\n aesKey: Uint8Array,\n clientKid: string,\n clientPublicKeyHex: string,\n ): Promise<CceEncryptedKey>;\n}\n\n/**\n * AXIS signing provider — signs response envelopes.\n */\nexport interface CceAxisSigner {\n sign(payload: Uint8Array): Promise<CceSignature>;\n}\n\n/**\n * Options for building a CCE response.\n */\nexport interface CceResponseOptions {\n /** Original request envelope */\n request: CceRequestEnvelope;\n /** Verified capsule claims */\n capsule: CceCapsuleClaims;\n /** Response status */\n status: CceResponseStatus;\n /** Response body (plaintext) */\n body: Uint8Array;\n /** Client public key (hex) for response encryption */\n clientPublicKeyHex: string;\n /** Witness reference */\n witnessRef?: string;\n}\n\n/**\n * Build and encrypt a CCE response envelope.\n */\nexport async function buildCceResponse(\n options: CceResponseOptions,\n clientKeyEncryptor: CceClientKeyEncryptor,\n axisSigner: CceAxisSigner,\n): Promise<{ envelope: CceResponseEnvelope; responsePayloadHash: string }> {\n const { request, capsule, status, body, clientPublicKeyHex, witnessRef } =\n options;\n\n // Generate response nonce\n const responseNonce = bytesToHex(\n new Uint8Array(randomBytes(CCE_NONCE_BYTES)),\n );\n\n // Generate response ID\n const responseId = generateResponseId();\n\n // Generate ephemeral AES key for response\n const aesKey = generateAesKey();\n\n // Build AAD for response (binds ciphertext to response context)\n const aad = buildResponseAad(\n request.request_id,\n responseId,\n request.correlation_id,\n capsule.capsule_id,\n responseNonce,\n );\n\n // Encrypt response body\n const { iv, ciphertext, tag } = aesGcmEncrypt(aesKey, body, aad);\n\n // Wrap AES key with client public key\n const encryptedKey = await clientKeyEncryptor.wrapKey(\n aesKey,\n request.client_kid,\n clientPublicKeyHex,\n );\n\n // Clear the raw AES key\n aesKey.fill(0);\n\n const encryptedPayload: CceEncryptedPayload = {\n alg: \"AES-256-GCM\",\n iv: base64UrlEncode(iv),\n ciphertext: base64UrlEncode(ciphertext),\n tag: base64UrlEncode(tag),\n };\n\n const algorithms: CceAlgorithmDescriptor = {\n kem: encryptedKey.alg,\n enc: \"AES-256-GCM\",\n kdf: \"HKDF-SHA256\",\n sig: \"EdDSA\",\n };\n\n // Build unsigned response\n const unsignedResponse: Omit<CceResponseEnvelope, \"axis_sig\"> = {\n ver: CCE_PROTOCOL_VERSION,\n response_id: responseId,\n request_id: request.request_id,\n correlation_id: request.correlation_id,\n capsule_id: capsule.capsule_id,\n encrypted_key: encryptedKey,\n encrypted_payload: encryptedPayload,\n response_nonce: responseNonce,\n algorithms,\n status,\n ...(witnessRef ? { witness_ref: witnessRef } : {}),\n };\n\n // Sign the response\n const signPayload = new TextEncoder().encode(canonicalize(unsignedResponse));\n const axisSig = await axisSigner.sign(signPayload);\n\n const envelope: CceResponseEnvelope = {\n ...unsignedResponse,\n axis_sig: axisSig,\n };\n\n return {\n envelope,\n responsePayloadHash: hashPayload(body),\n };\n}\n\n/**\n * Build a plaintext (unencrypted) error response for cases where\n * encryption is impossible (e.g., before capsule verification).\n */\nexport function buildCceErrorResponse(\n requestId: string,\n correlationId: string,\n status: CceResponseStatus,\n errorCode: string,\n message: string,\n): {\n ver: string;\n request_id: string;\n correlation_id: string;\n status: CceResponseStatus;\n error: { code: string; message: string };\n} {\n return {\n ver: CCE_PROTOCOL_VERSION,\n request_id: requestId,\n correlation_id: correlationId,\n status,\n error: { code: errorCode, message },\n };\n}\n\n// ============================================================================\n// Helpers\n// ============================================================================\n\nfunction generateResponseId(): string {\n const bytes = randomBytes(16);\n return \"resp_\" + bytesToHex(new Uint8Array(bytes)).slice(0, 24);\n}\n\nfunction buildResponseAad(\n requestId: string,\n responseId: string,\n correlationId: string,\n capsuleId: string,\n responseNonce: string,\n): Uint8Array {\n const parts = [\n requestId,\n responseId,\n correlationId,\n capsuleId,\n responseNonce,\n ];\n return new TextEncoder().encode(parts.join(\"|\"));\n}\n\nfunction canonicalize(obj: unknown): string {\n if (Array.isArray(obj)) {\n return \"[\" + obj.map(canonicalize).join(\",\") + \"]\";\n }\n if (obj !== null && typeof obj === \"object\") {\n const sorted = Object.keys(obj as object)\n .sort()\n .map(\n (k) =>\n JSON.stringify(k) +\n \":\" +\n canonicalize((obj as Record<string, unknown>)[k]),\n );\n return \"{\" + sorted.join(\",\") + \"}\";\n }\n return JSON.stringify(obj);\n}\n","import { bytesToHex } from \"@noble/hashes/utils.js\";\nimport { hkdf } from \"@noble/hashes/hkdf.js\";\nimport { sha256 } from \"@noble/hashes/sha2.js\";\n/**\n * CCE Witness Observer\n *\n * Records tamper-evident witness logs for every CCE request/response lifecycle.\n *\n * Redaction rules:\n * - Never store raw plaintext payloads (only hashes)\n * - Never store raw encryption keys\n * - Store verification outcomes, not raw crypto material\n */\nimport { randomBytes } from \"crypto\";\n\nimport { hashPayload } from \"./cce-crypto\";\nimport { CCE_DERIVATION, type CceCapsuleClaims, type CceRequestEnvelope, type CceResponseStatus, type CceWitnessRecord } from \"./cce.types\";\n\n/**\n * Witness store interface — implementations persist witness records.\n */\nexport interface CceWitnessStore {\n record(witness: CceWitnessRecord): Promise<void>;\n}\n\n/**\n * In-memory witness store for development/testing.\n */\nexport class InMemoryCceWitnessStore implements CceWitnessStore {\n readonly records: CceWitnessRecord[] = [];\n\n async record(witness: CceWitnessRecord): Promise<void> {\n this.records.push(witness);\n }\n\n getByRequestId(requestId: string): CceWitnessRecord | undefined {\n return this.records.find((w) => w.request_id === requestId);\n }\n\n getByCapsuleId(capsuleId: string): CceWitnessRecord[] {\n return this.records.filter((w) => w.capsule_id === capsuleId);\n }\n}\n\n/**\n * Verification state accumulated during sensor chain execution.\n */\nexport interface CceVerificationState {\n clientSigVerified: boolean;\n capsuleSigVerified: boolean;\n tpsValid: boolean;\n audienceMatch: boolean;\n intentMatch: boolean;\n replayClean: boolean;\n nonceUnique: boolean;\n decryptionOk: boolean;\n}\n\n/**\n * Build a witness record from verification state and execution result.\n */\nexport function buildWitnessRecord(\n envelope: CceRequestEnvelope,\n capsule: CceCapsuleClaims,\n verification: CceVerificationState,\n execution: {\n status: CceResponseStatus;\n handlerDurationMs: number;\n effect?: string;\n },\n options: {\n axisLocalSecret: string;\n requestPayload?: Uint8Array;\n responsePayload?: Uint8Array;\n responseEncrypted: boolean;\n },\n): CceWitnessRecord {\n // Generate witness ID\n const witnessId = generateWitnessId(envelope.request_id, capsule.capsule_id);\n\n // Compute execution context hash using HKDF witness derivation\n const executionContextHash = computeExecutionContextHash(\n options.axisLocalSecret,\n capsule,\n envelope.request_nonce,\n );\n\n return {\n witness_id: witnessId,\n request_id: envelope.request_id,\n capsule_id: capsule.capsule_id,\n sub: capsule.sub,\n intent: capsule.intent,\n aud: capsule.aud,\n tps_from: capsule.tps_from,\n tps_to: capsule.tps_to,\n timestamp: Math.floor(Date.now() / 1000),\n verification: {\n client_sig: verification.clientSigVerified,\n capsule_sig: verification.capsuleSigVerified,\n tps_valid: verification.tpsValid,\n audience_match: verification.audienceMatch,\n intent_match: verification.intentMatch,\n replay_clean: verification.replayClean,\n nonce_unique: verification.nonceUnique,\n decryption_ok: verification.decryptionOk,\n },\n execution: {\n status: execution.status,\n handler_duration_ms: execution.handlerDurationMs,\n ...(execution.effect ? { effect: execution.effect } : {}),\n },\n response_encrypted: options.responseEncrypted,\n execution_context_hash: executionContextHash,\n ...(options.requestPayload\n ? { request_payload_hash: hashPayload(options.requestPayload) }\n : {}),\n ...(options.responsePayload\n ? { response_payload_hash: hashPayload(options.responsePayload) }\n : {}),\n };\n}\n\n/**\n * Extract verification state from sensor chain metadata.\n */\nexport function extractVerificationState(\n metadata: Record<string, any>,\n): CceVerificationState {\n return {\n clientSigVerified: metadata.cceClientSigVerified === true,\n capsuleSigVerified: metadata.cceCapsuleVerified === true,\n tpsValid: metadata.cceTpsValid === true,\n audienceMatch: metadata.cceBindingVerified === true,\n intentMatch: metadata.cceBindingVerified === true,\n replayClean: metadata.cceReplayClean === true,\n nonceUnique: metadata.cceReplayClean === true,\n decryptionOk: metadata.cceDecryptionOk === true,\n };\n}\n\n// ============================================================================\n// Internal\n// ============================================================================\n\nfunction generateWitnessId(requestId: string, capsuleId: string): string {\n const input = `witness:${requestId}:${capsuleId}:${Date.now()}`;\n const hash = sha256(new TextEncoder().encode(input));\n return \"wit_\" + bytesToHex(hash).slice(0, 24);\n}\n\nfunction computeExecutionContextHash(\n axisLocalSecret: string,\n capsule: CceCapsuleClaims,\n requestNonce: string,\n): string {\n const encoder = new TextEncoder();\n\n // Use HKDF to derive witness key\n const ikm = hexToBytes(axisLocalSecret);\n const salt = sha256(\n encoder.encode(\n capsule.capsule_id + \"|\" + capsule.capsule_nonce + \"|\" + requestNonce,\n ),\n );\n const info = encoder.encode(\n [\n CCE_DERIVATION.WITNESS,\n capsule.sub,\n capsule.kid,\n capsule.intent,\n capsule.aud,\n String(capsule.tps_from),\n String(capsule.tps_to),\n capsule.policy_hash ?? \"\",\n capsule.ver,\n ].join(\"|\"),\n );\n\n const witnessKey = hkdf(sha256, ikm, salt, info, 32);\n const hash = bytesToHex(sha256(witnessKey));\n\n // Clear sensitive material\n witnessKey.fill(0);\n\n return hash;\n}\n\nfunction hexToBytes(hex: string): Uint8Array {\n const bytes = new Uint8Array(hex.length / 2);\n for (let i = 0; i < bytes.length; i++) {\n bytes[i] = parseInt(hex.slice(i * 2, i * 2 + 2), 16);\n }\n return bytes;\n}\n","import { buildExecutionContext, type CceDerivationInput } from \"./cce-derivation.service\";\nimport { buildCceErrorResponse, buildCceResponse, type CceAxisSigner, type CceClientKeyEncryptor } from \"./cce-response.service\";\nimport { buildWitnessRecord, type CceWitnessStore, extractVerificationState } from \"./cce-witness.observer\";\nimport type { AxisSensor, SensorDecision, SensorInput } from \"../sensor/axis-sensor\";\nimport { normalizeSensorDecision } from \"../sensor/axis-sensor\";\n/**\n * CCE Pipeline Orchestrator\n *\n * Orchestrates the full CCE request/response lifecycle within AXIS:\n *\n * Request path:\n * 1. Parse envelope\n * 2. Run sensor chain (7 CCE sensors in order)\n * 3. Derive execution context\n * 4. Route to handler\n * 5. Execute handler\n *\n * Response path:\n * 6. Encrypt response\n * 7. Sign response\n * 8. Record witness\n * 9. Return response\n *\n * This orchestrator can be integrated into IntentRouter or used standalone.\n */\nimport { CCE_ERROR, CCE_PROTOCOL_VERSION, type CceCapsuleClaims, CceError, type CceExecutionContext, type CceRequestEnvelope, type CceResponseEnvelope, type CceResponseStatus } from \"./cce.types\";\n\n/**\n * CCE handler function — receives decrypted payload and execution context.\n */\nexport type CceHandler = (\n payload: Uint8Array,\n context: CceHandlerContext,\n) => Promise<CceHandlerResult>;\n\nexport interface CceHandlerContext {\n /** Verified capsule claims */\n capsule: CceCapsuleClaims;\n /** Derived execution context */\n executionContext: CceExecutionContext;\n /** Original request envelope */\n envelope: CceRequestEnvelope;\n /** Client's verified public key */\n clientPublicKeyHex: string;\n /** Request intent */\n intent: string;\n /** Actor identity */\n sub: string;\n}\n\nexport interface CceHandlerResult {\n status: CceResponseStatus;\n body: Uint8Array;\n effect?: string;\n}\n\nexport interface CcePolicyContext {\n envelope: CceRequestEnvelope;\n capsule: CceCapsuleClaims;\n executionContext: CceExecutionContext;\n decryptedPayload: Uint8Array;\n clientPublicKeyHex: string;\n}\n\nexport interface CcePolicyDecision {\n allow: boolean;\n code?: string;\n message?: string;\n}\n\nexport interface CcePolicyEvaluator {\n evaluate(context: CcePolicyContext): Promise<CcePolicyDecision>;\n}\n\n/**\n * CCE Pipeline Configuration\n */\nexport interface CcePipelineConfig {\n /** AXIS local secret for key derivation (hex) */\n axisLocalSecret: string;\n /** AXIS audience identifier */\n axisAudience: string;\n /** CCE sensors (will be sorted by order) */\n sensors: AxisSensor[];\n /** Intent → handler mapping */\n handlers: Map<string, CceHandler>;\n /** Witness store */\n witnessStore: CceWitnessStore;\n /** Client key encryptor (for response encryption) */\n clientKeyEncryptor: CceClientKeyEncryptor;\n /** AXIS response signer */\n axisSigner: CceAxisSigner;\n /** Optional policy/law evaluator run after decryption and before handler execution */\n policyEvaluator?: CcePolicyEvaluator;\n}\n\n/**\n * Result of CCE pipeline execution.\n */\nexport type CcePipelineResult =\n | { ok: true; response: CceResponseEnvelope; witnessId: string }\n | {\n ok: false;\n error: { code: string; message: string };\n status: CceResponseStatus;\n };\n\n/**\n * Execute the full CCE pipeline.\n */\nexport async function executeCcePipeline(\n envelope: CceRequestEnvelope,\n config: CcePipelineConfig,\n): Promise<CcePipelineResult> {\n const startTime = Date.now();\n\n // Validate protocol version\n if (envelope.ver !== CCE_PROTOCOL_VERSION) {\n return {\n ok: false,\n error: {\n code: CCE_ERROR.UNSUPPORTED_VERSION,\n message: `Unsupported version: ${envelope.ver}`,\n },\n status: \"ERROR\",\n };\n }\n\n // Build sensor input\n const sensorInput: SensorInput = {\n intent: envelope.capsule.intent,\n metadata: {\n cce: true,\n cceEnvelope: envelope,\n contentType: \"application/axis-cce\",\n },\n };\n\n // Run sensor chain in order\n const sortedSensors = [...config.sensors].sort(\n (a, b) => (a.order ?? 999) - (b.order ?? 999),\n );\n\n for (const sensor of sortedSensors) {\n if (sensor.supports && !sensor.supports(sensorInput)) {\n continue;\n }\n\n let decision: SensorDecision;\n try {\n decision = await sensor.run(sensorInput);\n } catch (err) {\n return {\n ok: false,\n error: {\n code: CCE_ERROR.DECRYPTION_FAILED,\n message: `Sensor ${sensor.name} failed`,\n },\n status: \"ERROR\",\n };\n }\n\n const normalized = normalizeSensorDecision(decision);\n if (!normalized.allow) {\n const code =\n normalized.reasons[0]?.split(\":\")[0] ?? CCE_ERROR.DECRYPTION_FAILED;\n return {\n ok: false,\n error: { code, message: normalized.reasons.join(\"; \") },\n status: \"DENIED\",\n };\n }\n }\n\n // Extract verified state\n const capsule = sensorInput.metadata?.cceCapsule as CceCapsuleClaims;\n const decryptedPayload = sensorInput.metadata\n ?.cceDecryptedPayload as Uint8Array;\n const clientKey = sensorInput.metadata?.cceClientKey as {\n publicKeyHex: string;\n };\n\n if (!capsule || !decryptedPayload || !clientKey) {\n return {\n ok: false,\n error: {\n code: CCE_ERROR.DECRYPTION_FAILED,\n message: \"Sensor chain did not produce required outputs\",\n },\n status: \"ERROR\",\n };\n }\n\n // Derive execution context\n const derivationInput: CceDerivationInput = {\n axisLocalSecret: config.axisLocalSecret,\n capsule,\n requestNonce: envelope.request_nonce,\n };\n const executionContext = buildExecutionContext(\n derivationInput,\n envelope.request_id,\n );\n\n if (config.policyEvaluator) {\n try {\n const policyDecision = await config.policyEvaluator.evaluate({\n envelope,\n capsule,\n executionContext,\n decryptedPayload,\n clientPublicKeyHex: clientKey.publicKeyHex,\n });\n if (!policyDecision.allow) {\n const verification = extractVerificationState(sensorInput.metadata ?? {});\n const witness = buildWitnessRecord(\n envelope,\n capsule,\n verification,\n {\n status: \"DENIED\",\n handlerDurationMs: 0,\n effect: \"policy_denied\",\n },\n {\n axisLocalSecret: config.axisLocalSecret,\n requestPayload: decryptedPayload,\n responseEncrypted: false,\n },\n );\n await config.witnessStore.record(witness);\n\n return {\n ok: false,\n error: {\n code: policyDecision.code ?? CCE_ERROR.POLICY_DENIED,\n message:\n policyDecision.message ?? \"Request denied by policy evaluator\",\n },\n status: \"DENIED\",\n };\n }\n } catch (err) {\n return {\n ok: false,\n error: {\n code: CCE_ERROR.POLICY_DENIED,\n message: \"Policy evaluator failed\",\n },\n status: \"ERROR\",\n };\n }\n }\n\n // Route to handler\n const handler = config.handlers.get(capsule.intent);\n if (!handler) {\n return {\n ok: false,\n error: {\n code: CCE_ERROR.HANDLER_NOT_FOUND,\n message: `No handler for intent: ${capsule.intent}`,\n },\n status: \"ERROR\",\n };\n }\n\n // Execute handler\n const handlerContext: CceHandlerContext = {\n capsule,\n executionContext,\n envelope,\n clientPublicKeyHex: clientKey.publicKeyHex,\n intent: capsule.intent,\n sub: capsule.sub,\n };\n\n let result: CceHandlerResult;\n const handlerStart = Date.now();\n try {\n result = await handler(decryptedPayload, handlerContext);\n } catch (err) {\n const handlerDuration = Date.now() - handlerStart;\n\n // Record failure witness\n const verification = extractVerificationState(sensorInput.metadata ?? {});\n const witness = buildWitnessRecord(\n envelope,\n capsule,\n verification,\n { status: \"FAILED\", handlerDurationMs: handlerDuration },\n {\n axisLocalSecret: config.axisLocalSecret,\n requestPayload: decryptedPayload,\n responseEncrypted: false,\n },\n );\n await config.witnessStore.record(witness);\n\n return {\n ok: false,\n error: {\n code: CCE_ERROR.HANDLER_EXECUTION_FAILED,\n message: \"Handler execution failed\",\n },\n status: \"FAILED\",\n };\n }\n const handlerDuration = Date.now() - handlerStart;\n\n // Encrypt response\n let responseEnvelope: CceResponseEnvelope;\n let responsePayloadHash: string;\n\n try {\n const responseResult = await buildCceResponse(\n {\n request: envelope,\n capsule,\n status: result.status,\n body: result.body,\n clientPublicKeyHex: clientKey.publicKeyHex,\n },\n config.clientKeyEncryptor,\n config.axisSigner,\n );\n responseEnvelope = responseResult.envelope;\n responsePayloadHash = responseResult.responsePayloadHash;\n } catch (err) {\n return {\n ok: false,\n error: {\n code: CCE_ERROR.RESPONSE_ENCRYPTION_FAILED,\n message: \"Response encryption failed\",\n },\n status: \"ERROR\",\n };\n }\n\n // Record witness\n const verification = extractVerificationState(sensorInput.metadata ?? {});\n const witness = buildWitnessRecord(\n envelope,\n capsule,\n verification,\n {\n status: result.status,\n handlerDurationMs: handlerDuration,\n effect: result.effect,\n },\n {\n axisLocalSecret: config.axisLocalSecret,\n requestPayload: decryptedPayload,\n responsePayload: result.body,\n responseEncrypted: true,\n },\n );\n await config.witnessStore.record(witness);\n\n return {\n ok: true,\n response: responseEnvelope,\n witnessId: witness.witness_id,\n };\n}\n","export class AxisError extends Error {\n constructor(\n public code: string,\n message: string,\n public httpStatus: number = 400,\n public details?: Record<string, any>,\n ) {\n super(message);\n this.name = 'AxisError';\n }\n}\n","import type { AxisEffect } from \"./intent.router\";\n\n/**\n * Built-in AXIS intents handled by the SDK router without app registration.\n *\n * Keep this list small: these are protocol/control-plane intents, not business\n * handlers. CHAIN.EXEC and INTENT.EXEC are listed here so lookup APIs treat\n * them as known intents, but their execution is delegated back to IntentRouter.\n */\nexport const BUILTIN_INTENTS = new Set([\n \"system.ping\",\n \"public.ping\",\n \"system.time\",\n \"system.echo\",\n \"CHAIN.EXEC\",\n \"axis.chain.exec\",\n \"INTENT.EXEC\",\n \"axis.intent.exec\",\n]);\n\nexport function isBuiltinIntent(intent: string): boolean {\n return BUILTIN_INTENTS.has(intent);\n}\n\n/** True for chain meta-intents that execute a multi-step AXIS chain envelope. */\nexport function isChainExecIntent(intent: string): boolean {\n return intent === \"CHAIN.EXEC\" || intent === \"axis.chain.exec\";\n}\n\n/** True for meta-intents that unwrap and execute one inner AXIS intent. */\nexport function isIntentExecIntent(intent: string): boolean {\n return intent === \"INTENT.EXEC\" || intent === \"axis.intent.exec\";\n}\n\n/**\n * Executes simple system built-ins that do not need app handlers.\n * Returns undefined for meta built-ins handled by the router itself.\n */\nexport function routeSystemBuiltinIntent(\n intent: string,\n body: Uint8Array,\n encoder: TextEncoder,\n): AxisEffect | undefined {\n if (intent === \"system.ping\" || intent === \"public.ping\") {\n return {\n ok: true,\n effect: \"pong\",\n headers: new Map([[100, encoder.encode(\"AXIS_BACKEND_V1\")]]),\n body: encoder.encode(\n JSON.stringify({\n status: \"ok\",\n timestamp: new Date().toISOString(),\n version: \"1.0.0\",\n }),\n ),\n };\n }\n\n if (intent === \"system.time\") {\n const ts = Date.now().toString();\n return {\n ok: true,\n effect: \"time\",\n body: encoder.encode(\n JSON.stringify({\n ts,\n iso: new Date().toISOString(),\n }),\n ),\n };\n }\n\n if (intent === \"system.echo\") {\n return {\n ok: true,\n effect: \"echo\",\n body,\n };\n }\n\n return undefined;\n}\n","import \"reflect-metadata\";\n\nimport {\n AXIS_ANONYMOUS_KEY,\n AXIS_AUTHORIZED_KEY,\n AXIS_PUBLIC_KEY,\n REQUIRED_PROOF_METADATA_KEY,\n type RequiredProofKind,\n} from \"../decorators/intent-policy.decorator\";\n\n/**\n * Effective proof policy after class-level defaults and method-level overrides\n * have been resolved for one intent.\n */\nexport interface IntentProofPolicy {\n requiredProof: RequiredProofKind[];\n isPublic: boolean;\n isAnonymous: boolean;\n isAuthorized: boolean;\n}\n\nfunction mergeProofKinds(\n ...proofGroups: Array<RequiredProofKind[] | undefined>\n): RequiredProofKind[] {\n const merged = new Set<RequiredProofKind>();\n for (const proofs of proofGroups) {\n for (const proof of proofs ?? []) {\n merged.add(proof);\n }\n }\n return Array.from(merged);\n}\n\n/**\n * Access decorators are proof-policy shorthands:\n * - @AxisPublic() -> NONE\n * - @AxisAnonymous() -> ANONYMOUS\n * - @AxisAuthorized() -> AUTHORIZED\n */\nfunction accessProofKinds(\n isPublic?: boolean,\n isAnonymous?: boolean,\n isAuthorized?: boolean,\n): RequiredProofKind[] {\n const proofs: RequiredProofKind[] = [];\n if (isPublic) proofs.push(\"NONE\");\n if (isAnonymous) proofs.push(\"ANONYMOUS\");\n if (isAuthorized) proofs.push(\"AUTHORIZED\");\n return proofs;\n}\n\n/**\n * Resolves the proof policy for a single handler method.\n *\n * Precedence rule:\n * method-level policy wins over class-level policy. This allows handlers to\n * declare a class default such as `@RequiredProof(['NONE'])` and override one\n * method with `@AxisAuthorized()` or `@RequiredProof(['AUTHORIZED'])`.\n */\nexport function resolveIntentProofPolicy(\n proto: object,\n methodName: string,\n): IntentProofPolicy {\n const methodProof: RequiredProofKind[] | undefined = Reflect.getMetadata(\n REQUIRED_PROOF_METADATA_KEY,\n proto,\n methodName,\n );\n const classProof: RequiredProofKind[] | undefined = Reflect.getMetadata(\n REQUIRED_PROOF_METADATA_KEY,\n proto.constructor,\n );\n const isPublicMethod: boolean | undefined = Reflect.getMetadata(\n AXIS_PUBLIC_KEY,\n proto,\n methodName,\n );\n const isPublicClass: boolean | undefined = Reflect.getMetadata(\n AXIS_PUBLIC_KEY,\n proto.constructor,\n );\n const isAnonymousMethod: boolean | undefined = Reflect.getMetadata(\n AXIS_ANONYMOUS_KEY,\n proto,\n methodName,\n );\n const isAnonymousClass: boolean | undefined = Reflect.getMetadata(\n AXIS_ANONYMOUS_KEY,\n proto.constructor,\n );\n const isAuthorizedMethod: boolean | undefined = Reflect.getMetadata(\n AXIS_AUTHORIZED_KEY,\n proto,\n methodName,\n );\n const isAuthorizedClass: boolean | undefined = Reflect.getMetadata(\n AXIS_AUTHORIZED_KEY,\n proto.constructor,\n );\n\n const methodPolicyProof = mergeProofKinds(\n methodProof,\n accessProofKinds(isPublicMethod, isAnonymousMethod, isAuthorizedMethod),\n );\n const classPolicyProof = mergeProofKinds(\n classProof,\n accessProofKinds(isPublicClass, isAnonymousClass, isAuthorizedClass),\n );\n const requiredProof = methodPolicyProof.length\n ? methodPolicyProof\n : classPolicyProof;\n\n return {\n requiredProof,\n isPublic: requiredProof.includes(\"NONE\"),\n isAnonymous: requiredProof.includes(\"ANONYMOUS\"),\n isAuthorized: requiredProof.includes(\"AUTHORIZED\"),\n };\n}\n","import {\n decodeChainEnvelope,\n decodeChainRequest,\n} from \"@nextera.one/axis-protocol\";\n\nimport { HANDLER_SENSORS_KEY } from \"../decorators/handler-sensors.decorator\";\nimport {\n CAPSULE_POLICY_METADATA_KEY,\n type CapsulePolicyOptions,\n mergeCapsulePolicyOptions,\n normalizeCapsulePolicyOptions,\n} from \"../decorators/capsule-policy.decorator\";\nimport { INTENT_SENSORS_KEY } from \"../decorators/intent-sensors.decorator\";\nimport {\n AXIS_RATE_LIMIT_KEY,\n type AxisRateLimitConfig,\n CONTRACT_METADATA_KEY,\n normalizeRequiredProof,\n type RequiredProofKind,\n SENSITIVITY_METADATA_KEY,\n} from \"../decorators/intent-policy.decorator\";\nimport { INTENT_BODY_KEY } from \"../decorators/intent-body.decorator\";\nimport type { TlvValidatorFn } from \"../decorators/tlv-field.decorator\";\nimport {\n AxisObserverBinding,\n AxisObserverRef,\n OBSERVER_BINDINGS_KEY,\n} from \"../decorators/observer.decorator\";\nimport { HANDLER_METADATA_KEY } from \"../decorators/handler.decorator\";\nimport {\n type AxisIntentSensorBinding,\n type AxisIntentSensorBindingInput,\n type AxisIntentSensorRef,\n INTENT_METADATA_KEY,\n INTENT_ROUTES_KEY,\n IntentKind,\n IntentRoute,\n IntentTlvField,\n toIntentSensorBinding,\n} from \"../decorators/intent.decorator\";\nimport { CHAIN_METADATA_KEY } from \"../decorators/chain.decorator\";\nimport {\n buildDtoDecoder,\n extractDtoSchema,\n} from \"../decorators/dto-schema.util\";\nimport { ObserverDispatcherService } from \"./observer-dispatcher.service\";\nimport {\n inlineCapsuleAllowsIntent,\n inlineCapsuleSatisfiesScopes,\n isInlineCapsuleExpired,\n normalizeInlineCapsule,\n resolvePolicyScopes,\n} from \"../security/inline-capsule\";\nimport type { AxisDependencyResolver } from \"./axis-dependency-resolver\";\nimport { SensorRegistry } from \"./registry/sensor.registry\";\nimport {\n getAxisExecutionContext,\n mergeAxisExecutionContext,\n withAxisExecutionContext,\n} from \"./axis-execution-context\";\nimport type { SensitivityLevel } from \"../schemas/axis-schemas\";\nimport {\n AxisSensor,\n normalizeSensorDecision,\n SensorInput,\n} from \"../sensor/axis-sensor\";\nimport { createAxisLogger } from \"../utils/axis-logger\";\nimport {\n type CceHandler,\n type CcePipelineConfig,\n type CcePipelineResult,\n executeCcePipeline,\n} from \"../cce/cce-pipeline\";\nimport { AxisError } from \"../core/axis-error\";\nimport {\n AxisChainEnvelope,\n AxisChainRequest,\n ChainOptions,\n RegisteredChainConfig,\n} from \"./axis-chain.types\";\nimport {\n TLV_ACTOR_ID,\n TLV_CAPSULE,\n TLV_INTENT,\n TLV_NODE,\n TLV_PROOF_REF,\n TLV_REALM,\n} from \"../core/constants\";\nimport type { CceRequestEnvelope } from \"../cce/cce.types\";\nimport { AxisFrame } from \"../core/axis-bin\";\nimport {\n BUILTIN_INTENTS,\n isBuiltinIntent,\n isChainExecIntent,\n isIntentExecIntent,\n routeSystemBuiltinIntent,\n} from \"./intent-builtins\";\nimport { resolveIntentProofPolicy } from \"./intent-proof-policy\";\n\nfunction observerRefKey(ref: AxisObserverRef): string {\n return typeof ref === \"string\" ? ref : ref.name;\n}\n\nfunction sensorRefKey(ref: AxisIntentSensorRef): string {\n return typeof ref === \"string\" ? ref : ref.name;\n}\n\nfunction sensorBindingKey(binding: AxisIntentSensorBinding): string {\n return `${binding.when}:${sensorRefKey(binding.ref)}`;\n}\n\nfunction mergeIntentSensorBindings(\n ...sensorGroups: Array<AxisIntentSensorBindingInput[] | undefined>\n): AxisIntentSensorBinding[] {\n const merged = new Map<string, AxisIntentSensorBinding>();\n\n for (const group of sensorGroups) {\n if (!Array.isArray(group)) continue;\n\n for (const input of group) {\n const binding = toIntentSensorBinding(input);\n const key = sensorBindingKey(binding);\n const existing = merged.get(key);\n\n if (\n !existing ||\n (typeof existing.ref === \"string\" && typeof binding.ref !== \"string\")\n ) {\n merged.set(key, binding);\n }\n }\n }\n\n return Array.from(merged.values());\n}\n\nfunction isAxisSensorInstance(value: unknown): value is AxisSensor {\n return (\n !!value &&\n typeof (value as AxisSensor).name === \"string\" &&\n typeof (value as AxisSensor).run === \"function\"\n );\n}\n\nfunction mergeObserverBindings(\n bindings: AxisObserverBinding[],\n): AxisObserverBinding[] {\n const merged = new Map<string, AxisObserverBinding>();\n\n for (const binding of bindings) {\n for (const ref of binding.refs) {\n const key = observerRefKey(ref);\n const existing = merged.get(key);\n if (!existing) {\n merged.set(key, {\n refs: [ref],\n tags: binding.tags ? [...new Set(binding.tags)] : undefined,\n events: binding.events ? [...new Set(binding.events)] : undefined,\n });\n continue;\n }\n\n existing.tags = Array.from(\n new Set([...(existing.tags || []), ...(binding.tags || [])]),\n );\n existing.events =\n existing.events === undefined || binding.events === undefined\n ? undefined\n : Array.from(new Set([...existing.events, ...binding.events]));\n }\n }\n\n return Array.from(merged.values());\n}\n\nfunction normalizeChainConfig(\n decoratorConfig?: RegisteredChainConfig,\n intentConfig?: boolean | ChainOptions,\n): RegisteredChainConfig | undefined {\n if (decoratorConfig) {\n return decoratorConfig;\n }\n\n if (!intentConfig) {\n return undefined;\n }\n\n if (intentConfig === true) {\n return { enabled: true };\n }\n\n return {\n enabled: true,\n ...intentConfig,\n };\n}\n\nexport interface IntentSchema {\n intent: string;\n version: number;\n bodyProfile: \"TLV_MAP\" | \"RAW\" | \"TLV_OBJ\" | \"TLV_ARR\";\n dtoName?: string;\n fields: Array<{\n name: string;\n tlv: number;\n kind: IntentTlvField[\"kind\"];\n required?: boolean;\n maxLen?: number;\n max?: string;\n scope?: \"header\" | \"body\";\n }>;\n}\n\n/**\n * Represents the outcome of an AXIS intent execution.\n *\n * @interface AxisEffect\n */\nexport interface AxisEffect {\n /** Whether the intent was processed successfully at the application level */\n ok: boolean;\n /** A descriptive string classifier for the result (e.g., 'FILE_CREATED', 'PONG') */\n effect: string;\n /** Optional binary payload (body) to be returned to the requester */\n body?: Uint8Array;\n /** Optional custom TLV headers to be included in the response frame */\n headers?: Map<number, Uint8Array>;\n /** Optional metadata for internal logging or audit (not sent to client) */\n metadata?: any;\n}\n\n/**\n * Summary of all intents and policies registered under a handler class.\n */\nexport interface HandlerSummary {\n /** Handler class name (e.g. 'UsersHandler') */\n handler: string;\n /** Intent namespace prefix from @Handler('auth') */\n prefix?: string;\n /** All intents registered under this handler */\n intents: string[];\n /** True if any intent in this handler is public */\n isPublic: boolean;\n /** True if any intent in this handler is anonymous-accessible */\n isAnonymous: boolean;\n /** True if any intent in this handler is authorized-session-only */\n isAuthorized: boolean;\n /** Union of all required proof kinds across intents */\n requiredProof?: RequiredProofKind[];\n /** Contract metadata (typically class-level, first found wins) */\n contract?: Record<string, any>;\n /** Sensitivity level (first found wins) */\n sensitivity?: SensitivityLevel;\n /** Rate limit config (first found wins) */\n rateLimit?: AxisRateLimitConfig;\n /** Capsule policy (first found wins) */\n capsulePolicy?: CapsulePolicyOptions;\n /** Class-level sensor bindings from @HandlerSensors (applied before every intent in this handler) */\n classSensors?: AxisIntentSensorBinding[];\n /** Class-level observer bindings from @Handler({ observe: [...] }) */\n classObservers?: AxisObserverBinding[];\n}\n\n/**\n * IntentRouter\n *\n * The central dispatching mechanism of the AXIS backend.\n * Maps binary intents (identified by their name in the header) to specialized handlers.\n *\n * **Features:**\n * 1. **Built-in Fast Path:** Handles high-frequency system intents (ping, time, echo) directly.\n * 2. **Dynamic Handler Registration:** Allows modules to register handlers at runtime.\n * 3. **Decorator-driven Registration:** Uses {@link registerHandler} to auto-register `@Intent`-decorated methods.\n * 4. **Polymorphic Handlers:** Supports both raw function handlers and object-based `{ handle }` handlers.\n *\n * @class IntentRouter\n */\nexport class IntentRouter {\n private readonly logger = createAxisLogger(IntentRouter.name);\n private readonly decoder = new TextDecoder();\n private readonly encoder = new TextEncoder();\n private readonly dependencyResolver?: AxisDependencyResolver;\n private readonly observerDispatcher?: ObserverDispatcherService;\n private readonly sensorRegistry?: SensorRegistry;\n\n /** Internal registry of dynamic intent handlers */\n private handlers = new Map<string, any>();\n\n /** Per-intent sensor refs (resolved through SensorRegistry at call time) */\n private intentSensors = new Map<string, AxisIntentSensorBinding[]>();\n\n /** Per-intent handler identifier (e.g. UsersHandler.usersPage) */\n private intentHandlerRefs = new Map<string, string>();\n\n /** Per-intent body decoders */\n private intentDecoders = new Map<string, (buf: Buffer) => any>();\n\n /** Per-intent TLV schemas */\n private intentSchemas = new Map<string, IntentSchema>();\n\n /** Per-intent custom validators */\n private intentValidators = new Map<string, Map<number, TlvValidatorFn[]>>();\n\n /** Per-intent operation kind */\n private intentKinds = new Map<string, IntentKind>();\n\n /** Per-intent chain configuration */\n private intentChains = new Map<string, RegisteredChainConfig>();\n\n /** Per-intent observer bindings */\n private intentObservers = new Map<string, AxisObserverBinding[]>();\n\n /** Per-intent capsule policies */\n private intentCapsulePolicies = new Map<string, CapsulePolicyOptions>();\n\n /** Per-intent sensitivity level */\n private intentSensitivity = new Map<string, SensitivityLevel>();\n\n /** Per-intent execution contract overrides */\n private intentContracts = new Map<string, Record<string, any>>();\n\n /** Per-intent required proof kinds */\n private intentRequiredProof = new Map<string, RequiredProofKind[]>();\n\n /** Per-intent rate limit config */\n private intentRateLimits = new Map<string, AxisRateLimitConfig>();\n\n /** CCE handler registry */\n private cceHandlers = new Map<string, CceHandler>();\n\n /** CCE pipeline configuration (set via configureCce) */\n private ccePipelineConfig: Omit<CcePipelineConfig, \"handlers\"> | null = null;\n\n /** Reverse index: handler class name → list of registered intents */\n private handlerIntents = new Map<string, string[]>();\n /** Handler class name → intent namespace prefix (from @Handler('auth')) */\n private handlerPrefixes = new Map<string, string>();\n /** Handler namespace prefix → handler class name, used by `handler...intent` lookup. */\n private handlerByPrefix = new Map<string, string>();\n /** Intent → handler class name, avoids scanning handlerIntents for normal lookups. */\n private handlerByIntent = new Map<string, string>();\n /** Handler class name → class-level sensor bindings (from @HandlerSensors) */\n private handlerClassSensors = new Map<string, AxisIntentSensorBinding[]>();\n /** Handler class name → class-level observer bindings (from @Handler({ observe: [...] })) */\n private handlerClassObservers = new Map<string, AxisObserverBinding[]>();\n\n constructor(\n dependencyResolver?: AxisDependencyResolver,\n observerDispatcher?: ObserverDispatcherService,\n sensorRegistry?: SensorRegistry,\n ) {\n this.dependencyResolver = dependencyResolver;\n this.observerDispatcher = observerDispatcher;\n this.sensorRegistry = sensorRegistry;\n }\n\n getSchema(intent: string): IntentSchema | undefined {\n return this.intentSchemas.get(this.resolveIntentAlias(intent));\n }\n\n getValidators(intent: string): Map<number, TlvValidatorFn[]> | undefined {\n return this.intentValidators.get(this.resolveIntentAlias(intent));\n }\n\n has(intent: string): boolean {\n const resolved = this.resolveIntentAlias(intent);\n return this.handlers.has(resolved) || isBuiltinIntent(resolved);\n }\n\n /**\n * True only when the application registered a concrete handler.\n * Unlike `has()`, this intentionally ignores SDK built-in fallbacks so\n * discovery layers can override simple built-ins such as `system.ping`.\n */\n hasRegisteredHandler(intent: string): boolean {\n const resolved = this.resolveIntentAlias(intent);\n return this.handlers.has(resolved);\n }\n\n getRegisteredIntents(): string[] {\n return [...BUILTIN_INTENTS, ...this.handlers.keys()];\n }\n\n getIntentEntry(intent: string): {\n schema?: IntentSchema;\n validators?: Map<number, TlvValidatorFn[]>;\n hasSensors: boolean;\n builtin: boolean;\n kind?: IntentKind;\n chain?: RegisteredChainConfig;\n capsulePolicy?: CapsulePolicyOptions;\n observerCount: number;\n } | null {\n const resolved = this.resolveIntentAlias(intent);\n if (!this.has(resolved)) return null;\n return {\n schema: this.intentSchemas.get(resolved),\n validators: this.intentValidators.get(resolved),\n hasSensors: this.intentSensors.has(resolved),\n builtin: isBuiltinIntent(resolved),\n kind: this.intentKinds.get(resolved),\n chain: this.intentChains.get(resolved),\n capsulePolicy: this.intentCapsulePolicies.get(resolved),\n observerCount: this.getObservers(resolved).length,\n };\n }\n\n getChainConfig(intent: string): RegisteredChainConfig | undefined {\n return this.intentChains.get(this.resolveIntentAlias(intent));\n }\n\n getObservers(intent: string): AxisObserverBinding[] {\n return this.intentObservers.get(this.resolveIntentAlias(intent)) || [];\n }\n\n /**\n * Registers a handler for a specific intent.\n * Handlers can be functions: `(body, headers) => Promise<Uint8Array | AxisEffect>`\n * Or objects with a method: `handle(frame: AxisFrame) => Promise<AxisEffect>`\n *\n * @param {string} intent - The unique intent identifier (e.g., 'axis.vault.create')\n * @param {any} handler - The handler function or object\n */\n register(intent: string, handler: any) {\n // Keep compatibility with dynamic registration by allowing replacement,\n // but surface it because duplicate intents usually indicate discovery drift.\n if (this.handlers.has(intent)) {\n this.logger.warn(\n `Intent ${intent} is already registered; replacing handler`,\n );\n }\n\n this.handlers.set(intent, handler);\n if (typeof handler === \"function\" && handler.name) {\n this.intentHandlerRefs.set(intent, handler.name);\n } else if (handler && typeof handler === \"object\") {\n const objectName = handler.constructor?.name;\n if (objectName) {\n this.intentHandlerRefs.set(intent, `${objectName}.handle`);\n }\n } else {\n this.intentHandlerRefs.set(intent, `intent:${intent}`);\n }\n }\n\n /**\n * Automatically registers all `@Intent`-decorated methods from a handler instance.\n *\n * Reads the handler prefix from `@Handler` metadata (or falls back to `instance.name`),\n * then registers each `@Intent`-decorated method accordingly.\n *\n * @param {any} instance - The handler instance with `@Intent`-decorated methods\n */\n registerHandler(instance: any) {\n const handlerMeta = Reflect.getMetadata(\n HANDLER_METADATA_KEY,\n instance.constructor,\n );\n const prefix: string | undefined = handlerMeta?.intent || instance.name;\n\n const routes: IntentRoute[] =\n Reflect.getMetadata(INTENT_ROUTES_KEY, instance.constructor) || [];\n const routedMethods = new Set(\n routes.map((route) => String(route.methodName)),\n );\n\n // Read @HandlerSensors from the class (if any)\n const handlerSensors: AxisIntentSensorBindingInput[] =\n Reflect.getMetadata(HANDLER_SENSORS_KEY, instance.constructor) || [];\n const handlerObservers: AxisObserverBinding[] =\n Reflect.getMetadata(OBSERVER_BINDINGS_KEY, instance.constructor) || [];\n if (prefix) {\n this.trackHandlerMeta(\n instance.constructor.name,\n prefix,\n handlerSensors,\n handlerObservers,\n );\n }\n\n const proto = Object.getPrototypeOf(instance);\n\n for (const route of routes) {\n const intentName = route.absolute\n ? route.action\n : `${prefix}.${route.action}`;\n const fn = instance[route.methodName].bind(instance);\n\n if (route.frame) {\n this.register(intentName, { handle: fn });\n } else {\n this.register(intentName, fn);\n }\n this.intentHandlerRefs.set(\n intentName,\n `${instance.constructor.name}.${String(route.methodName)}`,\n );\n this.trackHandlerIntent(instance.constructor.name, intentName);\n\n this.registerIntentMeta(\n intentName,\n proto,\n String(route.methodName),\n handlerSensors,\n handlerObservers,\n );\n }\n\n for (const key of Object.getOwnPropertyNames(proto)) {\n if (routedMethods.has(key)) continue;\n\n const meta = Reflect.getMetadata(INTENT_METADATA_KEY, proto, key);\n if (!meta?.intent) continue;\n\n const intentName = meta.absolute\n ? meta.intent\n : `${prefix}.${meta.intent}`;\n\n if (!this.handlers.has(intentName)) {\n this.register(intentName, (instance as any)[key].bind(instance));\n }\n\n this.registerIntentMeta(\n intentName,\n proto,\n key,\n handlerSensors,\n handlerObservers,\n );\n this.trackHandlerIntent(instance.constructor.name, intentName);\n }\n }\n\n /**\n * Routes a decoded AXIS frame to the appropriate handler.\n *\n * **Precedence:**\n * 1. SDK meta-intents (`CHAIN.EXEC`, `INTENT.EXEC`)\n * 2. Dynamically registered handlers from modules\n * 3. Simple SDK built-in fallback (`system.ping`, `public.ping`, `system.time`, `system.echo`)\n *\n * Registered app handlers intentionally win over simple built-ins. This lets\n * applications attach sensors, rate limits, and custom responses to intents\n * like `system.ping` while keeping a default fallback for apps that do not\n * register their own handler.\n *\n * @param {AxisFrame} frame - The validated and decoded binary frame\n * @returns {Promise<AxisEffect>} The resulting effect of the execution\n * @throws {Error} If the intent header is missing or no handler is registered\n */\n async route(frame: AxisFrame): Promise<AxisEffect> {\n const start = process.hrtime();\n let intent = \"unknown\";\n let handlerRef: string | undefined;\n\n try {\n const intentBytes = frame.headers.get(TLV_INTENT);\n if (!intentBytes) throw new Error(\"Missing intent\");\n intent = this.resolveIntentAlias(this.decoder.decode(intentBytes));\n handlerRef = this.intentHandlerRefs.get(intent);\n const observerBindings = this.getObservers(intent);\n\n await this.emitIntentObservers(observerBindings, {\n event: \"intent.received\",\n timestamp: Date.now(),\n intent,\n handler: handlerRef,\n frame,\n });\n\n let effect: AxisEffect;\n\n effect = await this.routeResolvedIntent(intent, frame);\n\n await this.emitIntentObservers(observerBindings, {\n event: \"intent.completed\",\n timestamp: Date.now(),\n intent,\n handler: handlerRef,\n frame,\n effect,\n metadata: effect.metadata,\n });\n\n this.logIntent(intent, start, true);\n return effect;\n } catch (e: any) {\n await this.emitIntentObservers(this.getObservers(intent), {\n event: \"intent.failed\",\n timestamp: Date.now(),\n intent,\n handler: handlerRef,\n frame,\n error: e.message,\n });\n this.logIntent(intent, start, false, e.message);\n throw e;\n }\n }\n\n /**\n * Dispatches a resolved canonical intent to the correct execution path.\n * This keeps route() focused on observer/error lifecycle concerns.\n */\n private async routeResolvedIntent(\n intent: string,\n frame: AxisFrame,\n ): Promise<AxisEffect> {\n if (isChainExecIntent(intent)) {\n const chainRequest = this.parseChainRequestBody(frame.body);\n return this.executeChainRequest(frame, chainRequest);\n }\n\n if (isIntentExecIntent(intent)) {\n return this.routeIntentExec(frame);\n }\n\n if (this.handlers.has(intent)) {\n return this.routeRegisteredIntent(intent, frame);\n }\n\n const builtinEffect = routeSystemBuiltinIntent(\n intent,\n frame.body,\n this.encoder,\n );\n if (builtinEffect) {\n if (intent === \"system.ping\" || intent === \"public.ping\") {\n this.logger.debug(\"PING received\");\n }\n return builtinEffect;\n }\n\n return this.routeRegisteredIntent(intent, frame);\n }\n\n /**\n * Handles INTENT.EXEC by building an inner frame and routing it normally.\n * The recursive route call is intentional so sensors/observers/policies for\n * the inner intent stay identical to a direct request.\n */\n private async routeIntentExec(frame: AxisFrame): Promise<AxisEffect> {\n const execBody = this.parseIntentExecBody(frame.body);\n const innerIntent = execBody.intent;\n const innerArgs = execBody.args || {};\n\n if (!innerIntent) {\n throw new Error(\"INTENT.EXEC missing inner intent\");\n }\n\n this.logger.debug(`EXEC: routing to inner intent '${innerIntent}'`);\n\n const innerHeaders = new Map(frame.headers);\n innerHeaders.set(TLV_INTENT, this.encoder.encode(innerIntent));\n\n const inlineCapsule = this.toInlineCapsuleRecord(execBody.capsule);\n const capsuleId = this.extractInlineCapsuleId(inlineCapsule);\n if (capsuleId) {\n innerHeaders.set(TLV_CAPSULE, this.encoder.encode(capsuleId));\n innerHeaders.set(TLV_PROOF_REF, this.encoder.encode(capsuleId));\n }\n\n const innerFrame = withAxisExecutionContext(\n {\n ...frame,\n headers: innerHeaders,\n body: this.encodeJson(innerArgs),\n },\n mergeAxisExecutionContext(getAxisExecutionContext(frame), {\n metaIntent: \"INTENT.EXEC\",\n actorId: this.getActorIdFromFrame(frame),\n inlineCapsule,\n }) || {},\n );\n\n return this.route(innerFrame);\n }\n\n /**\n * Executes an app-registered intent: before sensors, body decode, capsule\n * policy, handler invocation, then after sensors.\n */\n private async routeRegisteredIntent(\n intent: string,\n frame: AxisFrame,\n ): Promise<AxisEffect> {\n const handler = this.handlers.get(intent);\n if (!handler) {\n throw new Error(`Intent not found: ${intent}`);\n }\n\n const sensorBindings = this.intentSensors.get(intent);\n if (sensorBindings && sensorBindings.length > 0) {\n await this.runIntentSensors(sensorBindings, intent, frame, \"before\");\n }\n\n const decoder = this.intentDecoders.get(intent);\n const decodedBody = this.decodeIntentBody(intent, frame, decoder);\n\n this.enforceCapsulePolicy(\n intent,\n frame,\n decodedBody,\n this.getEffectiveCapsulePolicy(intent, frame),\n );\n\n const effect = await this.invokeRegisteredHandler(\n intent,\n handler,\n frame,\n decoder,\n decodedBody,\n );\n\n if (sensorBindings && sensorBindings.length > 0) {\n await this.runIntentSensors(sensorBindings, intent, frame, \"after\", {\n decodedBody,\n effect,\n });\n }\n\n return effect;\n }\n\n private decodeIntentBody(\n intent: string,\n frame: AxisFrame,\n decoder?: (buf: Buffer) => any,\n ): any {\n if (!decoder) return frame.body;\n\n try {\n return decoder(Buffer.from(frame.body));\n } catch (decodeErr: any) {\n throw new Error(\n `IntentBody decode failed for ${intent}: ${decodeErr.message}`,\n );\n }\n }\n\n private async invokeRegisteredHandler(\n intent: string,\n handler: any,\n frame: AxisFrame,\n decoder: ((buf: Buffer) => any) | undefined,\n decodedBody: any,\n ): Promise<AxisEffect> {\n if (typeof handler === \"function\") {\n const resultBody = decoder\n ? await handler(decodedBody, frame.headers)\n : await handler(frame.body, frame.headers);\n return {\n ok: true,\n effect: \"complete\",\n body: resultBody,\n };\n }\n\n if (typeof handler.handle === \"function\") {\n return handler.handle(frame);\n }\n\n if (typeof handler.execute === \"function\") {\n const bodyRes = decoder\n ? await handler.execute(decodedBody, frame.headers)\n : await handler.execute(frame.body, frame.headers);\n return {\n ok: true,\n effect: \"complete\",\n body: bodyRes,\n };\n }\n\n throw new Error(\n `Handler for ${intent} does not implement handle or execute`,\n );\n }\n\n private logIntent(\n intent: string,\n start: [number, number],\n ok: boolean,\n error?: string,\n ) {\n const diff = process.hrtime(start);\n const ms = (diff[0] * 1e3 + diff[1] / 1e6).toFixed(2);\n if (ok) {\n this.logger.debug(`${intent} completed in ${ms}ms`);\n } else {\n this.logger.warn(`${intent} failed in ${ms}ms - ${error}`);\n }\n }\n\n registerIntentMeta(\n intent: string,\n proto: object,\n methodName: string,\n handlerSensors?: AxisIntentSensorBindingInput[],\n handlerObservers?: AxisObserverBinding[],\n ): void {\n const decoder = Reflect.getMetadata(INTENT_BODY_KEY, proto, methodName);\n if (decoder) {\n this.intentDecoders.set(intent, decoder);\n }\n\n const intentSensors = Reflect.getMetadata(\n INTENT_SENSORS_KEY,\n proto,\n methodName,\n );\n const meta = Reflect.getMetadata(INTENT_METADATA_KEY, proto, methodName);\n const combined = mergeIntentSensorBindings(\n handlerSensors,\n Array.isArray(intentSensors) ? intentSensors : undefined,\n Array.isArray(meta?.is) ? meta.is : undefined,\n );\n if (combined.length > 0) {\n this.intentSensors.set(intent, combined);\n }\n\n const methodObservers: AxisObserverBinding[] =\n Reflect.getMetadata(OBSERVER_BINDINGS_KEY, proto, methodName) || [];\n const observers = mergeObserverBindings([\n ...(handlerObservers || []),\n ...methodObservers,\n ]);\n if (observers.length > 0) {\n this.intentObservers.set(intent, observers);\n }\n\n const handlerCapsulePolicy = Reflect.getMetadata(\n CAPSULE_POLICY_METADATA_KEY,\n proto.constructor,\n ) as CapsulePolicyOptions | undefined;\n const methodCapsulePolicy = Reflect.getMetadata(\n CAPSULE_POLICY_METADATA_KEY,\n proto,\n methodName,\n ) as CapsulePolicyOptions | undefined;\n const capsulePolicy = mergeCapsulePolicyOptions(\n handlerCapsulePolicy,\n methodCapsulePolicy,\n );\n if (capsulePolicy) {\n this.intentCapsulePolicies.set(intent, capsulePolicy);\n }\n\n if (meta) {\n this.storeSchema({ ...meta, intent });\n if (meta.kind) {\n this.intentKinds.set(intent, meta.kind);\n }\n\n const chainMeta = Reflect.getMetadata(\n CHAIN_METADATA_KEY,\n proto,\n methodName,\n ) as RegisteredChainConfig | undefined;\n const chainConfig = normalizeChainConfig(chainMeta, meta.chain);\n if (chainConfig) {\n this.intentChains.set(intent, chainConfig);\n }\n }\n\n // ── @Sensitivity ────────────────────────────────────────────────────────\n const methodSensitivity: SensitivityLevel | undefined = Reflect.getMetadata(\n SENSITIVITY_METADATA_KEY,\n proto,\n methodName,\n );\n const classSensitivity: SensitivityLevel | undefined = Reflect.getMetadata(\n SENSITIVITY_METADATA_KEY,\n proto.constructor,\n );\n const sensitivity =\n meta?.sensitivity ?? methodSensitivity ?? classSensitivity;\n if (sensitivity) {\n this.intentSensitivity.set(intent, sensitivity);\n }\n\n // ── @Contract ───────────────────────────────────────────────────────────\n const methodContract: Record<string, any> | undefined = Reflect.getMetadata(\n CONTRACT_METADATA_KEY,\n proto,\n methodName,\n );\n const classContract: Record<string, any> | undefined = Reflect.getMetadata(\n CONTRACT_METADATA_KEY,\n proto.constructor,\n );\n const contract = methodContract ?? classContract;\n if (contract) {\n this.intentContracts.set(intent, contract);\n }\n\n // Inline @Intent({ requiredProof }) wins over decorator/class defaults.\n const inlineRequiredProof = normalizeRequiredProof(meta?.requiredProof);\n const proofPolicy = resolveIntentProofPolicy(proto, methodName);\n const requiredProof = inlineRequiredProof ?? proofPolicy.requiredProof;\n if (requiredProof.length > 0) {\n this.intentRequiredProof.set(intent, requiredProof);\n }\n\n // ── @AxisRateLimit ───────────────────────────────────────────────────────\n const rateLimit: AxisRateLimitConfig | undefined = Reflect.getMetadata(\n AXIS_RATE_LIMIT_KEY,\n proto,\n methodName,\n );\n if (rateLimit) {\n this.intentRateLimits.set(intent, rateLimit);\n }\n }\n\n // ─── Policy Getters ────────────────────────────────────────────────────────\n\n getSensitivity(intent: string): SensitivityLevel | undefined {\n return this.intentSensitivity.get(this.resolveIntentAlias(intent));\n }\n\n getContract(intent: string): Record<string, any> | undefined {\n return this.intentContracts.get(this.resolveIntentAlias(intent));\n }\n\n getRequiredProof(intent: string): RequiredProofKind[] | undefined {\n return this.intentRequiredProof.get(this.resolveIntentAlias(intent));\n }\n\n isPublic(intent: string): boolean {\n return this.getRequiredProof(intent)?.includes(\"NONE\") ?? false;\n }\n\n isAnonymous(intent: string): boolean {\n return this.getRequiredProof(intent)?.includes(\"ANONYMOUS\") ?? false;\n }\n\n isAuthorized(intent: string): boolean {\n return this.getRequiredProof(intent)?.includes(\"AUTHORIZED\") ?? false;\n }\n\n getRateLimit(intent: string): AxisRateLimitConfig | undefined {\n return this.intentRateLimits.get(this.resolveIntentAlias(intent));\n }\n\n // ─── Handler-level Getters ─────────────────────────────────────────────────\n\n /** All intents registered under the given handler class name. */\n getHandlerIntents(handlerName: string): string[] {\n return this.handlerIntents.get(handlerName) ?? [];\n }\n\n /** Returns the handler class name that owns the given intent, or undefined if not found. */\n getHandlerByIntent(intent: string): string | undefined {\n const resolved = this.resolveIntentAlias(intent);\n return this.handlerByIntent.get(resolved);\n }\n\n /** All registered handler class names. */\n getRegisteredHandlers(): string[] {\n return Array.from(this.handlerIntents.keys());\n }\n\n /** The system/builtin intents (ping, time, echo, chain, intent.exec). */\n getSystemIntents(): string[] {\n return [...BUILTIN_INTENTS];\n }\n\n /** True if every intent in the handler is public, or any one is public — returns true if ANY intent is @AxisPublic. */\n isHandlerPublic(handlerName: string): boolean {\n return this.getHandlerIntents(handlerName).some((i) => this.isPublic(i));\n }\n\n /** True if any intent in the handler is @AxisAnonymous. */\n isHandlerAnonymous(handlerName: string): boolean {\n return this.getHandlerIntents(handlerName).some((i) => this.isAnonymous(i));\n }\n\n /** True if any intent in the handler is @AxisAuthorized. */\n isHandlerAuthorized(handlerName: string): boolean {\n return this.getHandlerIntents(handlerName).some((i) =>\n this.isAuthorized(i),\n );\n }\n\n /** Union of all required proof kinds across the handler's intents (deduplicated). */\n getHandlerProof(handlerName: string): RequiredProofKind[] | undefined {\n const all = this.getHandlerIntents(handlerName).flatMap(\n (i) => this.getRequiredProof(i) ?? [],\n );\n if (all.length === 0) return undefined;\n return [...new Set(all)];\n }\n\n /** Contract from the first intent that has one (class-level contracts propagate to all intents). */\n getHandlerContract(handlerName: string): Record<string, any> | undefined {\n for (const intent of this.getHandlerIntents(handlerName)) {\n const contract = this.getContract(intent);\n if (contract) return contract;\n }\n return undefined;\n }\n\n /** Sensitivity from the first intent that has one. */\n getHandlerSensitivity(handlerName: string): SensitivityLevel | undefined {\n for (const intent of this.getHandlerIntents(handlerName)) {\n const sensitivity = this.getSensitivity(intent);\n if (sensitivity) return sensitivity;\n }\n return undefined;\n }\n\n /** Rate limit from the first intent that has one. */\n getHandlerRateLimit(handlerName: string): AxisRateLimitConfig | undefined {\n for (const intent of this.getHandlerIntents(handlerName)) {\n const rateLimit = this.getRateLimit(intent);\n if (rateLimit) return rateLimit;\n }\n return undefined;\n }\n\n /** Capsule policy from the first intent that has one. */\n getHandlerCapsulePolicy(\n handlerName: string,\n ): CapsulePolicyOptions | undefined {\n for (const intent of this.getHandlerIntents(handlerName)) {\n const policy = this.intentCapsulePolicies.get(intent);\n if (policy) return policy;\n }\n return undefined;\n }\n\n /** Intent namespace prefix declared in @Handler('auth'). */\n getHandlerPrefix(handlerName: string): string | undefined {\n return this.handlerPrefixes.get(handlerName);\n }\n\n /** Class-level sensor bindings from @HandlerSensors (run before every intent in this handler). */\n getHandlerClassSensors(\n handlerName: string,\n ): AxisIntentSensorBinding[] | undefined {\n return this.handlerClassSensors.get(handlerName);\n }\n\n /** Class-level observer bindings from @Handler({ observe: [...] }). */\n getHandlerClassObservers(\n handlerName: string,\n ): AxisObserverBinding[] | undefined {\n return this.handlerClassObservers.get(handlerName);\n }\n\n /**\n * Resolves the optional `handler...intent` wire shorthand to a registered\n * canonical intent. Existing exact intent names always win.\n */\n resolveIntentAlias(intent: string): string {\n if (this.handlers.has(intent) || isBuiltinIntent(intent)) {\n return intent;\n }\n\n const separator = \"...\";\n const separatorIndex = intent.indexOf(separator);\n if (separatorIndex <= 0) return intent;\n\n const handlerKey = intent.slice(0, separatorIndex);\n const action = intent.slice(separatorIndex + separator.length);\n if (!handlerKey || !action) return intent;\n\n const handlerName =\n this.handlerByPrefix.get(handlerKey) ??\n (this.handlerIntents.has(handlerKey) ? handlerKey : undefined);\n if (!handlerName) return intent;\n\n const prefix = this.getHandlerPrefix(handlerName) ?? handlerKey;\n const handlerIntents = this.getHandlerIntents(handlerName);\n const prefixedIntent = `${prefix}.${action}`;\n if (handlerIntents.includes(prefixedIntent)) return prefixedIntent;\n\n if (handlerIntents.includes(action)) return action;\n\n const suffix = `.${action}`;\n const suffixMatches = handlerIntents.filter((candidate) =>\n candidate.endsWith(suffix),\n );\n return suffixMatches.length === 1 ? suffixMatches[0] : intent;\n }\n\n /** Full summary of a handler's registered intents and aggregated policies. Returns null if unknown. */\n getHandlerSummary(handlerName: string): HandlerSummary | null {\n const intents = this.getHandlerIntents(handlerName);\n if (intents.length === 0) return null;\n return {\n handler: handlerName,\n prefix: this.getHandlerPrefix(handlerName),\n intents,\n isPublic: this.isHandlerPublic(handlerName),\n isAnonymous: this.isHandlerAnonymous(handlerName),\n isAuthorized: this.isHandlerAuthorized(handlerName),\n requiredProof: this.getHandlerProof(handlerName),\n contract: this.getHandlerContract(handlerName),\n sensitivity: this.getHandlerSensitivity(handlerName),\n rateLimit: this.getHandlerRateLimit(handlerName),\n capsulePolicy: this.getHandlerCapsulePolicy(handlerName),\n classSensors: this.getHandlerClassSensors(handlerName),\n classObservers: this.getHandlerClassObservers(handlerName),\n };\n }\n\n /** Summary of all registered handlers keyed by handler class name. */\n getAllHandlerSummaries(): Map<string, HandlerSummary> {\n const result = new Map<string, HandlerSummary>();\n for (const handlerName of this.handlerIntents.keys()) {\n const summary = this.getHandlerSummary(handlerName);\n if (summary) result.set(handlerName, summary);\n }\n return result;\n }\n\n private async emitIntentObservers(\n bindings: AxisObserverBinding[],\n context: Parameters<ObserverDispatcherService[\"dispatch\"]>[1],\n ): Promise<void> {\n if (!this.observerDispatcher) return;\n await this.observerDispatcher.dispatch(\n bindings.length > 0 ? bindings : undefined,\n context,\n );\n }\n\n private async runIntentSensors(\n sensorBindings: AxisIntentSensorBinding[],\n intent: string,\n frame: AxisFrame,\n stage: \"before\" | \"after\",\n extras?: {\n decodedBody?: unknown;\n effect?: AxisEffect;\n },\n ): Promise<void> {\n for (const binding of sensorBindings) {\n if (binding.when !== stage && binding.when !== \"both\") continue;\n\n const sensorRef = binding.ref;\n const sensor = this.resolveIntentSensor(sensorRef);\n const sensorName = sensorRefKey(sensorRef);\n\n if (!sensor) {\n this.logger.error(\n `Intent sensor ${sensorName} is not registered for ${intent}`,\n );\n throw new Error(`SENSOR_MISSING:${sensorName}`);\n }\n\n const sensorInput: SensorInput = {\n rawBytes: frame.body,\n intent,\n body: frame.body,\n headerTLVs: frame.headers as any,\n frameBody: frame.body,\n metadata: {\n phase: \"intent\",\n stage,\n intent,\n schema: this.getSchema(intent),\n validators: this.getValidators(intent),\n decodedBody: extras?.decodedBody,\n effect: extras?.effect,\n },\n };\n\n if (sensor.supports && !sensor.supports(sensorInput)) continue;\n\n const decision = normalizeSensorDecision(await sensor.run(sensorInput));\n if (!decision.allow) {\n const reason = decision.reasons[0] || `${sensor.name}:DENIED`;\n this.logger.warn(\n `Intent sensor ${sensor.name} denied ${intent}: ${reason}`,\n );\n throw new Error(`SENSOR_DENY:${reason}`);\n }\n }\n }\n\n trackHandlerIntent(handlerName: string, intent: string): void {\n this.handlerByIntent.set(intent, handlerName);\n const existing = this.handlerIntents.get(handlerName);\n if (existing) {\n if (!existing.includes(intent)) existing.push(intent);\n } else {\n this.handlerIntents.set(handlerName, [intent]);\n }\n }\n\n /**\n * Stores class-level handler metadata (prefix, sensors, observers) gathered\n * at discovery time. Should be called once per handler class.\n */\n trackHandlerMeta(\n className: string,\n prefix: string,\n sensors: AxisIntentSensorBindingInput[],\n observers: AxisObserverBinding[],\n ): void {\n this.handlerPrefixes.set(className, prefix);\n this.handlerByPrefix.set(prefix, className);\n if (sensors.length > 0) {\n this.handlerClassSensors.set(\n className,\n mergeIntentSensorBindings(sensors),\n );\n }\n if (observers.length > 0) {\n this.handlerClassObservers.set(\n className,\n mergeObserverBindings(observers),\n );\n }\n }\n\n private resolveIntentSensor(\n ref: AxisIntentSensorRef,\n ): AxisSensor | undefined {\n const registered = this.sensorRegistry?.resolve(ref);\n if (registered) {\n return registered;\n }\n\n if (!this.dependencyResolver || typeof ref === \"string\") {\n return undefined;\n }\n\n const resolved = this.dependencyResolver.resolve(ref);\n return isAxisSensorInstance(resolved) ? resolved : undefined;\n }\n\n private getEffectiveCapsulePolicy(\n intent: string,\n frame: AxisFrame,\n ): CapsulePolicyOptions | undefined {\n const registeredPolicy = this.intentCapsulePolicies.get(intent);\n const chainConfig = this.intentChains.get(intent);\n const executionContext = getAxisExecutionContext(frame);\n\n const derivedScopes = Array.from(\n new Set([\n ...this.toScopeList(chainConfig?.capsuleScope),\n ...this.toScopeList(executionContext?.capsuleRef?.scope),\n ...this.toScopeList(executionContext?.chainStep?.capsuleScope),\n ]),\n );\n\n const requiresCapsule =\n chainConfig?.proofRequired ||\n executionContext?.capsuleRef?.proofRequired ||\n executionContext?.chainStep?.proofRequired ||\n executionContext?.chainEnvelope?.capsule?.proofRequired ||\n derivedScopes.length > 0;\n\n const derivedPolicy = requiresCapsule\n ? normalizeCapsulePolicyOptions({\n required: true,\n scopes: derivedScopes.length > 0 ? derivedScopes : undefined,\n })\n : undefined;\n\n return mergeCapsulePolicyOptions(registeredPolicy, derivedPolicy);\n }\n\n private enforceCapsulePolicy(\n intent: string,\n frame: AxisFrame,\n body: unknown,\n policy?: CapsulePolicyOptions,\n ): void {\n const executionContext = getAxisExecutionContext(frame);\n const inlineCapsuleRecord = this.toInlineCapsuleRecord(\n executionContext?.inlineCapsule,\n );\n const inlineCapsule = normalizeInlineCapsule(inlineCapsuleRecord);\n const normalizedPolicy = policy\n ? normalizeCapsulePolicyOptions(policy)\n : undefined;\n\n if (!inlineCapsule) {\n if (normalizedPolicy?.required) {\n if (\n normalizedPolicy.allowCapsuleRef &&\n this.hasCapsuleReference(frame) &&\n this.toScopeList(normalizedPolicy.scopes).length === 0 &&\n normalizedPolicy.intentBound === false\n ) {\n return;\n }\n\n throw new AxisError(\n this.hasCapsuleReference(frame)\n ? \"CAPSULE_CLAIMS_REQUIRED\"\n : \"CAPSULE_REQUIRED\",\n `Intent ${intent} requires an inline capsule for policy enforcement`,\n 403,\n { intent },\n );\n }\n\n return;\n }\n\n if (isInlineCapsuleExpired(inlineCapsule)) {\n throw new AxisError(\n \"CAPSULE_EXPIRED\",\n `Capsule for ${intent} is expired`,\n 403,\n { intent, capsuleId: inlineCapsule.id },\n );\n }\n\n const actorId =\n this.getActorIdFromFrame(frame) || executionContext?.actorId;\n if (\n actorId &&\n inlineCapsule.actorId &&\n !this.identifiersMatch(actorId, inlineCapsule.actorId)\n ) {\n throw new AxisError(\n \"CAPSULE_ACTOR_MISMATCH\",\n `Capsule actor does not match request actor for ${intent}`,\n 403,\n {\n intent,\n actorId,\n capsuleActorId: inlineCapsule.actorId,\n },\n );\n }\n\n const proofRef = this.getProofRefFromFrame(frame);\n if (\n proofRef &&\n inlineCapsule.id &&\n !this.identifiersMatch(proofRef, inlineCapsule.id)\n ) {\n throw new AxisError(\n \"CAPSULE_REF_MISMATCH\",\n `Capsule reference does not match request proof for ${intent}`,\n 403,\n {\n intent,\n proofRef,\n capsuleId: inlineCapsule.id,\n },\n );\n }\n\n const realm = this.getHeaderValue(frame, TLV_REALM);\n if (realm && inlineCapsule.realm && realm !== inlineCapsule.realm) {\n throw new AxisError(\n \"CAPSULE_REALM_MISMATCH\",\n `Capsule realm does not match request realm for ${intent}`,\n 403,\n { intent, realm, capsuleRealm: inlineCapsule.realm },\n );\n }\n\n const node = this.getHeaderValue(frame, TLV_NODE);\n if (node && inlineCapsule.node && node !== inlineCapsule.node) {\n throw new AxisError(\n \"CAPSULE_NODE_MISMATCH\",\n `Capsule node does not match request node for ${intent}`,\n 403,\n { intent, node, capsuleNode: inlineCapsule.node },\n );\n }\n\n const shouldCheckIntent = normalizedPolicy?.intentBound ?? true;\n if (\n shouldCheckIntent &&\n !inlineCapsuleAllowsIntent(inlineCapsule, intent)\n ) {\n throw new AxisError(\n \"CAPSULE_DENIED\",\n `Capsule does not authorize ${intent}`,\n 403,\n {\n intent,\n capsuleId: inlineCapsule.id,\n allowedIntents: inlineCapsule.intents,\n },\n );\n }\n\n const requiredScopes = this.toScopeList(normalizedPolicy?.scopes);\n if (requiredScopes.length === 0) {\n return;\n }\n\n let resolvedScopes: string[];\n try {\n resolvedScopes = resolvePolicyScopes(requiredScopes, {\n body,\n intent,\n actorId,\n chainId: executionContext?.chainEnvelope?.chainId,\n stepId: executionContext?.chainStep?.stepId,\n });\n } catch (error: any) {\n this.logger.error(`Scope template error for ${intent}: ${error.message}`);\n throw new AxisError(\n \"CAPSULE_SCOPE_TEMPLATE_UNRESOLVED\",\n \"Scope policy validation failed\",\n 400,\n { intent },\n );\n }\n\n if (\n !inlineCapsuleSatisfiesScopes(\n inlineCapsule,\n resolvedScopes,\n normalizedPolicy?.scopeMode ?? \"all\",\n )\n ) {\n throw new AxisError(\n \"SCOPE_MISMATCH\",\n `Capsule scopes do not satisfy ${intent}`,\n 403,\n {\n intent,\n requiredScopes: resolvedScopes,\n availableScopes: inlineCapsule.scopes || [],\n },\n );\n }\n }\n\n private async executeChainRequest(\n frame: AxisFrame,\n request: AxisChainRequest<unknown, Record<string, unknown>>,\n ): Promise<AxisEffect> {\n const { AxisChainExecutor } = await import(\"./axis-chain.executor\");\n const headerActorId = this.getActorIdFromFrame(frame);\n if (\n request.actorId &&\n headerActorId &&\n !this.identifiersMatch(request.actorId, headerActorId)\n ) {\n throw new AxisError(\n \"ACTOR_MISMATCH\",\n \"CHAIN.EXEC actorId conflicts with authenticated frame identity\",\n 403,\n );\n }\n const actorId = headerActorId || request.actorId;\n const inlineCapsule = this.toInlineCapsuleRecord(request.capsule);\n const capsuleId = this.extractInlineCapsuleId(inlineCapsule);\n const headers = new Map(frame.headers);\n\n if (capsuleId) {\n headers.set(TLV_CAPSULE, this.encoder.encode(capsuleId));\n headers.set(TLV_PROOF_REF, this.encoder.encode(capsuleId));\n }\n\n const baseFrame = withAxisExecutionContext(\n {\n ...frame,\n headers,\n },\n mergeAxisExecutionContext(getAxisExecutionContext(frame), {\n metaIntent: \"CHAIN.EXEC\",\n actorId,\n inlineCapsule,\n capsuleRef: request.envelope.capsule,\n chainEnvelope: request.envelope,\n }) || {},\n );\n\n const executor = new AxisChainExecutor(this, this.observerDispatcher);\n const result = await executor.execute(request.envelope, {\n actorId,\n baseFrame,\n });\n\n return {\n ok: result.status !== \"FAILED\",\n effect: \"chain.complete\",\n body: this.encodeJson(result),\n metadata: {\n chainId: result.chainId,\n status: result.status,\n },\n };\n }\n\n private parseIntentExecBody(bytes: Uint8Array): {\n intent: string;\n args?: unknown;\n capsule?: Record<string, unknown>;\n execNonce?: string;\n } {\n try {\n return JSON.parse(this.decoder.decode(bytes));\n } catch (error: any) {\n throw new Error(`INTENT.EXEC unwrapping failed: ${error.message}`);\n }\n }\n\n private parseChainRequestBody(\n bytes: Uint8Array,\n ): AxisChainRequest<unknown, Record<string, unknown>> {\n let jsonError: Error | undefined;\n\n try {\n const parsed = JSON.parse(this.decoder.decode(bytes));\n if (this.isChainRequestLike(parsed)) {\n return {\n envelope: parsed.envelope,\n capsule: this.toInlineCapsuleRecord(parsed.capsule),\n actorId:\n typeof parsed.actorId === \"string\" ? parsed.actorId : undefined,\n };\n }\n\n if (this.isChainEnvelopeLike(parsed)) {\n return { envelope: parsed };\n }\n } catch (error: any) {\n jsonError = error;\n }\n\n try {\n const decoded = decodeChainRequest<unknown, Record<string, unknown>>(\n bytes,\n );\n return {\n envelope: decoded.envelope,\n capsule: this.toInlineCapsuleRecord(decoded.capsule),\n actorId: decoded.actorId,\n };\n } catch (requestError: any) {\n try {\n return {\n envelope: decodeChainEnvelope(bytes) as AxisChainEnvelope,\n };\n } catch (envelopeError: any) {\n const reason = [\n jsonError?.message,\n requestError.message,\n envelopeError.message,\n ]\n .filter(Boolean)\n .join(\" | \");\n throw new Error(`CHAIN.EXEC decode failed: ${reason}`);\n }\n }\n }\n\n private isChainRequestLike(\n value: unknown,\n ): value is AxisChainRequest<unknown, Record<string, unknown>> {\n return (\n !!value &&\n typeof value === \"object\" &&\n \"envelope\" in value &&\n this.isChainEnvelopeLike((value as Record<string, unknown>).envelope)\n );\n }\n\n private isChainEnvelopeLike(value: unknown): value is AxisChainEnvelope {\n return (\n !!value &&\n typeof value === \"object\" &&\n typeof (value as Record<string, unknown>).chainId === \"string\" &&\n Array.isArray((value as Record<string, unknown>).steps)\n );\n }\n\n private encodeJson(value: unknown): Uint8Array {\n return this.encoder.encode(JSON.stringify(value));\n }\n\n private getActorIdFromFrame(frame: AxisFrame): string | undefined {\n return this.getHeaderValue(frame, TLV_ACTOR_ID);\n }\n\n private getProofRefFromFrame(frame: AxisFrame): string | undefined {\n return (\n this.getHeaderValue(frame, TLV_PROOF_REF) ||\n this.getHeaderValue(frame, TLV_CAPSULE)\n );\n }\n\n private hasCapsuleReference(frame: AxisFrame): boolean {\n return !!this.getProofRefFromFrame(frame);\n }\n\n private getHeaderValue(frame: AxisFrame, tag: number): string | undefined {\n const value = frame.headers.get(tag);\n if (!value || value.length === 0) {\n return undefined;\n }\n\n const decoded = this.decoder.decode(value);\n if (/^[\\x20-\\x7e]+$/.test(decoded)) {\n return decoded;\n }\n\n return Buffer.from(value).toString(\"hex\");\n }\n\n private identifiersMatch(left: string, right: string): boolean {\n const normalize = (value: string) =>\n /^[0-9a-f]+$/i.test(value) ? value.toLowerCase() : value;\n return normalize(left) === normalize(right);\n }\n\n private extractInlineCapsuleId(\n capsule?: Record<string, unknown>,\n ): string | undefined {\n const id = capsule?.id;\n return typeof id === \"string\" && id.length > 0 ? id : undefined;\n }\n\n private toInlineCapsuleRecord(\n value: unknown,\n ): Record<string, unknown> | undefined {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) {\n return undefined;\n }\n\n return value as Record<string, unknown>;\n }\n\n private toScopeList(value?: string | string[]): string[] {\n if (!value) {\n return [];\n }\n\n return Array.isArray(value) ? value : [value];\n }\n\n // ===========================================================================\n // CCE — Capsule-Carried Encryption Support\n // ===========================================================================\n\n /**\n * Configure the CCE pipeline.\n * Must be called before routeCce() can process encrypted requests.\n */\n configureCce(config: Omit<CcePipelineConfig, \"handlers\">): void {\n this.ccePipelineConfig = config;\n this.logger.log(\"CCE pipeline configured\");\n }\n\n /**\n * Register a CCE-encrypted intent handler.\n * CCE handlers receive decrypted payloads and execution context.\n */\n registerCceHandler(intent: string, handler: CceHandler): void {\n this.cceHandlers.set(intent, handler);\n this.logger.debug(`CCE handler registered: ${intent}`);\n }\n\n /**\n * Check if a CCE handler exists for the given intent.\n */\n hasCceHandler(intent: string): boolean {\n return this.cceHandlers.has(intent);\n }\n\n /**\n * Route a CCE-encrypted request through the full pipeline.\n *\n * Steps:\n * 1. Sensor chain (envelope validation → capsule verification → replay → decrypt)\n * 2. Execution context derivation\n * 3. Handler execution\n * 4. Response encryption\n * 5. Witness recording\n */\n async routeCce(envelope: CceRequestEnvelope): Promise<CcePipelineResult> {\n if (!this.ccePipelineConfig) {\n return {\n ok: false,\n error: {\n code: \"CCE_NOT_CONFIGURED\",\n message: \"CCE pipeline not configured. Call configureCce() first.\",\n },\n status: \"ERROR\",\n };\n }\n\n const config: CcePipelineConfig = {\n ...this.ccePipelineConfig,\n handlers: this.cceHandlers,\n };\n\n return executeCcePipeline(envelope, config);\n }\n\n private storeSchema(meta: {\n intent: string;\n tlv?: IntentTlvField[];\n dto?: Function;\n bodyProfile?: \"TLV_MAP\" | \"RAW\" | \"TLV_OBJ\" | \"TLV_ARR\";\n kind?: IntentKind;\n }): void {\n if (meta.dto) {\n if (meta.tlv && meta.tlv.length > 0) {\n this.logger.warn(\n `${meta.intent}: both 'dto' and 'tlv' specified - using dto, ignoring tlv`,\n );\n }\n\n const extracted = extractDtoSchema(meta.dto);\n const schema: IntentSchema = {\n intent: meta.intent,\n version: 1,\n bodyProfile: meta.bodyProfile || \"TLV_MAP\",\n dtoName: meta.dto.name || undefined,\n fields: extracted.fields.map((f) => ({\n name: f.name,\n tlv: f.tag,\n kind: f.kind,\n required: f.required,\n maxLen: f.maxLen,\n max: f.max,\n scope: f.scope,\n })),\n };\n\n this.intentSchemas.set(meta.intent, schema);\n\n if (extracted.validators.size > 0) {\n this.intentValidators.set(meta.intent, extracted.validators);\n }\n\n if (!this.intentDecoders.has(meta.intent)) {\n this.intentDecoders.set(meta.intent, buildDtoDecoder(meta.dto));\n }\n\n return;\n }\n\n if (!meta.tlv || meta.tlv.length === 0) return;\n\n const schema: IntentSchema = {\n intent: meta.intent,\n version: 1,\n bodyProfile: meta.bodyProfile || \"TLV_MAP\",\n fields: meta.tlv.map((f) => ({\n name: f.name,\n tlv: f.tag,\n kind: f.kind,\n required: f.required,\n maxLen: f.maxLen,\n max: f.max,\n scope: f.scope,\n })),\n };\n\n this.intentSchemas.set(meta.intent, schema);\n }\n}\n","/**\n * Sensor Execution Bands\n *\n * Semantic groupings for the AXIS sensor chain.\n * Each band has 50–100 slots for ordering sensors within it.\n *\n * WIRE (0–39): Raw bytes, no decode. PRE_DECODE phase.\n * IDENTITY (40–89): Who is this? IP, access, proof, capsule. POST_DECODE.\n * POLICY (90–139): Are they allowed? Sig, capability, rate limit. POST_DECODE.\n * CONTENT (140–199): What's in the frame? TLV, body, schema, files. POST_DECODE.\n * BUSINESS (200–299): Business context. Stream, WS, timeout. POST_DECODE.\n * AUDIT (900+): Finalization, logging. POST_DECODE.\n */\nexport const BAND = {\n /** Pre-decode: raw byte validation, geo, budget, magic */\n WIRE: 0,\n /** Post-decode: identity resolution, capsule, proof */\n IDENTITY: 40,\n /** Post-decode: authorization, signature, rate limiting */\n POLICY: 90,\n /** Post-decode: content validation, TLV, schema, files */\n CONTENT: 140,\n /** Post-decode: business logic sensors, streams, WS */\n BUSINESS: 200,\n /** Post-decode: audit, logging (always last) */\n AUDIT: 900,\n} as const;\n\nexport type SensorBand = keyof typeof BAND;\n\n/** Sensors with order below this boundary run in PRE_DECODE phase (middleware) */\nexport const PRE_DECODE_BOUNDARY = 40;\n","/**\n * Deterministic JSON serialization for observation hashing.\n *\n * Sorts object keys alphabetically and strips `undefined` values\n * so that two structurally equivalent observations always produce\n * the same string — required for reproducible SHA-256 hashing.\n */\n\nfunction normalize(value: unknown): unknown {\n if (Array.isArray(value)) {\n return value.map((item) => normalize(item));\n }\n\n if (value && typeof value === 'object') {\n const entries = Object.entries(value as Record<string, unknown>)\n .filter(([, nested]) => nested !== undefined)\n .sort(([left], [right]) => left.localeCompare(right));\n\n const normalized: Record<string, unknown> = {};\n for (const [key, nested] of entries) {\n normalized[key] = normalize(nested);\n }\n return normalized;\n }\n\n return value;\n}\n\nexport function stableJsonStringify(value: unknown): string {\n return JSON.stringify(normalize(value));\n}\n","import { AxisObservation } from '../axis-observation';\nimport { ObservationQueueMessage } from './observation-queue.types';\n\nexport interface ObservationStreamEntry {\n id: string;\n message: ObservationQueueMessage;\n}\n\nexport function buildQueueMessage(\n observation: AxisObservation,\n sourceNodeId: string,\n previous?: ObservationQueueMessage,\n lastError?: string,\n): ObservationQueueMessage {\n const now = Date.now();\n\n return {\n v: 1,\n observation,\n attempts: previous ? previous.attempts + 1 : 0,\n firstEnqueuedAt: previous?.firstEnqueuedAt ?? now,\n lastEnqueuedAt: now,\n sourceNodeId,\n lastError,\n };\n}\n\nexport function encodeQueueMessage(message: ObservationQueueMessage): string {\n return JSON.stringify(message);\n}\n\nexport function decodeQueueMessage(\n raw: string,\n): ObservationQueueMessage | null {\n try {\n const parsed = JSON.parse(raw) as ObservationQueueMessage;\n if (!parsed || parsed.v !== 1 || !parsed.observation?.id) {\n return null;\n }\n return parsed;\n } catch {\n return null;\n }\n}\n\nexport function parseStreamEntries(raw: any): ObservationStreamEntry[] {\n if (!Array.isArray(raw)) {\n return [];\n }\n\n const entries: ObservationStreamEntry[] = [];\n for (const streamRow of raw) {\n if (!Array.isArray(streamRow) || streamRow.length < 2) {\n continue;\n }\n\n const messageRows = streamRow[1];\n if (!Array.isArray(messageRows)) {\n continue;\n }\n\n for (const row of messageRows) {\n if (!Array.isArray(row) || row.length < 2) {\n continue;\n }\n\n const id = String(row[0]);\n const fields = Array.isArray(row[1]) ? row[1] : [];\n const fieldMap = fieldsToMap(fields);\n const payload = fieldMap.get('payload');\n if (!payload) {\n continue;\n }\n\n const message = decodeQueueMessage(payload);\n if (!message) {\n continue;\n }\n\n entries.push({ id, message });\n }\n }\n\n return entries;\n}\n\nexport function parseAutoClaimEntries(raw: any): ObservationStreamEntry[] {\n if (!Array.isArray(raw) || raw.length < 2) {\n return [];\n }\n\n const rows = Array.isArray(raw[1]) ? raw[1] : [];\n return parseStreamEntries([['stream', rows]]);\n}\n\nfunction fieldsToMap(fields: any[]): Map<string, string> {\n const map = new Map<string, string>();\n for (let i = 0; i < fields.length; i += 2) {\n const key = fields[i];\n const value = fields[i + 1];\n if (key !== undefined && value !== undefined) {\n map.set(String(key), String(value));\n }\n }\n return map;\n}\n","import { createHash } from 'crypto';\n\nimport { AxisObservation } from '../axis-observation';\nimport { stableJsonStringify } from './stable-json';\n\n/**\n * Witness summary — a compact proof-of-observation payload\n * signed by the node that observed the execution.\n */\nexport interface ObservationWitnessSummary {\n intent?: string;\n actorId?: string;\n decision?: string;\n statusCode?: number;\n durationMs?: number;\n sensorCount: number;\n stageCount: number;\n}\n\n/**\n * Unsigned witness artifact — everything except the signature.\n * The backend adds `kid`, `sig`, and `alg` using its keyring.\n */\nexport interface UnsignedObservationWitness {\n v: 1;\n observationId: string;\n payloadHash: string;\n sealedAt: number;\n summary: ObservationWitnessSummary;\n}\n\n/**\n * Build the canonical JSON representation of an observation.\n *\n * Only includes structurally meaningful fields (no transient state).\n * Keys are sorted deterministically via `stableJsonStringify` so that\n * the same observation always produces the same string.\n */\nexport function canonicalizeObservation(obs: AxisObservation): string {\n const obj: Record<string, unknown> = {\n id: obs.id,\n startMs: obs.startMs,\n endMs: obs.endMs,\n transport: obs.transport,\n ip: obs.ip,\n intent: obs.intent,\n actorId: obs.actorId,\n capsuleId: obs.capsuleId,\n decision: obs.decision,\n resultCode: obs.resultCode,\n statusCode: obs.statusCode,\n durationMs: obs.durationMs,\n stages: obs.stages.map((s) => ({\n name: s.name,\n status: s.status,\n startMs: s.startMs,\n endMs: s.endMs,\n durationMs: s.durationMs,\n reason: s.reason,\n code: s.code,\n })),\n sensors: obs.sensors.map((s) => ({\n name: s.name,\n allowed: s.allowed,\n riskScore: s.riskScore,\n durationMs: s.durationMs,\n reasons: s.reasons,\n code: s.code,\n })),\n };\n\n return stableJsonStringify(obj);\n}\n\n/**\n * SHA-256 hash of the canonical observation payload.\n */\nexport function hashObservation(obs: AxisObservation): string {\n const canonical = canonicalizeObservation(obs);\n return createHash('sha256').update(canonical).digest('hex');\n}\n\n/**\n * Build an unsigned witness from a finalized observation.\n *\n * Returns `null` if the observation has not been finalized\n * (no `decision` or `endMs`).\n *\n * The caller (backend WitnessBuilder) adds `kid`, `sig`, `alg`\n * using its keyring.\n */\nexport function buildUnsignedWitness(\n obs: AxisObservation,\n): UnsignedObservationWitness | null {\n if (!obs.decision || !obs.endMs) {\n return null;\n }\n\n return {\n v: 1,\n observationId: obs.id,\n payloadHash: hashObservation(obs),\n sealedAt: Date.now(),\n summary: {\n intent: obs.intent,\n actorId: obs.actorId,\n decision: obs.decision,\n statusCode: obs.statusCode,\n durationMs: obs.durationMs,\n sensorCount: obs.sensors.length,\n stageCount: obs.stages.length,\n },\n };\n}\n","/**\n * Observer Truth Scoring\n *\n * Extends the AxisObservation model with truth verification:\n * - Expected vs actual outcome comparison\n * - Truth status classification\n * - Anomaly detection\n * - Deed confirmation\n *\n * This transforms the Observer from a \"logger\" into a \"verifier\" —\n * the moment where execution becomes witnessed truth.\n */\n\nimport type { AxisObservation, ObservationStage } from '../axis-observation';\n\n// ────────────────────────────────────────────────────────────────────────────\n// Truth Status\n// ────────────────────────────────────────────────────────────────────────────\n\nexport type TruthStatus =\n | 'confirmed' // Execution matched expected outcome exactly\n | 'partial' // Some expectations met, some could not be verified\n | 'uncertain' // Unable to determine correctness\n | 'failed' // Execution produced wrong or error result\n | 'disputed'; // Result contradicts expected state\n\n// ────────────────────────────────────────────────────────────────────────────\n// Expected Outcome\n// ────────────────────────────────────────────────────────────────────────────\n\nexport interface ExpectedOutcome {\n /** Expected final decision */\n decision?: 'ALLOW' | 'DENY';\n /** Expected effect label from handler */\n effect?: string;\n /** Expected status code */\n statusCode?: number;\n /** Whether the handler should succeed */\n ok?: boolean;\n /** Expected state changes (key-value) */\n stateChanges?: Record<string, unknown>;\n /** Maximum acceptable duration in ms */\n maxDurationMs?: number;\n /** Minimum required sensor count */\n minSensorsPassed?: number;\n /** custom assertions: field path → expected value */\n assertions?: Record<string, unknown>;\n}\n\n// ────────────────────────────────────────────────────────────────────────────\n// Anomaly\n// ────────────────────────────────────────────────────────────────────────────\n\nexport type AnomalyLevel = 'info' | 'warning' | 'critical';\n\nexport interface Anomaly {\n code: string;\n level: AnomalyLevel;\n message: string;\n field?: string;\n expected?: unknown;\n actual?: unknown;\n}\n\n// ────────────────────────────────────────────────────────────────────────────\n// Truth Verdict\n// ────────────────────────────────────────────────────────────────────────────\n\nexport interface TruthVerdict {\n /** Overall truth status */\n status: TruthStatus;\n /** Confidence score 0.0 – 1.0 */\n confidence: number;\n /** Detected anomalies */\n anomalies: Anomaly[];\n /** Number of checks that passed */\n passedChecks: number;\n /** Total number of checks performed */\n totalChecks: number;\n /** Timestamp of verdict */\n verifiedAt: number;\n /** Whether this observation constitutes a confirmed deed */\n isDeed: boolean;\n}\n\n// ────────────────────────────────────────────────────────────────────────────\n// Scoring Logic\n// ────────────────────────────────────────────────────────────────────────────\n\n/**\n * Score an observation against an expected outcome.\n * If no expectedOutcome is provided, performs structural verification only.\n */\nexport function scoreTruth(\n obs: AxisObservation,\n expected?: ExpectedOutcome,\n): TruthVerdict {\n const anomalies: Anomaly[] = [];\n let passedChecks = 0;\n let totalChecks = 0;\n\n // ── Structural checks (always run) ──\n\n // 1. Observation must be finalized\n totalChecks++;\n if (obs.endMs && obs.decision) {\n passedChecks++;\n } else {\n anomalies.push({\n code: 'OBS_NOT_FINALIZED',\n level: 'critical',\n message: 'Observation was not finalized',\n });\n }\n\n // 2. Must have at least one stage\n totalChecks++;\n if (obs.stages.length > 0) {\n passedChecks++;\n } else {\n anomalies.push({\n code: 'OBS_NO_STAGES',\n level: 'warning',\n message: 'Observation has no execution stages',\n });\n }\n\n // 3. No failed stages (unless decision is DENY)\n totalChecks++;\n const failedStages = obs.stages.filter((s) => s.status === 'fail');\n if (failedStages.length === 0 || obs.decision === 'DENY') {\n passedChecks++;\n } else {\n for (const stage of failedStages) {\n anomalies.push({\n code: 'STAGE_FAILED',\n level: 'warning',\n message: `Stage '${stage.name}' failed: ${stage.reason ?? 'unknown'}`,\n field: `stages.${stage.name}`,\n });\n }\n }\n\n // 4. All sensors should have valid timing\n totalChecks++;\n const invalidSensors = obs.sensors.filter((s) => s.durationMs < 0);\n if (invalidSensors.length === 0) {\n passedChecks++;\n } else {\n anomalies.push({\n code: 'SENSOR_INVALID_TIMING',\n level: 'warning',\n message: `${invalidSensors.length} sensor(s) have negative duration`,\n });\n }\n\n // 5. Duration sanity\n totalChecks++;\n if (obs.durationMs !== undefined && obs.durationMs >= 0 && obs.durationMs < 300_000) {\n passedChecks++;\n } else {\n anomalies.push({\n code: 'OBS_DURATION_ANOMALY',\n level: 'warning',\n message: `Observation duration ${obs.durationMs}ms is suspicious`,\n actual: obs.durationMs,\n });\n }\n\n // ── Expected outcome checks (if provided) ──\n\n if (expected) {\n // Decision match\n if (expected.decision !== undefined) {\n totalChecks++;\n if (obs.decision === expected.decision) {\n passedChecks++;\n } else {\n anomalies.push({\n code: 'DECISION_MISMATCH',\n level: 'critical',\n message: `Expected decision '${expected.decision}', got '${obs.decision}'`,\n field: 'decision',\n expected: expected.decision,\n actual: obs.decision,\n });\n }\n }\n\n // Status code match\n if (expected.statusCode !== undefined) {\n totalChecks++;\n if (obs.statusCode === expected.statusCode) {\n passedChecks++;\n } else {\n anomalies.push({\n code: 'STATUS_MISMATCH',\n level: 'warning',\n message: `Expected status ${expected.statusCode}, got ${obs.statusCode}`,\n field: 'statusCode',\n expected: expected.statusCode,\n actual: obs.statusCode,\n });\n }\n }\n\n // Effect match\n if (expected.effect !== undefined) {\n totalChecks++;\n if (obs.resultCode === expected.effect || obs.facts?.effect === expected.effect) {\n passedChecks++;\n } else {\n anomalies.push({\n code: 'EFFECT_MISMATCH',\n level: 'warning',\n message: `Expected effect '${expected.effect}', got '${obs.resultCode}'`,\n field: 'resultCode',\n expected: expected.effect,\n actual: obs.resultCode,\n });\n }\n }\n\n // Max duration\n if (expected.maxDurationMs !== undefined) {\n totalChecks++;\n if (obs.durationMs !== undefined && obs.durationMs <= expected.maxDurationMs) {\n passedChecks++;\n } else {\n anomalies.push({\n code: 'DURATION_EXCEEDED',\n level: 'warning',\n message: `Execution took ${obs.durationMs}ms, max allowed ${expected.maxDurationMs}ms`,\n field: 'durationMs',\n expected: expected.maxDurationMs,\n actual: obs.durationMs,\n });\n }\n }\n\n // Min sensors passed\n if (expected.minSensorsPassed !== undefined) {\n totalChecks++;\n const passed = obs.sensors.filter((s) => s.allowed).length;\n if (passed >= expected.minSensorsPassed) {\n passedChecks++;\n } else {\n anomalies.push({\n code: 'INSUFFICIENT_SENSORS',\n level: 'warning',\n message: `Only ${passed} sensors passed, minimum required ${expected.minSensorsPassed}`,\n field: 'sensors',\n expected: expected.minSensorsPassed,\n actual: passed,\n });\n }\n }\n\n // Custom assertions against facts\n if (expected.assertions) {\n for (const [key, expectedValue] of Object.entries(expected.assertions)) {\n totalChecks++;\n const actualValue = obs.facts[key];\n if (deepEqual(actualValue, expectedValue)) {\n passedChecks++;\n } else {\n anomalies.push({\n code: 'ASSERTION_FAILED',\n level: 'warning',\n message: `Assertion failed for facts.${key}`,\n field: `facts.${key}`,\n expected: expectedValue,\n actual: actualValue,\n });\n }\n }\n }\n }\n\n // ── Compute verdict ──\n\n const confidence = totalChecks > 0 ? passedChecks / totalChecks : 0;\n const hasCritical = anomalies.some((a) => a.level === 'critical');\n const status = computeTruthStatus(confidence, hasCritical, anomalies.length);\n const isDeed = status === 'confirmed' || (status === 'partial' && !hasCritical);\n\n return {\n status,\n confidence,\n anomalies,\n passedChecks,\n totalChecks,\n verifiedAt: Date.now(),\n isDeed,\n };\n}\n\nfunction computeTruthStatus(\n confidence: number,\n hasCritical: boolean,\n anomalyCount: number,\n): TruthStatus {\n if (hasCritical) return 'failed';\n if (confidence === 1.0) return 'confirmed';\n if (confidence >= 0.8) return 'partial';\n if (confidence >= 0.5) return 'uncertain';\n return 'disputed';\n}\n\n// ────────────────────────────────────────────────────────────────────────────\n// Attach truth to observation\n// ────────────────────────────────────────────────────────────────────────────\n\nexport interface ObservedDeed {\n observation: AxisObservation;\n verdict: TruthVerdict;\n}\n\n/**\n * Verify an observation and produce an ObservedDeed.\n * This is the moment where execution becomes accountable reality.\n */\nexport function verifyObservation(\n obs: AxisObservation,\n expected?: ExpectedOutcome,\n): ObservedDeed {\n const verdict = scoreTruth(obs, expected);\n return { observation: obs, verdict };\n}\n\n// ────────────────────────────────────────────────────────────────────────────\n// Helpers\n// ────────────────────────────────────────────────────────────────────────────\n\nfunction deepEqual(a: unknown, b: unknown): boolean {\n if (a === b) return true;\n if (a === null || b === null) return false;\n if (typeof a !== typeof b) return false;\n if (typeof a !== 'object') return String(a) === String(b);\n\n if (Array.isArray(a) && Array.isArray(b)) {\n if (a.length !== b.length) return false;\n return a.every((v, i) => deepEqual(v, b[i]));\n }\n\n if (Array.isArray(a) !== Array.isArray(b)) return false;\n\n const aKeys = Object.keys(a as Record<string, unknown>);\n const bKeys = Object.keys(b as Record<string, unknown>);\n if (aKeys.length !== bKeys.length) return false;\n\n return aKeys.every((key) =>\n deepEqual(\n (a as Record<string, unknown>)[key],\n (b as Record<string, unknown>)[key],\n ),\n );\n}\n","import { MAX_BODY_LEN } from '../../core/constants';\n\n/**\n * Minimal request context needed by ResponseObserver.\n * Compatible with the full AxisContext from schemas.\n */\nexport interface ResponseObserverContext {\n actorId: string;\n intent: string;\n}\n\n/**\n * Response contract that the observer validates.\n */\nexport interface ResponseContract {\n /** Whether the handler reported success */\n ok: boolean;\n /** The effect label returned by the handler */\n effect: string;\n /** Response body bytes (may be undefined for error responses) */\n body?: Uint8Array;\n /** Response TLV headers */\n headers?: Map<number, Uint8Array>;\n}\n\n/**\n * Result of observer validation.\n */\nexport interface ObserverVerdict {\n /** true = response passes all checks */\n passed: boolean;\n /** Machine-readable code if rejected */\n code?: string;\n /** Human-readable reason if rejected */\n reason?: string;\n}\n\n/** TLV tags that must never appear in a response (ACTOR_ID, PROOF_TYPE, PROOF_REF). */\nconst SENSITIVE_RESPONSE_TAGS = [4, 5, 6];\n\n/**\n * ResponseObserver — post-execution policy gate (protocol layer).\n *\n * Validates that:\n * 1. Effect is a valid non-empty string.\n * 2. Mandatory response body exists for successful results.\n * 3. No sensitive data leaks in response headers.\n * 4. Response size is within protocol limits.\n * 5. Effect does not expose internal error details.\n *\n * This is a defense-in-depth layer — primary correctness comes from\n * deterministic execution, signature verification, and nonce/replay controls.\n *\n * On failure, the engine returns a safe error instead of the original response.\n */\nexport function verifyResponse(\n ctx: ResponseObserverContext,\n response: ResponseContract,\n): ObserverVerdict {\n // 1. Effect must be a non-empty string\n if (!response.effect || typeof response.effect !== 'string') {\n return {\n passed: false,\n code: 'OBSERVER_INVALID_EFFECT',\n reason: 'Response effect is missing or invalid',\n };\n }\n\n // 2. Successful responses must have a body\n if (response.ok && (!response.body || response.body.length === 0)) {\n return {\n passed: false,\n code: 'OBSERVER_EMPTY_BODY',\n reason: 'Successful response must contain a body',\n };\n }\n\n // 3. Response body must not exceed protocol limits\n if (response.body && response.body.length > MAX_BODY_LEN) {\n return {\n passed: false,\n code: 'OBSERVER_BODY_OVERFLOW',\n reason: `Response body exceeds ${MAX_BODY_LEN} bytes`,\n };\n }\n\n // 4. Verify no sensitive TLV tags leak in response headers\n if (response.headers) {\n for (const tag of SENSITIVE_RESPONSE_TAGS) {\n if (response.headers.has(tag)) {\n return {\n passed: false,\n code: 'OBSERVER_DATA_LEAK',\n reason: `Response must not contain sensitive TLV tag ${tag}`,\n };\n }\n }\n }\n\n // 5. Effect should not expose internal error details\n if (\n response.effect.includes('Error:') ||\n response.effect.includes('stack') ||\n response.effect.includes('at /')\n ) {\n return {\n passed: false,\n code: 'OBSERVER_INFO_LEAK',\n reason: 'Response effect may contain internal error details',\n };\n }\n\n return { passed: true };\n}\n\n/**\n * Function type and value alias for the response observer validator.\n */\nexport type ResponseObserver = (\n ctx: ResponseObserverContext,\n response: ResponseContract,\n) => ObserverVerdict;\n\nexport const ResponseObserver: ResponseObserver = verifyResponse;\n","export { encodeVarint, decodeVarint, varintLength } from '@nextera.one/axis-protocol';\n","import * as z from 'zod';\nimport type { AxisFrame as ProtocolAxisFrame } from '@nextera.one/axis-protocol';\n\nexport {\n decodeFrame,\n encodeFrame,\n getSignTarget,\n} from '@nextera.one/axis-protocol';\nexport type { AxisFrame, AxisBinaryFrame } from '@nextera.one/axis-protocol';\n\n/**\n * AxisFrame Schema\n *\n * Defines the logical structure of an AXIS frame using Zod for runtime validation.\n * This is used for internal processing after the low-level binary parsing is complete.\n */\nexport const AxisFrameZ: z.ZodType<ProtocolAxisFrame> = z.object({\n /** Flag bits for protocol control (e.g., encryption, compression) */\n flags: z.number().int().nonnegative(),\n /** A map of TLV headers where key=Tag and value=BinaryData */\n headers: z.map(\n z.number(),\n z.custom<Uint8Array>((v) => v instanceof Uint8Array),\n ),\n /** The main payload of the frame */\n body: z.custom<Uint8Array>((v) => v instanceof Uint8Array),\n /** The cryptographic signature covering the frame (except the signature itself) */\n sig: z.custom<Uint8Array>((v) => v instanceof Uint8Array),\n});\n","import * as crypto from 'crypto';\n\nimport { AxisFrame, getSignTarget } from './axis-bin';\n\n/**\n * Signature utilities for AXIS binary frames\n * Supports Ed25519 signature generation and verification\n */\n\n/**\n * Computes the canonical payload for signing an AXIS frame.\n * The signature covers all bytes of the encoded frame EXCEPT the signature field itself.\n *\n * @param {AxisFrame} frame - The frame to prepare for signing\n * @returns {Buffer} The serialized canonical bytes for the signature algorithm\n */\nexport function computeSignaturePayload(frame: AxisFrame): Buffer {\n return Buffer.from(getSignTarget(frame));\n}\n\n/**\n * Signs an AXIS frame using the Ed25519 algorithm.\n * Automatically handles both raw 32-byte seeds and pkcs8 DER-encoded private keys.\n *\n * @param {AxisFrame} frame - The frame to sign\n * @param {Buffer} privateKey - Ed25519 private key (32-byte raw OR pkcs8 DER)\n * @returns {Buffer} The 64-byte Ed25519 signature\n * @throws {Error} If key format is invalid or signing fail\n */\nexport function signFrame(frame: AxisFrame, privateKey: Buffer): Buffer {\n const payload = computeSignaturePayload(frame);\n\n let keyObject: crypto.KeyObject;\n\n // Check if key is raw 32-byte seed or DER-encoded\n if (privateKey.length === 32) {\n // Raw seed - wrap in pkcs8 DER format\n // pkcs8 prefix for Ed25519: 0x302e020100300506032b657004220420\n const pkcs8Prefix = Buffer.from([\n 0x30, 0x2e, 0x02, 0x01, 0x00, 0x30, 0x05, 0x06, 0x03, 0x2b, 0x65, 0x70,\n 0x04, 0x22, 0x04, 0x20,\n ]);\n const pkcs8Key = Buffer.concat([pkcs8Prefix, privateKey]);\n\n keyObject = crypto.createPrivateKey({\n key: pkcs8Key,\n format: 'der',\n type: 'pkcs8',\n });\n } else {\n // Assume already DER-encoded pkcs8\n keyObject = crypto.createPrivateKey({\n key: privateKey,\n format: 'der',\n type: 'pkcs8',\n });\n }\n\n const signature = crypto.sign(null, payload, keyObject);\n\n if (signature.length !== 64) {\n throw new Error('Ed25519 signature must be 64 bytes');\n }\n\n return signature;\n}\n\n/**\n * Verifies an Ed25519 signature on an AXIS frame.\n * Automatically handles both raw 32-byte public keys and spki DER-encoded public keys.\n *\n * @param {AxisFrame} frame - The frame containing the signature to verify\n * @param {Buffer} publicKey - Ed25519 public key (32-byte raw OR spki DER)\n * @returns {boolean} True if the signature is cryptographically valid\n * @throws {Error} If signature length is invalid\n */\nexport function verifyFrameSignature(\n frame: AxisFrame,\n publicKey: Buffer,\n): boolean {\n if (frame.sig.length === 0) {\n return false; // No signature\n }\n\n if (frame.sig.length !== 64) {\n throw new Error('Ed25519 signature must be 64 bytes');\n }\n\n const payload = computeSignaturePayload(frame);\n\n try {\n let keyObject: crypto.KeyObject;\n\n // Check if key is raw 32-byte or DER-encoded\n if (publicKey.length === 32) {\n // Raw key - wrap in spki DER format\n // spki prefix for Ed25519: 0x302a300506032b6570032100\n const spkiPrefix = Buffer.from([\n 0x30, 0x2a, 0x30, 0x05, 0x06, 0x03, 0x2b, 0x65, 0x70, 0x03, 0x21, 0x00,\n ]);\n const spkiKey = Buffer.concat([spkiPrefix, publicKey]);\n\n keyObject = crypto.createPublicKey({\n key: spkiKey,\n format: 'der',\n type: 'spki',\n });\n } else {\n // Assume already DER-encoded spki\n keyObject = crypto.createPublicKey({\n key: publicKey,\n format: 'der',\n type: 'spki',\n });\n }\n\n const valid = crypto.verify(\n null,\n payload,\n keyObject,\n Buffer.from(frame.sig),\n );\n return valid;\n } catch (error) {\n return false;\n }\n}\n\n/**\n * Generates a new Ed25519 key pair for use with the AXIS protocol.\n * Returns keys in canonical DER format (pkcs8 for private, spki for public).\n *\n * @returns {Object} An object containing the privateKey and publicKey as Buffers\n */\nexport function generateEd25519KeyPair(): {\n privateKey: Buffer;\n publicKey: Buffer;\n} {\n const { privateKey, publicKey } = crypto.generateKeyPairSync('ed25519');\n\n return {\n privateKey: privateKey.export({ type: 'pkcs8', format: 'der' }) as Buffer,\n publicKey: publicKey.export({ type: 'spki', format: 'der' }) as Buffer,\n };\n}\n\n/**\n * Computes a standard SHA-256 hash of the provided data.\n *\n * @param {Buffer | Uint8Array} data - The input data to hash\n * @returns {Buffer} The 32-byte SHA-256 digest\n */\nexport function sha256(data: Buffer | Uint8Array): Buffer {\n return crypto.createHash('sha256').update(data).digest();\n}\n\n/**\n * Computes a hash for an AXIS receipt, optionally chaining it to a previous hash.\n * This is used for generating an immutable transaction chain.\n *\n * @param {Buffer | Uint8Array} receiptBytes - The canonical binary representation of the receipt\n * @param {Buffer | Uint8Array} [prevHash] - The hash of the previous receipt in the chain\n * @returns {Buffer} The 32-byte SHA-256 hash of the receipt (and link)\n */\nexport function computeReceiptHash(\n receiptBytes: Buffer | Uint8Array,\n prevHash?: Buffer | Uint8Array,\n): Buffer {\n const hasher = crypto.createHash('sha256');\n hasher.update(receiptBytes);\n\n if (prevHash && prevHash.length > 0) {\n hasher.update(prevHash);\n }\n\n return hasher.digest();\n}\n","// ats1.constants.ts\n\n// Header TLV tags (hdr TLVs)\nexport const ATS1_HDR = {\n INTENT_ID: 1, // uvarint\n ACTOR_KEY_ID: 2, // bytes (key fingerprint / credentialId hash)\n CAPSULE_ID: 3, // bytes or varint\n NONCE: 4, // 16 bytes\n TS_MS: 5, // u64be (8)\n SCHEMA_ID: 6, // uvarint\n BODY_HASH: 7, // 32 bytes (sha256)\n TRACE_ID: 8, // 16 bytes\n} as const;\n\n// Schema IDs (body TLVs meaning depends on schema)\nexport const ATS1_SCHEMA = {\n PASSKEY_LOGIN_OPTIONS_REQ: 2001,\n PASSKEY_LOGIN_OPTIONS_RES: 2002,\n\n PASSKEY_LOGIN_VERIFY_REQ: 2011,\n PASSKEY_LOGIN_VERIFY_RES: 2012,\n\n PASSKEY_REGISTER_OPTIONS_REQ: 2021,\n PASSKEY_REGISTER_OPTIONS_RES: 2022,\n\n PASSKEY_REGISTER_VERIFY_REQ: 2031,\n PASSKEY_REGISTER_VERIFY_RES: 2032,\n} as const;\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n/**\n * ATS1 (AXIS-TLV Schema v1) — TypeScript Encoder/Decoder\n * - Canonical TLV: [TAG(uvarint)][LEN(uvarint)][VALUE(bytes)]\n * - Canonical ordering: ascending TAG\n * - Minimal varint encoding enforced in decoder\n * - Strict schema validation (unknown tags rejected by default)\n * - Nested TLV streams supported\n *\n * Node.js: uses crypto for SHA-256\n */\n\nimport { createHash, randomBytes } from 'crypto';\n\n// -----------------------------\n// Types\n// -----------------------------\n\nexport type Ats1FieldType = 'bytes' | 'utf8' | 'uvarint' | 'u64be' | 'nested';\n\nexport type Ats1FieldDescriptor = {\n tag: number;\n name: string;\n type: Ats1FieldType;\n required?: boolean;\n repeated?: boolean;\n nestedSchema?: Ats1SchemaDescriptor; // required if type === 'nested'\n maxLen?: number; // optional per-field limit (bytes length)\n};\n\nexport type Ats1SchemaDescriptor = {\n schemaId: number;\n name: string;\n strict: boolean; // if true: reject unknown tags\n maxNestingDepth: number; // e.g. 4\n maxBodyBytes?: number; // optional overall body limit\n fields: Ats1FieldDescriptor[];\n};\n\nexport type DecodedTlv = { tag: number; value: Buffer };\n\nexport type DecodedTlvMap = Map<number, Buffer[]>; // tag -> list of values\n\nexport type SensorInputLike = {\n hdrTLVs: DecodedTlvMap;\n bodyTLVs: DecodedTlvMap;\n schemaId: number;\n intentId: number;\n};\n\n// -----------------------------\n// Limits (sane defaults)\n// -----------------------------\n\nexport type Ats1Limits = {\n maxVarintBytes: number; // e.g. 10 for u64\n maxTlvCount: number; // e.g. 512\n maxValueBytes: number; // e.g. 1MB\n maxNestingDepth: number; // e.g. 4\n};\n\nexport const DEFAULT_LIMITS: Ats1Limits = {\n maxVarintBytes: 10,\n maxTlvCount: 512,\n maxValueBytes: 1_048_576, // 1 MiB\n maxNestingDepth: 4,\n};\n\n// -----------------------------\n// Varint (unsigned LEB128)\n// -----------------------------\n\nexport function encodeUVarint(n: number | bigint): Buffer {\n let x = typeof n === 'bigint' ? n : BigInt(n);\n if (x < 0n) throw new Error('encodeUVarint: negative not allowed');\n\n const out: number[] = [];\n while (x >= 0x80n) {\n out.push(Number((x & 0x7fn) | 0x80n));\n x >>= 7n;\n }\n out.push(Number(x));\n return Buffer.from(out);\n}\n\nexport function decodeUVarint(\n buf: Buffer,\n offset: number,\n limits: Ats1Limits = DEFAULT_LIMITS,\n): { value: bigint; offset: number; bytesRead: number } {\n let x = 0n;\n let shift = 0n;\n const start = offset;\n\n for (let i = 0; i < limits.maxVarintBytes; i++) {\n if (offset >= buf.length) throw new Error('decodeUVarint: truncated');\n const b = buf[offset++];\n x |= BigInt(b & 0x7f) << shift;\n\n if ((b & 0x80) === 0) {\n const bytesRead = offset - start;\n\n // Minimal-encoding check:\n // Re-encode and compare exact bytes.\n const re = encodeUVarint(x);\n const original = buf.subarray(start, offset);\n if (!re.equals(original))\n throw new Error('decodeUVarint: non-minimal varint');\n\n return { value: x, offset, bytesRead };\n }\n\n shift += 7n;\n }\n\n throw new Error('decodeUVarint: too long');\n}\n\n// -----------------------------\n// Primitive encoders/decoders\n// -----------------------------\n\nexport function encodeU64BE(n: bigint): Buffer {\n if (n < 0n) throw new Error('encodeU64BE: negative not allowed');\n const b = Buffer.alloc(8);\n b.writeBigUInt64BE(n, 0);\n return b;\n}\n\nexport function decodeU64BE(buf: Buffer): bigint {\n if (buf.length !== 8) throw new Error('decodeU64BE: length must be 8');\n return buf.readBigUInt64BE(0);\n}\n\nexport function sha256(data: Buffer): Buffer {\n return createHash('sha256').update(data).digest();\n}\n\n// -----------------------------\n// TLV encode/decode\n// -----------------------------\n\nexport function encodeTLV(tag: number, value: Buffer): Buffer {\n if (!Number.isInteger(tag) || tag <= 0)\n throw new Error('encodeTLV: tag must be positive int');\n const t = encodeUVarint(tag);\n const l = encodeUVarint(value.length);\n return Buffer.concat([t, l, value]);\n}\n\nexport function encodeTLVStreamCanonical(entries: DecodedTlv[]): Buffer {\n // Canonical sort ascending tag\n const sorted = [...entries].sort((a, b) => a.tag - b.tag);\n\n // Duplicate tags are allowed only if the schema says repeated.\n // This function does not enforce schema; caller should.\n const parts: Buffer[] = [];\n for (const e of sorted) parts.push(encodeTLV(e.tag, e.value));\n return Buffer.concat(parts);\n}\n\nexport function decodeTLVStream(\n stream: Buffer,\n limits: Ats1Limits = DEFAULT_LIMITS,\n): DecodedTlv[] {\n const out: DecodedTlv[] = [];\n let off = 0;\n\n while (off < stream.length) {\n if (out.length >= limits.maxTlvCount)\n throw new Error('decodeTLVStream: too many TLVs');\n\n const tagRes = decodeUVarint(stream, off, limits);\n const tag = Number(tagRes.value);\n off = tagRes.offset;\n\n const lenRes = decodeUVarint(stream, off, limits);\n const len = Number(lenRes.value);\n off = lenRes.offset;\n\n if (len < 0) throw new Error('decodeTLVStream: negative length');\n if (len > limits.maxValueBytes)\n throw new Error('decodeTLVStream: value too large');\n if (off + len > stream.length)\n throw new Error('decodeTLVStream: truncated value');\n\n const value = stream.subarray(off, off + len);\n off += len;\n\n out.push({ tag, value: Buffer.from(value) });\n }\n\n // Canonical check: must be sorted ascending tag.\n for (let i = 1; i < out.length; i++) {\n if (out[i].tag < out[i - 1].tag)\n throw new Error('decodeTLVStream: non-canonical tag order');\n }\n\n return out;\n}\n\nexport function tlvsToMap(entries: DecodedTlv[]): DecodedTlvMap {\n const m: DecodedTlvMap = new Map();\n for (const e of entries) {\n const arr = m.get(e.tag) ?? [];\n arr.push(e.value);\n m.set(e.tag, arr);\n }\n return m;\n}\n\n// -----------------------------\n// Schema validation + object \\u2194 TLV mapping\n// -----------------------------\n\ntype LogicalBody = { schemaId: number; fields: Record<string, any> };\n\nexport function validateTLVsAgainstSchema(\n schema: Ats1SchemaDescriptor,\n tlvs: DecodedTlv[],\n depth = 0,\n limits: Ats1Limits = DEFAULT_LIMITS,\n): void {\n if (depth > Math.min(schema.maxNestingDepth, limits.maxNestingDepth)) {\n throw new Error('validateTLVsAgainstSchema: nesting depth exceeded');\n }\n\n if (schema.maxBodyBytes && tlvsBytes(tlvs) > schema.maxBodyBytes) {\n throw new Error('validateTLVsAgainstSchema: body too large');\n }\n\n const byTag = new Map<number, DecodedTlv[]>();\n for (const t of tlvs) {\n if (!byTag.has(t.tag)) byTag.set(t.tag, []);\n byTag.get(t.tag)!.push(t);\n }\n\n const fieldByTag = new Map(schema.fields.map((f) => [f.tag, f] as const));\n\n // Unknown tags\n if (schema.strict) {\n for (const tag of byTag.keys()) {\n if (!fieldByTag.has(tag))\n throw new Error(`validateTLVsAgainstSchema: unknown tag ${tag}`);\n }\n }\n\n // Required fields & repetition rules\n for (const f of schema.fields) {\n const vals = byTag.get(f.tag) ?? [];\n if (f.required && vals.length === 0)\n throw new Error(`validateTLVsAgainstSchema: missing ${f.name}`);\n\n if (!f.repeated && vals.length > 1) {\n throw new Error(\n `validateTLVsAgainstSchema: duplicate tag not allowed for ${f.name}`,\n );\n }\n\n // Per-field max length\n if (typeof f.maxLen === 'number') {\n for (const v of vals) {\n if (v.value.length > f.maxLen)\n throw new Error(`validateTLVsAgainstSchema: ${f.name} too long`);\n }\n }\n\n // Type checks (lightweight)\n for (const v of vals) {\n switch (f.type) {\n case 'u64be':\n if (v.value.length !== 8)\n throw new Error(\n `validateTLVsAgainstSchema: ${f.name} u64be must be 8 bytes`,\n );\n break;\n case 'nested': {\n if (!f.nestedSchema)\n throw new Error(\n `validateTLVsAgainstSchema: ${f.name} missing nestedSchema`,\n );\n const nestedTlvs = decodeTLVStream(v.value, limits);\n validateTLVsAgainstSchema(\n f.nestedSchema,\n nestedTlvs,\n depth + 1,\n limits,\n );\n break;\n }\n default:\n // bytes/utf8/uvarint are accepted structurally; deeper validation can be added if you want.\n break;\n }\n }\n }\n}\n\nfunction tlvsBytes(tlvs: DecodedTlv[]): number {\n // approximate encoded size if re-encoded\n let n = 0;\n for (const t of tlvs) {\n n +=\n encodeUVarint(t.tag).length +\n encodeUVarint(t.value.length).length +\n t.value.length;\n }\n return n;\n}\n\nexport function logicalBodyToTLVs(\n schema: Ats1SchemaDescriptor,\n body: LogicalBody,\n limits: Ats1Limits = DEFAULT_LIMITS,\n): DecodedTlv[] {\n if (body.schemaId !== schema.schemaId)\n throw new Error('logicalBodyToTLVs: schemaId mismatch');\n\n const fieldsByName = new Map(schema.fields.map((f) => [f.name, f] as const));\n const tlvs: DecodedTlv[] = [];\n\n for (const [name, val] of Object.entries(body.fields ?? {})) {\n const f = fieldsByName.get(name);\n if (!f) {\n if (schema.strict)\n throw new Error(`logicalBodyToTLVs: unknown field ${name}`);\n continue;\n }\n\n const pushOne = (v: any) => {\n const valueBuf = encodeFieldValue(f, v, limits);\n if (valueBuf.length > limits.maxValueBytes)\n throw new Error('logicalBodyToTLVs: value too large');\n tlvs.push({ tag: f.tag, value: valueBuf });\n };\n\n if (f.repeated) {\n if (!Array.isArray(val))\n throw new Error(\n `logicalBodyToTLVs: repeated field ${name} must be array`,\n );\n for (const item of val) pushOne(item);\n } else {\n pushOne(val);\n }\n }\n\n // Validate required + duplicates + nested schema correctness\n // Validation also enforces canonical ordering check only after encoding/decoding;\n // here we validate semantics.\n validateTLVsAgainstSchema(schema, tlvs, 0, limits);\n\n // NOTE: canonical ordering will be applied in encodeTLVStreamCanonical()\n return tlvs;\n}\n\nfunction encodeFieldValue(\n f: Ats1FieldDescriptor,\n val: any,\n limits: Ats1Limits,\n): Buffer {\n switch (f.type) {\n case 'bytes':\n if (Buffer.isBuffer(val)) return Buffer.from(val);\n if (val instanceof Uint8Array) return Buffer.from(val);\n throw new Error(`encodeFieldValue: ${f.name} expects bytes`);\n case 'utf8':\n if (typeof val !== 'string')\n throw new Error(`encodeFieldValue: ${f.name} expects string`);\n return Buffer.from(val, 'utf8');\n case 'uvarint':\n if (typeof val !== 'number' && typeof val !== 'bigint')\n throw new Error(`encodeFieldValue: ${f.name} expects number/bigint`);\n return encodeUVarint(val);\n case 'u64be':\n if (typeof val !== 'bigint')\n throw new Error(`encodeFieldValue: ${f.name} expects bigint`);\n return encodeU64BE(val);\n case 'nested': {\n if (!f.nestedSchema)\n throw new Error(`encodeFieldValue: ${f.name} missing nestedSchema`);\n // Accept nested logical object in the form { fields: {...} } or direct record\n const nestedFields =\n val && typeof val === 'object' && 'fields' in val\n ? (val as any).fields\n : val;\n if (!nestedFields || typeof nestedFields !== 'object')\n throw new Error(`encodeFieldValue: ${f.name} expects object`);\n const nestedBody: LogicalBody = {\n schemaId: f.nestedSchema.schemaId,\n fields: nestedFields,\n };\n const nestedTlvs = logicalBodyToTLVs(f.nestedSchema, nestedBody, limits);\n const nestedBytes = encodeTLVStreamCanonical(nestedTlvs);\n // Re-parse to ensure canonical encoding would pass, and validate\n const re = decodeTLVStream(nestedBytes, limits);\n validateTLVsAgainstSchema(f.nestedSchema, re, 1, limits);\n return nestedBytes;\n }\n default:\n throw new Error(`encodeFieldValue: unsupported type ${(f as any).type}`);\n }\n}\n\nexport function tlvsToLogicalBody(\n schema: Ats1SchemaDescriptor,\n tlvs: DecodedTlv[],\n limits: Ats1Limits = DEFAULT_LIMITS,\n): LogicalBody {\n // TLVs must already be decoded and canonical-checked\n validateTLVsAgainstSchema(schema, tlvs, 0, limits);\n\n const fields: Record<string, any> = {};\n const fieldByTag = new Map(schema.fields.map((f) => [f.tag, f] as const));\n\n for (const t of tlvs) {\n const f = fieldByTag.get(t.tag);\n if (!f) {\n if (schema.strict)\n throw new Error(`tlvsToLogicalBody: unknown tag ${t.tag}`);\n continue;\n }\n\n const decoded = decodeFieldValue(f, t.value, limits);\n\n if (f.repeated) {\n if (!Array.isArray(fields[f.name])) fields[f.name] = [];\n fields[f.name].push(decoded);\n } else {\n fields[f.name] = decoded;\n }\n }\n\n return { schemaId: schema.schemaId, fields };\n}\n\nfunction decodeFieldValue(\n f: Ats1FieldDescriptor,\n value: Buffer,\n limits: Ats1Limits,\n): any {\n switch (f.type) {\n case 'bytes':\n return Buffer.from(value);\n case 'utf8':\n return value.toString('utf8');\n case 'uvarint': {\n const r = decodeUVarint(value, 0, limits);\n if (r.offset !== value.length)\n throw new Error(\n `decodeFieldValue: ${f.name} uvarint has trailing bytes`,\n );\n // return as number when safe, else bigint\n const asNum = Number(r.value);\n return Number.isSafeInteger(asNum) ? asNum : r.value;\n }\n case 'u64be':\n return decodeU64BE(value);\n case 'nested': {\n if (!f.nestedSchema)\n throw new Error(`decodeFieldValue: ${f.name} missing nestedSchema`);\n const nestedTlvs = decodeTLVStream(value, limits);\n // nested schema validation is called by validateTLVsAgainstSchema already,\n // but we decode again safely here.\n const nestedBody = tlvsToLogicalBody(f.nestedSchema, nestedTlvs, limits);\n return nestedBody.fields; // return the record by default\n }\n default:\n throw new Error(`decodeFieldValue: unsupported type ${(f as any).type}`);\n }\n}\n\n// -----------------------------\n// AXIS HDR tags (ATS1 header TLVs)\n// -----------------------------\n\nexport const HDR_TAGS = {\n intent_id: 1,\n actor_key_id: 2,\n capsule_id: 3,\n nonce: 4,\n ts_ms: 5,\n schema_id: 6,\n body_hash: 7,\n trace_id: 8,\n} as const;\n\nexport type AxisHeaderLogical = {\n intentId: number;\n actorKeyId: Uint8Array;\n capsuleId?: Uint8Array;\n nonce: Uint8Array; // 16 bytes\n tsMs: bigint; // ms\n schemaId: number;\n bodyHash: Uint8Array; // 32 bytes\n traceId?: Uint8Array; // 16 bytes\n version?: number; // optional\n headerHash?: Uint8Array; // 32 bytes\n headerTlvs?: DecodedTlv[]; // optional\n bodyTlvs?: DecodedTlv[]; // optional\n};\n\nexport type AxisLogicalRequest = {\n hdr: AxisHeaderLogical;\n body: LogicalBody;\n};\n\nexport function encodeAxisHeaderToTLVs(hdr: AxisHeaderLogical): DecodedTlv[] {\n if (hdr.nonce.byteLength !== 16)\n throw new Error('encodeAxisHeaderToTLVs: nonce must be 16 bytes');\n if (hdr.bodyHash.byteLength !== 32)\n throw new Error('encodeAxisHeaderToTLVs: bodyHash must be 32 bytes');\n if (hdr.traceId && hdr.traceId.byteLength !== 16)\n throw new Error('encodeAxisHeaderToTLVs: traceId must be 16 bytes');\n\n const tlvs: DecodedTlv[] = [\n { tag: HDR_TAGS.intent_id, value: encodeUVarint(hdr.intentId) },\n { tag: HDR_TAGS.actor_key_id, value: Buffer.from(hdr.actorKeyId) },\n { tag: HDR_TAGS.nonce, value: Buffer.from(hdr.nonce) },\n { tag: HDR_TAGS.ts_ms, value: encodeU64BE(hdr.tsMs) },\n { tag: HDR_TAGS.schema_id, value: encodeUVarint(hdr.schemaId) },\n { tag: HDR_TAGS.body_hash, value: Buffer.from(hdr.bodyHash) },\n ];\n\n if (hdr.capsuleId)\n tlvs.push({ tag: HDR_TAGS.capsule_id, value: Buffer.from(hdr.capsuleId) });\n if (hdr.traceId)\n tlvs.push({ tag: HDR_TAGS.trace_id, value: Buffer.from(hdr.traceId) });\n\n return tlvs;\n}\n\nexport function decodeAxisHeaderFromTLVs(\n hdrTlvs: DecodedTlv[],\n limits: Ats1Limits = DEFAULT_LIMITS,\n): AxisHeaderLogical {\n // hdr TLVs must be canonical-ordered (enforced by decodeTLVStream) and duplicates only if allowed.\n const m = tlvsToMap(hdrTlvs);\n\n const get1 = (tag: number) => {\n const arr = m.get(tag);\n if (!arr || arr.length !== 1)\n throw new Error(\n `decodeAxisHeaderFromTLVs: missing/dup header tag ${tag}`,\n );\n return arr[0];\n };\n const getOpt1 = (tag: number) => {\n const arr = m.get(tag);\n if (!arr) return undefined;\n if (arr.length !== 1)\n throw new Error(`decodeAxisHeaderFromTLVs: dup header tag ${tag}`);\n return arr[0];\n };\n\n const intentIdVar = decodeUVarint(get1(HDR_TAGS.intent_id), 0, limits);\n if (intentIdVar.offset !== get1(HDR_TAGS.intent_id).length)\n throw new Error('decodeAxisHeaderFromTLVs: intent_id trailing bytes');\n\n const schemaIdVar = decodeUVarint(get1(HDR_TAGS.schema_id), 0, limits);\n if (schemaIdVar.offset !== get1(HDR_TAGS.schema_id).length)\n throw new Error('decodeAxisHeaderFromTLVs: schema_id trailing bytes');\n\n const ts = decodeU64BE(get1(HDR_TAGS.ts_ms));\n\n const nonce = get1(HDR_TAGS.nonce);\n if (nonce.length !== 16)\n throw new Error('decodeAxisHeaderFromTLVs: nonce must be 16 bytes');\n\n const bodyHash = get1(HDR_TAGS.body_hash);\n if (bodyHash.length !== 32)\n throw new Error('decodeAxisHeaderFromTLVs: body_hash must be 32 bytes');\n\n const trace = getOpt1(HDR_TAGS.trace_id);\n if (trace && trace.length !== 16)\n throw new Error('decodeAxisHeaderFromTLVs: trace_id must be 16 bytes');\n\n return {\n intentId: Number(intentIdVar.value),\n actorKeyId: Buffer.from(get1(HDR_TAGS.actor_key_id)),\n capsuleId: getOpt1(HDR_TAGS.capsule_id)\n ? Buffer.from(getOpt1(HDR_TAGS.capsule_id)!)\n : undefined,\n nonce: Buffer.from(nonce),\n tsMs: ts,\n schemaId: Number(schemaIdVar.value),\n bodyHash: Buffer.from(bodyHash),\n traceId: trace ? Buffer.from(trace) : undefined,\n };\n}\n\n// -----------------------------\n// Encode/Decode AXIS request body + hdr with body_hash binding\n// -----------------------------\n\nexport function encodeAxisRequestBinary(\n schema: Ats1SchemaDescriptor,\n req: Omit<AxisLogicalRequest, 'hdr'> & {\n hdr: Omit<AxisHeaderLogical, 'bodyHash'>;\n },\n limits: Ats1Limits = DEFAULT_LIMITS,\n): { hdrBytes: Buffer; bodyBytes: Buffer; bodyHash: Buffer } {\n // 1) encode body TLVs\n const bodyTlvs = logicalBodyToTLVs(schema, req.body, limits);\n const bodyBytes = encodeTLVStreamCanonical(bodyTlvs);\n\n // 2) compute body hash\n const bodyHash = sha256(bodyBytes);\n\n // 3) encode hdr TLVs (with computed hash)\n const hdr: AxisHeaderLogical = {\n ...req.hdr,\n schemaId: schema.schemaId,\n bodyHash,\n };\n const hdrTlvs = encodeAxisHeaderToTLVs(hdr);\n const hdrBytes = encodeTLVStreamCanonical(hdrTlvs);\n\n return { hdrBytes, bodyBytes, bodyHash };\n}\n\nexport function decodeAxisRequestBinary(\n schema: Ats1SchemaDescriptor,\n hdrBytes: Buffer,\n bodyBytes: Buffer,\n limits: Ats1Limits = DEFAULT_LIMITS,\n): { hdr: AxisHeaderLogical; body: LogicalBody; sensorInput: SensorInputLike } {\n const hdrTlvs = decodeTLVStream(hdrBytes, limits);\n const bodyTlvs = decodeTLVStream(bodyBytes, limits);\n\n const hdr = decodeAxisHeaderFromTLVs(hdrTlvs, limits);\n\n // Schema binding check\n if (hdr.schemaId !== schema.schemaId)\n throw new Error('decodeAxisRequestBinary: schemaId mismatch');\n\n // body_hash check\n const bh = sha256(bodyBytes);\n if (!Buffer.from(hdr.bodyHash).equals(bh))\n throw new Error('decodeAxisRequestBinary: body_hash mismatch');\n\n // validate + decode body\n const body = tlvsToLogicalBody(schema, bodyTlvs, limits);\n\n const sensorInput: SensorInputLike = {\n hdrTLVs: tlvsToMap(hdrTlvs),\n bodyTLVs: tlvsToMap(bodyTlvs),\n schemaId: hdr.schemaId,\n intentId: hdr.intentId,\n };\n\n return { hdr, body, sensorInput };\n}\n\n// -----------------------------\n// Example Schemas\n// -----------------------------\n\nexport const Schema3100_DeviceContext: Ats1SchemaDescriptor = {\n schemaId: 3100,\n name: 'device.context',\n strict: true,\n maxNestingDepth: 4,\n fields: [\n { tag: 1, name: 'deviceId', type: 'bytes', required: true, maxLen: 128 },\n { tag: 2, name: 'os', type: 'utf8', required: true, maxLen: 64 },\n { tag: 3, name: 'hw', type: 'utf8', required: true, maxLen: 64 },\n ],\n};\n\nexport const Schema2001_PasskeyLoginOptionsReq: Ats1SchemaDescriptor = {\n schemaId: 2001,\n name: 'axis.auth.passkey.login.options.req',\n strict: true,\n maxNestingDepth: 4,\n fields: [\n { tag: 1, name: 'username', type: 'utf8', required: true, maxLen: 128 },\n ],\n};\n\nexport const Schema4001_LoginWithDeviceReq: Ats1SchemaDescriptor = {\n schemaId: 4001,\n name: 'axis.auth.login.with_device.req',\n strict: true,\n maxNestingDepth: 4,\n fields: [\n { tag: 1, name: 'username', type: 'utf8', required: true, maxLen: 128 },\n {\n tag: 2,\n name: 'device',\n type: 'nested',\n required: true,\n nestedSchema: Schema3100_DeviceContext,\n },\n ],\n};\n","import { ATS1_HDR, ATS1_SCHEMA } from './ats1.constants';\nimport * as ats1 from './ats1';\n\n/**\n * Build canonical hdr for any request using ATS1 codec.\n */\nexport function buildAts1Hdr(params: {\n intentId: number;\n schemaId: number;\n actorKeyId?: Buffer;\n capsuleId?: Buffer;\n traceId?: Buffer;\n tsMs?: bigint;\n nonce?: Buffer;\n bodyHash?: Buffer;\n}): Buffer {\n const hdr: ats1.AxisHeaderLogical = {\n intentId: params.intentId,\n schemaId: params.schemaId,\n actorKeyId: params.actorKeyId ?? Buffer.alloc(0),\n capsuleId: params.capsuleId,\n nonce: params.nonce ?? require('crypto').randomBytes(16),\n tsMs: params.tsMs ?? BigInt(Date.now()),\n bodyHash: params.bodyHash ?? Buffer.alloc(32),\n traceId: params.traceId,\n };\n\n const tlvs = ats1.encodeAxisHeaderToTLVs(hdr);\n return ats1.encodeTLVStreamCanonical(tlvs);\n}\n\n/**\n * PASSKEY: login.options.req\n * schema 2001 body:\n * - (1) username: utf8\n */\nexport function packPasskeyLoginOptionsReq(params: {\n intentId: number;\n username: string;\n actorKeyId?: Buffer;\n capsuleId?: Buffer;\n traceId?: Buffer;\n}) {\n const bodyTlvs = ats1.logicalBodyToTLVs(\n ats1.Schema2001_PasskeyLoginOptionsReq,\n {\n schemaId: ATS1_SCHEMA.PASSKEY_LOGIN_OPTIONS_REQ,\n fields: { username: params.username },\n },\n );\n const body = ats1.encodeTLVStreamCanonical(bodyTlvs);\n const bodyHash = ats1.sha256(body);\n\n const hdr = buildAts1Hdr({\n intentId: params.intentId,\n schemaId: ATS1_SCHEMA.PASSKEY_LOGIN_OPTIONS_REQ,\n actorKeyId: params.actorKeyId,\n capsuleId: params.capsuleId,\n traceId: params.traceId,\n bodyHash,\n });\n\n return { hdr, body };\n}\n\nexport function unpackPasskeyLoginOptionsReq(body: Buffer) {\n const tlvs = ats1.decodeTLVStream(body);\n const decoded = ats1.tlvsToLogicalBody(\n ats1.Schema2001_PasskeyLoginOptionsReq,\n tlvs,\n );\n return { username: decoded.fields.username as string };\n}\n\n/**\n * Defined schemas for passkey operations\n */\nexport const Schema2021_PasskeyRegisterOptionsReq: ats1.Ats1SchemaDescriptor = {\n schemaId: ATS1_SCHEMA.PASSKEY_REGISTER_OPTIONS_REQ,\n name: 'axis.auth.passkey.register.options.req',\n strict: true,\n maxNestingDepth: 4,\n fields: [\n { tag: 1, name: 'username', type: 'utf8', required: true, maxLen: 128 },\n ],\n};\n\nexport const Schema2011_PasskeyLoginVerifyReq: ats1.Ats1SchemaDescriptor = {\n schemaId: ATS1_SCHEMA.PASSKEY_LOGIN_VERIFY_REQ,\n name: 'axis.auth.passkey.login.verify.req',\n strict: true,\n maxNestingDepth: 4,\n fields: [\n { tag: 1, name: 'username', type: 'utf8', required: true, maxLen: 128 },\n {\n tag: 2,\n name: 'credentialId',\n type: 'bytes',\n required: true,\n maxLen: 1024,\n },\n {\n tag: 3,\n name: 'clientDataJSON',\n type: 'bytes',\n required: true,\n maxLen: 4096,\n },\n {\n tag: 4,\n name: 'authenticatorData',\n type: 'bytes',\n required: true,\n maxLen: 1024,\n },\n { tag: 5, name: 'signature', type: 'bytes', required: true, maxLen: 1024 },\n { tag: 6, name: 'userHandle', type: 'bytes', required: false, maxLen: 128 },\n ],\n};\n\n/**\n * PASSKEY: register.options.req\n */\nexport function packPasskeyRegisterOptionsReq(params: {\n intentId: number;\n username: string;\n actorKeyId?: Buffer;\n traceId?: Buffer;\n}) {\n const bodyTlvs = ats1.logicalBodyToTLVs(\n Schema2021_PasskeyRegisterOptionsReq,\n {\n schemaId: ATS1_SCHEMA.PASSKEY_REGISTER_OPTIONS_REQ,\n fields: { username: params.username },\n },\n );\n const body = ats1.encodeTLVStreamCanonical(bodyTlvs);\n const bodyHash = ats1.sha256(body);\n\n const hdr = buildAts1Hdr({\n intentId: params.intentId,\n schemaId: ATS1_SCHEMA.PASSKEY_REGISTER_OPTIONS_REQ,\n actorKeyId: params.actorKeyId,\n traceId: params.traceId,\n bodyHash,\n });\n\n return { hdr, body };\n}\n\nexport function unpackPasskeyRegisterOptionsReq(body: Buffer) {\n const tlvs = ats1.decodeTLVStream(body);\n const decoded = ats1.tlvsToLogicalBody(\n Schema2021_PasskeyRegisterOptionsReq,\n tlvs,\n );\n return { username: decoded.fields.username as string };\n}\n\n/**\n * PASSKEY: login.verify.req\n */\nexport function packPasskeyLoginVerifyReq(params: {\n intentId: number;\n username: string;\n credentialId: Buffer;\n clientDataJSON: Buffer;\n authenticatorData: Buffer;\n signature: Buffer;\n userHandle?: Buffer;\n actorKeyId?: Buffer;\n traceId?: Buffer;\n}) {\n const bodyTlvs = ats1.logicalBodyToTLVs(Schema2011_PasskeyLoginVerifyReq, {\n schemaId: ATS1_SCHEMA.PASSKEY_LOGIN_VERIFY_REQ,\n fields: {\n username: params.username,\n credentialId: params.credentialId,\n clientDataJSON: params.clientDataJSON,\n authenticatorData: params.authenticatorData,\n signature: params.signature,\n userHandle: params.userHandle,\n },\n });\n\n const body = ats1.encodeTLVStreamCanonical(bodyTlvs);\n const bodyHash = ats1.sha256(body);\n\n const hdr = buildAts1Hdr({\n intentId: params.intentId,\n schemaId: ATS1_SCHEMA.PASSKEY_LOGIN_VERIFY_REQ,\n actorKeyId: params.actorKeyId,\n traceId: params.traceId,\n bodyHash,\n });\n\n return { hdr, body };\n}\n\nexport function unpackPasskeyLoginVerifyReq(body: Buffer) {\n const tlvs = ats1.decodeTLVStream(body);\n const decoded = ats1.tlvsToLogicalBody(\n Schema2011_PasskeyLoginVerifyReq,\n tlvs,\n );\n const f = decoded.fields;\n\n return {\n username: f.username as string,\n credentialId: f.credentialId as Buffer,\n clientDataJSON: f.clientDataJSON as Buffer,\n authenticatorData: f.authenticatorData as Buffer,\n signature: f.signature as Buffer,\n userHandle: f.userHandle as Buffer | undefined,\n };\n}\n\n// ========================================\n// Response Schemas\n// ========================================\n\n/**\n * Schema 2002: Passkey Login Options Response\n * - (1) challenge: bytes\n * - (2) timeout: uvarint (ms)\n * - (3) rpId: utf8\n * - (4) allowCredentials: bytes (nested TLV array, each item is id+type+transports)\n * - (5) userVerification: utf8\n */\nexport const Schema2002_PasskeyLoginOptionsRes: ats1.Ats1SchemaDescriptor = {\n schemaId: ATS1_SCHEMA.PASSKEY_LOGIN_OPTIONS_RES,\n name: 'axis.auth.passkey.login.options.res',\n strict: false, // allow extra fields from WebAuthn library\n maxNestingDepth: 4,\n fields: [\n { tag: 1, name: 'challenge', type: 'utf8', required: true }, // base64url string\n { tag: 2, name: 'timeout', type: 'uvarint', required: false },\n { tag: 3, name: 'rpId', type: 'utf8', required: false },\n { tag: 4, name: 'userVerification', type: 'utf8', required: false },\n { tag: 5, name: 'allowCredentialsJson', type: 'utf8', required: false }, // JSON array for simplicity\n ],\n};\n\nexport function packPasskeyLoginOptionsRes(params: {\n challenge: string;\n timeout?: number;\n rpId?: string;\n userVerification?: string;\n allowCredentials?: { id: string; type: string; transports?: string[] }[];\n}): Buffer {\n const fields: Record<string, any> = {\n challenge: params.challenge,\n };\n if (params.timeout !== undefined) fields.timeout = params.timeout;\n if (params.rpId) fields.rpId = params.rpId;\n if (params.userVerification)\n fields.userVerification = params.userVerification;\n if (params.allowCredentials)\n fields.allowCredentialsJson = JSON.stringify(params.allowCredentials);\n\n const bodyTlvs = ats1.logicalBodyToTLVs(Schema2002_PasskeyLoginOptionsRes, {\n schemaId: ATS1_SCHEMA.PASSKEY_LOGIN_OPTIONS_RES,\n fields,\n });\n return ats1.encodeTLVStreamCanonical(bodyTlvs);\n}\n\n/**\n * Schema 2012: Passkey Login Verify Response\n * - (1) actorId: utf8\n * - (2) keyId: utf8 (credentialId base64url)\n * - (3) capsule: bytes\n * - (4) expiresAt: u64be (ms)\n */\nexport const Schema2012_PasskeyLoginVerifyRes: ats1.Ats1SchemaDescriptor = {\n schemaId: ATS1_SCHEMA.PASSKEY_LOGIN_VERIFY_RES,\n name: 'axis.auth.passkey.login.verify.res',\n strict: true,\n maxNestingDepth: 4,\n fields: [\n { tag: 1, name: 'actorId', type: 'utf8', required: true, maxLen: 256 },\n { tag: 2, name: 'keyId', type: 'utf8', required: true, maxLen: 256 },\n { tag: 3, name: 'capsule', type: 'bytes', required: true, maxLen: 4096 },\n { tag: 4, name: 'expiresAt', type: 'u64be', required: true },\n ],\n};\n\nexport function packPasskeyLoginVerifyRes(params: {\n actorId: string;\n keyId: string;\n capsule: Buffer;\n expiresAt: bigint;\n}): Buffer {\n const bodyTlvs = ats1.logicalBodyToTLVs(Schema2012_PasskeyLoginVerifyRes, {\n schemaId: ATS1_SCHEMA.PASSKEY_LOGIN_VERIFY_RES,\n fields: {\n actorId: params.actorId,\n keyId: params.keyId,\n capsule: params.capsule,\n expiresAt: params.expiresAt,\n },\n });\n return ats1.encodeTLVStreamCanonical(bodyTlvs);\n}\n","// tlv.encode.ts\nimport { randomBytes } from 'crypto';\n\nexport function encVarint(x: bigint): Buffer {\n if (x < 0n) throw new Error('VARINT_NEG');\n const out: number[] = [];\n while (x >= 0x80n) {\n out.push(Number((x & 0x7fn) | 0x80n));\n x >>= 7n;\n }\n out.push(Number(x));\n return Buffer.from(out);\n}\n\nexport function varintU(x: number | bigint): Buffer {\n const v = typeof x === 'number' ? BigInt(x) : x;\n return encVarint(v);\n}\n\nexport function u64be(x: bigint): Buffer {\n if (x < 0n) throw new Error('U64_NEG');\n const b = Buffer.alloc(8);\n b.writeBigUInt64BE(x, 0);\n return b;\n}\n\nexport function utf8(s: string): Buffer {\n return Buffer.from(s, 'utf8');\n}\n\nexport function bytes(b: Uint8Array | Buffer): Buffer {\n return Buffer.isBuffer(b) ? b : Buffer.from(b);\n}\n\nexport function nonce16(): Buffer {\n return randomBytes(16);\n}\n\nexport function tlv(type: number, value: Buffer): Buffer {\n if (!Number.isSafeInteger(type) || type < 0) throw new Error('TLV_BAD_TYPE');\n return Buffer.concat([\n encVarint(BigInt(type)),\n encVarint(BigInt(value.length)),\n value,\n ]);\n}\n\n/**\n * Canonical TLV encoding:\n * - sorted by type ascending\n * - no duplicates by default\n */\nexport function buildTLVs(\n items: { type: number; value: Buffer }[],\n opts?: { allowDupTypes?: Set<number> },\n): Buffer {\n const allow = opts?.allowDupTypes ?? new Set<number>();\n const sorted = [...items].sort((a, b) => a.type - b.type);\n\n for (let i = 1; i < sorted.length; i++) {\n if (sorted[i].type === sorted[i - 1].type && !allow.has(sorted[i].type)) {\n throw new Error(`TLV_DUP_TYPE_${sorted[i].type}`);\n }\n }\n\n return Buffer.concat(sorted.map((it) => tlv(it.type, it.value)));\n}\n","// axis1.encode.ts\nimport { AXIS_MAGIC, AXIS_VERSION } from '@nextera.one/axis-protocol';\n\nimport { encVarint } from './tlv.encode';\n\nconst MAGIC = Buffer.from(AXIS_MAGIC);\n\nexport type Axis1FrameToEncode = {\n ver: number; // 1\n flags: number; // bit flags\n hdr: Buffer; // TLVs\n body: Buffer; // TLVs or raw payload\n sig: Buffer; // signature bytes\n};\n\nexport function encodeAxis1Frame(f: Axis1FrameToEncode): Buffer {\n if (\n !Buffer.isBuffer(f.hdr) ||\n !Buffer.isBuffer(f.body) ||\n !Buffer.isBuffer(f.sig)\n ) {\n throw new Error('AXIS1_BAD_BUFFERS');\n }\n if (f.ver !== AXIS_VERSION) throw new Error('AXIS1_BAD_VER');\n\n const hdrLen = encVarint(BigInt(f.hdr.length));\n const bodyLen = encVarint(BigInt(f.body.length));\n const sigLen = encVarint(BigInt(f.sig.length));\n\n return Buffer.concat([\n MAGIC,\n Buffer.from([f.ver & 0xff]),\n Buffer.from([f.flags & 0xff]),\n hdrLen,\n bodyLen,\n sigLen,\n f.hdr,\n f.body,\n f.sig,\n ]);\n}\n","// axis1.signing.ts\nimport { AXIS_MAGIC, AXIS_VERSION } from '@nextera.one/axis-protocol';\n\nimport { encVarint } from './tlv.encode';\n\nconst MAGIC = Buffer.from(AXIS_MAGIC);\n\nexport function axis1SigningBytes(params: {\n ver: number;\n flags: number;\n hdr: Buffer;\n body: Buffer;\n}): Buffer {\n if (params.ver !== AXIS_VERSION) throw new Error('AXIS1_BAD_VER');\n const hdrLen = encVarint(BigInt(params.hdr.length));\n const bodyLen = encVarint(BigInt(params.body.length));\n const sigLenZero = encVarint(0n); // IMPORTANT: sigLen=0 in signing bytes\n\n return Buffer.concat([\n MAGIC,\n Buffer.from([params.ver & 0xff]),\n Buffer.from([params.flags & 0xff]),\n hdrLen,\n bodyLen,\n sigLenZero,\n params.hdr,\n params.body,\n ]);\n}\n","/**\n * Base64url encoding/decoding utilities\n * RFC 4648 base64url (URL-safe, no padding)\n */\n\n/**\n * Encode buffer to base64url string\n * @param buf - Buffer to encode\n * @returns Base64url string (no padding, URL-safe)\n */\nexport function b64urlEncode(buf: Buffer): string {\n return buf\n .toString('base64')\n .replace(/=/g, '')\n .replace(/\\+/g, '-')\n .replace(/\\//g, '_');\n}\n\n/**\n * Decode base64url string to buffer\n * @param str - Base64url string\n * @returns Decoded buffer\n */\nexport function b64urlDecode(str: string): Buffer {\n // Add padding if needed\n const pad = str.length % 4 ? '='.repeat(4 - (str.length % 4)) : '';\n const base64 = (str + pad).replace(/-/g, '+').replace(/_/g, '/');\n return Buffer.from(base64, 'base64');\n}\n\n/**\n * Encode string to base64url\n * @param str - String to encode\n * @param encoding - String encoding (default: utf8)\n * @returns Base64url string\n */\nexport function b64urlEncodeString(\n str: string,\n encoding: BufferEncoding = 'utf8',\n): string {\n return b64urlEncode(Buffer.from(str, encoding));\n}\n\n/**\n * Decode base64url string to string\n * @param str - Base64url string\n * @param encoding - String encoding (default: utf8)\n * @returns Decoded string\n */\nexport function b64urlDecodeString(\n str: string,\n encoding: BufferEncoding = 'utf8',\n): string {\n return b64urlDecode(str).toString(encoding);\n}\n","/**\n * Canonical JSON serialization for stable cryptographic signing\n *\n * Rules:\n * - Recursively sort object keys lexicographically\n * - Remove undefined values\n * - Preserve array order\n * - No whitespace in output\n * - Stable number formatting\n */\n\n/**\n * Recursively sort object keys and remove undefined values\n */\nfunction sortRec(value: any): any {\n if (value === null) {\n return null;\n }\n\n if (value === undefined) {\n return undefined;\n }\n\n if (Array.isArray(value)) {\n return value.map(sortRec);\n }\n\n if (typeof value === 'object') {\n const sorted: Record<string, any> = {};\n const keys = Object.keys(value).sort();\n\n for (const key of keys) {\n const sortedValue = sortRec(value[key]);\n // Skip undefined values\n if (sortedValue !== undefined) {\n sorted[key] = sortedValue;\n }\n }\n\n return sorted;\n }\n\n // Primitive types (number, string, boolean)\n return value;\n}\n\n/**\n * Convert value to canonical JSON string for signing\n *\n * @param value - Value to canonicalize\n * @returns Canonical JSON string (no whitespace, sorted keys, no undefined)\n */\nexport function canonicalJson(value: any): string {\n return JSON.stringify(sortRec(value));\n}\n\n/**\n * Helper to create canonical JSON for signing (excluding specific fields)\n *\n * @param obj - Object to canonicalize\n * @param exclude - Fields to exclude (e.g., 'sig' when signing)\n * @returns Canonical JSON string\n */\nexport function canonicalJsonExcluding(\n obj: Record<string, any>,\n exclude: string[],\n): string {\n const filtered: Record<string, any> = {};\n\n for (const key in obj) {\n if (!exclude.includes(key) && obj[key] !== undefined) {\n filtered[key] = obj[key];\n }\n }\n\n return canonicalJson(filtered);\n}\n","export class ContractViolationError extends Error {\n constructor(\n public code: string,\n message: string,\n ) {\n super(message);\n this.name = 'ContractViolationError';\n }\n}\n\nexport interface ExecutionMetrics {\n dbWrites: number;\n dbReads: number;\n externalCalls: number;\n elapsedMs: number;\n}\n\nexport class ExecutionMeter {\n private dbWrites = 0;\n private dbReads = 0;\n private externalCalls = 0;\n private startTime: number;\n private contract: any; // ExecutionContract\n\n constructor(contract: any) {\n this.contract = contract;\n this.startTime = Date.now();\n }\n\n recordDbWrite(): void {\n this.dbWrites++;\n if (this.dbWrites > this.contract.maxDbWrites) {\n throw new ContractViolationError(\n 'MAX_DB_WRITES_EXCEEDED',\n `DB writes exceeded: ${this.dbWrites}/${this.contract.maxDbWrites}`,\n );\n }\n }\n\n recordDbRead(): void {\n this.dbReads++;\n if (this.contract.maxDbReads && this.dbReads > this.contract.maxDbReads) {\n throw new ContractViolationError(\n 'MAX_DB_READS_EXCEEDED',\n `DB reads exceeded: ${this.dbReads}/${this.contract.maxDbReads}`,\n );\n }\n }\n\n recordExternalCall(): void {\n this.externalCalls++;\n if (this.externalCalls > this.contract.maxExternalCalls) {\n throw new ContractViolationError(\n 'MAX_EXTERNAL_CALLS_EXCEEDED',\n `External calls exceeded: ${this.externalCalls}/${this.contract.maxExternalCalls}`,\n );\n }\n }\n\n checkTime(): void {\n const elapsed = Date.now() - this.startTime;\n if (elapsed > this.contract.maxTimeMs) {\n throw new ContractViolationError(\n 'MAX_TIME_EXCEEDED',\n `Execution time exceeded: ${elapsed}ms/${this.contract.maxTimeMs}ms`,\n );\n }\n }\n\n validateEffect(effect: string): void {\n // Wildcard allows any effect\n if (this.contract.allowedEffects.includes('*')) {\n return;\n }\n\n if (!this.contract.allowedEffects.includes(effect)) {\n throw new ContractViolationError(\n 'INVALID_EFFECT',\n `Effect '${effect}' not allowed. Allowed: ${this.contract.allowedEffects.join(', ')}`,\n );\n }\n }\n\n getMetrics(): ExecutionMetrics {\n return {\n dbWrites: this.dbWrites,\n dbReads: this.dbReads,\n externalCalls: this.externalCalls,\n elapsedMs: Date.now() - this.startTime,\n };\n }\n\n getContract() {\n return this.contract;\n }\n}\n","export interface ExecutionContract {\n maxDbWrites: number;\n maxDbReads?: number;\n maxExternalCalls: number;\n maxTimeMs: number;\n allowedEffects: string[];\n maxMemoryMb?: number;\n}\n\nexport const DEFAULT_CONTRACTS: Record<string, ExecutionContract> = {\n // System intents\n 'system.ping': {\n maxDbWrites: 0,\n maxExternalCalls: 0,\n maxTimeMs: 100,\n allowedEffects: ['system.pong'],\n },\n\n // Catalog intents\n 'catalog.list': {\n maxDbWrites: 0,\n maxExternalCalls: 0,\n maxTimeMs: 200,\n allowedEffects: ['catalog.listed'],\n },\n 'catalog.search': {\n maxDbWrites: 0,\n maxExternalCalls: 0,\n maxTimeMs: 300,\n allowedEffects: ['catalog.searched'],\n },\n\n // Passport intents\n 'passport.issue': {\n maxDbWrites: 10,\n maxExternalCalls: 0,\n maxTimeMs: 500,\n allowedEffects: ['passport.issued', 'passport.rejected'],\n },\n 'passport.revoke': {\n maxDbWrites: 5,\n maxExternalCalls: 0,\n maxTimeMs: 300,\n allowedEffects: ['passport.revoked', 'passport.revoke_failed'],\n },\n\n // File intents\n 'file.init': {\n maxDbWrites: 2,\n maxExternalCalls: 0,\n maxTimeMs: 200,\n allowedEffects: ['file.initialized'],\n },\n 'file.chunk': {\n maxDbWrites: 2,\n maxExternalCalls: 0,\n maxTimeMs: 1000,\n allowedEffects: ['file.chunk.stored'],\n },\n 'file.finalize': {\n maxDbWrites: 2,\n maxExternalCalls: 0,\n maxTimeMs: 500,\n allowedEffects: ['file.finalized'],\n },\n\n // Stream intents\n 'stream.publish': {\n maxDbWrites: 1,\n maxExternalCalls: 0,\n maxTimeMs: 200,\n allowedEffects: ['stream.published'],\n },\n 'stream.read': {\n maxDbWrites: 0,\n maxExternalCalls: 0,\n maxTimeMs: 300,\n allowedEffects: ['stream.data'],\n },\n\n // Mail intents\n 'mail.send': {\n maxDbWrites: 3,\n maxExternalCalls: 1, // Email service\n maxTimeMs: 2000,\n allowedEffects: ['mail.sent', 'mail.failed'],\n },\n};\n\n// Default contract for unknown intents\nexport const FALLBACK_CONTRACT: ExecutionContract = {\n maxDbWrites: 10,\n maxExternalCalls: 0,\n maxTimeMs: 1000,\n allowedEffects: ['*'], // Allow any effect\n};\n","/**\n * Decodes a variable-length integer (Varint) from a buffer.\n * Supports up to 64-bit integers.\n *\n * @param {Buffer} buf - The buffer to read from\n * @param {number} off - The offset to start reading from\n * @returns {Object} The decoded bigint value and the new offset\n * @throws {Error} If the varint is malformed or exceeds 64 bits\n */\nexport function decVarint(\n buf: Buffer,\n off: number,\n): { val: bigint; off: number } {\n let shift = 0n;\n let x = 0n;\n while (true) {\n if (off >= buf.length) throw new Error('varint overflow');\n const b = BigInt(buf[off++]);\n x |= (b & 0x7fn) << shift;\n if ((b & 0x80n) === 0n) break;\n shift += 7n;\n if (shift > 63n) throw new Error('varint too large');\n }\n return { val: x, off };\n}\n\nimport type { TLV } from '../core/tlv';\n\n/**\n * Parses a buffer into an array of TLV objects.\n *\n * @param {Buffer} buf - The buffer containing TLV-encoded data\n * @param {number} [maxItems=512] - Security limit for the number of TLVs to parse\n * @returns {TLV[]} An array of parsed TLVs\n * @throws {Error} If TLV structure is invalid or limits are exceeded\n */\nexport function parseTLVs(buf: Buffer, maxItems: number = 512): TLV[] {\n const out: TLV[] = [];\n let off = 0;\n while (off < buf.length) {\n if (out.length >= maxItems) throw new Error('TLV_TOO_MANY_ITEMS');\n const t1 = decVarint(buf, off);\n off = t1.off;\n const t2 = decVarint(buf, off);\n off = t2.off;\n const type = Number(t1.val);\n const len = Number(t2.val);\n if (len < 0 || off + len > buf.length) {\n throw new Error('TLV_LEN_INVALID');\n }\n const value = buf.subarray(off, off + len);\n off += len;\n out.push({ type, value });\n }\n return out;\n}\n\n/**\n * Parses TLVs and organizes them into a Map for efficient access.\n * Multiple values for the same type are preserved in an array.\n *\n * @param {Buffer} buf - The raw TLV-encoded buffer\n * @returns {Map<number, Buffer[]>} A map of Tag -> [Values]\n */\nexport function tlvMap(buf: Buffer): Map<number, Buffer[]> {\n const m = new Map<number, Buffer[]>();\n for (const it of parseTLVs(buf)) {\n const arr = m.get(it.type) ?? [];\n arr.push(it.value as Buffer);\n m.set(it.type, arr);\n }\n return m;\n}\n\nexport function asUtf8(b?: Buffer): string | undefined {\n if (!b) return undefined;\n return b.toString('utf8');\n}\n\nexport function asBigintVarint(b?: Buffer): bigint | undefined {\n if (!b) return undefined;\n const { val, off } = decVarint(b, 0);\n if (off !== b.length) throw new Error('VARINT_TRAILING_BYTES');\n return val;\n}\n\n/**\n * Parses an 8-byte big-endian buffer as a BigInt.\n * Used for timestamps which are sent as fixed 8-byte u64.\n */\nexport function asBigint64BE(b?: Buffer): bigint | undefined {\n if (!b) return undefined;\n if (b.length !== 8) throw new Error('Expected 8 bytes for u64');\n return b.readBigUInt64BE(0);\n}\n\nexport function encVarint(x: bigint): Buffer {\n if (x < 0n) throw new Error('varint neg');\n const out: number[] = [];\n while (x >= 0x80n) {\n out.push(Number((x & 0x7fn) | 0x80n));\n x >>= 7n;\n }\n out.push(Number(x));\n return Buffer.from(out);\n}\n\nexport function tlv(type: number, value: Buffer): Buffer {\n return Buffer.concat([\n encVarint(BigInt(type)),\n encVarint(BigInt(value.length)),\n value,\n ]);\n}\n\nexport function buildTLVs(items: { type: number; value: Buffer }[]): Buffer {\n // Canonical: sort by type ascending\n const sorted = [...items].sort((a, b) => a.type - b.type);\n\n // Canonical: forbid duplicate tags by default\n for (let i = 1; i < sorted.length; i++) {\n if (sorted[i].type === sorted[i - 1].type) {\n throw new Error(`TLV_DUP_TYPE_${sorted[i].type}`);\n }\n }\n\n return Buffer.concat(sorted.map((it) => tlv(it.type, it.value)));\n}\n\nexport function u64be(x: bigint): Buffer {\n const b = Buffer.alloc(8);\n b.writeBigUInt64BE(x);\n return b;\n}\n\nexport function utf8(s: string): Buffer {\n return Buffer.from(s, 'utf8');\n}\n\nexport function varintU(x: number | bigint): Buffer {\n const v = typeof x === 'number' ? BigInt(x) : x;\n return encVarint(v);\n}\n","import { AXIS_MAGIC } from '@nextera.one/axis-protocol';\n\nimport { decVarint } from './tlv';\n\n/**\n * Axis1DecodedFrame\n *\n * Represents a parsed AXIS v1 binary frame.\n *\n * @typedef {Object} Axis1DecodedFrame\n */\nexport type Axis1DecodedFrame = {\n /** Protocol version (should be 1) */\n ver: number;\n /** Frame flags for protocol extensions */\n flags: number;\n /** Raw header bytes (containing primary TLVs) */\n hdr: Buffer;\n /** Raw body bytes (the main payload) */\n body: Buffer;\n /** Cryptographic signature bytes */\n sig: Buffer;\n /** Total original size of the frame in bytes */\n frameSize: number;\n};\n\nconst MAGIC = Buffer.from(AXIS_MAGIC);\n\n/**\n * Decodes a raw binary buffer into a structured Axis1DecodedFrame.\n * Implements the AXIS v1 wire format specification.\n *\n * **Binary Structure (canonical):**\n * 1. Magic: 'AXIS1' (5 bytes)\n * 2. Version: (1 byte)\n * 3. Flags: (1 byte)\n * 4. HDR_LEN: Varint\n * 5. BODY_LEN: Varint\n * 6. SIG_LEN: Varint\n * 7. HDR: (HDR_LEN bytes)\n * 8. BODY: (BODY_LEN bytes)\n * 9. SIG: (SIG_LEN bytes)\n *\n * @param {Buffer} buf - Raw bytes from the wire\n * @returns {Axis1DecodedFrame} Parsed frame object\n * @throws {Error} If magic is invalid, frame is truncated, or lengths are inconsistent\n */\nexport function decodeAxis1Frame(buf: Buffer): Axis1DecodedFrame {\n let off = 0;\n\n const magic = buf.subarray(off, off + 5);\n off += 5;\n if (magic.length !== 5 || !magic.equals(MAGIC))\n throw new Error('AXIS1_BAD_MAGIC');\n\n if (off + 2 > buf.length) throw new Error('AXIS1_TRUNCATED');\n const ver = buf[off++];\n const flags = buf[off++];\n\n // Read all three lengths first (canonical order: hdrLen, bodyLen, sigLen)\n const h1 = decVarint(buf, off);\n off = h1.off;\n const b1 = decVarint(buf, off);\n off = b1.off;\n const s1 = decVarint(buf, off);\n off = s1.off;\n\n const hdrLen = Number(h1.val);\n const bodyLen = Number(b1.val);\n const sigLen = Number(s1.val);\n\n if (hdrLen < 0 || bodyLen < 0 || sigLen < 0) throw new Error('AXIS1_LEN_NEG');\n\n if (off + hdrLen + bodyLen + sigLen > buf.length)\n throw new Error('AXIS1_TRUNCATED_PAYLOAD');\n\n // Then read payloads in order: HDR, BODY, SIG\n const hdr = buf.subarray(off, off + hdrLen);\n off += hdrLen;\n const body = buf.subarray(off, off + bodyLen);\n off += bodyLen;\n const sig = buf.subarray(off, off + sigLen);\n off += sigLen;\n\n if (off !== buf.length) throw new Error('AXIS1_TRAILING_BYTES');\n\n return { ver, flags, hdr, body, sig, frameSize: buf.length };\n}\n","import {\n TLV_ACTOR_ID,\n TLV_INTENT,\n TLV_NONCE,\n TLV_PID,\n TLV_PROOF_REF,\n TLV_PROOF_TYPE,\n TLV_TS,\n} from '../core/constants';\nimport { asBigint64BE, asBigintVarint, asUtf8, tlvMap } from './tlv';\n\n/**\n * AXIS TLV Tag Definitions (as per specification)\n */\nexport const T = {\n /** The specific intent or action (e.g., 'vault.create') */\n INTENT: TLV_INTENT,\n /** Package identifier / ID */\n PID: TLV_PID,\n /** Versioning of the intent schema */\n INTENT_VERSION: 10, // Defaulting to TRACE_ID for now or a new tag if available\n /** Unique identifier for the requesting actor */\n ACTOR_ID: TLV_ACTOR_ID,\n /** Optional Capability Token identifier (16 bytes) */\n CAPSULE_ID: TLV_PROOF_REF,\n /** Unique session/request identifier (16 bytes) */\n NONCE: TLV_NONCE,\n /** High-precision Unix timestamp in milliseconds */\n TS_MS: TLV_TS,\n /** Proof type */\n PROOF_TYPE: TLV_PROOF_TYPE,\n /** Standard binary body tag */\n BODY: 100,\n /** Standard JSON-encoded body tag */\n JSON: 200,\n};\n\n/**\n * AxisPacket\n *\n * Parsed binary-packet view of an AXIS request after TLV header extraction.\n *\n * This is intentionally different from the protocol `AxisFrame`:\n * - `AxisFrame` is the wire envelope (`flags`, `headers`, `body`, `sig`)\n * - `AxisPacket` is the semantic header projection used by the backend after\n * decoding raw header TLVs into strongly named fields like `intent`,\n * `actorId`, `pid`, and `tsMs`\n */\nexport type AxisPacket = {\n /** The intent string */\n intent: string;\n /** Intent schema version */\n intentVersion: number;\n /** Actor identifier */\n actorId: string;\n /** Optional binary Capsule ID */\n capsuleId?: Buffer;\n /** Packet identifier */\n pid: Buffer;\n /** Random nonce for replay protection */\n nonce: Buffer;\n /** Request timestamp */\n tsMs: bigint;\n /** Decoded header TLV map */\n headersMap: Map<number, Buffer[]>;\n /** Decoded body TLV map (if body contains TLVs) */\n bodyMap: Map<number, Buffer[]>;\n /** Original raw header bytes */\n hdrBytes: Buffer;\n /** Original raw body bytes */\n bodyBytes: Buffer;\n /** Cryptographic signature of the frame */\n sig: Buffer;\n};\n\n/**\n * Constructs a structured AxisPacket from raw header, body, and signature buffers.\n * Performs rigorous validation on mandatory AXIS fields.\n *\n * @param {Buffer} hdr - Raw header bytes containing the primary TLVs\n * @param {Buffer} body - Raw body bytes\n * @param {Buffer} sig - Signature bytes for the frame\n * @param {number} [flags=0] - Frame flags (bit 0 = BODY_IS_TLV)\n * @returns {AxisPacket} A fully validated AxisPacket object\n * @throws {Error} If mandatory fields (intent, version, actor, nonce, ts) are missing or malformed\n */\nexport function buildPacket(\n hdr: Buffer,\n body: Buffer,\n sig: Buffer,\n flags: number = 0,\n): AxisPacket {\n const hm = tlvMap(hdr);\n\n // Only parse body as TLV if BODY_IS_TLV flag is set (bit 0)\n const BODY_IS_TLV = 0x01;\n const bm = flags & BODY_IS_TLV ? tlvMap(body) : new Map<number, Buffer[]>();\n\n const intent = asUtf8(hm.get(T.INTENT)?.[0]);\n const intentVerRaw = hm.get(T.INTENT_VERSION)?.[0];\n const intentVer = intentVerRaw ? Number(asBigintVarint(intentVerRaw)) : 1;\n const actorIdRaw = hm.get(T.ACTOR_ID)?.[0];\n const actorId = actorIdRaw ? actorIdRaw.toString('hex') : undefined;\n const capsuleId = hm.get(T.CAPSULE_ID)?.[0];\n const pid = hm.get(T.PID)?.[0] || hm.get(T.NONCE)?.[0]; // Fallback to nonce if pid missing\n const nonce = hm.get(T.NONCE)?.[0];\n const tsMs = asBigint64BE(hm.get(T.TS_MS)?.[0]);\n\n if (!intent) throw new Error('PACKET_MISSING_INTENT');\n if (!actorId) throw new Error('PACKET_MISSING_ACTOR_ID');\n if (!nonce || nonce.length < 16 || nonce.length > 32)\n throw new Error('PACKET_BAD_NONCE');\n if (!pid) throw new Error('PACKET_MISSING_PID');\n if (!tsMs) throw new Error('PACKET_MISSING_TS');\n\n return {\n intent,\n intentVersion: intentVer,\n actorId,\n capsuleId,\n pid,\n nonce,\n tsMs,\n headersMap: hm,\n bodyMap: bm,\n hdrBytes: hdr,\n bodyBytes: body,\n sig,\n };\n}\n","/**\n * AXIS Capability Model\n * Maps proof types to capabilities and intents to requirements.\n */\nimport { PROOF_CAPSULE, PROOF_JWT, PROOF_LOOM, PROOF_MTLS, PROOF_NONE, PROOF_WITNESS } from '../core/constants';\n\n/**\n * Available capabilities in the AXIS system.\n * Each represents a distinct permission level.\n */\nexport const CAPABILITIES = {\n read: 'read',\n write: 'write',\n execute: 'execute',\n admin: 'admin',\n sign: 'sign',\n witness: 'witness',\n} as const;\n\nexport type Capability = keyof typeof CAPABILITIES;\n\n/**\n * Maps proof type codes to granted capabilities.\n */\nexport const PROOF_CAPABILITIES: Record<number, Capability[]> = {\n [PROOF_NONE]: [],\n [PROOF_CAPSULE]: ['read', 'write', 'execute'],\n [PROOF_JWT]: ['read'],\n [PROOF_MTLS]: ['read', 'write', 'admin'],\n [PROOF_LOOM]: ['read', 'write', 'execute'],\n [PROOF_WITNESS]: ['read', 'write', 'execute', 'witness'],\n};\n\n/**\n * Maps intent patterns to required capabilities.\n * Patterns ending with '.*' match any intent with that prefix.\n */\nexport const INTENT_REQUIREMENTS: Record<string, Capability[]> = {\n 'public.*': [],\n 'schema.*': [],\n 'catalog.*': [],\n 'health.*': [],\n 'system.*': [],\n\n 'file.upload': ['write'],\n 'file.download': ['read'],\n 'file.delete': ['write', 'admin'],\n\n 'passport.issue': ['write', 'execute'],\n 'passport.revoke': ['write', 'witness'],\n\n 'stream.publish': ['write'],\n 'stream.subscribe': ['read'],\n\n // NestFlow intents\n 'auth.web.login.*': ['execute'],\n 'tickauth.challenge.*': ['execute'],\n 'capsule.issue.*': ['write', 'execute'],\n 'session.*': ['execute'],\n 'device.list': ['read'],\n 'device.rename': ['write'],\n 'device.trust.*': ['write', 'execute'],\n 'device.revoke': ['write', 'execute'],\n 'identity.*': ['admin', 'execute'],\n 'primary.device.*': ['admin', 'execute'],\n 'secret.rotate': ['admin'],\n 'org.security.*': ['admin'],\n 'production.execution.*': ['admin', 'execute'],\n\n 'admin.*': ['admin'],\n};\n","(function(nacl) {\n'use strict';\n\n// Ported in 2014 by Dmitry Chestnykh and Devi Mandiri.\n// Public domain.\n//\n// Implementation derived from TweetNaCl version 20140427.\n// See for details: http://tweetnacl.cr.yp.to/\n\nvar gf = function(init) {\n var i, r = new Float64Array(16);\n if (init) for (i = 0; i < init.length; i++) r[i] = init[i];\n return r;\n};\n\n// Pluggable, initialized in high-level API below.\nvar randombytes = function(/* x, n */) { throw new Error('no PRNG'); };\n\nvar _0 = new Uint8Array(16);\nvar _9 = new Uint8Array(32); _9[0] = 9;\n\nvar gf0 = gf(),\n gf1 = gf([1]),\n _121665 = gf([0xdb41, 1]),\n D = gf([0x78a3, 0x1359, 0x4dca, 0x75eb, 0xd8ab, 0x4141, 0x0a4d, 0x0070, 0xe898, 0x7779, 0x4079, 0x8cc7, 0xfe73, 0x2b6f, 0x6cee, 0x5203]),\n D2 = gf([0xf159, 0x26b2, 0x9b94, 0xebd6, 0xb156, 0x8283, 0x149a, 0x00e0, 0xd130, 0xeef3, 0x80f2, 0x198e, 0xfce7, 0x56df, 0xd9dc, 0x2406]),\n X = gf([0xd51a, 0x8f25, 0x2d60, 0xc956, 0xa7b2, 0x9525, 0xc760, 0x692c, 0xdc5c, 0xfdd6, 0xe231, 0xc0a4, 0x53fe, 0xcd6e, 0x36d3, 0x2169]),\n Y = gf([0x6658, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666]),\n I = gf([0xa0b0, 0x4a0e, 0x1b27, 0xc4ee, 0xe478, 0xad2f, 0x1806, 0x2f43, 0xd7a7, 0x3dfb, 0x0099, 0x2b4d, 0xdf0b, 0x4fc1, 0x2480, 0x2b83]);\n\nfunction ts64(x, i, h, l) {\n x[i] = (h >> 24) & 0xff;\n x[i+1] = (h >> 16) & 0xff;\n x[i+2] = (h >> 8) & 0xff;\n x[i+3] = h & 0xff;\n x[i+4] = (l >> 24) & 0xff;\n x[i+5] = (l >> 16) & 0xff;\n x[i+6] = (l >> 8) & 0xff;\n x[i+7] = l & 0xff;\n}\n\nfunction vn(x, xi, y, yi, n) {\n var i,d = 0;\n for (i = 0; i < n; i++) d |= x[xi+i]^y[yi+i];\n return (1 & ((d - 1) >>> 8)) - 1;\n}\n\nfunction crypto_verify_16(x, xi, y, yi) {\n return vn(x,xi,y,yi,16);\n}\n\nfunction crypto_verify_32(x, xi, y, yi) {\n return vn(x,xi,y,yi,32);\n}\n\nfunction core_salsa20(o, p, k, c) {\n var j0 = c[ 0] & 0xff | (c[ 1] & 0xff)<<8 | (c[ 2] & 0xff)<<16 | (c[ 3] & 0xff)<<24,\n j1 = k[ 0] & 0xff | (k[ 1] & 0xff)<<8 | (k[ 2] & 0xff)<<16 | (k[ 3] & 0xff)<<24,\n j2 = k[ 4] & 0xff | (k[ 5] & 0xff)<<8 | (k[ 6] & 0xff)<<16 | (k[ 7] & 0xff)<<24,\n j3 = k[ 8] & 0xff | (k[ 9] & 0xff)<<8 | (k[10] & 0xff)<<16 | (k[11] & 0xff)<<24,\n j4 = k[12] & 0xff | (k[13] & 0xff)<<8 | (k[14] & 0xff)<<16 | (k[15] & 0xff)<<24,\n j5 = c[ 4] & 0xff | (c[ 5] & 0xff)<<8 | (c[ 6] & 0xff)<<16 | (c[ 7] & 0xff)<<24,\n j6 = p[ 0] & 0xff | (p[ 1] & 0xff)<<8 | (p[ 2] & 0xff)<<16 | (p[ 3] & 0xff)<<24,\n j7 = p[ 4] & 0xff | (p[ 5] & 0xff)<<8 | (p[ 6] & 0xff)<<16 | (p[ 7] & 0xff)<<24,\n j8 = p[ 8] & 0xff | (p[ 9] & 0xff)<<8 | (p[10] & 0xff)<<16 | (p[11] & 0xff)<<24,\n j9 = p[12] & 0xff | (p[13] & 0xff)<<8 | (p[14] & 0xff)<<16 | (p[15] & 0xff)<<24,\n j10 = c[ 8] & 0xff | (c[ 9] & 0xff)<<8 | (c[10] & 0xff)<<16 | (c[11] & 0xff)<<24,\n j11 = k[16] & 0xff | (k[17] & 0xff)<<8 | (k[18] & 0xff)<<16 | (k[19] & 0xff)<<24,\n j12 = k[20] & 0xff | (k[21] & 0xff)<<8 | (k[22] & 0xff)<<16 | (k[23] & 0xff)<<24,\n j13 = k[24] & 0xff | (k[25] & 0xff)<<8 | (k[26] & 0xff)<<16 | (k[27] & 0xff)<<24,\n j14 = k[28] & 0xff | (k[29] & 0xff)<<8 | (k[30] & 0xff)<<16 | (k[31] & 0xff)<<24,\n j15 = c[12] & 0xff | (c[13] & 0xff)<<8 | (c[14] & 0xff)<<16 | (c[15] & 0xff)<<24;\n\n var x0 = j0, x1 = j1, x2 = j2, x3 = j3, x4 = j4, x5 = j5, x6 = j6, x7 = j7,\n x8 = j8, x9 = j9, x10 = j10, x11 = j11, x12 = j12, x13 = j13, x14 = j14,\n x15 = j15, u;\n\n for (var i = 0; i < 20; i += 2) {\n u = x0 + x12 | 0;\n x4 ^= u<<7 | u>>>(32-7);\n u = x4 + x0 | 0;\n x8 ^= u<<9 | u>>>(32-9);\n u = x8 + x4 | 0;\n x12 ^= u<<13 | u>>>(32-13);\n u = x12 + x8 | 0;\n x0 ^= u<<18 | u>>>(32-18);\n\n u = x5 + x1 | 0;\n x9 ^= u<<7 | u>>>(32-7);\n u = x9 + x5 | 0;\n x13 ^= u<<9 | u>>>(32-9);\n u = x13 + x9 | 0;\n x1 ^= u<<13 | u>>>(32-13);\n u = x1 + x13 | 0;\n x5 ^= u<<18 | u>>>(32-18);\n\n u = x10 + x6 | 0;\n x14 ^= u<<7 | u>>>(32-7);\n u = x14 + x10 | 0;\n x2 ^= u<<9 | u>>>(32-9);\n u = x2 + x14 | 0;\n x6 ^= u<<13 | u>>>(32-13);\n u = x6 + x2 | 0;\n x10 ^= u<<18 | u>>>(32-18);\n\n u = x15 + x11 | 0;\n x3 ^= u<<7 | u>>>(32-7);\n u = x3 + x15 | 0;\n x7 ^= u<<9 | u>>>(32-9);\n u = x7 + x3 | 0;\n x11 ^= u<<13 | u>>>(32-13);\n u = x11 + x7 | 0;\n x15 ^= u<<18 | u>>>(32-18);\n\n u = x0 + x3 | 0;\n x1 ^= u<<7 | u>>>(32-7);\n u = x1 + x0 | 0;\n x2 ^= u<<9 | u>>>(32-9);\n u = x2 + x1 | 0;\n x3 ^= u<<13 | u>>>(32-13);\n u = x3 + x2 | 0;\n x0 ^= u<<18 | u>>>(32-18);\n\n u = x5 + x4 | 0;\n x6 ^= u<<7 | u>>>(32-7);\n u = x6 + x5 | 0;\n x7 ^= u<<9 | u>>>(32-9);\n u = x7 + x6 | 0;\n x4 ^= u<<13 | u>>>(32-13);\n u = x4 + x7 | 0;\n x5 ^= u<<18 | u>>>(32-18);\n\n u = x10 + x9 | 0;\n x11 ^= u<<7 | u>>>(32-7);\n u = x11 + x10 | 0;\n x8 ^= u<<9 | u>>>(32-9);\n u = x8 + x11 | 0;\n x9 ^= u<<13 | u>>>(32-13);\n u = x9 + x8 | 0;\n x10 ^= u<<18 | u>>>(32-18);\n\n u = x15 + x14 | 0;\n x12 ^= u<<7 | u>>>(32-7);\n u = x12 + x15 | 0;\n x13 ^= u<<9 | u>>>(32-9);\n u = x13 + x12 | 0;\n x14 ^= u<<13 | u>>>(32-13);\n u = x14 + x13 | 0;\n x15 ^= u<<18 | u>>>(32-18);\n }\n x0 = x0 + j0 | 0;\n x1 = x1 + j1 | 0;\n x2 = x2 + j2 | 0;\n x3 = x3 + j3 | 0;\n x4 = x4 + j4 | 0;\n x5 = x5 + j5 | 0;\n x6 = x6 + j6 | 0;\n x7 = x7 + j7 | 0;\n x8 = x8 + j8 | 0;\n x9 = x9 + j9 | 0;\n x10 = x10 + j10 | 0;\n x11 = x11 + j11 | 0;\n x12 = x12 + j12 | 0;\n x13 = x13 + j13 | 0;\n x14 = x14 + j14 | 0;\n x15 = x15 + j15 | 0;\n\n o[ 0] = x0 >>> 0 & 0xff;\n o[ 1] = x0 >>> 8 & 0xff;\n o[ 2] = x0 >>> 16 & 0xff;\n o[ 3] = x0 >>> 24 & 0xff;\n\n o[ 4] = x1 >>> 0 & 0xff;\n o[ 5] = x1 >>> 8 & 0xff;\n o[ 6] = x1 >>> 16 & 0xff;\n o[ 7] = x1 >>> 24 & 0xff;\n\n o[ 8] = x2 >>> 0 & 0xff;\n o[ 9] = x2 >>> 8 & 0xff;\n o[10] = x2 >>> 16 & 0xff;\n o[11] = x2 >>> 24 & 0xff;\n\n o[12] = x3 >>> 0 & 0xff;\n o[13] = x3 >>> 8 & 0xff;\n o[14] = x3 >>> 16 & 0xff;\n o[15] = x3 >>> 24 & 0xff;\n\n o[16] = x4 >>> 0 & 0xff;\n o[17] = x4 >>> 8 & 0xff;\n o[18] = x4 >>> 16 & 0xff;\n o[19] = x4 >>> 24 & 0xff;\n\n o[20] = x5 >>> 0 & 0xff;\n o[21] = x5 >>> 8 & 0xff;\n o[22] = x5 >>> 16 & 0xff;\n o[23] = x5 >>> 24 & 0xff;\n\n o[24] = x6 >>> 0 & 0xff;\n o[25] = x6 >>> 8 & 0xff;\n o[26] = x6 >>> 16 & 0xff;\n o[27] = x6 >>> 24 & 0xff;\n\n o[28] = x7 >>> 0 & 0xff;\n o[29] = x7 >>> 8 & 0xff;\n o[30] = x7 >>> 16 & 0xff;\n o[31] = x7 >>> 24 & 0xff;\n\n o[32] = x8 >>> 0 & 0xff;\n o[33] = x8 >>> 8 & 0xff;\n o[34] = x8 >>> 16 & 0xff;\n o[35] = x8 >>> 24 & 0xff;\n\n o[36] = x9 >>> 0 & 0xff;\n o[37] = x9 >>> 8 & 0xff;\n o[38] = x9 >>> 16 & 0xff;\n o[39] = x9 >>> 24 & 0xff;\n\n o[40] = x10 >>> 0 & 0xff;\n o[41] = x10 >>> 8 & 0xff;\n o[42] = x10 >>> 16 & 0xff;\n o[43] = x10 >>> 24 & 0xff;\n\n o[44] = x11 >>> 0 & 0xff;\n o[45] = x11 >>> 8 & 0xff;\n o[46] = x11 >>> 16 & 0xff;\n o[47] = x11 >>> 24 & 0xff;\n\n o[48] = x12 >>> 0 & 0xff;\n o[49] = x12 >>> 8 & 0xff;\n o[50] = x12 >>> 16 & 0xff;\n o[51] = x12 >>> 24 & 0xff;\n\n o[52] = x13 >>> 0 & 0xff;\n o[53] = x13 >>> 8 & 0xff;\n o[54] = x13 >>> 16 & 0xff;\n o[55] = x13 >>> 24 & 0xff;\n\n o[56] = x14 >>> 0 & 0xff;\n o[57] = x14 >>> 8 & 0xff;\n o[58] = x14 >>> 16 & 0xff;\n o[59] = x14 >>> 24 & 0xff;\n\n o[60] = x15 >>> 0 & 0xff;\n o[61] = x15 >>> 8 & 0xff;\n o[62] = x15 >>> 16 & 0xff;\n o[63] = x15 >>> 24 & 0xff;\n}\n\nfunction core_hsalsa20(o,p,k,c) {\n var j0 = c[ 0] & 0xff | (c[ 1] & 0xff)<<8 | (c[ 2] & 0xff)<<16 | (c[ 3] & 0xff)<<24,\n j1 = k[ 0] & 0xff | (k[ 1] & 0xff)<<8 | (k[ 2] & 0xff)<<16 | (k[ 3] & 0xff)<<24,\n j2 = k[ 4] & 0xff | (k[ 5] & 0xff)<<8 | (k[ 6] & 0xff)<<16 | (k[ 7] & 0xff)<<24,\n j3 = k[ 8] & 0xff | (k[ 9] & 0xff)<<8 | (k[10] & 0xff)<<16 | (k[11] & 0xff)<<24,\n j4 = k[12] & 0xff | (k[13] & 0xff)<<8 | (k[14] & 0xff)<<16 | (k[15] & 0xff)<<24,\n j5 = c[ 4] & 0xff | (c[ 5] & 0xff)<<8 | (c[ 6] & 0xff)<<16 | (c[ 7] & 0xff)<<24,\n j6 = p[ 0] & 0xff | (p[ 1] & 0xff)<<8 | (p[ 2] & 0xff)<<16 | (p[ 3] & 0xff)<<24,\n j7 = p[ 4] & 0xff | (p[ 5] & 0xff)<<8 | (p[ 6] & 0xff)<<16 | (p[ 7] & 0xff)<<24,\n j8 = p[ 8] & 0xff | (p[ 9] & 0xff)<<8 | (p[10] & 0xff)<<16 | (p[11] & 0xff)<<24,\n j9 = p[12] & 0xff | (p[13] & 0xff)<<8 | (p[14] & 0xff)<<16 | (p[15] & 0xff)<<24,\n j10 = c[ 8] & 0xff | (c[ 9] & 0xff)<<8 | (c[10] & 0xff)<<16 | (c[11] & 0xff)<<24,\n j11 = k[16] & 0xff | (k[17] & 0xff)<<8 | (k[18] & 0xff)<<16 | (k[19] & 0xff)<<24,\n j12 = k[20] & 0xff | (k[21] & 0xff)<<8 | (k[22] & 0xff)<<16 | (k[23] & 0xff)<<24,\n j13 = k[24] & 0xff | (k[25] & 0xff)<<8 | (k[26] & 0xff)<<16 | (k[27] & 0xff)<<24,\n j14 = k[28] & 0xff | (k[29] & 0xff)<<8 | (k[30] & 0xff)<<16 | (k[31] & 0xff)<<24,\n j15 = c[12] & 0xff | (c[13] & 0xff)<<8 | (c[14] & 0xff)<<16 | (c[15] & 0xff)<<24;\n\n var x0 = j0, x1 = j1, x2 = j2, x3 = j3, x4 = j4, x5 = j5, x6 = j6, x7 = j7,\n x8 = j8, x9 = j9, x10 = j10, x11 = j11, x12 = j12, x13 = j13, x14 = j14,\n x15 = j15, u;\n\n for (var i = 0; i < 20; i += 2) {\n u = x0 + x12 | 0;\n x4 ^= u<<7 | u>>>(32-7);\n u = x4 + x0 | 0;\n x8 ^= u<<9 | u>>>(32-9);\n u = x8 + x4 | 0;\n x12 ^= u<<13 | u>>>(32-13);\n u = x12 + x8 | 0;\n x0 ^= u<<18 | u>>>(32-18);\n\n u = x5 + x1 | 0;\n x9 ^= u<<7 | u>>>(32-7);\n u = x9 + x5 | 0;\n x13 ^= u<<9 | u>>>(32-9);\n u = x13 + x9 | 0;\n x1 ^= u<<13 | u>>>(32-13);\n u = x1 + x13 | 0;\n x5 ^= u<<18 | u>>>(32-18);\n\n u = x10 + x6 | 0;\n x14 ^= u<<7 | u>>>(32-7);\n u = x14 + x10 | 0;\n x2 ^= u<<9 | u>>>(32-9);\n u = x2 + x14 | 0;\n x6 ^= u<<13 | u>>>(32-13);\n u = x6 + x2 | 0;\n x10 ^= u<<18 | u>>>(32-18);\n\n u = x15 + x11 | 0;\n x3 ^= u<<7 | u>>>(32-7);\n u = x3 + x15 | 0;\n x7 ^= u<<9 | u>>>(32-9);\n u = x7 + x3 | 0;\n x11 ^= u<<13 | u>>>(32-13);\n u = x11 + x7 | 0;\n x15 ^= u<<18 | u>>>(32-18);\n\n u = x0 + x3 | 0;\n x1 ^= u<<7 | u>>>(32-7);\n u = x1 + x0 | 0;\n x2 ^= u<<9 | u>>>(32-9);\n u = x2 + x1 | 0;\n x3 ^= u<<13 | u>>>(32-13);\n u = x3 + x2 | 0;\n x0 ^= u<<18 | u>>>(32-18);\n\n u = x5 + x4 | 0;\n x6 ^= u<<7 | u>>>(32-7);\n u = x6 + x5 | 0;\n x7 ^= u<<9 | u>>>(32-9);\n u = x7 + x6 | 0;\n x4 ^= u<<13 | u>>>(32-13);\n u = x4 + x7 | 0;\n x5 ^= u<<18 | u>>>(32-18);\n\n u = x10 + x9 | 0;\n x11 ^= u<<7 | u>>>(32-7);\n u = x11 + x10 | 0;\n x8 ^= u<<9 | u>>>(32-9);\n u = x8 + x11 | 0;\n x9 ^= u<<13 | u>>>(32-13);\n u = x9 + x8 | 0;\n x10 ^= u<<18 | u>>>(32-18);\n\n u = x15 + x14 | 0;\n x12 ^= u<<7 | u>>>(32-7);\n u = x12 + x15 | 0;\n x13 ^= u<<9 | u>>>(32-9);\n u = x13 + x12 | 0;\n x14 ^= u<<13 | u>>>(32-13);\n u = x14 + x13 | 0;\n x15 ^= u<<18 | u>>>(32-18);\n }\n\n o[ 0] = x0 >>> 0 & 0xff;\n o[ 1] = x0 >>> 8 & 0xff;\n o[ 2] = x0 >>> 16 & 0xff;\n o[ 3] = x0 >>> 24 & 0xff;\n\n o[ 4] = x5 >>> 0 & 0xff;\n o[ 5] = x5 >>> 8 & 0xff;\n o[ 6] = x5 >>> 16 & 0xff;\n o[ 7] = x5 >>> 24 & 0xff;\n\n o[ 8] = x10 >>> 0 & 0xff;\n o[ 9] = x10 >>> 8 & 0xff;\n o[10] = x10 >>> 16 & 0xff;\n o[11] = x10 >>> 24 & 0xff;\n\n o[12] = x15 >>> 0 & 0xff;\n o[13] = x15 >>> 8 & 0xff;\n o[14] = x15 >>> 16 & 0xff;\n o[15] = x15 >>> 24 & 0xff;\n\n o[16] = x6 >>> 0 & 0xff;\n o[17] = x6 >>> 8 & 0xff;\n o[18] = x6 >>> 16 & 0xff;\n o[19] = x6 >>> 24 & 0xff;\n\n o[20] = x7 >>> 0 & 0xff;\n o[21] = x7 >>> 8 & 0xff;\n o[22] = x7 >>> 16 & 0xff;\n o[23] = x7 >>> 24 & 0xff;\n\n o[24] = x8 >>> 0 & 0xff;\n o[25] = x8 >>> 8 & 0xff;\n o[26] = x8 >>> 16 & 0xff;\n o[27] = x8 >>> 24 & 0xff;\n\n o[28] = x9 >>> 0 & 0xff;\n o[29] = x9 >>> 8 & 0xff;\n o[30] = x9 >>> 16 & 0xff;\n o[31] = x9 >>> 24 & 0xff;\n}\n\nfunction crypto_core_salsa20(out,inp,k,c) {\n core_salsa20(out,inp,k,c);\n}\n\nfunction crypto_core_hsalsa20(out,inp,k,c) {\n core_hsalsa20(out,inp,k,c);\n}\n\nvar sigma = new Uint8Array([101, 120, 112, 97, 110, 100, 32, 51, 50, 45, 98, 121, 116, 101, 32, 107]);\n // \"expand 32-byte k\"\n\nfunction crypto_stream_salsa20_xor(c,cpos,m,mpos,b,n,k) {\n var z = new Uint8Array(16), x = new Uint8Array(64);\n var u, i;\n for (i = 0; i < 16; i++) z[i] = 0;\n for (i = 0; i < 8; i++) z[i] = n[i];\n while (b >= 64) {\n crypto_core_salsa20(x,z,k,sigma);\n for (i = 0; i < 64; i++) c[cpos+i] = m[mpos+i] ^ x[i];\n u = 1;\n for (i = 8; i < 16; i++) {\n u = u + (z[i] & 0xff) | 0;\n z[i] = u & 0xff;\n u >>>= 8;\n }\n b -= 64;\n cpos += 64;\n mpos += 64;\n }\n if (b > 0) {\n crypto_core_salsa20(x,z,k,sigma);\n for (i = 0; i < b; i++) c[cpos+i] = m[mpos+i] ^ x[i];\n }\n return 0;\n}\n\nfunction crypto_stream_salsa20(c,cpos,b,n,k) {\n var z = new Uint8Array(16), x = new Uint8Array(64);\n var u, i;\n for (i = 0; i < 16; i++) z[i] = 0;\n for (i = 0; i < 8; i++) z[i] = n[i];\n while (b >= 64) {\n crypto_core_salsa20(x,z,k,sigma);\n for (i = 0; i < 64; i++) c[cpos+i] = x[i];\n u = 1;\n for (i = 8; i < 16; i++) {\n u = u + (z[i] & 0xff) | 0;\n z[i] = u & 0xff;\n u >>>= 8;\n }\n b -= 64;\n cpos += 64;\n }\n if (b > 0) {\n crypto_core_salsa20(x,z,k,sigma);\n for (i = 0; i < b; i++) c[cpos+i] = x[i];\n }\n return 0;\n}\n\nfunction crypto_stream(c,cpos,d,n,k) {\n var s = new Uint8Array(32);\n crypto_core_hsalsa20(s,n,k,sigma);\n var sn = new Uint8Array(8);\n for (var i = 0; i < 8; i++) sn[i] = n[i+16];\n return crypto_stream_salsa20(c,cpos,d,sn,s);\n}\n\nfunction crypto_stream_xor(c,cpos,m,mpos,d,n,k) {\n var s = new Uint8Array(32);\n crypto_core_hsalsa20(s,n,k,sigma);\n var sn = new Uint8Array(8);\n for (var i = 0; i < 8; i++) sn[i] = n[i+16];\n return crypto_stream_salsa20_xor(c,cpos,m,mpos,d,sn,s);\n}\n\n/*\n* Port of Andrew Moon's Poly1305-donna-16. Public domain.\n* https://github.com/floodyberry/poly1305-donna\n*/\n\nvar poly1305 = function(key) {\n this.buffer = new Uint8Array(16);\n this.r = new Uint16Array(10);\n this.h = new Uint16Array(10);\n this.pad = new Uint16Array(8);\n this.leftover = 0;\n this.fin = 0;\n\n var t0, t1, t2, t3, t4, t5, t6, t7;\n\n t0 = key[ 0] & 0xff | (key[ 1] & 0xff) << 8; this.r[0] = ( t0 ) & 0x1fff;\n t1 = key[ 2] & 0xff | (key[ 3] & 0xff) << 8; this.r[1] = ((t0 >>> 13) | (t1 << 3)) & 0x1fff;\n t2 = key[ 4] & 0xff | (key[ 5] & 0xff) << 8; this.r[2] = ((t1 >>> 10) | (t2 << 6)) & 0x1f03;\n t3 = key[ 6] & 0xff | (key[ 7] & 0xff) << 8; this.r[3] = ((t2 >>> 7) | (t3 << 9)) & 0x1fff;\n t4 = key[ 8] & 0xff | (key[ 9] & 0xff) << 8; this.r[4] = ((t3 >>> 4) | (t4 << 12)) & 0x00ff;\n this.r[5] = ((t4 >>> 1)) & 0x1ffe;\n t5 = key[10] & 0xff | (key[11] & 0xff) << 8; this.r[6] = ((t4 >>> 14) | (t5 << 2)) & 0x1fff;\n t6 = key[12] & 0xff | (key[13] & 0xff) << 8; this.r[7] = ((t5 >>> 11) | (t6 << 5)) & 0x1f81;\n t7 = key[14] & 0xff | (key[15] & 0xff) << 8; this.r[8] = ((t6 >>> 8) | (t7 << 8)) & 0x1fff;\n this.r[9] = ((t7 >>> 5)) & 0x007f;\n\n this.pad[0] = key[16] & 0xff | (key[17] & 0xff) << 8;\n this.pad[1] = key[18] & 0xff | (key[19] & 0xff) << 8;\n this.pad[2] = key[20] & 0xff | (key[21] & 0xff) << 8;\n this.pad[3] = key[22] & 0xff | (key[23] & 0xff) << 8;\n this.pad[4] = key[24] & 0xff | (key[25] & 0xff) << 8;\n this.pad[5] = key[26] & 0xff | (key[27] & 0xff) << 8;\n this.pad[6] = key[28] & 0xff | (key[29] & 0xff) << 8;\n this.pad[7] = key[30] & 0xff | (key[31] & 0xff) << 8;\n};\n\npoly1305.prototype.blocks = function(m, mpos, bytes) {\n var hibit = this.fin ? 0 : (1 << 11);\n var t0, t1, t2, t3, t4, t5, t6, t7, c;\n var d0, d1, d2, d3, d4, d5, d6, d7, d8, d9;\n\n var h0 = this.h[0],\n h1 = this.h[1],\n h2 = this.h[2],\n h3 = this.h[3],\n h4 = this.h[4],\n h5 = this.h[5],\n h6 = this.h[6],\n h7 = this.h[7],\n h8 = this.h[8],\n h9 = this.h[9];\n\n var r0 = this.r[0],\n r1 = this.r[1],\n r2 = this.r[2],\n r3 = this.r[3],\n r4 = this.r[4],\n r5 = this.r[5],\n r6 = this.r[6],\n r7 = this.r[7],\n r8 = this.r[8],\n r9 = this.r[9];\n\n while (bytes >= 16) {\n t0 = m[mpos+ 0] & 0xff | (m[mpos+ 1] & 0xff) << 8; h0 += ( t0 ) & 0x1fff;\n t1 = m[mpos+ 2] & 0xff | (m[mpos+ 3] & 0xff) << 8; h1 += ((t0 >>> 13) | (t1 << 3)) & 0x1fff;\n t2 = m[mpos+ 4] & 0xff | (m[mpos+ 5] & 0xff) << 8; h2 += ((t1 >>> 10) | (t2 << 6)) & 0x1fff;\n t3 = m[mpos+ 6] & 0xff | (m[mpos+ 7] & 0xff) << 8; h3 += ((t2 >>> 7) | (t3 << 9)) & 0x1fff;\n t4 = m[mpos+ 8] & 0xff | (m[mpos+ 9] & 0xff) << 8; h4 += ((t3 >>> 4) | (t4 << 12)) & 0x1fff;\n h5 += ((t4 >>> 1)) & 0x1fff;\n t5 = m[mpos+10] & 0xff | (m[mpos+11] & 0xff) << 8; h6 += ((t4 >>> 14) | (t5 << 2)) & 0x1fff;\n t6 = m[mpos+12] & 0xff | (m[mpos+13] & 0xff) << 8; h7 += ((t5 >>> 11) | (t6 << 5)) & 0x1fff;\n t7 = m[mpos+14] & 0xff | (m[mpos+15] & 0xff) << 8; h8 += ((t6 >>> 8) | (t7 << 8)) & 0x1fff;\n h9 += ((t7 >>> 5)) | hibit;\n\n c = 0;\n\n d0 = c;\n d0 += h0 * r0;\n d0 += h1 * (5 * r9);\n d0 += h2 * (5 * r8);\n d0 += h3 * (5 * r7);\n d0 += h4 * (5 * r6);\n c = (d0 >>> 13); d0 &= 0x1fff;\n d0 += h5 * (5 * r5);\n d0 += h6 * (5 * r4);\n d0 += h7 * (5 * r3);\n d0 += h8 * (5 * r2);\n d0 += h9 * (5 * r1);\n c += (d0 >>> 13); d0 &= 0x1fff;\n\n d1 = c;\n d1 += h0 * r1;\n d1 += h1 * r0;\n d1 += h2 * (5 * r9);\n d1 += h3 * (5 * r8);\n d1 += h4 * (5 * r7);\n c = (d1 >>> 13); d1 &= 0x1fff;\n d1 += h5 * (5 * r6);\n d1 += h6 * (5 * r5);\n d1 += h7 * (5 * r4);\n d1 += h8 * (5 * r3);\n d1 += h9 * (5 * r2);\n c += (d1 >>> 13); d1 &= 0x1fff;\n\n d2 = c;\n d2 += h0 * r2;\n d2 += h1 * r1;\n d2 += h2 * r0;\n d2 += h3 * (5 * r9);\n d2 += h4 * (5 * r8);\n c = (d2 >>> 13); d2 &= 0x1fff;\n d2 += h5 * (5 * r7);\n d2 += h6 * (5 * r6);\n d2 += h7 * (5 * r5);\n d2 += h8 * (5 * r4);\n d2 += h9 * (5 * r3);\n c += (d2 >>> 13); d2 &= 0x1fff;\n\n d3 = c;\n d3 += h0 * r3;\n d3 += h1 * r2;\n d3 += h2 * r1;\n d3 += h3 * r0;\n d3 += h4 * (5 * r9);\n c = (d3 >>> 13); d3 &= 0x1fff;\n d3 += h5 * (5 * r8);\n d3 += h6 * (5 * r7);\n d3 += h7 * (5 * r6);\n d3 += h8 * (5 * r5);\n d3 += h9 * (5 * r4);\n c += (d3 >>> 13); d3 &= 0x1fff;\n\n d4 = c;\n d4 += h0 * r4;\n d4 += h1 * r3;\n d4 += h2 * r2;\n d4 += h3 * r1;\n d4 += h4 * r0;\n c = (d4 >>> 13); d4 &= 0x1fff;\n d4 += h5 * (5 * r9);\n d4 += h6 * (5 * r8);\n d4 += h7 * (5 * r7);\n d4 += h8 * (5 * r6);\n d4 += h9 * (5 * r5);\n c += (d4 >>> 13); d4 &= 0x1fff;\n\n d5 = c;\n d5 += h0 * r5;\n d5 += h1 * r4;\n d5 += h2 * r3;\n d5 += h3 * r2;\n d5 += h4 * r1;\n c = (d5 >>> 13); d5 &= 0x1fff;\n d5 += h5 * r0;\n d5 += h6 * (5 * r9);\n d5 += h7 * (5 * r8);\n d5 += h8 * (5 * r7);\n d5 += h9 * (5 * r6);\n c += (d5 >>> 13); d5 &= 0x1fff;\n\n d6 = c;\n d6 += h0 * r6;\n d6 += h1 * r5;\n d6 += h2 * r4;\n d6 += h3 * r3;\n d6 += h4 * r2;\n c = (d6 >>> 13); d6 &= 0x1fff;\n d6 += h5 * r1;\n d6 += h6 * r0;\n d6 += h7 * (5 * r9);\n d6 += h8 * (5 * r8);\n d6 += h9 * (5 * r7);\n c += (d6 >>> 13); d6 &= 0x1fff;\n\n d7 = c;\n d7 += h0 * r7;\n d7 += h1 * r6;\n d7 += h2 * r5;\n d7 += h3 * r4;\n d7 += h4 * r3;\n c = (d7 >>> 13); d7 &= 0x1fff;\n d7 += h5 * r2;\n d7 += h6 * r1;\n d7 += h7 * r0;\n d7 += h8 * (5 * r9);\n d7 += h9 * (5 * r8);\n c += (d7 >>> 13); d7 &= 0x1fff;\n\n d8 = c;\n d8 += h0 * r8;\n d8 += h1 * r7;\n d8 += h2 * r6;\n d8 += h3 * r5;\n d8 += h4 * r4;\n c = (d8 >>> 13); d8 &= 0x1fff;\n d8 += h5 * r3;\n d8 += h6 * r2;\n d8 += h7 * r1;\n d8 += h8 * r0;\n d8 += h9 * (5 * r9);\n c += (d8 >>> 13); d8 &= 0x1fff;\n\n d9 = c;\n d9 += h0 * r9;\n d9 += h1 * r8;\n d9 += h2 * r7;\n d9 += h3 * r6;\n d9 += h4 * r5;\n c = (d9 >>> 13); d9 &= 0x1fff;\n d9 += h5 * r4;\n d9 += h6 * r3;\n d9 += h7 * r2;\n d9 += h8 * r1;\n d9 += h9 * r0;\n c += (d9 >>> 13); d9 &= 0x1fff;\n\n c = (((c << 2) + c)) | 0;\n c = (c + d0) | 0;\n d0 = c & 0x1fff;\n c = (c >>> 13);\n d1 += c;\n\n h0 = d0;\n h1 = d1;\n h2 = d2;\n h3 = d3;\n h4 = d4;\n h5 = d5;\n h6 = d6;\n h7 = d7;\n h8 = d8;\n h9 = d9;\n\n mpos += 16;\n bytes -= 16;\n }\n this.h[0] = h0;\n this.h[1] = h1;\n this.h[2] = h2;\n this.h[3] = h3;\n this.h[4] = h4;\n this.h[5] = h5;\n this.h[6] = h6;\n this.h[7] = h7;\n this.h[8] = h8;\n this.h[9] = h9;\n};\n\npoly1305.prototype.finish = function(mac, macpos) {\n var g = new Uint16Array(10);\n var c, mask, f, i;\n\n if (this.leftover) {\n i = this.leftover;\n this.buffer[i++] = 1;\n for (; i < 16; i++) this.buffer[i] = 0;\n this.fin = 1;\n this.blocks(this.buffer, 0, 16);\n }\n\n c = this.h[1] >>> 13;\n this.h[1] &= 0x1fff;\n for (i = 2; i < 10; i++) {\n this.h[i] += c;\n c = this.h[i] >>> 13;\n this.h[i] &= 0x1fff;\n }\n this.h[0] += (c * 5);\n c = this.h[0] >>> 13;\n this.h[0] &= 0x1fff;\n this.h[1] += c;\n c = this.h[1] >>> 13;\n this.h[1] &= 0x1fff;\n this.h[2] += c;\n\n g[0] = this.h[0] + 5;\n c = g[0] >>> 13;\n g[0] &= 0x1fff;\n for (i = 1; i < 10; i++) {\n g[i] = this.h[i] + c;\n c = g[i] >>> 13;\n g[i] &= 0x1fff;\n }\n g[9] -= (1 << 13);\n\n mask = (c ^ 1) - 1;\n for (i = 0; i < 10; i++) g[i] &= mask;\n mask = ~mask;\n for (i = 0; i < 10; i++) this.h[i] = (this.h[i] & mask) | g[i];\n\n this.h[0] = ((this.h[0] ) | (this.h[1] << 13) ) & 0xffff;\n this.h[1] = ((this.h[1] >>> 3) | (this.h[2] << 10) ) & 0xffff;\n this.h[2] = ((this.h[2] >>> 6) | (this.h[3] << 7) ) & 0xffff;\n this.h[3] = ((this.h[3] >>> 9) | (this.h[4] << 4) ) & 0xffff;\n this.h[4] = ((this.h[4] >>> 12) | (this.h[5] << 1) | (this.h[6] << 14)) & 0xffff;\n this.h[5] = ((this.h[6] >>> 2) | (this.h[7] << 11) ) & 0xffff;\n this.h[6] = ((this.h[7] >>> 5) | (this.h[8] << 8) ) & 0xffff;\n this.h[7] = ((this.h[8] >>> 8) | (this.h[9] << 5) ) & 0xffff;\n\n f = this.h[0] + this.pad[0];\n this.h[0] = f & 0xffff;\n for (i = 1; i < 8; i++) {\n f = (((this.h[i] + this.pad[i]) | 0) + (f >>> 16)) | 0;\n this.h[i] = f & 0xffff;\n }\n\n mac[macpos+ 0] = (this.h[0] >>> 0) & 0xff;\n mac[macpos+ 1] = (this.h[0] >>> 8) & 0xff;\n mac[macpos+ 2] = (this.h[1] >>> 0) & 0xff;\n mac[macpos+ 3] = (this.h[1] >>> 8) & 0xff;\n mac[macpos+ 4] = (this.h[2] >>> 0) & 0xff;\n mac[macpos+ 5] = (this.h[2] >>> 8) & 0xff;\n mac[macpos+ 6] = (this.h[3] >>> 0) & 0xff;\n mac[macpos+ 7] = (this.h[3] >>> 8) & 0xff;\n mac[macpos+ 8] = (this.h[4] >>> 0) & 0xff;\n mac[macpos+ 9] = (this.h[4] >>> 8) & 0xff;\n mac[macpos+10] = (this.h[5] >>> 0) & 0xff;\n mac[macpos+11] = (this.h[5] >>> 8) & 0xff;\n mac[macpos+12] = (this.h[6] >>> 0) & 0xff;\n mac[macpos+13] = (this.h[6] >>> 8) & 0xff;\n mac[macpos+14] = (this.h[7] >>> 0) & 0xff;\n mac[macpos+15] = (this.h[7] >>> 8) & 0xff;\n};\n\npoly1305.prototype.update = function(m, mpos, bytes) {\n var i, want;\n\n if (this.leftover) {\n want = (16 - this.leftover);\n if (want > bytes)\n want = bytes;\n for (i = 0; i < want; i++)\n this.buffer[this.leftover + i] = m[mpos+i];\n bytes -= want;\n mpos += want;\n this.leftover += want;\n if (this.leftover < 16)\n return;\n this.blocks(this.buffer, 0, 16);\n this.leftover = 0;\n }\n\n if (bytes >= 16) {\n want = bytes - (bytes % 16);\n this.blocks(m, mpos, want);\n mpos += want;\n bytes -= want;\n }\n\n if (bytes) {\n for (i = 0; i < bytes; i++)\n this.buffer[this.leftover + i] = m[mpos+i];\n this.leftover += bytes;\n }\n};\n\nfunction crypto_onetimeauth(out, outpos, m, mpos, n, k) {\n var s = new poly1305(k);\n s.update(m, mpos, n);\n s.finish(out, outpos);\n return 0;\n}\n\nfunction crypto_onetimeauth_verify(h, hpos, m, mpos, n, k) {\n var x = new Uint8Array(16);\n crypto_onetimeauth(x,0,m,mpos,n,k);\n return crypto_verify_16(h,hpos,x,0);\n}\n\nfunction crypto_secretbox(c,m,d,n,k) {\n var i;\n if (d < 32) return -1;\n crypto_stream_xor(c,0,m,0,d,n,k);\n crypto_onetimeauth(c, 16, c, 32, d - 32, c);\n for (i = 0; i < 16; i++) c[i] = 0;\n return 0;\n}\n\nfunction crypto_secretbox_open(m,c,d,n,k) {\n var i;\n var x = new Uint8Array(32);\n if (d < 32) return -1;\n crypto_stream(x,0,32,n,k);\n if (crypto_onetimeauth_verify(c, 16,c, 32,d - 32,x) !== 0) return -1;\n crypto_stream_xor(m,0,c,0,d,n,k);\n for (i = 0; i < 32; i++) m[i] = 0;\n return 0;\n}\n\nfunction set25519(r, a) {\n var i;\n for (i = 0; i < 16; i++) r[i] = a[i]|0;\n}\n\nfunction car25519(o) {\n var i, v, c = 1;\n for (i = 0; i < 16; i++) {\n v = o[i] + c + 65535;\n c = Math.floor(v / 65536);\n o[i] = v - c * 65536;\n }\n o[0] += c-1 + 37 * (c-1);\n}\n\nfunction sel25519(p, q, b) {\n var t, c = ~(b-1);\n for (var i = 0; i < 16; i++) {\n t = c & (p[i] ^ q[i]);\n p[i] ^= t;\n q[i] ^= t;\n }\n}\n\nfunction pack25519(o, n) {\n var i, j, b;\n var m = gf(), t = gf();\n for (i = 0; i < 16; i++) t[i] = n[i];\n car25519(t);\n car25519(t);\n car25519(t);\n for (j = 0; j < 2; j++) {\n m[0] = t[0] - 0xffed;\n for (i = 1; i < 15; i++) {\n m[i] = t[i] - 0xffff - ((m[i-1]>>16) & 1);\n m[i-1] &= 0xffff;\n }\n m[15] = t[15] - 0x7fff - ((m[14]>>16) & 1);\n b = (m[15]>>16) & 1;\n m[14] &= 0xffff;\n sel25519(t, m, 1-b);\n }\n for (i = 0; i < 16; i++) {\n o[2*i] = t[i] & 0xff;\n o[2*i+1] = t[i]>>8;\n }\n}\n\nfunction neq25519(a, b) {\n var c = new Uint8Array(32), d = new Uint8Array(32);\n pack25519(c, a);\n pack25519(d, b);\n return crypto_verify_32(c, 0, d, 0);\n}\n\nfunction par25519(a) {\n var d = new Uint8Array(32);\n pack25519(d, a);\n return d[0] & 1;\n}\n\nfunction unpack25519(o, n) {\n var i;\n for (i = 0; i < 16; i++) o[i] = n[2*i] + (n[2*i+1] << 8);\n o[15] &= 0x7fff;\n}\n\nfunction A(o, a, b) {\n for (var i = 0; i < 16; i++) o[i] = a[i] + b[i];\n}\n\nfunction Z(o, a, b) {\n for (var i = 0; i < 16; i++) o[i] = a[i] - b[i];\n}\n\nfunction M(o, a, b) {\n var v, c,\n t0 = 0, t1 = 0, t2 = 0, t3 = 0, t4 = 0, t5 = 0, t6 = 0, t7 = 0,\n t8 = 0, t9 = 0, t10 = 0, t11 = 0, t12 = 0, t13 = 0, t14 = 0, t15 = 0,\n t16 = 0, t17 = 0, t18 = 0, t19 = 0, t20 = 0, t21 = 0, t22 = 0, t23 = 0,\n t24 = 0, t25 = 0, t26 = 0, t27 = 0, t28 = 0, t29 = 0, t30 = 0,\n b0 = b[0],\n b1 = b[1],\n b2 = b[2],\n b3 = b[3],\n b4 = b[4],\n b5 = b[5],\n b6 = b[6],\n b7 = b[7],\n b8 = b[8],\n b9 = b[9],\n b10 = b[10],\n b11 = b[11],\n b12 = b[12],\n b13 = b[13],\n b14 = b[14],\n b15 = b[15];\n\n v = a[0];\n t0 += v * b0;\n t1 += v * b1;\n t2 += v * b2;\n t3 += v * b3;\n t4 += v * b4;\n t5 += v * b5;\n t6 += v * b6;\n t7 += v * b7;\n t8 += v * b8;\n t9 += v * b9;\n t10 += v * b10;\n t11 += v * b11;\n t12 += v * b12;\n t13 += v * b13;\n t14 += v * b14;\n t15 += v * b15;\n v = a[1];\n t1 += v * b0;\n t2 += v * b1;\n t3 += v * b2;\n t4 += v * b3;\n t5 += v * b4;\n t6 += v * b5;\n t7 += v * b6;\n t8 += v * b7;\n t9 += v * b8;\n t10 += v * b9;\n t11 += v * b10;\n t12 += v * b11;\n t13 += v * b12;\n t14 += v * b13;\n t15 += v * b14;\n t16 += v * b15;\n v = a[2];\n t2 += v * b0;\n t3 += v * b1;\n t4 += v * b2;\n t5 += v * b3;\n t6 += v * b4;\n t7 += v * b5;\n t8 += v * b6;\n t9 += v * b7;\n t10 += v * b8;\n t11 += v * b9;\n t12 += v * b10;\n t13 += v * b11;\n t14 += v * b12;\n t15 += v * b13;\n t16 += v * b14;\n t17 += v * b15;\n v = a[3];\n t3 += v * b0;\n t4 += v * b1;\n t5 += v * b2;\n t6 += v * b3;\n t7 += v * b4;\n t8 += v * b5;\n t9 += v * b6;\n t10 += v * b7;\n t11 += v * b8;\n t12 += v * b9;\n t13 += v * b10;\n t14 += v * b11;\n t15 += v * b12;\n t16 += v * b13;\n t17 += v * b14;\n t18 += v * b15;\n v = a[4];\n t4 += v * b0;\n t5 += v * b1;\n t6 += v * b2;\n t7 += v * b3;\n t8 += v * b4;\n t9 += v * b5;\n t10 += v * b6;\n t11 += v * b7;\n t12 += v * b8;\n t13 += v * b9;\n t14 += v * b10;\n t15 += v * b11;\n t16 += v * b12;\n t17 += v * b13;\n t18 += v * b14;\n t19 += v * b15;\n v = a[5];\n t5 += v * b0;\n t6 += v * b1;\n t7 += v * b2;\n t8 += v * b3;\n t9 += v * b4;\n t10 += v * b5;\n t11 += v * b6;\n t12 += v * b7;\n t13 += v * b8;\n t14 += v * b9;\n t15 += v * b10;\n t16 += v * b11;\n t17 += v * b12;\n t18 += v * b13;\n t19 += v * b14;\n t20 += v * b15;\n v = a[6];\n t6 += v * b0;\n t7 += v * b1;\n t8 += v * b2;\n t9 += v * b3;\n t10 += v * b4;\n t11 += v * b5;\n t12 += v * b6;\n t13 += v * b7;\n t14 += v * b8;\n t15 += v * b9;\n t16 += v * b10;\n t17 += v * b11;\n t18 += v * b12;\n t19 += v * b13;\n t20 += v * b14;\n t21 += v * b15;\n v = a[7];\n t7 += v * b0;\n t8 += v * b1;\n t9 += v * b2;\n t10 += v * b3;\n t11 += v * b4;\n t12 += v * b5;\n t13 += v * b6;\n t14 += v * b7;\n t15 += v * b8;\n t16 += v * b9;\n t17 += v * b10;\n t18 += v * b11;\n t19 += v * b12;\n t20 += v * b13;\n t21 += v * b14;\n t22 += v * b15;\n v = a[8];\n t8 += v * b0;\n t9 += v * b1;\n t10 += v * b2;\n t11 += v * b3;\n t12 += v * b4;\n t13 += v * b5;\n t14 += v * b6;\n t15 += v * b7;\n t16 += v * b8;\n t17 += v * b9;\n t18 += v * b10;\n t19 += v * b11;\n t20 += v * b12;\n t21 += v * b13;\n t22 += v * b14;\n t23 += v * b15;\n v = a[9];\n t9 += v * b0;\n t10 += v * b1;\n t11 += v * b2;\n t12 += v * b3;\n t13 += v * b4;\n t14 += v * b5;\n t15 += v * b6;\n t16 += v * b7;\n t17 += v * b8;\n t18 += v * b9;\n t19 += v * b10;\n t20 += v * b11;\n t21 += v * b12;\n t22 += v * b13;\n t23 += v * b14;\n t24 += v * b15;\n v = a[10];\n t10 += v * b0;\n t11 += v * b1;\n t12 += v * b2;\n t13 += v * b3;\n t14 += v * b4;\n t15 += v * b5;\n t16 += v * b6;\n t17 += v * b7;\n t18 += v * b8;\n t19 += v * b9;\n t20 += v * b10;\n t21 += v * b11;\n t22 += v * b12;\n t23 += v * b13;\n t24 += v * b14;\n t25 += v * b15;\n v = a[11];\n t11 += v * b0;\n t12 += v * b1;\n t13 += v * b2;\n t14 += v * b3;\n t15 += v * b4;\n t16 += v * b5;\n t17 += v * b6;\n t18 += v * b7;\n t19 += v * b8;\n t20 += v * b9;\n t21 += v * b10;\n t22 += v * b11;\n t23 += v * b12;\n t24 += v * b13;\n t25 += v * b14;\n t26 += v * b15;\n v = a[12];\n t12 += v * b0;\n t13 += v * b1;\n t14 += v * b2;\n t15 += v * b3;\n t16 += v * b4;\n t17 += v * b5;\n t18 += v * b6;\n t19 += v * b7;\n t20 += v * b8;\n t21 += v * b9;\n t22 += v * b10;\n t23 += v * b11;\n t24 += v * b12;\n t25 += v * b13;\n t26 += v * b14;\n t27 += v * b15;\n v = a[13];\n t13 += v * b0;\n t14 += v * b1;\n t15 += v * b2;\n t16 += v * b3;\n t17 += v * b4;\n t18 += v * b5;\n t19 += v * b6;\n t20 += v * b7;\n t21 += v * b8;\n t22 += v * b9;\n t23 += v * b10;\n t24 += v * b11;\n t25 += v * b12;\n t26 += v * b13;\n t27 += v * b14;\n t28 += v * b15;\n v = a[14];\n t14 += v * b0;\n t15 += v * b1;\n t16 += v * b2;\n t17 += v * b3;\n t18 += v * b4;\n t19 += v * b5;\n t20 += v * b6;\n t21 += v * b7;\n t22 += v * b8;\n t23 += v * b9;\n t24 += v * b10;\n t25 += v * b11;\n t26 += v * b12;\n t27 += v * b13;\n t28 += v * b14;\n t29 += v * b15;\n v = a[15];\n t15 += v * b0;\n t16 += v * b1;\n t17 += v * b2;\n t18 += v * b3;\n t19 += v * b4;\n t20 += v * b5;\n t21 += v * b6;\n t22 += v * b7;\n t23 += v * b8;\n t24 += v * b9;\n t25 += v * b10;\n t26 += v * b11;\n t27 += v * b12;\n t28 += v * b13;\n t29 += v * b14;\n t30 += v * b15;\n\n t0 += 38 * t16;\n t1 += 38 * t17;\n t2 += 38 * t18;\n t3 += 38 * t19;\n t4 += 38 * t20;\n t5 += 38 * t21;\n t6 += 38 * t22;\n t7 += 38 * t23;\n t8 += 38 * t24;\n t9 += 38 * t25;\n t10 += 38 * t26;\n t11 += 38 * t27;\n t12 += 38 * t28;\n t13 += 38 * t29;\n t14 += 38 * t30;\n // t15 left as is\n\n // first car\n c = 1;\n v = t0 + c + 65535; c = Math.floor(v / 65536); t0 = v - c * 65536;\n v = t1 + c + 65535; c = Math.floor(v / 65536); t1 = v - c * 65536;\n v = t2 + c + 65535; c = Math.floor(v / 65536); t2 = v - c * 65536;\n v = t3 + c + 65535; c = Math.floor(v / 65536); t3 = v - c * 65536;\n v = t4 + c + 65535; c = Math.floor(v / 65536); t4 = v - c * 65536;\n v = t5 + c + 65535; c = Math.floor(v / 65536); t5 = v - c * 65536;\n v = t6 + c + 65535; c = Math.floor(v / 65536); t6 = v - c * 65536;\n v = t7 + c + 65535; c = Math.floor(v / 65536); t7 = v - c * 65536;\n v = t8 + c + 65535; c = Math.floor(v / 65536); t8 = v - c * 65536;\n v = t9 + c + 65535; c = Math.floor(v / 65536); t9 = v - c * 65536;\n v = t10 + c + 65535; c = Math.floor(v / 65536); t10 = v - c * 65536;\n v = t11 + c + 65535; c = Math.floor(v / 65536); t11 = v - c * 65536;\n v = t12 + c + 65535; c = Math.floor(v / 65536); t12 = v - c * 65536;\n v = t13 + c + 65535; c = Math.floor(v / 65536); t13 = v - c * 65536;\n v = t14 + c + 65535; c = Math.floor(v / 65536); t14 = v - c * 65536;\n v = t15 + c + 65535; c = Math.floor(v / 65536); t15 = v - c * 65536;\n t0 += c-1 + 37 * (c-1);\n\n // second car\n c = 1;\n v = t0 + c + 65535; c = Math.floor(v / 65536); t0 = v - c * 65536;\n v = t1 + c + 65535; c = Math.floor(v / 65536); t1 = v - c * 65536;\n v = t2 + c + 65535; c = Math.floor(v / 65536); t2 = v - c * 65536;\n v = t3 + c + 65535; c = Math.floor(v / 65536); t3 = v - c * 65536;\n v = t4 + c + 65535; c = Math.floor(v / 65536); t4 = v - c * 65536;\n v = t5 + c + 65535; c = Math.floor(v / 65536); t5 = v - c * 65536;\n v = t6 + c + 65535; c = Math.floor(v / 65536); t6 = v - c * 65536;\n v = t7 + c + 65535; c = Math.floor(v / 65536); t7 = v - c * 65536;\n v = t8 + c + 65535; c = Math.floor(v / 65536); t8 = v - c * 65536;\n v = t9 + c + 65535; c = Math.floor(v / 65536); t9 = v - c * 65536;\n v = t10 + c + 65535; c = Math.floor(v / 65536); t10 = v - c * 65536;\n v = t11 + c + 65535; c = Math.floor(v / 65536); t11 = v - c * 65536;\n v = t12 + c + 65535; c = Math.floor(v / 65536); t12 = v - c * 65536;\n v = t13 + c + 65535; c = Math.floor(v / 65536); t13 = v - c * 65536;\n v = t14 + c + 65535; c = Math.floor(v / 65536); t14 = v - c * 65536;\n v = t15 + c + 65535; c = Math.floor(v / 65536); t15 = v - c * 65536;\n t0 += c-1 + 37 * (c-1);\n\n o[ 0] = t0;\n o[ 1] = t1;\n o[ 2] = t2;\n o[ 3] = t3;\n o[ 4] = t4;\n o[ 5] = t5;\n o[ 6] = t6;\n o[ 7] = t7;\n o[ 8] = t8;\n o[ 9] = t9;\n o[10] = t10;\n o[11] = t11;\n o[12] = t12;\n o[13] = t13;\n o[14] = t14;\n o[15] = t15;\n}\n\nfunction S(o, a) {\n M(o, a, a);\n}\n\nfunction inv25519(o, i) {\n var c = gf();\n var a;\n for (a = 0; a < 16; a++) c[a] = i[a];\n for (a = 253; a >= 0; a--) {\n S(c, c);\n if(a !== 2 && a !== 4) M(c, c, i);\n }\n for (a = 0; a < 16; a++) o[a] = c[a];\n}\n\nfunction pow2523(o, i) {\n var c = gf();\n var a;\n for (a = 0; a < 16; a++) c[a] = i[a];\n for (a = 250; a >= 0; a--) {\n S(c, c);\n if(a !== 1) M(c, c, i);\n }\n for (a = 0; a < 16; a++) o[a] = c[a];\n}\n\nfunction crypto_scalarmult(q, n, p) {\n var z = new Uint8Array(32);\n var x = new Float64Array(80), r, i;\n var a = gf(), b = gf(), c = gf(),\n d = gf(), e = gf(), f = gf();\n for (i = 0; i < 31; i++) z[i] = n[i];\n z[31]=(n[31]&127)|64;\n z[0]&=248;\n unpack25519(x,p);\n for (i = 0; i < 16; i++) {\n b[i]=x[i];\n d[i]=a[i]=c[i]=0;\n }\n a[0]=d[0]=1;\n for (i=254; i>=0; --i) {\n r=(z[i>>>3]>>>(i&7))&1;\n sel25519(a,b,r);\n sel25519(c,d,r);\n A(e,a,c);\n Z(a,a,c);\n A(c,b,d);\n Z(b,b,d);\n S(d,e);\n S(f,a);\n M(a,c,a);\n M(c,b,e);\n A(e,a,c);\n Z(a,a,c);\n S(b,a);\n Z(c,d,f);\n M(a,c,_121665);\n A(a,a,d);\n M(c,c,a);\n M(a,d,f);\n M(d,b,x);\n S(b,e);\n sel25519(a,b,r);\n sel25519(c,d,r);\n }\n for (i = 0; i < 16; i++) {\n x[i+16]=a[i];\n x[i+32]=c[i];\n x[i+48]=b[i];\n x[i+64]=d[i];\n }\n var x32 = x.subarray(32);\n var x16 = x.subarray(16);\n inv25519(x32,x32);\n M(x16,x16,x32);\n pack25519(q,x16);\n return 0;\n}\n\nfunction crypto_scalarmult_base(q, n) {\n return crypto_scalarmult(q, n, _9);\n}\n\nfunction crypto_box_keypair(y, x) {\n randombytes(x, 32);\n return crypto_scalarmult_base(y, x);\n}\n\nfunction crypto_box_beforenm(k, y, x) {\n var s = new Uint8Array(32);\n crypto_scalarmult(s, x, y);\n return crypto_core_hsalsa20(k, _0, s, sigma);\n}\n\nvar crypto_box_afternm = crypto_secretbox;\nvar crypto_box_open_afternm = crypto_secretbox_open;\n\nfunction crypto_box(c, m, d, n, y, x) {\n var k = new Uint8Array(32);\n crypto_box_beforenm(k, y, x);\n return crypto_box_afternm(c, m, d, n, k);\n}\n\nfunction crypto_box_open(m, c, d, n, y, x) {\n var k = new Uint8Array(32);\n crypto_box_beforenm(k, y, x);\n return crypto_box_open_afternm(m, c, d, n, k);\n}\n\nvar K = [\n 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,\n 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,\n 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,\n 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,\n 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,\n 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,\n 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,\n 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,\n 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,\n 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,\n 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,\n 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,\n 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,\n 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,\n 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,\n 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,\n 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,\n 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,\n 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,\n 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,\n 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,\n 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,\n 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,\n 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,\n 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,\n 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,\n 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,\n 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,\n 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,\n 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,\n 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,\n 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,\n 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,\n 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,\n 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,\n 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,\n 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,\n 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,\n 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,\n 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817\n];\n\nfunction crypto_hashblocks_hl(hh, hl, m, n) {\n var wh = new Int32Array(16), wl = new Int32Array(16),\n bh0, bh1, bh2, bh3, bh4, bh5, bh6, bh7,\n bl0, bl1, bl2, bl3, bl4, bl5, bl6, bl7,\n th, tl, i, j, h, l, a, b, c, d;\n\n var ah0 = hh[0],\n ah1 = hh[1],\n ah2 = hh[2],\n ah3 = hh[3],\n ah4 = hh[4],\n ah5 = hh[5],\n ah6 = hh[6],\n ah7 = hh[7],\n\n al0 = hl[0],\n al1 = hl[1],\n al2 = hl[2],\n al3 = hl[3],\n al4 = hl[4],\n al5 = hl[5],\n al6 = hl[6],\n al7 = hl[7];\n\n var pos = 0;\n while (n >= 128) {\n for (i = 0; i < 16; i++) {\n j = 8 * i + pos;\n wh[i] = (m[j+0] << 24) | (m[j+1] << 16) | (m[j+2] << 8) | m[j+3];\n wl[i] = (m[j+4] << 24) | (m[j+5] << 16) | (m[j+6] << 8) | m[j+7];\n }\n for (i = 0; i < 80; i++) {\n bh0 = ah0;\n bh1 = ah1;\n bh2 = ah2;\n bh3 = ah3;\n bh4 = ah4;\n bh5 = ah5;\n bh6 = ah6;\n bh7 = ah7;\n\n bl0 = al0;\n bl1 = al1;\n bl2 = al2;\n bl3 = al3;\n bl4 = al4;\n bl5 = al5;\n bl6 = al6;\n bl7 = al7;\n\n // add\n h = ah7;\n l = al7;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n // Sigma1\n h = ((ah4 >>> 14) | (al4 << (32-14))) ^ ((ah4 >>> 18) | (al4 << (32-18))) ^ ((al4 >>> (41-32)) | (ah4 << (32-(41-32))));\n l = ((al4 >>> 14) | (ah4 << (32-14))) ^ ((al4 >>> 18) | (ah4 << (32-18))) ^ ((ah4 >>> (41-32)) | (al4 << (32-(41-32))));\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // Ch\n h = (ah4 & ah5) ^ (~ah4 & ah6);\n l = (al4 & al5) ^ (~al4 & al6);\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // K\n h = K[i*2];\n l = K[i*2+1];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // w\n h = wh[i%16];\n l = wl[i%16];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n th = c & 0xffff | d << 16;\n tl = a & 0xffff | b << 16;\n\n // add\n h = th;\n l = tl;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n // Sigma0\n h = ((ah0 >>> 28) | (al0 << (32-28))) ^ ((al0 >>> (34-32)) | (ah0 << (32-(34-32)))) ^ ((al0 >>> (39-32)) | (ah0 << (32-(39-32))));\n l = ((al0 >>> 28) | (ah0 << (32-28))) ^ ((ah0 >>> (34-32)) | (al0 << (32-(34-32)))) ^ ((ah0 >>> (39-32)) | (al0 << (32-(39-32))));\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // Maj\n h = (ah0 & ah1) ^ (ah0 & ah2) ^ (ah1 & ah2);\n l = (al0 & al1) ^ (al0 & al2) ^ (al1 & al2);\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n bh7 = (c & 0xffff) | (d << 16);\n bl7 = (a & 0xffff) | (b << 16);\n\n // add\n h = bh3;\n l = bl3;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = th;\n l = tl;\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n bh3 = (c & 0xffff) | (d << 16);\n bl3 = (a & 0xffff) | (b << 16);\n\n ah1 = bh0;\n ah2 = bh1;\n ah3 = bh2;\n ah4 = bh3;\n ah5 = bh4;\n ah6 = bh5;\n ah7 = bh6;\n ah0 = bh7;\n\n al1 = bl0;\n al2 = bl1;\n al3 = bl2;\n al4 = bl3;\n al5 = bl4;\n al6 = bl5;\n al7 = bl6;\n al0 = bl7;\n\n if (i%16 === 15) {\n for (j = 0; j < 16; j++) {\n // add\n h = wh[j];\n l = wl[j];\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = wh[(j+9)%16];\n l = wl[(j+9)%16];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // sigma0\n th = wh[(j+1)%16];\n tl = wl[(j+1)%16];\n h = ((th >>> 1) | (tl << (32-1))) ^ ((th >>> 8) | (tl << (32-8))) ^ (th >>> 7);\n l = ((tl >>> 1) | (th << (32-1))) ^ ((tl >>> 8) | (th << (32-8))) ^ ((tl >>> 7) | (th << (32-7)));\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // sigma1\n th = wh[(j+14)%16];\n tl = wl[(j+14)%16];\n h = ((th >>> 19) | (tl << (32-19))) ^ ((tl >>> (61-32)) | (th << (32-(61-32)))) ^ (th >>> 6);\n l = ((tl >>> 19) | (th << (32-19))) ^ ((th >>> (61-32)) | (tl << (32-(61-32)))) ^ ((tl >>> 6) | (th << (32-6)));\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n wh[j] = (c & 0xffff) | (d << 16);\n wl[j] = (a & 0xffff) | (b << 16);\n }\n }\n }\n\n // add\n h = ah0;\n l = al0;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[0];\n l = hl[0];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[0] = ah0 = (c & 0xffff) | (d << 16);\n hl[0] = al0 = (a & 0xffff) | (b << 16);\n\n h = ah1;\n l = al1;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[1];\n l = hl[1];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[1] = ah1 = (c & 0xffff) | (d << 16);\n hl[1] = al1 = (a & 0xffff) | (b << 16);\n\n h = ah2;\n l = al2;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[2];\n l = hl[2];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[2] = ah2 = (c & 0xffff) | (d << 16);\n hl[2] = al2 = (a & 0xffff) | (b << 16);\n\n h = ah3;\n l = al3;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[3];\n l = hl[3];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[3] = ah3 = (c & 0xffff) | (d << 16);\n hl[3] = al3 = (a & 0xffff) | (b << 16);\n\n h = ah4;\n l = al4;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[4];\n l = hl[4];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[4] = ah4 = (c & 0xffff) | (d << 16);\n hl[4] = al4 = (a & 0xffff) | (b << 16);\n\n h = ah5;\n l = al5;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[5];\n l = hl[5];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[5] = ah5 = (c & 0xffff) | (d << 16);\n hl[5] = al5 = (a & 0xffff) | (b << 16);\n\n h = ah6;\n l = al6;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[6];\n l = hl[6];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[6] = ah6 = (c & 0xffff) | (d << 16);\n hl[6] = al6 = (a & 0xffff) | (b << 16);\n\n h = ah7;\n l = al7;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[7];\n l = hl[7];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[7] = ah7 = (c & 0xffff) | (d << 16);\n hl[7] = al7 = (a & 0xffff) | (b << 16);\n\n pos += 128;\n n -= 128;\n }\n\n return n;\n}\n\nfunction crypto_hash(out, m, n) {\n var hh = new Int32Array(8),\n hl = new Int32Array(8),\n x = new Uint8Array(256),\n i, b = n;\n\n hh[0] = 0x6a09e667;\n hh[1] = 0xbb67ae85;\n hh[2] = 0x3c6ef372;\n hh[3] = 0xa54ff53a;\n hh[4] = 0x510e527f;\n hh[5] = 0x9b05688c;\n hh[6] = 0x1f83d9ab;\n hh[7] = 0x5be0cd19;\n\n hl[0] = 0xf3bcc908;\n hl[1] = 0x84caa73b;\n hl[2] = 0xfe94f82b;\n hl[3] = 0x5f1d36f1;\n hl[4] = 0xade682d1;\n hl[5] = 0x2b3e6c1f;\n hl[6] = 0xfb41bd6b;\n hl[7] = 0x137e2179;\n\n crypto_hashblocks_hl(hh, hl, m, n);\n n %= 128;\n\n for (i = 0; i < n; i++) x[i] = m[b-n+i];\n x[n] = 128;\n\n n = 256-128*(n<112?1:0);\n x[n-9] = 0;\n ts64(x, n-8, (b / 0x20000000) | 0, b << 3);\n crypto_hashblocks_hl(hh, hl, x, n);\n\n for (i = 0; i < 8; i++) ts64(out, 8*i, hh[i], hl[i]);\n\n return 0;\n}\n\nfunction add(p, q) {\n var a = gf(), b = gf(), c = gf(),\n d = gf(), e = gf(), f = gf(),\n g = gf(), h = gf(), t = gf();\n\n Z(a, p[1], p[0]);\n Z(t, q[1], q[0]);\n M(a, a, t);\n A(b, p[0], p[1]);\n A(t, q[0], q[1]);\n M(b, b, t);\n M(c, p[3], q[3]);\n M(c, c, D2);\n M(d, p[2], q[2]);\n A(d, d, d);\n Z(e, b, a);\n Z(f, d, c);\n A(g, d, c);\n A(h, b, a);\n\n M(p[0], e, f);\n M(p[1], h, g);\n M(p[2], g, f);\n M(p[3], e, h);\n}\n\nfunction cswap(p, q, b) {\n var i;\n for (i = 0; i < 4; i++) {\n sel25519(p[i], q[i], b);\n }\n}\n\nfunction pack(r, p) {\n var tx = gf(), ty = gf(), zi = gf();\n inv25519(zi, p[2]);\n M(tx, p[0], zi);\n M(ty, p[1], zi);\n pack25519(r, ty);\n r[31] ^= par25519(tx) << 7;\n}\n\nfunction scalarmult(p, q, s) {\n var b, i;\n set25519(p[0], gf0);\n set25519(p[1], gf1);\n set25519(p[2], gf1);\n set25519(p[3], gf0);\n for (i = 255; i >= 0; --i) {\n b = (s[(i/8)|0] >> (i&7)) & 1;\n cswap(p, q, b);\n add(q, p);\n add(p, p);\n cswap(p, q, b);\n }\n}\n\nfunction scalarbase(p, s) {\n var q = [gf(), gf(), gf(), gf()];\n set25519(q[0], X);\n set25519(q[1], Y);\n set25519(q[2], gf1);\n M(q[3], X, Y);\n scalarmult(p, q, s);\n}\n\nfunction crypto_sign_keypair(pk, sk, seeded) {\n var d = new Uint8Array(64);\n var p = [gf(), gf(), gf(), gf()];\n var i;\n\n if (!seeded) randombytes(sk, 32);\n crypto_hash(d, sk, 32);\n d[0] &= 248;\n d[31] &= 127;\n d[31] |= 64;\n\n scalarbase(p, d);\n pack(pk, p);\n\n for (i = 0; i < 32; i++) sk[i+32] = pk[i];\n return 0;\n}\n\nvar L = new Float64Array([0xed, 0xd3, 0xf5, 0x5c, 0x1a, 0x63, 0x12, 0x58, 0xd6, 0x9c, 0xf7, 0xa2, 0xde, 0xf9, 0xde, 0x14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x10]);\n\nfunction modL(r, x) {\n var carry, i, j, k;\n for (i = 63; i >= 32; --i) {\n carry = 0;\n for (j = i - 32, k = i - 12; j < k; ++j) {\n x[j] += carry - 16 * x[i] * L[j - (i - 32)];\n carry = Math.floor((x[j] + 128) / 256);\n x[j] -= carry * 256;\n }\n x[j] += carry;\n x[i] = 0;\n }\n carry = 0;\n for (j = 0; j < 32; j++) {\n x[j] += carry - (x[31] >> 4) * L[j];\n carry = x[j] >> 8;\n x[j] &= 255;\n }\n for (j = 0; j < 32; j++) x[j] -= carry * L[j];\n for (i = 0; i < 32; i++) {\n x[i+1] += x[i] >> 8;\n r[i] = x[i] & 255;\n }\n}\n\nfunction reduce(r) {\n var x = new Float64Array(64), i;\n for (i = 0; i < 64; i++) x[i] = r[i];\n for (i = 0; i < 64; i++) r[i] = 0;\n modL(r, x);\n}\n\n// Note: difference from C - smlen returned, not passed as argument.\nfunction crypto_sign(sm, m, n, sk) {\n var d = new Uint8Array(64), h = new Uint8Array(64), r = new Uint8Array(64);\n var i, j, x = new Float64Array(64);\n var p = [gf(), gf(), gf(), gf()];\n\n crypto_hash(d, sk, 32);\n d[0] &= 248;\n d[31] &= 127;\n d[31] |= 64;\n\n var smlen = n + 64;\n for (i = 0; i < n; i++) sm[64 + i] = m[i];\n for (i = 0; i < 32; i++) sm[32 + i] = d[32 + i];\n\n crypto_hash(r, sm.subarray(32), n+32);\n reduce(r);\n scalarbase(p, r);\n pack(sm, p);\n\n for (i = 32; i < 64; i++) sm[i] = sk[i];\n crypto_hash(h, sm, n + 64);\n reduce(h);\n\n for (i = 0; i < 64; i++) x[i] = 0;\n for (i = 0; i < 32; i++) x[i] = r[i];\n for (i = 0; i < 32; i++) {\n for (j = 0; j < 32; j++) {\n x[i+j] += h[i] * d[j];\n }\n }\n\n modL(sm.subarray(32), x);\n return smlen;\n}\n\nfunction unpackneg(r, p) {\n var t = gf(), chk = gf(), num = gf(),\n den = gf(), den2 = gf(), den4 = gf(),\n den6 = gf();\n\n set25519(r[2], gf1);\n unpack25519(r[1], p);\n S(num, r[1]);\n M(den, num, D);\n Z(num, num, r[2]);\n A(den, r[2], den);\n\n S(den2, den);\n S(den4, den2);\n M(den6, den4, den2);\n M(t, den6, num);\n M(t, t, den);\n\n pow2523(t, t);\n M(t, t, num);\n M(t, t, den);\n M(t, t, den);\n M(r[0], t, den);\n\n S(chk, r[0]);\n M(chk, chk, den);\n if (neq25519(chk, num)) M(r[0], r[0], I);\n\n S(chk, r[0]);\n M(chk, chk, den);\n if (neq25519(chk, num)) return -1;\n\n if (par25519(r[0]) === (p[31]>>7)) Z(r[0], gf0, r[0]);\n\n M(r[3], r[0], r[1]);\n return 0;\n}\n\nfunction crypto_sign_open(m, sm, n, pk) {\n var i;\n var t = new Uint8Array(32), h = new Uint8Array(64);\n var p = [gf(), gf(), gf(), gf()],\n q = [gf(), gf(), gf(), gf()];\n\n if (n < 64) return -1;\n\n if (unpackneg(q, pk)) return -1;\n\n for (i = 0; i < n; i++) m[i] = sm[i];\n for (i = 0; i < 32; i++) m[i+32] = pk[i];\n crypto_hash(h, m, n);\n reduce(h);\n scalarmult(p, q, h);\n\n scalarbase(q, sm.subarray(32));\n add(p, q);\n pack(t, p);\n\n n -= 64;\n if (crypto_verify_32(sm, 0, t, 0)) {\n for (i = 0; i < n; i++) m[i] = 0;\n return -1;\n }\n\n for (i = 0; i < n; i++) m[i] = sm[i + 64];\n return n;\n}\n\nvar crypto_secretbox_KEYBYTES = 32,\n crypto_secretbox_NONCEBYTES = 24,\n crypto_secretbox_ZEROBYTES = 32,\n crypto_secretbox_BOXZEROBYTES = 16,\n crypto_scalarmult_BYTES = 32,\n crypto_scalarmult_SCALARBYTES = 32,\n crypto_box_PUBLICKEYBYTES = 32,\n crypto_box_SECRETKEYBYTES = 32,\n crypto_box_BEFORENMBYTES = 32,\n crypto_box_NONCEBYTES = crypto_secretbox_NONCEBYTES,\n crypto_box_ZEROBYTES = crypto_secretbox_ZEROBYTES,\n crypto_box_BOXZEROBYTES = crypto_secretbox_BOXZEROBYTES,\n crypto_sign_BYTES = 64,\n crypto_sign_PUBLICKEYBYTES = 32,\n crypto_sign_SECRETKEYBYTES = 64,\n crypto_sign_SEEDBYTES = 32,\n crypto_hash_BYTES = 64;\n\nnacl.lowlevel = {\n crypto_core_hsalsa20: crypto_core_hsalsa20,\n crypto_stream_xor: crypto_stream_xor,\n crypto_stream: crypto_stream,\n crypto_stream_salsa20_xor: crypto_stream_salsa20_xor,\n crypto_stream_salsa20: crypto_stream_salsa20,\n crypto_onetimeauth: crypto_onetimeauth,\n crypto_onetimeauth_verify: crypto_onetimeauth_verify,\n crypto_verify_16: crypto_verify_16,\n crypto_verify_32: crypto_verify_32,\n crypto_secretbox: crypto_secretbox,\n crypto_secretbox_open: crypto_secretbox_open,\n crypto_scalarmult: crypto_scalarmult,\n crypto_scalarmult_base: crypto_scalarmult_base,\n crypto_box_beforenm: crypto_box_beforenm,\n crypto_box_afternm: crypto_box_afternm,\n crypto_box: crypto_box,\n crypto_box_open: crypto_box_open,\n crypto_box_keypair: crypto_box_keypair,\n crypto_hash: crypto_hash,\n crypto_sign: crypto_sign,\n crypto_sign_keypair: crypto_sign_keypair,\n crypto_sign_open: crypto_sign_open,\n\n crypto_secretbox_KEYBYTES: crypto_secretbox_KEYBYTES,\n crypto_secretbox_NONCEBYTES: crypto_secretbox_NONCEBYTES,\n crypto_secretbox_ZEROBYTES: crypto_secretbox_ZEROBYTES,\n crypto_secretbox_BOXZEROBYTES: crypto_secretbox_BOXZEROBYTES,\n crypto_scalarmult_BYTES: crypto_scalarmult_BYTES,\n crypto_scalarmult_SCALARBYTES: crypto_scalarmult_SCALARBYTES,\n crypto_box_PUBLICKEYBYTES: crypto_box_PUBLICKEYBYTES,\n crypto_box_SECRETKEYBYTES: crypto_box_SECRETKEYBYTES,\n crypto_box_BEFORENMBYTES: crypto_box_BEFORENMBYTES,\n crypto_box_NONCEBYTES: crypto_box_NONCEBYTES,\n crypto_box_ZEROBYTES: crypto_box_ZEROBYTES,\n crypto_box_BOXZEROBYTES: crypto_box_BOXZEROBYTES,\n crypto_sign_BYTES: crypto_sign_BYTES,\n crypto_sign_PUBLICKEYBYTES: crypto_sign_PUBLICKEYBYTES,\n crypto_sign_SECRETKEYBYTES: crypto_sign_SECRETKEYBYTES,\n crypto_sign_SEEDBYTES: crypto_sign_SEEDBYTES,\n crypto_hash_BYTES: crypto_hash_BYTES,\n\n gf: gf,\n D: D,\n L: L,\n pack25519: pack25519,\n unpack25519: unpack25519,\n M: M,\n A: A,\n S: S,\n Z: Z,\n pow2523: pow2523,\n add: add,\n set25519: set25519,\n modL: modL,\n scalarmult: scalarmult,\n scalarbase: scalarbase,\n};\n\n/* High-level API */\n\nfunction checkLengths(k, n) {\n if (k.length !== crypto_secretbox_KEYBYTES) throw new Error('bad key size');\n if (n.length !== crypto_secretbox_NONCEBYTES) throw new Error('bad nonce size');\n}\n\nfunction checkBoxLengths(pk, sk) {\n if (pk.length !== crypto_box_PUBLICKEYBYTES) throw new Error('bad public key size');\n if (sk.length !== crypto_box_SECRETKEYBYTES) throw new Error('bad secret key size');\n}\n\nfunction checkArrayTypes() {\n for (var i = 0; i < arguments.length; i++) {\n if (!(arguments[i] instanceof Uint8Array))\n throw new TypeError('unexpected type, use Uint8Array');\n }\n}\n\nfunction cleanup(arr) {\n for (var i = 0; i < arr.length; i++) arr[i] = 0;\n}\n\nnacl.randomBytes = function(n) {\n var b = new Uint8Array(n);\n randombytes(b, n);\n return b;\n};\n\nnacl.secretbox = function(msg, nonce, key) {\n checkArrayTypes(msg, nonce, key);\n checkLengths(key, nonce);\n var m = new Uint8Array(crypto_secretbox_ZEROBYTES + msg.length);\n var c = new Uint8Array(m.length);\n for (var i = 0; i < msg.length; i++) m[i+crypto_secretbox_ZEROBYTES] = msg[i];\n crypto_secretbox(c, m, m.length, nonce, key);\n return c.subarray(crypto_secretbox_BOXZEROBYTES);\n};\n\nnacl.secretbox.open = function(box, nonce, key) {\n checkArrayTypes(box, nonce, key);\n checkLengths(key, nonce);\n var c = new Uint8Array(crypto_secretbox_BOXZEROBYTES + box.length);\n var m = new Uint8Array(c.length);\n for (var i = 0; i < box.length; i++) c[i+crypto_secretbox_BOXZEROBYTES] = box[i];\n if (c.length < 32) return null;\n if (crypto_secretbox_open(m, c, c.length, nonce, key) !== 0) return null;\n return m.subarray(crypto_secretbox_ZEROBYTES);\n};\n\nnacl.secretbox.keyLength = crypto_secretbox_KEYBYTES;\nnacl.secretbox.nonceLength = crypto_secretbox_NONCEBYTES;\nnacl.secretbox.overheadLength = crypto_secretbox_BOXZEROBYTES;\n\nnacl.scalarMult = function(n, p) {\n checkArrayTypes(n, p);\n if (n.length !== crypto_scalarmult_SCALARBYTES) throw new Error('bad n size');\n if (p.length !== crypto_scalarmult_BYTES) throw new Error('bad p size');\n var q = new Uint8Array(crypto_scalarmult_BYTES);\n crypto_scalarmult(q, n, p);\n return q;\n};\n\nnacl.scalarMult.base = function(n) {\n checkArrayTypes(n);\n if (n.length !== crypto_scalarmult_SCALARBYTES) throw new Error('bad n size');\n var q = new Uint8Array(crypto_scalarmult_BYTES);\n crypto_scalarmult_base(q, n);\n return q;\n};\n\nnacl.scalarMult.scalarLength = crypto_scalarmult_SCALARBYTES;\nnacl.scalarMult.groupElementLength = crypto_scalarmult_BYTES;\n\nnacl.box = function(msg, nonce, publicKey, secretKey) {\n var k = nacl.box.before(publicKey, secretKey);\n return nacl.secretbox(msg, nonce, k);\n};\n\nnacl.box.before = function(publicKey, secretKey) {\n checkArrayTypes(publicKey, secretKey);\n checkBoxLengths(publicKey, secretKey);\n var k = new Uint8Array(crypto_box_BEFORENMBYTES);\n crypto_box_beforenm(k, publicKey, secretKey);\n return k;\n};\n\nnacl.box.after = nacl.secretbox;\n\nnacl.box.open = function(msg, nonce, publicKey, secretKey) {\n var k = nacl.box.before(publicKey, secretKey);\n return nacl.secretbox.open(msg, nonce, k);\n};\n\nnacl.box.open.after = nacl.secretbox.open;\n\nnacl.box.keyPair = function() {\n var pk = new Uint8Array(crypto_box_PUBLICKEYBYTES);\n var sk = new Uint8Array(crypto_box_SECRETKEYBYTES);\n crypto_box_keypair(pk, sk);\n return {publicKey: pk, secretKey: sk};\n};\n\nnacl.box.keyPair.fromSecretKey = function(secretKey) {\n checkArrayTypes(secretKey);\n if (secretKey.length !== crypto_box_SECRETKEYBYTES)\n throw new Error('bad secret key size');\n var pk = new Uint8Array(crypto_box_PUBLICKEYBYTES);\n crypto_scalarmult_base(pk, secretKey);\n return {publicKey: pk, secretKey: new Uint8Array(secretKey)};\n};\n\nnacl.box.publicKeyLength = crypto_box_PUBLICKEYBYTES;\nnacl.box.secretKeyLength = crypto_box_SECRETKEYBYTES;\nnacl.box.sharedKeyLength = crypto_box_BEFORENMBYTES;\nnacl.box.nonceLength = crypto_box_NONCEBYTES;\nnacl.box.overheadLength = nacl.secretbox.overheadLength;\n\nnacl.sign = function(msg, secretKey) {\n checkArrayTypes(msg, secretKey);\n if (secretKey.length !== crypto_sign_SECRETKEYBYTES)\n throw new Error('bad secret key size');\n var signedMsg = new Uint8Array(crypto_sign_BYTES+msg.length);\n crypto_sign(signedMsg, msg, msg.length, secretKey);\n return signedMsg;\n};\n\nnacl.sign.open = function(signedMsg, publicKey) {\n checkArrayTypes(signedMsg, publicKey);\n if (publicKey.length !== crypto_sign_PUBLICKEYBYTES)\n throw new Error('bad public key size');\n var tmp = new Uint8Array(signedMsg.length);\n var mlen = crypto_sign_open(tmp, signedMsg, signedMsg.length, publicKey);\n if (mlen < 0) return null;\n var m = new Uint8Array(mlen);\n for (var i = 0; i < m.length; i++) m[i] = tmp[i];\n return m;\n};\n\nnacl.sign.detached = function(msg, secretKey) {\n var signedMsg = nacl.sign(msg, secretKey);\n var sig = new Uint8Array(crypto_sign_BYTES);\n for (var i = 0; i < sig.length; i++) sig[i] = signedMsg[i];\n return sig;\n};\n\nnacl.sign.detached.verify = function(msg, sig, publicKey) {\n checkArrayTypes(msg, sig, publicKey);\n if (sig.length !== crypto_sign_BYTES)\n throw new Error('bad signature size');\n if (publicKey.length !== crypto_sign_PUBLICKEYBYTES)\n throw new Error('bad public key size');\n var sm = new Uint8Array(crypto_sign_BYTES + msg.length);\n var m = new Uint8Array(crypto_sign_BYTES + msg.length);\n var i;\n for (i = 0; i < crypto_sign_BYTES; i++) sm[i] = sig[i];\n for (i = 0; i < msg.length; i++) sm[i+crypto_sign_BYTES] = msg[i];\n return (crypto_sign_open(m, sm, sm.length, publicKey) >= 0);\n};\n\nnacl.sign.keyPair = function() {\n var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES);\n var sk = new Uint8Array(crypto_sign_SECRETKEYBYTES);\n crypto_sign_keypair(pk, sk);\n return {publicKey: pk, secretKey: sk};\n};\n\nnacl.sign.keyPair.fromSecretKey = function(secretKey) {\n checkArrayTypes(secretKey);\n if (secretKey.length !== crypto_sign_SECRETKEYBYTES)\n throw new Error('bad secret key size');\n var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES);\n for (var i = 0; i < pk.length; i++) pk[i] = secretKey[32+i];\n return {publicKey: pk, secretKey: new Uint8Array(secretKey)};\n};\n\nnacl.sign.keyPair.fromSeed = function(seed) {\n checkArrayTypes(seed);\n if (seed.length !== crypto_sign_SEEDBYTES)\n throw new Error('bad seed size');\n var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES);\n var sk = new Uint8Array(crypto_sign_SECRETKEYBYTES);\n for (var i = 0; i < 32; i++) sk[i] = seed[i];\n crypto_sign_keypair(pk, sk, true);\n return {publicKey: pk, secretKey: sk};\n};\n\nnacl.sign.publicKeyLength = crypto_sign_PUBLICKEYBYTES;\nnacl.sign.secretKeyLength = crypto_sign_SECRETKEYBYTES;\nnacl.sign.seedLength = crypto_sign_SEEDBYTES;\nnacl.sign.signatureLength = crypto_sign_BYTES;\n\nnacl.hash = function(msg) {\n checkArrayTypes(msg);\n var h = new Uint8Array(crypto_hash_BYTES);\n crypto_hash(h, msg, msg.length);\n return h;\n};\n\nnacl.hash.hashLength = crypto_hash_BYTES;\n\nnacl.verify = function(x, y) {\n checkArrayTypes(x, y);\n // Zero length arguments are considered not equal.\n if (x.length === 0 || y.length === 0) return false;\n if (x.length !== y.length) return false;\n return (vn(x, 0, y, 0, x.length) === 0) ? true : false;\n};\n\nnacl.setPRNG = function(fn) {\n randombytes = fn;\n};\n\n(function() {\n // Initialize PRNG if environment provides CSPRNG.\n // If not, methods calling randombytes will throw.\n var crypto = typeof self !== 'undefined' ? (self.crypto || self.msCrypto) : null;\n if (crypto && crypto.getRandomValues) {\n // Browsers.\n var QUOTA = 65536;\n nacl.setPRNG(function(x, n) {\n var i, v = new Uint8Array(n);\n for (i = 0; i < n; i += QUOTA) {\n crypto.getRandomValues(v.subarray(i, i + Math.min(n - i, QUOTA)));\n }\n for (i = 0; i < n; i++) x[i] = v[i];\n cleanup(v);\n });\n } else if (typeof require !== 'undefined') {\n // Node.js.\n crypto = require('crypto');\n if (crypto && crypto.randomBytes) {\n nacl.setPRNG(function(x, n) {\n var i, v = crypto.randomBytes(n);\n for (i = 0; i < n; i++) x[i] = v[i];\n cleanup(v);\n });\n }\n }\n})();\n\n})(typeof module !== 'undefined' && module.exports ? module.exports : (self.nacl = self.nacl || {}));\n","import * as crypto from \"crypto\";\nimport * as nacl from \"tweetnacl\";\nimport { createAxisLogger } from \"../utils/axis-logger\";\n\nexport type ProofType = 1 | 2 | 3 | 4;\n\nexport interface ProofVerificationResult {\n valid: boolean;\n actorId?: string;\n error?: string;\n metadata?: Record<string, any>;\n}\n\nexport interface MTLSContext {\n clientCertPem?: string;\n clientCertFingerprint?: string;\n clientCertSubject?: string;\n clientCertIssuer?: string;\n verified?: boolean;\n}\n\nexport interface DeviceSEContext {\n deviceId: string;\n signature: Uint8Array;\n publicKey: Uint8Array;\n challenge?: Uint8Array;\n}\n\nexport class ProofVerificationService {\n private readonly logger = createAxisLogger(ProofVerificationService.name);\n\n private readonly deviceKeys = new Map<string, Uint8Array>();\n private readonly trustedCerts = new Map<\n string,\n { actorId: string; issuedAt: number }\n >();\n\n async verifyProof(\n proofType: ProofType,\n proofRef: Uint8Array,\n context: {\n signTarget?: Uint8Array;\n signature?: Uint8Array;\n mtls?: MTLSContext;\n deviceSE?: DeviceSEContext;\n },\n ): Promise<ProofVerificationResult> {\n switch (proofType) {\n case 1:\n return this.verifyCapsuleProof(proofRef);\n case 2:\n return this.verifyJWTProof(proofRef);\n case 3:\n return this.verifyMTLSProof(context.mtls);\n case 4:\n return this.verifyDeviceSEProof(\n context.signTarget,\n context.signature,\n context.deviceSE,\n );\n default:\n return { valid: false, error: `Unknown proof type: ${proofType}` };\n }\n }\n\n private async verifyCapsuleProof(\n proofRef: Uint8Array,\n ): Promise<ProofVerificationResult> {\n const capsuleId = new TextDecoder().decode(proofRef);\n return {\n valid: true,\n metadata: { capsuleId, requiresCapsuleValidation: true },\n };\n }\n\n private async verifyJWTProof(\n proofRef: Uint8Array,\n ): Promise<ProofVerificationResult> {\n try {\n const token = new TextDecoder().decode(proofRef);\n const parts = token.split(\".\");\n\n if (parts.length !== 3) {\n return { valid: false, error: \"Invalid JWT format\" };\n }\n\n const payload = JSON.parse(Buffer.from(parts[1], \"base64url\").toString());\n\n if (payload.exp && Date.now() / 1000 > payload.exp) {\n return { valid: false, error: \"JWT expired\" };\n }\n\n if (payload.nbf && Date.now() / 1000 < payload.nbf) {\n return { valid: false, error: \"JWT not yet valid\" };\n }\n\n return {\n valid: true,\n actorId: payload.sub || payload.actor_id,\n metadata: { iss: payload.iss, scope: payload.scope },\n };\n } catch (e) {\n const message = e instanceof Error ? e.message : \"Unknown error\";\n return { valid: false, error: `JWT parse error: ${message}` };\n }\n }\n\n private async verifyMTLSProof(\n mtls?: MTLSContext,\n ): Promise<ProofVerificationResult> {\n if (!mtls) {\n return { valid: false, error: \"No mTLS context provided\" };\n }\n\n if (!mtls.verified) {\n return { valid: false, error: \"mTLS not verified by TLS terminator\" };\n }\n\n if (mtls.clientCertFingerprint) {\n const trusted = this.trustedCerts.get(mtls.clientCertFingerprint);\n if (trusted) {\n return {\n valid: true,\n actorId: trusted.actorId,\n metadata: {\n fingerprint: mtls.clientCertFingerprint,\n subject: mtls.clientCertSubject,\n },\n };\n }\n }\n\n if (mtls.clientCertSubject) {\n const cnMatch = mtls.clientCertSubject.match(/CN=([^,]+)/);\n if (cnMatch) {\n return {\n valid: true,\n actorId: cnMatch[1],\n metadata: {\n subject: mtls.clientCertSubject,\n issuer: mtls.clientCertIssuer,\n },\n };\n }\n }\n\n return { valid: false, error: \"Could not extract actor from certificate\" };\n }\n\n private async verifyDeviceSEProof(\n signTarget?: Uint8Array,\n signature?: Uint8Array,\n deviceSE?: DeviceSEContext,\n ): Promise<ProofVerificationResult> {\n if (!deviceSE || !signTarget || !signature) {\n return { valid: false, error: \"Missing Device SE context\" };\n }\n\n let publicKey = deviceSE.publicKey;\n\n const registeredKey = this.deviceKeys.get(deviceSE.deviceId);\n if (registeredKey) {\n publicKey = registeredKey;\n }\n\n if (!publicKey || publicKey.length !== 32) {\n return {\n valid: false,\n error: \"Invalid or unregistered device public key\",\n };\n }\n\n try {\n const valid = nacl.sign.detached.verify(signTarget, signature, publicKey);\n\n if (!valid) {\n return { valid: false, error: \"Device signature verification failed\" };\n }\n\n return {\n valid: true,\n actorId: deviceSE.deviceId,\n metadata: { deviceId: deviceSE.deviceId, proofType: \"DEVICE_SE\" },\n };\n } catch (e) {\n const message = e instanceof Error ? e.message : \"Unknown error\";\n return {\n valid: false,\n error: `Signature verification error: ${message}`,\n };\n }\n }\n\n registerDeviceKey(deviceId: string, publicKey: Uint8Array): void {\n if (publicKey.length !== 32) {\n throw new Error(\"Device public key must be 32 bytes (Ed25519)\");\n }\n this.deviceKeys.set(deviceId, publicKey);\n this.logger.log(`Registered device key for ${deviceId}`);\n }\n\n unregisterDevice(deviceId: string): boolean {\n return this.deviceKeys.delete(deviceId);\n }\n\n registerMTLSCert(fingerprint: string, actorId: string): void {\n this.trustedCerts.set(fingerprint, { actorId, issuedAt: Date.now() });\n this.logger.log(`Registered mTLS cert ${fingerprint} for actor ${actorId}`);\n }\n\n revokeMTLSCert(fingerprint: string): boolean {\n return this.trustedCerts.delete(fingerprint);\n }\n\n static calculateFingerprint(certPem: string): string {\n const der = Buffer.from(\n certPem\n .replace(/-----BEGIN CERTIFICATE-----/, \"\")\n .replace(/-----END CERTIFICATE-----/, \"\")\n .replace(/\\s/g, \"\"),\n \"base64\",\n );\n return crypto.createHash(\"sha256\").update(der).digest(\"hex\");\n }\n}\n","import { decodeTLVsList } from \"../core/tlv\";\n\nexport enum BodyProfile {\n RAW = 0,\n TLV_MAP = 1,\n OBJ = 2,\n ARR = 3,\n}\n\nexport interface BodyProfileValidation {\n valid: boolean;\n error?: string;\n profile: BodyProfile;\n}\n\n/**\n * Validates AXIS frame body against declared body profile.\n */\nexport class BodyProfileValidator {\n validate(body: Uint8Array, profile: BodyProfile): BodyProfileValidation {\n switch (profile) {\n case BodyProfile.RAW:\n return this.validateRaw(body);\n case BodyProfile.TLV_MAP:\n return this.validateTlvMap(body);\n case BodyProfile.OBJ:\n return this.validateObj(body);\n case BodyProfile.ARR:\n return this.validateArr(body);\n default:\n return {\n valid: false,\n error: `Unknown body profile: ${profile}`,\n profile,\n };\n }\n }\n\n private validateRaw(_body: Uint8Array): BodyProfileValidation {\n return { valid: true, profile: BodyProfile.RAW };\n }\n\n private validateTlvMap(body: Uint8Array): BodyProfileValidation {\n try {\n const tlvs = decodeTLVsList(body);\n for (const tlv of tlvs) {\n if (tlv.type === 254 || tlv.type === 255) {\n return {\n valid: false,\n error: \"TLV_MAP profile cannot contain nested OBJ/ARR types\",\n profile: BodyProfile.TLV_MAP,\n };\n }\n }\n return { valid: true, profile: BodyProfile.TLV_MAP };\n } catch (error) {\n const message = error instanceof Error ? error.message : \"Unknown error\";\n return {\n valid: false,\n error: `TLV_MAP decode failed: ${message}`,\n profile: BodyProfile.TLV_MAP,\n };\n }\n }\n\n private validateObj(body: Uint8Array): BodyProfileValidation {\n try {\n const tlvs = decodeTLVsList(body);\n const hasObj = tlvs.some((t) => t.type === 254);\n if (!hasObj && tlvs.length > 0) {\n return {\n valid: false,\n error: \"OBJ profile must contain OBJ type (254)\",\n profile: BodyProfile.OBJ,\n };\n }\n return { valid: true, profile: BodyProfile.OBJ };\n } catch (error) {\n const message = error instanceof Error ? error.message : \"Unknown error\";\n return {\n valid: false,\n error: `OBJ decode failed: ${message}`,\n profile: BodyProfile.OBJ,\n };\n }\n }\n\n private validateArr(body: Uint8Array): BodyProfileValidation {\n try {\n const tlvs = decodeTLVsList(body);\n const hasArr = tlvs.some((t) => t.type === 255);\n if (!hasArr && tlvs.length > 0) {\n return {\n valid: false,\n error: \"ARR profile must contain ARR type (255)\",\n profile: BodyProfile.ARR,\n };\n }\n return { valid: true, profile: BodyProfile.ARR };\n } catch (error) {\n const message = error instanceof Error ? error.message : \"Unknown error\";\n return {\n valid: false,\n error: `ARR decode failed: ${message}`,\n profile: BodyProfile.ARR,\n };\n }\n }\n}\n","import type { SensorInput } from \"../sensor/axis-sensor\";\n\nexport type AxisLawDecision = \"allow\" | \"deny\" | \"conditional\";\n\nexport interface AxisLawArticleSummary {\n article_id: string;\n article_type?: string;\n decision?: string;\n reason?: string;\n}\n\nexport interface AxisLawEvaluationContext {\n actorId?: string;\n intent?: string;\n audience?: string;\n tps?: string | number;\n country?: string;\n ip?: string;\n path?: string;\n clientId?: string;\n deviceId?: string;\n sessionId?: string;\n capsuleId?: string;\n metadata: Record<string, unknown>;\n packet?: Record<string, unknown>;\n frameBody?: unknown;\n}\n\nexport interface AxisLawEvaluationResult {\n decision: AxisLawDecision;\n reason: string;\n explanation?: string;\n denied?: AxisLawArticleSummary[];\n permitted?: AxisLawArticleSummary[];\n required?: AxisLawArticleSummary[];\n applicable?: AxisLawArticleSummary[];\n metadata?: Record<string, unknown>;\n}\n\nexport type AxisLawEvaluator =\n | ((\n context: AxisLawEvaluationContext,\n ) => AxisLawEvaluationResult | Promise<AxisLawEvaluationResult>);\n\nexport interface LawEvaluationSensorOptions {\n evaluator?: AxisLawEvaluator;\n conditionalDecision?: \"deny\" | \"flag\" | \"allow\";\n}\n\nexport function buildAxisLawEvaluationContext(\n input: SensorInput,\n): AxisLawEvaluationContext {\n const metadata = (input.metadata ?? {}) as Record<string, unknown>;\n const packet = input.packet as Record<string, unknown> | undefined;\n const packetBody =\n input.frameBody ??\n (packet?.body as unknown) ??\n (packet?.args as unknown) ??\n undefined;\n const capsuleId =\n (metadata.capsule_id as string | undefined) ??\n (metadata.capsuleId as string | undefined) ??\n (packet?.capsuleId as string | undefined) ??\n (input.clientId as string | undefined);\n const audience =\n (input.aud as string | undefined) ??\n (metadata.audience as string | undefined) ??\n (packet?.aud as string | undefined);\n const tps =\n (metadata.tps as string | number | undefined) ??\n (packet?.tps as string | number | undefined) ??\n (packet?.tickTps as string | number | undefined);\n\n return {\n actorId: input.actorId,\n intent: input.intent,\n audience,\n tps,\n country: input.country,\n ip: input.ip,\n path: input.path,\n clientId: input.clientId,\n deviceId: input.deviceId,\n sessionId: input.sessionId,\n capsuleId,\n metadata,\n packet,\n frameBody: packetBody,\n };\n}\n","export * from \"./law.types\";\n","/**\n * AXIS Risk Signal Types\n *\n * Protocol-level types for risk evaluation and signalling.\n * Used by sensors, risk gates, and anomaly detectors.\n */\n\n/**\n * A discrete risk signal emitted by a detector or sensor.\n * Signals are aggregated by the risk gate to produce a final RiskEvaluation.\n */\nexport interface RiskSignal {\n type: string;\n severity: 'low' | 'medium' | 'high' | 'critical';\n value: any;\n message: string;\n}\n\n/**\n * Granular risk gate decision outcomes.\n * More expressive than a binary ALLOW/DENY — covers step-up and witness flows.\n */\nexport enum RiskDecision {\n ALLOW = 'ALLOW',\n THROTTLE = 'THROTTLE',\n STEP_UP = 'STEP_UP',\n WITNESS = 'WITNESS',\n DENY = 'DENY',\n}\n\n/**\n * The result of a risk gate evaluation over a set of signals.\n */\nexport interface RiskEvaluation {\n decision: RiskDecision;\n reason?: string;\n retryAfterMs?: number;\n /** Confidence score in range [0, 1]. */\n confidence: number;\n signals: RiskSignal[];\n}\n","/**\n * AXIS Opcode Registry\n * Central registry of all allowed opcodes.\n * Unknown opcodes are rejected by default (no shadow endpoints).\n */\n\nexport const AXIS_OPCODES = new Set([\n 'CAPSULE.ISSUE',\n 'CAPSULE.BATCH',\n 'CAPSULE.REVOKE',\n 'INTENT.EXEC',\n 'ACTOR.KEY.ROTATE',\n 'ACTOR.KEY.REVOKE',\n 'ISSUER.KEY.ROTATE',\n // NestFlow opcodes\n 'AUTH.WEB.LOGIN',\n 'AUTH.WEB.SCAN',\n 'TICKAUTH.CREATE',\n 'TICKAUTH.FULFILL',\n 'TICKAUTH.REJECT',\n 'SESSION.ACTIVATE',\n 'SESSION.REFRESH',\n 'SESSION.LOGOUT',\n 'DEVICE.TRUST',\n 'DEVICE.PROMOTE',\n 'DEVICE.REVOKE',\n 'DEVICE.LIST',\n 'DEVICE.RENAME',\n 'IDENTITY.RECOVERY',\n 'IDENTITY.LOCK',\n]);\n\nexport function isKnownOpcode(op: string): boolean {\n return AXIS_OPCODES.has(op);\n}\n\n/**\n * Returns true if the opcode requires elevated permissions.\n */\nexport function isAdminOpcode(op: string): boolean {\n return (\n op.startsWith('ACTOR.KEY.') ||\n op.startsWith('ISSUER.KEY.') ||\n op.startsWith('IDENTITY.')\n );\n}\n","/**\n * AXIS Receipt Hash Construction\n * Canonical receipt chain hash — protocol invariant.\n * Any compliant implementation must produce identical hashes.\n */\nimport { createHash } from 'crypto';\n\n/** Canonical receipt effect types */\nexport type ReceiptEffect = 'ALLOW' | 'DENY' | 'ERROR';\n\n/**\n * Builds the canonical SHA-256 hash for a receipt in the chain.\n *\n * Field order (protocol-defined):\n * prevHash? | pid | actorId (utf8) | intent (utf8) | effect (utf8) | ts (utf8 string)\n *\n * @param prevHash Previous receipt hash (null for first receipt)\n * @param pid Process/packet ID (raw bytes)\n * @param actorId Actor identifier (string)\n * @param intent Intent name (string)\n * @param effect Execution effect ('ALLOW' | 'DENY' | 'ERROR')\n * @param ts Timestamp as bigint (milliseconds since epoch)\n * @returns 32-byte SHA-256 hash\n */\nexport function buildReceiptHash(\n prevHash: Buffer | null,\n pid: Buffer,\n actorId: string,\n intent: string,\n effect: ReceiptEffect,\n ts: bigint,\n): Buffer {\n const h = createHash('sha256');\n if (prevHash) h.update(prevHash);\n h.update(pid);\n h.update(Buffer.from(actorId, 'utf8'));\n h.update(Buffer.from(intent, 'utf8'));\n h.update(Buffer.from(effect, 'utf8'));\n h.update(Buffer.from(ts.toString(), 'utf8'));\n return h.digest();\n}\n","/**\n * AXIS Intent Sensitivity Classification\n * Protocol-level risk classification for intents.\n */\n\nexport enum IntentSensitivity {\n LOW = 1,\n MEDIUM = 2,\n HIGH = 3,\n CRITICAL = 4,\n}\n\n/**\n * Maps known intents to their sensitivity level.\n */\nexport const INTENT_SENSITIVITY_MAP: Record<string, IntentSensitivity> = {\n // System intents\n 'system.ping': IntentSensitivity.LOW,\n\n // Catalog intents\n 'catalog.list': IntentSensitivity.LOW,\n 'catalog.search': IntentSensitivity.LOW,\n 'catalog.intent.describe': IntentSensitivity.LOW,\n 'catalog.intent.complete': IntentSensitivity.LOW,\n\n // Stream intents\n 'stream.publish': IntentSensitivity.MEDIUM,\n 'stream.read': IntentSensitivity.MEDIUM,\n 'stream.subscribe': IntentSensitivity.MEDIUM,\n\n // File intents\n 'file.init': IntentSensitivity.MEDIUM,\n 'file.chunk': IntentSensitivity.MEDIUM,\n 'file.finalize': IntentSensitivity.MEDIUM,\n 'file.status': IntentSensitivity.LOW,\n\n // Passport intents\n 'passport.issue': IntentSensitivity.HIGH,\n 'passport.verify': IntentSensitivity.MEDIUM,\n 'passport.revoke': IntentSensitivity.CRITICAL,\n\n // Mail intents\n 'mail.send': IntentSensitivity.HIGH,\n\n // Admin intents\n 'admin.create_capsule': IntentSensitivity.CRITICAL,\n 'admin.revoke_capsule': IntentSensitivity.CRITICAL,\n 'admin.issue_node_cert': IntentSensitivity.CRITICAL,\n\n // NestFlow: Auth\n 'auth.web.login.request': IntentSensitivity.MEDIUM,\n 'auth.web.login.scan': IntentSensitivity.HIGH,\n\n // NestFlow: TickAuth\n 'tickauth.challenge.create': IntentSensitivity.MEDIUM,\n 'tickauth.challenge.fulfill': IntentSensitivity.HIGH,\n 'tickauth.challenge.reject': IntentSensitivity.MEDIUM,\n\n // NestFlow: Capsule issuance\n 'capsule.issue.login': IntentSensitivity.HIGH,\n 'capsule.issue.device_registration': IntentSensitivity.HIGH,\n 'capsule.issue.step_up': IntentSensitivity.HIGH,\n 'capsule.issue.recovery': IntentSensitivity.CRITICAL,\n\n // NestFlow: Session\n 'session.activate': IntentSensitivity.HIGH,\n 'session.refresh': IntentSensitivity.MEDIUM,\n 'session.logout': IntentSensitivity.LOW,\n\n // NestFlow: Device trust\n 'device.trust.request': IntentSensitivity.HIGH,\n 'device.trust.promote': IntentSensitivity.CRITICAL,\n 'device.revoke': IntentSensitivity.CRITICAL,\n 'device.list': IntentSensitivity.LOW,\n 'device.rename': IntentSensitivity.LOW,\n\n // NestFlow: Protected operations\n 'flow.publish': IntentSensitivity.MEDIUM,\n 'flow.delete': IntentSensitivity.HIGH,\n 'node.delete': IntentSensitivity.CRITICAL,\n 'secret.rotate': IntentSensitivity.CRITICAL,\n 'org.security.update': IntentSensitivity.CRITICAL,\n 'production.execution.approve': IntentSensitivity.CRITICAL,\n\n // NestFlow: Recovery\n 'identity.recovery.start': IntentSensitivity.CRITICAL,\n 'identity.recovery.complete': IntentSensitivity.CRITICAL,\n 'primary.device.rotate': IntentSensitivity.CRITICAL,\n 'identity.lock': IntentSensitivity.CRITICAL,\n 'identity.unlock': IntentSensitivity.CRITICAL,\n};\n\n/**\n * Classifies an intent's sensitivity level.\n *\n * Lookup strategy:\n * 1. Exact intent match\n * 2. Prefix wildcard match (realm.*)\n * 3. Default to MEDIUM\n */\nexport function classifyIntent(intent: string): IntentSensitivity {\n if (INTENT_SENSITIVITY_MAP[intent]) {\n return INTENT_SENSITIVITY_MAP[intent];\n }\n\n const realm = intent.split('.')[0];\n const wildcardKey = `${realm}.*`;\n if (INTENT_SENSITIVITY_MAP[wildcardKey]) {\n return INTENT_SENSITIVITY_MAP[wildcardKey];\n }\n\n return IntentSensitivity.MEDIUM;\n}\n\n/**\n * Returns the string name for a sensitivity level.\n */\nexport function sensitivityName(level: IntentSensitivity): string {\n switch (level) {\n case IntentSensitivity.LOW:\n return 'LOW';\n case IntentSensitivity.MEDIUM:\n return 'MEDIUM';\n case IntentSensitivity.HIGH:\n return 'HIGH';\n case IntentSensitivity.CRITICAL:\n return 'CRITICAL';\n }\n}\n","/**\n * AXIS Intent Timeout Configuration\n * Protocol-level per-intent execution time limits.\n */\n\n/**\n * Per-intent timeout configuration (milliseconds).\n * Patterns ending with '.*' match any intent with that prefix.\n */\nexport const INTENT_TIMEOUTS: Record<string, number> = {\n 'public.*': 5000,\n 'schema.*': 5000,\n 'catalog.*': 5000,\n 'health.*': 2000,\n\n 'file.upload': 60000,\n 'file.download': 60000,\n 'file.chunk': 30000,\n 'file.finalize': 30000,\n\n 'stream.*': 30000,\n\n 'passport.*': 15000,\n\n 'admin.*': 30000,\n};\n\n/** Default timeout for unspecified intents */\nexport const DEFAULT_TIMEOUT = 10000;\n\n/**\n * Resolves the timeout for a given intent.\n *\n * Lookup strategy:\n * 1. Exact intent match\n * 2. Prefix pattern match (e.g. 'file.*')\n * 3. DEFAULT_TIMEOUT\n */\nexport function resolveTimeout(intent: string): number {\n if (INTENT_TIMEOUTS[intent]) {\n return INTENT_TIMEOUTS[intent];\n }\n\n for (const [pattern, timeout] of Object.entries(INTENT_TIMEOUTS)) {\n if (pattern.endsWith('.*')) {\n const prefix = pattern.slice(0, -1);\n if (intent.startsWith(prefix)) {\n return timeout;\n }\n }\n }\n\n return DEFAULT_TIMEOUT;\n}\n","/**\n * AXIS Frame Shape Validator\n * Validates structural integrity of AXIS frames before cryptographic verification.\n */\n\n/**\n * Validates that a value has the structural shape of an AXIS Frame.\n * Checks version, required string fields, timestamp, signature envelope, and body.\n *\n * Note: This validates the JSON-level frame shape (v1 packet format).\n * For binary frame validation, use decodeFrame() which throws on malformed input.\n */\nexport function validateFrameShape(frame: any): boolean {\n if (!frame || typeof frame !== 'object') {\n return false;\n }\n\n if (frame.v !== 1) {\n return false;\n }\n\n const requiredStrings = ['pid', 'nonce', 'actorId', 'opcode'];\n for (const key of requiredStrings) {\n if (typeof frame[key] !== 'string' || frame[key].length < 6) {\n return false;\n }\n }\n\n if (typeof frame.ts !== 'number' || !Number.isFinite(frame.ts)) {\n return false;\n }\n\n if (\n frame.aud !== undefined &&\n (typeof frame.aud !== 'string' || frame.aud.length === 0)\n ) {\n return false;\n }\n\n if (!frame.sig || typeof frame.sig !== 'object') {\n return false;\n }\n\n if (frame.sig.alg !== 'EdDSA') {\n return false;\n }\n\n if (typeof frame.sig.kid !== 'string' || frame.sig.kid.length < 8) {\n return false;\n }\n\n if (typeof frame.sig.value !== 'string' || frame.sig.value.length < 32) {\n return false;\n }\n\n if (typeof frame.body !== 'object' || frame.body === null) {\n return false;\n }\n\n return true;\n}\n\n/**\n * Validates timestamp is within acceptable skew window.\n */\nexport function isTimestampValid(\n ts: number,\n skewSeconds: number = 120,\n): boolean {\n const now = Math.floor(Date.now() / 1000);\n const diff = Math.abs(now - ts);\n return diff <= skewSeconds;\n}\n","export const AXIS_UPLOAD_SESSION_STORE = 'AXIS_UPLOAD_SESSION_STORE';\nexport const AXIS_UPLOAD_FILE_STORE = 'AXIS_UPLOAD_FILE_STORE';\nexport const AXIS_UPLOAD_RECEIPT_SIGNER = 'AXIS_UPLOAD_RECEIPT_SIGNER';\n","import * as fs from 'fs';\nimport * as path from 'path';\n\nimport { UploadFileStat, UploadFileStore } from './upload.types';\n\nexport interface DiskUploadFileStoreOptions {\n uploadDir: string;\n chunkDir: string;\n}\n\nexport class DiskUploadFileStore implements UploadFileStore {\n private readonly uploadDir: string;\n private readonly chunkDir: string;\n\n constructor(options: DiskUploadFileStoreOptions) {\n this.uploadDir = options.uploadDir;\n this.chunkDir = options.chunkDir;\n }\n\n getFinalPath(fileId: string, filename?: string): string {\n const safeFilename = filename ? path.basename(filename) : fileId;\n return path.join(this.uploadDir, safeFilename);\n }\n\n getTempPath(fileId: string): string {\n const safeId = path.basename(fileId);\n return path.join(this.chunkDir, safeId);\n }\n\n async statFinal(\n fileId: string,\n filename?: string,\n ): Promise<UploadFileStat> {\n const finalPath = this.getFinalPath(fileId, filename);\n if (!fs.existsSync(finalPath)) {\n throw new Error('FILE_MISSING_ON_DISK');\n }\n const stat = fs.statSync(finalPath);\n return { path: finalPath, size: stat.size };\n }\n\n async readFinalRange(\n fileId: string,\n filename: string | undefined,\n start: number,\n length: number,\n ): Promise<Buffer> {\n const finalPath = this.getFinalPath(fileId, filename);\n const buffer = Buffer.alloc(length);\n const fd = fs.openSync(finalPath, 'r');\n try {\n fs.readSync(fd, buffer, 0, length, start);\n } finally {\n fs.closeSync(fd);\n }\n return buffer;\n }\n\n async hasTemp(fileId: string): Promise<boolean> {\n const tempPath = this.getTempPath(fileId);\n return fs.existsSync(tempPath);\n }\n\n async moveTempToFinal(\n fileId: string,\n filename?: string,\n ): Promise<string> {\n const tempPath = this.getTempPath(fileId);\n const finalPath = this.getFinalPath(fileId, filename);\n\n try {\n await fs.promises.rename(tempPath, finalPath);\n } catch {\n await fs.promises.copyFile(tempPath, finalPath);\n await fs.promises.unlink(tempPath);\n }\n\n return finalPath;\n }\n\n createTempReadStream(fileId: string): NodeJS.ReadableStream {\n const tempPath = this.getTempPath(fileId);\n return fs.createReadStream(tempPath);\n }\n}\n","import type { AxisObserverBinding } from \"../decorators/observer.decorator\";\nimport type { AxisObserverContext } from \"./axis-observer.interface\";\nimport { ObserverRegistry } from \"./registry/observer.registry\";\nimport { createAxisLogger } from \"../utils/axis-logger\";\n\nfunction unique<T>(values: T[]): T[] {\n return Array.from(new Set(values));\n}\n\nexport class ObserverDispatcherService {\n private readonly logger = createAxisLogger(ObserverDispatcherService.name);\n\n constructor(private readonly registry: ObserverRegistry) {}\n\n async dispatch(\n bindings: AxisObserverBinding[] | undefined,\n context: AxisObserverContext,\n ): Promise<void> {\n const explicitBindings = bindings || [];\n const implicitRegistrations = this.getImplicitRegistrations();\n\n if (!explicitBindings.length && implicitRegistrations.length === 0) {\n return;\n }\n\n const invoked = new Set<string>();\n\n const implicitBindings: AxisObserverBinding[] = implicitRegistrations.map(\n (registration) => ({\n refs: [registration.instance.constructor],\n events: registration.events,\n }),\n );\n\n const merged = mergeBindingRefs(explicitBindings, implicitBindings);\n\n for (const binding of merged) {\n if (\n binding.events &&\n binding.events.length > 0 &&\n !binding.events.includes(context.event)\n ) {\n continue;\n }\n\n for (const ref of binding.refs) {\n const registration = this.registry.resolve(ref);\n if (!registration) {\n this.logger.warn(`Observer ${String(ref)} could not be resolved`);\n continue;\n }\n\n if (invoked.has(registration.name)) continue;\n\n if (\n !matchesObserverIntent(registration.intents, context.intent) ||\n !matchesObserverHandler(registration.handlers, context.handler)\n ) {\n continue;\n }\n\n if (\n registration.events &&\n registration.events.length > 0 &&\n !registration.events.includes(context.event)\n ) {\n continue;\n }\n\n const observerContext: AxisObserverContext = {\n ...context,\n observerTags: unique([\n ...(registration.tags || []),\n ...(binding.tags || []),\n ...(context.observerTags || []),\n ]),\n };\n\n if (\n registration.instance.supports &&\n !registration.instance.supports(observerContext)\n ) {\n continue;\n }\n\n try {\n invoked.add(registration.name);\n await registration.instance.observe(observerContext);\n } catch (error: any) {\n this.logger.warn(\n `Observer ${registration.name} failed during ${context.event}: ${error.message}`,\n );\n }\n }\n }\n }\n\n private getImplicitRegistrations() {\n return this.registry.list();\n }\n}\n\nfunction matchesObserverIntent(\n intents: string[] | undefined,\n intent?: string,\n): boolean {\n if (!intents || intents.length === 0) {\n return true;\n }\n\n if (!intent) {\n return false;\n }\n\n return intents.includes(intent);\n}\n\nfunction normalizeHandlerToken(value: string): string {\n return value.trim().toLowerCase();\n}\n\nfunction matchesObserverHandler(\n handlers: string[] | undefined,\n handler?: string,\n): boolean {\n if (!handlers || handlers.length === 0) {\n return true;\n }\n\n if (!handler) {\n return false;\n }\n\n const normalizedHandler = normalizeHandlerToken(handler);\n return handlers.some((candidate) => {\n if (!candidate) {\n return false;\n }\n\n const normalizedCandidate = normalizeHandlerToken(candidate);\n return (\n normalizedHandler === normalizedCandidate ||\n normalizedHandler.endsWith(`.${normalizedCandidate}`) ||\n normalizedHandler.startsWith(`${normalizedCandidate}.`) ||\n normalizedCandidate.endsWith(`.${normalizedHandler}`) ||\n normalizedCandidate.startsWith(`${normalizedHandler}.`)\n );\n });\n}\n\nfunction observerRefKey(ref: { name?: string } | string | Function): string {\n return typeof ref === \"string\" ? ref : ref.name || \"(anonymous)\";\n}\n\nfunction mergeBindingRefs(\n ...bindingGroups: AxisObserverBinding[][]\n): AxisObserverBinding[] {\n const merged = new Map<string, AxisObserverBinding>();\n\n for (const bindings of bindingGroups) {\n for (const binding of bindings) {\n for (const ref of binding.refs) {\n const key = observerRefKey(ref);\n const current = merged.get(key);\n\n if (!current) {\n merged.set(key, {\n refs: [ref],\n tags: binding.tags ? [...new Set(binding.tags)] : undefined,\n events: binding.events ? [...new Set(binding.events)] : undefined,\n });\n continue;\n }\n\n current.tags = Array.from(\n new Set([...(current.tags || []), ...(binding.tags || [])]),\n );\n current.events =\n current.events === undefined || binding.events === undefined\n ? undefined\n : Array.from(new Set([...(current.events || []), ...binding.events]));\n }\n }\n }\n\n return Array.from(merged.values());\n}\n","import type { AxisObserverDefinition, AxisObserverRef } from \"../../decorators/observer.decorator\";\nimport type {\n AxisIntentObserver,\n AxisObserverRegistration,\n} from \"../axis-observer.interface\";\nimport { createAxisLogger } from \"../../utils/axis-logger\";\n\nexport class ObserverRegistry {\n private readonly logger = createAxisLogger(ObserverRegistry.name);\n private readonly byName = new Map<string, AxisObserverRegistration>();\n private readonly byType = new Map<Function, AxisObserverRegistration>();\n\n register(\n instance: AxisIntentObserver,\n meta: AxisObserverDefinition = {},\n ): void {\n const name = meta.name || instance.name || instance.constructor.name;\n const registration: AxisObserverRegistration = {\n name,\n instance,\n tags: meta.tags || [],\n events: meta.events,\n intents: meta.intents,\n handlers: meta.handlers,\n };\n\n this.byName.set(name, registration);\n this.byType.set(instance.constructor, registration);\n this.logger.debug(`Registered observer: ${name}`);\n }\n\n resolve(ref: AxisObserverRef): AxisObserverRegistration | undefined {\n if (typeof ref === \"string\") {\n return this.byName.get(ref);\n }\n\n return this.byType.get(ref) || this.byName.get(ref.name);\n }\n\n list(): AxisObserverRegistration[] {\n return Array.from(this.byName.values()).sort((left, right) =>\n left.name.localeCompare(right.name),\n );\n }\n\n clear(): void {\n this.byName.clear();\n this.byType.clear();\n }\n}\n","import type {\n AxisPostSensor,\n AxisPreSensor,\n AxisSensor,\n} from \"../../sensor/axis-sensor\";\nimport type { AxisIntentSensorRef } from \"../../decorators/intent.decorator\";\nimport { createAxisLogger } from \"../../utils/axis-logger\";\n\nexport interface AxisConfigReader {\n get<T = string>(key: string): T | undefined;\n}\n\n/**\n * AxisSensor Registry\n *\n * A central registry for all AXIS security sensors.\n */\nexport class SensorRegistry {\n private sensors: AxisSensor[] = [];\n private sensorsByName = new Map<string, AxisSensor>();\n private sensorsByType = new Map<Function, AxisSensor>();\n private readonly logger = createAxisLogger(SensorRegistry.name);\n\n constructor(private readonly configService?: AxisConfigReader) {}\n\n register(sensor: AxisSensor): void {\n if (!sensor.name) {\n throw new Error(\"AxisSensor must have a name\");\n }\n\n const enabledSensorsStr =\n this.configService?.get<string>(\"ENABLED_SENSORS\");\n const disabledSensorsStr =\n this.configService?.get<string>(\"DISABLED_SENSORS\");\n\n const enabledSensors = enabledSensorsStr\n ? enabledSensorsStr.split(\",\").map((s) => s.trim())\n : null;\n const disabledSensors = disabledSensorsStr\n ? disabledSensorsStr.split(\",\").map((s) => s.trim())\n : [];\n\n if (enabledSensors && !enabledSensors.includes(sensor.name)) {\n this.logger.log(\n `Skipping disabled sensor (not in ENABLED_SENSORS): ${sensor.name}`,\n );\n return;\n }\n\n if (disabledSensors.includes(sensor.name)) {\n this.logger.log(\n `Skipping disabled sensor (in DISABLED_SENSORS): ${sensor.name}`,\n );\n return;\n }\n\n if (sensor.order === undefined) {\n throw new Error(`AxisSensor \"${sensor.name}\" must have an order field`);\n }\n\n const isPreDecodeSensor = this.isPreDecodeSensor(sensor);\n const isPostDecodeSensor = this.isPostDecodeSensor(sensor);\n\n if (isPreDecodeSensor && sensor.order >= 40) {\n this.logger.warn(\n `AxisSensor \"${sensor.name}\" is marked as PRE_DECODE but has order ${sensor.order} (should be < 40)`,\n );\n }\n if (isPostDecodeSensor && sensor.order < 40) {\n this.logger.warn(\n `AxisSensor \"${sensor.name}\" is marked as POST_DECODE but has order ${sensor.order} (should be >= 40)`,\n );\n }\n\n this.sensors.push(sensor);\n this.indexSensor(sensor);\n const phaseLabel =\n typeof sensor.phase === \"string\"\n ? sensor.phase\n : sensor.phase?.phase || \"UNKNOWN\";\n this.logger.debug(\n `Registered sensor: ${sensor.name} (order: ${sensor.order}, phase: ${phaseLabel})`,\n );\n }\n\n list(): AxisSensor[] {\n return [...this.sensors].sort(\n (a, b) => (a.order ?? 999) - (b.order ?? 999),\n );\n }\n\n resolve(ref: AxisIntentSensorRef): AxisSensor | undefined {\n if (typeof ref === \"string\") {\n return this.sensorsByName.get(ref);\n }\n return this.sensorsByType.get(ref) ?? this.sensorsByName.get(ref.name);\n }\n\n getByName(name: string): AxisSensor | undefined {\n return this.sensorsByName.get(name);\n }\n\n getPreDecodeSensors(): AxisPreSensor[] {\n return this.list().filter((s): s is AxisPreSensor =>\n this.isPreDecodeSensor(s),\n );\n }\n\n getPostDecodeSensors(): AxisPostSensor[] {\n return this.list().filter((s): s is AxisPostSensor =>\n this.isPostDecodeSensor(s),\n );\n }\n\n getSensorCountByPhase(): { preDecodeCount: number; postDecodeCount: number } {\n return {\n preDecodeCount: this.getPreDecodeSensors().length,\n postDecodeCount: this.getPostDecodeSensors().length,\n };\n }\n\n clear(): void {\n this.sensors = [];\n this.sensorsByName.clear();\n this.sensorsByType.clear();\n }\n\n private isPreDecodeSensor(sensor: AxisSensor): boolean {\n const phase =\n typeof sensor.phase === \"string\" ? sensor.phase : sensor.phase?.phase;\n // Explicit phase metadata is authoritative; order is only the fallback.\n if (phase) return phase === \"PRE_DECODE\";\n return (sensor.order ?? 999) < 40;\n }\n\n private isPostDecodeSensor(sensor: AxisSensor): boolean {\n const phase =\n typeof sensor.phase === \"string\" ? sensor.phase : sensor.phase?.phase;\n // Explicit phase metadata is authoritative; order is only the fallback.\n if (phase) return phase === \"POST_DECODE\";\n return (sensor.order ?? 999) >= 40;\n }\n\n private indexSensor(sensor: AxisSensor): void {\n this.sensorsByName.set(sensor.name, sensor);\n\n const sensorType = sensor.constructor as Function | undefined;\n if (!sensorType) return;\n\n this.sensorsByType.set(sensorType, sensor);\n\n if (!this.sensorsByName.has(sensorType.name)) {\n this.sensorsByName.set(sensorType.name, sensor);\n }\n }\n}\n","import { randomBytes } from 'crypto';\n\n/* ─── Stage ─── */\n\nexport interface ObservationStage {\n name: string;\n status: 'ok' | 'fail' | 'skip';\n startMs: number;\n endMs?: number;\n durationMs?: number;\n reason?: string;\n code?: string;\n}\n\n/* ─── Sensor Record ─── */\n\nexport interface ObservationSensor {\n name: string;\n allowed: boolean;\n riskScore: number;\n durationMs: number;\n reasons: string[];\n code?: string;\n}\n\n/* ─── Observation (the execution witness) ─── */\n\nexport interface AxisObservation {\n /** Correlation ID (hex) */\n id: string;\n /** High-res start timestamp */\n startMs: number;\n /** Transport origin */\n transport: 'http' | 'ws';\n /** Client IP */\n ip?: string;\n /** Resolved intent */\n intent?: string;\n /** Actor ID (hex) */\n actorId?: string;\n /** Capsule ID */\n capsuleId?: string;\n\n /** Pipeline stages with timing */\n stages: ObservationStage[];\n /** Individual sensor decisions */\n sensors: ObservationSensor[];\n\n /** Final decision */\n decision?: 'ALLOW' | 'DENY';\n /** Machine-readable result code */\n resultCode?: string;\n /** HTTP status code */\n statusCode?: number;\n\n /** End timestamp */\n endMs?: number;\n /** Total duration */\n durationMs?: number;\n\n /** Extensible facts for downstream (receipt builder, audit, etc.) */\n facts: Record<string, unknown>;\n}\n\n/* ─── Factory ─── */\n\nexport function createObservation(\n transport: 'http' | 'ws',\n ip?: string,\n): AxisObservation {\n return {\n id: randomBytes(16).toString('hex'),\n startMs: Date.now(),\n transport,\n ip,\n stages: [],\n sensors: [],\n facts: {},\n };\n}\n\n/* ─── Stage helpers ─── */\n\nexport function startStage(\n obs: AxisObservation,\n name: string,\n): ObservationStage {\n const stage: ObservationStage = { name, status: 'ok', startMs: Date.now() };\n obs.stages.push(stage);\n return stage;\n}\n\nexport function endStage(\n stage: ObservationStage,\n status: 'ok' | 'fail' | 'skip' = 'ok',\n reason?: string,\n code?: string,\n): void {\n stage.endMs = Date.now();\n stage.durationMs = stage.endMs - stage.startMs;\n stage.status = status;\n if (reason) stage.reason = reason;\n if (code) stage.code = code;\n}\n\n/* ─── Sensor recording (called by chain service) ─── */\n\nexport function recordSensor(\n obs: AxisObservation,\n name: string,\n allowed: boolean,\n riskScore: number,\n durationMs: number,\n reasons: string[],\n code?: string,\n): void {\n obs.sensors.push({ name, allowed, riskScore, durationMs, reasons, code });\n}\n\n/* ─── Finalize ─── */\n\nexport function finalizeObservation(\n obs: AxisObservation,\n decision: 'ALLOW' | 'DENY',\n statusCode: number,\n resultCode?: string,\n): void {\n obs.endMs = Date.now();\n obs.durationMs = obs.endMs - obs.startMs;\n obs.decision = decision;\n obs.statusCode = statusCode;\n if (resultCode) obs.resultCode = resultCode;\n}\n","import type {\n AxisSensor,\n SensorDecision,\n SensorInput,\n} from \"../sensor/axis-sensor\";\nimport { normalizeSensorDecision } from \"../sensor/axis-sensor\";\nimport type { AxisObservation } from \"../engine/axis-observation\";\nimport { recordSensor } from \"../engine/axis-observation\";\nimport { SensorRegistry } from \"../engine/registry/sensor.registry\";\n\nexport type { SensorInput, SensorDecision };\n\n/**\n * The consolidated result of a sensor chain evaluation.\n */\nexport interface ChainResult {\n allowed: boolean;\n scoreDelta: number;\n statusCode: number;\n body?: string | Buffer | Uint8Array;\n headers?: Map<number, Uint8Array>;\n}\n\nexport class AxisSensorChainService {\n constructor(private readonly registry: SensorRegistry) {}\n\n async evaluate(\n input: SensorInput,\n phase: \"PRE_DECODE\" | \"POST_DECODE\" | \"BOTH\" = \"POST_DECODE\",\n baseDecision?: SensorDecision,\n ): Promise<SensorDecision> {\n if (phase === \"PRE_DECODE\") {\n return this.evaluateSensors(this.registry.getPreDecodeSensors(), input);\n }\n\n if (phase === \"BOTH\") {\n const rawPreResult = await this.evaluateSensors(\n this.registry.getPreDecodeSensors(),\n input,\n );\n const preResult = normalizeSensorDecision(rawPreResult);\n if (!preResult.allow) return rawPreResult;\n return this.evaluateSensors(\n this.registry.getPostDecodeSensors(),\n input,\n rawPreResult,\n );\n }\n\n return this.evaluateSensors(\n this.registry.getPostDecodeSensors(),\n input,\n baseDecision,\n );\n }\n\n async evaluatePre(input: SensorInput): Promise<SensorDecision> {\n return this.evaluateSensors(this.registry.getPreDecodeSensors(), input);\n }\n\n async evaluatePost(\n input: SensorInput,\n baseDecision?: SensorDecision,\n ): Promise<SensorDecision> {\n return this.evaluateSensors(\n this.registry.getPostDecodeSensors(),\n input,\n baseDecision,\n );\n }\n\n private async evaluateSensors(\n sensors: AxisSensor[],\n input: SensorInput,\n baseDecision?: SensorDecision,\n ): Promise<SensorDecision> {\n const relevantSensors: AxisSensor[] = [];\n for (const sensor of sensors) {\n if (!sensor.supports) {\n relevantSensors.push(sensor);\n continue;\n }\n\n try {\n // supports() is only an applicability gate; false means skip, not deny.\n if (sensor.supports(input)) {\n relevantSensors.push(sensor);\n }\n } catch (error) {\n console.error(\n `[AXIS][SENSOR] ${sensor.name} supports() failed:`,\n error,\n );\n\n const obs = input.metadata?.observation as AxisObservation | undefined;\n if (obs) {\n recordSensor(obs, sensor.name, false, 100, 0, [\n `sensor_support_error:${sensor.name}`,\n ]);\n }\n\n return {\n allow: false,\n riskScore: 100,\n reasons: [`sensor_support_error:${sensor.name}`],\n };\n }\n }\n\n const normalizedBase = baseDecision\n ? normalizeSensorDecision(baseDecision)\n : undefined;\n\n let riskScore = normalizedBase?.riskScore ?? 0;\n const reasons: string[] = normalizedBase?.reasons\n ? [...normalizedBase.reasons]\n : [];\n const tags: Record<string, any> = normalizedBase?.tags\n ? { ...normalizedBase.tags }\n : {};\n let expSecondsMax = normalizedBase?.tighten?.expSecondsMax;\n let constraintsPatch: Record<string, any> = normalizedBase?.tighten\n ?.constraintsPatch\n ? { ...normalizedBase.tighten.constraintsPatch }\n : {};\n\n for (const sensor of relevantSensors) {\n try {\n const t0 = Date.now();\n const rawDecision = await sensor.run(input);\n const elapsed = Date.now() - t0;\n const decision = normalizeSensorDecision(rawDecision);\n\n const obs = input.metadata?.observation as AxisObservation | undefined;\n if (obs) {\n recordSensor(\n obs,\n sensor.name,\n decision.allow,\n decision.riskScore,\n elapsed,\n decision.reasons,\n decision.allow ? undefined : (decision as any).code,\n );\n }\n\n if (!decision.allow) {\n return {\n allow: false,\n riskScore: Math.min(100, riskScore + decision.riskScore),\n reasons: [...reasons, ...decision.reasons],\n tags,\n };\n }\n\n riskScore = Math.min(100, riskScore + decision.riskScore);\n reasons.push(...decision.reasons);\n\n if (decision.tags) {\n Object.assign(tags, decision.tags);\n }\n\n if (decision.tighten?.expSecondsMax !== undefined) {\n expSecondsMax =\n expSecondsMax === undefined\n ? decision.tighten.expSecondsMax\n : Math.min(expSecondsMax, decision.tighten.expSecondsMax);\n }\n\n if (decision.tighten?.constraintsPatch) {\n constraintsPatch = {\n ...constraintsPatch,\n ...decision.tighten.constraintsPatch,\n };\n }\n } catch (error) {\n console.error(`[AXIS][SENSOR] ${sensor.name} failed:`, error);\n\n const obs = input.metadata?.observation as AxisObservation | undefined;\n if (obs) {\n recordSensor(obs, sensor.name, false, 100, 0, [\n `sensor_error:${sensor.name}`,\n ]);\n }\n\n return {\n allow: false,\n riskScore: 100,\n reasons: [`sensor_error:${sensor.name}`],\n };\n }\n }\n\n const tightenPatch =\n Object.keys(constraintsPatch).length > 0 ? constraintsPatch : undefined;\n\n return {\n allow: true,\n riskScore,\n reasons,\n tags,\n tighten:\n expSecondsMax !== undefined || tightenPatch\n ? {\n expSecondsMax,\n constraintsPatch: tightenPatch,\n }\n : undefined,\n };\n }\n}\n","/**\n * Timeline Engine\n *\n * Implements the three timeline operations:\n * - Replay: reconstruct and re-execute past events deterministically\n * - Fork: branch from a prior state with changed conditions\n * - Simulate: run scenarios in a shadow domain with no real effect\n *\n * Rules enforced:\n * 1. No past overwrite — original timeline is never modified\n * 2. Replay is not rewrite — original witness remains intact\n * 3. Forks are explicit — named branches with lineage\n * 4. Reality and shadow are separated — simulation never escapes\n * 5. Determinism is declared — each handler states its determinism class\n * 6. Witness is immutable — records are never altered\n */\n\nimport { createHash, randomBytes } from 'crypto';\n\nimport type {\n ForkRequest,\n ForkResult,\n ReplayDifference,\n ReplayRequest,\n ReplayResult,\n SimulatedSideEffect,\n SimulationRequest,\n SimulationResult,\n StateSnapshot,\n TimelineBranch,\n TimelineComparison,\n TimelineDomain,\n TimelineEvent,\n TimelineHandler,\n TimelineHandlerContext,\n TimelineHandlerResult,\n} from './timeline.types';\nimport type { TimelineStore } from './timeline.store';\n\n// ────────────────────────────────────────────────────────────────────────────\n// Helpers\n// ────────────────────────────────────────────────────────────────────────────\n\nfunction generateId(prefix: string): string {\n return `${prefix}_${randomBytes(16).toString('hex')}`;\n}\n\nfunction sha256(data: string): string {\n return createHash('sha256').update(data).digest('hex');\n}\n\nfunction hashPayload(payload: Record<string, unknown>): string {\n return sha256(JSON.stringify(payload));\n}\n\nfunction diffObjects(\n a: Record<string, unknown>,\n b: Record<string, unknown>,\n): ReplayDifference[] {\n const diffs: ReplayDifference[] = [];\n const allKeys = new Set([...Object.keys(a), ...Object.keys(b)]);\n\n for (const key of allKeys) {\n const va = a[key];\n const vb = b[key];\n if (JSON.stringify(va) !== JSON.stringify(vb)) {\n diffs.push({ field: key, original: va, replayed: vb });\n }\n }\n\n return diffs;\n}\n\n// ────────────────────────────────────────────────────────────────────────────\n// Timeline Engine\n// ────────────────────────────────────────────────────────────────────────────\n\nexport class TimelineEngine {\n private handlers = new Map<string, TimelineHandler>();\n\n constructor(private readonly store: TimelineStore) {}\n\n /** Register an intent handler for timeline execution */\n registerHandler(handler: TimelineHandler): void {\n this.handlers.set(handler.intent, handler);\n }\n\n // ──────────────────────────────────────────────────────────────────────\n // Record (store a real execution as a timeline event)\n // ──────────────────────────────────────────────────────────────────────\n\n async recordEvent(\n intent: string,\n actorId: string,\n payload: Record<string, unknown>,\n result: Record<string, unknown>,\n options: {\n timelineId?: string;\n branchId?: string;\n capsuleId?: string;\n tpsCoordinate?: string;\n witnessId?: string;\n determinism?: TimelineEvent['determinism'];\n parentEventId?: string;\n } = {},\n ): Promise<TimelineEvent> {\n const event: TimelineEvent = {\n event_id: generateId('evt'),\n timeline_id: options.timelineId ?? 'prime',\n branch_id: options.branchId ?? 'main',\n parent_event_id: options.parentEventId ?? null,\n intent,\n actor_id: actorId,\n capsule_id: options.capsuleId,\n tps_coordinate: options.tpsCoordinate,\n payload_hash: hashPayload(payload),\n result_hash: hashPayload(result),\n status: 'executed',\n domain: 'prime',\n determinism: options.determinism ?? 'deterministic',\n witness_id: options.witnessId,\n created_at: Date.now(),\n metadata: { payload, result },\n };\n\n await this.store.saveEvent(event);\n return event;\n }\n\n // ──────────────────────────────────────────────────────────────────────\n // Replay\n // ──────────────────────────────────────────────────────────────────────\n\n async replay(request: ReplayRequest): Promise<ReplayResult> {\n const originalEvent = await this.store.getEvent(request.source_event_id);\n if (!originalEvent) {\n throw new Error(`Event ${request.source_event_id} not found`);\n }\n\n const handler = this.handlers.get(originalEvent.intent);\n if (!handler) {\n throw new Error(`No handler registered for intent '${originalEvent.intent}'`);\n }\n\n // Get original payload from metadata\n const originalPayload =\n (originalEvent.metadata?.payload as Record<string, unknown>) ?? {};\n const replayPayload =\n request.mode === 'analytical' && request.override_payload\n ? request.override_payload\n : originalPayload;\n\n // Load snapshot if available\n const snapshot = await this.store.getSnapshotByEvent(originalEvent.event_id);\n\n const context: TimelineHandlerContext = {\n event_id: generateId('evt'),\n timeline_id: originalEvent.timeline_id,\n branch_id: `replay_${originalEvent.branch_id}`,\n domain: 'audit',\n actor_id: originalEvent.actor_id,\n tps_coordinate: originalEvent.tps_coordinate,\n snapshot: snapshot ?? undefined,\n is_replay: true,\n is_simulation: false,\n };\n\n const startMs = Date.now();\n const handlerResult = await handler.execute(replayPayload, context);\n const durationMs = Date.now() - startMs;\n\n const replayedEvent: TimelineEvent = {\n event_id: context.event_id,\n timeline_id: originalEvent.timeline_id,\n branch_id: context.branch_id,\n parent_event_id: originalEvent.event_id,\n intent: originalEvent.intent,\n actor_id: originalEvent.actor_id,\n capsule_id: originalEvent.capsule_id,\n tps_coordinate: originalEvent.tps_coordinate,\n payload_hash: hashPayload(replayPayload),\n result_hash: hashPayload(handlerResult.result_data),\n status: 'replayed',\n domain: 'audit',\n determinism: originalEvent.determinism,\n created_at: Date.now(),\n metadata: { payload: replayPayload, result: handlerResult.result_data },\n };\n\n await this.store.saveEvent(replayedEvent);\n\n // Compare results\n const originalResult =\n (originalEvent.metadata?.result as Record<string, unknown>) ?? {};\n const differences = diffObjects(originalResult, handlerResult.result_data);\n const deterministicMatch =\n originalEvent.result_hash === replayedEvent.result_hash;\n\n return {\n original_event: originalEvent,\n replayed_event: replayedEvent,\n mode: request.mode,\n deterministic_match: deterministicMatch,\n differences,\n duration_ms: durationMs,\n };\n }\n\n // ──────────────────────────────────────────────────────────────────────\n // Fork\n // ──────────────────────────────────────────────────────────────────────\n\n async fork(request: ForkRequest): Promise<ForkResult> {\n const sourceEvent = await this.store.getEvent(request.source_event_id);\n if (!sourceEvent) {\n throw new Error(`Event ${request.source_event_id} not found`);\n }\n\n const handler = this.handlers.get(sourceEvent.intent);\n if (!handler) {\n throw new Error(`No handler registered for intent '${sourceEvent.intent}'`);\n }\n\n // Create branch\n const branch: TimelineBranch = {\n branch_id: generateId('branch'),\n timeline_id: generateId('timeline'),\n origin_timeline_id: sourceEvent.timeline_id,\n origin_event_id: sourceEvent.event_id,\n branch_type: 'fork',\n creator_subject_id: request.actor_id,\n purpose: request.purpose,\n status: 'active',\n };\n\n await this.store.saveBranch(branch);\n\n // Take snapshot of source state\n const snapshot: StateSnapshot = {\n snapshot_id: generateId('snap'),\n timeline_id: sourceEvent.timeline_id,\n event_id: sourceEvent.event_id,\n tps_coordinate: sourceEvent.tps_coordinate,\n state_hash: hashPayload(\n (sourceEvent.metadata?.result as Record<string, unknown>) ?? {},\n ),\n state_data:\n (sourceEvent.metadata?.result as Record<string, unknown>) ?? {},\n created_at: Date.now(),\n };\n\n await this.store.saveSnapshot(snapshot);\n\n // Execute with new payload\n const context: TimelineHandlerContext = {\n event_id: generateId('evt'),\n timeline_id: branch.timeline_id,\n branch_id: branch.branch_id,\n domain: 'fork',\n actor_id: request.actor_id,\n tps_coordinate: sourceEvent.tps_coordinate,\n snapshot,\n is_replay: false,\n is_simulation: false,\n };\n\n const handlerResult = await handler.execute(request.new_payload, context);\n\n const forkedEvent: TimelineEvent = {\n event_id: context.event_id,\n timeline_id: branch.timeline_id,\n branch_id: branch.branch_id,\n parent_event_id: sourceEvent.event_id,\n intent: sourceEvent.intent,\n actor_id: request.actor_id,\n tps_coordinate: sourceEvent.tps_coordinate,\n payload_hash: hashPayload(request.new_payload),\n result_hash: hashPayload(handlerResult.result_data),\n status: 'forked',\n domain: 'fork',\n determinism: sourceEvent.determinism,\n created_at: Date.now(),\n metadata: {\n payload: request.new_payload,\n result: handlerResult.result_data,\n },\n };\n\n await this.store.saveEvent(forkedEvent);\n\n return { branch, forked_event: forkedEvent, snapshot };\n }\n\n // ──────────────────────────────────────────────────────────────────────\n // Simulate\n // ──────────────────────────────────────────────────────────────────────\n\n async simulate(request: SimulationRequest): Promise<SimulationResult> {\n const handler = this.handlers.get(request.intent);\n if (!handler) {\n throw new Error(`No handler registered for intent '${request.intent}'`);\n }\n\n // Load source snapshot if specified\n let snapshot: StateSnapshot | undefined;\n if (request.from_snapshot_id) {\n const loaded = await this.store.getSnapshot(request.from_snapshot_id);\n if (!loaded) {\n throw new Error(`Snapshot ${request.from_snapshot_id} not found`);\n }\n snapshot = loaded;\n }\n\n // Create shadow branch\n const branch: TimelineBranch = {\n branch_id: generateId('branch'),\n timeline_id: generateId('timeline'),\n origin_timeline_id: 'prime',\n origin_event_id: 'simulation_origin',\n branch_type: 'simulation',\n created_at_tps: request.at_tps,\n creator_subject_id: request.actor_id,\n purpose: request.purpose,\n status: 'active',\n };\n\n await this.store.saveBranch(branch);\n\n const context: TimelineHandlerContext = {\n event_id: generateId('evt'),\n timeline_id: branch.timeline_id,\n branch_id: branch.branch_id,\n domain: 'shadow',\n actor_id: request.actor_id,\n tps_coordinate: request.at_tps,\n snapshot,\n is_replay: false,\n is_simulation: true,\n };\n\n const startMs = Date.now();\n const handlerResult = await handler.execute(request.payload, context);\n const durationMs = Date.now() - startMs;\n\n const simulatedEvent: TimelineEvent = {\n event_id: context.event_id,\n timeline_id: branch.timeline_id,\n branch_id: branch.branch_id,\n parent_event_id: null,\n intent: request.intent,\n actor_id: request.actor_id,\n tps_coordinate: request.at_tps,\n payload_hash: hashPayload(request.payload),\n result_hash: hashPayload(handlerResult.result_data),\n status: 'simulated',\n domain: 'shadow',\n determinism: 'bounded_nondeterministic',\n created_at: Date.now(),\n metadata: { payload: request.payload, result: handlerResult.result_data },\n };\n\n await this.store.saveEvent(simulatedEvent);\n\n // Mark branch as completed\n branch.status = 'completed';\n await this.store.saveBranch(branch);\n\n return {\n branch,\n simulated_event: simulatedEvent,\n predicted_outcome: handlerResult.result_data,\n side_effects: handlerResult.side_effects ?? [],\n duration_ms: durationMs,\n };\n }\n\n // ──────────────────────────────────────────────────────────────────────\n // Compare timelines\n // ──────────────────────────────────────────────────────────────────────\n\n async compare(\n timelineIdA: string,\n timelineIdB: string,\n ): Promise<TimelineComparison> {\n const eventsA = await this.store.getEventsByTimeline(timelineIdA);\n const eventsB = await this.store.getEventsByTimeline(timelineIdB);\n\n // Sort by creation time\n eventsA.sort((a, b) => a.created_at - b.created_at);\n eventsB.sort((a, b) => a.created_at - b.created_at);\n\n const maxLen = Math.max(eventsA.length, eventsB.length);\n const eventPairs: TimelineComparison['event_pairs'] = [];\n let divergencePoint: string | undefined;\n\n for (let i = 0; i < maxLen; i++) {\n const a = eventsA[i];\n const b = eventsB[i];\n\n if (!a || !b) {\n if (!divergencePoint) {\n divergencePoint = a?.event_id ?? b?.event_id;\n }\n continue;\n }\n\n const match = a.result_hash === b.result_hash;\n const resultA =\n (a.metadata?.result as Record<string, unknown>) ?? {};\n const resultB =\n (b.metadata?.result as Record<string, unknown>) ?? {};\n const differences = match ? [] : diffObjects(resultA, resultB);\n\n if (!match && !divergencePoint) {\n divergencePoint = a.event_id;\n }\n\n eventPairs.push({ event_a: a, event_b: b, match, differences });\n }\n\n return {\n timeline_a: timelineIdA,\n timeline_b: timelineIdB,\n event_pairs: eventPairs,\n divergence_point: divergencePoint,\n };\n }\n\n // ──────────────────────────────────────────────────────────────────────\n // State snapshot management\n // ──────────────────────────────────────────────────────────────────────\n\n async createSnapshot(\n eventId: string,\n stateData: Record<string, unknown>,\n ): Promise<StateSnapshot> {\n const event = await this.store.getEvent(eventId);\n if (!event) {\n throw new Error(`Event ${eventId} not found`);\n }\n\n const snapshot: StateSnapshot = {\n snapshot_id: generateId('snap'),\n timeline_id: event.timeline_id,\n event_id: eventId,\n tps_coordinate: event.tps_coordinate,\n state_hash: hashPayload(stateData),\n state_data: stateData,\n created_at: Date.now(),\n };\n\n await this.store.saveSnapshot(snapshot);\n return snapshot;\n }\n\n async restoreSnapshot(snapshotId: string): Promise<StateSnapshot> {\n const snapshot = await this.store.getSnapshot(snapshotId);\n if (!snapshot) {\n throw new Error(`Snapshot ${snapshotId} not found`);\n }\n return snapshot;\n }\n}\n","/**\n * Timeline Store Interface\n *\n * Pluggable storage interface for timeline events, branches, and snapshots.\n * Implementations can use in-memory, database, or any persistence layer.\n */\n\nimport type {\n TimelineEvent,\n TimelineBranch,\n StateSnapshot,\n} from './timeline.types';\n\nexport interface TimelineStore {\n // Events\n saveEvent(event: TimelineEvent): Promise<void>;\n getEvent(eventId: string): Promise<TimelineEvent | null>;\n getEventsByTimeline(timelineId: string): Promise<TimelineEvent[]>;\n getEventsByBranch(branchId: string): Promise<TimelineEvent[]>;\n\n // Branches\n saveBranch(branch: TimelineBranch): Promise<void>;\n getBranch(branchId: string): Promise<TimelineBranch | null>;\n getBranchesByTimeline(timelineId: string): Promise<TimelineBranch[]>;\n\n // Snapshots\n saveSnapshot(snapshot: StateSnapshot): Promise<void>;\n getSnapshot(snapshotId: string): Promise<StateSnapshot | null>;\n getSnapshotByEvent(eventId: string): Promise<StateSnapshot | null>;\n}\n\n/**\n * In-memory timeline store for development and testing.\n */\nexport class InMemoryTimelineStore implements TimelineStore {\n private events = new Map<string, TimelineEvent>();\n private branches = new Map<string, TimelineBranch>();\n private snapshots = new Map<string, StateSnapshot>();\n\n async saveEvent(event: TimelineEvent): Promise<void> {\n this.events.set(event.event_id, event);\n }\n\n async getEvent(eventId: string): Promise<TimelineEvent | null> {\n return this.events.get(eventId) ?? null;\n }\n\n async getEventsByTimeline(timelineId: string): Promise<TimelineEvent[]> {\n return [...this.events.values()].filter((e) => e.timeline_id === timelineId);\n }\n\n async getEventsByBranch(branchId: string): Promise<TimelineEvent[]> {\n return [...this.events.values()].filter((e) => e.branch_id === branchId);\n }\n\n async saveBranch(branch: TimelineBranch): Promise<void> {\n this.branches.set(branch.branch_id, branch);\n }\n\n async getBranch(branchId: string): Promise<TimelineBranch | null> {\n return this.branches.get(branchId) ?? null;\n }\n\n async getBranchesByTimeline(timelineId: string): Promise<TimelineBranch[]> {\n return [...this.branches.values()].filter((b) => b.timeline_id === timelineId);\n }\n\n async saveSnapshot(snapshot: StateSnapshot): Promise<void> {\n this.snapshots.set(snapshot.snapshot_id, snapshot);\n }\n\n async getSnapshot(snapshotId: string): Promise<StateSnapshot | null> {\n return this.snapshots.get(snapshotId) ?? null;\n }\n\n async getSnapshotByEvent(eventId: string): Promise<StateSnapshot | null> {\n return (\n [...this.snapshots.values()].find((s) => s.event_id === eventId) ?? null\n );\n }\n}\n","import {\n buildTLVs,\n extractDtoSchema,\n} from '../index';\nimport type { IntentTlvField } from '../decorators/intent.decorator';\n\ntype AxisTlvDtoCtor<T = object> = new (...args: never[]) => T;\n\nexport function encodeAxisTlvDto<T extends object>(\n dtoClass: AxisTlvDtoCtor<T>,\n data: Partial<Record<keyof T, unknown>>,\n): Uint8Array {\n const schema = extractDtoSchema(dtoClass);\n const items = schema.fields.flatMap((field) => {\n const value = (data as Record<string, unknown>)[field.name];\n if (value === undefined || value === null) {\n if (field.required) {\n throw new Error(`Missing required TLV response field: ${field.name}`);\n }\n return [];\n }\n\n return [{ type: field.tag, value: encodeField(field, value) }];\n });\n\n return buildTLVs(items);\n}\n\nfunction encodeField(field: IntentTlvField, value: unknown): Buffer {\n switch (field.kind) {\n case 'utf8':\n return Buffer.from(String(value), 'utf8');\n case 'u64':\n return encodeU64(value);\n case 'bytes':\n case 'bytes16':\n return toBuffer(value);\n case 'bool':\n return Buffer.from([value ? 1 : 0]);\n case 'obj':\n case 'arr':\n return Buffer.from(JSON.stringify(value), 'utf8');\n default:\n return toBuffer(value);\n }\n}\n\nfunction encodeU64(value: unknown): Buffer {\n const encoded = Buffer.alloc(8);\n encoded.writeBigUInt64BE(\n typeof value === 'bigint' ? value : BigInt(value as number | string),\n );\n return encoded;\n}\n\nfunction toBuffer(value: unknown): Buffer {\n if (Buffer.isBuffer(value)) {\n return value;\n }\n if (value instanceof Uint8Array) {\n return Buffer.from(value);\n }\n if (typeof value === 'string') {\n return Buffer.from(value, 'utf8');\n }\n\n throw new Error(`Unsupported TLV bytes value: ${typeof value}`);\n}","/**\n * Loom Runtime - Lawful Execution Types\n *\n * Core type definitions for the Loom execution engine.\n * Loom replaces traditional auth with \"Lawful Execution\":\n * - Presence: Liveness proof (replaces login/sessions)\n * - Writ: Executable intent (replaces JWT)\n * - Grant: Standing permission (replaces RBAC)\n * - Receipt: Proof of execution (hash-chained)\n */\n\n// ============================================================================\n// Presence Types (Liveness State)\n// ============================================================================\n\nexport interface PresenceDeclaration {\n /** SoftID of the entity resuming presence (e.g., \"~ayesh#work\") */\n softid: string;\n /** Optional device metadata for scope binding */\n device_meta?: {\n fingerprint?: string;\n platform?: string;\n user_agent?: string;\n };\n}\n\nexport interface PresenceChallenge {\n /** Unique challenge identifier */\n challenge_id: string;\n /** High-entropy random nonce (32-byte hex) */\n nonce: string;\n /** Server's current Unix timestamp in milliseconds (temporal anchor) */\n temporal_anchor: number;\n /** Time-to-live for response in milliseconds (default 5000ms) */\n ttl_ms: number;\n /** Challenge expiry timestamp */\n expires_at: number;\n}\n\nexport interface PresenceProof {\n /** Challenge ID being answered */\n challenge_id: string;\n /** Ed25519 signature over canonical(nonce + temporal_anchor + device_meta) */\n signature: string;\n /** Public key corresponding to the SoftID */\n public_key: string;\n /** Optional key identifier */\n kid?: string;\n}\n\nexport interface PresenceReceipt {\n /** Presence ID - hash of the completed handshake */\n presence_id: string;\n /** SoftID that established presence */\n softid: string;\n /** Anchor Reflection ID for logs (privacy-preserving) */\n anchor_reflection: string;\n /** Scope constraints for this presence */\n scope: {\n ip?: string;\n device_fingerprint?: string;\n };\n /** When presence was established (Unix timestamp ms) */\n issued_at: number;\n /** When presence expires (Unix timestamp ms) */\n expires_at: number;\n /** Last renewal timestamp (updated on successful Writ execution) */\n renewed_at?: number;\n}\n\nexport type PresenceStatus = 'active' | 'expired' | 'revoked';\n\n// ============================================================================\n// Writ Types (Executable Intent)\n// ============================================================================\n\nexport interface WritHead {\n /** Thread ID - derived from actor, groups related writs */\n tid: string;\n /** Sequence number within the thread */\n seq: number;\n}\n\nexport interface WritBody {\n /** SoftID of the actor (Anchor or Shadow) */\n who: string;\n /** Operation Execution Code (e.g., \"dns.write\", \"file.upload\") */\n act: string;\n /** Resource target (e.g., \"zone:example.com\", \"bucket:uploads\") */\n res: string;\n /** Grant reference - grant_id or \"self\" for sovereign actions */\n law: string;\n}\n\nexport interface WritMeta {\n /** Issued-at timestamp (Unix seconds) */\n iat: number;\n /** Expiry timestamp (Unix seconds) */\n exp: number;\n /** Previous receipt hash (thread continuity) - empty string for first writ */\n prev: string;\n}\n\nexport interface WritSignature {\n /** Signature algorithm */\n alg: 'ed25519';\n /** Base64-encoded signature value */\n value: string;\n /** Optional key identifier */\n kid?: string;\n}\n\nexport interface Writ {\n head: WritHead;\n body: WritBody;\n meta: WritMeta;\n sig: WritSignature;\n}\n\n// ============================================================================\n// Grant Types (Standing Permission / Law)\n// ============================================================================\n\nexport type GrantType = 'sovereign' | 'delegated' | 'system';\n\nexport interface GrantCapability {\n /** Operation Execution Code this grant allows */\n oec: string;\n /** Resource scope constraint (e.g., \"zone:*.example.com\") */\n scope: string;\n /** Optional quantitative limits */\n limit?: {\n /** Rate limit (e.g., \"10/min\", \"100/day\") */\n rate?: string;\n /** Maximum amount/count */\n amount?: number;\n /** Depth constraint (e.g., \"subdomains_only\") */\n depth?: string;\n };\n}\n\nexport interface GrantMeta {\n /** Issued-at timestamp (Unix seconds) */\n iat: number;\n /** Expiry timestamp (Unix seconds) */\n exp: number;\n /** Whether this grant can be revoked */\n revocable: boolean;\n /** Version number for updates */\n version: number;\n /** Optional Digital Fabric contract reference */\n contract_ref?: string;\n}\n\nexport interface Grant {\n /** Unique grant identifier */\n grant_id: string;\n /** SoftID of the authority who issued this grant */\n issuer: string;\n /** SoftID of the grantee */\n subject: string;\n /** Grant type */\n grant_type: GrantType;\n /** Array of capabilities this grant provides */\n caps: GrantCapability[];\n /** Grant metadata */\n meta: GrantMeta;\n /** Signature over the grant */\n sig: WritSignature;\n}\n\nexport type GrantStatus = 'active' | 'revoked' | 'expired';\n\n// ============================================================================\n// Receipt Types (Proof of Execution)\n// ============================================================================\n\nexport interface LoomReceipt {\n /** Receipt ID */\n receipt_id: string;\n /** Hash of the writ that was executed */\n writ_hash: string;\n /** Thread ID */\n thread_id: string;\n /** Sequence number */\n sequence: number;\n /** Execution effect (e.g., \"ALLOW\", \"DENY\") */\n effect: string;\n /** Current receipt hash (for chaining) */\n hash: string;\n /** Previous receipt hash */\n prev_hash: string | null;\n /** Execution timestamp */\n executed_at: number;\n /** Additional metadata */\n metadata?: Record<string, unknown>;\n}\n\n// ============================================================================\n// Thread Types (Causal Continuity)\n// ============================================================================\n\nexport interface ThreadState {\n /** Thread ID */\n thread_id: string;\n /** SoftID that owns this thread */\n softid: string;\n /** Hash of the last receipt in this thread */\n last_receipt_hash: string;\n /** Current sequence number */\n sequence: number;\n /** Last update timestamp */\n updated_at: number;\n}\n\n// ============================================================================\n// Revocation Types (Null-Receipts)\n// ============================================================================\n\nexport type RevocationTargetType = 'grant' | 'presence' | 'softid';\n\nexport interface Revocation {\n /** Revocation ID */\n revocation_id: string;\n /** What type of entity is being revoked */\n target_type: RevocationTargetType;\n /** ID of the entity being revoked */\n target_id: string;\n /** SoftID of the issuer of this revocation */\n issuer_softid: string;\n /** Reason for revocation */\n reason?: string;\n /** When revocation takes effect (Unix timestamp) */\n effective_at: number;\n /** Signature over the revocation */\n sig_value: string;\n}\n\n// ============================================================================\n// Validation Result Types\n// ============================================================================\n\nexport interface LoomValidationResult {\n valid: boolean;\n error?: string;\n code?: string;\n}\n\nexport interface PresenceVerifyResult extends LoomValidationResult {\n presence?: PresenceReceipt;\n}\n\nexport interface WritValidationResult extends LoomValidationResult {\n writ?: Writ;\n gate_failed?: 'temporal' | 'causal' | 'legal' | 'authentic';\n}\n\nexport interface GrantValidationResult extends LoomValidationResult {\n grant?: Grant;\n}\n\n// ============================================================================\n// TLV Constants (re-exported from core/constants.ts for convenience)\n// ============================================================================\n\nexport {\n TLV_LOOM_PRESENCE_ID as TLV_PRESENCE_ID,\n TLV_LOOM_WRIT as TLV_WRIT,\n TLV_LOOM_THREAD_HASH as TLV_THREAD_HASH,\n PROOF_LOOM,\n} from '../core/constants';\n\n// ============================================================================\n// Utility Functions\n// ============================================================================\n\n/**\n * Derive Anchor Reflection ID (ARID) for privacy-preserving logs.\n * ARID = hash(anchor_pubkey + context + scope)\n */\nexport function deriveAnchorReflection(\n softid: string,\n context: string = 'openlogs',\n scope: string = 'loom',\n): string {\n // Implementation will use crypto hash\n // Placeholder structure: ar:<context>:<scope>:<hash>\n return `ar:${context}:${scope}:${softid}`;\n}\n\n/**\n * Canonicalize a Writ for signing/verification.\n * Returns deterministic JSON string.\n */\nexport function canonicalizeWrit(writ: Omit<Writ, 'sig'>): string {\n const ordered = {\n head: { tid: writ.head.tid, seq: writ.head.seq },\n body: {\n who: writ.body.who,\n act: writ.body.act,\n res: writ.body.res,\n law: writ.body.law,\n },\n meta: { iat: writ.meta.iat, exp: writ.meta.exp, prev: writ.meta.prev },\n };\n return JSON.stringify(ordered);\n}\n\n/**\n * Canonicalize a Grant for signing/verification.\n */\nexport function canonicalizeGrant(grant: Omit<Grant, 'sig'>): string {\n const ordered = {\n grant_id: grant.grant_id,\n issuer: grant.issuer,\n subject: grant.subject,\n grant_type: grant.grant_type,\n caps: grant.caps,\n meta: grant.meta,\n };\n return JSON.stringify(ordered);\n}\n","/**\n * Loom Runtime Engine\n *\n * Implements the full Loom execution lifecycle:\n * - Presence: challenge → proof → receipt (replaces login/sessions)\n * - Writ: creation → validation → execution (replaces JWT)\n * - Grant: resolution → capability matching (replaces RBAC)\n * - Receipt: hash-chained proof of execution\n * - Revocation: null-receipt revocation of grants/presence\n */\n\nimport { createHash, randomBytes } from 'crypto';\nimport { sign, verify } from 'tweetnacl';\n\nimport type {\n Grant,\n GrantCapability,\n GrantStatus,\n GrantValidationResult,\n LoomReceipt,\n PresenceChallenge,\n PresenceDeclaration,\n PresenceProof,\n PresenceReceipt,\n PresenceStatus,\n PresenceVerifyResult,\n Revocation,\n ThreadState,\n Writ,\n WritBody,\n WritHead,\n WritMeta,\n WritSignature,\n WritValidationResult,\n} from './loom.types';\nimport { canonicalizeGrant, canonicalizeWrit } from './loom.types';\n\n// ────────────────────────────────────────────────────────────────────────────\n// Crypto helpers\n// ────────────────────────────────────────────────────────────────────────────\n\nfunction sha256(data: string): string {\n return createHash('sha256').update(data).digest('hex');\n}\n\nfunction hexToUint8(hex: string): Uint8Array {\n const bytes = new Uint8Array(hex.length / 2);\n for (let i = 0; i < hex.length; i += 2) {\n bytes[i / 2] = parseInt(hex.substring(i, i + 2), 16);\n }\n return bytes;\n}\n\nfunction uint8ToHex(bytes: Uint8Array): string {\n return Array.from(bytes)\n .map((b) => b.toString(16).padStart(2, '0'))\n .join('');\n}\n\nfunction b64ToUint8(b64: string): Uint8Array {\n const bin = Buffer.from(b64, 'base64');\n return new Uint8Array(bin.buffer, bin.byteOffset, bin.byteLength);\n}\n\nfunction uint8ToB64(bytes: Uint8Array): string {\n return Buffer.from(bytes).toString('base64');\n}\n\n// ────────────────────────────────────────────────────────────────────────────\n// Presence Engine\n// ────────────────────────────────────────────────────────────────────────────\n\nconst DEFAULT_PRESENCE_TTL_MS = 5_000;\nconst DEFAULT_PRESENCE_DURATION_MS = 30 * 60 * 1000; // 30 minutes\n\n/**\n * Create a challenge for a presence declaration.\n */\nexport function createPresenceChallenge(\n declaration: PresenceDeclaration,\n ttlMs: number = DEFAULT_PRESENCE_TTL_MS,\n): PresenceChallenge {\n const now = Date.now();\n const nonce = randomBytes(32).toString('hex');\n const challengeId = sha256(`${declaration.softid}:${nonce}:${now}`);\n\n return {\n challenge_id: challengeId,\n nonce,\n temporal_anchor: now,\n ttl_ms: ttlMs,\n expires_at: now + ttlMs,\n };\n}\n\n/**\n * Canonical data for presence challenge signing.\n */\nfunction presenceSigningData(\n challenge: PresenceChallenge,\n deviceMeta?: PresenceDeclaration['device_meta'],\n): string {\n return JSON.stringify({\n nonce: challenge.nonce,\n temporal_anchor: challenge.temporal_anchor,\n device_meta: deviceMeta ?? null,\n });\n}\n\n/**\n * Sign a presence challenge with a private key.\n */\nexport function signPresenceChallenge(\n challenge: PresenceChallenge,\n privateKeyHex: string,\n publicKeyHex: string,\n declaration: PresenceDeclaration,\n kid?: string,\n): PresenceProof {\n const data = presenceSigningData(challenge, declaration.device_meta);\n const msgBytes = new TextEncoder().encode(data);\n const secretKey = hexToUint8(privateKeyHex);\n const signature = sign.detached(msgBytes, secretKey);\n\n return {\n challenge_id: challenge.challenge_id,\n signature: uint8ToHex(signature),\n public_key: publicKeyHex,\n kid,\n };\n}\n\n/**\n * Verify a presence proof and issue a receipt.\n */\nexport function verifyPresenceProof(\n challenge: PresenceChallenge,\n proof: PresenceProof,\n declaration: PresenceDeclaration,\n durationMs: number = DEFAULT_PRESENCE_DURATION_MS,\n): PresenceVerifyResult {\n // 1. Challenge expiry\n if (Date.now() > challenge.expires_at) {\n return { valid: false, error: 'Challenge expired', code: 'CHALLENGE_EXPIRED' };\n }\n\n // 2. Challenge ID match\n if (proof.challenge_id !== challenge.challenge_id) {\n return { valid: false, error: 'Challenge ID mismatch', code: 'CHALLENGE_MISMATCH' };\n }\n\n // 3. Verify signature\n const data = presenceSigningData(challenge, declaration.device_meta);\n const msgBytes = new TextEncoder().encode(data);\n const sigBytes = hexToUint8(proof.signature);\n const pubBytes = hexToUint8(proof.public_key);\n\n let isValid: boolean;\n try {\n isValid = sign.detached.verify(msgBytes, sigBytes, pubBytes);\n } catch {\n return { valid: false, error: 'Signature verification failed', code: 'SIG_INVALID' };\n }\n\n if (!isValid) {\n return { valid: false, error: 'Invalid signature', code: 'SIG_INVALID' };\n }\n\n // 4. Build presence receipt\n const now = Date.now();\n const presenceId = sha256(\n `${proof.public_key}:${challenge.nonce}:${challenge.temporal_anchor}`,\n );\n const anchorReflection = sha256(\n `ar:openlogs:loom:${proof.public_key}`,\n );\n\n const receipt: PresenceReceipt = {\n presence_id: presenceId,\n softid: declaration.softid,\n anchor_reflection: anchorReflection,\n scope: {\n device_fingerprint: declaration.device_meta?.fingerprint,\n },\n issued_at: now,\n expires_at: now + durationMs,\n };\n\n return { valid: true, presence: receipt };\n}\n\n/**\n * Check if a presence receipt is currently active.\n */\nexport function getPresenceStatus(receipt: PresenceReceipt): PresenceStatus {\n const now = Date.now();\n if (now > receipt.expires_at) return 'expired';\n return 'active';\n}\n\n/**\n * Renew presence (extend expiry).\n */\nexport function renewPresence(\n receipt: PresenceReceipt,\n extensionMs: number = DEFAULT_PRESENCE_DURATION_MS,\n): PresenceReceipt {\n const now = Date.now();\n return {\n ...receipt,\n renewed_at: now,\n expires_at: now + extensionMs,\n };\n}\n\n// ────────────────────────────────────────────────────────────────────────────\n// Writ Engine\n// ────────────────────────────────────────────────────────────────────────────\n\n/**\n * Create a new Writ (executable intent).\n */\nexport function createWrit(\n body: WritBody,\n meta: Omit<WritMeta, 'prev'>,\n thread: { tid: string; seq: number; prevHash: string },\n privateKeyHex: string,\n kid?: string,\n): Writ {\n const head: WritHead = { tid: thread.tid, seq: thread.seq };\n const writMeta: WritMeta = { ...meta, prev: thread.prevHash };\n\n const unsigned: Omit<Writ, 'sig'> = { head, body, meta: writMeta };\n const canonical = canonicalizeWrit(unsigned);\n const msgBytes = new TextEncoder().encode(canonical);\n const secretKey = hexToUint8(privateKeyHex);\n const signature = sign.detached(msgBytes, secretKey);\n\n const sig: WritSignature = {\n alg: 'ed25519',\n value: uint8ToB64(signature),\n kid,\n };\n\n return { head, body, meta: writMeta, sig };\n}\n\n/**\n * Validate a Writ through all four gates:\n * 1. Temporal: is the writ within its time window?\n * 2. Causal: does the prev hash match the thread state?\n * 3. Legal: does a valid grant allow this operation?\n * 4. Authentic: is the signature valid?\n */\nexport function validateWrit(\n writ: Writ,\n publicKeyHex: string,\n threadState: ThreadState | null,\n grants: Grant[],\n): WritValidationResult {\n const now = Math.floor(Date.now() / 1000);\n\n // Gate 1: Temporal\n if (now < writ.meta.iat) {\n return {\n valid: false,\n error: 'Writ not yet valid (iat in future)',\n code: 'TEMPORAL_NOT_YET',\n gate_failed: 'temporal',\n };\n }\n if (now > writ.meta.exp) {\n return {\n valid: false,\n error: 'Writ expired',\n code: 'TEMPORAL_EXPIRED',\n gate_failed: 'temporal',\n };\n }\n\n // Gate 2: Causal (thread continuity)\n if (threadState) {\n if (writ.head.tid !== threadState.thread_id) {\n return {\n valid: false,\n error: 'Thread ID mismatch',\n code: 'CAUSAL_TID',\n gate_failed: 'causal',\n };\n }\n if (writ.head.seq !== threadState.sequence + 1) {\n return {\n valid: false,\n error: `Expected seq ${threadState.sequence + 1}, got ${writ.head.seq}`,\n code: 'CAUSAL_SEQ',\n gate_failed: 'causal',\n };\n }\n if (writ.meta.prev !== threadState.last_receipt_hash) {\n return {\n valid: false,\n error: 'Previous receipt hash mismatch',\n code: 'CAUSAL_PREV',\n gate_failed: 'causal',\n };\n }\n } else {\n // First writ in thread\n if (writ.head.seq !== 1) {\n return {\n valid: false,\n error: 'First writ in thread must have seq=1',\n code: 'CAUSAL_FIRST_SEQ',\n gate_failed: 'causal',\n };\n }\n if (writ.meta.prev !== '') {\n return {\n valid: false,\n error: 'First writ must have empty prev hash',\n code: 'CAUSAL_FIRST_PREV',\n gate_failed: 'causal',\n };\n }\n }\n\n // Gate 3: Legal (grant matching)\n if (writ.body.law !== 'self') {\n const matchingGrant = grants.find((g) =>\n g.grant_id === writ.body.law &&\n g.subject === writ.body.who &&\n grantCoversAction(g, writ.body.act, writ.body.res, now),\n );\n if (!matchingGrant) {\n return {\n valid: false,\n error: `No valid grant found for law=${writ.body.law}`,\n code: 'LEGAL_NO_GRANT',\n gate_failed: 'legal',\n };\n }\n }\n\n // Gate 4: Authentic (signature verification)\n const unsigned: Omit<Writ, 'sig'> = {\n head: writ.head,\n body: writ.body,\n meta: writ.meta,\n };\n const canonical = canonicalizeWrit(unsigned);\n const msgBytes = new TextEncoder().encode(canonical);\n const sigBytes = b64ToUint8(writ.sig.value);\n const pubBytes = hexToUint8(publicKeyHex);\n\n let sigValid: boolean;\n try {\n sigValid = sign.detached.verify(msgBytes, sigBytes, pubBytes);\n } catch {\n return {\n valid: false,\n error: 'Signature verification failed',\n code: 'AUTH_SIG_FAIL',\n gate_failed: 'authentic',\n };\n }\n\n if (!sigValid) {\n return {\n valid: false,\n error: 'Invalid signature',\n code: 'AUTH_SIG_INVALID',\n gate_failed: 'authentic',\n };\n }\n\n return { valid: true, writ };\n}\n\n// ────────────────────────────────────────────────────────────────────────────\n// Grant Engine\n// ────────────────────────────────────────────────────────────────────────────\n\n/**\n * Check if a grant covers a specific action on a specific resource.\n */\nexport function grantCoversAction(\n grant: Grant,\n action: string,\n resource: string,\n nowUnix: number,\n): boolean {\n // Check temporal validity\n if (nowUnix < grant.meta.iat || nowUnix > grant.meta.exp) {\n return false;\n }\n\n // Check capabilities\n return grant.caps.some((cap) =>\n matchOec(cap.oec, action) && matchScope(cap.scope, resource),\n );\n}\n\n/**\n * Match an Operation Execution Code pattern against an action.\n * Supports wildcards: \"dns.*\" matches \"dns.write\", \"dns.read\", etc.\n */\nfunction matchOec(pattern: string, action: string): boolean {\n if (pattern === '*') return true;\n if (pattern === action) return true;\n\n if (pattern.endsWith('.*')) {\n const prefix = pattern.slice(0, -2);\n return action.startsWith(prefix + '.');\n }\n\n return false;\n}\n\n/**\n * Match a scope pattern against a resource.\n * Supports wildcards: \"zone:*.example.com\" matches \"zone:sub.example.com\"\n */\nfunction matchScope(pattern: string, resource: string): boolean {\n if (pattern === '*') return true;\n if (pattern === resource) return true;\n\n // Simple wildcard matching\n if (pattern.includes('*')) {\n const regex = new RegExp(\n '^' + pattern.replace(/\\./g, '\\\\.').replace(/\\*/g, '[^:]*') + '$',\n );\n return regex.test(resource);\n }\n\n return false;\n}\n\n/**\n * Get grant status based on current time and revocation state.\n */\nexport function getGrantStatus(\n grant: Grant,\n revocations: Revocation[],\n): GrantStatus {\n const now = Math.floor(Date.now() / 1000);\n\n // Check revocation\n const revoked = revocations.find(\n (r) => r.target_type === 'grant' && r.target_id === grant.grant_id,\n );\n if (revoked && revoked.effective_at <= now * 1000) {\n return 'revoked';\n }\n\n // Check expiry\n if (now > grant.meta.exp) return 'expired';\n\n return 'active';\n}\n\n/**\n * Validate a grant's signature.\n */\nexport function validateGrant(\n grant: Grant,\n issuerPublicKeyHex: string,\n): GrantValidationResult {\n const unsigned: Omit<Grant, 'sig'> = {\n grant_id: grant.grant_id,\n issuer: grant.issuer,\n subject: grant.subject,\n grant_type: grant.grant_type,\n caps: grant.caps,\n meta: grant.meta,\n };\n const canonical = canonicalizeGrant(unsigned);\n const msgBytes = new TextEncoder().encode(canonical);\n const sigBytes = b64ToUint8(grant.sig.value);\n const pubBytes = hexToUint8(issuerPublicKeyHex);\n\n let valid: boolean;\n try {\n valid = sign.detached.verify(msgBytes, sigBytes, pubBytes);\n } catch {\n return { valid: false, error: 'Grant signature verification failed', code: 'GRANT_SIG_FAIL' };\n }\n\n if (!valid) {\n return { valid: false, error: 'Invalid grant signature', code: 'GRANT_SIG_INVALID' };\n }\n\n return { valid: true, grant };\n}\n\n/**\n * Create and sign a new Grant.\n */\nexport function createGrant(\n grantId: string,\n issuer: string,\n subject: string,\n grantType: Grant['grant_type'],\n caps: GrantCapability[],\n meta: Grant['meta'],\n privateKeyHex: string,\n kid?: string,\n): Grant {\n const unsigned: Omit<Grant, 'sig'> = {\n grant_id: grantId,\n issuer,\n subject,\n grant_type: grantType,\n caps,\n meta,\n };\n\n const canonical = canonicalizeGrant(unsigned);\n const msgBytes = new TextEncoder().encode(canonical);\n const secretKey = hexToUint8(privateKeyHex);\n const signature = sign.detached(msgBytes, secretKey);\n\n return {\n ...unsigned,\n sig: {\n alg: 'ed25519',\n value: uint8ToB64(signature),\n kid,\n },\n };\n}\n\n// ────────────────────────────────────────────────────────────────────────────\n// Receipt Engine (hash-chained proof of execution)\n// ────────────────────────────────────────────────────────────────────────────\n\n/**\n * Create a hash-chained receipt for a writ execution.\n */\nexport function createReceipt(\n writ: Writ,\n effect: string,\n prevReceipt: LoomReceipt | null,\n metadata?: Record<string, unknown>,\n): LoomReceipt {\n const now = Date.now();\n const sequence = prevReceipt ? prevReceipt.sequence + 1 : 1;\n const prevHash = prevReceipt?.hash ?? null;\n\n // Hash the writ\n const writHash = sha256(canonicalizeWrit({\n head: writ.head,\n body: writ.body,\n meta: writ.meta,\n }));\n\n // Build receipt hash (chain integrity)\n const hashInput = [\n prevHash ?? '',\n writHash,\n writ.head.tid,\n String(sequence),\n effect,\n String(now),\n ].join(':');\n\n const receiptHash = sha256(hashInput);\n const receiptId = sha256(`receipt:${receiptHash}:${now}`);\n\n return {\n receipt_id: receiptId,\n writ_hash: writHash,\n thread_id: writ.head.tid,\n sequence,\n effect,\n hash: receiptHash,\n prev_hash: prevHash,\n executed_at: now,\n metadata,\n };\n}\n\n/**\n * Verify receipt chain integrity.\n */\nexport function verifyReceiptChain(receipts: LoomReceipt[]): {\n valid: boolean;\n brokenAt?: number;\n error?: string;\n} {\n if (receipts.length === 0) return { valid: true };\n\n // Sort by sequence\n const sorted = [...receipts].sort((a, b) => a.sequence - b.sequence);\n\n // First receipt must have null prev_hash\n if (sorted[0].prev_hash !== null) {\n return {\n valid: false,\n brokenAt: 0,\n error: 'First receipt must have null prev_hash',\n };\n }\n\n // Verify chain continuity\n for (let i = 1; i < sorted.length; i++) {\n if (sorted[i].prev_hash !== sorted[i - 1].hash) {\n return {\n valid: false,\n brokenAt: i,\n error: `Receipt ${i} prev_hash does not match receipt ${i - 1} hash`,\n };\n }\n }\n\n return { valid: true };\n}\n\n/**\n * Update thread state after receipt creation.\n */\nexport function updateThreadState(\n receipt: LoomReceipt,\n softid: string,\n): ThreadState {\n return {\n thread_id: receipt.thread_id,\n softid,\n last_receipt_hash: receipt.hash,\n sequence: receipt.sequence,\n updated_at: receipt.executed_at,\n };\n}\n\n// ────────────────────────────────────────────────────────────────────────────\n// Revocation Engine\n// ────────────────────────────────────────────────────────────────────────────\n\n/**\n * Create a revocation record.\n */\nexport function createRevocation(\n targetType: Revocation['target_type'],\n targetId: string,\n issuerSoftid: string,\n privateKeyHex: string,\n reason?: string,\n): Revocation {\n const now = Date.now();\n const revocationId = sha256(`revoke:${targetType}:${targetId}:${now}`);\n\n const payload = JSON.stringify({\n revocation_id: revocationId,\n target_type: targetType,\n target_id: targetId,\n issuer_softid: issuerSoftid,\n effective_at: now,\n reason: reason ?? null,\n });\n\n const msgBytes = new TextEncoder().encode(payload);\n const secretKey = hexToUint8(privateKeyHex);\n const signature = sign.detached(msgBytes, secretKey);\n\n return {\n revocation_id: revocationId,\n target_type: targetType,\n target_id: targetId,\n issuer_softid: issuerSoftid,\n reason,\n effective_at: now,\n sig_value: uint8ToHex(signature),\n };\n}\n\n/**\n * Check if a target has been revoked.\n */\nexport function isRevoked(\n targetType: Revocation['target_type'],\n targetId: string,\n revocations: Revocation[],\n): boolean {\n const now = Date.now();\n return revocations.some(\n (r) =>\n r.target_type === targetType &&\n r.target_id === targetId &&\n r.effective_at <= now,\n );\n}\n\n// ────────────────────────────────────────────────────────────────────────────\n// Full Loom Pipeline\n// ────────────────────────────────────────────────────────────────────────────\n\nexport interface LoomExecutionResult {\n receipt: LoomReceipt;\n threadState: ThreadState;\n writValidation: WritValidationResult;\n}\n\n/**\n * Execute a full Loom pipeline:\n * 1. Validate presence\n * 2. Validate writ (4 gates)\n * 3. Create receipt\n * 4. Update thread state\n */\nexport function executeLoomPipeline(\n writ: Writ,\n publicKeyHex: string,\n presence: PresenceReceipt,\n threadState: ThreadState | null,\n grants: Grant[],\n revocations: Revocation[],\n prevReceipt: LoomReceipt | null,\n): LoomExecutionResult | { valid: false; error: string; code: string } {\n // 1. Check presence\n const presenceStatus = getPresenceStatus(presence);\n if (presenceStatus !== 'active') {\n return { valid: false, error: 'Presence not active', code: 'PRESENCE_INACTIVE' };\n }\n\n // 2. Check presence revocation\n if (isRevoked('presence', presence.presence_id, revocations)) {\n return { valid: false, error: 'Presence revoked', code: 'PRESENCE_REVOKED' };\n }\n\n // 3. Filter out revoked grants\n const activeGrants = grants.filter(\n (g) => getGrantStatus(g, revocations) === 'active',\n );\n\n // 4. Validate writ\n const writResult = validateWrit(writ, publicKeyHex, threadState, activeGrants);\n if (!writResult.valid) {\n return { valid: false, error: writResult.error!, code: writResult.code! };\n }\n\n // 5. Create receipt\n const receipt = createReceipt(writ, 'ALLOW', prevReceipt);\n\n // 6. Update thread state\n const newThreadState = updateThreadState(receipt, writ.body.who);\n\n return {\n receipt,\n threadState: newThreadState,\n writValidation: writResult,\n };\n}\n","/**\n * IDEL Compiler — Intent Description & Execution Language\n *\n * Compiles raw intent proposals into validated, executable structures.\n *\n * Pipeline:\n * 1. Resolve: match raw input to a known intent schema\n * 2. Validate: check all required params and constraints\n * 3. Assess risk: evaluate intent risk level\n * 4. Generate clarifications: if ambiguous or incomplete\n * 5. Output: CompiledIntent ready for AXIS execution\n */\n\nimport type {\n AlternativeIntent,\n ClarificationQuestion,\n CompilationError,\n CompilationResult,\n CompiledIntent,\n IntentConstraint,\n IntentParamSchema,\n IntentProposal,\n IntentRisk,\n IntentSchema,\n RiskLevel,\n} from './idel.types';\n\n// ────────────────────────────────────────────────────────────────────────────\n// Schema Registry\n// ────────────────────────────────────────────────────────────────────────────\n\nexport class IdelSchemaRegistry {\n private schemas = new Map<string, IntentSchema>();\n private aliases = new Map<string, string>();\n\n register(schema: IntentSchema): void {\n this.schemas.set(schema.intent, schema);\n }\n\n registerAlias(alias: string, intent: string): void {\n this.aliases.set(alias.toLowerCase(), intent);\n }\n\n get(intent: string): IntentSchema | undefined {\n return this.schemas.get(intent);\n }\n\n resolve(raw: string): IntentSchema | undefined {\n // Exact match\n const exact = this.schemas.get(raw);\n if (exact) return exact;\n\n // Alias match\n const aliased = this.aliases.get(raw.toLowerCase());\n if (aliased) return this.schemas.get(aliased);\n\n // Prefix match (e.g., \"payment\" → \"payment.create\")\n const candidates = [...this.schemas.keys()].filter(\n (k) => k.startsWith(raw + '.') || k.toLowerCase().includes(raw.toLowerCase()),\n );\n if (candidates.length === 1) {\n return this.schemas.get(candidates[0]);\n }\n\n return undefined;\n }\n\n /**\n * Find all schemas that partially match the raw input.\n * Returns scored candidates for ambiguity resolution.\n */\n findCandidates(raw: string): Array<{ schema: IntentSchema; score: number }> {\n const normalized = raw.toLowerCase().trim();\n const results: Array<{ schema: IntentSchema; score: number }> = [];\n\n for (const [key, schema] of this.schemas) {\n let score = 0;\n\n // Exact match\n if (key === raw) {\n score = 1.0;\n }\n // Case-insensitive exact\n else if (key.toLowerCase() === normalized) {\n score = 0.95;\n }\n // Alias match\n else if (this.aliases.get(normalized) === key) {\n score = 0.9;\n }\n // Prefix match\n else if (key.toLowerCase().startsWith(normalized)) {\n score = 0.7;\n }\n // Contains match\n else if (key.toLowerCase().includes(normalized)) {\n score = 0.5;\n }\n // Tag match\n else if (schema.tags?.some((t) => t.toLowerCase().includes(normalized))) {\n score = 0.4;\n }\n // Description match\n else if (schema.description.toLowerCase().includes(normalized)) {\n score = 0.3;\n }\n\n if (score > 0) {\n results.push({ schema, score });\n }\n }\n\n return results.sort((a, b) => b.score - a.score);\n }\n\n list(): IntentSchema[] {\n return [...this.schemas.values()];\n }\n}\n\n// ────────────────────────────────────────────────────────────────────────────\n// IDEL Compiler\n// ────────────────────────────────────────────────────────────────────────────\n\nexport class IdelCompiler {\n constructor(private readonly registry: IdelSchemaRegistry) {}\n\n /**\n * Compile a raw intent proposal into a validated, executable structure.\n */\n compile(proposal: IntentProposal): CompilationResult {\n const errors: CompilationError[] = [];\n\n // 1. Resolve intent\n const candidates = this.registry.findCandidates(proposal.raw);\n if (candidates.length === 0) {\n return {\n ok: false,\n errors: [{\n code: 'IDEL_UNKNOWN_INTENT',\n message: `No intent found matching '${proposal.raw}'`,\n }],\n };\n }\n\n const best = candidates[0];\n const schema = best.schema;\n\n // 2. Build alternatives\n const alternatives: AlternativeIntent[] = candidates\n .slice(1, 4)\n .filter((c) => c.score >= 0.3)\n .map((c) => ({\n intent: c.schema.intent,\n confidence: c.score,\n reason: c.schema.description,\n }));\n\n // 3. Validate parameters\n const constraints: IntentConstraint[] = [];\n const clarifications: ClarificationQuestion[] = [];\n const params = { ...proposal.params };\n\n for (const paramSchema of schema.params) {\n const value = params[paramSchema.name];\n\n // Required check\n if (paramSchema.required && value === undefined) {\n if (paramSchema.default !== undefined) {\n params[paramSchema.name] = paramSchema.default;\n constraints.push({\n kind: 'required_param',\n field: paramSchema.name,\n description: `Defaulted to ${JSON.stringify(paramSchema.default)}`,\n satisfied: true,\n value: paramSchema.default,\n });\n } else {\n constraints.push({\n kind: 'required_param',\n field: paramSchema.name,\n description: `Required parameter '${paramSchema.name}' is missing`,\n satisfied: false,\n });\n clarifications.push({\n id: `clarify_${paramSchema.name}`,\n question: paramSchema.description ?? `What is the ${paramSchema.name}?`,\n field: paramSchema.name,\n options: paramSchema.enum?.map(String),\n required: true,\n });\n }\n continue;\n }\n\n if (value === undefined) continue;\n\n // Type check\n const typeValid = validateType(value, paramSchema.type);\n constraints.push({\n kind: 'type_check',\n field: paramSchema.name,\n description: `Must be ${paramSchema.type}`,\n satisfied: typeValid,\n value,\n expected: paramSchema.type,\n });\n if (!typeValid) {\n errors.push({\n code: 'IDEL_TYPE_ERROR',\n message: `Parameter '${paramSchema.name}' must be ${paramSchema.type}, got ${typeof value}`,\n field: paramSchema.name,\n });\n }\n\n // Range check\n if (paramSchema.min !== undefined || paramSchema.max !== undefined) {\n const numVal = typeof value === 'number' ? value : Number(value);\n const inRange =\n (paramSchema.min === undefined || numVal >= paramSchema.min) &&\n (paramSchema.max === undefined || numVal <= paramSchema.max);\n constraints.push({\n kind: 'range',\n field: paramSchema.name,\n description: `Must be between ${paramSchema.min ?? '-∞'} and ${paramSchema.max ?? '∞'}`,\n satisfied: inRange,\n value: numVal,\n });\n }\n\n // Pattern check\n if (paramSchema.pattern) {\n const matches = new RegExp(paramSchema.pattern).test(String(value));\n constraints.push({\n kind: 'pattern',\n field: paramSchema.name,\n description: `Must match ${paramSchema.pattern}`,\n satisfied: matches,\n value,\n expected: paramSchema.pattern,\n });\n }\n\n // Enum check\n if (paramSchema.enum) {\n const inEnum = paramSchema.enum.some(\n (e) => JSON.stringify(e) === JSON.stringify(value),\n );\n constraints.push({\n kind: 'custom',\n field: paramSchema.name,\n description: `Must be one of: ${paramSchema.enum.join(', ')}`,\n satisfied: inEnum,\n value,\n expected: paramSchema.enum,\n });\n }\n }\n\n // 4. Assess risk\n const risk = assessRisk(schema, proposal, constraints);\n\n // 5. Compute confidence\n const unsatisfied = constraints.filter((c) => !c.satisfied);\n const needsClarification = clarifications.length > 0;\n let confidence = best.score;\n if (unsatisfied.length > 0) {\n confidence *= 1 - (unsatisfied.length / Math.max(constraints.length, 1)) * 0.5;\n }\n if (errors.length > 0) {\n confidence *= 0.5;\n }\n\n const compiled: CompiledIntent = {\n intent: schema.intent,\n actor_id: proposal.actor_id,\n target: proposal.target,\n params,\n constraints,\n confidence,\n alternatives,\n needs_clarification: needsClarification,\n clarifications,\n expected_outcome: schema.description,\n fallback: schema.related?.[0],\n risk,\n metadata: {\n schema_intent: schema.intent,\n resolved_from: proposal.raw,\n has_side_effects: schema.has_side_effects,\n reversible: schema.reversible,\n },\n };\n\n return {\n ok: errors.length === 0 && !needsClarification,\n compiled,\n errors,\n };\n }\n\n /**\n * Apply clarification answers and re-compile.\n */\n applyClarifications(\n compiled: CompiledIntent,\n answers: Record<string, unknown>,\n ): CompilationResult {\n const proposal: IntentProposal = {\n raw: compiled.intent,\n actor_id: compiled.actor_id,\n target: compiled.target,\n params: { ...compiled.params, ...answers },\n };\n return this.compile(proposal);\n }\n}\n\n// ────────────────────────────────────────────────────────────────────────────\n// Helpers\n// ────────────────────────────────────────────────────────────────────────────\n\nfunction validateType(value: unknown, expectedType: IntentParamSchema['type']): boolean {\n switch (expectedType) {\n case 'string':\n return typeof value === 'string';\n case 'number':\n return typeof value === 'number' && Number.isFinite(value);\n case 'boolean':\n return typeof value === 'boolean';\n case 'object':\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n case 'array':\n return Array.isArray(value);\n default:\n return true;\n }\n}\n\nfunction assessRisk(\n schema: IntentSchema,\n proposal: IntentProposal,\n constraints: IntentConstraint[],\n): IntentRisk {\n const factors: string[] = [];\n let score = 0;\n\n // Base risk from schema\n const baseRiskMap: Record<RiskLevel, number> = {\n none: 0,\n low: 0.1,\n medium: 0.3,\n high: 0.6,\n critical: 0.9,\n };\n score = baseRiskMap[schema.risk_level] ?? 0;\n if (schema.risk_level !== 'none') {\n factors.push(`Base risk: ${schema.risk_level}`);\n }\n\n // Side effects increase risk\n if (schema.has_side_effects) {\n score += 0.1;\n factors.push('Has side effects');\n }\n\n // Irreversible actions increase risk\n if (!schema.reversible) {\n score += 0.1;\n factors.push('Not reversible');\n }\n\n // Failed constraints increase risk\n const failed = constraints.filter((c) => !c.satisfied);\n if (failed.length > 0) {\n score += 0.05 * failed.length;\n factors.push(`${failed.length} unsatisfied constraint(s)`);\n }\n\n // Clamp\n score = Math.min(score, 1.0);\n\n let level: RiskLevel;\n if (score <= 0) level = 'none';\n else if (score <= 0.2) level = 'low';\n else if (score <= 0.5) level = 'medium';\n else if (score <= 0.8) level = 'high';\n else level = 'critical';\n\n return { level, score, factors };\n}\n","/**\n * Needle Engine — The unified execution pipeline\n *\n * Runs the full formula:\n * Intent → Needle enters (AXIS) → Action happens →\n * Observer verifies → Stitch is formed → Thread grows\n *\n * Each phase maps to a concrete operation:\n * created → assembleNeedle()\n * validated → executeLoomPipeline() gates\n * executing → handler runs\n * observed → verifyObservation()\n * stitched → formStitch() + updateThreadState()\n */\n\nimport { createHash, randomBytes } from 'crypto';\nimport {\n createObservation,\n startStage,\n endStage,\n finalizeObservation,\n recordSensor,\n} from '../engine/axis-observation';\nimport type { AxisObservation, ObservationStage } from '../engine/axis-observation';\nimport { scoreTruth } from '../engine/observation/truth-scoring';\nimport type { ExpectedOutcome, TruthVerdict } from '../engine/observation/truth-scoring';\nimport {\n validateWrit,\n createReceipt,\n updateThreadState,\n} from '../loom/loom.engine';\nimport type { LoomReceipt, ThreadState } from '../loom/loom.types';\nimport type { CompiledIntent } from '../idel/idel.types';\nimport type {\n Needle,\n NeedleError,\n NeedleHandler,\n NeedleHandlerContext,\n NeedleHandlerResult,\n NeedlePipelineConfig,\n NeedlePipelineResult,\n Stitch,\n StitchKind,\n NeedlePhase,\n} from './needle.types';\nimport type { Grant, PresenceReceipt, Writ } from '../loom/loom.types';\nimport type { AxisSensor, SensorInput } from '../sensor/axis-sensor';\nimport { normalizeSensorDecision } from '../sensor/axis-sensor';\n\n// ────────────────────────────────────────────────────────────────────────────\n// Needle Assembly\n// ────────────────────────────────────────────────────────────────────────────\n\n/**\n * Assemble a Needle — the execution carrier.\n * This combines intent + presence + writ + grants into a single context.\n */\nexport function assembleNeedle(params: {\n intent: CompiledIntent;\n presence: PresenceReceipt;\n writ: Writ;\n grants: Grant[];\n tps_coordinate?: string;\n}): Needle {\n return {\n needle_id: randomBytes(16).toString('hex'),\n phase: 'created',\n tps_coordinate: params.tps_coordinate,\n intent: params.intent,\n presence: params.presence,\n writ: params.writ,\n grants: params.grants,\n created_at: Date.now(),\n };\n}\n\n// ────────────────────────────────────────────────────────────────────────────\n// Stitch Formation\n// ────────────────────────────────────────────────────────────────────────────\n\n/**\n * Determine stitch kind from observation and verdict.\n */\nfunction classifyStitch(\n observation: AxisObservation,\n verdict: TruthVerdict,\n): StitchKind {\n // Failed or disputed → torn\n if (verdict.status === 'failed' || verdict.status === 'disputed') {\n return 'torn';\n }\n\n // DENY or no visible effect → silent stitch\n if (observation.decision === 'DENY') {\n return 'silent';\n }\n\n // Confirmed or partial deed → deed\n if (verdict.isDeed) {\n return 'deed';\n }\n\n // Uncertain but not failed → silent\n return 'silent';\n}\n\n/**\n * Form a Stitch from a completed Needle.\n * A Stitch = Needle (execution) + Observer (verification)\n */\nexport function formStitch(\n needle: Needle,\n observation: AxisObservation,\n verdict: TruthVerdict,\n receipt: LoomReceipt,\n): Stitch {\n return {\n stitch_id: needle.needle_id,\n kind: classifyStitch(observation, verdict),\n intent: needle.intent.intent,\n actor_id: needle.intent.actor_id,\n tps_coordinate: needle.tps_coordinate,\n observation,\n verdict,\n receipt,\n thread_id: receipt.thread_id,\n sequence: receipt.sequence,\n stitched_at: Date.now(),\n };\n}\n\n// ────────────────────────────────────────────────────────────────────────────\n// Needle Pipeline\n// ────────────────────────────────────────────────────────────────────────────\n\n/**\n * Run the full Needle pipeline:\n *\n * 1. Validate (Loom gates: temporal, causal, legal, authentic)\n * 2. Execute (handler runs the action)\n * 3. Observe (create observation + score truth)\n * 4. Stitch (form stitch, create receipt, grow thread)\n */\nexport async function runNeedlePipeline(\n needle: Needle,\n config: NeedlePipelineConfig,\n threadState: ThreadState | null,\n prevReceipt: LoomReceipt | null,\n expectedOutcome?: ExpectedOutcome,\n): Promise<NeedlePipelineResult> {\n const obs = createObservation('http');\n obs.intent = needle.intent.intent;\n obs.actorId = needle.intent.actor_id;\n\n // ── Phase 1: Validate (Loom gates) ──\n needle.phase = 'validated';\n let stage: ObservationStage = startStage(obs, 'loom.validate');\n\n const validation = validateWrit(\n needle.writ,\n config.public_key,\n threadState,\n needle.grants,\n );\n\n if (!validation.valid) {\n endStage(stage, 'fail', validation.error);\n return failNeedle(needle, obs, 'validated', 'LOOM_VALIDATION_FAILED', validation.error ?? 'Writ validation failed');\n }\n\n endStage(stage, 'ok');\n\n // ── Phase 1.5: Sensors (reality gates) ──\n if (config.sensors && config.sensors.length > 0) {\n stage = startStage(obs, 'sensors.evaluate');\n\n const sensorInput: SensorInput = {\n intent: needle.intent.intent,\n actorId: needle.intent.actor_id,\n metadata: {\n observation: obs,\n needle_id: needle.needle_id,\n tps_coordinate: needle.tps_coordinate,\n writ: needle.writ,\n grants: needle.grants,\n params: needle.intent.params,\n },\n };\n\n for (const sensor of config.sensors) {\n if (sensor.supports && !sensor.supports(sensorInput)) continue;\n\n const t0 = Date.now();\n let decision;\n try {\n const rawDecision = await sensor.run(sensorInput);\n decision = normalizeSensorDecision(rawDecision);\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n recordSensor(obs, sensor.name, false, 100, Date.now() - t0, [`sensor_error:${msg}`]);\n endStage(stage, 'fail', `Sensor ${sensor.name} threw: ${msg}`);\n return failNeedle(needle, obs, 'validated', 'SENSOR_ERROR', `Sensor ${sensor.name} failed: ${msg}`);\n }\n\n recordSensor(obs, sensor.name, decision.allow, decision.riskScore, Date.now() - t0, decision.reasons);\n\n if (!decision.allow) {\n endStage(stage, 'fail', `Sensor ${sensor.name} denied`);\n return failNeedle(needle, obs, 'validated', 'SENSOR_DENY', decision.reasons[0] ?? `Denied by ${sensor.name}`);\n }\n }\n\n endStage(stage, 'ok');\n }\n\n // ── Phase 2: Execute (handler) ──\n needle.phase = 'executing';\n stage = startStage(obs, 'handler.execute');\n\n const handler = config.handlers.get(needle.intent.intent);\n if (!handler) {\n endStage(stage, 'fail', `No handler for intent '${needle.intent.intent}'`);\n return failNeedle(needle, obs, 'executing', 'NO_HANDLER', `No handler registered for intent '${needle.intent.intent}'`);\n }\n\n const handlerCtx: NeedleHandlerContext = {\n needle_id: needle.needle_id,\n actor_id: needle.intent.actor_id,\n presence_id: needle.presence.presence_id,\n writ: needle.writ,\n grants: needle.grants,\n tps_coordinate: needle.tps_coordinate,\n };\n\n let handlerResult: NeedleHandlerResult;\n try {\n handlerResult = await handler(needle.intent, handlerCtx);\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n endStage(stage, 'fail', msg);\n return failNeedle(needle, obs, 'executing', 'HANDLER_ERROR', msg);\n }\n\n if (!handlerResult.ok) {\n endStage(stage, 'fail', handlerResult.effect);\n obs.decision = 'DENY';\n obs.resultCode = handlerResult.effect;\n obs.statusCode = handlerResult.status_code ?? 400;\n } else {\n endStage(stage, 'ok');\n obs.decision = 'ALLOW';\n obs.resultCode = handlerResult.effect;\n obs.statusCode = handlerResult.status_code ?? 200;\n }\n\n if (handlerResult.data) {\n obs.facts = { ...obs.facts, ...handlerResult.data };\n }\n\n // ── Phase 3: Observe ──\n needle.phase = 'observed';\n finalizeObservation(obs, obs.decision ?? 'DENY', obs.statusCode ?? 500, obs.resultCode);\n needle.observation = obs;\n\n const verdict = scoreTruth(obs, expectedOutcome);\n needle.verdict = verdict;\n\n // ── Phase 4: Stitch ──\n needle.phase = 'stitched';\n stage = startStage(obs, 'stitch.form');\n\n const receipt = createReceipt(\n needle.writ,\n obs.decision ?? 'DENY',\n prevReceipt,\n );\n needle.receipt = receipt;\n\n const newThreadState = updateThreadState(\n receipt,\n needle.intent.actor_id,\n );\n\n const stitch = formStitch(needle, obs, verdict, receipt);\n needle.completed_at = Date.now();\n\n endStage(stage, 'ok');\n\n return {\n ok: handlerResult.ok,\n needle,\n stitch,\n thread_state: newThreadState,\n };\n}\n\n// ────────────────────────────────────────────────────────────────────────────\n// Helpers\n// ────────────────────────────────────────────────────────────────────────────\n\nfunction failNeedle(\n needle: Needle,\n obs: AxisObservation,\n phase: NeedlePhase,\n code: string,\n message: string,\n): NeedlePipelineResult {\n needle.phase = 'failed';\n needle.error = { phase, code, message };\n needle.completed_at = Date.now();\n\n obs.decision = obs.decision ?? 'DENY';\n obs.statusCode = obs.statusCode ?? 500;\n finalizeObservation(obs, obs.decision, obs.statusCode, obs.resultCode);\n needle.observation = obs;\n\n const verdict = scoreTruth(obs);\n needle.verdict = verdict;\n\n return {\n ok: false,\n needle,\n };\n}\n","/**\n * Knot Engine — Critical binding points in the Thread\n *\n * Operations:\n * openKnot() → start a knot (begin grouping stitches)\n * addStitch() → add a stitch to an open knot\n * validateKnot() → check if all stitches are valid and complete\n * tieKnot() → seal the knot (immutable from here)\n * breakKnot() → break a knot (requires authority for law/irreversible)\n * forkFromKnot() → create a new branch from a decision knot\n */\n\nimport { createHash, randomBytes } from 'crypto';\nimport type {\n Knot,\n KnotBreakRequest,\n KnotError,\n KnotStatus,\n KnotType,\n KnotValidationResult,\n} from './knot.types';\nimport type { Stitch } from './needle.types';\n\n// ────────────────────────────────────────────────────────────────────────────\n// Open a Knot\n// ────────────────────────────────────────────────────────────────────────────\n\nexport interface OpenKnotParams {\n type: KnotType;\n thread_id: string;\n actor_id: string;\n tps_anchor?: string;\n capsule_id?: string;\n law_ref?: string;\n required_count?: number;\n all_or_nothing?: boolean;\n}\n\n/**\n * Open a new knot — begin grouping stitches into a critical binding point.\n */\nexport function openKnot(params: OpenKnotParams): Knot {\n const isIrreversible = params.type === 'irreversible';\n\n return {\n knot_id: `knot_${randomBytes(16).toString('hex')}`,\n type: params.type,\n status: 'open',\n stitch_ids: [],\n thread_id: params.thread_id,\n tps_anchor: params.tps_anchor,\n irreversible: isIrreversible,\n capsule_id: params.capsule_id,\n law_ref: params.law_ref,\n branch_ids: [],\n required_count: params.required_count,\n all_or_nothing: params.all_or_nothing ?? (params.type === 'authority' || isIrreversible),\n actor_id: params.actor_id,\n created_at: Date.now(),\n };\n}\n\n// ────────────────────────────────────────────────────────────────────────────\n// Add Stitch to Knot\n// ────────────────────────────────────────────────────────────────────────────\n\n/**\n * Add a stitch to an open knot.\n * Returns an error string if the stitch cannot be added.\n */\nexport function addStitchToKnot(\n knot: Knot,\n stitch: Stitch,\n): string | null {\n if (knot.status !== 'open') {\n return `Knot ${knot.knot_id} is ${knot.status}, cannot add stitches`;\n }\n\n if (stitch.thread_id !== knot.thread_id) {\n return `Stitch thread ${stitch.thread_id} does not match knot thread ${knot.thread_id}`;\n }\n\n if (knot.stitch_ids.includes(stitch.stitch_id)) {\n return `Stitch ${stitch.stitch_id} already in knot`;\n }\n\n // Authority knots: verify capsule matches\n if (knot.type === 'authority' && knot.capsule_id) {\n if (stitch.observation.capsuleId && stitch.observation.capsuleId !== knot.capsule_id) {\n return `Stitch capsule ${stitch.observation.capsuleId} does not match knot capsule ${knot.capsule_id}`;\n }\n }\n\n knot.stitch_ids.push(stitch.stitch_id);\n return null;\n}\n\n// ────────────────────────────────────────────────────────────────────────────\n// Validate Knot\n// ────────────────────────────────────────────────────────────────────────────\n\n/**\n * Validate a knot — check if all stitches are valid and the knot can be tied.\n */\nexport function validateKnot(\n knot: Knot,\n stitches: Stitch[],\n): KnotValidationResult {\n const errors: KnotError[] = [];\n const passedIds: string[] = [];\n const failedIds: string[] = [];\n\n // Rule 2: Knot must be fully witnessed — all stitches must exist\n const stitchMap = new Map(stitches.map((s) => [s.stitch_id, s]));\n\n for (const sid of knot.stitch_ids) {\n const stitch = stitchMap.get(sid);\n if (!stitch) {\n failedIds.push(sid);\n errors.push({\n code: 'KNOT_MISSING_STITCH',\n message: `Stitch ${sid} not found`,\n stitch_id: sid,\n });\n continue;\n }\n\n // Torn stitches fail validation\n if (stitch.kind === 'torn') {\n failedIds.push(sid);\n errors.push({\n code: 'KNOT_TORN_STITCH',\n message: `Stitch ${sid} is torn (failed/disputed)`,\n stitch_id: sid,\n });\n continue;\n }\n\n // Rule 3: Irreversible knots require deed-level stitches (not silent)\n if (knot.type === 'irreversible' && stitch.kind !== 'deed') {\n failedIds.push(sid);\n errors.push({\n code: 'KNOT_REQUIRES_DEED',\n message: `Irreversible knot requires deed stitch, got '${stitch.kind}'`,\n stitch_id: sid,\n });\n continue;\n }\n\n passedIds.push(sid);\n }\n\n // Check minimum required count\n if (knot.required_count !== undefined && knot.stitch_ids.length < knot.required_count) {\n errors.push({\n code: 'KNOT_INSUFFICIENT_STITCHES',\n message: `Knot requires ${knot.required_count} stitches, has ${knot.stitch_ids.length}`,\n });\n }\n\n // all_or_nothing: if any failed, knot cannot be tied\n const allPassed = failedIds.length === 0;\n const canTie = knot.all_or_nothing\n ? allPassed && (knot.required_count === undefined || knot.stitch_ids.length >= knot.required_count)\n : passedIds.length > 0 && (knot.required_count === undefined || passedIds.length >= knot.required_count);\n\n return {\n valid: allPassed && errors.length === 0,\n passed_stitch_ids: passedIds,\n failed_stitch_ids: failedIds,\n can_tie: canTie,\n errors,\n };\n}\n\n// ────────────────────────────────────────────────────────────────────────────\n// Tie Knot (seal it)\n// ────────────────────────────────────────────────────────────────────────────\n\n/**\n * Tie (seal) a knot — makes it immutable.\n * Computes a witness hash over all stitch receipt hashes.\n */\nexport function tieKnot(\n knot: Knot,\n stitches: Stitch[],\n): KnotValidationResult & { knot: Knot } {\n const validation = validateKnot(knot, stitches);\n\n if (!validation.can_tie) {\n return { ...validation, knot };\n }\n\n // Compute witness hash: H(stitch_receipt_hash_1 : stitch_receipt_hash_2 : ...)\n const receiptHashes = validation.passed_stitch_ids\n .map((sid) => stitches.find((s) => s.stitch_id === sid)!)\n .sort((a, b) => a.sequence - b.sequence)\n .map((s) => s.receipt.hash);\n\n const witnessPayload = receiptHashes.join(':');\n knot.witness_hash = createHash('sha256')\n .update(witnessPayload)\n .digest('hex');\n\n knot.status = 'tied';\n knot.tied_at = Date.now();\n\n return { ...validation, knot };\n}\n\n// ────────────────────────────────────────────────────────────────────────────\n// Break Knot\n// ────────────────────────────────────────────────────────────────────────────\n\n/**\n * Break a knot — requires authority for law/irreversible knots.\n *\n * Rule 1: Knot cannot be silently broken — must have reason + actor.\n * Rule 3: Irreversible knots require override_grant_id.\n */\nexport function breakKnot(\n knot: Knot,\n request: KnotBreakRequest,\n): { ok: boolean; error?: string } {\n if (knot.status === 'broken') {\n return { ok: false, error: 'Knot is already broken' };\n }\n\n if (knot.status === 'open') {\n // Open knots can be broken by the creator\n knot.status = 'broken';\n knot.broken_at = Date.now();\n knot.break_reason = request.reason;\n return { ok: true };\n }\n\n // Tied knots require stronger authority\n if (knot.status === 'tied') {\n // Rule 1: Must have a reason\n if (!request.reason) {\n return { ok: false, error: 'Breaking a tied knot requires a reason' };\n }\n\n // Rule 3: Irreversible + law knots need override authority\n if ((knot.irreversible || knot.type === 'law') && !request.override_grant_id) {\n return {\n ok: false,\n error: `Breaking ${knot.type} knot requires override_grant_id from higher authority`,\n };\n }\n\n knot.status = 'broken';\n knot.broken_at = Date.now();\n knot.break_reason = request.reason;\n return { ok: true };\n }\n\n return { ok: false, error: `Cannot break knot in status '${knot.status}'` };\n}\n\n// ────────────────────────────────────────────────────────────────────────────\n// Fork from Knot\n// ────────────────────────────────────────────────────────────────────────────\n\n/**\n * Mark a knot as a decision/fork point and register a new branch.\n *\n * Rule 4: Forking from knot creates new branch.\n */\nexport function forkFromKnot(\n knot: Knot,\n branchId: string,\n decisionStitchId?: string,\n): { ok: boolean; error?: string } {\n if (knot.status !== 'tied' && knot.status !== 'open') {\n return { ok: false, error: `Cannot fork from knot in status '${knot.status}'` };\n }\n\n if (decisionStitchId) {\n if (!knot.stitch_ids.includes(decisionStitchId)) {\n return { ok: false, error: `Decision stitch ${decisionStitchId} is not part of this knot` };\n }\n knot.decision_stitch_id = decisionStitchId;\n }\n\n knot.branch_ids.push(branchId);\n knot.status = 'forked';\n return { ok: true };\n}\n\n// ────────────────────────────────────────────────────────────────────────────\n// Query Helpers\n// ────────────────────────────────────────────────────────────────────────────\n\n/** Check if a knot is still open and accepting stitches */\nexport function isKnotOpen(knot: Knot): boolean {\n return knot.status === 'open';\n}\n\n/** Check if a knot represents a point of no return */\nexport function isPointOfNoReturn(knot: Knot): boolean {\n return knot.irreversible && knot.status === 'tied';\n}\n\n/** Check if a stitch is part of any knot in a set */\nexport function findKnotsForStitch(\n stitchId: string,\n knots: Knot[],\n): Knot[] {\n return knots.filter((k) => k.stitch_ids.includes(stitchId));\n}\n\n/** Get all irreversible knots in a thread */\nexport function getIrreversibleKnots(knots: Knot[]): Knot[] {\n return knots.filter((k) => k.irreversible && k.status === 'tied');\n}\n\n/** Get decision points (fork knots) in a thread */\nexport function getDecisionPoints(knots: Knot[]): Knot[] {\n return knots.filter((k) => k.type === 'decision' || k.status === 'forked');\n}\n","/**\n * Fabric Engine — State projection from stitches\n *\n * Weaves stitches into a unified state (Fabric).\n *\n * Operations:\n * createFabric() → empty fabric\n * applyStitch() → apply one stitch's effect to the fabric\n * weave() → project fabric from a sequence of stitches\n * projectAt() → compute fabric state at a specific TPS coordinate\n * queryFabric() → search fabric cells\n * diffFabrics() → compare two fabric states\n * lockCells() → mark cells as locked by an irreversible knot\n */\n\nimport { createHash, randomBytes } from 'crypto';\nimport type {\n Fabric,\n FabricCell,\n FabricDiff,\n FabricDiffEntry,\n FabricEffect,\n FabricEffectResolver,\n FabricQuery,\n} from './fabric.types';\nimport type { Knot } from './knot.types';\nimport type { Stitch } from './needle.types';\n\n// ────────────────────────────────────────────────────────────────────────────\n// Create\n// ────────────────────────────────────────────────────────────────────────────\n\n/** Create an empty Fabric. */\nexport function createFabric(): Fabric {\n return {\n fabric_id: `fab_${randomBytes(16).toString('hex')}`,\n state_hash: hashState(new Map()),\n cells: new Map(),\n thread_ids: [],\n stitch_count: 0,\n knot_count: 0,\n computed_at: Date.now(),\n version: 0,\n };\n}\n\n// ────────────────────────────────────────────────────────────────────────────\n// Apply single stitch\n// ────────────────────────────────────────────────────────────────────────────\n\n/**\n * Apply a single stitch's effect to the fabric.\n * Mutates the fabric in place and increments version.\n */\nexport function applyStitch(\n fabric: Fabric,\n stitch: Stitch,\n effect: FabricEffect,\n): void {\n // Apply mutations\n for (const [key, value] of Object.entries(effect.mutations)) {\n if (value === null) {\n // Delete\n fabric.cells.delete(key);\n } else {\n const existing = fabric.cells.get(key);\n\n // Cannot write to locked cells\n if (existing?.locked) {\n continue;\n }\n\n fabric.cells.set(key, {\n key,\n value,\n last_stitch_id: stitch.stitch_id,\n last_tps: stitch.tps_coordinate,\n write_count: (existing?.write_count ?? 0) + 1,\n locked: false,\n });\n }\n }\n\n // Track thread\n if (!fabric.thread_ids.includes(stitch.thread_id)) {\n fabric.thread_ids.push(stitch.thread_id);\n }\n\n fabric.stitch_count++;\n fabric.version++;\n fabric.projected_at_tps = stitch.tps_coordinate ?? fabric.projected_at_tps;\n fabric.computed_at = Date.now();\n fabric.state_hash = hashState(fabric.cells);\n}\n\n// ────────────────────────────────────────────────────────────────────────────\n// Weave (batch projection)\n// ────────────────────────────────────────────────────────────────────────────\n\n/**\n * Weave a sequence of stitches into a fabric.\n * Stitches must be in chronological order (by sequence).\n * The resolver extracts the FabricEffect from each stitch.\n */\nexport function weave(\n stitches: Stitch[],\n resolver: FabricEffectResolver,\n knots?: Knot[],\n): Fabric {\n const fabric = createFabric();\n\n // Sort by sequence to ensure deterministic ordering\n const sorted = [...stitches].sort((a, b) => a.sequence - b.sequence);\n\n for (const stitch of sorted) {\n // Skip torn stitches — they don't affect reality\n if (stitch.kind === 'torn') continue;\n\n const effect = resolver(stitch);\n applyStitch(fabric, stitch, effect);\n }\n\n // Apply knot locks\n if (knots) {\n for (const knot of knots) {\n if (knot.irreversible && knot.status === 'tied') {\n lockCellsByKnot(fabric, knot, stitches, resolver);\n fabric.knot_count++;\n }\n }\n }\n\n return fabric;\n}\n\n/**\n * Project fabric state at a specific TPS coordinate.\n * Only applies stitches up to (and including) the given TPS.\n */\nexport function projectAt(\n stitches: Stitch[],\n resolver: FabricEffectResolver,\n tpsFilter: (tps: string | undefined) => boolean,\n knots?: Knot[],\n): Fabric {\n const filtered = stitches.filter((s) => tpsFilter(s.tps_coordinate));\n return weave(filtered, resolver, knots);\n}\n\n// ────────────────────────────────────────────────────────────────────────────\n// Lock cells (irreversible knots)\n// ────────────────────────────────────────────────────────────────────────────\n\n/**\n * Lock all cells touched by stitches in an irreversible knot.\n * Locked cells cannot be overwritten by future stitches.\n */\nfunction lockCellsByKnot(\n fabric: Fabric,\n knot: Knot,\n stitches: Stitch[],\n resolver: FabricEffectResolver,\n): void {\n const knotStitchIds = new Set(knot.stitch_ids);\n const knotStitches = stitches.filter((s) => knotStitchIds.has(s.stitch_id));\n\n for (const stitch of knotStitches) {\n const effect = resolver(stitch);\n for (const key of Object.keys(effect.mutations)) {\n const cell = fabric.cells.get(key);\n if (cell) {\n cell.locked = true;\n cell.locked_by_knot = knot.knot_id;\n }\n }\n }\n}\n\n/** Manually lock specific cells by an irreversible knot. */\nexport function lockCells(\n fabric: Fabric,\n keys: string[],\n knotId: string,\n): void {\n for (const key of keys) {\n const cell = fabric.cells.get(key);\n if (cell) {\n cell.locked = true;\n cell.locked_by_knot = knotId;\n }\n }\n}\n\n// ────────────────────────────────────────────────────────────────────────────\n// Query\n// ────────────────────────────────────────────────────────────────────────────\n\n/** Query the fabric for cells matching criteria. */\nexport function queryFabric(\n fabric: Fabric,\n query: FabricQuery,\n): FabricCell[] {\n let results = [...fabric.cells.values()];\n\n if (query.keys) {\n const keySet = new Set(query.keys);\n results = results.filter((c) => keySet.has(c.key));\n }\n\n if (query.prefix) {\n const prefix = query.prefix;\n results = results.filter((c) => c.key.startsWith(prefix));\n }\n\n if (query.locked_only) {\n results = results.filter((c) => c.locked);\n }\n\n return results;\n}\n\n/** Get a single cell value. */\nexport function getFabricValue(\n fabric: Fabric,\n key: string,\n): unknown | undefined {\n return fabric.cells.get(key)?.value;\n}\n\n// ────────────────────────────────────────────────────────────────────────────\n// Diff\n// ────────────────────────────────────────────────────────────────────────────\n\n/** Compute the diff between two fabric states. */\nexport function diffFabrics(a: Fabric, b: Fabric): FabricDiff {\n const entries: FabricDiffEntry[] = [];\n let added = 0;\n let modified = 0;\n let deleted = 0;\n\n // Check all keys in B\n for (const [key, cellB] of b.cells) {\n const cellA = a.cells.get(key);\n if (!cellA) {\n entries.push({\n key,\n kind: 'added',\n after: cellB.value,\n caused_by_stitch: cellB.last_stitch_id,\n });\n added++;\n } else if (JSON.stringify(cellA.value) !== JSON.stringify(cellB.value)) {\n entries.push({\n key,\n kind: 'modified',\n before: cellA.value,\n after: cellB.value,\n caused_by_stitch: cellB.last_stitch_id,\n });\n modified++;\n }\n }\n\n // Check keys in A but not in B (deleted)\n for (const [key, cellA] of a.cells) {\n if (!b.cells.has(key)) {\n entries.push({\n key,\n kind: 'deleted',\n before: cellA.value,\n });\n deleted++;\n }\n }\n\n return {\n from_fabric_id: a.fabric_id,\n to_fabric_id: b.fabric_id,\n entries,\n added_count: added,\n modified_count: modified,\n deleted_count: deleted,\n };\n}\n\n// ────────────────────────────────────────────────────────────────────────────\n// Hash\n// ────────────────────────────────────────────────────────────────────────────\n\nfunction hashState(cells: Map<string, FabricCell>): string {\n const keys = [...cells.keys()].sort();\n const payload = keys\n .map((k) => `${k}=${JSON.stringify(cells.get(k)!.value)}`)\n .join('\\n');\n return createHash('sha256').update(payload).digest('hex');\n}\n","/**\n * Pattern Engine — Detect, record, and predict from recurring structures\n *\n * Operations:\n * InMemoryPatternStore → simple pattern storage\n * detectSequencePattern() → find recurring intent sequences in stitches\n * detectKnotPattern() → find recurring knot formations\n * matchPatterns() → check stitches against known patterns\n * recordOccurrence() → update a pattern when it's seen again\n */\n\nimport { randomBytes } from 'crypto';\nimport type {\n Pattern,\n PatternKind,\n PatternMatch,\n PatternSignature,\n PatternStore,\n} from './pattern.types';\nimport type { Knot } from './knot.types';\nimport type { Stitch } from './needle.types';\n\n// ────────────────────────────────────────────────────────────────────────────\n// In-Memory Pattern Store\n// ────────────────────────────────────────────────────────────────────────────\n\nexport class InMemoryPatternStore implements PatternStore {\n private patterns = new Map<string, Pattern>();\n\n save(pattern: Pattern): void {\n this.patterns.set(pattern.pattern_id, pattern);\n }\n\n get(patternId: string): Pattern | undefined {\n return this.patterns.get(patternId);\n }\n\n findByKind(kind: PatternKind): Pattern[] {\n return [...this.patterns.values()].filter((p) => p.kind === kind);\n }\n\n findByIntent(intent: string): Pattern[] {\n return [...this.patterns.values()].filter(\n (p) => p.signature.intent_sequence?.includes(intent),\n );\n }\n\n all(): Pattern[] {\n return [...this.patterns.values()];\n }\n}\n\n// ────────────────────────────────────────────────────────────────────────────\n// Sequence Pattern Detection\n// ────────────────────────────────────────────────────────────────────────────\n\n/**\n * Detect recurring intent sequences within a set of stitches.\n * Uses a sliding window to find sequences that appear at least `minOccurrences` times.\n */\nexport function detectSequencePatterns(\n stitches: Stitch[],\n windowSize: number,\n minOccurrences: number,\n): Pattern[] {\n if (stitches.length < windowSize || windowSize < 2) return [];\n\n const sorted = [...stitches].sort((a, b) => a.sequence - b.sequence);\n const sequenceCounts = new Map<string, { count: number; stitch_ids: string[][] }>();\n\n // Slide window across stitches\n for (let i = 0; i <= sorted.length - windowSize; i++) {\n const window = sorted.slice(i, i + windowSize);\n const key = window.map((s) => s.intent).join('→');\n const ids = window.map((s) => s.stitch_id);\n\n const existing = sequenceCounts.get(key);\n if (existing) {\n existing.count++;\n existing.stitch_ids.push(ids);\n } else {\n sequenceCounts.set(key, { count: 1, stitch_ids: [ids] });\n }\n }\n\n // Filter by minimum occurrences\n const patterns: Pattern[] = [];\n const now = Date.now();\n\n for (const [key, data] of sequenceCounts) {\n if (data.count < minOccurrences) continue;\n\n const intents = key.split('→');\n const confidence = Math.min(data.count / (minOccurrences * 2), 1.0);\n\n patterns.push({\n pattern_id: `pat_seq_${randomBytes(8).toString('hex')}`,\n kind: 'sequence',\n name: `Sequence: ${intents.join(' → ')}`,\n signature: {\n intent_sequence: intents,\n min_length: windowSize,\n max_length: windowSize,\n },\n confidence,\n occurrence_count: data.count,\n first_seen_at: now,\n last_seen_at: now,\n seen_in_threads: [...new Set(\n data.stitch_ids.flatMap((ids) =>\n ids.map((id) => sorted.find((s) => s.stitch_id === id)?.thread_id).filter(Boolean) as string[],\n ),\n )],\n classification: 'unclassified',\n });\n }\n\n return patterns;\n}\n\n// ────────────────────────────────────────────────────────────────────────────\n// Knot Pattern Detection\n// ────────────────────────────────────────────────────────────────────────────\n\n/**\n * Detect recurring knot formations (same type + similar size).\n */\nexport function detectKnotPatterns(\n knots: Knot[],\n minOccurrences: number,\n): Pattern[] {\n const groups = new Map<string, Knot[]>();\n\n for (const knot of knots) {\n if (knot.status !== 'tied') continue;\n const key = `${knot.type}:${knot.stitch_ids.length}`;\n const group = groups.get(key) ?? [];\n group.push(knot);\n groups.set(key, group);\n }\n\n const patterns: Pattern[] = [];\n const now = Date.now();\n\n for (const [key, group] of groups) {\n if (group.length < minOccurrences) continue;\n\n const [type, sizeStr] = key.split(':');\n const size = parseInt(sizeStr, 10);\n const confidence = Math.min(group.length / (minOccurrences * 2), 1.0);\n\n patterns.push({\n pattern_id: `pat_knot_${randomBytes(8).toString('hex')}`,\n kind: 'knot',\n name: `Knot: ${type} (${size} stitches)`,\n signature: {\n knot_type: type as Pattern['signature']['knot_type'],\n knot_size: size,\n },\n confidence,\n occurrence_count: group.length,\n first_seen_at: now,\n last_seen_at: now,\n seen_in_threads: [...new Set(group.map((k) => k.thread_id))],\n classification: 'unclassified',\n });\n }\n\n return patterns;\n}\n\n// ────────────────────────────────────────────────────────────────────────────\n// Pattern Matching\n// ────────────────────────────────────────────────────────────────────────────\n\n/**\n * Match a set of stitches against known patterns.\n * Returns all matches with their scores.\n */\nexport function matchPatterns(\n stitches: Stitch[],\n patterns: Pattern[],\n): PatternMatch[] {\n const sorted = [...stitches].sort((a, b) => a.sequence - b.sequence);\n const matches: PatternMatch[] = [];\n const now = Date.now();\n\n for (const pattern of patterns) {\n if (pattern.kind === 'sequence' && pattern.signature.intent_sequence) {\n const seq = pattern.signature.intent_sequence;\n const seqLen = seq.length;\n\n // Slide window\n for (let i = 0; i <= sorted.length - seqLen; i++) {\n const window = sorted.slice(i, i + seqLen);\n const windowIntents = window.map((s) => s.intent);\n\n if (windowIntents.every((intent, idx) => intent === seq[idx])) {\n matches.push({\n pattern_id: pattern.pattern_id,\n matched_stitch_ids: window.map((s) => s.stitch_id),\n match_score: 1.0,\n thread_id: window[0].thread_id,\n detected_at: now,\n });\n }\n }\n }\n }\n\n return matches;\n}\n\n// ────────────────────────────────────────────────────────────────────────────\n// Record Occurrence\n// ────────────────────────────────────────────────────────────────────────────\n\n/**\n * Record that a pattern was observed again.\n * Updates occurrence count, last_seen_at, confidence, and thread tracking.\n */\nexport function recordOccurrence(\n pattern: Pattern,\n threadId: string,\n): void {\n pattern.occurrence_count++;\n pattern.last_seen_at = Date.now();\n\n // Confidence grows with occurrences (asymptotic to 1.0)\n pattern.confidence = 1 - 1 / (1 + pattern.occurrence_count * 0.5);\n\n if (!pattern.seen_in_threads.includes(threadId)) {\n pattern.seen_in_threads.push(threadId);\n }\n}\n\n// ────────────────────────────────────────────────────────────────────────────\n// Anomaly Detection\n// ────────────────────────────────────────────────────────────────────────────\n\n/**\n * Check if recent stitches deviate from established patterns.\n * Returns anomaly patterns for sequences that should match but don't.\n */\nexport function detectAnomalies(\n recentStitches: Stitch[],\n knownPatterns: Pattern[],\n threshold: number = 0.7,\n): Pattern[] {\n const anomalies: Pattern[] = [];\n const sorted = [...recentStitches].sort((a, b) => a.sequence - b.sequence);\n const now = Date.now();\n\n for (const pattern of knownPatterns) {\n if (pattern.kind !== 'sequence' || !pattern.signature.intent_sequence) continue;\n if (pattern.confidence < threshold) continue;\n\n const seq = pattern.signature.intent_sequence;\n // Check if the sequence started but didn't complete\n if (sorted.length >= 1 && sorted.length < seq.length) {\n const partialMatch = sorted.every(\n (s, i) => i < seq.length && s.intent === seq[i],\n );\n\n if (partialMatch) {\n // Started the pattern but didn't finish — might be anomaly\n const expectedNext = seq[sorted.length];\n const lastStitch = sorted[sorted.length - 1];\n\n // Only flag if the pattern is well-established\n if (pattern.occurrence_count >= 3) {\n anomalies.push({\n pattern_id: `pat_anom_${randomBytes(8).toString('hex')}`,\n kind: 'anomaly',\n name: `Incomplete: ${pattern.name}`,\n description: `Expected '${expectedNext}' after '${lastStitch.intent}' based on pattern '${pattern.name}'`,\n signature: pattern.signature,\n confidence: pattern.confidence * 0.8,\n occurrence_count: 1,\n first_seen_at: now,\n last_seen_at: now,\n seen_in_threads: [lastStitch.thread_id],\n classification: 'anomalous',\n });\n }\n }\n }\n }\n\n return anomalies;\n}\n","import { Sensor } from \"../decorators/sensor.decorator\";\nimport { BAND } from \"../engine/sensor-bands\";\nimport { AxisSensor, SensorDecision, SensorInput } from \"../sensor/axis-sensor\";\n\n/**\n * Access Profile Resolver AxisSensor\n *\n * This sensor determines whether an AXIS request should be handled under the\n * 'PUBLIC' or 'GUARDED' access profile. It does this by checking for the presence\n * of authentication proofs in the request metadata.\n *\n * **Execution Order:** 50 (runs very early)\n *\n * **Core Concept:**\n * - If any structural proof is present (Capsule, Passport, or mTLS certificate),\n * the request is flagged as `GUARDED`.\n * - Otherwise, it is treated as `PUBLIC`.\n *\n * **Impact:**\n * This determination is stored in `input.metadata.profile` and is used by\n * downstream sensors like `CapabilityEnforcementSensor` to decide whether\n * to enforce strict authorization checks.\n *\n * @class AccessProfileResolverSensor\n * @implements {AxisSensor}\n * @implements {OnModuleInit}\n */\n@Sensor()\nexport class AccessProfileResolverSensor implements AxisSensor {\n /** AxisSensor identifier */\n readonly name = \"AccessProfileResolverSensor\";\n\n /**\n * Execution order - runs early to establish the access profile\n * for downstream sensors.\n */\n readonly order = BAND.IDENTITY + 10;\n\n // supports() is a synchronous applicability gate.\n // Return false to skip this sensor without producing a denial.\n supports(input: SensorInput): boolean {\n void input;\n return true;\n }\n\n // run() executes only after supports() passes.\n // Return the actual ALLOW/DENY/FLAG/THROTTLE decision here.\n async run(input: SensorInput): Promise<SensorDecision> {\n // Resolve profile: presence of proof => GUARDED, else PUBLIC\n const hasCapsule = !!input.metadata?.capsuleId;\n const hasPassport = !!input.metadata?.passportSig;\n const hasMTLS = !!input.metadata?.mtlsId;\n\n const profile = hasCapsule || hasPassport || hasMTLS ? \"GUARDED\" : \"PUBLIC\";\n\n // Store in metadata for downstream sensors\n if (!input.metadata) input.metadata = {};\n input.metadata.profile = profile;\n\n return { action: \"ALLOW\" };\n }\n}\n","import { MAX_BODY_LEN, MAX_HDR_LEN } from \"../core/constants\";\nimport { decodeVarint } from \"../core/varint\";\nimport { Sensor } from \"../decorators/sensor.decorator\";\nimport { BAND } from \"../engine/sensor-bands\";\nimport { AxisSensor, SensorDecision, SensorInput } from \"../sensor/axis-sensor\";\n\n/**\n * Body Budget AxisSensor - Section Size Limit Enforcement\n *\n * Validates that header and body sections of AXIS frames are within\n * configured size limits. This prevents memory exhaustion attacks and\n * ensures efficient processing.\n *\n * **Execution Order:** 150 (after auth, before schema validation)\n *\n * **Core Concept:**\n * AXIS frames have three main sections:\n * - Header (TLVs for routing, auth, etc.)\n * - Body (payload data)\n * - Signature\n *\n * Each section has a declared length in the frame header. This sensor\n * validates those lengths against configured maximums BEFORE reading\n * the full content.\n *\n * **Frame Format Reference:**\n * ```\n * Offset 0-4: Magic (AXIS1)\n * Offset 5: Version (0x01)\n * Offset 6: Flags\n * Offset 7+: HDR_LEN (varint)\n * Following: BODY_LEN (varint)\n * Following: SIG_LEN (varint)\n * Then: HDR bytes, BODY bytes, SIG bytes\n * ```\n *\n * **Default Limits (from constants.ts):**\n * - MAX_HDR_LEN: 2048 bytes (2KB)\n * - MAX_BODY_LEN: 65536 bytes (64KB)\n *\n * **Security Model:**\n * - **Fail Open:** Parse errors allow (other sensors catch)\n * - **Early Rejection:** Rejects before reading large payloads\n * - **Defense in Depth:** Works with FrameBudgetSensor\n *\n * **Actions:**\n * - `ALLOW` - Sizes within limits\n * - `DENY` - Header or body exceeds maximum\n *\n * **Error Codes:**\n * - `HEADER_TOO_LARGE` - Header exceeds MAX_HDR_LEN\n * - `BODY_TOO_LARGE` - Body exceeds MAX_BODY_LEN\n *\n * **Performance:**\n * - Parses first ~20 bytes (varint lengths)\n * - O(1) comparison\n * - Latency: <0.5ms\n *\n * @class BodyBudgetSensor\n * @implements {AxisSensor}\n * @implements {OnModuleInit}\n *\n * @example\n * Within limits:\n * ```typescript\n * // HDR_LEN: 500 (< 2048), BODY_LEN: 10000 (< 65536)\n * { action: 'ALLOW' }\n * ```\n *\n * @example\n * Body too large:\n * ```typescript\n * // BODY_LEN: 100000 (> 65536)\n * {\n * action: 'DENY',\n * code: 'BODY_TOO_LARGE',\n * reason: 'Body size 100000 exceeds limit 65536'\n * }\n * ```\n *\n * @see {@link FrameBudgetSensor} - Content-Length based limiting\n * @see {@link MAX_BODY_LEN} - Configurable body limit\n */\n@Sensor()\nexport class BodyBudgetSensor implements AxisSensor {\n /** AxisSensor identifier */\n readonly name = \"BodyBudgetSensor\";\n\n /**\n * Execution order - after authentication\n *\n * Order 150 ensures:\n * - Authentication complete\n * - Runs before full body read\n * - Before schema validation (170)\n */\n readonly order = BAND.CONTENT + 10;\n\n /**\n * Determines if this sensor should process the given input.\n *\n * Requires at least 8 bytes of peeked data to read headers.\n *\n * @param {SensorInput} input - Incoming request\n * @returns {boolean} True if sufficient peek data available\n */\n // supports() is a synchronous applicability gate.\n // Return false to skip this sensor without producing a denial.\n supports(input: SensorInput): boolean {\n return !!input.peek && input.peek.length >= 8;\n }\n\n /**\n * Validates header and body lengths against configured limits.\n *\n * **Frame Parsing:**\n * - Skip magic (5 bytes)\n * - Skip version (1 byte)\n * - Skip flags (1 byte)\n * - Read HDR_LEN varint\n * - Read BODY_LEN varint\n * - Compare against MAX_HDR_LEN and MAX_BODY_LEN\n *\n * @param {SensorInput} input - Request with peek data\n * @returns {Promise<SensorDecision>} ALLOW or DENY based on size limits\n */\n // run() executes only after supports() passes.\n // Return the actual ALLOW/DENY/FLAG/THROTTLE decision here.\n async run(input: SensorInput): Promise<SensorDecision> {\n const { peek } = input;\n\n // Should be caught by ProtocolStrict, but defensive check\n if (!peek || peek.length < 8) {\n return { action: \"ALLOW\" };\n }\n\n try {\n // Frame structure:\n // 0-4: Magic (AXIS1)\n // 5: Version\n // 6: Flags\n // 7+: Varints for HDR_LEN, BODY_LEN, SIG_LEN\n\n let offset = 5; // After magic\n offset += 1; // Skip version\n offset += 1; // Skip flags\n\n // Now at offset 7: read HDR_LEN varint\n const { value: hdrLen, length: hdrBytes } = decodeVarint(peek, offset);\n offset += hdrBytes;\n\n // Read BODY_LEN varint\n const { value: bodyLen } = decodeVarint(peek, offset);\n\n // === Check Header Limit ===\n if (hdrLen > MAX_HDR_LEN) {\n return {\n action: \"DENY\",\n code: \"HEADER_TOO_LARGE\",\n reason: `Header size ${hdrLen} exceeds limit ${MAX_HDR_LEN}`,\n };\n }\n\n // === Check Body Limit ===\n if (bodyLen > MAX_BODY_LEN) {\n return {\n action: \"DENY\",\n code: \"BODY_TOO_LARGE\",\n reason: `Body size ${bodyLen} exceeds limit ${MAX_BODY_LEN}`,\n };\n }\n\n return { action: \"ALLOW\" };\n } catch (e) {\n // Parse errors are likely malformed frames\n // ProtocolStrict will handle them\n return { action: \"ALLOW\" };\n }\n }\n}\n","import { Sensor } from \"../decorators/sensor.decorator\";\nimport { BAND } from \"../engine/sensor-bands\";\nimport {\n AxisSensor,\n Capability,\n INTENT_REQUIREMENTS,\n PROOF_CAPABILITIES,\n SensorDecision,\n SensorInput,\n} from \"../index\";\n\n/**\n * Capability Enforcement AxisSensor - Authorization Based on Proof Type\n *\n * Maps authentication proof types to capabilities and enforces capability\n * requirements per intent. This implements role-based access control (RBAC)\n * at the intent level.\n *\n * **Execution Order:** 100 (after capsule/signature verification)\n *\n * **Core Concept:**\n * Different authentication methods grant different capabilities:\n * - Stronger auth = more capabilities\n * - Weaker auth = fewer capabilities\n *\n * Each intent has required capabilities. The request's proof type must\n * grant ALL required capabilities for the intent to proceed.\n *\n * **Capability Definitions:**\n * - `read` - Can read/query data\n * - `write` - Can create/update data\n * - `execute` - Can trigger actions/operations\n * - `admin` - Administrative operations\n * - `sign` - Can create digital signatures\n * - `witness` - Can act as independent witness\n *\n * **Proof Type Mappings:**\n * | Type | Name | Capabilities |\n * |------|------|--------------|\n * | 0 | NONE | (none) |\n * | 1 | CAPSULE | read, write, execute |\n * | 2 | JWT | read |\n * | 3 | MTLS | read, write, admin |\n * | 4 | DEVICE_SE | read, write, sign |\n * | 5 | WITNESS_SIG | read, write, execute, witness |\n *\n * @class CapabilityEnforcementSensor\n * @implements {AxisSensor}\n * @implements {OnModuleInit}\n *\n * @example\n * File upload (requires 'write'):\n * ```typescript\n * // Proof type: CAPSULE (grants: read, write, execute)\n * // Intent: 'file.upload' (requires: write)\n * // write ∈ [read, write, execute] ✓\n * { action: 'ALLOW' }\n * ```\n *\n * @example\n * Admin operation (requires 'admin'):\n * ```typescript\n * // Proof type: CAPSULE (grants: read, write, execute)\n * // Intent: 'admin.users.delete' (requires: admin)\n * // admin ∉ [read, write, execute] ✗\n * {\n * action: 'DENY',\n * code: 'CAPABILITY_DENIED',\n * reason: 'Missing capabilities: admin'\n * }\n * ```\n */\n\n@Sensor()\nexport class CapabilityEnforcementSensor implements AxisSensor {\n private readonly logger = {\n warn: (msg: string) => console.warn(`[CapabilityEnforcementSensor] ${msg}`),\n };\n\n /** AxisSensor identifier for logging and registry */\n readonly name = \"CapabilityEnforcementSensor\";\n\n /**\n * Execution order - runs after authentication\n *\n * Order 100 ensures:\n * - Capsule is verified (CapsuleVerifySensor @ 80)\n * - Signature is verified (SigVerifySensor @ 90)\n * - We know the proof type for capability lookup\n */\n readonly order = BAND.POLICY + 10;\n\n /**\n * Determines if this sensor should process the given input.\n *\n * Only activates when an intent is present.\n *\n * @param {SensorInput} input - Incoming AXIS request\n * @returns {boolean} True if intent is present\n */\n // supports() is a synchronous applicability gate.\n // Return false to skip this sensor without producing a denial.\n supports(input: SensorInput): boolean {\n void input;\n return true;\n }\n\n /**\n * Enforces capability requirements for the requested intent.\n *\n * **Processing Flow:**\n * 1. Extract proof type from packet (default: 0/NONE)\n * 2. Look up capabilities granted by this proof type\n * 3. Look up capabilities required by the intent\n * 4. If no requirements, ALLOW\n * 5. Check if all required capabilities are granted\n * 6. If missing capabilities, DENY with details\n * 7. Otherwise, ALLOW\n *\n * @param {SensorInput} input - Request with intent and packet\n * @returns {Promise<SensorDecision>} ALLOW or DENY based on capabilities\n */\n // run() executes only after supports() passes.\n // Return the actual ALLOW/DENY/FLAG/THROTTLE decision here.\n async run(input: SensorInput): Promise<SensorDecision> {\n const { intent, packet } = input;\n if (!intent) {\n return { action: \"ALLOW\" };\n }\n\n const proofType = packet?.proofType ?? 0;\n\n // === STEP 1: Get Granted Capabilities ===\n // Look up what this proof type allows\n const grantedCapabilities = PROOF_CAPABILITIES[proofType] || [];\n\n // === STEP 2: Get Required Capabilities ===\n // Look up what this intent requires\n const requiredCapabilities = this.getRequiredCapabilities(intent);\n\n // === STEP 3: Check Public Intents ===\n // No capabilities required = public access\n if (requiredCapabilities.length === 0) {\n return { action: \"ALLOW\" };\n }\n\n // === STEP 4: Check Capability Match ===\n // Find any required capabilities not granted\n const missingCapabilities = requiredCapabilities.filter(\n (cap) => !grantedCapabilities.includes(cap),\n );\n\n if (missingCapabilities.length > 0) {\n // Capability mismatch - deny with details\n this.logger.warn(\n `Capability denied for ${intent}: missing ${missingCapabilities.join(\", \")} (has: ${grantedCapabilities.join(\", \")})`,\n );\n return {\n action: \"DENY\",\n code: \"CAPABILITY_DENIED\",\n reason: `Missing capabilities: ${missingCapabilities.join(\", \")}`,\n };\n }\n\n // All required capabilities present\n return { action: \"ALLOW\" };\n }\n\n /**\n * Gets required capabilities for an intent.\n *\n * **Lookup Strategy:**\n * 1. Check for exact intent match\n * 2. Check for prefix pattern match (*.suffix)\n * 3. Default to 'execute' for unknown intents\n *\n * @private\n * @param {string} intent - Intent name to look up\n * @returns {Capability[]} Array of required capabilities\n */\n private getRequiredCapabilities(intent: string): Capability[] {\n // Check exact match first\n if (INTENT_REQUIREMENTS[intent]) {\n return INTENT_REQUIREMENTS[intent];\n }\n\n // Check prefix patterns (e.g., 'admin.*' matches 'admin.users.delete')\n for (const [pattern, caps] of Object.entries(INTENT_REQUIREMENTS)) {\n if (pattern.endsWith(\".*\")) {\n const prefix = pattern.slice(0, -1); // Remove '*'\n if (intent.startsWith(prefix)) {\n return caps;\n }\n }\n }\n\n // Default: require execute for unknown intents (safe default)\n return [\"execute\"];\n }\n}\n","import { createHash } from \"crypto\";\n\nimport { Sensor } from \"../decorators/sensor.decorator\";\nimport { BAND } from \"../engine/sensor-bands\";\nimport { AxisError } from \"../core/axis-error\";\nimport { AxisSensor, SensorDecision, SensorInput } from \"../sensor/axis-sensor\";\n\n/**\n * Chunk Hash Sensor - Data Integrity Verification\n *\n * Validates that uploaded file chunks match their declared SHA-256 hash.\n * This ensures data integrity during transfer and detects corruption or\n * tampering.\n *\n * **Execution Order:** 190 (after session validation, before handler)\n *\n * **Core Concept:**\n * Each file chunk includes a SHA-256 hash in the header. The sensor:\n * 1. Extracts the expected hash from header TLV\n * 2. Computes the actual hash of the body\n * 3. Compares them byte-by-byte\n * 4. Rejects if mismatch (data corruption)\n *\n * This provides end-to-end integrity verification, catching:\n * - Network corruption\n * - Storage errors\n * - Man-in-the-middle modifications\n * - Client-side bugs\n *\n * **TLV Type:**\n * - Type 73 (`TLV_SHA256_CHUNK`): 32-byte SHA-256 hash\n *\n * **Hash Calculation:**\n * ```typescript\n * const actual = createHash('sha256').update(bodyBytes).digest();\n * ```\n *\n * **Security Model:**\n * - **Fail Closed:** Hash mismatch = DENY\n * - **Immutable Check:** Hash computed server-side\n * - **Early Rejection:** Before storage writes\n *\n * **Actions:**\n * - `ALLOW` - Hash matches\n * - `DENY` - Hash mismatch or missing\n *\n * **Error Codes:**\n * - `FILE_CHUNK_HASH_MISSING` - TLV 73 not present or wrong size\n * - `FILE_CHUNK_HASH_MISMATCH` - Computed hash != expected hash\n *\n * **Performance:**\n * - SHA-256 computation: ~100MB/s on modern CPUs\n * - For 1MB chunk: ~10ms\n *\n * @class ChunkHashSensor\n * @implements {AxisSensor}\n *\n * @example\n * Hash matches:\n * ```typescript\n * // Header TLV 73: sha256(body) = expected\n * { action: 'ALLOW' }\n * ```\n *\n * @example\n * Hash mismatch:\n * ```typescript\n * // Body was corrupted during transfer\n * {\n * action: 'DENY',\n * code: 'FILE_CHUNK_HASH_MISMATCH',\n * reason: 'Chunk hash mismatch - data corrupted'\n * }\n * ```\n *\n * @see {@link FileUploadStateSensor} - Session validation\n * @see {@link https://en.wikipedia.org/wiki/SHA-2 SHA-256}\n */\n@Sensor()\nexport class ChunkHashSensor implements AxisSensor {\n /** Sensor identifier */\n readonly name = \"ChunkHashSensor\";\n\n /**\n * Execution order - after session validation\n *\n * Order 190 ensures:\n * - Session validated (180)\n * - Chunk parameters verified\n * - Hash check before storage\n */\n readonly order = BAND.CONTENT + 50;\n\n /**\n * Determines if this sensor should process the given input.\n *\n * Only processes file.chunk intents.\n *\n * @param {SensorInput} input - Incoming request\n * @returns {boolean} True if intent is 'file.chunk'\n */\n // supports() is a synchronous applicability gate.\n // Return false to skip this sensor without producing a denial.\n supports(input: SensorInput): boolean {\n return input.intent === \"file.chunk\";\n }\n\n /**\n * Validates chunk data against declared SHA-256 hash.\n *\n * **Processing Flow:**\n * 1. Check for required headerTLVs and body\n * 2. Extract expected hash from TLV 73\n * 3. Verify hash is exactly 32 bytes\n * 4. Compute SHA-256 of body\n * 5. Compare bytes (timing-safe)\n * 6. DENY on mismatch\n *\n * @param {SensorInput} input - Request with chunk body\n * @returns {Promise<SensorDecision>} ALLOW if hash matches, DENY otherwise\n */\n // run() executes only after supports() passes.\n // Return the actual ALLOW/DENY/FLAG/THROTTLE decision here.\n async run(input: SensorInput): Promise<SensorDecision> {\n const headerTLVs = input.headerTLVs as Map<number, Uint8Array>;\n const bodyBytes = input.body as Uint8Array;\n\n // Validate required inputs\n if (!headerTLVs || !bodyBytes) {\n return {\n action: \"DENY\",\n code: \"SENSOR_INVALID_INPUT\",\n reason: \"Missing headerTLVs or body\",\n };\n }\n\n // TLV type for chunk SHA-256 hash\n const TLV_SHA256_CHUNK = 73;\n\n // === STEP 1: Extract Expected Hash ===\n const expected = headerTLVs.get(TLV_SHA256_CHUNK);\n\n if (!expected || expected.length !== 32) {\n return {\n action: \"DENY\",\n code: \"FILE_CHUNK_HASH_MISSING\",\n reason: \"Missing sha256Chunk TLV in header\",\n };\n }\n\n // === STEP 2: Compute Actual Hash ===\n const actual = createHash(\"sha256\").update(bodyBytes).digest();\n\n // === STEP 3: Compare Hashes ===\n // Using Buffer.equals for comparison\n if (!Buffer.from(actual).equals(Buffer.from(expected))) {\n return {\n action: \"DENY\",\n code: \"FILE_CHUNK_HASH_MISMATCH\",\n reason: \"Chunk hash mismatch - data corrupted\",\n };\n }\n\n return { action: \"ALLOW\" };\n }\n}\n","import * as crypto from \"crypto\";\n\nimport { Sensor } from \"../decorators/sensor.decorator\";\nimport { BAND } from \"../engine/sensor-bands\";\n\nimport { TLV_NONCE, TLV_PID } from \"../core/constants\";\nimport { AxisSensor, SensorDecision, SensorInput } from \"../sensor/axis-sensor\";\n\n/**\n * Entropy AxisSensor - Randomness Quality Analysis\n *\n * Validates that cryptographic identifiers (PIDs, nonces) have sufficient\n * randomness to prevent predictability attacks. Weak entropy in IDs can\n * lead to collision attacks and session hijacking.\n *\n * **Execution Order:** 130 (after replay protection, before policy checks)\n *\n * **Core Concept:**\n * Proper cryptographic security requires high-quality randomness. This sensor\n * detects patterns that suggest weak random number generation:\n * - Low Shannon entropy\n * - Sequential patterns (1,2,3,4...)\n * - Repeated patterns (0xAB,0xAB,0xAB...)\n *\n * **How It Works:**\n * ```\n * 1. Extract PID and nonce from headers\n * 2. Calculate Shannon entropy for each\n * 3. Check for sequential patterns\n * 4. Check for repeated patterns\n * 5. FLAG if issues found (doesn't DENY for availability)\n * ```\n *\n * **Shannon Entropy Calculation:**\n * ```\n * H = -Σ(p_i * log2(p_i))\n * ```\n * Where p_i is the probability of byte value i appearing.\n * - High entropy (7-8 bits/byte): Good randomness\n * - Low entropy (<3 bits/byte): Suspicious pattern\n *\n * **Pattern Detection:**\n * - **Sequential:** More than 50% of bytes are +1 or -1 from previous\n * - **Repeated:** 90%+ match with 2, 4, or 8 byte repeating pattern\n *\n * **Security Model:**\n * - **Fail Open:** Issues cause FLAG, not DENY\n * - **Trust Score Impact:** Each issue reduces trust score\n * - **Detection Only:** Logs suspicious patterns for investigation\n *\n * **Actions:**\n * - `ALLOW` - Sufficient entropy, no patterns detected\n * - `FLAG` - Issues detected (reduces trust score)\n *\n * **Score Deltas:**\n * | Issue | Delta |\n * |-------|-------|\n * | Low entropy (<3 bits/byte) | -3 |\n * | Sequential pattern | -5 |\n * | Repeated pattern | -5 |\n *\n * **Why Not DENY?**\n * Legitimate clients with older RNG libraries might trigger false positives.\n * FLAG allows monitoring without breaking legitimate traffic.\n *\n * **Performance:**\n * - In-memory analysis\n * - O(n) where n = bytes analyzed\n * - Latency: <1ms\n *\n * @class EntropySensor\n * @implements {AxisSensor}\n * @implements {OnModuleInit}\n *\n * @example\n * High-entropy nonce (good):\n * ```typescript\n * // Nonce from crypto.randomBytes(16)\n * // Entropy: 7.2 bits/byte\n * { action: 'ALLOW' }\n * ```\n *\n * @example\n * Sequential pattern (suspicious):\n * ```typescript\n * // Nonce: [1,2,3,4,5,6,7,8,9,10,11,12]\n * {\n * action: 'FLAG',\n * scoreDelta: -5,\n * reasons: ['nonce_sequential']\n * }\n * ```\n *\n * @see {@link https://en.wikipedia.org/wiki/Entropy_(information_theory) Shannon Entropy}\n */\n@Sensor()\nexport class EntropySensor implements AxisSensor {\n private readonly logger = {\n warn: (msg: string) => console.warn(`[EntropySensor] ${msg}`),\n };\n\n /**\n * Minimum acceptable entropy in bits per byte.\n *\n * 3.0 bits/byte is a conservative threshold:\n * - Random data: ~7.9 bits/byte\n * - English text: ~4.5 bits/byte\n * - Sequential data: ~0-2 bits/byte\n */\n private readonly MIN_ENTROPY_THRESHOLD = 3.0;\n\n /** AxisSensor identifier */\n readonly name = \"EntropySensor\";\n\n /**\n * Execution order - anomaly detection phase\n *\n * Order 130 ensures:\n * - Replay protection done (120)\n * - Runs before expensive policy lookups\n */\n readonly order = BAND.POLICY + 35;\n\n /**\n * Calculates Shannon entropy of a byte array.\n *\n * **Algorithm:**\n * 1. Count frequency of each byte value (0-255)\n * 2. Calculate probability p = count / total\n * 3. Sum: -Σ(p * log2(p))\n *\n * @private\n * @param {Uint8Array} data - Bytes to analyze\n * @returns {number} Entropy in bits per byte (0-8 scale)\n */\n private calculateEntropy(data: Uint8Array): number {\n if (data.length === 0) return 0;\n\n // Count byte frequencies\n const freq = new Map<number, number>();\n for (const byte of data) {\n freq.set(byte, (freq.get(byte) || 0) + 1);\n }\n\n // Calculate Shannon entropy\n let entropy = 0;\n const len = data.length;\n for (const count of freq.values()) {\n const p = count / len;\n entropy -= p * Math.log2(p);\n }\n\n return entropy;\n }\n\n /**\n * Checks for sequential patterns in data.\n *\n * Detects sequences like [1,2,3,4...] or [10,9,8,7...].\n * More than 50% sequential is considered suspicious.\n *\n * @private\n * @param {Uint8Array} data - Bytes to analyze\n * @returns {boolean} True if sequential pattern detected\n */\n private hasSequentialPattern(data: Uint8Array): boolean {\n if (data.length < 4) return false;\n\n let ascending = 0;\n let descending = 0;\n\n for (let i = 1; i < data.length; i++) {\n if (data[i] === data[i - 1] + 1) ascending++;\n if (data[i] === data[i - 1] - 1) descending++;\n }\n\n // More than 50% sequential is suspicious\n return ascending > data.length / 2 || descending > data.length / 2;\n }\n\n /**\n * Checks for repeated patterns in data.\n *\n * Detects patterns like [0xAB, 0xCD, 0xAB, 0xCD...].\n * Checks for 2, 4, and 8 byte repeating patterns.\n *\n * @private\n * @param {Uint8Array} data - Bytes to analyze\n * @returns {boolean} True if repeated pattern detected\n */\n private hasRepeatedPattern(data: Uint8Array): boolean {\n if (data.length < 8) return false;\n\n // Check for 2-byte, 4-byte, and 8-byte repeating patterns\n for (const patternLen of [2, 4, 8]) {\n if (data.length % patternLen !== 0) continue;\n\n let matches = 0;\n for (let i = patternLen; i < data.length; i++) {\n if (data[i] === data[i % patternLen]) matches++;\n }\n\n // 90%+ match = repeating pattern\n if (matches > (data.length - patternLen) * 0.9) {\n return true;\n }\n }\n\n return false;\n }\n\n /**\n * Analyzes entropy of PID and nonce in request headers.\n *\n * **Processing Flow:**\n * 1. Extract PID and nonce from header TLVs\n * 2. Calculate entropy for each\n * 3. Check for sequential patterns\n * 4. Check for repeated patterns\n * 5. Accumulate issues and score delta\n * 6. Return FLAG if issues found, ALLOW otherwise\n *\n * @param {SensorInput} input - Request with header TLVs\n * @returns {Promise<SensorDecision>} ALLOW or FLAG based on entropy analysis\n */\n // This sensor does not define supports(), so it is applicable whenever registered.\n // run() returns the actual ALLOW/DENY/FLAG/THROTTLE decision.\n async run(input: SensorInput): Promise<SensorDecision> {\n const headers = input.headerTLVs as Map<number, Uint8Array>;\n\n // If no headers, allow (WebSocket handshake, etc.)\n if (!headers) {\n return { action: \"ALLOW\" };\n }\n\n // Extract PID and nonce from headers\n const pid = headers.get(TLV_PID);\n const nonce = headers.get(TLV_NONCE);\n\n const issues: string[] = [];\n let totalDelta = 0;\n\n // === Analyze PID ===\n if (pid && pid.length > 0) {\n const pidEntropy = this.calculateEntropy(pid);\n\n // Check minimum entropy threshold\n if (pidEntropy < this.MIN_ENTROPY_THRESHOLD) {\n issues.push(`pid_low_entropy:${pidEntropy.toFixed(2)}`);\n totalDelta -= 3;\n }\n\n // Check for sequential pattern\n if (this.hasSequentialPattern(pid)) {\n issues.push(\"pid_sequential\");\n totalDelta -= 5;\n }\n\n // Check for repeated pattern\n if (this.hasRepeatedPattern(pid)) {\n issues.push(\"pid_repeated\");\n totalDelta -= 5;\n }\n }\n\n // === Analyze Nonce ===\n if (nonce && nonce.length > 0) {\n const nonceEntropy = this.calculateEntropy(nonce);\n\n // Check minimum entropy threshold\n if (nonceEntropy < this.MIN_ENTROPY_THRESHOLD) {\n issues.push(`nonce_low_entropy:${nonceEntropy.toFixed(2)}`);\n totalDelta -= 3;\n }\n\n // Check for sequential pattern\n if (this.hasSequentialPattern(nonce)) {\n issues.push(\"nonce_sequential\");\n totalDelta -= 5;\n }\n\n // Check for repeated pattern\n if (this.hasRepeatedPattern(nonce)) {\n issues.push(\"nonce_repeated\");\n totalDelta -= 5;\n }\n }\n\n // === Return Decision ===\n if (issues.length > 0) {\n this.logger.warn(`Entropy issues from ${input.ip}: ${issues.join(\", \")}`);\n return {\n action: \"FLAG\",\n scoreDelta: totalDelta,\n reasons: issues,\n };\n }\n\n return { action: \"ALLOW\" };\n }\n\n /**\n * Generates cryptographically secure random bytes.\n *\n * Utility method for SDK/client code to ensure proper entropy.\n * Uses Node.js crypto.randomBytes for secure PRNG.\n *\n * @static\n * @param {number} length - Number of random bytes\n * @returns {Uint8Array} Cryptographically secure random bytes\n */\n static generateSecureRandom(length: number): Uint8Array {\n return new Uint8Array(crypto.randomBytes(length));\n }\n}\n","import { Sensor } from \"../decorators/sensor.decorator\";\nimport { BAND } from \"../engine/sensor-bands\";\nimport { AxisSensor, SensorDecision, SensorInput } from \"../sensor/axis-sensor\";\nimport { resolveTimeout } from \"../core/timeouts\";\n\n/**\n * Execution Timeout AxisSensor - Intent-Based Deadline Enforcement\n *\n * Sets per-intent execution time limits and stores deadlines in the request\n * context. This prevents runaway handlers and ensures predictable response times.\n *\n * **Execution Order:** 210 (late, before handler execution)\n *\n * **Core Concept:**\n * Different intents have different acceptable latencies:\n * - Health checks: 2 seconds (must be fast)\n * - File uploads: 60 seconds (large transfers)\n * - Standard operations: 10 seconds (default)\n *\n * The sensor calculates a deadline timestamp and stores it in the context.\n * Handler code can check this deadline to abort if running too long.\n *\n * **How It Works:**\n * ```\n * 1. Look up timeout for intent (exact match or prefix pattern)\n * 2. Calculate deadline = now + timeout\n * 3. Store deadline in context\n * 4. Return ALLOW (enforcement happens in handler)\n * ```\n *\n * **Timeout Lookup:**\n * 1. Check exact intent match first\n * 2. Then check prefix patterns (e.g., 'file.*')\n * 3. Fall back to DEFAULT_TIMEOUT (10s)\n *\n * **Context Properties Set:**\n * - `deadline`: Absolute timestamp (ms since epoch)\n * - `timeoutMs`: Configured timeout duration\n *\n * **Handler Usage:**\n * ```typescript\n * if (ExecutionTimeoutSensor.isExpired(ctx)) {\n * throw new Error('Execution timeout exceeded');\n * }\n *\n * const remaining = ExecutionTimeoutSensor.getRemainingMs(ctx);\n * ```\n *\n * **Security Model:**\n * - **Always Allow:** This sensor only sets context, doesn't block\n * - **Handler Responsibility:** Actual enforcement in handler code\n * - **Defense in Depth:** Works with ExecutionContractSensor\n *\n * **Actions:**\n * - `ALLOW` - Always (only sets context)\n *\n * **Performance:**\n * - Map lookup: O(1) to O(n patterns)\n * - Latency: <0.1ms\n *\n * @class ExecutionTimeoutSensor\n * @implements {AxisSensor}\n * @implements {OnModuleInit}\n *\n * @example\n * File upload:\n * ```typescript\n * // Intent: file.upload\n * // Timeout: 60000ms\n * // ctx.deadline = Date.now() + 60000\n * { action: 'ALLOW' }\n * ```\n *\n * @example\n * Checking deadline in handler:\n * ```typescript\n * if (ExecutionTimeoutSensor.isExpired(ctx)) {\n * throw new TimeoutError('Handler exceeded deadline');\n * }\n * ```\n *\n * @see {@link ExecutionContractSensor} - Resource limit enforcement\n */\n@Sensor()\nexport class ExecutionTimeoutSensor implements AxisSensor {\n private readonly logger = { debug: (msg: string) => void 0 };\n\n /** AxisSensor identifier */\n readonly name = \"ExecutionTimeoutSensor\";\n\n /**\n * Execution order - late, near handler execution\n *\n * Order 210 ensures:\n * - All validation complete\n * - Deadline set just before handler\n */\n readonly order = BAND.BUSINESS + 10;\n\n /**\n * Determines if this sensor should process the given input.\n *\n * @param {SensorInput} input - Incoming request\n * @returns {boolean} True if intent is present\n */\n // supports() is a synchronous applicability gate.\n // Return false to skip this sensor without producing a denial.\n supports(): boolean {\n return true;\n }\n\n /**\n * Sets execution deadline in the request context.\n *\n * **Processing Flow:**\n * 1. Look up timeout for intent\n * 2. Calculate absolute deadline\n * 3. Store in context for handler use\n * 4. Return ALLOW\n *\n * @param {SensorInput} input - Request with intent\n * @returns {Promise<SensorDecision>} Always ALLOW\n */\n // run() executes only after supports() passes.\n // Return the actual ALLOW/DENY/FLAG/THROTTLE decision here.\n async run(input: SensorInput): Promise<SensorDecision> {\n const { intent, context } = input;\n if (!intent) {\n return { action: \"ALLOW\" };\n }\n\n // Get timeout for this intent\n const timeout = resolveTimeout(intent);\n\n // Calculate absolute deadline\n const deadline = Date.now() + timeout;\n\n // Store deadline in context for downstream components\n if (context) {\n (context as any).deadline = deadline;\n (context as any).timeoutMs = timeout;\n }\n\n this.logger.debug(\n `Set ${timeout}ms timeout for ${intent} (deadline: ${new Date(deadline).toISOString()})`,\n );\n\n // Actual timeout enforcement happens in the intent router/executor\n // This sensor just sets the deadline\n return { action: \"ALLOW\" };\n }\n\n /**\n * Checks if a deadline has been exceeded.\n *\n * Utility method for handler code.\n *\n * @static\n * @param {object} ctx - Context with deadline\n * @returns {boolean} True if deadline passed\n */\n static isExpired(ctx: { deadline?: number }): boolean {\n if (!ctx.deadline) return false;\n return Date.now() > ctx.deadline;\n }\n\n /**\n * Gets remaining time until deadline.\n *\n * Utility method for handler code.\n *\n * @static\n * @param {object} ctx - Context with deadline\n * @returns {number} Remaining milliseconds (0 if expired, Infinity if no deadline)\n */\n static getRemainingMs(ctx: { deadline?: number }): number {\n if (!ctx.deadline) return Infinity;\n return Math.max(0, ctx.deadline - Date.now());\n }\n}\n","import { Sensor } from \"../decorators/sensor.decorator\";\nimport { BAND } from \"../engine/sensor-bands\";\nimport { AxisSensor, SensorDecision, SensorInput } from \"../sensor/axis-sensor\";\n\n/**\n * Frame Budget AxisSensor - Request Size Validation\n *\n * Validates that incoming frame sizes do not exceed configured limits.\n * This prevents memory exhaustion attacks and ensures fair resource allocation.\n *\n * **Execution Order:** 20 (after ProtocolStrictSensor, before security checks)\n *\n * **Core Concept:**\n * Large payloads can be used for denial-of-service attacks, buffer overflows,\n * or to exhaust server memory. This sensor enforces per-intent size limits\n * defined in the intent policy, rejecting oversized frames before they are\n * fully processed.\n *\n * **How It Works:**\n * 1. Extract Content-Length from request\n * 2. Look up maximum allowed size from intent policy\n * 3. If size exceeds limit, DENY the request\n * 4. Otherwise, ALLOW request to proceed\n *\n * **Default Limits:**\n * - Standard requests: 1MB (1,048,576 bytes)\n * - File uploads: 100MB (104,857,600 bytes)\n * - Streaming: No limit (handled by StreamScopeSensor)\n *\n * **Security Model:**\n * - **Fail Open:** If Content-Length is not available, ALLOW (other sensors handle)\n * - **Early Rejection:** Reject oversized frames before full download\n * - **Per-Intent Limits:** Different intents can have different size limits\n *\n * **Configuration:**\n * ```env\n * AXIS_MAX_FRAME_BYTES=1048576 # 1MB default\n * AXIS_MAX_UPLOAD_BYTES=104857600 # 100MB for uploads\n * ```\n *\n * **Actions:**\n * - `ALLOW` - Frame size within limits or unknown\n * - `DENY` - Frame exceeds configured maximum (code: FRAME_TOO_LARGE)\n *\n * **Performance:**\n * - Single comparison operation\n * - No I/O or external calls\n * - Latency: <0.1ms\n *\n * @class FrameBudgetSensor\n * @implements {AxisSensor}\n * @implements {OnModuleInit}\n *\n * @example\n * Normal request (within limits):\n * ```typescript\n * // Content-Length: 50000 (50KB)\n * // Policy max: 1MB\n * { action: 'ALLOW' }\n * ```\n *\n * @example\n * Oversized request:\n * ```typescript\n * // Content-Length: 10485760 (10MB)\n * // Policy max: 1MB\n * {\n * action: 'DENY',\n * code: 'FRAME_TOO_LARGE',\n * reason: 'Frame size 10485760 exceeds limit 1048576'\n * }\n * ```\n *\n * @todo Implement actual size checking against intent policy maxFrameBytes\n * @see {@link BodyBudgetSensor} - Body-specific size limiting\n */\n@Sensor({ phase: \"PRE_DECODE\" })\nexport class FrameBudgetSensor implements AxisSensor {\n /** AxisSensor identifier for logging and registry */\n readonly name = \"FrameBudgetSensor\";\n\n /**\n * Execution order - runs after protocol validation\n *\n * Order 20 ensures:\n * - Protocol is valid (ProtocolStrictSensor @ 10)\n * - Size checked before expensive processing\n */\n readonly order = BAND.WIRE + 20;\n\n /**\n * Determines if this sensor should process the given input.\n *\n * Only activates when Content-Length header is available.\n * WebSocket frames may not have Content-Length; they use different size tracking.\n *\n * @param {SensorInput} input - Incoming AXIS request\n * @returns {boolean} True if Content-Length is present\n */\n // supports() is a synchronous applicability gate.\n // Return false to skip this sensor without producing a denial.\n supports(input: SensorInput): boolean {\n return typeof input.contentLength === \"number\";\n }\n\n /**\n * Validates frame size against configured limits.\n *\n * **Current Implementation:** Stub that always allows.\n *\n * **TODO:** Full implementation should:\n * 1. Load intent policy for the request\n * 2. Get maxFrameBytes from policy\n * 3. Compare against contentLength\n * 4. DENY if exceeded\n *\n * @param {SensorInput} input - Request with contentLength\n * @returns {Promise<SensorDecision>} ALLOW or DENY based on size\n */\n // run() executes only after supports() passes.\n // Return the actual ALLOW/DENY/FLAG/THROTTLE decision here.\n async run(input: SensorInput): Promise<SensorDecision> {\n const maxBytes =\n Number(process.env[\"AXIS_MAX_FRAME_SIZE\"]) || 50 * 1024 * 1024;\n const contentLength = input.contentLength;\n\n if (typeof contentLength !== \"number\") {\n return { action: \"ALLOW\" };\n }\n\n if (contentLength > maxBytes) {\n return {\n action: \"DENY\",\n code: \"FRAME_TOO_LARGE\",\n reason: `Frame size ${contentLength} exceeds limit ${maxBytes}`,\n };\n }\n\n return { action: \"ALLOW\" };\n }\n}\n","import { Sensor } from \"../decorators/sensor.decorator\";\nimport { AXIS_MAGIC, AXIS_VERSION, MAX_FRAME_LEN } from \"../core/constants\";\nimport { BAND } from \"../engine/sensor-bands\";\nimport { AxisSensor, SensorDecision, SensorInput } from \"../sensor/axis-sensor\";\n\n@Sensor({ phase: \"PRE_DECODE\" })\nexport class FrameHeaderSanitySensor implements AxisSensor {\n readonly name = \"FrameHeaderSanitySensor\";\n readonly order = BAND.WIRE + 30;\n\n // supports() is a synchronous applicability gate.\n // Return false to skip this sensor without producing a denial.\n supports(input: SensorInput): boolean {\n return !!input.peek && input.peek.length >= 7;\n }\n\n // run() executes only after supports() passes.\n // Return the actual ALLOW/DENY/FLAG/THROTTLE decision here.\n async run(input: SensorInput): Promise<SensorDecision> {\n const peek = input.peek!;\n const contentLen = input.contentLength || 0;\n\n // Check magic (first 5 bytes: AXIS1)\n if (peek.length < 5 || !this.bufferEqual(peek.slice(0, 5), AXIS_MAGIC)) {\n return {\n action: \"DENY\",\n code: \"INVALID_MAGIC\",\n reason: \"Frame magic is not AXIS1\",\n };\n }\n\n // Check version (byte 5)\n if (peek[5] !== AXIS_VERSION) {\n return {\n action: \"DENY\",\n code: \"UNSUPPORTED_VERSION\",\n reason: `Unsupported version: ${peek[5]}`,\n };\n }\n\n // Check frame length against hard limit\n if (contentLen > MAX_FRAME_LEN) {\n return {\n action: \"DENY\",\n code: \"FRAME_TOO_LARGE\",\n reason: `Frame size ${contentLen} exceeds max ${MAX_FRAME_LEN}`,\n };\n }\n\n return { action: \"ALLOW\" };\n }\n\n private bufferEqual(a: Uint8Array, b: Uint8Array): boolean {\n if (a.length !== b.length) return false;\n for (let i = 0; i < a.length; i++) {\n if (a[i] !== b[i]) return false;\n }\n return true;\n }\n}\n","import { Sensor } from \"../decorators/sensor.decorator\";\nimport { MAX_HDR_LEN } from \"../core/constants\";\nimport { BAND } from \"../engine/sensor-bands\";\nimport { AxisSensor, SensorDecision, SensorInput } from \"../sensor/axis-sensor\";\n\n@Sensor()\nexport class HeaderTLVLimitSensor implements AxisSensor {\n readonly name = \"HeaderTLVLimitSensor\";\n readonly order = BAND.CONTENT + 0;\n private readonly MAX_TLVS = 64;\n\n // supports() is a synchronous applicability gate.\n // Return false to skip this sensor without producing a denial.\n supports(input: SensorInput): boolean {\n return !!input.headerTLVs || !!input.packet;\n }\n\n // run() executes only after supports() passes.\n // Return the actual ALLOW/DENY/FLAG/THROTTLE decision here.\n async run(input: SensorInput): Promise<SensorDecision> {\n if (input.headerTLVs && input.headerTLVs.size > this.MAX_TLVS) {\n return {\n action: \"DENY\",\n code: \"TOO_MANY_TLVS\",\n reason: `Header TLVs (${input.headerTLVs.size}) exceed max (${this.MAX_TLVS})`,\n };\n }\n\n if (input.packet && input.packet.headerBytes) {\n const hdrLen = input.packet.headerBytes.length;\n if (hdrLen > MAX_HDR_LEN) {\n return {\n action: \"DENY\",\n code: \"HEADER_TOO_LARGE\",\n reason: `Header size ${hdrLen} exceeds max ${MAX_HDR_LEN}`,\n };\n }\n }\n\n return { action: \"ALLOW\" };\n }\n}\n","import { Sensor } from \"../decorators/sensor.decorator\";\nimport { BAND } from \"../engine/sensor-bands\";\nimport { AxisSensor, SensorDecision, SensorInput } from \"../sensor/axis-sensor\";\n\n// Public intent allowlist (exact or prefix)\nconst PUBLIC_INTENT_ALLOWLIST = [\n \"public.\",\n \"schema.\",\n \"catalog.\",\n \"health.\",\n \"system.\",\n];\n\n@Sensor()\nexport class IntentAllowlistSensor implements AxisSensor {\n readonly name = \"IntentAllowlistSensor\";\n readonly order = BAND.IDENTITY + 20;\n\n // supports() is a synchronous applicability gate.\n // Return false to skip this sensor without producing a denial.\n supports(input: SensorInput): boolean {\n // Only run in post-decode phase when intent is available\n return !!input.intent;\n }\n\n // run() executes only after supports() passes.\n // Return the actual ALLOW/DENY/FLAG/THROTTLE decision here.\n async run(input: SensorInput): Promise<SensorDecision> {\n const profile = input.metadata?.profile || \"PUBLIC\";\n const intent = input.intent || \"\";\n\n // PUBLIC profile: only allow whitelisted intents\n if (profile === \"PUBLIC\") {\n const isAllowed = PUBLIC_INTENT_ALLOWLIST.some((prefix) =>\n intent.startsWith(prefix),\n );\n if (!isAllowed) {\n return {\n action: \"DENY\",\n code: \"INTENT_NOT_ALLOWED\",\n reason: `Intent '${intent}' not in public allowlist`,\n };\n }\n }\n\n // GUARDED profile: allow all intents (capability enforcement comes later)\n return { action: \"ALLOW\" };\n }\n}\n","import { Sensor } from \"../decorators/sensor.decorator\";\nimport { AxisSensor, SensorDecision, SensorInput } from \"../sensor/axis-sensor\";\nimport { IntentRouter } from \"../engine/intent.router\";\nimport { BAND } from \"../engine/sensor-bands\";\n\n/**\n * IntentRegistrySensor\n *\n * Runs early in POST_DECODE to reject intents that have no registered handler.\n * This prevents wasting resources on sensors, decoding, and routing for\n * intents that will inevitably fail with \"Intent not found\".\n *\n * Order: BAND.IDENTITY + 25 (65) — right after IntentAllowlistSensor (60).\n */\n@Sensor({ phase: \"POST_DECODE\" })\nexport class IntentRegistrySensor implements AxisSensor {\n readonly name = \"IntentRegistrySensor\";\n readonly order = BAND.IDENTITY + 25;\n\n constructor(private readonly router: IntentRouter) {}\n\n // supports() is a synchronous applicability gate.\n // Return false to skip this sensor without producing a denial.\n supports(): boolean {\n return true;\n }\n\n // run() executes only after supports() passes.\n // Return the actual ALLOW/DENY/FLAG/THROTTLE decision here.\n async run(input: SensorInput): Promise<SensorDecision> {\n const intent = input.intent!;\n\n if (this.router.has(intent)) {\n return { action: \"ALLOW\" };\n }\n\n return {\n action: \"DENY\",\n code: \"INTENT_NOT_REGISTERED\",\n reason: `Intent '${intent}' is not registered`,\n };\n }\n}\n","import { Sensor } from \"../decorators/sensor.decorator\";\nimport { BAND } from \"../engine/sensor-bands\";\nimport type {\n AxisSensor,\n SensorDecision,\n SensorInput,\n} from \"../sensor/axis-sensor\";\n\nexport type LawArticlePresenceMode = \"off\" | \"audit\" | \"strict\";\n\nexport interface LawArticlePresenceSensorOptions {\n mode?: LawArticlePresenceMode | (() => LawArticlePresenceMode);\n exemptIntents?: string[];\n missingCode?: string;\n auditScoreDelta?: number;\n getLawArticleCount: (\n intent: string,\n input: SensorInput,\n ) => number | Promise<number>;\n}\n\n/**\n * Checks whether an intent has at least one mapped law article.\n *\n * Storage stays outside the SDK: callers provide `getLawArticleCount()`.\n */\n@Sensor({ phase: \"POST_DECODE\" })\nexport class LawArticlePresenceSensor implements AxisSensor {\n readonly name: string = \"LawArticlePresenceSensor\";\n readonly order: number = BAND.IDENTITY + 27;\n\n constructor(private readonly options: LawArticlePresenceSensorOptions) {}\n\n // supports() is a synchronous applicability gate.\n // Return false to skip this sensor without producing a denial.\n supports(input: SensorInput): boolean {\n if (this.mode() === \"off\") return false;\n if (!input.intent) return false;\n if (this.exemptIntents().includes(input.intent)) return false;\n return true;\n }\n\n // run() executes only after supports() passes.\n // Return the actual ALLOW/DENY/FLAG/THROTTLE decision here.\n async run(input: SensorInput): Promise<SensorDecision> {\n const intent = input.intent!;\n const count = await this.options.getLawArticleCount(intent, input);\n\n if (count > 0) {\n return {\n action: \"ALLOW\",\n meta: { lawArticles: count },\n };\n }\n\n const reason = `Intent '${intent}' has no law article mapping`;\n if (this.mode() === \"strict\") {\n return {\n action: \"DENY\",\n code: this.options.missingCode ?? \"CAPSULE_NOT_LAWFUL\",\n reason,\n };\n }\n\n return {\n action: \"FLAG\",\n scoreDelta: this.options.auditScoreDelta ?? 5,\n reasons: [\"LAW_ARTICLE_MISSING\", reason],\n meta: { lawArticles: 0 },\n };\n }\n\n private mode(): LawArticlePresenceMode {\n const configured = this.options.mode;\n if (typeof configured === \"function\") return configured();\n return configured ?? \"audit\";\n }\n\n private exemptIntents(): string[] {\n return this.options.exemptIntents ?? [\"system.ping\"];\n }\n}\n","import { Sensor } from \"../decorators/sensor.decorator\";\nimport { BAND } from \"../engine/sensor-bands\";\nimport type {\n AxisLawEvaluationContext,\n AxisLawEvaluationResult,\n LawEvaluationSensorOptions,\n} from \"../law\";\nimport { buildAxisLawEvaluationContext } from \"../law\";\nimport type {\n AxisSensor,\n SensorDecision,\n SensorInput,\n} from \"../sensor/axis-sensor\";\nimport { createAxisLogger } from \"../utils/axis-logger\";\n\n@Sensor()\nexport class LawEvaluationSensor implements AxisSensor {\n private readonly logger = createAxisLogger(LawEvaluationSensor.name);\n\n readonly name = \"LawEvaluationSensor\";\n readonly order = BAND.POLICY + 5;\n\n constructor(private readonly options: LawEvaluationSensorOptions = {}) {}\n\n // supports() is a synchronous applicability gate.\n // Return false to skip this sensor without producing a denial.\n supports(input: SensorInput): boolean {\n return !!this.options.evaluator && !!input.intent;\n }\n\n // run() executes only after supports() passes.\n // Return the actual ALLOW/DENY/FLAG/THROTTLE decision here.\n async run(input: SensorInput): Promise<SensorDecision> {\n const evaluator = this.options.evaluator;\n if (!evaluator) {\n return { action: \"ALLOW\" };\n }\n\n const context = buildAxisLawEvaluationContext(input);\n\n let result: AxisLawEvaluationResult;\n try {\n result = await evaluator(context);\n } catch (error) {\n const message =\n error instanceof Error ? error.message : \"Unknown law evaluation error\";\n this.logger.error(\n `Law evaluation failed for ${input.intent}: ${message}`,\n );\n input.metadata = {\n ...(input.metadata ?? {}),\n lawEvaluation: {\n decision: \"deny\",\n reason: \"Law evaluation failed\",\n explanation: message,\n },\n };\n return {\n action: \"DENY\",\n code: \"LAW_EVALUATION_ERROR\",\n reason: message,\n meta: { lawDecision: \"deny\" },\n };\n }\n\n input.metadata = {\n ...(input.metadata ?? {}),\n lawEvaluation: {\n ...result,\n context: sanitizeLawContext(context),\n },\n };\n\n if (result.decision === \"allow\") {\n return {\n allow: true,\n riskScore: 0,\n reasons: result.reason ? [result.reason] : [],\n tags: {\n lawDecision: \"allow\",\n ...(result.applicable\n ? { lawApplicableArticles: result.applicable.length }\n : {}),\n },\n meta: result,\n };\n }\n\n if (result.decision === \"conditional\") {\n const mode = this.options.conditionalDecision ?? \"deny\";\n const reasons = [result.reason, result.explanation].filter(\n Boolean,\n ) as string[];\n\n if (mode === \"allow\") {\n return {\n allow: true,\n riskScore: 0,\n reasons,\n tags: {\n lawDecision: \"conditional\",\n },\n meta: result,\n };\n }\n\n if (mode === \"flag\") {\n return {\n action: \"FLAG\",\n scoreDelta: 25,\n reasons:\n reasons.length > 0\n ? reasons\n : [\n \"Execution is conditionally permitted pending additional requirements\",\n ],\n meta: result,\n };\n }\n\n return {\n action: \"DENY\",\n code: \"LAW_CONDITIONAL\",\n reason:\n reasons.join(\" | \") ||\n \"Execution is conditionally permitted pending additional requirements\",\n meta: { lawDecision: \"conditional\", evaluation: result },\n };\n }\n\n return {\n action: \"DENY\",\n code: \"LAW_DENIED\",\n reason:\n [result.reason, result.explanation].filter(Boolean).join(\" | \") ||\n \"Execution denied by law evaluation\",\n meta: { lawDecision: \"deny\", evaluation: result },\n };\n }\n}\n\nfunction sanitizeLawContext(\n context: AxisLawEvaluationContext,\n): Record<string, unknown> {\n return {\n actorId: context.actorId,\n intent: context.intent,\n audience: context.audience,\n tps: context.tps,\n country: context.country,\n ip: context.ip,\n path: context.path,\n clientId: context.clientId,\n deviceId: context.deviceId,\n sessionId: context.sessionId,\n capsuleId: context.capsuleId,\n };\n}\n","import * as z from \"zod\";\n\nimport { AxisFrameZ } from \"../core/axis-bin\";\n\n/**\n * AXIS Sensor Input/Output Validation Schemas\n *\n * Centralized Zod schemas for all sensor input validation.\n * Ensures type-safe, runtime-validated data across the entire sensor chain.\n *\n * Usage:\n * const input = CountryBlockSensorInputZ.parse(data);\n * const input = CountryBlockSensorInputZ.safeParse(data);\n */\n\n// ============================================================================\n// COMMON TYPES & UTILITIES\n// ============================================================================\n\n/**\n * Sensor decision outcomes (Zod version for schema composition)\n */\nexport const SensorDecisionZ = z.union([\n z.object({ action: z.literal(\"ALLOW\"), meta: z.any().optional() }),\n z.object({\n action: z.literal(\"DENY\"),\n code: z.string(),\n reason: z.string().optional(),\n meta: z.any().optional(),\n }),\n]);\n\nexport const SensorDecisionWithMetadataZ = z.union([\n z.object({ action: z.literal(\"ALLOW\"), meta: z.any().optional() }),\n z.object({\n action: z.literal(\"DENY\"),\n code: z.string(),\n reason: z.string().optional(),\n retryAfterMs: z.number().int().positive().optional(),\n meta: z.any().optional(),\n }),\n]);\n\n// ============================================================================\n// COUNTRY BLOCK SENSOR\n// ============================================================================\n\nexport const CountryBlockSensorInputZ = z.object({\n ip: z.string().min(1),\n country: z.string().length(2).toUpperCase().optional(),\n});\nexport type CountryBlockSensorInput = z.infer<typeof CountryBlockSensorInputZ>;\n\nexport const CountryBlockDecisionZ = SensorDecisionZ;\nexport type CountryBlockDecision = z.infer<typeof CountryBlockDecisionZ>;\n\n// ============================================================================\n// SCAN BURST SENSOR\n// ============================================================================\n\nexport const ScanBurstSensorInputZ = z.object({\n ip: z.string().min(1),\n isFailure: z.boolean().optional(),\n});\nexport type ScanBurstSensorInput = z.infer<typeof ScanBurstSensorInputZ>;\n\nexport const ScanBurstDecisionZ = SensorDecisionWithMetadataZ;\nexport type ScanBurstDecision = z.infer<typeof ScanBurstDecisionZ>;\n\n// ============================================================================\n// PROOF PRESENCE SENSOR\n// ============================================================================\n\nexport const ProofKindZ = z.enum([\n \"NONE\",\n \"ANONYMOUS\",\n \"PASSPORT\",\n \"CAPSULE\",\n \"JWT\",\n \"CONTRACT\",\n \"WITNESS\",\n \"MTLS\",\n \"DEVICE\",\n \"AUTHORIZED\",\n]);\nexport type ProofKind = z.infer<typeof ProofKindZ>;\n\nexport const AccessProfileZ = z.enum([\"PUBLIC\", \"PARTNER\", \"INTERNAL\", \"NODE\"]);\nexport type AccessProfile = z.infer<typeof AccessProfileZ>;\n\nexport const ProofPresenceInputZ = z.object({\n profile: AccessProfileZ,\n visibility: z.enum([\"PUBLIC\", \"GUARDED\"]),\n requiredProof: z.array(ProofKindZ).min(1),\n hasCapsule: z.boolean(),\n hasPassportSignature: z.boolean(),\n intent: z.string().min(1),\n});\nexport type ProofPresenceInput = z.infer<typeof ProofPresenceInputZ>;\n\n// ============================================================================\n// INTENT POLICY SENSOR\n// ============================================================================\n\nexport const SensitivityLevelZ = z.enum([\"LOW\", \"MEDIUM\", \"HIGH\", \"CRITICAL\"]);\nexport type SensitivityLevel = z.infer<typeof SensitivityLevelZ>;\n\nexport const IntentPolicyZ = z.object({\n intent: z.string().min(1),\n sensitivity: SensitivityLevelZ,\n maxFrameBytes: z.number().int().positive(),\n maxHeaderBytes: z.number().int().positive(),\n maxBodyBytes: z.number().int().positive(),\n maxSigBytes: z.number().int().positive().optional(),\n rateLimitPerMinute: z.number().int().positive().optional(),\n rateLimitPerHour: z.number().int().positive().optional(),\n requiresSignature: z.boolean(),\n requiresCapsule: z.boolean(),\n timeoutMs: z.number().int().positive(),\n});\nexport type IntentPolicy = z.infer<typeof IntentPolicyZ>;\n\nexport const IntentPolicySensorInputZ = z.object({\n frame: AxisFrameZ,\n intent: z.string().min(1),\n rawFrameSize: z.number().int().positive(),\n});\nexport type IntentPolicySensorInput = z.infer<typeof IntentPolicySensorInputZ>;\n\nexport const IntentPolicyDecisionZ = z.union([\n z.object({\n action: z.literal(\"ALLOW\"),\n policy: IntentPolicyZ,\n }),\n z.object({\n action: z.literal(\"DENY\"),\n reason: z.string(),\n }),\n]);\nexport type IntentPolicyDecision = z.infer<typeof IntentPolicyDecisionZ>;\n\n// ============================================================================\n// CAPSULE VERIFY SENSOR\n// ============================================================================\n\nexport const CapsuleClaimsZ = z.object({\n capsuleId: z.string().min(8),\n allowIntents: z.array(z.string()).min(1),\n limits: z\n .object({\n maxBodyBytes: z.number().int().positive().optional(),\n })\n .optional(),\n scopes: z.record(z.string(), z.any()).optional(),\n});\nexport type CapsuleClaims = z.infer<typeof CapsuleClaimsZ>;\n\nexport const CapsuleZ = z.object({\n id: z.string(),\n claims: CapsuleClaimsZ,\n issuedAt: z.number().int(),\n expiresAt: z.number().int(),\n tier: z.enum([\"FREE\", \"STANDARD\", \"PREMIUM\"]),\n});\nexport type Capsule = z.infer<typeof CapsuleZ>;\n\nexport const CapsuleValidationResultZ = z.object({\n valid: z.boolean(),\n capsule: CapsuleZ.optional(),\n reason: z.string().optional(),\n requiresStepUp: z.boolean().optional(),\n});\nexport type CapsuleValidationResult = z.infer<typeof CapsuleValidationResultZ>;\n\nexport const CapsuleVerifySensorInputZ = z.object({\n headers: z.map(\n z.number(),\n z.custom<Uint8Array>((v) => v instanceof Uint8Array),\n ),\n intent: z.string().min(1),\n ctx: z.any(), // AxisContext - avoid circular dependency\n});\nexport type CapsuleVerifySensorInput = z.infer<\n typeof CapsuleVerifySensorInputZ\n>;\n\nexport const CapsuleVerifyResultZ = z.object({\n ok: z.literal(true),\n capsule: CapsuleZ,\n});\nexport type CapsuleVerifyResult = z.infer<typeof CapsuleVerifyResultZ>;\n\n// ============================================================================\n// RATE LIMIT SENSOR\n// ============================================================================\n\nexport const RateLimitProfileZ = z.enum([\n \"PUBLIC\",\n \"PARTNER\",\n \"INTERNAL\",\n \"NODE\",\n]);\nexport type RateLimitProfile = z.infer<typeof RateLimitProfileZ>;\n\nexport const RateLimitInputZ = z.object({\n ip: z.string().min(1),\n userAgent: z.string().optional(),\n actorId: z.string().optional(),\n capsuleId: z.string().optional(),\n intent: z.string().min(1),\n profile: RateLimitProfileZ,\n});\nexport type RateLimitInput = z.infer<typeof RateLimitInputZ>;\n\nexport const RateLimitConfigZ = z.object({\n windowSec: z.number().int().positive(),\n max: z.number().int().positive(),\n key: z.enum([\"ip_fingerprint\", \"actor_capsule\"]),\n});\nexport type RateLimitConfig = z.infer<typeof RateLimitConfigZ>;\n\nexport const SensorResultZ = z.object({\n ok: z.literal(true),\n});\nexport type SensorResult = z.infer<typeof SensorResultZ>;\n\n// ============================================================================\n// SIGNATURE VERIFICATION SENSOR (Detailed)\n// ============================================================================\n\nexport const PassportZ = z.object({\n id: z.string(),\n public_key: z.custom<Buffer>((v) => Buffer.isBuffer(v)),\n status: z.enum([\"ACTIVE\", \"REVOKED\", \"EXPIRED\", \"PENDING\"]),\n issuedAt: z.number().int(),\n expiresAt: z.number().int().optional(),\n});\nexport const ExecutionMetricsZ = z.object({\n dbWrites: z.number().int(),\n dbReads: z.number().int(),\n externalCalls: z.number().int(),\n elapsedMs: z.number().int().optional(),\n});\n\nexport type Passport = z.infer<typeof PassportZ>;\n\n// ============================================================================\n// GENERAL SENSOR CHAIN INPUT\n// ============================================================================\n\nexport const SensorChainInputZ = z.object({\n ip: z.string().min(1),\n path: z.string().min(1),\n contentLength: z.number().int().nonnegative(),\n peek: z.instanceof(Uint8Array),\n country: z.string().optional(),\n});\nexport type SensorChainInput = z.infer<typeof SensorChainInputZ>;\n\n// ============================================================================\n// ENTROPY SENSOR\n// ============================================================================\n\nexport const EntropySensorInputZ = z.object({\n pid: z.custom<Buffer>((v) => Buffer.isBuffer(v)).optional(),\n nonce: z.custom<Buffer>((v) => Buffer.isBuffer(v)).optional(),\n ip: z.string().min(1),\n});\nexport type EntropySensorInput = z.infer<typeof EntropySensorInputZ>;\n\n// ============================================================================\n// PROTOCOL STRICT SENSOR\n// ============================================================================\n\nexport const ProtocolStrictInputZ = z.object({\n rawBytes: z\n .union([\n z.custom<Buffer>((v) => Buffer.isBuffer(v)),\n z.instanceof(Uint8Array),\n ])\n .optional(),\n ip: z.string().min(1),\n path: z.string().min(1),\n contentLength: z.number().int().nonnegative(),\n peek: z.instanceof(Uint8Array),\n country: z.string().optional(),\n contentType: z.string().optional(),\n});\nexport type ProtocolStrictInput = z.infer<typeof ProtocolStrictInputZ>;\n\n// ============================================================================\n// SCHEMA VALIDATION SENSOR\n// ============================================================================\n\nexport const SchemaFieldKindZ = z.enum([\n \"utf8\",\n \"u64\",\n \"bytes\",\n \"bytes16\",\n \"bool\",\n \"obj\",\n \"arr\",\n]);\nexport type SchemaFieldKind = z.infer<typeof SchemaFieldKindZ>;\n\nexport const ScopeZ = z.enum([\"header\", \"body\"]);\nexport type Scope = z.infer<typeof ScopeZ>;\n\nexport const SchemaFieldZ = z.object({\n name: z.string().min(1),\n tlv: z.number().int().positive(),\n kind: SchemaFieldKindZ,\n required: z.boolean().optional(),\n maxLen: z.number().int().positive().optional(),\n max: z.string().optional(),\n scope: ScopeZ.optional(),\n});\nexport type SchemaField = z.infer<typeof SchemaFieldZ>;\n\nexport const BodyProfileZ = z.enum([\"TLV_MAP\", \"RAW\", \"TLV_OBJ\", \"TLV_ARR\"]);\nexport type BodyProfile = z.infer<typeof BodyProfileZ>;\n\nexport const IntentSchemaZ = z.object({\n intent: z.string().min(1),\n version: z.number().int().positive(),\n bodyProfile: BodyProfileZ,\n fields: z.array(SchemaFieldZ).min(1),\n});\nexport type IntentSchema = z.infer<typeof IntentSchemaZ>;\n\n// ============================================================================\n// WEBSOCKET HANDSHAKE SENSOR\n// ============================================================================\n\nexport const WsHandshakeInputZ = z.object({\n clientId: z.string().min(1),\n isWs: z.boolean(),\n ip: z.string().min(1),\n});\nexport type WsHandshakeInput = z.infer<typeof WsHandshakeInputZ>;\n\nexport const WsHandshakeDecisionZ = z.union([\n z.object({ action: z.literal(\"ALLOW\") }),\n z.object({ action: z.literal(\"DENY\"), code: z.string() }),\n]);\nexport type WsHandshakeDecision = z.infer<typeof WsHandshakeDecisionZ>;\n\n// ============================================================================\n// IP REPUTATION SENSOR\n// ============================================================================\n\nexport const IPReputationInputZ = z.object({\n ip: z.string().min(1),\n});\nexport type IPReputationInput = z.infer<typeof IPReputationInputZ>;\n\nexport const IPReputationZ = z.object({\n score: z.number().min(-100).max(100),\n lastUpdated: z.number().int(),\n totalRequests: z.number().int().nonnegative(),\n failedRequests: z.number().int().nonnegative(),\n blockedRequests: z.number().int().nonnegative(),\n tags: z.array(z.string()),\n});\nexport type IPReputation = z.infer<typeof IPReputationZ>;\n\n// ============================================================================\n// FILE UPLOAD STATE SENSOR\n// ============================================================================\n\nexport const UploadStatusZ = z.enum([\n \"INIT\",\n \"UPLOADING\",\n \"FINALIZING\",\n \"DONE\",\n \"ABORTED\",\n]);\nexport type UploadStatus = z.infer<typeof UploadStatusZ>;\n\nexport const UploadSessionZ = z.object({\n uploadIdHex: z.string().min(1),\n fileName: z.string().min(1),\n totalSize: z.number().int().positive(),\n chunkSize: z.number().int().positive(),\n totalChunks: z.number().int().positive(),\n receivedCount: z.number().int().nonnegative(),\n status: UploadStatusZ,\n});\nexport type UploadSession = z.infer<typeof UploadSessionZ>;\n\n// ============================================================================\n// BODY BUDGET SENSOR\n// ============================================================================\n\nexport const BodyBudgetInputZ = z.object({\n intent: z.string().min(1),\n headerLen: z.number().int().nonnegative(),\n bodyLen: z.number().int().nonnegative(),\n});\nexport type BodyBudgetInput = z.infer<typeof BodyBudgetInputZ>;\n\nexport const BodyBudgetPolicyZ = z.object({\n maxHeaderBytes: z.number().int().positive(),\n maxBodyBytes: z.number().int().positive(),\n});\nexport type BodyBudgetPolicy = z.infer<typeof BodyBudgetPolicyZ>;\n\n// ============================================================================\n// CHUNK HASH SENSOR\n// ============================================================================\n\nexport const ChunkHashInputZ = z.object({\n headerTLVs: z.any(), // Map<number, Uint8Array> - flexible validation for compatibility\n bodyBytes: z.any(), // Uint8Array - flexible validation for compatibility\n intent: z.string().min(1),\n});\nexport type ChunkHashInput = z.infer<typeof ChunkHashInputZ>;\n\n// ============================================================================\n// AXIS CONTEXT (Request Context across sensors)\n// ============================================================================\n\nexport enum ProofType {\n CAPSULE = 1,\n JWT = 2,\n MTLS_ID = 3,\n DEVICE_SE = 4,\n WITNESS_SIG = 5,\n}\n\nexport const AxisContextZ = z.object({\n pid: z.custom<Buffer>((v) => Buffer.isBuffer(v)), // Process ID\n ts: z.bigint(), // Timestamp\n intent: z.string().min(1),\n actorId: z.custom<Buffer>((v) => Buffer.isBuffer(v)),\n proofType: z.enum(ProofType),\n proofRef: z.custom<Buffer>((v) => Buffer.isBuffer(v)),\n nonce: z.custom<Buffer>((v) => Buffer.isBuffer(v)),\n ip: z.string().min(1),\n nodeCertHash: z.string().optional(),\n capsule: CapsuleZ.optional(),\n passport: PassportZ.optional(),\n meter: z.any().optional(), // ExecutionMeter instance - any to avoid circular dependency and allow class instance\n});\n\nexport type AxisContext = z.infer<typeof AxisContextZ>;\n\n// ============================================================================\n// ERROR HANDLING\n// ============================================================================\n\nexport const AxisErrorZ = z.object({\n code: z.string(),\n message: z.string(),\n httpStatus: z.number().int(),\n});\nexport type AxisError = z.infer<typeof AxisErrorZ>;\n","import { Sensor } from \"../decorators/sensor.decorator\";\nimport { BAND } from \"../engine/sensor-bands\";\nimport {\n ProofPresenceInput,\n ProofPresenceInputZ,\n} from \"../schemas/axis-schemas\";\nimport { AxisError } from \"../core/axis-error\";\nimport { AxisSensor, SensorDecision } from \"../sensor/axis-sensor\";\n\n@Sensor()\nexport class ProofPresenceSensor implements AxisSensor {\n readonly name = \"ProofPresenceSensor\";\n readonly order = BAND.IDENTITY + 30;\n\n // supports() is a synchronous applicability gate.\n // Return false to skip this sensor without producing a denial.\n supports(input: ProofPresenceInput): boolean {\n return !!input.profile && !!input.visibility;\n }\n\n // run() executes only after supports() passes.\n // Return the actual ALLOW/DENY/FLAG/THROTTLE decision here.\n async run(input: ProofPresenceInput): Promise<SensorDecision> {\n // Validate input with Zod\n const validatedInput = ProofPresenceInputZ.safeParse(input);\n if (!validatedInput.success) {\n throw new AxisError(\n \"SENSOR_INVALID_INPUT\",\n `Input validation failed: ${validatedInput.error.message}`,\n 400,\n );\n }\n\n const {\n visibility,\n requiredProof,\n hasCapsule,\n hasPassportSignature,\n profile,\n intent,\n } = validatedInput.data;\n\n // Public intents don't require proof\n if (visibility === \"PUBLIC\") {\n return { action: \"ALLOW\" };\n }\n\n // If NONE is in required proofs, allow without proof\n if (requiredProof.includes(\"NONE\")) {\n return { action: \"ALLOW\" };\n }\n\n // Check if any required proof is satisfied\n const hasCapsuleProof = requiredProof.includes(\"CAPSULE\") && hasCapsule;\n const hasPassportProof =\n requiredProof.includes(\"PASSPORT\") && hasPassportSignature;\n const hasNodeProof = requiredProof.includes(\"MTLS\") && profile === \"NODE\";\n\n const satisfied = hasCapsuleProof || hasPassportProof || hasNodeProof;\n\n if (!satisfied) {\n throw new AxisError(\n \"SENSOR_PROOF_REQUIRED\",\n `Proof required for guarded intent: ${intent}`,\n 403,\n );\n }\n\n return { action: \"ALLOW\" };\n }\n}\n","import { Sensor } from \"../decorators/sensor.decorator\";\nimport { BAND } from \"../engine/sensor-bands\";\nimport { ProtocolStrictInputZ } from \"../schemas/axis-schemas\";\nimport { AxisSensor } from \"../sensor/axis-sensor\";\nimport {\n AXIS_MAGIC,\n AXIS_VERSION,\n AxisMediaTypes,\n FLAG_BODY_TLV,\n FLAG_CHAIN_REQ,\n FLAG_HAS_WITNESS,\n} from \"../core/constants\";\nimport { decodeVarint } from \"../core/varint\";\nimport { SensorDecision, SensorInput } from \"../sensor/axis-sensor\";\n\n/**\n * Valid flag combinations for AXIS frames.\n *\n * Flags can be combined using bitwise OR:\n * - 0x00: No flags (basic request)\n * - FLAG_BODY_TLV: Body section contains TLV-encoded data\n * - FLAG_CHAIN_REQ: Request requires receipt chaining\n * - FLAG_HAS_WITNESS: Frame includes witness signatures\n *\n * Any other flag combination is considered invalid.\n */\nconst VALID_FLAGS = [\n 0x00, // No flags\n FLAG_BODY_TLV, // Body contains TLVs\n FLAG_CHAIN_REQ, // Requires receipt chaining\n FLAG_HAS_WITNESS, // Has witness signatures\n FLAG_BODY_TLV | FLAG_CHAIN_REQ,\n FLAG_BODY_TLV | FLAG_HAS_WITNESS,\n FLAG_CHAIN_REQ | FLAG_HAS_WITNESS,\n FLAG_BODY_TLV | FLAG_CHAIN_REQ | FLAG_HAS_WITNESS,\n];\n\n/**\n * Protocol Strict Sensor - Binary Protocol Validation Gateway\n *\n * **CRITICAL SECURITY COMPONENT - FIRST LINE OF DEFENSE**\n *\n * This sensor validates the raw binary structure of incoming AXIS frames before\n * any further processing occurs. It acts as the protocol gatekeeper, ensuring\n * only well-formed, spec-compliant frames are processed by the system.\n *\n * **Execution Order:** 10 (FIRST sensor in the chain)\n *\n * **Core Concept:**\n * AXIS uses a custom binary wire format for efficiency and security. This sensor\n * validates the frame structure at the byte level, catching malformed packets\n * before they can exploit parsing vulnerabilities deeper in the stack.\n *\n * **Frame Structure Validated:**\n * ```\n * +-------+-------+-------+-------+-------+-------+-------+...\n * | MAGIC (5 bytes: \"AXIS1\") | VER | FLAGS | HDR_LEN (varint)\n * +-------+-------+-------+-------+-------+-------+-------+...\n * | BODY_LEN (varint) | SIG_LEN (varint) | HDR TLVs... |\n * +-------+-------+-------+-------+-------+-------+-------+...\n * | BODY... | SIGNATURE... |\n * +-------+-------+-------+-------+-------+-------+-------+...\n * ```\n *\n * **Validations Performed:**\n * 1. **Content-Type** - Must be `application/axis-bin` or similar\n * 2. **Magic Bytes** - Must be \"AXIS1\" (5 bytes)\n * 3. **Version** - Must match AXIS_VERSION constant\n * 4. **Flags** - Must be a valid combination\n * 5. **Varint Encoding** - Must be minimal (no unnecessary bytes)\n * 6. **TLV Ordering** - Must be canonical (sorted by type)\n * 7. **Client Version** - TLV 100 should be present\n *\n * **Security Model:**\n * - **Fail Closed:** Invalid magic/version = DENY\n * - **Flag for Minor Issues:** Non-critical violations decrease trust score\n * - **Defense in Depth:** First of multiple validation layers\n *\n * **Actions:**\n * - `ALLOW` - Frame is well-formed and spec-compliant\n * - `DENY` - Critical protocol violation (magic, version, frame too short)\n * - `FLAG` - Minor issues that decrease trust score\n *\n * **Performance:**\n * - Validates first 20 bytes of each frame\n * - No external dependencies (pure byte validation)\n * - Latency: <1ms for typical frames\n *\n * @class ProtocolStrictSensor\n * @implements {AxisSensor}\n * @implements {OnModuleInit}\n *\n * @example\n * Valid AXIS frame:\n * ```typescript\n * // Frame starts with: \"AXIS1\" + version(1) + flags(0x01) + lengths...\n * // Sensor returns: { action: 'ALLOW' }\n * ```\n *\n * @example\n * Invalid magic bytes:\n * ```typescript\n * // Frame starts with: \"HTTP1\" (wrong protocol)\n * // Sensor returns: {\n * // action: 'DENY',\n * // code: 'INVALID_MAGIC',\n * // reason: 'Expected AXIS1 magic, got HTTP1'\n * // }\n * ```\n *\n * @see {@link https://axis-spec.example.com/wire-format AXIS Wire Format Spec}\n */\n@Sensor({ phase: \"PRE_DECODE\" })\nexport class ProtocolStrictSensor implements AxisSensor {\n private readonly logger = {\n error: (msg: string, ...args: unknown[]) =>\n console.error(`[ProtocolStrictSensor] ${msg}`, ...args),\n debug: (msg: string) => void 0,\n warn: (msg: string) => console.warn(`[ProtocolStrictSensor] ${msg}`),\n };\n\n /** Sensor identifier for logging and registry */\n readonly name = \"ProtocolStrictSensor\";\n\n /**\n * Execution order - FIRST sensor in the chain\n *\n * Order 10 ensures:\n * - Runs before any other processing\n * - Invalid frames rejected immediately\n * - Protects all downstream sensors from malformed input\n */\n readonly order = BAND.WIRE + 10;\n\n private protocolMagic: Uint8Array = AXIS_MAGIC;\n private protocolVersion = AXIS_VERSION;\n\n /**\n * Static validation for streaming middleware (Fast Check)\n */\n public static validateMagic(\n chunk: Uint8Array,\n expected: Uint8Array,\n ): { valid: boolean; actual?: string } {\n if (chunk.length < expected.length) return { valid: true }; // Not enough data yet\n const actual = chunk.subarray(0, expected.length);\n const valid = Buffer.from(actual).equals(Buffer.from(expected));\n return {\n valid,\n actual: valid ? undefined : new TextDecoder().decode(actual),\n };\n }\n\n public static validateVersion(version: number, expected: number): boolean {\n return version === expected;\n }\n\n /**\n * Lifecycle hook: Load config overrides on module initialization.\n */\n onModuleInit() {\n const magicStr = process.env[\"AXIS_PROTOCOL_MAGIC\"];\n this.protocolMagic = magicStr ? Buffer.from(magicStr, \"ascii\") : AXIS_MAGIC;\n const versionStr = process.env[\"AXIS_PROTOCOL_VERSION\"];\n this.protocolVersion = versionStr ? Number(versionStr) : AXIS_VERSION;\n }\n\n /**\n * Evaluate protocol strictness\n */\n // This sensor does not define supports(), so it is applicable whenever registered.\n // run() returns the actual ALLOW/DENY/FLAG/THROTTLE decision.\n async run(input: SensorInput): Promise<SensorDecision> {\n const validatedInput = ProtocolStrictInputZ.safeParse(input);\n if (!validatedInput.success) {\n this.logger.error(\n `Invalid input: ${validatedInput.error.message}`,\n validatedInput.error.issues,\n );\n return {\n action: \"DENY\",\n code: \"INVALID_INPUT\",\n reason: \"Protocol validation input failed\",\n };\n }\n\n const { contentType, peek } = validatedInput.data;\n const issues: string[] = [];\n\n // Debug: Log first 10 bytes\n if (peek.length >= 8) {\n const hex = Buffer.from(peek.subarray(0, 10)).toString(\"hex\");\n this.logger.debug(`Raw Frame Header (Hex): ${hex} (IP: ${input.ip})`);\n }\n\n // 1. Check Content-Type header (HTTP only)\n if (contentType !== undefined) {\n if (!this.isValidContentType(contentType)) {\n issues.push(`invalid_content_type:${contentType}`);\n }\n }\n\n // Need at least 9 bytes for basic frame header (Magic:5, Ver:1, Flags:1, HLen:1, BLen:1, SLen:1)\n if (peek.length < 9) {\n return {\n action: \"DENY\",\n code: \"FRAME_TOO_SHORT\",\n reason: \"Frame too short for protocol header\",\n };\n }\n\n // 2. Check magic bytes\n const magicCheck = ProtocolStrictSensor.validateMagic(\n peek,\n this.protocolMagic,\n );\n if (!magicCheck.valid) {\n return {\n action: \"DENY\",\n code: \"INVALID_MAGIC\",\n reason: `Expected ${new TextDecoder().decode(this.protocolMagic)} magic, got ${magicCheck.actual}`,\n };\n }\n\n // 3. Check version (Offset 5)\n const version = peek[5];\n if (!ProtocolStrictSensor.validateVersion(version, this.protocolVersion)) {\n issues.push(`unsupported_version:${version}`);\n }\n\n // 4. Check flags validity (Offset 6)\n const flags = peek[6];\n if (!this.isValidFlags(flags)) {\n issues.push(`invalid_flags:0x${flags.toString(16)}`);\n }\n\n // 5. Check length encoding (varints should be minimal) - Starts at Offset 7\n if (peek.length >= 10) {\n const lengthCheck = this.checkVarintEncoding(peek.subarray(7));\n if (!lengthCheck.valid) {\n issues.push(`non_minimal_varint:${lengthCheck.reason}`);\n }\n }\n\n // 6. Check TLV ordering if we have enough data\n if (peek.length >= 20) {\n const tlvCheck = this.checkTLVOrdering(peek);\n if (!tlvCheck.valid) {\n issues.push(`tlv_not_canonical:${tlvCheck.reason}`);\n }\n\n // 7. Check Client Version (TLV 100) presence\n const hasClientVersion = await this.checkForClientVersion(peek);\n if (!hasClientVersion) {\n // Warn for now (Phase 7 Soft Rollout)\n issues.push(\"missing_client_version\");\n }\n }\n\n // Return FLAG for minor issues, DENY for critical\n if (issues.length > 0) {\n // Check for critical issues\n const critical = issues.some(\n (i) =>\n i.startsWith(\"invalid_magic\") || i.startsWith(\"unsupported_version\"),\n );\n\n if (critical) {\n return {\n action: \"DENY\",\n code: \"PROTOCOL_VIOLATION\",\n reason: issues.join(\", \"),\n };\n }\n\n this.logger.warn(\n `Protocol issues from ${input.ip}: ${issues.join(\", \")}`,\n );\n return {\n action: \"FLAG\",\n scoreDelta: -issues.length * 2,\n reasons: issues,\n };\n }\n\n return { action: \"ALLOW\" };\n }\n\n /**\n * Compare two buffers for equality\n */\n private buffersEqual(a: Uint8Array, b: Uint8Array): boolean {\n if (a.length !== b.length) return false;\n for (let i = 0; i < a.length; i++) {\n if (a[i] !== b[i]) return false;\n }\n return true;\n }\n\n /**\n * Check if Content-Type is valid for AXIS\n */\n private isValidContentType(contentType: string): boolean {\n return AxisMediaTypes.isAxisContentType(contentType);\n }\n\n /**\n * Check if flags are a valid combination\n */\n private isValidFlags(flags: number): boolean {\n return VALID_FLAGS.includes(flags);\n }\n\n /**\n * Check varint encoding is minimal (no leading zeros)\n */\n private checkVarintEncoding(data: Uint8Array): {\n valid: boolean;\n reason?: string;\n } {\n try {\n const { value, length: bytesRead } = decodeVarint(data, 0);\n\n // Check for non-minimal encoding\n // A varint should use the minimum number of bytes\n if (value < 128 && bytesRead > 1) {\n return { valid: false, reason: \"non-minimal-small-value\" };\n }\n if (value < 16384 && bytesRead > 2) {\n return { valid: false, reason: \"non-minimal-medium-value\" };\n }\n\n return { valid: true };\n } catch {\n return { valid: false, reason: \"varint-decode-error\" };\n }\n }\n\n /**\n * Check TLV ordering is canonical (sorted by type, no duplicates)\n */\n private checkTLVOrdering(data: Uint8Array): {\n valid: boolean;\n reason?: string;\n } {\n // This is a simplified check - full check would require decoding the frame\n // For now, we do a heuristic check on the first few TLVs\n\n try {\n // Skip to length section (after magic, version, flags)\n let offset = 7;\n\n // Decode header length\n const { value: hdrLen, length: hdrBytes } = decodeVarint(data, offset);\n offset += hdrBytes;\n\n // Decode body length\n const { length: bodyBytes } = decodeVarint(data, offset);\n offset += bodyBytes;\n\n // Decode sig length\n const { length: sigBytes } = decodeVarint(data, offset);\n offset += sigBytes;\n\n // Now at HDR TLVs\n const hdrStart = offset;\n const hdrEnd = hdrStart + Number(hdrLen);\n\n if (hdrEnd > data.length) {\n return { valid: true }; // Not enough data to check\n }\n\n // Check TLV types are ascending\n let lastType = -1;\n let pos = hdrStart;\n\n while (pos < hdrEnd && pos < data.length - 2) {\n const { value: type, length: typeBytes } = decodeVarint(data, pos);\n pos += typeBytes;\n\n if (pos >= hdrEnd) break;\n\n const { value: len, length: lenBytes } = decodeVarint(data, pos);\n pos += lenBytes;\n\n // Check ordering\n if (Number(type) <= lastType) {\n return {\n valid: false,\n reason: `type-${type}-after-${lastType}`,\n };\n }\n\n lastType = Number(type);\n pos += Number(len);\n }\n\n return { valid: true };\n } catch {\n return { valid: true }; // On error, don't block\n }\n }\n\n /**\n * Check if TLV 100 (Client Version) exists in the headers\n */\n private async checkForClientVersion(data: Uint8Array): Promise<boolean> {\n try {\n let offset = 7;\n const { value: hdrLen, length: hdrBytes } = decodeVarint(data, offset);\n offset += hdrBytes;\n const { length: bodyBytes } = decodeVarint(data, offset);\n offset += bodyBytes;\n const { length: sigBytes } = decodeVarint(data, offset);\n offset += sigBytes;\n\n const hdrEnd = offset + Number(hdrLen);\n\n let pos = offset;\n while (pos < hdrEnd && pos < data.length) {\n const { value: type, length: typeBytes } = decodeVarint(data, pos);\n pos += typeBytes;\n const { length: lenBytes } = decodeVarint(data, pos); // value not needed\n pos += lenBytes;\n\n const { value: valLen, length: valLenBytes } = decodeVarint(\n data,\n pos - lenBytes,\n ); // reread legnth\n\n // Correct interaction: varint includes bytes read.\n // decodeVarint returns { value, length } -> length is how many bytes the varint took.\n // Wait, I need to read the length value to skip.\n\n // Re-do loop structure correctly:\n // 1. Read Type\n // 2. Read Length\n // 3. Skip Value\n }\n\n // Let's use a simpler heuristic scan for now as full parse is expensive here\n // and done elsewhere. But for correctness let's do it right.\n\n pos = offset;\n while (pos < hdrEnd && pos < data.length) {\n const t = decodeVarint(data, pos);\n pos += t.length;\n const l = decodeVarint(data, pos);\n pos += l.length;\n\n if (t.value === 100) return true;\n\n pos += Number(l.value);\n }\n\n return false;\n } catch {\n return false;\n }\n }\n}\n","\nimport { Sensor } from '../decorators/sensor.decorator';\nimport { BAND } from '../engine/sensor-bands';\nimport { AxisSensor, SensorDecision } from '../sensor/axis-sensor';\n\n@Sensor()\nexport class ReceiptPolicySensor implements AxisSensor {\n readonly name = 'ReceiptPolicySensor';\n readonly order = BAND.BUSINESS + 20;\n\n // supports() is a synchronous applicability gate.\n // Return false to skip this sensor without producing a denial.\n supports(): boolean {\n return true;\n }\n\n // run() executes only after supports() passes.\n // Return the actual ALLOW/DENY/FLAG/THROTTLE decision here.\n async run(): Promise<SensorDecision> {\n // Stub: allow. Real impl defines which intents must yield signed receipts.\n return { action: 'ALLOW' };\n }\n}\n","\nimport { Sensor } from '../decorators/sensor.decorator';\nimport { BAND } from '../engine/sensor-bands';\nimport type { RiskSignal, RiskEvaluation } from '../risk';\nimport { RiskDecision } from '../risk';\nimport type { AxisSensor, SensorDecision, SensorInput } from '../sensor/axis-sensor';\n\n/**\n * Risk signal collector function.\n * Implementations gather signals from the request context\n * (anomaly scores, geo risk, velocity checks, device fingerprint, etc.)\n */\nexport type RiskSignalCollector = (\n input: SensorInput,\n) => Promise<RiskSignal[]> | RiskSignal[];\n\n/**\n * Configuration for the Risk Gate Sensor.\n */\nexport interface RiskGateSensorOptions {\n /**\n * One or more collectors that produce RiskSignals.\n * All collectors run and their signals are aggregated.\n */\n collectors: RiskSignalCollector[];\n\n /**\n * Risk score threshold at which the sensor denies (0–100).\n * Defaults to 75.\n */\n denyThreshold?: number;\n\n /**\n * Risk score threshold at which the sensor flags but allows (0–100).\n * Defaults to 40.\n */\n flagThreshold?: number;\n}\n\n/** Map severity to a numeric weight */\nconst SEVERITY_WEIGHT: Record<RiskSignal['severity'], number> = {\n low: 10,\n medium: 25,\n high: 50,\n critical: 100,\n};\n\n/**\n * Risk Gate Sensor — Aggregates risk signals into a gate decision.\n *\n * Collects signals from pluggable collectors, computes a weighted\n * aggregate risk score, and translates RiskDecision into a\n * SensorDecision the chain can enforce.\n *\n * Runs in the BUSINESS band so all identity, policy, and content\n * sensors have already contributed their metadata.\n */\n@Sensor()\nexport class RiskGateSensor implements AxisSensor {\n readonly name = 'RiskGateSensor';\n readonly order = BAND.BUSINESS + 10;\n\n private readonly collectors: RiskSignalCollector[];\n private readonly denyThreshold: number;\n private readonly flagThreshold: number;\n\n constructor(options: RiskGateSensorOptions) {\n this.collectors = options.collectors;\n this.denyThreshold = options.denyThreshold ?? 75;\n this.flagThreshold = options.flagThreshold ?? 40;\n }\n\n // This sensor does not define supports(), so it is applicable whenever registered.\n // run() returns the actual ALLOW/DENY/FLAG/THROTTLE decision.\n async run(input: SensorInput): Promise<SensorDecision> {\n // Collect all signals in parallel\n const results = await Promise.all(\n this.collectors.map((c) => c(input)),\n );\n const signals: RiskSignal[] = results.flat();\n\n // Aggregate: weighted mean of severity scores, capped at 100\n let totalWeight = 0;\n let weightedSum = 0;\n for (const signal of signals) {\n const w = SEVERITY_WEIGHT[signal.severity];\n totalWeight += 1;\n weightedSum += w;\n }\n const aggregateScore =\n totalWeight > 0 ? Math.min(100, Math.round(weightedSum / totalWeight)) : 0;\n\n // Evaluate\n const evaluation = this.evaluate(aggregateScore, signals);\n\n // Store evaluation in metadata for downstream consumers\n input.metadata = {\n ...(input.metadata ?? {}),\n riskEvaluation: evaluation,\n };\n\n if (evaluation.decision === RiskDecision.DENY) {\n return {\n allow: false,\n riskScore: aggregateScore,\n reasons: signals.map((s) => s.message),\n code: 'RISK_GATE_DENY',\n tags: { riskDecision: evaluation.decision, signalCount: signals.length },\n };\n }\n\n if (evaluation.decision === RiskDecision.THROTTLE) {\n return {\n allow: false,\n riskScore: aggregateScore,\n reasons: signals.map((s) => s.message),\n code: 'RISK_GATE_THROTTLE',\n retryAfterMs: evaluation.retryAfterMs,\n tags: { riskDecision: evaluation.decision, signalCount: signals.length },\n };\n }\n\n // ALLOW, STEP_UP, WITNESS, FLAG — allow but propagate score\n return {\n allow: true,\n riskScore: aggregateScore,\n reasons: signals\n .filter((s) => s.severity === 'medium' || s.severity === 'high')\n .map((s) => s.message),\n tags: {\n riskDecision: evaluation.decision,\n signalCount: signals.length,\n },\n };\n }\n\n private evaluate(\n score: number,\n signals: RiskSignal[],\n ): RiskEvaluation {\n // Any critical signal → immediate DENY\n const hasCritical = signals.some((s) => s.severity === 'critical');\n if (hasCritical) {\n return {\n decision: RiskDecision.DENY,\n reason: 'Critical risk signal detected',\n confidence: 1,\n signals,\n };\n }\n\n if (score >= this.denyThreshold) {\n return {\n decision: RiskDecision.DENY,\n reason: `Aggregate risk score ${score} exceeds deny threshold ${this.denyThreshold}`,\n confidence: score / 100,\n signals,\n };\n }\n\n if (score >= this.flagThreshold) {\n return {\n decision: RiskDecision.STEP_UP,\n reason: `Aggregate risk score ${score} exceeds flag threshold ${this.flagThreshold}`,\n confidence: score / 100,\n signals,\n };\n }\n\n return {\n decision: RiskDecision.ALLOW,\n confidence: 1 - score / 100,\n signals,\n };\n }\n}\n","\nimport { Sensor } from '../decorators/sensor.decorator';\nimport { BAND } from '../engine/sensor-bands';\nimport { IntentSchema, IntentSchemaZ } from '../schemas/axis-schemas';\nimport { AxisSensor, SensorDecision } from '../sensor/axis-sensor';\nimport { AxisError } from '../core/axis-error';\nimport type { TlvValidatorFn } from '../decorators/tlv-field.decorator';\n\n/**\n * Reads a big-endian unsigned 64-bit integer from a byte array.\n *\n * @param {Uint8Array} b - 8-byte array\n * @returns {bigint} The decoded integer\n * @throws {AxisError} If array is not exactly 8 bytes\n */\nfunction readU64be(b: Uint8Array): bigint {\n if (b.length !== 8)\n throw new AxisError('SCHEMA_TYPE_MISMATCH', 'u64 must be 8 bytes', 400);\n let x = 0n;\n for (const by of b) x = (x << 8n) | BigInt(by);\n return x;\n}\n\n/**\n * Schema Validation Sensor - TLV Field Contract Enforcement\n *\n * Validates that incoming request bodies conform to the defined intent schema.\n * This ensures type safety and data integrity before handler execution.\n *\n * **Execution Order:** 170 (late in pipeline, after all auth/policy checks)\n *\n * **Core Concept:**\n * Every AXIS intent can define a schema that specifies:\n * - Required fields and their TLV types\n * - Field types (utf8, bytes, u64, bool, etc.)\n * - Size limits per field\n * - Scope (header or body)\n *\n * The sensor validates each field against its schema definition, rejecting\n * requests that violate the contract.\n *\n * **Supported Field Types:**\n * | Kind | Description | Validation |\n * |------|-------------|------------|\n * | `utf8` | UTF-8 string | Valid UTF-8 encoding |\n * | `bool` | Boolean | 1 byte: 0x00 or 0x01 |\n * | `u64` | Unsigned 64-bit int | Exactly 8 bytes, big-endian |\n * | `bytes16` | Fixed 16 bytes | Exactly 16 bytes (UUIDs) |\n * | `bytes` | Variable bytes | Any length up to maxLen |\n * | `obj` | Nested object | (Reserved for future) |\n * | `arr` | Array | (Reserved for future) |\n *\n * **How It Works:**\n * ```\n * 1. Validate schema structure with Zod\n * 2. For each field in schema:\n * a. Look up TLV in headers or body (based on scope)\n * b. Check if field is required\n * c. Check size against maxLen\n * d. Validate type (utf8 encoding, bool values, etc.)\n * 3. Throw AxisError on any violation\n * ```\n *\n * **Security Model:**\n * - **Fail Closed:** Schema violations throw errors (no silent failures)\n * - **Pre-Handler:** All validation happens before handler execution\n * - **Type-Safe:** Handlers receive type-validated data\n *\n * **Error Codes:**\n * - `SCHEMA_INVALID` - Schema itself is malformed\n * - `SCHEMA_FIELD_MISSING` - Required field not present\n * - `SCHEMA_LIMIT_EXCEEDED` - Field exceeds maxLen or max value\n * - `SCHEMA_TYPE_MISMATCH` - Field type doesn't match expected\n *\n * **Performance:**\n * - In-memory validation (no I/O)\n * - O(n) where n = number of schema fields\n * - Latency: ~1-5ms for typical schemas\n *\n * @class SchemaValidationSensor\n * @implements {OnModuleInit}\n *\n * @example\n * Valid schema validation:\n * ```typescript\n * const schema = {\n * fields: [\n * { name: 'fullName', tlv: 100, kind: 'utf8', required: true, maxLen: 256 },\n * { name: 'age', tlv: 101, kind: 'u64', max: 150 }\n * ]\n * };\n * // Body TLVs contain valid data\n * { ok: true }\n * ```\n *\n * @example\n * Missing required field:\n * ```typescript\n * // TLV 100 (fullName) not present in body\n * throw AxisError('SCHEMA_FIELD_MISSING',\n * 'Missing required field: fullName (TLV 100)', 400);\n * ```\n *\n * @see {@link IntentSchema}\n */\n@Sensor()\nexport class SchemaValidationSensor implements AxisSensor {\n /** Sensor identifier for logging and registry */\n readonly name = 'SchemaValidationSensor';\n\n /**\n * Execution order - runs late in the pipeline\n *\n * Order 170 ensures:\n * - All authentication complete\n * - All policy checks complete\n * - Data validated before handler execution\n */\n readonly order = BAND.CONTENT + 35;\n\n /**\n * Determines if this sensor should process the given input.\n *\n * Only activates when a schema is provided for the intent (post-decode phase).\n *\n * @param {any} input - Sensor input\n * @returns {Promise<SensorDecision>} Allow when a schema exists, deny otherwise\n */\n // supports() is a synchronous applicability gate.\n // Return false to skip this sensor without producing a denial.\n supports(input: any): boolean {\n // Only run in post-decode phase when schema is provided\n return !!input.metadata?.schema;\n }\n\n /**\n * Validates TLV fields against the schema definition.\n *\n * **Validation Steps:**\n * 1. Validate the schema itself using Zod\n * 2. Iterate through each field definition\n * 3. Check required fields are present\n * 4. Validate size limits (maxLen)\n * 5. Validate type-specific rules\n *\n * @param {any} input - Standard SensorInput\n * @returns {{ action: 'ALLOW' } | { action: 'DENY', code: string, reason: string }} Decision\n */\n // run() executes only after supports() passes.\n // Return the actual ALLOW/DENY/FLAG/THROTTLE decision here.\n async run(\n input: any,\n ): Promise<\n { action: 'ALLOW' } | { action: 'DENY'; code: string; reason: string }\n > {\n const schema = input.metadata?.schema as IntentSchema;\n const headerTLVs = input.headerTLVs as Map<number, Uint8Array>;\n const bodyTLVs = input.bodyTLVs as Map<number, Uint8Array> | undefined;\n\n // If no schema, allow (no validation needed)\n if (!schema) {\n return { action: 'ALLOW' };\n }\n\n // === STEP 1: Validate Schema Structure ===\n const validatedSchema = IntentSchemaZ.safeParse(schema);\n if (!validatedSchema.success) {\n return {\n action: 'DENY',\n code: 'SCHEMA_INVALID',\n reason: `Schema validation failed: ${validatedSchema.error.message}`,\n };\n }\n\n // === STEP 2: Validate Each Field ===\n try {\n for (const field of schema.fields) {\n // Determine which TLV map to use (header or body)\n const scope = field.scope ?? 'body';\n const map = scope === 'header' ? headerTLVs : bodyTLVs;\n\n // Get the field value from the appropriate map\n const val = map?.get(field.tlv);\n\n // === Check Required Fields ===\n if (field.required && !val) {\n throw new AxisError(\n 'SCHEMA_FIELD_MISSING',\n `Missing required field: ${field.name} (TLV ${field.tlv})`,\n 400,\n );\n }\n\n // Skip validation if field not present (and not required)\n if (!val) continue;\n\n // === Check Size Limit ===\n if (typeof field.maxLen === 'number' && val.length > field.maxLen) {\n throw new AxisError(\n 'SCHEMA_LIMIT_EXCEEDED',\n `Field ${field.name} too large (${val.length} > ${field.maxLen})`,\n 413, // Payload Too Large\n );\n }\n\n // === Type-Specific Validation ===\n switch (field.kind) {\n case 'utf8':\n // Validate UTF-8 encoding\n try {\n new TextDecoder('utf-8', { fatal: true }).decode(val);\n } catch {\n throw new AxisError(\n 'SCHEMA_TYPE_MISMATCH',\n `Invalid UTF-8 in ${field.name}`,\n 400,\n );\n }\n break;\n\n case 'bool':\n // Boolean must be exactly 1 byte: 0x00 or 0x01\n if (val.length !== 1 || (val[0] !== 0 && val[0] !== 1)) {\n throw new AxisError(\n 'SCHEMA_TYPE_MISMATCH',\n `Invalid bool: ${field.name}`,\n 400,\n );\n }\n break;\n\n case 'u64': {\n // Unsigned 64-bit integer (big-endian)\n const x = readU64be(val);\n\n // Check max value if specified\n if (field.max) {\n const mx = BigInt(field.max);\n if (x > mx) {\n throw new AxisError(\n 'SCHEMA_LIMIT_EXCEEDED',\n `u64 ${field.name} exceeds max (${x} > ${mx})`,\n 400,\n );\n }\n }\n break;\n }\n\n case 'bytes16':\n // Fixed 16-byte field (UUIDs, IDs)\n if (val.length !== 16) {\n throw new AxisError(\n 'SCHEMA_TYPE_MISMATCH',\n `bytes16 required for ${field.name}`,\n 400,\n );\n }\n break;\n\n case 'bytes':\n // Variable-length bytes - any length within maxLen is allowed\n break;\n\n case 'obj':\n case 'arr':\n // Nested object/array validation (reserved for future)\n // TODO: Implement nested validation\n break;\n\n default:\n throw new AxisError(\n 'SCHEMA_TYPE_MISMATCH',\n `Unknown schema kind: ${field.kind}`,\n 500,\n );\n }\n }\n\n // === STEP 3: Run custom @TlvValidate validators ===\n const validators = input.metadata?.validators as\n | Map<number, TlvValidatorFn[]>\n | undefined;\n if (validators && validators.size > 0) {\n for (const field of schema.fields) {\n const fns = validators.get(field.tlv);\n if (!fns || fns.length === 0) continue;\n\n const scope = field.scope ?? 'body';\n const map = scope === 'header' ? headerTLVs : bodyTLVs;\n const val = map?.get(field.tlv);\n if (!val) continue; // missing fields already handled above\n\n for (const fn of fns) {\n const error = fn(val, field.name);\n if (error) {\n throw new AxisError(\n 'SCHEMA_VALIDATION_FAILED',\n `${field.name} (TLV ${field.tlv}): ${error}`,\n 400,\n );\n }\n }\n }\n }\n } catch (err: any) {\n // Convert AxisError to DENY decision\n if (err instanceof AxisError) {\n return {\n action: 'DENY',\n code: err.code,\n reason: err.message,\n };\n }\n throw err; // Re-throw unknown errors\n }\n\n return { action: 'ALLOW' };\n }\n}\n","\nimport { Sensor } from '../decorators/sensor.decorator';\nimport { BAND } from '../engine/sensor-bands';\nimport { AxisSensor, SensorDecision } from '../sensor/axis-sensor';\n\n/**\n * Stream Scope Sensor - Topic-Level Access Control\n *\n * Enforces read/write permissions on stream topics. Validates that\n * the actor has appropriate access to subscribe or publish to the\n * requested stream topic.\n *\n * **Execution Order:** 200 (near execution, after all validation)\n *\n * **Core Concept:**\n * AXIS supports real-time streaming via WebSocket. Streams are organized\n * by topics (e.g., 'citizen.123.timeline', 'hub.news.updates'). This\n * sensor enforces topic-level access control:\n * - Can the actor subscribe to this topic?\n * - Can the actor publish to this topic?\n *\n * **Topic Patterns:**\n * - `citizen.{id}.timeline` - Personal timeline (owner + admin)\n * - `hub.{name}.updates` - Hub updates (members)\n * - `public.*` - Public topics (anyone)\n * - `admin.*` - Admin topics (admins only)\n *\n * **How It Would Work (Full Implementation):**\n * ```\n * 1. Extract topic from stream intent body\n * 2. Parse topic pattern (e.g., citizen.123.timeline)\n * 3. Determine required access (read for subscribe, write for publish)\n * 4. Check actor's permissions against topic ACL\n * 5. DENY if unauthorized, ALLOW if permitted\n * ```\n *\n * **Stream Operations:**\n * - `stream.subscribe` - Requires READ access\n * - `stream.publish` - Requires WRITE access\n * - `stream.unsubscribe` - Always allowed (cleanup)\n *\n * **Security Model:**\n * - **Stub Implementation:** Currently allows all\n * - **Topic Isolation:** Each topic has independent ACL\n * - **Inheritance:** Pattern-based permissions (citizen.* = citizen owner)\n *\n * **Actions (planned):**\n * - `ALLOW` - Actor has permission\n * - `DENY` - Unauthorized topic access\n *\n * **Error Codes (planned):**\n * - `STREAM_UNAUTHORIZED` - No permission for topic\n * - `STREAM_TOPIC_NOT_FOUND` - Topic doesn't exist\n *\n * **Performance:**\n * - ACL lookup: O(1) with caching\n * - Pattern matching: O(patterns)\n *\n * @class StreamScopeSensor\n * @implements {Sensor}\n * @implements {OnModuleInit}\n *\n * @example\n * Authorized subscription:\n * ```typescript\n * // Actor: user123\n * // Topic: citizen.user123.timeline\n * // Permission: owner can read own timeline\n * { action: 'ALLOW' }\n * ```\n *\n * @example\n * Unauthorized subscription (planned):\n * ```typescript\n * // Actor: user456\n * // Topic: citizen.user123.timeline\n * // Permission: NOT owner\n * {\n * action: 'DENY',\n * code: 'STREAM_UNAUTHORIZED',\n * reason: 'No read access to citizen.user123.timeline'\n * }\n * ```\n *\n * @todo Implement topic ACL lookup and permission checking\n * @see {@link CapabilityEnforcementSensor} - Request-level capabilities\n */\n@Sensor()\nexport class StreamScopeSensor implements AxisSensor {\n /** Sensor identifier */\n readonly name = 'StreamScopeSensor';\n\n /**\n * Execution order - near handler execution\n *\n * Order 200 ensures:\n * - All authentication complete\n * - All policy checks complete\n * - Stream-specific check right before subscription\n */\n readonly order = BAND.BUSINESS + 0;\n\n /**\n * Determines if this sensor should process the given input.\n *\n * Currently processes all inputs.\n *\n * @returns {Promise<SensorDecision>} Always allow\n */\n // supports() is a synchronous applicability gate.\n // Return false to skip this sensor without producing a denial.\n supports(): boolean {\n return true;\n }\n\n /**\n * Validates stream topic access permissions.\n *\n * **Current Implementation:** Stub that always allows.\n *\n * **TODO:** Full implementation should:\n * 1. Check if intent is stream.subscribe or stream.publish\n * 2. Extract topic from body TLVs\n * 3. Parse topic into owner/resource pattern\n * 4. Look up topic ACL from database/cache\n * 5. Check if actor has required permission (read/write)\n * 6. DENY if unauthorized\n *\n * @returns {Promise<SensorDecision>} ALLOW (stub implementation)\n */\n // run() executes only after supports() passes.\n // Return the actual ALLOW/DENY/FLAG/THROTTLE decision here.\n async run(): Promise<SensorDecision> {\n // TODO: Implement topic scope enforcement\n //\n // Full implementation would:\n // const { intent, packet, actorId } = input;\n //\n // if (!intent?.startsWith('stream.')) {\n // return { action: 'ALLOW' }; // Not a stream intent\n // }\n //\n // const topic = extractTopicFromBody(input.bodyTLVs);\n // const operation = intent === 'stream.publish' ? 'write' : 'read';\n //\n // const acl = await this.getTopicACL(topic);\n // if (!acl.allows(actorId, operation)) {\n // return {\n // action: 'DENY',\n // code: 'STREAM_UNAUTHORIZED',\n // reason: `No ${operation} access to ${topic}`\n // };\n // }\n\n return { action: 'ALLOW' };\n }\n}\n","import { Sensor } from \"../decorators/sensor.decorator\";\nimport { BAND } from \"../engine/sensor-bands\";\nimport type {\n AxisSensor,\n SensorDecision,\n SensorInput,\n} from \"../sensor/axis-sensor\";\n\n/**\n * A TickAuth capsule as provided by the transport layer\n * or extracted by an earlier sensor.\n */\nexport interface TickAuthCapsuleRef {\n capsule_id: string;\n capsule_type?: string;\n intent?: string;\n mode?: string;\n verification?: {\n status:\n | \"approved\"\n | \"denied\"\n | \"expired\"\n | \"replay_rejected\"\n | \"consumed\"\n | \"revoked\";\n reason?: string;\n };\n scope?: string[];\n single_use?: boolean;\n tick_index?: number;\n}\n\n/**\n * Pluggable TickAuth verifier.\n * Returns `null` if verification succeeds, or an error string if it fails.\n */\nexport type TickAuthVerifier = (\n capsule: TickAuthCapsuleRef,\n input: SensorInput,\n) => Promise<string | null> | (string | null);\n\n/**\n * Configuration for the TickAuth Sensor.\n */\nexport interface TickAuthSensorOptions {\n /**\n * Optional external verifier that performs full TickAuth handshake\n * validation (signature, window, replay).\n * If not provided the sensor performs structural checks only.\n */\n verifier?: TickAuthVerifier;\n\n /**\n * Whether to require the capsule intent to match the AXIS intent.\n * Defaults to true.\n */\n matchIntent?: boolean;\n\n /**\n * Accept these capsule types. If empty, all types are accepted.\n */\n acceptTypes?: string[];\n}\n\n/**\n * TickAuth Sensor — Validates TickAuth capsule handshake.\n *\n * Goes beyond `ProofPresenceSensor` (which only checks capsule *presence*)\n * to verify the capsule's structural integrity:\n *\n * 1. Capsule exists and has a valid ID\n * 2. Capsule status is 'approved'\n * 3. Capsule type is in the accept list (if configured)\n * 4. Capsule intent matches the AXIS intent (if matchIntent)\n * 5. External verifier (signature + replay + window) passes\n *\n * Runs in the IDENTITY band after proof-presence.\n */\n@Sensor()\nexport class TickAuthSensor implements AxisSensor {\n readonly name = \"TickAuthSensor\";\n readonly order = BAND.IDENTITY + 40; // after ProofPresenceSensor (30)\n\n private readonly verifier?: TickAuthVerifier;\n private readonly matchIntent: boolean;\n private readonly acceptTypes: Set<string> | null;\n\n constructor(options: TickAuthSensorOptions = {}) {\n this.verifier = options.verifier;\n this.matchIntent = options.matchIntent ?? true;\n this.acceptTypes = options.acceptTypes?.length\n ? new Set(options.acceptTypes)\n : null;\n }\n\n // supports() is a synchronous applicability gate.\n // Return false to skip this sensor without producing a denial.\n supports(input: SensorInput): boolean {\n // Only engage when a capsule reference is present\n return !!(\n input.metadata?.capsule ||\n input.metadata?.tickauthCapsule ||\n input.metadata?.cceEnvelope?.capsule\n );\n }\n\n // run() executes only after supports() passes.\n // Return the actual ALLOW/DENY/FLAG/THROTTLE decision here.\n async run(input: SensorInput): Promise<SensorDecision> {\n const capsule: TickAuthCapsuleRef | undefined =\n input.metadata?.capsule ??\n input.metadata?.tickauthCapsule ??\n input.metadata?.cceEnvelope?.capsule;\n\n if (!capsule) {\n return {\n allow: false,\n riskScore: 90,\n reasons: [\"TickAuth capsule not found\"],\n code: \"TICKAUTH_MISSING\",\n };\n }\n\n // 1. Structural: capsule_id must be present\n if (!capsule.capsule_id || typeof capsule.capsule_id !== \"string\") {\n return {\n allow: false,\n riskScore: 100,\n reasons: [\"TickAuth capsule has no valid capsule_id\"],\n code: \"TICKAUTH_INVALID_ID\",\n };\n }\n\n // 2. Status check\n const status = capsule.verification?.status;\n if (status && status !== \"approved\") {\n return {\n allow: false,\n riskScore: 100,\n reasons: [\n `TickAuth capsule status is '${status}'${capsule.verification?.reason ? `: ${capsule.verification.reason}` : \"\"}`,\n ],\n code: `TICKAUTH_STATUS_${status.toUpperCase()}`,\n };\n }\n\n // 3. Type filter\n if (this.acceptTypes && capsule.capsule_type) {\n if (!this.acceptTypes.has(capsule.capsule_type)) {\n return {\n allow: false,\n riskScore: 80,\n reasons: [\n `TickAuth capsule type '${capsule.capsule_type}' is not in accept list`,\n ],\n code: \"TICKAUTH_TYPE_REJECTED\",\n };\n }\n }\n\n // 4. Intent match\n if (this.matchIntent && input.intent && capsule.intent) {\n if (capsule.intent !== input.intent) {\n return {\n allow: false,\n riskScore: 80,\n reasons: [\n `TickAuth capsule intent '${capsule.intent}' does not match AXIS intent '${input.intent}'`,\n ],\n code: \"TICKAUTH_INTENT_MISMATCH\",\n };\n }\n }\n\n // 5. External verifier (full handshake: sig, window, replay)\n if (this.verifier) {\n const error = await this.verifier(capsule, input);\n if (error) {\n return {\n allow: false,\n riskScore: 90,\n reasons: [`TickAuth verification failed: ${error}`],\n code: \"TICKAUTH_VERIFY_FAILED\",\n };\n }\n }\n\n return {\n allow: true,\n riskScore: 0,\n reasons: [],\n tags: {\n tickauthCapsuleId: capsule.capsule_id,\n tickauthMode: capsule.mode,\n tickauthSingleUse: capsule.single_use,\n },\n };\n }\n}\n","import { Sensor } from \"../decorators/sensor.decorator\";\nimport { BAND } from \"../engine/sensor-bands\";\nimport { AxisSensor, SensorDecision, SensorInput } from \"../sensor/axis-sensor\";\nimport { decodeVarint } from \"../core/varint\";\n\n/**\n * TLV Parse AxisSensor - Type-Length-Value Parsing Verification\n *\n * Verifies that TLV data in packets is properly formed and follows\n * canonical ordering rules. Ensures binary payload integrity before\n * field extraction.\n *\n * **Execution Order:** 160 (after policy checks, before schema validation)\n *\n * Validates:\n * - TLV types are ascending (canonical ordering)\n * - No duplicate TLV types\n * - Length values are accurate (no buffer overrun)\n * - Varint encoding is minimal (no padding bytes)\n * - Tag values are > 0\n *\n * @class TLVParseSensor\n * @implements {AxisSensor}\n * @implements {OnModuleInit}\n */\n@Sensor()\nexport class TLVParseSensor implements AxisSensor {\n readonly name = \"TLVParseSensor\";\n readonly order = BAND.CONTENT + 20;\n\n // supports() is a synchronous applicability gate.\n // Return false to skip this sensor without producing a denial.\n supports(input: SensorInput): boolean {\n return !!input.packet;\n }\n\n // run() executes only after supports() passes.\n // Return the actual ALLOW/DENY/FLAG/THROTTLE decision here.\n async run(input: SensorInput): Promise<SensorDecision> {\n const packet = input.packet;\n if (!packet) return { action: \"ALLOW\" };\n\n // Validate header TLVs if raw header bytes are available\n const hdrBytes: Uint8Array | Buffer | undefined =\n packet.hdrBytes ?? packet.headerBytes;\n if (hdrBytes && hdrBytes.length > 0) {\n const result = this.validateCanonicalTLV(hdrBytes, \"header\");\n if (result) return result;\n }\n\n // Validate body TLVs if body is flagged as TLV-encoded\n const bodyBytes: Uint8Array | Buffer | undefined =\n packet.bodyBytes ?? input.body;\n const bodyIsTlv =\n packet.flags !== undefined ? (packet.flags & 0x01) !== 0 : false;\n\n // @Intent({ bodyProfile: 'RAW' }) explicitly skips body TLV validation\n const bodyProfile = input.metadata?.schema?.bodyProfile;\n const skipBody = bodyProfile === \"RAW\";\n\n if (!skipBody && bodyIsTlv && bodyBytes && bodyBytes.length > 0) {\n const result = this.validateCanonicalTLV(bodyBytes, \"body\");\n if (result) return result;\n }\n\n return { action: \"ALLOW\" };\n }\n\n /**\n * Validates a TLV buffer for canonical ordering, no duplicates,\n * valid bounds, and minimal varint encoding.\n */\n private validateCanonicalTLV(\n buf: Uint8Array,\n section: string,\n ): SensorDecision | null {\n let offset = 0;\n let lastType = -1;\n let count = 0;\n const maxItems = 512;\n\n while (offset < buf.length) {\n if (count >= maxItems) {\n return {\n action: \"DENY\",\n code: \"TLV_LIMIT\",\n reason: `Too many TLVs in ${section}`,\n };\n }\n\n // Decode TYPE varint\n let type: number;\n let typeLen: number;\n try {\n const r = decodeVarint(buf, offset);\n type = r.value;\n typeLen = r.length;\n } catch {\n return {\n action: \"DENY\",\n code: \"TLV_PARSE_ERROR\",\n reason: `Malformed type varint in ${section} at offset ${offset}`,\n };\n }\n offset += typeLen;\n\n // Tag must be > 0\n if (type <= 0) {\n return {\n action: \"DENY\",\n code: \"TLV_INVALID_TAG\",\n reason: `Invalid tag ${type} in ${section}`,\n };\n }\n\n // Canonical order: strictly ascending\n if (type <= lastType) {\n return {\n action: \"DENY\",\n code: \"TLV_NOT_CANONICAL\",\n reason: `Non-canonical tag order in ${section}: ${type} after ${lastType}`,\n };\n }\n lastType = type;\n\n // Decode LEN varint\n let len: number;\n let lenLen: number;\n try {\n const r = decodeVarint(buf, offset);\n len = r.value;\n lenLen = r.length;\n } catch {\n return {\n action: \"DENY\",\n code: \"TLV_PARSE_ERROR\",\n reason: `Malformed length varint in ${section}`,\n };\n }\n offset += lenLen;\n\n // Bounds check\n if (offset + len > buf.length) {\n return {\n action: \"DENY\",\n code: \"TLV_TRUNCATED\",\n reason: `TLV value truncated in ${section}`,\n };\n }\n\n offset += len;\n count++;\n }\n\n return null; // Valid\n }\n}\n","import { Sensor } from \"../decorators/sensor.decorator\";\nimport { BAND } from \"../engine/sensor-bands\";\nimport type {\n AxisSensor,\n SensorDecision,\n SensorInput,\n} from \"../sensor/axis-sensor\";\n\n/**\n * Configuration for the TPS Sensor.\n */\nexport interface TpsSensorOptions {\n /**\n * Maximum allowed clock drift in milliseconds between\n * the TPS coordinate timestamp and server time.\n * Defaults to 30_000 (30 seconds).\n */\n maxDriftMs?: number;\n\n /**\n * Optional function to resolve a TPS coordinate string\n * into a UTC epoch milliseconds value.\n * If not provided, the sensor parses i-notation directly.\n */\n resolver?: (tps: string) => number | null;\n}\n\n/** TPS epoch: 1999-08-11T07:00:00Z in milliseconds */\nconst TPS_EPOCH_MS = 934354800000;\n\n/**\n * Parse a TPS i-notation coordinate (e.g. 'i858993459200.000')\n * into a UTC epoch milliseconds value.\n */\nfunction parseINotation(tps: string): number | null {\n if (!tps.startsWith(\"i\")) return null;\n const num = Number(tps.slice(1));\n if (!Number.isFinite(num)) return null;\n // i-notation is milliseconds since TPS epoch\n return TPS_EPOCH_MS + num;\n}\n\n/**\n * TPS Sensor — Temporal Positioning System time gate.\n *\n * Validates that the TPS coordinate attached to a request\n * is structurally valid and not excessively drifted from\n * the server's current time (guards against replay and\n * future-dated requests).\n *\n * Sensor rules:\n * - If no TPS coordinate is present, the sensor allows (other sensors gate identity).\n * - If the TPS coordinate is structurally invalid, DENY.\n * - If the resolved timestamp drifts beyond maxDriftMs, DENY.\n */\n@Sensor()\nexport class TpsSensor implements AxisSensor {\n readonly name = \"TpsSensor\";\n readonly order = BAND.POLICY + 2; // runs early in POLICY band, before Law\n\n private readonly maxDriftMs: number;\n private readonly resolver: (tps: string) => number | null;\n\n constructor(options: TpsSensorOptions = {}) {\n this.maxDriftMs = options.maxDriftMs ?? 30_000;\n this.resolver = options.resolver ?? parseINotation;\n }\n\n // supports() is a synchronous applicability gate.\n // Return false to skip this sensor without producing a denial.\n supports(input: SensorInput): boolean {\n // Only run when a TPS coordinate is present\n const tps =\n input.metadata?.tps_coordinate ??\n input.metadata?.tps ??\n input.packet?.tps;\n return typeof tps === \"string\" && tps.length > 0;\n }\n\n // run() executes only after supports() passes.\n // Return the actual ALLOW/DENY/FLAG/THROTTLE decision here.\n async run(input: SensorInput): Promise<SensorDecision> {\n const tps: string =\n input.metadata?.tps_coordinate ??\n input.metadata?.tps ??\n input.packet?.tps;\n\n // Resolve to UTC ms\n const resolved = this.resolver(tps);\n\n if (resolved === null) {\n return {\n allow: false,\n riskScore: 80,\n reasons: [`TPS coordinate '${tps}' is structurally invalid`],\n code: \"TPS_INVALID_FORMAT\",\n };\n }\n\n // Check drift\n const now = Date.now();\n const drift = Math.abs(now - resolved);\n\n if (drift > this.maxDriftMs) {\n const direction = resolved > now ? \"future\" : \"past\";\n return {\n allow: false,\n riskScore: 70,\n reasons: [\n `TPS drift ${drift}ms exceeds max ${this.maxDriftMs}ms (${direction})`,\n ],\n code: \"TPS_DRIFT_EXCEEDED\",\n tags: { tpsDriftMs: drift, tpsDirection: direction },\n };\n }\n\n return {\n allow: true,\n riskScore: 0,\n reasons: [],\n tags: {\n tpsResolved: resolved,\n tpsDriftMs: drift,\n },\n };\n }\n}\n","import { Sensor } from \"../decorators/sensor.decorator\";\nimport { BAND } from \"../engine/sensor-bands\";\nimport { AxisSensor, SensorDecision, SensorInput } from \"../sensor/axis-sensor\";\n\n/**\n * Varint Hardening Sensor - Variable-Length Integer Overflow Protection\n *\n * Detects and blocks malicious varint values that could cause integer overflow\n * or excessive memory allocation. Varints in AXIS frames encode lengths and types.\n *\n * **Execution Order:** 40 (early, before length-based parsing)\n *\n * **Core Concept:**\n * AXIS uses variable-length integers (varints) to encode:\n * - Header length\n * - Body length\n * - Signature length\n * - TLV types and lengths\n *\n * Varints use a continuation bit (MSB) to indicate more bytes follow.\n * An attacker could send an extremely long varint (many continuation bytes)\n * to cause:\n * - Integer overflow\n * - Excessive parsing time\n * - Memory exhaustion\n *\n * **Varint Format:**\n * ```\n * Each byte: [1-bit continuation][7-bit data]\n *\n * Examples:\n * 127 = 0x7F (1 byte)\n * 128 = 0x80 0x01 (2 bytes)\n * 16384 = 0x80 0x80 0x01 (3 bytes)\n * ```\n *\n * **Limit:** Maximum 5 bytes per varint\n * - 5 bytes = 35 bits of data = max value ~34 billion\n * - Sufficient for any legitimate length in AXIS\n *\n * **How It Works:**\n * ```\n * 1. Skip to varint start (offset 7: after magic+version+flags)\n * 2. Count consecutive bytes with MSB set (continuation bit)\n * 3. If count > 5, reject frame\n * ```\n *\n * **Security Model:**\n * - **Fail Closed:** Overflow = DENY\n * - **Early Detection:** Before full parsing\n * - **Low Cost:** Simple bit check\n *\n * **Actions:**\n * - `ALLOW` - Varint within bounds\n * - `DENY` - Varint exceeds 5 bytes\n *\n * **Error Codes:**\n * - `VARINT_OVERFLOW` - Varint exceeds maximum length\n *\n * **Performance:**\n * - Bit masking: O(1) per byte\n * - Maximum 15 bytes checked\n * - Latency: <0.1ms\n *\n * @class VarintHardeningSensor\n * @implements {AxisSensor}\n * @implements {OnModuleInit}\n *\n * @example\n * Valid varint:\n * ```typescript\n * // Length 16384 encoded as 0x80 0x80 0x01 (3 bytes)\n * { action: 'ALLOW' }\n * ```\n *\n * @example\n * Overflow attack:\n * ```typescript\n * // 6 bytes with continuation bits set\n * {\n * action: 'DENY',\n * code: 'VARINT_OVERFLOW',\n * reason: 'Varint exceeds 5 bytes'\n * }\n * ```\n *\n * @see {@link BodyBudgetSensor} - Uses varints for length parsing\n */\n@Sensor({ phase: \"PRE_DECODE\" })\nexport class VarintHardeningSensor implements AxisSensor {\n /** Sensor identifier */\n readonly name = \"VarintHardeningSensor\";\n\n /**\n * Execution order - early detection\n *\n * Order 40 ensures:\n * - After protocol magic check\n * - Before length-based parsing\n */\n readonly order = BAND.WIRE + 35;\n\n /** Maximum allowed bytes for a single varint */\n private readonly MAX_VARINT_BYTES = 5;\n\n /**\n * Determines if this sensor should process the given input.\n *\n * Requires at least 7 bytes of peeked data.\n *\n * @param {SensorInput} input - Incoming request\n * @returns {boolean} True if sufficient peek data\n */\n // supports() is a synchronous applicability gate.\n // Return false to skip this sensor without producing a denial.\n supports(input: SensorInput): boolean {\n return !!input.peek && input.peek.length >= 7;\n }\n\n /**\n * Validates varint lengths in frame header.\n *\n * **Processing Flow:**\n * 1. Skip to varint section (offset 7)\n * 2. Scan for continuation bytes (MSB = 1)\n * 3. Count consecutive continuation bytes\n * 4. DENY if count exceeds MAX_VARINT_BYTES\n *\n * @param {SensorInput} input - Request with peek data\n * @returns {Promise<SensorDecision>} ALLOW or DENY based on varint length\n */\n // run() executes only after supports() passes.\n // Return the actual ALLOW/DENY/FLAG/THROTTLE decision here.\n async run(input: SensorInput): Promise<SensorDecision> {\n // After magic(5) + version(1) + flags(1), varints follow for hdrLen, bodyLen, sigLen\n const peek = input.peek!;\n const offset = 7;\n const maxOffset = Math.min(offset + 15, peek.length);\n\n // Count consecutive bytes with continuation bit set (MSB = 1)\n let continuationCount = 0;\n for (let i = offset; i < maxOffset; i++) {\n if ((peek[i] & 0x80) !== 0) {\n continuationCount++;\n if (continuationCount > this.MAX_VARINT_BYTES) {\n return {\n action: \"DENY\",\n code: \"VARINT_OVERFLOW\",\n reason: `Varint exceeds ${this.MAX_VARINT_BYTES} bytes`,\n };\n }\n } else {\n // End of current varint - reset for next\n continuationCount = 0;\n }\n }\n\n return { action: \"ALLOW\" };\n }\n}\n","export * from './access-profile-resolver.sensor';\nexport * from './body-budget.sensor';\nexport * from './capability-enforcement.sensor';\nexport * from './chunk-hash.sensor';\nexport * from './entropy.sensor';\nexport * from './execution-timeout.sensor';\nexport * from './frame-budget.sensor';\nexport * from './frame-header-sanity.sensor';\nexport * from './header-tlv-limit.sensor';\nexport * from './intent-allowlist.sensor';\nexport * from './intent-registry.sensor';\nexport * from './law-article-presence.sensor';\nexport * from './law-evaluation.sensor';\nexport * from './proof-presence.sensor';\nexport * from './protocol-strict.sensor';\nexport * from './receipt-policy.sensor';\nexport * from './risk-gate.sensor';\nexport * from './schema-validation.sensor';\nexport * from './stream-scope.sensor';\nexport * from './tickauth.sensor';\nexport * from './tlv-parse.sensor';\nexport * from './tps.sensor';\nexport * from './varint-hardening.sensor';\n","// Decorators\nexport { Chain, CHAIN_METADATA_KEY } from \"./decorators/chain.decorator\";\nexport {\n CapsulePolicy,\n CAPSULE_POLICY_METADATA_KEY,\n} from \"./decorators/capsule-policy.decorator\";\nexport {\n Axis,\n AXIS_META_KEY,\n AxisStream,\n AXIS_STREAM_META_KEY,\n AxisPublic,\n AXIS_PUBLIC_KEY,\n AxisAnonymous,\n AXIS_ANONYMOUS_KEY,\n AxisAuthorized,\n AXIS_AUTHORIZED_KEY,\n AxisRateLimit,\n AXIS_RATE_LIMIT_KEY,\n Sensitivity,\n SENSITIVITY_METADATA_KEY,\n Contract,\n CONTRACT_METADATA_KEY,\n RequiredProof,\n REQUIRED_PROOF_METADATA_KEY,\n Capsule,\n Witness,\n} from \"./decorators/intent-policy.decorator\";\nexport type {\n RequiredProofKind,\n AxisRateLimitConfig,\n AxisStreamOptions,\n} from \"./decorators/intent-policy.decorator\";\nexport { Handler, HANDLER_METADATA_KEY } from \"./decorators/handler.decorator\";\nexport type { HandlerOptions } from \"./decorators/handler.decorator\";\nexport {\n Intent,\n INTENT_METADATA_KEY,\n INTENT_ROUTES_KEY,\n AxisIntentSensorBindingOptions,\n AxisIntentSensorBinding,\n AxisIntentSensorBindingInput,\n AxisIntentSensorOptions,\n AxisIntentSensorRef,\n AxisIntentSensorWhen,\n IntentRoute,\n IntentOptions,\n IntentTlvField,\n IntentKind,\n toIntentSensorBinding,\n} from \"./decorators/intent.decorator\";\nexport {\n IntentBody,\n INTENT_BODY_KEY,\n} from \"./decorators/intent-body.decorator\";\nexport {\n IntentSensors,\n INTENT_SENSORS_KEY,\n} from \"./decorators/intent-sensors.decorator\";\nexport {\n Observer,\n OBSERVER_BINDINGS_KEY,\n OBSERVER_METADATA_KEY,\n} from \"./decorators/observer.decorator\";\nexport type {\n CapsulePolicyOptions,\n CapsuleScopeMode,\n} from \"./decorators/capsule-policy.decorator\";\nexport type {\n AxisObserverBinding,\n AxisObserverBindingInput,\n AxisObserverBindingOptions,\n AxisObserverDefinition,\n AxisObserverRef,\n} from \"./decorators/observer.decorator\";\nexport { toObserverBinding } from \"./decorators/observer.decorator\";\nexport {\n HandlerSensors,\n HANDLER_SENSORS_KEY,\n} from \"./decorators/handler-sensors.decorator\";\nexport { Sensor, SENSOR_METADATA_KEY } from \"./decorators/sensor.decorator\";\nexport type { SensorOptions, SensorPhase } from \"./decorators/sensor.decorator\";\n\n// TLV Field Decorators\nexport {\n TlvField,\n TlvValidate,\n TlvUtf8Pattern,\n TlvMinLen,\n TlvEnum,\n TlvRange,\n TLV_FIELDS_KEY,\n TLV_VALIDATORS_KEY,\n} from \"./decorators/tlv-field.decorator\";\nexport type {\n TlvFieldKind,\n TlvFieldOptions,\n TlvFieldMeta,\n TlvValidatorFn,\n TlvValidatorMeta,\n} from \"./decorators/tlv-field.decorator\";\n\n// DTO Schema Utilities\nexport {\n extractDtoSchema,\n buildDtoDecoder,\n} from \"./decorators/dto-schema.util\";\nexport type { DtoSchema } from \"./decorators/dto-schema.util\";\n\n// Base DTO Classes\nexport { AxisTlvDto } from \"./base/axis-tlv.dto\";\nexport { AxisIdDto } from \"./base/axis-id.dto\";\nexport { AxisPartialType } from \"./base/axis-partial-type\";\nexport {\n AxisResponseDto,\n RESPONSE_TAG_ID,\n RESPONSE_TAG_CREATED_AT,\n RESPONSE_TAG_UPDATED_AT,\n RESPONSE_TAG_CREATED_BY,\n RESPONSE_TAG_UPDATED_BY,\n} from \"./base/axis-response.dto\";\n\n// Engine\nexport { AxisChainExecutor } from \"./engine/axis-chain.executor\";\nexport type {\n AxisCapsuleRef,\n AxisChainEnvelope,\n AxisChainEncryption,\n AxisChainRequest,\n AxisChainResult,\n AxisChainStatus,\n AxisChainStep,\n AxisChainStepResult,\n AxisChainStepStatus,\n AxisExecutionMode,\n AxisIntentEnvelope,\n AxisKeyExchangeRef,\n AxisObserverEvent,\n ChainOptions,\n RegisteredChainConfig,\n} from \"./engine/axis-chain.types\";\nexport type { AxisExecutionContext } from \"./engine/axis-execution-context\";\nexport {\n AXIS_EXECUTION_CONTEXT_KEY,\n getAxisExecutionContext,\n mergeAxisExecutionContext,\n withAxisExecutionContext,\n} from \"./engine/axis-execution-context\";\nexport type {\n AxisIntentObserver,\n AxisObserverContext,\n AxisObserverRegistration,\n} from \"./engine/axis-observer.interface\";\nexport { IntentRouter, AxisEffect } from \"./engine/intent.router\";\nexport { BAND, PRE_DECODE_BOUNDARY } from \"./engine/sensor-bands\";\nexport type { SensorBand } from \"./engine/sensor-bands\";\n\n// Observation (protocol-level observation pipeline)\nexport { stableJsonStringify } from \"./engine/observation/stable-json\";\nexport type {\n ObservationQueueMessage,\n ObservationQueueConfig,\n} from \"./engine/observation/observation-queue.types\";\nexport {\n buildQueueMessage,\n encodeQueueMessage,\n decodeQueueMessage,\n parseStreamEntries,\n parseAutoClaimEntries,\n} from \"./engine/observation/observation-queue.codec\";\nexport type { ObservationStreamEntry } from \"./engine/observation/observation-queue.codec\";\nexport {\n canonicalizeObservation,\n hashObservation,\n buildUnsignedWitness,\n} from \"./engine/observation/observation-hash\";\nexport type {\n ObservationWitnessSummary,\n UnsignedObservationWitness,\n} from \"./engine/observation/observation-hash\";\nexport {\n scoreTruth,\n verifyObservation,\n} from \"./engine/observation/truth-scoring\";\nexport type {\n TruthStatus,\n TruthVerdict,\n ExpectedOutcome,\n Anomaly,\n AnomalyLevel,\n ObservedDeed,\n} from \"./engine/observation/truth-scoring\";\nexport {\n verifyResponse,\n ResponseObserver,\n} from \"./engine/observation/response-observer\";\nexport type {\n ResponseObserverContext,\n ResponseContract,\n ObserverVerdict,\n} from \"./engine/observation/response-observer\";\n\n// Core Protocol\nexport * from \"./core/constants\";\nexport * from \"./core/varint\";\nexport * from \"./core/tlv\";\nexport * from \"./core/signature\";\nexport {\n AxisFrameZ,\n decodeFrame,\n encodeFrame,\n getSignTarget,\n} from \"./core/axis-bin\";\nexport type { AxisFrame, AxisBinaryFrame } from \"./core/axis-bin\";\n\n// Codec\nexport * from \"./codec/ats1.constants\";\nexport * from \"./codec/ats1.passkey.schemas\";\nexport * as Ats1Codec from \"./codec/ats1\";\nexport * from \"./codec/axis1.encode\";\nexport * from \"./codec/axis1.signing\";\nexport * from \"./codec/tlv.encode\";\n\n// Crypto Utilities\nexport * from \"./crypto/b64url\";\nexport * from \"./crypto/canonical-json\";\nexport type {\n AxisAlg,\n AxisCapsule,\n CapsuleMode,\n KeyStatus,\n AxisSig,\n AxisPacket,\n AxisCapsuleConstraints,\n AxisCapsulePayload,\n} from \"./crypto/types\";\n\n// Contract Utilities\nexport * from \"./contract/execution-meter\";\nexport * from \"./contract/contract.interface\";\n\n// Packet and Sensor Types\nexport { Axis1DecodedFrame, decodeAxis1Frame } from \"./types/frame\";\nexport {\n AxisPacket as AxisBinaryPacket,\n T as AxisPacketTags,\n buildPacket,\n} from \"./types/packet\";\nexport type {\n AxisObservedContext,\n AxisRequestContext,\n} from \"./types/axis-frame.types\";\nexport type { TLV as AxisTlvType } from \"./core/tlv\";\nexport {\n Decision,\n normalizeSensorDecision,\n SensorDecisions,\n} from \"./sensor/axis-sensor\";\nexport type {\n AxisSensor,\n AxisSensorInit,\n AxisPreSensor,\n AxisPostSensor,\n SensorPhaseMetadata,\n SensorInput,\n SensorDecision,\n SensorMinifiedDecision,\n} from \"./sensor/axis-sensor\";\n\n// Interfaces\nexport {\n AxisHandler,\n AxisHandlerInit,\n} from \"./interfaces/axis-handler.interface\";\nexport { AxisCrudHandler } from \"./interfaces/axis-crud-handler.interface\";\n\n// Security\nexport * from \"./security/scopes\";\nexport * from \"./security/capabilities\";\nexport { ProofVerificationService } from \"./crypto/proof-verification.service\";\nexport type {\n DeviceSEContext,\n MTLSContext,\n ProofType,\n ProofVerificationResult,\n} from \"./crypto/proof-verification.service\";\nexport {\n BodyProfile,\n BodyProfileValidator,\n} from \"./schemas/body-profile.validator\";\nexport type { BodyProfileValidation } from \"./schemas/body-profile.validator\";\n\n// Law\nexport * from \"./law\";\n\n// Risk\nexport * from \"./risk/index\";\n\n// Core: Opcode Registry\nexport * from \"./core/opcodes\";\n\n// Core: Receipt Hash\nexport * from \"./core/receipt\";\n\n// Core: Intent Sensitivity\nexport * from \"./core/intent-sensitivity\";\n\n// Core: Timeouts\nexport * from \"./core/timeouts\";\n\n// Types: Intent Definitions\nexport type { IntentDefinition } from \"./types/intent-definition\";\n\n// Frame Validation\nexport { validateFrameShape, isTimestampValid } from \"./core/frame-validator\";\n\n// Types: JSON-level Frame Types\nexport type {\n AxisFrame as AxisJsonFrame,\n AxisResponse as AxisJsonResponse,\n AxisSig as AxisJsonSig,\n AxisAlg as AxisJsonAlg,\n} from \"./types/axis-frame.types\";\n\n// Upload stores and tokens\nexport {\n AXIS_UPLOAD_FILE_STORE,\n AXIS_UPLOAD_RECEIPT_SIGNER,\n AXIS_UPLOAD_SESSION_STORE,\n} from \"./upload/upload.tokens\";\nexport type {\n UploadFileStore,\n UploadFileStat,\n UploadReceiptSigner,\n UploadSessionRecord,\n UploadSessionStatus,\n UploadSessionStore,\n} from \"./upload/upload.types\";\nexport { DiskUploadFileStore } from \"./upload/disk-upload-file.store\";\n\n// Types\n\n// Additional root exports for import ergonomics\nexport { AxisError } from \"./core/axis-error\";\nexport { ObserverDispatcherService } from \"./engine/observer-dispatcher.service\";\nexport { ObserverRegistry } from \"./engine/registry/observer.registry\";\nexport { SensorRegistry } from \"./engine/registry/sensor.registry\";\nexport type { AxisDecoded } from \"./engine/axis-decoded\";\nexport {\n createObservation,\n startStage,\n endStage,\n recordSensor,\n finalizeObservation,\n} from \"./engine/axis-observation\";\nexport type {\n AxisObservation,\n ObservationSensor,\n ObservationStage,\n} from \"./engine/axis-observation\";\nexport { AxisSensorChainService } from \"./security/axis-sensor-chain.service\";\nexport type { ChainResult } from \"./security/axis-sensor-chain.service\";\n\n// Timeline Engine\nexport { TimelineEngine } from \"./timeline/timeline.engine\";\nexport { InMemoryTimelineStore } from \"./timeline/timeline.store\";\nexport type { TimelineStore } from \"./timeline/timeline.store\";\nexport type {\n TimelineEvent,\n TimelineBranch,\n TimelineDomain,\n TimelineEventStatus,\n StateSnapshot,\n ReplayRequest,\n ReplayResult,\n ReplayDifference,\n ForkRequest,\n ForkResult,\n SimulationRequest,\n SimulationResult,\n SimulatedSideEffect,\n TimelineComparison,\n TimelineHandler,\n TimelineHandlerContext,\n TimelineHandlerResult,\n} from \"./timeline/timeline.types\";\n\n// CCE — Capsule-Carried Encryption\nexport { executeCcePipeline } from \"./cce/cce-pipeline\";\nexport type {\n CceHandler,\n CceHandlerContext,\n CceHandlerResult,\n CcePolicyContext,\n CcePolicyDecision,\n CcePolicyEvaluator,\n CcePipelineConfig,\n CcePipelineResult,\n} from \"./cce/cce-pipeline\";\nexport { CCE_PROTOCOL_VERSION, CCE_ERROR, CceError } from \"./cce/cce.types\";\nexport type {\n CceCapsuleClaims as CceCapsuleClaimsType,\n CceRequestEnvelope as CceRequestEnvelopeType,\n CceResponseEnvelope as CceResponseEnvelopeType,\n CceExecutionContext as CceExecutionContextType,\n CceWitnessRecord as CceWitnessRecordType,\n} from \"./cce/cce.types\";\n\n// Utils\nexport { encodeAxisTlvDto } from \"./utils/axis-tlv-codec\";\n\n// Loom runtime helpers and types\nexport {\n TLV_PRESENCE_ID,\n TLV_WRIT,\n TLV_THREAD_HASH,\n deriveAnchorReflection,\n canonicalizeWrit,\n canonicalizeGrant,\n} from \"./loom/loom.types\";\nexport {\n createPresenceChallenge,\n signPresenceChallenge,\n verifyPresenceProof,\n getPresenceStatus,\n renewPresence,\n createWrit,\n validateWrit,\n grantCoversAction,\n getGrantStatus,\n validateGrant,\n createGrant,\n createReceipt,\n verifyReceiptChain,\n updateThreadState,\n createRevocation,\n isRevoked,\n executeLoomPipeline,\n} from \"./loom/loom.engine\";\nexport type { LoomExecutionResult } from \"./loom/loom.engine\";\nexport type {\n PresenceDeclaration,\n PresenceChallenge,\n PresenceProof,\n PresenceReceipt,\n PresenceStatus,\n WritHead,\n WritBody,\n WritMeta,\n WritSignature,\n Writ,\n GrantType,\n GrantCapability,\n GrantMeta,\n Grant,\n GrantStatus,\n LoomReceipt,\n ThreadState,\n RevocationTargetType,\n Revocation,\n LoomValidationResult,\n PresenceVerifyResult,\n WritValidationResult,\n GrantValidationResult,\n} from \"./loom/loom.types\";\n\n// IDEL — Intent Description & Execution Language\nexport { IdelSchemaRegistry, IdelCompiler } from \"./idel/idel.compiler\";\nexport type {\n IntentProposal,\n CompiledIntent,\n IntentConstraint,\n ConstraintKind,\n AlternativeIntent,\n ClarificationQuestion,\n IntentRisk,\n RiskLevel,\n IntentSchema,\n IntentParamSchema,\n CompilationResult,\n CompilationError,\n} from \"./idel/idel.types\";\n\n// Needle & Thread — Unified execution pipeline\nexport {\n assembleNeedle,\n formStitch,\n runNeedlePipeline,\n} from \"./needle/needle.engine\";\nexport type {\n Needle,\n NeedlePhase,\n NeedleError,\n NeedleHandler,\n NeedleHandlerContext,\n NeedleHandlerResult,\n NeedlePipelineConfig,\n NeedlePipelineResult,\n Stitch,\n StitchKind,\n Thread,\n} from \"./needle/needle.types\";\n\n// Knot — Critical binding points in the Thread\nexport {\n openKnot,\n addStitchToKnot,\n validateKnot,\n tieKnot,\n breakKnot,\n forkFromKnot,\n isKnotOpen,\n isPointOfNoReturn,\n findKnotsForStitch,\n getIrreversibleKnots,\n getDecisionPoints,\n} from \"./needle/knot.engine\";\nexport type {\n KnotType,\n KnotStatus,\n Knot,\n KnotValidationResult,\n KnotError,\n KnotBreakRequest,\n} from \"./needle/knot.types\";\n\n// Fabric — State-space projection from woven Stitches\nexport {\n createFabric,\n applyStitch,\n weave,\n projectAt,\n lockCells,\n queryFabric,\n getFabricValue,\n diffFabrics,\n} from \"./needle/fabric.engine\";\nexport type {\n FabricCell,\n Fabric,\n FabricEffect,\n FabricEffectResolver,\n FabricDiff,\n FabricDiffEntry,\n FabricDiffKind,\n FabricQuery,\n} from \"./needle/fabric.types\";\n\n// Pattern — Recurring structure detection\nexport {\n InMemoryPatternStore,\n detectSequencePatterns,\n detectKnotPatterns,\n matchPatterns,\n recordOccurrence,\n detectAnomalies,\n} from \"./needle/pattern.engine\";\nexport type {\n PatternKind,\n Pattern,\n PatternSignature,\n PatternMatch,\n PatternPrediction,\n PatternStore,\n PatternConfidence,\n} from \"./needle/pattern.types\";\n\n// Sensors — Reality gates (all sensors exported from barrel)\nexport * from \"./sensors/index\";\n\n// Grouped namespaces were previously exported (`export * as cce`, etc.) but\n// all named exports above already cover the public surface used by consumers.\n// Grouped namespace re-exports removed to slim the bundle; import submodules\n// directly via `@nextera.one/axis-server-sdk/<path>` sub-paths if needed.\n"],"mappings":"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IAAI;AACV,cAAM,IAAI;AACV,cAAM,IAAI;AACV,cAAM,IAAI;AACV,cAAM,IAAI;AACV,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,YAAI,EAAE,CAAC;AACP,cAAM,IAAI;AACV,cAAM,IAAI;AACV,cAAM,IAAI;AACV,cAAM,IAAI;AACV,cAAM,IAAI;AACV,cAAM,IAAI;AACV,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,YAAI,EAAE,CAAC;AACP,cAAM,IAAI;AACV,cAAM,IAAI;AACV,cAAM,IAAI;AACV,cAAM,IAAI;AACV,cAAM,IAAI;AACV,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,YAAI,EAAE,CAAC;AACP,cAAM,IAAI;AACV,cAAM,IAAI;AACV,cAAM,IAAI;AACV,cAAM,IAAI;AACV,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,YAAI,EAAE,CAAC;AACP,cAAM,IAAI;AACV,cAAM,IAAI;AACV,cAAM,IAAI;AACV,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,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CAAc;AACd,gCAAc;AACd,gCAAc;AACd,gCAAc;AACd,gCAAc;AACd,gCAAc;AACd,gCAAc;AACd,gCAAc;AAAA;AAAA;;;ACtBd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAAAC;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gBAAAC;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAoFAC,mBAmBAC,oBAQA,gBAEA;AAjHA;AAAA;AACA;AACA;AAIA;AA2BA;AAEA;AAgBA;AAIA;AAIA;AAgBA;AACA;AAIA;AAIA,IAAAD,oBASO;AAUP,IAAAC,qBAGO;AAIP;AACA,qBAA0B;AAC1B;AACA,2BAOO;AAGP;AAmBA;AAWA;AACA;AAIA;AAKA;AAQA;AASA;AAYA;AAWA;AACA;AACA;AACA;AACA;AASA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AAaA;AACA;AAGA;AACA;AAUA;AAwBA;AACA;AACA;AAOA;AAOA;AAGA;AAGA;AAGA;AAGA;AAGA;AAMA;AAWA;AAaA;AAKA;AACA;AACA;AACA;AAEA;AAYA;AAIA;AACA;AAuBA;AAWA;AAUA;AAGA;AAQA;AA+CA;AAiBA;AAoBA;AAuBA;AAsBA;AAmBA;AAAA,8BAAc,iBAxjBd;AAAA;AAAA;","names":["import_reflect_metadata","import_reflect_metadata","import_reflect_metadata","existing","import_reflect_metadata","import_reflect_metadata","import_reflect_metadata","import_reflect_metadata","import_reflect_metadata","import_reflect_metadata","exports","TlvField","TlvValidate","TlvUtf8Pattern","TlvMinLen","TlvEnum","TlvRange","exports","extractDtoSchema","buildDtoDecoder","tlvMap","AxisIdDto","exports","import_reflect_metadata","exports","AxisResponseDto","import_axis_protocol","path","path","Decision","bytes","import_utils","import_sha2","import_crypto","bytes","import_utils","import_crypto","hexToBytes","bytes","import_utils","import_hkdf","import_sha2","verification","witness","handlerDuration","import_reflect_metadata","import_axis_protocol","AxisChainExecutor","bytes","normalize","schema","map","import_crypto","import_axis_protocol","import_axis_protocol","sha256","crypto","sha256","import_crypto","sha256","import_crypto","import_axis_protocol","MAGIC","import_axis_protocol","init_tlv","MAGIC","import_axis_protocol","init_tlv","init_tlv","exports","module","nacl","z","bytes","crypto","crypto","BodyProfile","tlv","RiskDecision","import_crypto","IntentSensitivity","observerRefKey","import_crypto","sha256","hashPayload","import_crypto","sha256","bytes","import_crypto","import_crypto","import_crypto","import_crypto","import_crypto","exports","exports","exports","TLV_SHA256_CHUNK","exports","crypto","exports","exports","exports","exports","exports","exports","exports","exports","exports","ProofType","z","exports","exports","exports","exports","map","exports","exports","exports","exports","exports","exports","BodyProfile","sha256","import_tlv_field","import_dto_schema"]}
|
|
1
|
+
{"version":3,"sources":["../src/decorators/chain.decorator.ts","../src/decorators/capsule-policy.decorator.ts","../src/decorators/intent-policy.decorator.ts","../src/decorators/handler-sensors.decorator.ts","../src/decorators/observer.decorator.ts","../src/decorators/intent-body.decorator.ts","../src/decorators/intent.decorator.ts","../src/decorators/handler.decorator.ts","../src/decorators/intent-sensors.decorator.ts","../src/decorators/sensor.decorator.ts","../src/decorators/tlv-field.decorator.ts","../src/core/tlv.ts","../src/decorators/dto-schema.util.ts","../src/base/axis-tlv.dto.ts","../src/base/axis-id.dto.ts","../src/base/axis-partial-type.ts","../src/base/axis-response.dto.ts","../src/core/constants.ts","../src/engine/axis-execution-context.ts","../src/utils/axis-logger.ts","../src/engine/axis-chain.executor.ts","../src/security/scopes.ts","../src/security/inline-capsule.ts","../src/sensor/axis-sensor.ts","../src/cce/cce.types.ts","../src/cce/cce-derivation.service.ts","../src/cce/cce-crypto.ts","../src/cce/cce-response.service.ts","../src/cce/cce-witness.observer.ts","../src/cce/cce-pipeline.ts","../src/core/axis-error.ts","../src/engine/intent-builtins.ts","../src/engine/intent-proof-policy.ts","../src/engine/intent.router.ts","../src/engine/sensor-bands.ts","../src/engine/observation/stable-json.ts","../src/engine/observation/observation-queue.codec.ts","../src/engine/observation/observation-hash.ts","../src/engine/observation/truth-scoring.ts","../src/engine/observation/response-observer.ts","../src/core/varint.ts","../src/core/axis-bin.ts","../src/core/signature.ts","../src/codec/ats1.constants.ts","../src/codec/ats1.ts","../src/codec/ats1.passkey.schemas.ts","../src/codec/tlv.encode.ts","../src/codec/axis1.encode.ts","../src/codec/axis1.signing.ts","../src/crypto/b64url.ts","../src/crypto/canonical-json.ts","../src/contract/execution-meter.ts","../src/contract/contract.interface.ts","../src/types/tlv.ts","../src/types/frame.ts","../src/types/packet.ts","../src/security/capabilities.ts","../node_modules/tweetnacl/nacl-fast.js","../src/crypto/proof-verification.service.ts","../src/schemas/body-profile.validator.ts","../src/law/law.types.ts","../src/law/index.ts","../src/risk/index.ts","../src/core/opcodes.ts","../src/core/receipt.ts","../src/core/intent-sensitivity.ts","../src/core/timeouts.ts","../src/core/frame-validator.ts","../src/upload/upload.tokens.ts","../src/upload/disk-upload-file.store.ts","../src/engine/observer-dispatcher.service.ts","../src/engine/registry/observer.registry.ts","../src/engine/registry/sensor.registry.ts","../src/engine/axis-observation.ts","../src/security/axis-sensor-chain.service.ts","../src/timeline/timeline.engine.ts","../src/timeline/timeline.store.ts","../src/utils/axis-tlv-codec.ts","../src/loom/loom.types.ts","../src/loom/loom.engine.ts","../src/idel/idel.compiler.ts","../src/needle/needle.engine.ts","../src/needle/knot.engine.ts","../src/needle/fabric.engine.ts","../src/needle/pattern.engine.ts","../src/sensors/access-profile-resolver.sensor.ts","../src/sensors/body-budget.sensor.ts","../src/sensors/capability-enforcement.sensor.ts","../src/sensors/chunk-hash.sensor.ts","../src/sensors/entropy.sensor.ts","../src/sensors/execution-timeout.sensor.ts","../src/sensors/frame-budget.sensor.ts","../src/sensors/frame-header-sanity.sensor.ts","../src/sensors/header-tlv-limit.sensor.ts","../src/sensors/intent-allowlist.sensor.ts","../src/sensors/intent-registry.sensor.ts","../src/sensors/law-article-presence.sensor.ts","../src/sensors/law-evaluation.sensor.ts","../src/schemas/axis-schemas.ts","../src/sensors/proof-presence.sensor.ts","../src/sensors/protocol-strict.sensor.ts","../src/sensors/receipt-policy.sensor.ts","../src/sensors/risk-gate.sensor.ts","../src/sensors/schema-validation.sensor.ts","../src/sensors/stream-scope.sensor.ts","../src/sensors/tickauth.sensor.ts","../src/sensors/tlv-parse.sensor.ts","../src/sensors/tps.sensor.ts","../src/sensors/varint-hardening.sensor.ts","../src/sensors/index.ts","../src/index.ts"],"sourcesContent":["import \"reflect-metadata\";\n\nimport type { ChainOptions, RegisteredChainConfig } from \"../engine/axis-chain.types\";\n\nexport const CHAIN_METADATA_KEY = \"axis:chain\";\n\nexport function Chain(options: ChainOptions = {}): MethodDecorator {\n return (target: object, propertyKey: string | symbol) => {\n const value: RegisteredChainConfig = {\n enabled: true,\n ...options,\n };\n\n Reflect.defineMetadata(CHAIN_METADATA_KEY, value, target, propertyKey);\n };\n}","import \"reflect-metadata\";\n\nexport const CAPSULE_POLICY_METADATA_KEY = \"axis:capsule:policy\";\n\nexport type CapsuleScopeMode = \"all\" | \"any\";\n\nexport interface CapsulePolicyOptions {\n required?: boolean;\n scopes?: string | string[];\n scopeMode?: CapsuleScopeMode;\n intentBound?: boolean;\n allowCapsuleRef?: boolean;\n}\n\nexport function CapsulePolicy(\n options: CapsulePolicyOptions = {},\n): ClassDecorator & MethodDecorator {\n const normalized = normalizeCapsulePolicyOptions(options);\n\n return ((target: object | Function, propertyKey?: string | symbol) => {\n if (propertyKey !== undefined) {\n Reflect.defineMetadata(\n CAPSULE_POLICY_METADATA_KEY,\n normalized,\n target,\n propertyKey,\n );\n return;\n }\n\n Reflect.defineMetadata(\n CAPSULE_POLICY_METADATA_KEY,\n normalized,\n target as Function,\n );\n }) as ClassDecorator & MethodDecorator;\n}\n\nexport function normalizeCapsulePolicyOptions(\n options: CapsulePolicyOptions = {},\n): CapsulePolicyOptions {\n return {\n required: options.required ?? true,\n scopes: normalizeScopeValue(options.scopes),\n scopeMode: options.scopeMode ?? \"all\",\n intentBound: options.intentBound ?? true,\n allowCapsuleRef: options.allowCapsuleRef ?? false,\n };\n}\n\nexport function mergeCapsulePolicyOptions(\n base?: CapsulePolicyOptions,\n override?: CapsulePolicyOptions,\n): CapsulePolicyOptions | undefined {\n if (!base && !override) {\n return undefined;\n }\n\n const normalizedBase = base ? normalizeCapsulePolicyOptions(base) : undefined;\n const normalizedOverride = override\n ? normalizeCapsulePolicyOptions(override)\n : undefined;\n\n const scopes = [\n ...toScopeList(normalizedBase?.scopes),\n ...toScopeList(normalizedOverride?.scopes),\n ];\n\n return {\n required: normalizedOverride?.required ?? normalizedBase?.required ?? true,\n scopes: normalizeScopeValue(scopes),\n scopeMode:\n normalizedOverride?.scopeMode ?? normalizedBase?.scopeMode ?? \"all\",\n intentBound:\n normalizedOverride?.intentBound ??\n normalizedBase?.intentBound ??\n true,\n allowCapsuleRef:\n normalizedOverride?.allowCapsuleRef ??\n normalizedBase?.allowCapsuleRef ??\n false,\n };\n}\n\nfunction normalizeScopeValue(\n value?: string | string[],\n): string | string[] | undefined {\n const list = toScopeList(value);\n if (list.length === 0) {\n return undefined;\n }\n return list.length === 1 ? list[0] : list;\n}\n\nfunction toScopeList(value?: string | string[]): string[] {\n if (!value) {\n return [];\n }\n\n return Array.from(new Set(Array.isArray(value) ? value : [value])).filter(\n (entry) => entry.trim().length > 0,\n );\n}","import \"reflect-metadata\";\n\nimport type { ExecutionContract } from \"../contract/contract.interface\";\nimport type { ProofKind, SensitivityLevel } from \"../schemas/axis-schemas\";\n\n// ─── Metadata Keys ────────────────────────────────────────────────────────────\n\n/** Metadata key stamped by @Axis on the protocol entry class. */\nexport const AXIS_META_KEY = \"axis:axis\";\n\n/** Metadata key stamped by @AxisStream on a stream protocol entry class. */\nexport const AXIS_STREAM_META_KEY = \"axis:stream\";\n\nexport const SENSITIVITY_METADATA_KEY = \"axis:sensitivity\";\nexport const CONTRACT_METADATA_KEY = \"axis:contract\";\nexport const REQUIRED_PROOF_METADATA_KEY = \"axis:required_proof\";\n\n// ─── Types ────────────────────────────────────────────────────────────────────\n\n/**\n * Extends ProofKind with WITNESS — requires a co-signer witness signature\n * in addition to the standard proof kinds (CAPSULE, PASSPORT, MTLS, JWT).\n */\nexport type RequiredProofKind = ProofKind;\nexport type RequiredProofInput = RequiredProofKind | RequiredProofKind[];\n\nexport interface AxisStreamOptions {\n /** WebSocket path handled by the stream entry. */\n path?: string;\n /** WebSocket subprotocol advertised by the stream entry. */\n protocol?: string;\n}\n\nexport function normalizeRequiredProof(\n proofs: RequiredProofInput | undefined,\n): RequiredProofKind[] | undefined {\n if (proofs === undefined) return undefined;\n\n const normalized = Array.from(\n new Set(Array.isArray(proofs) ? proofs : [proofs]),\n );\n return normalized.length > 0 ? normalized : undefined;\n}\n\nfunction appendRequiredProof(\n target: object | Function,\n propertyKey: string | symbol | undefined,\n proof: RequiredProofKind,\n): void {\n const existing: RequiredProofKind[] =\n propertyKey !== undefined\n ? (Reflect.getMetadata(\n REQUIRED_PROOF_METADATA_KEY,\n target,\n propertyKey,\n ) ?? [])\n : (Reflect.getMetadata(REQUIRED_PROOF_METADATA_KEY, target as Function) ??\n []);\n\n const merged: RequiredProofKind[] = existing.includes(proof)\n ? existing\n : [...existing, proof];\n\n if (propertyKey !== undefined) {\n Reflect.defineMetadata(\n REQUIRED_PROOF_METADATA_KEY,\n merged,\n target,\n propertyKey,\n );\n return;\n }\n\n Reflect.defineMetadata(\n REQUIRED_PROOF_METADATA_KEY,\n merged,\n target as Function,\n );\n}\n\n// ─── @Sensitivity ─────────────────────────────────────────────────────────────\n\n/**\n * Declares the sensitivity tier of an intent.\n *\n * Used by risk gates and audit trails to apply appropriate scrutiny.\n *\n * @example\n * ```ts\n * @Sensitivity('CRITICAL')\n * @Intent('axis.actor_keys.list')\n * async list() { ... }\n * ```\n */\nexport function Sensitivity(\n level: SensitivityLevel,\n): ClassDecorator & MethodDecorator {\n return ((target: object | Function, propertyKey?: string | symbol) => {\n if (propertyKey !== undefined) {\n Reflect.defineMetadata(\n SENSITIVITY_METADATA_KEY,\n level,\n target,\n propertyKey,\n );\n return;\n }\n Reflect.defineMetadata(SENSITIVITY_METADATA_KEY, level, target as Function);\n }) as ClassDecorator & MethodDecorator;\n}\n\n// ─── @Contract ────────────────────────────────────────────────────────────────\n\n/**\n * Declares the execution contract (resource ceiling) for an intent.\n *\n * The execution meter enforces these limits at runtime. Unspecified fields\n * fall back to handler-level or global defaults.\n *\n * @example\n * ```ts\n * @Contract({ maxDbWrites: 5, maxTimeMs: 300 })\n * @Intent('axis.actor_keys.list')\n * async list() { ... }\n * ```\n */\nexport function Contract(\n options: Partial<ExecutionContract>,\n): ClassDecorator & MethodDecorator {\n return ((target: object | Function, propertyKey?: string | symbol) => {\n if (propertyKey !== undefined) {\n Reflect.defineMetadata(\n CONTRACT_METADATA_KEY,\n options,\n target,\n propertyKey,\n );\n return;\n }\n Reflect.defineMetadata(CONTRACT_METADATA_KEY, options, target as Function);\n }) as ClassDecorator & MethodDecorator;\n}\n\n// ─── @RequiredProof ───────────────────────────────────────────────────────────\n\n/**\n * Specifies which proof kinds are accepted to satisfy this intent.\n * At least one of the listed kinds must be present in the request.\n *\n * Use `@Capsule()` or `@Witness()` as ergonomic shorthands for the\n * single-proof case.\n *\n * @example\n * ```ts\n * @RequiredProof(['CAPSULE', 'WITNESS'])\n * @Intent('axis.actor_keys.list')\n * async list() { ... }\n * ```\n */\nexport function RequiredProof(\n proofs: [RequiredProofKind, ...RequiredProofKind[]],\n): ClassDecorator & MethodDecorator {\n return ((target: object | Function, propertyKey?: string | symbol) => {\n if (propertyKey !== undefined) {\n Reflect.defineMetadata(\n REQUIRED_PROOF_METADATA_KEY,\n proofs,\n target,\n propertyKey,\n );\n return;\n }\n Reflect.defineMetadata(\n REQUIRED_PROOF_METADATA_KEY,\n proofs,\n target as Function,\n );\n }) as ClassDecorator & MethodDecorator;\n}\n\n// ─── @Capsule ─────────────────────────────────────────────────────────────────\n\n/**\n * Shorthand for `@RequiredProof(['CAPSULE'])`.\n *\n * Merges with any proof kinds already declared on the target so that\n * combining `@Capsule()` with `@Witness()` behaves identically to\n * `@RequiredProof(['CAPSULE', 'WITNESS'])`.\n *\n * @example\n * ```ts\n * @Capsule()\n * @Intent('axis.actor_keys.get')\n * async get() { ... }\n * ```\n */\nexport function Capsule(): ClassDecorator & MethodDecorator {\n return ((target: object | Function, propertyKey?: string | symbol) => {\n appendRequiredProof(target, propertyKey, \"CAPSULE\");\n }) as ClassDecorator & MethodDecorator;\n}\n\n// ─── @Witness ─────────────────────────────────────────────────────────────────\n\n/**\n * Shorthand for `@RequiredProof(['WITNESS'])`.\n *\n * Declares that the intent requires a co-signer witness signature\n * (maps to `ProofType.WITNESS_SIG` at the protocol layer).\n *\n * Merges with any proof kinds already declared on the target, so\n * `@Capsule()` + `@Witness()` is equivalent to\n * `@RequiredProof(['CAPSULE', 'WITNESS'])`.\n *\n * @example\n * ```ts\n * @Witness()\n * @Sensitivity('CRITICAL')\n * @Intent('axis.actor_keys.list')\n * async list() { ... }\n * ```\n */\nexport function Witness(): ClassDecorator & MethodDecorator {\n return ((target: object | Function, propertyKey?: string | symbol) => {\n appendRequiredProof(target, propertyKey, \"WITNESS\");\n }) as ClassDecorator & MethodDecorator;\n}\n\n// ─── @Axis ───────────────────────────────────────────────────────────────────\n\n/**\n * @Axis — AXIS protocol entry point decorator.\n *\n * Marks a class as the single binary pipeline entry. The decorated class\n * is auto-discovered by `AxisEngineModule` and wired to `POST /axis`.\n * There must be exactly ONE `@Axis()` class in the application.\n *\n * @example\n * ```typescript\n * @Axis()\n * @Injectable()\n * export class AxisEntry implements NestMiddleware { ... }\n * ```\n */\nexport function Axis(): ClassDecorator {\n return (target: Function) => {\n Reflect.defineMetadata(AXIS_META_KEY, { entry: true }, target);\n };\n}\n\n// ─── @AxisStream ─────────────────────────────────────────────────────────────\n\n/**\n * @AxisStream — AXIS stream protocol entry point decorator.\n *\n * Marks a class as the WebSocket stream entry without overloading `@Axis()`,\n * which stays reserved for the HTTP `POST /axis` binary entry.\n *\n * @example\n * ```typescript\n * @AxisStream({ path: '/axis/stream', protocol: 'axis-stream-v1' })\n * @Injectable()\n * export class AxisStreamEntry { ... }\n * ```\n */\nexport function AxisStream(options: AxisStreamOptions = {}): ClassDecorator {\n return (target: Function) => {\n Reflect.defineMetadata(\n AXIS_STREAM_META_KEY,\n {\n entry: true,\n transport: \"stream\",\n role: \"entry\",\n path: options.path,\n protocol: options.protocol,\n },\n target,\n );\n };\n}\n\n// ─── @AxisPublic ──────────────────────────────────────────────────────────────\n\n/**\n * Metadata key stamped on a class or method to mark it as public.\n * Read by HandlerDiscoveryService and injected into SensorInput.metadata.isPublic.\n */\nexport const AXIS_PUBLIC_KEY = \"axis:public\";\n\n/**\n * @AxisPublic — Marks a handler class or individual intent method as public.\n *\n * Public intents bypass signature verification and authentication sensors.\n * Use for discovery/catalog endpoints, health checks, and registration flows.\n *\n * Applied at class level → all intents in the handler are public.\n * Applied at method level → only that intent is public.\n *\n * @example\n * ```typescript\n * @AxisPublic()\n * @Handler('catalog')\n * export class CatalogHandler { ... }\n *\n * // Single public intent inside an authenticated handler:\n * @Handler('axis.auth')\n * export class AuthHandler {\n * @AxisPublic()\n * @Intent('axis.auth.register', { absolute: true, kind: 'action' })\n * async register(...) { ... }\n * }\n * ```\n */\nexport function AxisPublic(): ClassDecorator & MethodDecorator {\n return (\n target: any,\n propertyKey?: string | symbol,\n descriptor?: PropertyDescriptor,\n ) => {\n if (propertyKey !== undefined) {\n Reflect.defineMetadata(AXIS_PUBLIC_KEY, true, target, propertyKey!);\n appendRequiredProof(target, propertyKey, \"NONE\");\n return descriptor;\n }\n Reflect.defineMetadata(AXIS_PUBLIC_KEY, true, target);\n appendRequiredProof(target, undefined, \"NONE\");\n return target;\n };\n}\n\n// ─── @AxisAnonymous ───────────────────────────────────────────────────────────\n\n/**\n * Metadata key stamped on a class or method to mark it as anonymous-accessible.\n * Anonymous intents can be called with an anonymous-session capsule.\n * Read by HandlerDiscoveryService and injected into SensorInput.metadata.isAnonymous.\n */\nexport const AXIS_ANONYMOUS_KEY = \"axis:anonymous\";\n\n// ─── @AxisAuthorized ──────────────────────────────────────────────────────────\n\nexport const AXIS_AUTHORIZED_KEY = \"axis:authorized\";\n\nexport function AxisAuthorized(): ClassDecorator & MethodDecorator {\n return (\n target: any,\n propertyKey?: string | symbol,\n descriptor?: PropertyDescriptor,\n ) => {\n if (propertyKey !== undefined) {\n Reflect.defineMetadata(AXIS_AUTHORIZED_KEY, true, target, propertyKey!);\n appendRequiredProof(target, propertyKey, \"AUTHORIZED\");\n return descriptor;\n }\n Reflect.defineMetadata(AXIS_AUTHORIZED_KEY, true, target);\n appendRequiredProof(target, undefined, \"AUTHORIZED\");\n return target;\n };\n}\n/**\n * @AxisAnonymous — Marks a handler class or individual intent method as\n * accessible to anonymous sessions.\n *\n * Anonymous intents require an anonymous-session capsule (issued via\n * `public.session.anonymous`) but do NOT require full actor authentication.\n * A step above `@AxisPublic` (which needs no capsule at all).\n *\n * Applied at class level → all intents in the handler are anonymous-accessible.\n * Applied at method level → only that intent is anonymous-accessible.\n *\n * @example\n * ```typescript\n * @Handler('catalog')\n * export class CatalogHandler {\n * @AxisAnonymous()\n * @Intent('catalog.list', { absolute: true, kind: 'read' })\n * async list(body: Uint8Array) { ... }\n * }\n * ```\n */\nexport function AxisAnonymous(): ClassDecorator & MethodDecorator {\n return (\n target: any,\n propertyKey?: string | symbol,\n descriptor?: PropertyDescriptor,\n ) => {\n if (propertyKey !== undefined) {\n Reflect.defineMetadata(AXIS_ANONYMOUS_KEY, true, target, propertyKey!);\n appendRequiredProof(target, propertyKey, \"ANONYMOUS\");\n return descriptor;\n }\n Reflect.defineMetadata(AXIS_ANONYMOUS_KEY, true, target);\n appendRequiredProof(target, undefined, \"ANONYMOUS\");\n return target;\n };\n}\n\n// ─── @AxisRateLimit ───────────────────────────────────────────────────────────\n\n/**\n * Metadata key for per-intent rate limit config.\n * Stamped on a method by @AxisRateLimit.\n * Read by HandlerDiscoveryService and consumed by RateLimitSensor at runtime.\n */\nexport const AXIS_RATE_LIMIT_KEY = \"axis:rateLimit\";\n\nexport interface AxisRateLimitConfig {\n /** Maximum requests allowed within the window. */\n max: number;\n /** Sliding window duration in seconds. */\n windowSec: number;\n /**\n * Key strategy or named bucket.\n * e.g. 'ip_fingerprint' | 'actor_capsule' | 'auth' | 'qr-scan'\n */\n key?: string;\n}\n\n/**\n * @AxisRateLimit — Per-intent rate limit configuration.\n *\n * Overrides the handler-level or global default rate limit for a single intent.\n * The config is read by HandlerDiscoveryService and injected into\n * SensorInput.metadata.rateLimit, consumed by RateLimitSensor at runtime.\n *\n * @example\n * ```typescript\n * @AxisRateLimit({ max: 5, windowSec: 60, key: 'ip_fingerprint' })\n * @Intent('axis.auth.login', { absolute: true, kind: 'action' })\n * async login(body: Uint8Array) { ... }\n * ```\n */\nexport function AxisRateLimit(config: AxisRateLimitConfig): MethodDecorator {\n return (\n target: object,\n propertyKey: string | symbol,\n descriptor: PropertyDescriptor,\n ) => {\n Reflect.defineMetadata(AXIS_RATE_LIMIT_KEY, config, target, propertyKey);\n return descriptor;\n };\n}\n","import \"reflect-metadata\";\n\nimport type { AxisIntentSensorBindingInput } from \"./intent.decorator\";\n\nexport const HANDLER_SENSORS_KEY = \"axis:handler:sensors\";\n\n/**\n * @HandlerSensors — Attach sensors that must pass before ANY intent in this\n * handler class executes. Per-intent @IntentSensors still run after these.\n *\n * @example\n * ```ts\n * @Handler('axis.vault')\n * @HandlerSensors([RateLimitSensor, AuditSensor])\n * export class VaultHandler {\n * @Intent('create')\n * async create(body: Uint8Array) { ... }\n *\n * @Intent('delete')\n * @IntentSensors([MfaSensor]) // Runs AFTER handler-level sensors\n * async delete(body: Uint8Array) { ... }\n * }\n * ```\n */\nexport function HandlerSensors(\n sensors: AxisIntentSensorBindingInput[],\n): ClassDecorator {\n return (target: Function) => {\n Reflect.defineMetadata(HANDLER_SENSORS_KEY, sensors, target);\n };\n}\n","import \"reflect-metadata\";\n\nimport type { AxisObserverEvent } from \"../engine/axis-chain.types\";\n\nexport const OBSERVER_METADATA_KEY = \"axis:observer\";\nexport const OBSERVER_BINDINGS_KEY = \"axis:observer:bindings\";\n\nexport type AxisObserverRef = string | Function;\n\nexport interface AxisObserverDefinition {\n name?: string;\n tags?: string[];\n events?: AxisObserverEvent[];\n intents?: string[];\n handlers?: string[];\n}\n\nexport interface AxisObserverBinding {\n refs: AxisObserverRef[];\n tags?: string[];\n events?: AxisObserverEvent[];\n}\n\nexport interface AxisObserverBindingOptions {\n use: AxisObserverRef | AxisObserverRef[];\n tags?: string[];\n events?: AxisObserverEvent[];\n}\n\nexport type AxisObserverBindingInput =\n | AxisObserverDefinition\n | AxisObserverBindingOptions\n | AxisObserverRef\n | AxisObserverRef[];\n\nfunction isBindingOptions(\n value: unknown,\n): value is AxisObserverBindingOptions {\n return !!value && typeof value === \"object\" && \"use\" in value;\n}\n\nfunction isDefinitionOptions(value: unknown): value is AxisObserverDefinition {\n return (\n !!value &&\n typeof value === \"object\" &&\n !Array.isArray(value) &&\n !isBindingOptions(value)\n );\n}\n\nexport function toObserverBinding(\n input?: AxisObserverBindingInput,\n): AxisObserverBinding | null {\n if (!input) return null;\n\n if (isBindingOptions(input)) {\n const refs = Array.isArray(input.use) ? input.use : [input.use];\n return { refs, tags: input.tags, events: input.events };\n }\n\n if (Array.isArray(input)) {\n return { refs: input };\n }\n\n if (typeof input === \"function\" || typeof input === \"string\") {\n return { refs: [input] };\n }\n\n return null;\n}\n\nexport function Observer(\n input?: AxisObserverBindingInput,\n): ClassDecorator & MethodDecorator {\n return ((\n target: object | Function,\n propertyKey?: string | symbol,\n ) => {\n const binding = toObserverBinding(input);\n if (binding) {\n if (propertyKey !== undefined) {\n const existing: AxisObserverBinding[] =\n Reflect.getMetadata(OBSERVER_BINDINGS_KEY, target, propertyKey) || [];\n existing.push(binding);\n Reflect.defineMetadata(\n OBSERVER_BINDINGS_KEY,\n existing,\n target,\n propertyKey,\n );\n return;\n }\n\n const existing: AxisObserverBinding[] =\n Reflect.getMetadata(OBSERVER_BINDINGS_KEY, target as Function) || [];\n existing.push(binding);\n Reflect.defineMetadata(OBSERVER_BINDINGS_KEY, existing, target as Function);\n return;\n }\n\n if (propertyKey !== undefined) {\n throw new Error(\n \"@Observer method usage must reference one or more observer classes or names\",\n );\n }\n\n const definition = isDefinitionOptions(input) ? input : {};\n Reflect.defineMetadata(OBSERVER_METADATA_KEY, definition, target as Function);\n }) as ClassDecorator & MethodDecorator;\n}\n","import 'reflect-metadata';\n\nexport const INTENT_BODY_KEY = 'axis:intent:body';\n\n/**\n * @IntentBody — Auto-decode the raw Uint8Array body before the handler runs.\n *\n * The router reads this metadata and applies the decoder so handlers can\n * receive a parsed payload instead of raw bytes.\n */\nexport function IntentBody(decoder: (buf: Buffer) => any): MethodDecorator {\n return (target: object, propertyKey: string | symbol) => {\n Reflect.defineMetadata(INTENT_BODY_KEY, decoder, target, propertyKey);\n };\n}\n","import \"reflect-metadata\";\n\nimport type { ChainOptions } from \"../engine/axis-chain.types\";\nimport type { SensitivityLevel } from \"../schemas/axis-schemas\";\nimport { INTENT_BODY_KEY } from \"./intent-body.decorator\";\nimport {\n normalizeRequiredProof,\n REQUIRED_PROOF_METADATA_KEY,\n SENSITIVITY_METADATA_KEY,\n type RequiredProofKind,\n} from \"./intent-policy.decorator\";\n\nexport const INTENT_METADATA_KEY = \"axis:intent\";\nexport const INTENT_ROUTES_KEY = \"axis:intent_routes\";\n\n/**\n * CRUD + action classification for an intent.\n */\nexport type IntentKind = \"create\" | \"read\" | \"update\" | \"delete\" | \"action\";\n\n/**\n * A sensor reference declared on an intent.\n * - `string`: resolved from SensorRegistry by sensor name\n * - `Function`: resolved from SensorRegistry by provider class, with DI fallback\n */\nexport type AxisIntentSensorRef = string | Function;\n\nexport type AxisIntentSensorWhen = \"before\" | \"after\" | \"both\";\n\nexport interface AxisIntentSensorBindingOptions {\n /** Sensor ref resolved from registry or DI */\n use: AxisIntentSensorRef;\n /** When the sensor should run relative to handler execution */\n when?: AxisIntentSensorWhen;\n}\n\nexport interface AxisIntentSensorBinding {\n ref: AxisIntentSensorRef;\n when: AxisIntentSensorWhen;\n}\n\nexport type AxisIntentSensorBindingInput =\n | AxisIntentSensorRef\n | AxisIntentSensorBindingOptions;\n\nfunction isIntentSensorBindingOptions(\n value: AxisIntentSensorBindingInput,\n): value is AxisIntentSensorBindingOptions {\n return (\n !!value &&\n typeof value === \"object\" &&\n !Array.isArray(value) &&\n \"use\" in value\n );\n}\n\nexport function toIntentSensorBinding(\n input: AxisIntentSensorBindingInput,\n): AxisIntentSensorBinding {\n if (isIntentSensorBindingOptions(input)) {\n return {\n ref: input.use,\n when: input.when || \"before\",\n };\n }\n\n return {\n ref: input,\n when: \"before\",\n };\n}\n\n/**\n * Shared options for attaching intent-specific sensors.\n * Kept separate so other decorators / route metadata can extend it cleanly.\n */\nexport interface AxisIntentSensorOptions {\n /** Intent-specific sensors resolved before/after the handler executes */\n is?: AxisIntentSensorBindingInput[];\n}\n\n/**\n * Describes a single TLV field expected by an intent.\n * Used by SchemaValidationSensor to enforce field contracts.\n */\nexport interface IntentTlvField {\n /** Human-readable field name (used in error messages) */\n name: string;\n /** TLV tag number */\n tag: number;\n /** Value type for type-specific validation */\n kind: \"utf8\" | \"u64\" | \"bytes\" | \"bytes16\" | \"bool\" | \"obj\" | \"arr\";\n /** If true, sensor denies when this tag is missing */\n required?: boolean;\n /** Maximum byte length of the value */\n maxLen?: number;\n /** Maximum numeric value (string for bigint-safe limits) */\n max?: string;\n /** Which frame section contains this field (default: 'body') */\n scope?: \"header\" | \"body\";\n}\n\nexport interface IntentRoute extends AxisIntentSensorOptions {\n action: string;\n methodName: string | symbol;\n absolute?: boolean;\n frame?: boolean;\n kind?: IntentKind;\n sensitivity?: SensitivityLevel;\n requiredProof?: RequiredProofKind[];\n chain?: boolean | ChainOptions;\n bodyProfile?: \"TLV_MAP\" | \"RAW\" | \"TLV_OBJ\" | \"TLV_ARR\";\n tlv?: IntentTlvField[];\n dto?: Function;\n}\n\nexport interface IntentOptions extends AxisIntentSensorOptions {\n /** Operation classification for this intent */\n kind?: IntentKind;\n /** Risk tier applied to this intent for policy enforcement and audit */\n sensitivity?: SensitivityLevel;\n /** Proof kinds accepted for this intent. Overrides class-level proof defaults. */\n requiredProof?: RequiredProofKind | RequiredProofKind[];\n /** If true, the action is the full intent name (not prefixed with handler name) */\n absolute?: boolean;\n /** If true, register as { handle: fn } for frame-based handlers */\n frame?: boolean;\n /** Enables intent-chain semantics for this intent, optionally with chain defaults */\n chain?: boolean | ChainOptions;\n /**\n * How the body is encoded. Drives TLVParseSensor behavior:\n * - `TLV_MAP` — flat TLV map (canonical ordering enforced)\n * - `RAW` — raw bytes, skip TLV body validation\n * - `TLV_OBJ` — nested TLV object\n * - `TLV_ARR` — TLV array container\n */\n bodyProfile?: \"TLV_MAP\" | \"RAW\" | \"TLV_OBJ\" | \"TLV_ARR\";\n /** Inline TLV field definitions for schema validation */\n tlv?: IntentTlvField[];\n /** DTO class decorated with @TlvField for schema extraction */\n dto?: Function;\n /**\n * Optional inline body decoder. Equivalent to applying @IntentBody(fn)\n * on the same method. Takes the raw body Buffer and returns the decoded\n * payload passed to the handler.\n *\n * When omitted, if `dto` is provided the router builds a default decoder\n * via `buildDtoDecoder(dto)` which also invokes the DTO's optional\n * `static afterDecode()` hook for normalisation.\n */\n decoder?: (buf: Buffer) => any;\n}\n\n/**\n * Marks a method as an intent handler.\n *\n * Stores both per-method metadata (INTENT_METADATA_KEY) and\n * route-collection metadata (INTENT_ROUTES_KEY) for backward compatibility.\n *\n * @example\n * ```ts\n * @Handler('axis.actor_keys')\n * class MyHandler {\n * @Intent('create', { kind: 'create', dto: CreateDto })\n * async create(body: Uint8Array) { ... }\n *\n * @Intent('axis.auth.login', { absolute: true, kind: 'action', dto: LoginDto })\n * async login(body: Uint8Array) { ... }\n * }\n * ```\n */\nexport function Intent(\n action: string,\n options?: IntentOptions,\n): MethodDecorator {\n return (target, propertyKey) => {\n const requiredProof = normalizeRequiredProof(options?.requiredProof);\n const metadata = {\n intent: action,\n ...options,\n ...(requiredProof ? { requiredProof } : {}),\n };\n\n // Per-method metadata (backend-style)\n Reflect.defineMetadata(INTENT_METADATA_KEY, metadata, target, propertyKey);\n\n // Inline decoder: equivalent to @IntentBody, written to the same key so\n // the router resolves it through the existing path.\n if (options?.decoder) {\n Reflect.defineMetadata(\n INTENT_BODY_KEY,\n options.decoder,\n target,\n propertyKey,\n );\n }\n\n if (options?.sensitivity) {\n Reflect.defineMetadata(\n SENSITIVITY_METADATA_KEY,\n options.sensitivity,\n target,\n propertyKey,\n );\n }\n\n if (requiredProof) {\n Reflect.defineMetadata(\n REQUIRED_PROOF_METADATA_KEY,\n requiredProof,\n target,\n propertyKey,\n );\n }\n\n // Route-collection metadata (SDK-style, backward compat)\n const routes: IntentRoute[] =\n Reflect.getMetadata(INTENT_ROUTES_KEY, target.constructor) || [];\n routes.push({\n action,\n methodName: propertyKey,\n absolute: options?.absolute,\n frame: options?.frame,\n kind: options?.kind,\n sensitivity: options?.sensitivity,\n requiredProof,\n chain: options?.chain,\n bodyProfile: options?.bodyProfile,\n tlv: options?.tlv,\n dto: options?.dto,\n is: options?.is,\n });\n Reflect.defineMetadata(INTENT_ROUTES_KEY, routes, target.constructor);\n };\n}\n","import \"reflect-metadata\";\n\nimport { HANDLER_SENSORS_KEY } from \"./handler-sensors.decorator\";\nimport {\n OBSERVER_BINDINGS_KEY,\n type AxisObserverBinding,\n type AxisObserverBindingInput,\n toObserverBinding,\n} from \"./observer.decorator\";\nimport {\n type AxisIntentSensorOptions,\n type AxisIntentSensorBindingInput,\n toIntentSensorBinding,\n} from \"./intent.decorator\";\n\nexport const HANDLER_METADATA_KEY = \"axis:handler\";\n\nexport interface HandlerOptions extends AxisIntentSensorOptions {\n observe?: AxisObserverBindingInput[];\n}\n\n/**\n * Decorator to mark a class as an Axis Handler.\n * Handlers are responsible for processing intents or specific logic\n * for Axis modules.\n */\nexport function Handler(\n intentOrOptions?: string | HandlerOptions,\n options?: HandlerOptions,\n): ClassDecorator {\n return (target: Function) => {\n const intent =\n typeof intentOrOptions === \"string\" ? intentOrOptions : undefined;\n const handlerOptions =\n typeof intentOrOptions === \"string\" ? options : intentOrOptions;\n const sensorBindings = Array.isArray(handlerOptions?.is)\n ? handlerOptions.is.map((input: AxisIntentSensorBindingInput) =>\n toIntentSensorBinding(input),\n )\n : [];\n const observerBindings: AxisObserverBinding[] = Array.isArray(\n handlerOptions?.observe,\n )\n ? handlerOptions.observe\n .map((input) => toObserverBinding(input))\n .filter((binding): binding is AxisObserverBinding => !!binding)\n : [];\n\n Reflect.defineMetadata(\n HANDLER_METADATA_KEY,\n { intent, ...(handlerOptions || {}) },\n target,\n );\n\n if (sensorBindings.length > 0) {\n const existing =\n Reflect.getMetadata(HANDLER_SENSORS_KEY, target) || [];\n Reflect.defineMetadata(\n HANDLER_SENSORS_KEY,\n [...existing, ...sensorBindings],\n target,\n );\n }\n\n if (observerBindings.length > 0) {\n const existing: AxisObserverBinding[] =\n Reflect.getMetadata(OBSERVER_BINDINGS_KEY, target) || [];\n Reflect.defineMetadata(\n OBSERVER_BINDINGS_KEY,\n [...existing, ...observerBindings],\n target,\n );\n }\n };\n}\n","import 'reflect-metadata';\n\nimport type { AxisIntentSensorBindingInput } from './intent.decorator';\n\nexport const INTENT_SENSORS_KEY = 'axis:intent:sensors';\n\n/**\n * @IntentSensors — Attach additional sensors that must pass before the\n * annotated intent handler executes.\n */\nexport function IntentSensors(\n sensors: AxisIntentSensorBindingInput[],\n): MethodDecorator {\n return (target: object, propertyKey: string | symbol) => {\n Reflect.defineMetadata(INTENT_SENSORS_KEY, sensors, target, propertyKey);\n };\n}\n","import \"reflect-metadata\";\n\nimport { RequiredProofKind } from \"./intent-policy.decorator\";\n\nexport const SENSOR_METADATA_KEY = \"axis:sensor\";\n\nexport type SensorPhase = \"PRE_DECODE\" | \"POST_DECODE\";\n\nexport interface SensorOptions {\n /** Explicit phase override. If omitted, auto-derived from order at bootstrap. */\n phase?: SensorPhase;\n proofKind?: RequiredProofKind | RequiredProofKind[];\n excludeProofKind?: RequiredProofKind | RequiredProofKind[];\n}\n\n/**\n * Marks a class as an AXIS sensor for auto-registration.\n *\n * The SensorDiscoveryService finds all @Sensor() classes at bootstrap\n * and registers them with the SensorRegistry automatically.\n *\n * Sensors still declare `name`, `order`, `supports()`, and `run()` as\n * instance members. The decorator replaces manual `registry.register(this)`\n * in `onModuleInit()`.\n *\n * Phase can be set explicitly via options or auto-derived from order:\n * < PRE_DECODE_BOUNDARY (40) = PRE_DECODE, >= 40 = POST_DECODE.\n */\nexport function Sensor(options?: SensorOptions): ClassDecorator {\n return (target) => {\n Reflect.defineMetadata(SENSOR_METADATA_KEY, options ?? true, target);\n };\n}\n","import 'reflect-metadata';\n\nexport const TLV_FIELDS_KEY = 'axis:tlv:fields';\nexport const TLV_VALIDATORS_KEY = 'axis:tlv:validators';\nconst textDecoder = new TextDecoder();\n\nexport type TlvFieldKind =\n | 'utf8'\n | 'u64'\n | 'bytes'\n | 'bytes16'\n | 'bool'\n | 'obj'\n | 'arr';\n\nexport interface TlvFieldOptions {\n /** Value type for type-specific validation */\n kind: TlvFieldKind;\n /** If true, sensor denies when this tag is missing */\n required?: boolean;\n /** Maximum byte length of the value */\n maxLen?: number;\n /** Maximum numeric value (string for bigint-safe limits) */\n max?: string;\n /** Which frame section contains this field (default: 'body') */\n scope?: 'header' | 'body';\n}\n\n/** Stored per-property metadata from @TlvField */\nexport interface TlvFieldMeta {\n /** Property name on the DTO class */\n property: string;\n /** TLV tag number */\n tag: number;\n /** Field options */\n options: TlvFieldOptions;\n}\n\n/**\n * Custom validation function applied via @TlvValidate.\n * Receives the raw TLV value bytes and the property name.\n * Return null/undefined to pass, or a string error message to deny.\n */\nexport type TlvValidatorFn = (\n value: Uint8Array,\n property: string,\n) => string | null | undefined;\n\n/** Stored per-property validator from @TlvValidate */\nexport interface TlvValidatorMeta {\n property: string;\n tag: number;\n validators: TlvValidatorFn[];\n}\n\nfunction assertUniqueFieldMetadata(\n existing: TlvFieldMeta[],\n property: string,\n tag: number,\n): void {\n const duplicateProperty = existing.find((item) => item.property === property);\n if (duplicateProperty) {\n throw new Error(`Duplicate @TlvField for property ${property}`);\n }\n\n const duplicateTag = existing.find((item) => item.tag === tag);\n if (duplicateTag) {\n throw new Error(\n `Duplicate @TlvField tag ${tag} for ${property}; already used by ${duplicateTag.property}`,\n );\n }\n}\n\n/**\n * @TlvField — Declare a TLV field contract on a DTO property.\n *\n * Applied to properties of a class passed to `@Intent({ dto: MyDto })`.\n * The schema is extracted at bootstrap and forwarded to SchemaValidationSensor.\n *\n * @example\n * ```typescript\n * class LoginDto {\n * @TlvField(100, { kind: 'utf8', required: true, maxLen: 256 })\n * email: string;\n *\n * @TlvField(105, { kind: 'bytes16', required: true })\n * deviceId: Buffer;\n *\n * @TlvField(103, { kind: 'bool' })\n * remember?: boolean;\n * }\n * ```\n */\nexport function TlvField(\n tag: number,\n options: TlvFieldOptions,\n): PropertyDecorator {\n return (target: object, propertyKey: string | symbol) => {\n const existing: TlvFieldMeta[] =\n Reflect.getOwnMetadata(TLV_FIELDS_KEY, target.constructor) || [];\n\n const property = String(propertyKey);\n assertUniqueFieldMetadata(existing, property, tag);\n\n existing.push({\n property,\n tag,\n options,\n });\n\n Reflect.defineMetadata(TLV_FIELDS_KEY, existing, target.constructor);\n };\n}\n\n/**\n * @TlvValidate — Attach custom validation logic to a TLV field.\n *\n * Runs after standard type/size checks. The validator receives raw bytes\n * and must return null (pass) or an error string (deny).\n *\n * Multiple @TlvValidate decorators can be stacked on the same property.\n */\nexport function TlvValidate(validator: TlvValidatorFn): PropertyDecorator {\n return (target: object, propertyKey: string | symbol) => {\n const existing: TlvValidatorMeta[] =\n Reflect.getOwnMetadata(TLV_VALIDATORS_KEY, target.constructor) || [];\n\n const prop = String(propertyKey);\n let entry = existing.find((e) => e.property === prop);\n\n if (!entry) {\n entry = { property: prop, tag: 0, validators: [] };\n existing.push(entry);\n }\n\n entry.validators.push(validator);\n\n Reflect.defineMetadata(TLV_VALIDATORS_KEY, existing, target.constructor);\n };\n}\n\n// ─── Built-in Validators (composable with @TlvValidate) ───\n\n/**\n * @TlvUtf8Pattern — Validate a UTF-8 field against a regex.\n */\nexport function TlvUtf8Pattern(\n pattern: RegExp,\n message?: string,\n): PropertyDecorator {\n const matcher = new RegExp(pattern.source, pattern.flags);\n return TlvValidate((val, prop) => {\n const str = textDecoder.decode(val);\n matcher.lastIndex = 0;\n return matcher.test(str)\n ? null\n : message || `${prop}: failed pattern check`;\n });\n}\n\n/**\n * @TlvMinLen — Minimum byte length for a field value.\n */\nexport function TlvMinLen(min: number, message?: string): PropertyDecorator {\n return TlvValidate((val, prop) => {\n return val.length >= min\n ? null\n : message || `${prop}: too short (${val.length} < ${min})`;\n });\n}\n\n/**\n * @TlvEnum — UTF-8 field must be one of the listed values.\n */\nexport function TlvEnum(\n allowed: string[],\n message?: string,\n): PropertyDecorator {\n const set = new Set(allowed);\n return TlvValidate((val, prop) => {\n const str = textDecoder.decode(val);\n return set.has(str)\n ? null\n : message || `${prop}: must be one of [${allowed.join(', ')}]`;\n });\n}\n\n/**\n * @TlvRange — Numeric u64 field must be within [min, max].\n */\nexport function TlvRange(\n min: bigint,\n max: bigint,\n message?: string,\n): PropertyDecorator {\n return TlvValidate((val, prop) => {\n if (val.length !== 8) return `${prop}: u64 must be 8 bytes`;\n let n = 0n;\n for (const b of val) n = (n << 8n) | BigInt(b);\n if (n < min || n > max) {\n return message || `${prop}: value ${n} out of range [${min}, ${max}]`;\n }\n return null;\n });\n}\n","export {\n TLV, encodeTLVs, decodeTLVs, decodeTLVsList, decodeObject, decodeArray,\n} from '@nextera.one/axis-protocol';\n","import \"reflect-metadata\";\n\nimport { AxisTlvDto } from \"../base/axis-tlv.dto\";\nimport type { IntentTlvField } from \"./intent.decorator\";\nimport {\n TLV_FIELDS_KEY,\n TLV_VALIDATORS_KEY,\n TlvFieldMeta,\n TlvValidatorFn,\n TlvValidatorMeta,\n} from \"./tlv-field.decorator\";\nimport { decodeTLVs } from \"../core/tlv\";\n\n/** Extracted schema from a DTO class — fields + optional validators */\nexport interface DtoSchema {\n fields: IntentTlvField[];\n validators: Map<number, TlvValidatorFn[]>;\n}\n\n/**\n * Extracts TLV field definitions and validators from a DTO class\n * decorated with @TlvField and @TlvValidate.\n */\nexport function extractDtoSchema(dto: Function): DtoSchema {\n if (typeof dto !== \"function\") {\n throw new Error(\n `extractDtoSchema expected a class constructor but received ${typeof dto} (${String(dto)}) — ` +\n `did you pass a plain object or instance to @Intent({ dto }) instead of a class?`,\n );\n }\n\n const fieldMetas: TlvFieldMeta[] =\n Reflect.getMetadata(TLV_FIELDS_KEY, dto) || [];\n\n if (fieldMetas.length === 0) {\n throw new Error(\n `DTO class ${dto.name || \"<anonymous>\"} has no @TlvField decorators — nothing to validate. ` +\n `Make sure the class extends AxisTlvDto and its fields are annotated with @TlvField(tag, { kind }).`,\n );\n }\n\n const tagByProp = new Map<string, number>();\n const fields: IntentTlvField[] = fieldMetas.map((m) => {\n tagByProp.set(m.property, m.tag);\n return {\n name: m.property,\n tag: m.tag,\n kind: m.options.kind,\n required: m.options.required,\n maxLen: m.options.maxLen,\n max: m.options.max,\n scope: m.options.scope,\n };\n });\n\n const validatorMetas: TlvValidatorMeta[] =\n Reflect.getMetadata(TLV_VALIDATORS_KEY, dto) || [];\n\n const validators = new Map<number, TlvValidatorFn[]>();\n for (const vm of validatorMetas) {\n const tag = tagByProp.get(vm.property);\n if (tag === undefined) {\n throw new Error(\n `@TlvValidate on ${dto.name}.${vm.property} but no @TlvField found for that property`,\n );\n }\n vm.tag = tag;\n validators.set(tag, vm.validators);\n }\n\n return { fields, validators };\n}\n\n/**\n * Builds a decoder function for a DTO class.\n *\n * The returned function takes raw TLV body bytes and returns a plain object\n * with property names as keys and decoded values matching the DTO shape.\n *\n * Value decoding by kind:\n * - utf8 → string\n * - u64 → bigint\n * - bytes / bytes16 → Uint8Array\n * - bool → boolean (0x00 = false, anything else = true)\n * - obj → JSON.parse of utf8\n * - arr → JSON.parse of utf8\n */\nexport function buildDtoDecoder(\n dto: Function,\n): (bodyBytes: Buffer) => Record<string, any> {\n if (typeof dto !== \"function\") {\n throw new Error(\n `buildDtoDecoder expected a class constructor but received ${typeof dto} (${String(dto)}) — ` +\n `did you pass a plain object or instance to @Intent({ dto }) instead of a class?`,\n );\n }\n\n const fieldMetas: TlvFieldMeta[] =\n Reflect.getMetadata(TLV_FIELDS_KEY, dto) || [];\n\n if (fieldMetas.length === 0) {\n throw new Error(\n `DTO class ${dto.name || \"<anonymous>\"} has no @TlvField decorators — cannot build decoder. ` +\n `Make sure the class extends AxisTlvDto and its fields are annotated with @TlvField(tag, { kind }).`,\n );\n }\n\n const tagMap = new Map<number, { property: string; kind: string }>();\n for (const m of fieldMetas) {\n tagMap.set(m.tag, { property: m.property, kind: m.options.kind });\n }\n\n const dtoClass = dto as (typeof AxisTlvDto & Function);\n const afterDecode =\n typeof dtoClass.afterDecode === \"function\"\n ? dtoClass.afterDecode.bind(dtoClass)\n : undefined;\n\n return (bodyBytes: Buffer): Record<string, any> => {\n const tlvMap = decodeTLVs(new Uint8Array(bodyBytes));\n const result: Record<string, any> = {};\n\n for (const [tag, raw] of tlvMap) {\n const meta = tagMap.get(tag);\n if (!meta) continue;\n\n switch (meta.kind) {\n case \"utf8\":\n result[meta.property] = new TextDecoder().decode(raw);\n break;\n case \"u64\": {\n let n = 0n;\n for (let i = 0; i < raw.length; i++) {\n n = (n << 8n) | BigInt(raw[i]);\n }\n result[meta.property] = n;\n break;\n }\n case \"bytes\":\n case \"bytes16\":\n result[meta.property] = raw;\n break;\n case \"bool\":\n result[meta.property] = raw.length > 0 && raw[0] !== 0;\n break;\n case \"obj\":\n case \"arr\":\n result[meta.property] = JSON.parse(new TextDecoder().decode(raw));\n break;\n default:\n result[meta.property] = raw;\n }\n }\n\n afterDecode?.(result);\n\n return result;\n };\n}\n","/**\n * AxisTlvDto — Base class for all TLV-decoded DTO classes.\n *\n * Any DTO decorated with @TlvField that is passed to @Intent({ dto })\n * should extend this class. This gives the CRUD handler interface\n * a type-safe union: `Uint8Array | AxisTlvDto`.\n *\n * Subclasses may override `afterDecode()` to normalize decoded payloads\n * without needing a custom decoder for every intent.\n */\nexport abstract class AxisTlvDto {\n static afterDecode(_dto: Record<string, any>): void {\n // Default no-op hook for subclasses.\n }\n}\n","import { TlvField, TlvMinLen } from '../decorators/tlv-field.decorator';\nimport { AxisTlvDto } from './axis-tlv.dto';\n\nexport class AxisIdDto extends AxisTlvDto {\n @TlvField(1, { kind: 'utf8', required: true, maxLen: 128 })\n @TlvMinLen(1, 'id must not be empty')\n id!: string;\n}\n","import 'reflect-metadata';\n\nimport {\n TLV_FIELDS_KEY,\n TLV_VALIDATORS_KEY,\n TlvFieldMeta,\n TlvValidatorMeta,\n} from '../decorators/tlv-field.decorator';\nimport { AxisTlvDto } from './axis-tlv.dto';\n\n/**\n * AxisPartialType — Creates a DTO class where all TLV fields are optional.\n *\n * Copies TLV metadata (`axis:tlv:fields` + `axis:tlv:validators`)\n * and sets `required: false` on every field.\n *\n * TLV naturally supports partial payloads — only fields present in the\n * binary body get decoded. This utility makes the schema/sensor layer\n * aware that missing fields are acceptable for update operations.\n *\n * @example\n * ```typescript\n * export class UpdateBlocklistDto extends AxisPartialType(CreateBlocklistDto) {}\n * ```\n */\nexport function AxisPartialType<T extends new (...args: any[]) => AxisTlvDto>(\n BaseDto: T,\n): new (...args: any[]) => Partial<InstanceType<T>> & AxisTlvDto {\n class PartialDto extends (BaseDto as any) {}\n\n const fields: TlvFieldMeta[] =\n Reflect.getOwnMetadata(TLV_FIELDS_KEY, BaseDto) || [];\n\n const partialFields: TlvFieldMeta[] = fields.map((f) => ({\n property: f.property,\n tag: f.tag,\n options: { ...f.options, required: false },\n }));\n\n Reflect.defineMetadata(TLV_FIELDS_KEY, partialFields, PartialDto);\n\n const validators: TlvValidatorMeta[] =\n Reflect.getOwnMetadata(TLV_VALIDATORS_KEY, BaseDto) || [];\n\n if (validators.length > 0) {\n Reflect.defineMetadata(TLV_VALIDATORS_KEY, [...validators], PartialDto);\n }\n\n Object.defineProperty(PartialDto, 'name', {\n value: `Partial${BaseDto.name}`,\n });\n\n return PartialDto as any;\n}\n","import { TlvField } from '../decorators/tlv-field.decorator';\nimport { AxisTlvDto } from './axis-tlv.dto';\n\n/**\n * Reserved TLV body tags for server-generated response fields.\n *\n * Tags 1–10 are reserved for system/audit fields in response bodies.\n * Entity-specific fields start at tag 100+.\n */\nexport const RESPONSE_TAG_ID = 1;\nexport const RESPONSE_TAG_CREATED_AT = 2;\nexport const RESPONSE_TAG_UPDATED_AT = 3;\nexport const RESPONSE_TAG_CREATED_BY = 4;\nexport const RESPONSE_TAG_UPDATED_BY = 5;\n\n/**\n * AxisResponseDto — Base class for outbound TLV response bodies.\n *\n * Server-generated audit fields that the backend appends to every\n * entity response. These are NEVER sent by the client — they flow\n * server → client only.\n *\n * Timestamps are u64 Unix milliseconds (same as TLV_TS in headers).\n */\nexport abstract class AxisResponseDto extends AxisTlvDto {\n @TlvField(RESPONSE_TAG_ID, { kind: 'utf8' })\n id?: string;\n\n @TlvField(RESPONSE_TAG_CREATED_AT, { kind: 'u64' })\n created_at?: bigint;\n\n @TlvField(RESPONSE_TAG_UPDATED_AT, { kind: 'u64' })\n updated_at?: bigint;\n\n @TlvField(RESPONSE_TAG_CREATED_BY, { kind: 'utf8' })\n created_by?: string;\n\n @TlvField(RESPONSE_TAG_UPDATED_BY, { kind: 'utf8' })\n updated_by?: string;\n}\n","export {\n AXIS_MAGIC,\n AXIS_VERSION,\n MAX_HDR_LEN,\n MAX_BODY_LEN,\n MAX_SIG_LEN,\n MAX_FRAME_LEN,\n FLAG_BODY_TLV,\n FLAG_CHAIN_REQ,\n FLAG_HAS_WITNESS,\n TLV_PID,\n TLV_TS,\n TLV_INTENT,\n TLV_ACTOR_ID,\n TLV_PROOF_TYPE,\n TLV_PROOF_REF,\n TLV_NONCE,\n TLV_AUD,\n TLV_REALM,\n TLV_NODE,\n TLV_TRACE_ID,\n TLV_KID,\n TLV_RID,\n TLV_OK,\n TLV_EFFECT,\n TLV_ERROR_CODE,\n TLV_ERROR_MSG,\n TLV_PREV_HASH,\n TLV_RECEIPT_HASH,\n TLV_NODE_KID,\n TLV_NODE_CERT_HASH,\n TLV_LOOM_PRESENCE_ID,\n TLV_LOOM_WRIT,\n TLV_LOOM_THREAD_HASH,\n TLV_UPLOAD_ID,\n TLV_INDEX,\n TLV_OFFSET,\n TLV_SHA256_CHUNK,\n TLV_CAPSULE,\n TLV_BODY_OBJ,\n TLV_BODY_ARR,\n NCERT_NODE_ID,\n NCERT_KID,\n NCERT_ALG,\n NCERT_PUB,\n NCERT_NBF,\n NCERT_EXP,\n NCERT_SCOPE,\n NCERT_ISSUER_KID,\n NCERT_PAYLOAD,\n NCERT_SIG,\n PROOF_NONE,\n PROOF_CAPSULE,\n PROOF_JWT,\n PROOF_MTLS,\n PROOF_LOOM,\n PROOF_WITNESS,\n PROOF_KINDS,\n ProofType,\n BodyProfile,\n ERR_INVALID_PACKET,\n ERR_BAD_SIGNATURE,\n ERR_REPLAY_DETECTED,\n ERR_CONTRACT_VIOLATION,\n} from '@nextera.one/axis-protocol';\n\nexport type { ProofKind } from '@nextera.one/axis-protocol';\n\nexport abstract class AxisMediaTypes {\n static readonly BINARY = 'application/axis-bin';\n static readonly OCTET_STREAM = 'application/octet-stream';\n static readonly LEGACY_BINARY = 'application/x-axis';\n\n static readonly VALID_AXIS_CONTENT_TYPES = [\n AxisMediaTypes.BINARY,\n AxisMediaTypes.OCTET_STREAM,\n AxisMediaTypes.LEGACY_BINARY,\n ] as const;\n\n static normalize(value?: string | null): string | undefined {\n if (!value) return undefined;\n return value.split(';', 1)[0].trim().toLowerCase();\n }\n\n static isAxisContentType(value?: string | null): boolean {\n const normalized = AxisMediaTypes.normalize(value);\n return (\n !!normalized &&\n AxisMediaTypes.VALID_AXIS_CONTENT_TYPES.some(\n (contentType) => contentType === normalized,\n )\n );\n }\n}\n","import type { AxisFrame } from \"../core/axis-bin\";\n\nimport type { AxisCapsuleRef, AxisChainEnvelope, AxisChainStep } from \"./axis-chain.types\";\n\nexport const AXIS_EXECUTION_CONTEXT_KEY = Symbol.for(\"axis.executionContext\");\n\nexport interface AxisExecutionContext {\n metaIntent?: \"INTENT.EXEC\" | \"CHAIN.EXEC\";\n actorId?: string;\n inlineCapsule?: Record<string, unknown>;\n capsuleRef?: AxisCapsuleRef;\n chainEnvelope?: AxisChainEnvelope;\n chainStep?: AxisChainStep;\n}\n\ntype FrameLike = Partial<AxisFrame> & {\n [AXIS_EXECUTION_CONTEXT_KEY]?: AxisExecutionContext;\n};\n\nexport function getAxisExecutionContext(\n frame?: Partial<AxisFrame>,\n): AxisExecutionContext | undefined {\n return (frame as FrameLike | undefined)?.[AXIS_EXECUTION_CONTEXT_KEY];\n}\n\nexport function withAxisExecutionContext<T extends object>(\n target: T,\n context: AxisExecutionContext,\n): T {\n Object.defineProperty(target, AXIS_EXECUTION_CONTEXT_KEY, {\n value: context,\n writable: true,\n configurable: true,\n enumerable: false,\n });\n\n return target;\n}\n\nexport function mergeAxisExecutionContext(\n base?: AxisExecutionContext,\n override?: AxisExecutionContext,\n): AxisExecutionContext | undefined {\n if (!base && !override) {\n return undefined;\n }\n\n return {\n ...base,\n ...override,\n capsuleRef: {\n ...(base?.capsuleRef || {}),\n ...(override?.capsuleRef || {}),\n },\n };\n}","export interface AxisLogger {\n debug(message: string): void;\n log(message: string): void;\n warn(message: string): void;\n error(message: string): void;\n}\n\nfunction write(\n method: \"debug\" | \"log\" | \"warn\" | \"error\",\n scope: string,\n message: string,\n): void {\n const consoleMethod = console[method] ?? console.log;\n consoleMethod.call(console, `[${scope}] ${message}`);\n}\n\nexport function createAxisLogger(scope: string): AxisLogger {\n return {\n debug: (message) => write(\"debug\", scope, message),\n log: (message) => write(\"log\", scope, message),\n warn: (message) => write(\"warn\", scope, message),\n error: (message) => write(\"error\", scope, message),\n };\n}\n","import { createHash } from \"crypto\";\n\nimport type { AxisFrame } from \"../core/axis-bin\";\nimport { FLAG_CHAIN_REQ, TLV_ACTOR_ID, TLV_CAPSULE, TLV_INTENT, TLV_TRACE_ID } from \"../core/constants\";\nimport type { AxisObserverBinding } from \"../decorators/observer.decorator\";\nimport type {\n AxisChainEnvelope,\n AxisChainResult,\n AxisChainStatus,\n AxisChainStep,\n AxisChainStepResult,\n AxisChainStepStatus,\n AxisExecutionMode,\n} from \"./axis-chain.types\";\nimport {\n getAxisExecutionContext,\n mergeAxisExecutionContext,\n withAxisExecutionContext,\n} from \"./axis-execution-context\";\nimport { ObserverDispatcherService } from \"./observer-dispatcher.service\";\nimport { AxisEffect, IntentRouter } from \"./intent.router\";\nimport { createAxisLogger } from \"../utils/axis-logger\";\n\nexport interface AxisChainExecutionOptions {\n actorId?: string;\n baseFrame?: Partial<AxisFrame>;\n}\n\nexport class AxisChainExecutor {\n private readonly logger = createAxisLogger(AxisChainExecutor.name);\n private readonly encoder = new TextEncoder();\n private readonly decoder = new TextDecoder();\n\n constructor(\n private readonly router: IntentRouter,\n private readonly observerDispatcher?: ObserverDispatcherService,\n ) {}\n\n async execute(\n envelope: AxisChainEnvelope,\n options: AxisChainExecutionOptions = {},\n ): Promise<AxisChainResult> {\n this.validateEnvelope(envelope);\n\n const startedAt = Date.now();\n const results = new Map<string, AxisChainStepResult>();\n const bindings = this.collectChainBindings(envelope);\n\n await this.dispatch(bindings, {\n event: \"chain.received\",\n timestamp: startedAt,\n chainId: envelope.chainId,\n envelope,\n observerTags: envelope.observerTags,\n capsule: envelope.capsule,\n keyExchange: envelope.keyExchange,\n });\n\n await this.dispatch(bindings, {\n event: \"chain.admitted\",\n timestamp: Date.now(),\n chainId: envelope.chainId,\n envelope,\n observerTags: envelope.observerTags,\n capsule: envelope.capsule,\n keyExchange: envelope.keyExchange,\n });\n\n const stepsById = new Map(envelope.steps.map((step) => [step.stepId, step]));\n const pending = new Set(stepsById.keys());\n\n while (pending.size > 0) {\n const ready = Array.from(pending)\n .map((stepId) => stepsById.get(stepId)!)\n .filter((step) => this.canRun(step, results));\n\n if (ready.length === 0) {\n this.markUnresolvedSteps(\n pending,\n stepsById,\n results,\n \"BLOCKED\",\n \"UNRESOLVED_DEPENDENCIES\",\n );\n break;\n }\n\n if (envelope.mode === \"parallel\") {\n const waveResults = await Promise.all(\n ready.map((step) => this.executeStep(step, envelope, results, options)),\n );\n for (const result of waveResults) {\n results.set(result.stepId, result);\n pending.delete(result.stepId);\n }\n } else {\n for (const step of ready) {\n const result = await this.executeStep(step, envelope, results, options);\n results.set(result.stepId, result);\n pending.delete(result.stepId);\n\n if (\n result.status === \"FAILED\" &&\n (envelope.mode === \"strict\" || envelope.mode === \"atomic\")\n ) {\n this.markUnresolvedSteps(\n pending,\n stepsById,\n results,\n \"SKIPPED\",\n \"CHAIN_HALTED\",\n );\n pending.clear();\n break;\n }\n }\n }\n\n this.blockStepsWithFailedDependencies(pending, stepsById, results);\n }\n\n const finishedAt = Date.now();\n const orderedResults = envelope.steps.map((step) => results.get(step.stepId)!);\n const summary = this.buildSummary(envelope.mode, orderedResults, startedAt, finishedAt, envelope.chainId);\n\n await this.dispatch(bindings, {\n event:\n summary.status === \"SUCCEEDED\"\n ? \"chain.completed\"\n : summary.status === \"PARTIAL\"\n ? \"chain.partial\"\n : \"chain.failed\",\n timestamp: finishedAt,\n chainId: envelope.chainId,\n envelope,\n result: summary,\n observerTags: envelope.observerTags,\n capsule: envelope.capsule,\n keyExchange: envelope.keyExchange,\n });\n\n return summary;\n }\n\n private async executeStep(\n step: AxisChainStep,\n envelope: AxisChainEnvelope,\n results: Map<string, AxisChainStepResult>,\n options: AxisChainExecutionOptions,\n ): Promise<AxisChainStepResult> {\n const stepBindings = this.router.getObservers(step.intent);\n const startedAt = Date.now();\n const input = this.resolveStepInput(step.input, results);\n\n await this.dispatch(stepBindings, {\n event: \"step.started\",\n timestamp: startedAt,\n chainId: envelope.chainId,\n stepId: step.stepId,\n handler: step.handler,\n intent: step.intent,\n envelope,\n step,\n observerTags: [...(envelope.observerTags || []), ...(step.observerTags || [])],\n capsule: step.capsuleScope\n ? {\n ...envelope.capsule,\n scope: step.capsuleScope,\n }\n : envelope.capsule,\n keyExchange: step.keyExchange || envelope.keyExchange,\n });\n\n try {\n const frame = this.buildFrame(step, envelope, input, options);\n const effect = await this.router.route(frame);\n const finishedAt = Date.now();\n const output = this.decodeOutput(effect.body);\n const proofHash = this.computeProofHash(envelope.chainId, step.stepId, effect, output);\n\n const result: AxisChainStepResult = {\n stepId: step.stepId,\n intent: step.intent,\n status: \"SUCCEEDED\",\n effect: effect.effect,\n output,\n dependsOn: step.dependsOn,\n startedAt,\n finishedAt,\n proofHash,\n observerTags: [...(envelope.observerTags || []), ...(step.observerTags || [])],\n metadata: effect.metadata,\n };\n\n await this.dispatch(stepBindings, {\n event: \"handler.completed\",\n timestamp: finishedAt,\n chainId: envelope.chainId,\n stepId: step.stepId,\n handler: step.handler,\n intent: step.intent,\n effect,\n envelope,\n step,\n result,\n observerTags: result.observerTags,\n capsule: envelope.capsule,\n keyExchange: step.keyExchange || envelope.keyExchange,\n });\n\n await this.dispatch(stepBindings, {\n event: \"proof.recorded\",\n timestamp: finishedAt,\n chainId: envelope.chainId,\n stepId: step.stepId,\n handler: step.handler,\n intent: step.intent,\n envelope,\n step,\n result,\n observerTags: result.observerTags,\n capsule: envelope.capsule,\n keyExchange: step.keyExchange || envelope.keyExchange,\n metadata: { proofHash },\n });\n\n await this.dispatch(stepBindings, {\n event: \"step.completed\",\n timestamp: finishedAt,\n chainId: envelope.chainId,\n stepId: step.stepId,\n handler: step.handler,\n intent: step.intent,\n effect,\n envelope,\n step,\n result,\n observerTags: result.observerTags,\n capsule: envelope.capsule,\n keyExchange: step.keyExchange || envelope.keyExchange,\n });\n\n return result;\n } catch (error: any) {\n const finishedAt = Date.now();\n const result: AxisChainStepResult = {\n stepId: step.stepId,\n intent: step.intent,\n status: \"FAILED\",\n error: error.message,\n dependsOn: step.dependsOn,\n startedAt,\n finishedAt,\n observerTags: [...(envelope.observerTags || []), ...(step.observerTags || [])],\n };\n\n this.logger.warn(\n `Chain ${envelope.chainId} step ${step.stepId} failed: ${error.message}`,\n );\n\n await this.dispatch(stepBindings, {\n event: \"step.failed\",\n timestamp: finishedAt,\n chainId: envelope.chainId,\n stepId: step.stepId,\n handler: step.handler,\n intent: step.intent,\n error: error.message,\n envelope,\n step,\n result,\n observerTags: result.observerTags,\n capsule: envelope.capsule,\n keyExchange: step.keyExchange || envelope.keyExchange,\n });\n\n return result;\n }\n }\n\n private buildFrame(\n step: AxisChainStep,\n envelope: AxisChainEnvelope,\n input: unknown,\n options: AxisChainExecutionOptions,\n ): AxisFrame {\n const baseContext = getAxisExecutionContext(options.baseFrame);\n const baseHeaders = new Map(options.baseFrame?.headers || []);\n baseHeaders.set(TLV_INTENT, this.encoder.encode(step.intent));\n baseHeaders.set(TLV_TRACE_ID, this.encoder.encode(envelope.chainId));\n\n const capsuleId = envelope.capsule?.capsuleId;\n if (capsuleId) {\n baseHeaders.set(TLV_CAPSULE, this.encoder.encode(capsuleId));\n }\n\n if (options.actorId) {\n baseHeaders.set(TLV_ACTOR_ID, this.encoder.encode(options.actorId));\n }\n\n return withAxisExecutionContext(\n {\n flags: (options.baseFrame?.flags || 0) | FLAG_CHAIN_REQ,\n headers: baseHeaders,\n body: this.serializeInput(input),\n sig: options.baseFrame?.sig || new Uint8Array(0),\n },\n mergeAxisExecutionContext(baseContext, {\n metaIntent: \"CHAIN.EXEC\",\n actorId: options.actorId || baseContext?.actorId,\n capsuleRef: step.capsuleScope\n ? {\n ...(envelope.capsule || {}),\n scope: step.capsuleScope,\n }\n : envelope.capsule,\n chainEnvelope: envelope,\n chainStep: step,\n }) || {},\n );\n }\n\n private validateEnvelope(envelope: AxisChainEnvelope): void {\n if (!envelope.chainId) {\n throw new Error(\"CHAIN_ID_REQUIRED\");\n }\n\n if (!envelope.steps || envelope.steps.length === 0) {\n throw new Error(\"CHAIN_STEPS_REQUIRED\");\n }\n\n const seen = new Set<string>();\n for (const step of envelope.steps) {\n if (!step.stepId) {\n throw new Error(\"CHAIN_STEP_ID_REQUIRED\");\n }\n\n if (!step.intent) {\n throw new Error(`CHAIN_STEP_INTENT_REQUIRED:${step.stepId}`);\n }\n\n if (seen.has(step.stepId)) {\n throw new Error(`CHAIN_STEP_DUPLICATE:${step.stepId}`);\n }\n seen.add(step.stepId);\n }\n\n for (const step of envelope.steps) {\n for (const dependency of step.dependsOn || []) {\n if (!seen.has(dependency)) {\n throw new Error(\n `CHAIN_STEP_DEPENDENCY_UNKNOWN:${step.stepId}:${dependency}`,\n );\n }\n }\n }\n }\n\n private canRun(\n step: AxisChainStep,\n results: Map<string, AxisChainStepResult>,\n ): boolean {\n return (step.dependsOn || []).every((dependency) => results.has(dependency));\n }\n\n private blockStepsWithFailedDependencies(\n pending: Set<string>,\n stepsById: Map<string, AxisChainStep>,\n results: Map<string, AxisChainStepResult>,\n ): void {\n for (const stepId of Array.from(pending)) {\n const step = stepsById.get(stepId);\n if (!step || !step.dependsOn || step.dependsOn.length === 0) continue;\n\n const dependencyResults = step.dependsOn\n .map((dependency) => results.get(dependency))\n .filter(Boolean) as AxisChainStepResult[];\n\n if (dependencyResults.length !== step.dependsOn.length) continue;\n\n const hasFailure = dependencyResults.some(\n (dependency) => dependency.status !== \"SUCCEEDED\",\n );\n if (!hasFailure) continue;\n\n results.set(step.stepId, {\n stepId: step.stepId,\n intent: step.intent,\n status: \"BLOCKED\",\n error: \"DEPENDENCY_FAILED\",\n dependsOn: step.dependsOn,\n startedAt: Date.now(),\n finishedAt: Date.now(),\n observerTags: step.observerTags,\n });\n pending.delete(step.stepId);\n }\n }\n\n private markUnresolvedSteps(\n pending: Set<string>,\n stepsById: Map<string, AxisChainStep>,\n results: Map<string, AxisChainStepResult>,\n status: AxisChainStepStatus,\n error: string,\n ): void {\n for (const stepId of pending) {\n const step = stepsById.get(stepId);\n if (!step) continue;\n results.set(stepId, {\n stepId,\n intent: step.intent,\n status,\n error,\n dependsOn: step.dependsOn,\n startedAt: Date.now(),\n finishedAt: Date.now(),\n observerTags: step.observerTags,\n });\n }\n }\n\n private buildSummary(\n mode: AxisExecutionMode,\n results: AxisChainStepResult[],\n startedAt: number,\n finishedAt: number,\n chainId: string,\n ): AxisChainResult {\n const completedSteps = results.filter((result) => result.status === \"SUCCEEDED\").length;\n const failedSteps = results.filter((result) => result.status === \"FAILED\").length;\n const blockedSteps = results.filter((result) => result.status === \"BLOCKED\").length;\n const skippedSteps = results.filter((result) => result.status === \"SKIPPED\").length;\n\n let status: AxisChainStatus = \"SUCCEEDED\";\n if (failedSteps > 0 || blockedSteps > 0 || skippedSteps > 0) {\n status =\n mode === \"best_effort\" || mode === \"parallel\"\n ? completedSteps > 0\n ? \"PARTIAL\"\n : \"FAILED\"\n : \"FAILED\";\n }\n\n return {\n chainId,\n mode,\n status,\n completedSteps,\n failedSteps,\n blockedSteps,\n skippedSteps,\n startedAt,\n finishedAt,\n results,\n rollback:\n mode === \"atomic\"\n ? {\n supported: false,\n attempted: false,\n reason: \"AXIS handlers do not expose rollback semantics yet\",\n }\n : undefined,\n };\n }\n\n private resolveStepInput(\n value: unknown,\n results: Map<string, AxisChainStepResult>,\n ): unknown {\n if (typeof value === \"string\") {\n if (!value.startsWith(\"$\")) return value;\n return this.lookupReference(value.slice(1), results);\n }\n\n if (Array.isArray(value)) {\n return value.map((entry) => this.resolveStepInput(entry, results));\n }\n\n if (value && typeof value === \"object\") {\n return Object.fromEntries(\n Object.entries(value).map(([key, entry]) => [\n key,\n this.resolveStepInput(entry, results),\n ]),\n );\n }\n\n return value;\n }\n\n private lookupReference(\n path: string,\n results: Map<string, AxisChainStepResult>,\n ): unknown {\n const [stepId, ...segments] = path.split(\".\");\n const result = results.get(stepId);\n if (!result) return undefined;\n\n let current: unknown = result;\n for (const segment of segments) {\n if (current === undefined || current === null) return undefined;\n if (typeof current !== \"object\") return undefined;\n current = (current as Record<string, unknown>)[segment];\n }\n return current;\n }\n\n private serializeInput(input: unknown): Uint8Array {\n if (input instanceof Uint8Array) return input;\n if (typeof input === \"string\") return this.encoder.encode(input);\n if (input === undefined) return new Uint8Array(0);\n return this.encoder.encode(JSON.stringify(input));\n }\n\n private decodeOutput(body?: Uint8Array): unknown {\n if (!body || body.length === 0) return undefined;\n\n try {\n const text = this.decoder.decode(body);\n try {\n return JSON.parse(text);\n } catch {\n return /^[\\x20-\\x7E\\s]+$/.test(text) ? text : body;\n }\n } catch {\n return body;\n }\n }\n\n private computeProofHash(\n chainId: string,\n stepId: string,\n effect: AxisEffect,\n output: unknown,\n ): string {\n const hash = createHash(\"sha256\");\n hash.update(chainId);\n hash.update(\":\");\n hash.update(stepId);\n hash.update(\":\");\n hash.update(effect.effect);\n hash.update(\":\");\n hash.update(JSON.stringify(output ?? null));\n return hash.digest(\"hex\");\n }\n\n private collectChainBindings(\n envelope: AxisChainEnvelope,\n ): AxisObserverBinding[] {\n const uniqueBindings = new Map<string, AxisObserverBinding>();\n\n for (const step of envelope.steps) {\n for (const binding of this.router.getObservers(step.intent)) {\n const key = binding.refs.map((ref) => String(ref)).sort().join(\"|\");\n if (!uniqueBindings.has(key)) {\n uniqueBindings.set(key, binding);\n }\n }\n }\n\n return Array.from(uniqueBindings.values());\n }\n\n private async dispatch(\n bindings: AxisObserverBinding[],\n context: Parameters<ObserverDispatcherService[\"dispatch\"]>[1],\n ): Promise<void> {\n if (!this.observerDispatcher) return;\n await this.observerDispatcher.dispatch(bindings, context);\n }\n}\n","/**\n * AXIS Scope Utilities\n * Validates capsule scopes against required resource access.\n * Prevents BOLA (Broken Object Level Authorization) attacks.\n */\n\n/**\n * Check if a capsule has the required scope.\n * Scopes use colon notation: resource:id or resource:*\n *\n * Examples:\n * - wallet:w_123\n * - merchant:m_456\n * - payment:*\n */\nexport function hasScope(scopes: string[], required: string): boolean {\n if (!Array.isArray(scopes) || scopes.length === 0) {\n return false;\n }\n\n // Exact match\n if (scopes.includes(required)) {\n return true;\n }\n\n // Wildcard match: resource:* matches resource:anything\n const [resource, id] = required.split(':');\n if (resource && id) {\n const wildcard = `${resource}:*`;\n if (scopes.includes(wildcard)) {\n return true;\n }\n }\n\n return false;\n}\n\n/**\n * Extract resource type and ID from scope.\n */\nexport function parseScope(\n scope: string,\n): { resource: string; id: string } | null {\n const parts = scope.split(':');\n if (parts.length !== 2) return null;\n return { resource: parts[0], id: parts[1] };\n}\n\n/**\n * Check if actor can access a specific resource based on capsule scopes.\n */\nexport function canAccessResource(\n scopes: string[],\n resourceType: string,\n resourceId: string,\n): boolean {\n const required = `${resourceType}:${resourceId}`;\n return hasScope(scopes, required);\n}\n","import { hasScope } from \"./scopes\";\n\nexport interface InlineCapsuleClaims {\n id?: string;\n actorId?: string;\n intents?: string[];\n issuedAt?: bigint;\n expiresAt?: bigint;\n realm?: string;\n node?: string;\n scopes?: string[];\n raw: Record<string, unknown>;\n}\n\nexport function normalizeInlineCapsule(\n input: unknown,\n): InlineCapsuleClaims | null {\n if (!input || typeof input !== \"object\" || Array.isArray(input)) {\n return null;\n }\n\n const raw = input as Record<string, unknown>;\n const scopes = normalizeStringList(raw.scopes ?? raw.scope);\n\n return {\n id: normalizeScalar(raw.id),\n actorId: normalizeScalar(raw.actorId),\n intents: normalizeStringList(raw.intents),\n issuedAt: normalizeTimestamp(raw.issuedAt ?? raw.iat),\n expiresAt: normalizeTimestamp(raw.expiresAt ?? raw.exp),\n realm: normalizeScalar(raw.realm),\n node: normalizeScalar(raw.node),\n scopes,\n raw,\n };\n}\n\nexport function inlineCapsuleAllowsIntent(\n capsule: InlineCapsuleClaims,\n intent: string,\n): boolean {\n if (!capsule.intents || capsule.intents.length === 0) {\n return false;\n }\n\n for (const pattern of capsule.intents) {\n if (pattern === \"*\" || pattern === intent) {\n return true;\n }\n\n if (pattern.endsWith(\".*\")) {\n const prefix = pattern.slice(0, -1);\n if (intent.startsWith(prefix)) {\n return true;\n }\n }\n }\n\n return false;\n}\n\nexport function isInlineCapsuleExpired(\n capsule: InlineCapsuleClaims,\n clockSkewMs = 30000,\n): boolean {\n if (capsule.expiresAt === undefined) {\n return false;\n }\n\n return BigInt(Date.now()) > capsule.expiresAt + BigInt(clockSkewMs);\n}\n\nexport function resolvePolicyScopes(\n scopes: string[],\n context: {\n body?: unknown;\n intent: string;\n actorId?: string;\n chainId?: string;\n stepId?: string;\n },\n): string[] {\n return scopes.map((scope) =>\n scope.replace(/\\$\\{([^}]+)\\}/g, (_match, expression: string) => {\n const resolved = resolveTemplateExpression(expression.trim(), context);\n if (resolved === undefined || resolved === null || resolved === \"\") {\n throw new Error(`CAPSULE_SCOPE_TEMPLATE_UNRESOLVED:${expression}`);\n }\n return String(resolved);\n }),\n );\n}\n\nexport function inlineCapsuleSatisfiesScopes(\n capsule: InlineCapsuleClaims,\n requiredScopes: string[],\n mode: \"all\" | \"any\" = \"all\",\n): boolean {\n if (!capsule.scopes || capsule.scopes.length === 0) {\n return false;\n }\n\n if (mode === \"any\") {\n return requiredScopes.some((scope) => hasScope(capsule.scopes!, scope));\n }\n\n return requiredScopes.every((scope) => hasScope(capsule.scopes!, scope));\n}\n\nfunction resolveTemplateExpression(\n expression: string,\n context: {\n body?: unknown;\n intent: string;\n actorId?: string;\n chainId?: string;\n stepId?: string;\n },\n): unknown {\n if (expression === \"intent\") {\n return context.intent;\n }\n\n if (expression === \"actorId\") {\n return context.actorId;\n }\n\n if (expression === \"chainId\") {\n return context.chainId;\n }\n\n if (expression === \"stepId\") {\n return context.stepId;\n }\n\n if (expression.startsWith(\"body.\")) {\n return getNestedValue(context.body, expression.slice(5));\n }\n\n return undefined;\n}\n\nfunction getNestedValue(value: unknown, path: string): unknown {\n if (!value || typeof value !== \"object\") {\n return undefined;\n }\n\n return path.split(\".\").reduce<unknown>((current, segment) => {\n if (!current || typeof current !== \"object\") {\n return undefined;\n }\n return (current as Record<string, unknown>)[segment];\n }, value);\n}\n\nfunction normalizeScalar(value: unknown): string | undefined {\n if (typeof value === \"string\") {\n return value;\n }\n\n if (value instanceof Uint8Array) {\n return Buffer.from(value).toString(\"hex\");\n }\n\n return undefined;\n}\n\nfunction normalizeStringList(value: unknown): string[] | undefined {\n if (!value) {\n return undefined;\n }\n\n const list = Array.isArray(value) ? value : [value];\n const normalized = list\n .map((entry) => (typeof entry === \"string\" ? entry : undefined))\n .filter((entry): entry is string => !!entry && entry.trim().length > 0);\n\n return normalized.length > 0 ? Array.from(new Set(normalized)) : undefined;\n}\n\nfunction normalizeTimestamp(value: unknown): bigint | undefined {\n if (typeof value === \"bigint\") {\n return value;\n }\n\n if (typeof value === \"number\" && Number.isFinite(value)) {\n return BigInt(Math.trunc(value));\n }\n\n if (typeof value === \"string\" && value.trim().length > 0) {\n try {\n return BigInt(value);\n } catch {\n return undefined;\n }\n }\n\n return undefined;\n}","import type { AxisObservedContext } from \"../types/axis-frame.types\";\n\n/**\n * Sensor Phase Metadata\n *\n * Metadata describing which phase(s) a sensor executes in.\n * Used for validation and optimization.\n *\n * @interface SensorPhaseMetadata\n */\nexport interface SensorPhaseMetadata {\n /** Execution phase: pre-decode (middleware) or post-decode (controller) */\n phase: \"PRE_DECODE\" | \"POST_DECODE\";\n\n /** Other sensors that must run before this one */\n dependencies?: string[];\n\n /** Whether this sensor can perform async I/O */\n asyncOk?: boolean;\n\n /** Whether this sensor can use cryptographic operations */\n cryptoOk?: boolean;\n\n /** Human-readable description of sensor purpose */\n description?: string;\n}\n\n/**\n * AXIS Sensor Interface\n *\n * Core interface for all security sensors in the AXIS pipeline.\n */\nexport interface AxisSensor {\n readonly name: string;\n readonly order?: number; // Lower runs first\n /** Execution phase hint */\n phase?: SensorPhaseMetadata | \"PRE_DECODE\" | \"POST_DECODE\";\n /**\n * Synchronous applicability gate.\n *\n * Return `false` when the sensor does not apply to this input. The chain will\n * skip the sensor without recording a deny decision. Do not perform policy\n * decisions or async I/O here; put those in `run()`.\n */\n supports?(input: SensorInput): boolean;\n /**\n * Executes the sensor's actual check after `supports()` has passed.\n *\n * Return a SensorDecision to allow, deny, throttle, flag, or tighten the\n * request. This method may perform async work according to the sensor phase\n * and metadata.\n */\n run(input: SensorInput): Promise<SensorDecision>;\n}\n\n// Optional lifecycle hook for frameworks that support module initialization.\nexport interface AxisSensorInit extends AxisSensor {\n onModuleInit?(): void | Promise<void>;\n}\n\n/**\n * Sensors that run before frame decoding/deserialization.\n * They should be fast, avoid I/O, and fail fast on malformed traffic.\n */\nexport interface AxisPreSensor extends AxisSensor {\n phase: \"PRE_DECODE\";\n}\n\n/**\n * Sensors that run after a frame is fully decoded and parsed.\n * They may use full context (intent, actor, proofs) and can perform I/O.\n */\nexport interface AxisPostSensor extends AxisSensor {\n phase: \"POST_DECODE\";\n}\n\n/**\n * Sensor Input\n *\n * Represents the structured data passed to a security sensor for evaluation.\n * Depending on the execution phase, different fields may be populated.\n *\n * **Flow:**\n * - **Phase 1 (Pre-decode):** `rawBytes`, `ip`, `path`, and `peek` are typically available.\n * - **Phase 2/3 (Post-decode):** `intent`, `contentLength`, and `metadata` are populated after frame parsing.\n *\n * @interface SensorInput\n */\nexport interface SensorInput {\n /** The full raw binary frame from the wire (if available) */\n rawBytes?: Buffer | Uint8Array;\n\n /** The AXIS intent string extracted from the frame header (e.g., 'system.info') */\n intent?: string;\n\n /** IPv4/IPv6 address of the edge client */\n ip?: string;\n\n /** The HTTP or transport path being accessed */\n path?: string;\n\n /** Total size of the frame body in bytes */\n contentLength?: number;\n\n /** A small slice of the beginning of the body for early pattern matching */\n peek?: Uint8Array;\n\n /** Geolocation country code (if resolved by upstream middleware) */\n country?: string;\n\n /** Client identifier from the transport layer (e.g., Capsule ID or Socket ID) */\n clientId?: string;\n\n /** Whether the request is coming via a WebSocket connection */\n isWs?: boolean;\n\n /** Extensible metadata for cross-sensor communication */\n metadata?: Record<string, any>;\n\n /** Actor ID from frame or request */\n actorId?: string;\n\n /** Operation code */\n opcode?: string;\n\n /** Audience field */\n aud?: string;\n\n /** Observed context from frame parsing */\n observed?: AxisObservedContext;\n\n /** Parsed frame body */\n frameBody?: any;\n\n /** Device identifier */\n deviceId?: string;\n\n /** Session identifier */\n sessionId?: string;\n\n /** Parsed packet data */\n packet?: Record<string, any>;\n\n /** Dynamic field access for sensor-specific data */\n [key: string]: any;\n}\n\nexport enum Decision {\n ALLOW = \"ALLOW\",\n DENY = \"DENY\",\n THROTTLE = \"THROTTLE\",\n FLAG = \"FLAG\",\n}\n/**\n * Sensor Decision\n *\n * Represents the outcome of an individual sensor's evaluation.\n * Supports two formats for backward compatibility:\n *\n * 1. Modern format (preferred): Uses decision/allow/riskScore/reasons\n * 2. Legacy format: Uses action/code/reason (deprecated, will be removed)\n */\nexport type SensorDecision =\n // Modern format (preferred)\n | {\n /** Final decision outcome (optional for backward compatibility) */\n decision?: Decision;\n /** Whether the request may continue immediately */\n allow: boolean;\n /** Risk score from 0–100 (0 = safe, 100 = blocked) */\n riskScore: number;\n /** Human & machine traceable reasons */\n reasons: string[];\n /** Machine-readable error or control code */\n code?: string;\n /** Throttle hint (only relevant for THROTTLE) */\n retryAfterMs?: number;\n /** Optional delta applied to rolling risk/anomaly state */\n scoreDelta?: number;\n /** Extra signals for audit, observability, forensics */\n tags?: Record<string, any>;\n /** Optional capsule / verification metadata */\n meta?: any;\n /** Optional constraint tightening instructions */\n tighten?: {\n expSecondsMax?: number;\n constraintsPatch?: Record<string, any>;\n };\n }\n // Legacy action-based format (deprecated)\n | { action: \"ALLOW\"; meta?: any }\n | {\n action: \"DENY\";\n code: string;\n reason?: string;\n retryAfterMs?: number;\n meta?: any;\n }\n | { action: \"THROTTLE\"; retryAfterMs: number; meta?: any }\n | { action: \"FLAG\"; scoreDelta: number; reasons: string[]; meta?: any };\n\nexport type SensorMinifiedDecision = {\n allow: boolean;\n riskScore: number;\n reasons: string[];\n tags?: Record<string, any>;\n meta?: any;\n tighten?: { expSecondsMax?: number; constraintsPatch?: Record<string, any> };\n /** Legacy fields for compatibility */\n retryAfterMs?: number;\n};\n\n/**\n * Helper to normalize SensorDecision (handles both legacy and modern formats)\n */\nexport function normalizeSensorDecision(\n sensorDecision: SensorDecision,\n): SensorMinifiedDecision {\n // Check if it's a legacy action-based format\n if (\"action\" in sensorDecision) {\n // Convert legacy format to modern\n switch (sensorDecision.action) {\n case \"ALLOW\":\n return {\n allow: true,\n riskScore: 0,\n reasons: [],\n meta: sensorDecision.meta,\n };\n case \"DENY\":\n return {\n allow: false,\n riskScore: 100,\n reasons: [sensorDecision.code, sensorDecision.reason].filter(\n Boolean,\n ) as string[],\n meta: sensorDecision.meta,\n retryAfterMs: sensorDecision.retryAfterMs,\n };\n case \"THROTTLE\":\n return {\n allow: false,\n riskScore: 50,\n reasons: [\"RATE_LIMIT\"],\n retryAfterMs: sensorDecision.retryAfterMs,\n meta: sensorDecision.meta,\n };\n case \"FLAG\":\n return {\n allow: true,\n riskScore: sensorDecision.scoreDelta,\n reasons: sensorDecision.reasons,\n meta: sensorDecision.meta,\n };\n }\n }\n\n // Modern format - already has the required fields\n return {\n allow: sensorDecision.allow,\n riskScore: sensorDecision.riskScore,\n reasons: sensorDecision.reasons,\n tags: sensorDecision.tags,\n meta: sensorDecision.meta,\n tighten: sensorDecision.tighten,\n retryAfterMs: sensorDecision.retryAfterMs,\n };\n}\n\n/**\n * Helper factories for creating SensorDecision objects\n */\nexport const SensorDecisions = {\n allow(meta?: any, tags?: Record<string, any>): SensorDecision {\n return {\n decision: Decision.ALLOW,\n allow: true,\n riskScore: 0,\n reasons: [],\n tags,\n meta,\n };\n },\n\n deny(code: string, reason?: string, meta?: any): SensorDecision {\n return {\n decision: Decision.DENY,\n allow: false,\n riskScore: 100,\n code,\n reasons: [code, reason].filter(Boolean) as string[],\n meta,\n };\n },\n\n throttle(retryAfterMs: number, meta?: any): SensorDecision {\n return {\n decision: Decision.THROTTLE,\n allow: false,\n riskScore: 50,\n retryAfterMs,\n code: \"RATE_LIMIT\",\n reasons: [\"RATE_LIMIT\"],\n meta,\n };\n },\n\n flag(scoreDelta: number, reasons: string[], meta?: any): SensorDecision {\n return {\n decision: Decision.FLAG,\n allow: true,\n riskScore: scoreDelta,\n scoreDelta,\n reasons,\n meta,\n };\n },\n};\n","/**\n * Capsule-Carried Encryption (CCE) Types — v1\n *\n * Defines the core types for the CCE protocol where:\n * - TickAuth issues capsules (authority)\n * - AXIS verifies capsules, decrypts payloads, derives execution context\n * - Payload confidentiality uses hybrid encryption (AES-GCM + AXIS public key)\n */\n\n// ============================================================================\n// CCE Protocol Constants\n// ============================================================================\n\nexport const CCE_PROTOCOL_VERSION = \"cce-v1\" as const;\n\n/** Derivation context prefixes for HKDF */\nexport const CCE_DERIVATION = {\n /** Request execution context */\n REQUEST: \"axis:cce:req:v1\",\n /** Response execution context */\n RESPONSE: \"axis:cce:resp:v1\",\n /** Witness binding context */\n WITNESS: \"axis:cce:witness:v1\",\n} as const;\n\n/** Supported encryption algorithms */\nexport type CceAlgorithm = \"AES-256-GCM\";\n/** Supported key encapsulation algorithms */\nexport type CceKemAlgorithm = \"X25519\" | \"RSA-OAEP-256\";\n/** Supported KDF algorithms */\nexport type CceKdfAlgorithm = \"HKDF-SHA256\";\n\nexport const CCE_AES_KEY_BYTES = 32; // 256-bit AES key\nexport const CCE_IV_BYTES = 12; // 96-bit GCM nonce\nexport const CCE_TAG_BYTES = 16; // 128-bit GCM auth tag\nexport const CCE_NONCE_BYTES = 32; // 256-bit request/response nonce\n\n// ============================================================================\n// CCE Capsule Claims (extends TickAuth capsule for AXIS binding)\n// ============================================================================\n\n/**\n * CCE-specific claims that extend the TickAuth capsule.\n * These claims bind the capsule to a specific AXIS audience and intent.\n */\nexport interface CceCapsuleClaims {\n /** Capsule identifier (content-addressed) */\n capsule_id: string;\n /** Protocol version */\n ver: typeof CCE_PROTOCOL_VERSION;\n /** Subject / actor identity */\n sub: string;\n /** Client key identifier */\n kid: string;\n /** Bound intent */\n intent: string;\n /** AXIS audience (service identity) */\n aud: string;\n /** TPS window start (Unix ms or TPS index) */\n tps_from: number;\n /** TPS window end (Unix ms or TPS index) */\n tps_to: number;\n /** Capsule nonce (hex, from challenge) */\n capsule_nonce: string;\n /** Reference to originating challenge */\n challenge_id: string;\n /** Content hash of the validated proof used to issue this capsule */\n proof_hash?: string;\n /** Policy hash (hex) — Digital Fabric Law binding */\n policy_hash?: string;\n /** Issued-at timestamp (Unix seconds) */\n iat: number;\n /** Expires-at timestamp (Unix seconds) */\n exp: number;\n /** Capsule usage mode */\n mode: \"SINGLE_USE\" | \"SESSION\";\n /** Scope capabilities */\n scope?: string[];\n /** Constraints */\n constraints?: CceConstraints;\n /** TickAuth issuer signature over claims */\n issuer_sig: CceSignature;\n}\n\nexport interface CceConstraints {\n max_payload_bytes?: number;\n ip_allow?: string[];\n device_allow?: string[];\n country_allow?: string[];\n}\n\nexport interface CceSignature {\n alg: \"EdDSA\" | \"ES256\";\n kid: string;\n value: string; // base64url or hex\n}\n\n// ============================================================================\n// CCE Request Envelope\n// ============================================================================\n\n/**\n * The encrypted request envelope sent from Client → AXIS.\n *\n * The client:\n * 1. Generates ephemeral AES-256 key\n * 2. Encrypts payload with AES-256-GCM\n * 3. Encrypts AES key with AXIS public key (X25519 or RSA-OAEP)\n * 4. Signs the envelope with client private key\n * 5. Attaches capsule\n */\nexport interface CceRequestEnvelope {\n /** Protocol version */\n ver: typeof CCE_PROTOCOL_VERSION;\n /** Unique request identifier */\n request_id: string;\n /** Correlation identifier (for request/response binding) */\n correlation_id: string;\n /** Client key identifier */\n client_kid: string;\n /** The capsule claims (signed by TickAuth) */\n capsule: CceCapsuleClaims;\n /** Encrypted transport key (AXIS public key encrypted) */\n encrypted_key: CceEncryptedKey;\n /** Encrypted payload */\n encrypted_payload: CceEncryptedPayload;\n /** Request nonce (hex, 32 bytes) */\n request_nonce: string;\n /** Client signature over canonical envelope */\n client_sig: CceSignature;\n /** Content type of the plaintext payload */\n content_type: string;\n /** Algorithm descriptors */\n algorithms: CceAlgorithmDescriptor;\n /** Additional authenticated data descriptor */\n aad_descriptor?: string;\n}\n\n/**\n * Encrypted symmetric key wrapped by AXIS public key.\n */\nexport interface CceEncryptedKey {\n /** Key encapsulation algorithm */\n alg: CceKemAlgorithm;\n /** AXIS key identifier used for encapsulation */\n axis_kid: string;\n /** Encrypted key bytes (base64url) */\n ciphertext: string;\n /** Ephemeral public key (for X25519 ECDH, base64url) */\n ephemeral_pk?: string;\n}\n\n/**\n * Encrypted payload with AEAD metadata.\n */\nexport interface CceEncryptedPayload {\n /** Encryption algorithm */\n alg: CceAlgorithm;\n /** Initialization vector / nonce (base64url, 12 bytes) */\n iv: string;\n /** Ciphertext (base64url) */\n ciphertext: string;\n /** Authentication tag (base64url, 16 bytes) */\n tag: string;\n}\n\n/**\n * Algorithm descriptor for the envelope.\n */\nexport interface CceAlgorithmDescriptor {\n /** Key encapsulation */\n kem: CceKemAlgorithm;\n /** Symmetric encryption */\n enc: CceAlgorithm;\n /** Key derivation (for execution context) */\n kdf: CceKdfAlgorithm;\n /** Signature algorithm */\n sig: \"EdDSA\" | \"ES256\";\n}\n\n// ============================================================================\n// CCE Response Envelope\n// ============================================================================\n\n/**\n * The encrypted response envelope sent from AXIS → Client.\n */\nexport interface CceResponseEnvelope {\n /** Protocol version */\n ver: typeof CCE_PROTOCOL_VERSION;\n /** Response identifier */\n response_id: string;\n /** Request identifier (binding) */\n request_id: string;\n /** Correlation identifier */\n correlation_id: string;\n /** Capsule identifier of the originating request */\n capsule_id: string;\n /** Encrypted transport key (Client public key encrypted) */\n encrypted_key: CceEncryptedKey;\n /** Encrypted response payload */\n encrypted_payload: CceEncryptedPayload;\n /** Response nonce (hex, 32 bytes) */\n response_nonce: string;\n /** AXIS signature over canonical response */\n axis_sig: CceSignature;\n /** Witness reference */\n witness_ref?: string;\n /** Algorithm descriptors */\n algorithms: CceAlgorithmDescriptor;\n /** Response status (plaintext, allowed on error) */\n status: CceResponseStatus;\n}\n\nexport type CceResponseStatus =\n | \"SUCCESS\"\n | \"DENIED\"\n | \"PARTIAL\"\n | \"FAILED\"\n | \"ERROR\";\n\n// ============================================================================\n// CCE Execution Context (derived inside AXIS)\n// ============================================================================\n\n/**\n * Execution context derived from capsule claims + AXIS local secret.\n * Proves that the request was not only decrypted but legally executable.\n */\nexport interface CceExecutionContext {\n /** Derived execution key (used for witness binding, never exposed) */\n execution_key_hash: string;\n /** Request identifier */\n request_id: string;\n /** Capsule identifier */\n capsule_id: string;\n /** Subject identity */\n sub: string;\n /** Client key identifier */\n kid: string;\n /** Intent */\n intent: string;\n /** Audience */\n aud: string;\n /** TPS window */\n tps_from: number;\n tps_to: number;\n /** Policy hash (if bound) */\n policy_hash?: string;\n /** Timestamp of context derivation */\n derived_at: number;\n /** Whether this context is valid */\n valid: boolean;\n}\n\n// ============================================================================\n// CCE Witness Record\n// ============================================================================\n\n/**\n * Witness record for the CCE request/response lifecycle.\n */\nexport interface CceWitnessRecord {\n /** Witness identifier */\n witness_id: string;\n /** Request identifier */\n request_id: string;\n /** Capsule identifier */\n capsule_id: string;\n /** Subject identity */\n sub: string;\n /** Intent */\n intent: string;\n /** Audience */\n aud: string;\n /** TPS window */\n tps_from: number;\n tps_to: number;\n /** Timestamp */\n timestamp: number;\n\n /** Verification results */\n verification: {\n client_sig: boolean;\n capsule_sig: boolean;\n tps_valid: boolean;\n audience_match: boolean;\n intent_match: boolean;\n replay_clean: boolean;\n nonce_unique: boolean;\n decryption_ok: boolean;\n };\n\n /** Handler execution result */\n execution: {\n status: CceResponseStatus;\n handler_duration_ms: number;\n effect?: string;\n };\n\n /** Response encryption result */\n response_encrypted: boolean;\n\n /** Execution context hash (proves legal execution) */\n execution_context_hash: string;\n\n /** Payload hash (redacted, never raw content) */\n request_payload_hash?: string;\n response_payload_hash?: string;\n}\n\n// ============================================================================\n// CCE Error Codes\n// ============================================================================\n\nexport const CCE_ERROR = {\n // Envelope errors\n INVALID_ENVELOPE: \"CCE_INVALID_ENVELOPE\",\n UNSUPPORTED_VERSION: \"CCE_UNSUPPORTED_VERSION\",\n MISSING_CAPSULE: \"CCE_MISSING_CAPSULE\",\n MISSING_ENCRYPTED_KEY: \"CCE_MISSING_ENCRYPTED_KEY\",\n\n // Signature errors\n CLIENT_SIG_INVALID: \"CCE_CLIENT_SIG_INVALID\",\n CLIENT_KEY_NOT_FOUND: \"CCE_CLIENT_KEY_NOT_FOUND\",\n\n // Capsule errors\n CAPSULE_SIG_INVALID: \"CCE_CAPSULE_SIG_INVALID\",\n CAPSULE_EXPIRED: \"CCE_CAPSULE_EXPIRED\",\n CAPSULE_NOT_YET_VALID: \"CCE_CAPSULE_NOT_YET_VALID\",\n CAPSULE_REVOKED: \"CCE_CAPSULE_REVOKED\",\n CAPSULE_CONSUMED: \"CCE_CAPSULE_CONSUMED\",\n CAPSULE_NOT_VERIFIED: \"CCE_CAPSULE_NOT_VERIFIED\",\n // Binding errors\n AUDIENCE_MISMATCH: \"CCE_AUDIENCE_MISMATCH\",\n INTENT_MISMATCH: \"CCE_INTENT_MISMATCH\",\n TPS_WINDOW_EXPIRED: \"CCE_TPS_WINDOW_EXPIRED\",\n TPS_WINDOW_FUTURE: \"CCE_TPS_WINDOW_FUTURE\",\n\n // Replay / nonce errors\n REPLAY_DETECTED: \"CCE_REPLAY_DETECTED\",\n NONCE_REUSED: \"CCE_NONCE_REUSED\",\n\n // Decryption errors\n DECRYPTION_FAILED: \"CCE_DECRYPTION_FAILED\",\n KEY_UNWRAP_FAILED: \"CCE_KEY_UNWRAP_FAILED\",\n AEAD_TAG_MISMATCH: \"CCE_AEAD_TAG_MISMATCH\",\n PAYLOAD_TOO_LARGE: \"CCE_PAYLOAD_TOO_LARGE\",\n\n // Schema / validation errors\n PAYLOAD_SCHEMA_INVALID: \"CCE_PAYLOAD_SCHEMA_INVALID\",\n INTENT_SCHEMA_MISMATCH: \"CCE_INTENT_SCHEMA_MISMATCH\",\n\n // Policy errors\n POLICY_DENIED: \"CCE_POLICY_DENIED\",\n CONSTRAINT_VIOLATED: \"CCE_CONSTRAINT_VIOLATED\",\n\n // Handler errors\n HANDLER_NOT_FOUND: \"CCE_HANDLER_NOT_FOUND\",\n HANDLER_EXECUTION_FAILED: \"CCE_HANDLER_EXECUTION_FAILED\",\n HANDLER_TIMEOUT: \"CCE_HANDLER_TIMEOUT\",\n\n // Response errors\n RESPONSE_ENCRYPTION_FAILED: \"CCE_RESPONSE_ENCRYPTION_FAILED\",\n} as const;\n\nexport type CceErrorCode = (typeof CCE_ERROR)[keyof typeof CCE_ERROR];\n\n/**\n * Structured CCE error.\n */\nexport class CceError extends Error {\n constructor(\n public readonly code: CceErrorCode,\n message: string,\n public readonly metadata?: Record<string, unknown>,\n ) {\n super(`[${code}] ${message}`);\n this.name = \"CceError\";\n }\n\n /** Whether this error is safe to expose to the client */\n get clientSafe(): boolean {\n // Never expose internal decryption/handler details\n const internal: CceErrorCode[] = [\n CCE_ERROR.DECRYPTION_FAILED,\n CCE_ERROR.KEY_UNWRAP_FAILED,\n CCE_ERROR.AEAD_TAG_MISMATCH,\n CCE_ERROR.HANDLER_EXECUTION_FAILED,\n CCE_ERROR.RESPONSE_ENCRYPTION_FAILED,\n ];\n return !internal.includes(this.code);\n }\n\n /** Get client-safe representation */\n toClientError(): { code: CceErrorCode; message: string } {\n if (this.clientSafe) {\n return { code: this.code, message: this.message };\n }\n return {\n code: CCE_ERROR.DECRYPTION_FAILED,\n message: \"Request processing failed\",\n };\n }\n}\n","import { bytesToHex, hexToBytes } from \"@noble/hashes/utils.js\";\n/**\n * CCE Key Derivation Service\n *\n * Implements HKDF-based key derivation for the Capsule-Carried Encryption protocol.\n * Keys are never placed in capsules — they are derived from:\n * - AXIS local secret (IKM)\n * - Capsule claims (salt + info)\n * - Request/response nonce (direction binding)\n * - Protocol version (upgrade protection)\n *\n * Uses @noble/hashes HKDF (RFC 5869) with SHA-256.\n */\nimport { hkdf } from \"@noble/hashes/hkdf.js\";\nimport { sha256 } from \"@noble/hashes/sha2.js\";\n\nimport { CCE_AES_KEY_BYTES, CCE_DERIVATION, CCE_NONCE_BYTES, type CceCapsuleClaims, type CceExecutionContext } from \"./cce.types\";\n\n/**\n * Input parameters for key derivation.\n */\nexport interface CceDerivationInput {\n /** AXIS local secret (hex, must be kept private) */\n axisLocalSecret: string;\n /** Capsule claims from the request */\n capsule: CceCapsuleClaims;\n /** Request nonce (hex) */\n requestNonce: string;\n /** Response nonce (hex, only for response derivation) */\n responseNonce?: string;\n}\n\n/**\n * Build the salt for HKDF from capsule + nonce.\n *\n * salt = SHA-256(capsule_id || capsule_nonce || request_nonce)\n */\nfunction buildSalt(\n capsuleId: string,\n capsuleNonce: string,\n requestNonce: string,\n): Uint8Array {\n const encoder = new TextEncoder();\n const data = encoder.encode(\n capsuleId + \"|\" + capsuleNonce + \"|\" + requestNonce,\n );\n return sha256(data);\n}\n\n/**\n * Build the info string for HKDF.\n * Binds the derived key to all authority dimensions.\n *\n * info = context_prefix | sub | kid | intent | aud | tps_from | tps_to | policy_hash | ver\n */\nfunction buildInfo(\n contextPrefix: string,\n capsule: CceCapsuleClaims,\n extraNonce?: string,\n): Uint8Array {\n const encoder = new TextEncoder();\n const parts = [\n contextPrefix,\n capsule.sub,\n capsule.kid,\n capsule.intent,\n capsule.aud,\n String(capsule.tps_from),\n String(capsule.tps_to),\n capsule.policy_hash ?? \"\",\n capsule.ver,\n ];\n if (extraNonce) {\n parts.push(extraNonce);\n }\n return encoder.encode(parts.join(\"|\"));\n}\n\n/**\n * Derive the request execution key.\n *\n * This key is used internally by AXIS to prove that:\n * 1. The request arrived with a valid capsule\n * 2. The capsule was bound to this specific intent/audience/subject\n * 3. AXIS possessed the local secret at derivation time\n *\n * The key itself is NEVER exposed — only its hash appears in witness records.\n */\nexport function deriveRequestExecutionKey(\n input: CceDerivationInput,\n): Uint8Array {\n const ikm = hexToBytes(input.axisLocalSecret);\n const salt = buildSalt(\n input.capsule.capsule_id,\n input.capsule.capsule_nonce,\n input.requestNonce,\n );\n const info = buildInfo(CCE_DERIVATION.REQUEST, input.capsule);\n\n return hkdf(sha256, ikm, salt, info, CCE_AES_KEY_BYTES);\n}\n\n/**\n * Derive the response execution key.\n * Uses a different context prefix and includes the response nonce,\n * ensuring request and response keys are always distinct.\n */\nexport function deriveResponseExecutionKey(\n input: CceDerivationInput & { responseNonce: string },\n): Uint8Array {\n const ikm = hexToBytes(input.axisLocalSecret);\n\n // Response salt uses a different construction\n const encoder = new TextEncoder();\n const saltData = encoder.encode(\n input.capsule.capsule_id +\n \"|\" +\n input.capsule.capsule_nonce +\n \"|\" +\n input.requestNonce +\n \"|\" +\n input.responseNonce,\n );\n const salt = sha256(saltData);\n\n const info = buildInfo(\n CCE_DERIVATION.RESPONSE,\n input.capsule,\n input.responseNonce,\n );\n\n return hkdf(sha256, ikm, salt, info, CCE_AES_KEY_BYTES);\n}\n\n/**\n * Derive the witness binding key.\n * Used to create tamper-evident witness records.\n */\nexport function deriveWitnessKey(input: CceDerivationInput): Uint8Array {\n const ikm = hexToBytes(input.axisLocalSecret);\n const salt = buildSalt(\n input.capsule.capsule_id,\n input.capsule.capsule_nonce,\n input.requestNonce,\n );\n const info = buildInfo(CCE_DERIVATION.WITNESS, input.capsule);\n\n return hkdf(sha256, ikm, salt, info, CCE_AES_KEY_BYTES);\n}\n\n/**\n * Build a complete execution context from capsule claims and derivation.\n * The execution key is derived but only its hash is stored.\n */\nexport function buildExecutionContext(\n input: CceDerivationInput,\n requestId: string,\n): CceExecutionContext {\n const executionKey = deriveRequestExecutionKey(input);\n const keyHash = bytesToHex(sha256(executionKey));\n\n // Clear the raw key from memory (best effort)\n executionKey.fill(0);\n\n return {\n execution_key_hash: keyHash,\n request_id: requestId,\n capsule_id: input.capsule.capsule_id,\n sub: input.capsule.sub,\n kid: input.capsule.kid,\n intent: input.capsule.intent,\n aud: input.capsule.aud,\n tps_from: input.capsule.tps_from,\n tps_to: input.capsule.tps_to,\n policy_hash: input.capsule.policy_hash,\n derived_at: Math.floor(Date.now() / 1000),\n valid: true,\n };\n}\n\n/**\n * Generate a cryptographically secure nonce for CCE requests/responses.\n */\nexport function generateCceNonce(): string {\n const bytes = new Uint8Array(CCE_NONCE_BYTES);\n crypto.getRandomValues(bytes);\n return bytesToHex(bytes);\n}\n","import { bytesToHex } from \"@noble/hashes/utils.js\";\nimport { sha256 } from \"@noble/hashes/sha2.js\";\n/**\n * CCE Crypto Primitives\n *\n * AES-256-GCM encryption/decryption and X25519 key exchange\n * for the Capsule-Carried Encryption protocol.\n *\n * Uses Node.js native crypto for AES-GCM (performant and FIPS-capable).\n */\nimport { createCipheriv, createDecipheriv, randomBytes } from \"crypto\";\n\nimport { CCE_AES_KEY_BYTES, CCE_IV_BYTES, CCE_TAG_BYTES } from \"./cce.types\";\n\n// ============================================================================\n// AES-256-GCM\n// ============================================================================\n\n/**\n * Encrypt plaintext with AES-256-GCM.\n */\nexport function aesGcmEncrypt(\n key: Uint8Array,\n plaintext: Uint8Array,\n aad?: Uint8Array,\n): { iv: Uint8Array; ciphertext: Uint8Array; tag: Uint8Array } {\n if (key.length !== CCE_AES_KEY_BYTES) {\n throw new Error(`AES key must be ${CCE_AES_KEY_BYTES} bytes`);\n }\n\n const iv = randomBytes(CCE_IV_BYTES);\n const cipher = createCipheriv(\"aes-256-gcm\", key, iv);\n\n if (aad) {\n cipher.setAAD(aad);\n }\n\n const encrypted = Buffer.concat([cipher.update(plaintext), cipher.final()]);\n const tag = cipher.getAuthTag();\n\n return {\n iv: new Uint8Array(iv),\n ciphertext: new Uint8Array(encrypted),\n tag: new Uint8Array(tag),\n };\n}\n\n/**\n * Decrypt ciphertext with AES-256-GCM.\n * Returns null if AEAD tag verification fails.\n */\nexport function aesGcmDecrypt(\n key: Uint8Array,\n iv: Uint8Array,\n ciphertext: Uint8Array,\n tag: Uint8Array,\n aad?: Uint8Array,\n): Uint8Array | null {\n if (key.length !== CCE_AES_KEY_BYTES) {\n throw new Error(`AES key must be ${CCE_AES_KEY_BYTES} bytes`);\n }\n if (iv.length !== CCE_IV_BYTES) {\n throw new Error(`IV must be ${CCE_IV_BYTES} bytes`);\n }\n if (tag.length !== CCE_TAG_BYTES) {\n throw new Error(`Tag must be ${CCE_TAG_BYTES} bytes`);\n }\n\n try {\n const decipher = createDecipheriv(\"aes-256-gcm\", key, iv);\n decipher.setAuthTag(tag);\n\n if (aad) {\n decipher.setAAD(aad);\n }\n\n const decrypted = Buffer.concat([\n decipher.update(ciphertext),\n decipher.final(),\n ]);\n return new Uint8Array(decrypted);\n } catch {\n // AEAD tag mismatch or other decryption failure\n return null;\n }\n}\n\n/**\n * Generate an ephemeral AES-256 key.\n */\nexport function generateAesKey(): Uint8Array {\n return new Uint8Array(randomBytes(CCE_AES_KEY_BYTES));\n}\n\n/**\n * Generate a random IV for AES-GCM.\n */\nexport function generateIv(): Uint8Array {\n return new Uint8Array(randomBytes(CCE_IV_BYTES));\n}\n\n// ============================================================================\n// Base64url helpers\n// ============================================================================\n\nexport function base64UrlEncode(bytes: Uint8Array): string {\n return Buffer.from(bytes)\n .toString(\"base64\")\n .replace(/\\+/g, \"-\")\n .replace(/\\//g, \"_\")\n .replace(/=+$/, \"\");\n}\n\nexport function base64UrlDecode(input: string): Uint8Array {\n const base64 = input.replace(/-/g, \"+\").replace(/_/g, \"/\");\n const padding = \"=\".repeat((4 - (base64.length % 4)) % 4);\n return new Uint8Array(Buffer.from(base64 + padding, \"base64\"));\n}\n\n// ============================================================================\n// Payload hashing (for witness records)\n// ============================================================================\n\n/**\n * Hash a payload for witness records (never store raw plaintext).\n */\nexport function hashPayload(payload: Uint8Array): string {\n return bytesToHex(sha256(payload));\n}\n\n// ============================================================================\n// Default AES-GCM Provider (for sensor injection)\n// ============================================================================\n\nimport type { CceAesGcmProvider } from \"./sensors/cce-payload-decryption.sensor\";\n\n/**\n * Node.js native AES-GCM provider.\n */\nexport const nodeAesGcmProvider: CceAesGcmProvider = {\n async decrypt(\n key: Uint8Array,\n iv: Uint8Array,\n ciphertext: Uint8Array,\n tag: Uint8Array,\n aad?: Uint8Array,\n ): Promise<Uint8Array | null> {\n return aesGcmDecrypt(key, iv, ciphertext, tag, aad);\n },\n};\n","import { bytesToHex } from \"@noble/hashes/utils.js\";\n/**\n * CCE Response Encryption Service\n *\n * Encrypts AXIS response payloads back to the client.\n *\n * v1 model:\n * - Generate ephemeral AES-256 key\n * - Encrypt response body with AES-GCM\n * - Encrypt AES key with client public key\n * - Sign response envelope with AXIS private key\n */\nimport { randomBytes } from \"crypto\";\n\nimport { aesGcmEncrypt, base64UrlEncode, generateAesKey, hashPayload } from \"./cce-crypto\";\nimport { CCE_NONCE_BYTES, CCE_PROTOCOL_VERSION, type CceAlgorithmDescriptor, type CceCapsuleClaims, type CceEncryptedKey, type CceEncryptedPayload, type CceRequestEnvelope, type CceResponseEnvelope, type CceResponseStatus, type CceSignature } from \"./cce.types\";\n\n/**\n * Client public key encryptor — wraps AES key with client's public key.\n */\nexport interface CceClientKeyEncryptor {\n wrapKey(\n aesKey: Uint8Array,\n clientKid: string,\n clientPublicKeyHex: string,\n ): Promise<CceEncryptedKey>;\n}\n\n/**\n * AXIS signing provider — signs response envelopes.\n */\nexport interface CceAxisSigner {\n sign(payload: Uint8Array): Promise<CceSignature>;\n}\n\n/**\n * Options for building a CCE response.\n */\nexport interface CceResponseOptions {\n /** Original request envelope */\n request: CceRequestEnvelope;\n /** Verified capsule claims */\n capsule: CceCapsuleClaims;\n /** Response status */\n status: CceResponseStatus;\n /** Response body (plaintext) */\n body: Uint8Array;\n /** Client public key (hex) for response encryption */\n clientPublicKeyHex: string;\n /** Witness reference */\n witnessRef?: string;\n}\n\n/**\n * Build and encrypt a CCE response envelope.\n */\nexport async function buildCceResponse(\n options: CceResponseOptions,\n clientKeyEncryptor: CceClientKeyEncryptor,\n axisSigner: CceAxisSigner,\n): Promise<{ envelope: CceResponseEnvelope; responsePayloadHash: string }> {\n const { request, capsule, status, body, clientPublicKeyHex, witnessRef } =\n options;\n\n // Generate response nonce\n const responseNonce = bytesToHex(\n new Uint8Array(randomBytes(CCE_NONCE_BYTES)),\n );\n\n // Generate response ID\n const responseId = generateResponseId();\n\n // Generate ephemeral AES key for response\n const aesKey = generateAesKey();\n\n // Build AAD for response (binds ciphertext to response context)\n const aad = buildResponseAad(\n request.request_id,\n responseId,\n request.correlation_id,\n capsule.capsule_id,\n responseNonce,\n );\n\n // Encrypt response body\n const { iv, ciphertext, tag } = aesGcmEncrypt(aesKey, body, aad);\n\n // Wrap AES key with client public key\n const encryptedKey = await clientKeyEncryptor.wrapKey(\n aesKey,\n request.client_kid,\n clientPublicKeyHex,\n );\n\n // Clear the raw AES key\n aesKey.fill(0);\n\n const encryptedPayload: CceEncryptedPayload = {\n alg: \"AES-256-GCM\",\n iv: base64UrlEncode(iv),\n ciphertext: base64UrlEncode(ciphertext),\n tag: base64UrlEncode(tag),\n };\n\n const algorithms: CceAlgorithmDescriptor = {\n kem: encryptedKey.alg,\n enc: \"AES-256-GCM\",\n kdf: \"HKDF-SHA256\",\n sig: \"EdDSA\",\n };\n\n // Build unsigned response\n const unsignedResponse: Omit<CceResponseEnvelope, \"axis_sig\"> = {\n ver: CCE_PROTOCOL_VERSION,\n response_id: responseId,\n request_id: request.request_id,\n correlation_id: request.correlation_id,\n capsule_id: capsule.capsule_id,\n encrypted_key: encryptedKey,\n encrypted_payload: encryptedPayload,\n response_nonce: responseNonce,\n algorithms,\n status,\n ...(witnessRef ? { witness_ref: witnessRef } : {}),\n };\n\n // Sign the response\n const signPayload = new TextEncoder().encode(canonicalize(unsignedResponse));\n const axisSig = await axisSigner.sign(signPayload);\n\n const envelope: CceResponseEnvelope = {\n ...unsignedResponse,\n axis_sig: axisSig,\n };\n\n return {\n envelope,\n responsePayloadHash: hashPayload(body),\n };\n}\n\n/**\n * Build a plaintext (unencrypted) error response for cases where\n * encryption is impossible (e.g., before capsule verification).\n */\nexport function buildCceErrorResponse(\n requestId: string,\n correlationId: string,\n status: CceResponseStatus,\n errorCode: string,\n message: string,\n): {\n ver: string;\n request_id: string;\n correlation_id: string;\n status: CceResponseStatus;\n error: { code: string; message: string };\n} {\n return {\n ver: CCE_PROTOCOL_VERSION,\n request_id: requestId,\n correlation_id: correlationId,\n status,\n error: { code: errorCode, message },\n };\n}\n\n// ============================================================================\n// Helpers\n// ============================================================================\n\nfunction generateResponseId(): string {\n const bytes = randomBytes(16);\n return \"resp_\" + bytesToHex(new Uint8Array(bytes)).slice(0, 24);\n}\n\nfunction buildResponseAad(\n requestId: string,\n responseId: string,\n correlationId: string,\n capsuleId: string,\n responseNonce: string,\n): Uint8Array {\n const parts = [\n requestId,\n responseId,\n correlationId,\n capsuleId,\n responseNonce,\n ];\n return new TextEncoder().encode(parts.join(\"|\"));\n}\n\nfunction canonicalize(obj: unknown): string {\n if (Array.isArray(obj)) {\n return \"[\" + obj.map(canonicalize).join(\",\") + \"]\";\n }\n if (obj !== null && typeof obj === \"object\") {\n const sorted = Object.keys(obj as object)\n .sort()\n .map(\n (k) =>\n JSON.stringify(k) +\n \":\" +\n canonicalize((obj as Record<string, unknown>)[k]),\n );\n return \"{\" + sorted.join(\",\") + \"}\";\n }\n return JSON.stringify(obj);\n}\n","import { bytesToHex } from \"@noble/hashes/utils.js\";\nimport { hkdf } from \"@noble/hashes/hkdf.js\";\nimport { sha256 } from \"@noble/hashes/sha2.js\";\n/**\n * CCE Witness Observer\n *\n * Records tamper-evident witness logs for every CCE request/response lifecycle.\n *\n * Redaction rules:\n * - Never store raw plaintext payloads (only hashes)\n * - Never store raw encryption keys\n * - Store verification outcomes, not raw crypto material\n */\nimport { randomBytes } from \"crypto\";\n\nimport { hashPayload } from \"./cce-crypto\";\nimport { CCE_DERIVATION, type CceCapsuleClaims, type CceRequestEnvelope, type CceResponseStatus, type CceWitnessRecord } from \"./cce.types\";\n\n/**\n * Witness store interface — implementations persist witness records.\n */\nexport interface CceWitnessStore {\n record(witness: CceWitnessRecord): Promise<void>;\n}\n\n/**\n * In-memory witness store for development/testing.\n */\nexport class InMemoryCceWitnessStore implements CceWitnessStore {\n readonly records: CceWitnessRecord[] = [];\n\n async record(witness: CceWitnessRecord): Promise<void> {\n this.records.push(witness);\n }\n\n getByRequestId(requestId: string): CceWitnessRecord | undefined {\n return this.records.find((w) => w.request_id === requestId);\n }\n\n getByCapsuleId(capsuleId: string): CceWitnessRecord[] {\n return this.records.filter((w) => w.capsule_id === capsuleId);\n }\n}\n\n/**\n * Verification state accumulated during sensor chain execution.\n */\nexport interface CceVerificationState {\n clientSigVerified: boolean;\n capsuleSigVerified: boolean;\n tpsValid: boolean;\n audienceMatch: boolean;\n intentMatch: boolean;\n replayClean: boolean;\n nonceUnique: boolean;\n decryptionOk: boolean;\n}\n\n/**\n * Build a witness record from verification state and execution result.\n */\nexport function buildWitnessRecord(\n envelope: CceRequestEnvelope,\n capsule: CceCapsuleClaims,\n verification: CceVerificationState,\n execution: {\n status: CceResponseStatus;\n handlerDurationMs: number;\n effect?: string;\n },\n options: {\n axisLocalSecret: string;\n requestPayload?: Uint8Array;\n responsePayload?: Uint8Array;\n responseEncrypted: boolean;\n },\n): CceWitnessRecord {\n // Generate witness ID\n const witnessId = generateWitnessId(envelope.request_id, capsule.capsule_id);\n\n // Compute execution context hash using HKDF witness derivation\n const executionContextHash = computeExecutionContextHash(\n options.axisLocalSecret,\n capsule,\n envelope.request_nonce,\n );\n\n return {\n witness_id: witnessId,\n request_id: envelope.request_id,\n capsule_id: capsule.capsule_id,\n sub: capsule.sub,\n intent: capsule.intent,\n aud: capsule.aud,\n tps_from: capsule.tps_from,\n tps_to: capsule.tps_to,\n timestamp: Math.floor(Date.now() / 1000),\n verification: {\n client_sig: verification.clientSigVerified,\n capsule_sig: verification.capsuleSigVerified,\n tps_valid: verification.tpsValid,\n audience_match: verification.audienceMatch,\n intent_match: verification.intentMatch,\n replay_clean: verification.replayClean,\n nonce_unique: verification.nonceUnique,\n decryption_ok: verification.decryptionOk,\n },\n execution: {\n status: execution.status,\n handler_duration_ms: execution.handlerDurationMs,\n ...(execution.effect ? { effect: execution.effect } : {}),\n },\n response_encrypted: options.responseEncrypted,\n execution_context_hash: executionContextHash,\n ...(options.requestPayload\n ? { request_payload_hash: hashPayload(options.requestPayload) }\n : {}),\n ...(options.responsePayload\n ? { response_payload_hash: hashPayload(options.responsePayload) }\n : {}),\n };\n}\n\n/**\n * Extract verification state from sensor chain metadata.\n */\nexport function extractVerificationState(\n metadata: Record<string, any>,\n): CceVerificationState {\n return {\n clientSigVerified: metadata.cceClientSigVerified === true,\n capsuleSigVerified: metadata.cceCapsuleVerified === true,\n tpsValid: metadata.cceTpsValid === true,\n audienceMatch: metadata.cceBindingVerified === true,\n intentMatch: metadata.cceBindingVerified === true,\n replayClean: metadata.cceReplayClean === true,\n nonceUnique: metadata.cceReplayClean === true,\n decryptionOk: metadata.cceDecryptionOk === true,\n };\n}\n\n// ============================================================================\n// Internal\n// ============================================================================\n\nfunction generateWitnessId(requestId: string, capsuleId: string): string {\n const input = `witness:${requestId}:${capsuleId}:${Date.now()}`;\n const hash = sha256(new TextEncoder().encode(input));\n return \"wit_\" + bytesToHex(hash).slice(0, 24);\n}\n\nfunction computeExecutionContextHash(\n axisLocalSecret: string,\n capsule: CceCapsuleClaims,\n requestNonce: string,\n): string {\n const encoder = new TextEncoder();\n\n // Use HKDF to derive witness key\n const ikm = hexToBytes(axisLocalSecret);\n const salt = sha256(\n encoder.encode(\n capsule.capsule_id + \"|\" + capsule.capsule_nonce + \"|\" + requestNonce,\n ),\n );\n const info = encoder.encode(\n [\n CCE_DERIVATION.WITNESS,\n capsule.sub,\n capsule.kid,\n capsule.intent,\n capsule.aud,\n String(capsule.tps_from),\n String(capsule.tps_to),\n capsule.policy_hash ?? \"\",\n capsule.ver,\n ].join(\"|\"),\n );\n\n const witnessKey = hkdf(sha256, ikm, salt, info, 32);\n const hash = bytesToHex(sha256(witnessKey));\n\n // Clear sensitive material\n witnessKey.fill(0);\n\n return hash;\n}\n\nfunction hexToBytes(hex: string): Uint8Array {\n const bytes = new Uint8Array(hex.length / 2);\n for (let i = 0; i < bytes.length; i++) {\n bytes[i] = parseInt(hex.slice(i * 2, i * 2 + 2), 16);\n }\n return bytes;\n}\n","import { buildExecutionContext, type CceDerivationInput } from \"./cce-derivation.service\";\nimport { buildCceErrorResponse, buildCceResponse, type CceAxisSigner, type CceClientKeyEncryptor } from \"./cce-response.service\";\nimport { buildWitnessRecord, type CceWitnessStore, extractVerificationState } from \"./cce-witness.observer\";\nimport type { AxisSensor, SensorDecision, SensorInput } from \"../sensor/axis-sensor\";\nimport { normalizeSensorDecision } from \"../sensor/axis-sensor\";\n/**\n * CCE Pipeline Orchestrator\n *\n * Orchestrates the full CCE request/response lifecycle within AXIS:\n *\n * Request path:\n * 1. Parse envelope\n * 2. Run sensor chain (7 CCE sensors in order)\n * 3. Derive execution context\n * 4. Route to handler\n * 5. Execute handler\n *\n * Response path:\n * 6. Encrypt response\n * 7. Sign response\n * 8. Record witness\n * 9. Return response\n *\n * This orchestrator can be integrated into IntentRouter or used standalone.\n */\nimport { CCE_ERROR, CCE_PROTOCOL_VERSION, type CceCapsuleClaims, CceError, type CceExecutionContext, type CceRequestEnvelope, type CceResponseEnvelope, type CceResponseStatus } from \"./cce.types\";\n\n/**\n * CCE handler function — receives decrypted payload and execution context.\n */\nexport type CceHandler = (\n payload: Uint8Array,\n context: CceHandlerContext,\n) => Promise<CceHandlerResult>;\n\nexport interface CceHandlerContext {\n /** Verified capsule claims */\n capsule: CceCapsuleClaims;\n /** Derived execution context */\n executionContext: CceExecutionContext;\n /** Original request envelope */\n envelope: CceRequestEnvelope;\n /** Client's verified public key */\n clientPublicKeyHex: string;\n /** Request intent */\n intent: string;\n /** Actor identity */\n sub: string;\n}\n\nexport interface CceHandlerResult {\n status: CceResponseStatus;\n body: Uint8Array;\n effect?: string;\n}\n\nexport interface CcePolicyContext {\n envelope: CceRequestEnvelope;\n capsule: CceCapsuleClaims;\n executionContext: CceExecutionContext;\n decryptedPayload: Uint8Array;\n clientPublicKeyHex: string;\n}\n\nexport interface CcePolicyDecision {\n allow: boolean;\n code?: string;\n message?: string;\n}\n\nexport interface CcePolicyEvaluator {\n evaluate(context: CcePolicyContext): Promise<CcePolicyDecision>;\n}\n\n/**\n * CCE Pipeline Configuration\n */\nexport interface CcePipelineConfig {\n /** AXIS local secret for key derivation (hex) */\n axisLocalSecret: string;\n /** AXIS audience identifier */\n axisAudience: string;\n /** CCE sensors (will be sorted by order) */\n sensors: AxisSensor[];\n /** Intent → handler mapping */\n handlers: Map<string, CceHandler>;\n /** Witness store */\n witnessStore: CceWitnessStore;\n /** Client key encryptor (for response encryption) */\n clientKeyEncryptor: CceClientKeyEncryptor;\n /** AXIS response signer */\n axisSigner: CceAxisSigner;\n /** Optional policy/law evaluator run after decryption and before handler execution */\n policyEvaluator?: CcePolicyEvaluator;\n}\n\n/**\n * Result of CCE pipeline execution.\n */\nexport type CcePipelineResult =\n | { ok: true; response: CceResponseEnvelope; witnessId: string }\n | {\n ok: false;\n error: { code: string; message: string };\n status: CceResponseStatus;\n };\n\n/**\n * Execute the full CCE pipeline.\n */\nexport async function executeCcePipeline(\n envelope: CceRequestEnvelope,\n config: CcePipelineConfig,\n): Promise<CcePipelineResult> {\n const startTime = Date.now();\n\n // Validate protocol version\n if (envelope.ver !== CCE_PROTOCOL_VERSION) {\n return {\n ok: false,\n error: {\n code: CCE_ERROR.UNSUPPORTED_VERSION,\n message: `Unsupported version: ${envelope.ver}`,\n },\n status: \"ERROR\",\n };\n }\n\n // Build sensor input\n const sensorInput: SensorInput = {\n intent: envelope.capsule.intent,\n metadata: {\n cce: true,\n cceEnvelope: envelope,\n contentType: \"application/axis-cce\",\n },\n };\n\n // Run sensor chain in order\n const sortedSensors = [...config.sensors].sort(\n (a, b) => (a.order ?? 999) - (b.order ?? 999),\n );\n\n for (const sensor of sortedSensors) {\n if (sensor.supports && !sensor.supports(sensorInput)) {\n continue;\n }\n\n let decision: SensorDecision;\n try {\n decision = await sensor.run(sensorInput);\n } catch (err) {\n return {\n ok: false,\n error: {\n code: CCE_ERROR.DECRYPTION_FAILED,\n message: `Sensor ${sensor.name} failed`,\n },\n status: \"ERROR\",\n };\n }\n\n const normalized = normalizeSensorDecision(decision);\n if (!normalized.allow) {\n const code =\n normalized.reasons[0]?.split(\":\")[0] ?? CCE_ERROR.DECRYPTION_FAILED;\n return {\n ok: false,\n error: { code, message: normalized.reasons.join(\"; \") },\n status: \"DENIED\",\n };\n }\n }\n\n // Extract verified state\n const capsule = sensorInput.metadata?.cceCapsule as CceCapsuleClaims;\n const decryptedPayload = sensorInput.metadata\n ?.cceDecryptedPayload as Uint8Array;\n const clientKey = sensorInput.metadata?.cceClientKey as {\n publicKeyHex: string;\n };\n\n if (!capsule || !decryptedPayload || !clientKey) {\n return {\n ok: false,\n error: {\n code: CCE_ERROR.DECRYPTION_FAILED,\n message: \"Sensor chain did not produce required outputs\",\n },\n status: \"ERROR\",\n };\n }\n\n // Derive execution context\n const derivationInput: CceDerivationInput = {\n axisLocalSecret: config.axisLocalSecret,\n capsule,\n requestNonce: envelope.request_nonce,\n };\n const executionContext = buildExecutionContext(\n derivationInput,\n envelope.request_id,\n );\n\n if (config.policyEvaluator) {\n try {\n const policyDecision = await config.policyEvaluator.evaluate({\n envelope,\n capsule,\n executionContext,\n decryptedPayload,\n clientPublicKeyHex: clientKey.publicKeyHex,\n });\n if (!policyDecision.allow) {\n const verification = extractVerificationState(sensorInput.metadata ?? {});\n const witness = buildWitnessRecord(\n envelope,\n capsule,\n verification,\n {\n status: \"DENIED\",\n handlerDurationMs: 0,\n effect: \"policy_denied\",\n },\n {\n axisLocalSecret: config.axisLocalSecret,\n requestPayload: decryptedPayload,\n responseEncrypted: false,\n },\n );\n await config.witnessStore.record(witness);\n\n return {\n ok: false,\n error: {\n code: policyDecision.code ?? CCE_ERROR.POLICY_DENIED,\n message:\n policyDecision.message ?? \"Request denied by policy evaluator\",\n },\n status: \"DENIED\",\n };\n }\n } catch (err) {\n return {\n ok: false,\n error: {\n code: CCE_ERROR.POLICY_DENIED,\n message: \"Policy evaluator failed\",\n },\n status: \"ERROR\",\n };\n }\n }\n\n // Route to handler\n const handler = config.handlers.get(capsule.intent);\n if (!handler) {\n return {\n ok: false,\n error: {\n code: CCE_ERROR.HANDLER_NOT_FOUND,\n message: `No handler for intent: ${capsule.intent}`,\n },\n status: \"ERROR\",\n };\n }\n\n // Execute handler\n const handlerContext: CceHandlerContext = {\n capsule,\n executionContext,\n envelope,\n clientPublicKeyHex: clientKey.publicKeyHex,\n intent: capsule.intent,\n sub: capsule.sub,\n };\n\n let result: CceHandlerResult;\n const handlerStart = Date.now();\n try {\n result = await handler(decryptedPayload, handlerContext);\n } catch (err) {\n const handlerDuration = Date.now() - handlerStart;\n\n // Record failure witness\n const verification = extractVerificationState(sensorInput.metadata ?? {});\n const witness = buildWitnessRecord(\n envelope,\n capsule,\n verification,\n { status: \"FAILED\", handlerDurationMs: handlerDuration },\n {\n axisLocalSecret: config.axisLocalSecret,\n requestPayload: decryptedPayload,\n responseEncrypted: false,\n },\n );\n await config.witnessStore.record(witness);\n\n return {\n ok: false,\n error: {\n code: CCE_ERROR.HANDLER_EXECUTION_FAILED,\n message: \"Handler execution failed\",\n },\n status: \"FAILED\",\n };\n }\n const handlerDuration = Date.now() - handlerStart;\n\n // Encrypt response\n let responseEnvelope: CceResponseEnvelope;\n let responsePayloadHash: string;\n\n try {\n const responseResult = await buildCceResponse(\n {\n request: envelope,\n capsule,\n status: result.status,\n body: result.body,\n clientPublicKeyHex: clientKey.publicKeyHex,\n },\n config.clientKeyEncryptor,\n config.axisSigner,\n );\n responseEnvelope = responseResult.envelope;\n responsePayloadHash = responseResult.responsePayloadHash;\n } catch (err) {\n return {\n ok: false,\n error: {\n code: CCE_ERROR.RESPONSE_ENCRYPTION_FAILED,\n message: \"Response encryption failed\",\n },\n status: \"ERROR\",\n };\n }\n\n // Record witness\n const verification = extractVerificationState(sensorInput.metadata ?? {});\n const witness = buildWitnessRecord(\n envelope,\n capsule,\n verification,\n {\n status: result.status,\n handlerDurationMs: handlerDuration,\n effect: result.effect,\n },\n {\n axisLocalSecret: config.axisLocalSecret,\n requestPayload: decryptedPayload,\n responsePayload: result.body,\n responseEncrypted: true,\n },\n );\n await config.witnessStore.record(witness);\n\n return {\n ok: true,\n response: responseEnvelope,\n witnessId: witness.witness_id,\n };\n}\n","export class AxisError extends Error {\n constructor(\n public code: string,\n message: string,\n public httpStatus: number = 400,\n public details?: Record<string, any>,\n ) {\n super(message);\n this.name = 'AxisError';\n }\n}\n","import type { AxisEffect } from \"./intent.router\";\n\n/**\n * Built-in AXIS intents handled by the SDK router without app registration.\n *\n * Keep this list small: these are protocol/control-plane intents, not business\n * handlers. CHAIN.EXEC and INTENT.EXEC are listed here so lookup APIs treat\n * them as known intents, but their execution is delegated back to IntentRouter.\n */\nexport const BUILTIN_INTENTS = new Set([\n \"system.ping\",\n \"public.ping\",\n \"system.time\",\n \"system.echo\",\n \"CHAIN.EXEC\",\n \"axis.chain.exec\",\n \"INTENT.EXEC\",\n \"axis.intent.exec\",\n]);\n\nexport function isBuiltinIntent(intent: string): boolean {\n return BUILTIN_INTENTS.has(intent);\n}\n\n/** True for chain meta-intents that execute a multi-step AXIS chain envelope. */\nexport function isChainExecIntent(intent: string): boolean {\n return intent === \"CHAIN.EXEC\" || intent === \"axis.chain.exec\";\n}\n\n/** True for meta-intents that unwrap and execute one inner AXIS intent. */\nexport function isIntentExecIntent(intent: string): boolean {\n return intent === \"INTENT.EXEC\" || intent === \"axis.intent.exec\";\n}\n\n/**\n * Executes simple system built-ins that do not need app handlers.\n * Returns undefined for meta built-ins handled by the router itself.\n */\nexport function routeSystemBuiltinIntent(\n intent: string,\n body: Uint8Array,\n encoder: TextEncoder,\n): AxisEffect | undefined {\n if (intent === \"system.ping\" || intent === \"public.ping\") {\n return {\n ok: true,\n effect: \"pong\",\n headers: new Map([[100, encoder.encode(\"AXIS_BACKEND_V1\")]]),\n body: encoder.encode(\n JSON.stringify({\n status: \"ok\",\n timestamp: new Date().toISOString(),\n version: \"1.0.0\",\n }),\n ),\n };\n }\n\n if (intent === \"system.time\") {\n const ts = Date.now().toString();\n return {\n ok: true,\n effect: \"time\",\n body: encoder.encode(\n JSON.stringify({\n ts,\n iso: new Date().toISOString(),\n }),\n ),\n };\n }\n\n if (intent === \"system.echo\") {\n return {\n ok: true,\n effect: \"echo\",\n body,\n };\n }\n\n return undefined;\n}\n","import \"reflect-metadata\";\n\nimport {\n AXIS_ANONYMOUS_KEY,\n AXIS_AUTHORIZED_KEY,\n AXIS_PUBLIC_KEY,\n REQUIRED_PROOF_METADATA_KEY,\n type RequiredProofKind,\n} from \"../decorators/intent-policy.decorator\";\n\n/**\n * Effective proof policy after class-level defaults and method-level overrides\n * have been resolved for one intent.\n */\nexport interface IntentProofPolicy {\n requiredProof: RequiredProofKind[];\n isPublic: boolean;\n isAnonymous: boolean;\n isAuthorized: boolean;\n}\n\nfunction mergeProofKinds(\n ...proofGroups: Array<RequiredProofKind[] | undefined>\n): RequiredProofKind[] {\n const merged = new Set<RequiredProofKind>();\n for (const proofs of proofGroups) {\n for (const proof of proofs ?? []) {\n merged.add(proof);\n }\n }\n return Array.from(merged);\n}\n\n/**\n * Access decorators are proof-policy shorthands:\n * - @AxisPublic() -> NONE\n * - @AxisAnonymous() -> ANONYMOUS\n * - @AxisAuthorized() -> AUTHORIZED\n */\nfunction accessProofKinds(\n isPublic?: boolean,\n isAnonymous?: boolean,\n isAuthorized?: boolean,\n): RequiredProofKind[] {\n const proofs: RequiredProofKind[] = [];\n if (isPublic) proofs.push(\"NONE\");\n if (isAnonymous) proofs.push(\"ANONYMOUS\");\n if (isAuthorized) proofs.push(\"AUTHORIZED\");\n return proofs;\n}\n\n/**\n * Resolves the proof policy for a single handler method.\n *\n * Precedence rule:\n * method-level policy wins over class-level policy. This allows handlers to\n * declare a class default such as `@RequiredProof(['NONE'])` and override one\n * method with `@AxisAuthorized()` or `@RequiredProof(['AUTHORIZED'])`.\n */\nexport function resolveIntentProofPolicy(\n proto: object,\n methodName: string,\n): IntentProofPolicy {\n const methodProof: RequiredProofKind[] | undefined = Reflect.getMetadata(\n REQUIRED_PROOF_METADATA_KEY,\n proto,\n methodName,\n );\n const classProof: RequiredProofKind[] | undefined = Reflect.getMetadata(\n REQUIRED_PROOF_METADATA_KEY,\n proto.constructor,\n );\n const isPublicMethod: boolean | undefined = Reflect.getMetadata(\n AXIS_PUBLIC_KEY,\n proto,\n methodName,\n );\n const isPublicClass: boolean | undefined = Reflect.getMetadata(\n AXIS_PUBLIC_KEY,\n proto.constructor,\n );\n const isAnonymousMethod: boolean | undefined = Reflect.getMetadata(\n AXIS_ANONYMOUS_KEY,\n proto,\n methodName,\n );\n const isAnonymousClass: boolean | undefined = Reflect.getMetadata(\n AXIS_ANONYMOUS_KEY,\n proto.constructor,\n );\n const isAuthorizedMethod: boolean | undefined = Reflect.getMetadata(\n AXIS_AUTHORIZED_KEY,\n proto,\n methodName,\n );\n const isAuthorizedClass: boolean | undefined = Reflect.getMetadata(\n AXIS_AUTHORIZED_KEY,\n proto.constructor,\n );\n\n const methodPolicyProof = mergeProofKinds(\n methodProof,\n accessProofKinds(isPublicMethod, isAnonymousMethod, isAuthorizedMethod),\n );\n const classPolicyProof = mergeProofKinds(\n classProof,\n accessProofKinds(isPublicClass, isAnonymousClass, isAuthorizedClass),\n );\n const requiredProof = methodPolicyProof.length\n ? methodPolicyProof\n : classPolicyProof;\n\n return {\n requiredProof,\n isPublic: requiredProof.includes(\"NONE\"),\n isAnonymous: requiredProof.includes(\"ANONYMOUS\"),\n isAuthorized: requiredProof.includes(\"AUTHORIZED\"),\n };\n}\n","import {\n decodeChainEnvelope,\n decodeChainRequest,\n} from \"@nextera.one/axis-protocol\";\n\nimport { HANDLER_SENSORS_KEY } from \"../decorators/handler-sensors.decorator\";\nimport {\n CAPSULE_POLICY_METADATA_KEY,\n type CapsulePolicyOptions,\n mergeCapsulePolicyOptions,\n normalizeCapsulePolicyOptions,\n} from \"../decorators/capsule-policy.decorator\";\nimport { INTENT_SENSORS_KEY } from \"../decorators/intent-sensors.decorator\";\nimport {\n AXIS_RATE_LIMIT_KEY,\n type AxisRateLimitConfig,\n CONTRACT_METADATA_KEY,\n normalizeRequiredProof,\n type RequiredProofKind,\n SENSITIVITY_METADATA_KEY,\n} from \"../decorators/intent-policy.decorator\";\nimport { INTENT_BODY_KEY } from \"../decorators/intent-body.decorator\";\nimport type { TlvValidatorFn } from \"../decorators/tlv-field.decorator\";\nimport {\n AxisObserverBinding,\n AxisObserverRef,\n OBSERVER_BINDINGS_KEY,\n} from \"../decorators/observer.decorator\";\nimport { HANDLER_METADATA_KEY } from \"../decorators/handler.decorator\";\nimport {\n type AxisIntentSensorBinding,\n type AxisIntentSensorBindingInput,\n type AxisIntentSensorRef,\n INTENT_METADATA_KEY,\n INTENT_ROUTES_KEY,\n IntentKind,\n IntentRoute,\n IntentTlvField,\n toIntentSensorBinding,\n} from \"../decorators/intent.decorator\";\nimport { CHAIN_METADATA_KEY } from \"../decorators/chain.decorator\";\nimport {\n buildDtoDecoder,\n extractDtoSchema,\n} from \"../decorators/dto-schema.util\";\nimport { ObserverDispatcherService } from \"./observer-dispatcher.service\";\nimport {\n inlineCapsuleAllowsIntent,\n inlineCapsuleSatisfiesScopes,\n isInlineCapsuleExpired,\n normalizeInlineCapsule,\n resolvePolicyScopes,\n} from \"../security/inline-capsule\";\nimport type { AxisDependencyResolver } from \"./axis-dependency-resolver\";\nimport { SensorRegistry } from \"./registry/sensor.registry\";\nimport {\n getAxisExecutionContext,\n mergeAxisExecutionContext,\n withAxisExecutionContext,\n} from \"./axis-execution-context\";\nimport type { SensitivityLevel } from \"../schemas/axis-schemas\";\nimport {\n AxisSensor,\n normalizeSensorDecision,\n SensorInput,\n} from \"../sensor/axis-sensor\";\nimport { createAxisLogger } from \"../utils/axis-logger\";\nimport {\n type CceHandler,\n type CcePipelineConfig,\n type CcePipelineResult,\n executeCcePipeline,\n} from \"../cce/cce-pipeline\";\nimport { AxisError } from \"../core/axis-error\";\nimport {\n AxisChainEnvelope,\n AxisChainRequest,\n ChainOptions,\n RegisteredChainConfig,\n} from \"./axis-chain.types\";\nimport {\n TLV_ACTOR_ID,\n TLV_CAPSULE,\n TLV_INTENT,\n TLV_NODE,\n TLV_PROOF_REF,\n TLV_REALM,\n} from \"../core/constants\";\nimport type { CceRequestEnvelope } from \"../cce/cce.types\";\nimport { AxisFrame } from \"../core/axis-bin\";\nimport {\n BUILTIN_INTENTS,\n isBuiltinIntent,\n isChainExecIntent,\n isIntentExecIntent,\n routeSystemBuiltinIntent,\n} from \"./intent-builtins\";\nimport { resolveIntentProofPolicy } from \"./intent-proof-policy\";\n\nfunction observerRefKey(ref: AxisObserverRef): string {\n return typeof ref === \"string\" ? ref : ref.name;\n}\n\nfunction sensorRefKey(ref: AxisIntentSensorRef): string {\n return typeof ref === \"string\" ? ref : ref.name;\n}\n\nfunction sensorBindingKey(binding: AxisIntentSensorBinding): string {\n return `${binding.when}:${sensorRefKey(binding.ref)}`;\n}\n\nfunction mergeIntentSensorBindings(\n ...sensorGroups: Array<AxisIntentSensorBindingInput[] | undefined>\n): AxisIntentSensorBinding[] {\n const merged = new Map<string, AxisIntentSensorBinding>();\n\n for (const group of sensorGroups) {\n if (!Array.isArray(group)) continue;\n\n for (const input of group) {\n const binding = toIntentSensorBinding(input);\n const key = sensorBindingKey(binding);\n const existing = merged.get(key);\n\n if (\n !existing ||\n (typeof existing.ref === \"string\" && typeof binding.ref !== \"string\")\n ) {\n merged.set(key, binding);\n }\n }\n }\n\n return Array.from(merged.values());\n}\n\nfunction isAxisSensorInstance(value: unknown): value is AxisSensor {\n return (\n !!value &&\n typeof (value as AxisSensor).name === \"string\" &&\n typeof (value as AxisSensor).run === \"function\"\n );\n}\n\nfunction mergeObserverBindings(\n bindings: AxisObserverBinding[],\n): AxisObserverBinding[] {\n const merged = new Map<string, AxisObserverBinding>();\n\n for (const binding of bindings) {\n for (const ref of binding.refs) {\n const key = observerRefKey(ref);\n const existing = merged.get(key);\n if (!existing) {\n merged.set(key, {\n refs: [ref],\n tags: binding.tags ? [...new Set(binding.tags)] : undefined,\n events: binding.events ? [...new Set(binding.events)] : undefined,\n });\n continue;\n }\n\n existing.tags = Array.from(\n new Set([...(existing.tags || []), ...(binding.tags || [])]),\n );\n existing.events =\n existing.events === undefined || binding.events === undefined\n ? undefined\n : Array.from(new Set([...existing.events, ...binding.events]));\n }\n }\n\n return Array.from(merged.values());\n}\n\nfunction normalizeChainConfig(\n decoratorConfig?: RegisteredChainConfig,\n intentConfig?: boolean | ChainOptions,\n): RegisteredChainConfig | undefined {\n if (decoratorConfig) {\n return decoratorConfig;\n }\n\n if (!intentConfig) {\n return undefined;\n }\n\n if (intentConfig === true) {\n return { enabled: true };\n }\n\n return {\n enabled: true,\n ...intentConfig,\n };\n}\n\nexport interface IntentSchema {\n intent: string;\n version: number;\n bodyProfile: \"TLV_MAP\" | \"RAW\" | \"TLV_OBJ\" | \"TLV_ARR\";\n dtoName?: string;\n fields: Array<{\n name: string;\n tlv: number;\n kind: IntentTlvField[\"kind\"];\n required?: boolean;\n maxLen?: number;\n max?: string;\n scope?: \"header\" | \"body\";\n }>;\n}\n\n/**\n * Represents the outcome of an AXIS intent execution.\n *\n * @interface AxisEffect\n */\nexport interface AxisEffect {\n /** Whether the intent was processed successfully at the application level */\n ok: boolean;\n /** A descriptive string classifier for the result (e.g., 'FILE_CREATED', 'PONG') */\n effect: string;\n /** Optional binary payload (body) to be returned to the requester */\n body?: Uint8Array;\n /** Optional custom TLV headers to be included in the response frame */\n headers?: Map<number, Uint8Array>;\n /** Optional metadata for internal logging or audit (not sent to client) */\n metadata?: any;\n}\n\n/**\n * Summary of all intents and policies registered under a handler class.\n */\nexport interface HandlerSummary {\n /** Handler class name (e.g. 'UsersHandler') */\n handler: string;\n /** Intent namespace prefix from @Handler('auth') */\n prefix?: string;\n /** All intents registered under this handler */\n intents: string[];\n /** True if any intent in this handler is public */\n isPublic: boolean;\n /** True if any intent in this handler is anonymous-accessible */\n isAnonymous: boolean;\n /** True if any intent in this handler is authorized-session-only */\n isAuthorized: boolean;\n /** Union of all required proof kinds across intents */\n requiredProof?: RequiredProofKind[];\n /** Contract metadata (typically class-level, first found wins) */\n contract?: Record<string, any>;\n /** Sensitivity level (first found wins) */\n sensitivity?: SensitivityLevel;\n /** Rate limit config (first found wins) */\n rateLimit?: AxisRateLimitConfig;\n /** Capsule policy (first found wins) */\n capsulePolicy?: CapsulePolicyOptions;\n /** Class-level sensor bindings from @HandlerSensors (applied before every intent in this handler) */\n classSensors?: AxisIntentSensorBinding[];\n /** Class-level observer bindings from @Handler({ observe: [...] }) */\n classObservers?: AxisObserverBinding[];\n}\n\n/**\n * IntentRouter\n *\n * The central dispatching mechanism of the AXIS backend.\n * Maps binary intents (identified by their name in the header) to specialized handlers.\n *\n * **Features:**\n * 1. **Built-in Fast Path:** Handles high-frequency system intents (ping, time, echo) directly.\n * 2. **Dynamic Handler Registration:** Allows modules to register handlers at runtime.\n * 3. **Decorator-driven Registration:** Uses {@link registerHandler} to auto-register `@Intent`-decorated methods.\n * 4. **Polymorphic Handlers:** Supports both raw function handlers and object-based `{ handle }` handlers.\n *\n * @class IntentRouter\n */\nexport class IntentRouter {\n private readonly logger = createAxisLogger(IntentRouter.name);\n private readonly decoder = new TextDecoder();\n private readonly encoder = new TextEncoder();\n private readonly dependencyResolver?: AxisDependencyResolver;\n private readonly observerDispatcher?: ObserverDispatcherService;\n private readonly sensorRegistry?: SensorRegistry;\n\n /** Internal registry of dynamic intent handlers */\n private handlers = new Map<string, any>();\n\n /** Per-intent sensor refs (resolved through SensorRegistry at call time) */\n private intentSensors = new Map<string, AxisIntentSensorBinding[]>();\n\n /** Per-intent handler identifier (e.g. UsersHandler.usersPage) */\n private intentHandlerRefs = new Map<string, string>();\n\n /** Per-intent body decoders */\n private intentDecoders = new Map<string, (buf: Buffer) => any>();\n\n /** Per-intent TLV schemas */\n private intentSchemas = new Map<string, IntentSchema>();\n\n /** Per-intent custom validators */\n private intentValidators = new Map<string, Map<number, TlvValidatorFn[]>>();\n\n /** Per-intent operation kind */\n private intentKinds = new Map<string, IntentKind>();\n\n /** Per-intent chain configuration */\n private intentChains = new Map<string, RegisteredChainConfig>();\n\n /** Per-intent observer bindings */\n private intentObservers = new Map<string, AxisObserverBinding[]>();\n\n /** Per-intent capsule policies */\n private intentCapsulePolicies = new Map<string, CapsulePolicyOptions>();\n\n /** Per-intent sensitivity level */\n private intentSensitivity = new Map<string, SensitivityLevel>();\n\n /** Per-intent execution contract overrides */\n private intentContracts = new Map<string, Record<string, any>>();\n\n /** Per-intent required proof kinds */\n private intentRequiredProof = new Map<string, RequiredProofKind[]>();\n\n /** Per-intent rate limit config */\n private intentRateLimits = new Map<string, AxisRateLimitConfig>();\n\n /** CCE handler registry */\n private cceHandlers = new Map<string, CceHandler>();\n\n /** CCE pipeline configuration (set via configureCce) */\n private ccePipelineConfig: Omit<CcePipelineConfig, \"handlers\"> | null = null;\n\n /** Reverse index: handler class name → list of registered intents */\n private handlerIntents = new Map<string, string[]>();\n /** Handler class name → intent namespace prefix (from @Handler('auth')) */\n private handlerPrefixes = new Map<string, string>();\n /** Handler namespace prefix → handler class name, used by `handler...intent` lookup. */\n private handlerByPrefix = new Map<string, string>();\n /** Intent → handler class name, avoids scanning handlerIntents for normal lookups. */\n private handlerByIntent = new Map<string, string>();\n /** Handler class name → class-level sensor bindings (from @HandlerSensors) */\n private handlerClassSensors = new Map<string, AxisIntentSensorBinding[]>();\n /** Handler class name → class-level observer bindings (from @Handler({ observe: [...] })) */\n private handlerClassObservers = new Map<string, AxisObserverBinding[]>();\n\n constructor(\n dependencyResolver?: AxisDependencyResolver,\n observerDispatcher?: ObserverDispatcherService,\n sensorRegistry?: SensorRegistry,\n ) {\n this.dependencyResolver = dependencyResolver;\n this.observerDispatcher = observerDispatcher;\n this.sensorRegistry = sensorRegistry;\n }\n\n getSchema(intent: string): IntentSchema | undefined {\n return this.intentSchemas.get(this.resolveIntentAlias(intent));\n }\n\n getValidators(intent: string): Map<number, TlvValidatorFn[]> | undefined {\n return this.intentValidators.get(this.resolveIntentAlias(intent));\n }\n\n has(intent: string): boolean {\n const resolved = this.resolveIntentAlias(intent);\n return this.handlers.has(resolved) || isBuiltinIntent(resolved);\n }\n\n /**\n * True only when the application registered a concrete handler.\n * Unlike `has()`, this intentionally ignores SDK built-in fallbacks so\n * discovery layers can override simple built-ins such as `system.ping`.\n */\n hasRegisteredHandler(intent: string): boolean {\n const resolved = this.resolveIntentAlias(intent);\n return this.handlers.has(resolved);\n }\n\n getRegisteredIntents(): string[] {\n return [...BUILTIN_INTENTS, ...this.handlers.keys()];\n }\n\n getIntentEntry(intent: string): {\n schema?: IntentSchema;\n validators?: Map<number, TlvValidatorFn[]>;\n hasSensors: boolean;\n builtin: boolean;\n kind?: IntentKind;\n chain?: RegisteredChainConfig;\n capsulePolicy?: CapsulePolicyOptions;\n observerCount: number;\n } | null {\n const resolved = this.resolveIntentAlias(intent);\n if (!this.has(resolved)) return null;\n return {\n schema: this.intentSchemas.get(resolved),\n validators: this.intentValidators.get(resolved),\n hasSensors: this.intentSensors.has(resolved),\n builtin: isBuiltinIntent(resolved),\n kind: this.intentKinds.get(resolved),\n chain: this.intentChains.get(resolved),\n capsulePolicy: this.intentCapsulePolicies.get(resolved),\n observerCount: this.getObservers(resolved).length,\n };\n }\n\n getChainConfig(intent: string): RegisteredChainConfig | undefined {\n return this.intentChains.get(this.resolveIntentAlias(intent));\n }\n\n getObservers(intent: string): AxisObserverBinding[] {\n return this.intentObservers.get(this.resolveIntentAlias(intent)) || [];\n }\n\n /**\n * Registers a handler for a specific intent.\n * Handlers can be functions: `(body, headers) => Promise<Uint8Array | AxisEffect>`\n * Or objects with a method: `handle(frame: AxisFrame) => Promise<AxisEffect>`\n *\n * @param {string} intent - The unique intent identifier (e.g., 'axis.vault.create')\n * @param {any} handler - The handler function or object\n */\n register(intent: string, handler: any) {\n // Keep compatibility with dynamic registration by allowing replacement,\n // but surface it because duplicate intents usually indicate discovery drift.\n if (this.handlers.has(intent)) {\n this.logger.warn(\n `Intent ${intent} is already registered; replacing handler`,\n );\n }\n\n this.handlers.set(intent, handler);\n if (typeof handler === \"function\" && handler.name) {\n this.intentHandlerRefs.set(intent, handler.name);\n } else if (handler && typeof handler === \"object\") {\n const objectName = handler.constructor?.name;\n if (objectName) {\n this.intentHandlerRefs.set(intent, `${objectName}.handle`);\n }\n } else {\n this.intentHandlerRefs.set(intent, `intent:${intent}`);\n }\n }\n\n /**\n * Automatically registers all `@Intent`-decorated methods from a handler instance.\n *\n * Reads the handler prefix from `@Handler` metadata (or falls back to `instance.name`),\n * then registers each `@Intent`-decorated method accordingly.\n *\n * @param {any} instance - The handler instance with `@Intent`-decorated methods\n */\n registerHandler(instance: any) {\n const handlerMeta = Reflect.getMetadata(\n HANDLER_METADATA_KEY,\n instance.constructor,\n );\n const prefix: string | undefined = handlerMeta?.intent || instance.name;\n\n const routes: IntentRoute[] =\n Reflect.getMetadata(INTENT_ROUTES_KEY, instance.constructor) || [];\n const routedMethods = new Set(\n routes.map((route) => String(route.methodName)),\n );\n\n // Read @HandlerSensors from the class (if any)\n const handlerSensors: AxisIntentSensorBindingInput[] =\n Reflect.getMetadata(HANDLER_SENSORS_KEY, instance.constructor) || [];\n const handlerObservers: AxisObserverBinding[] =\n Reflect.getMetadata(OBSERVER_BINDINGS_KEY, instance.constructor) || [];\n if (prefix) {\n this.trackHandlerMeta(\n instance.constructor.name,\n prefix,\n handlerSensors,\n handlerObservers,\n );\n }\n\n const proto = Object.getPrototypeOf(instance);\n\n for (const route of routes) {\n const intentName = route.absolute\n ? route.action\n : `${prefix}.${route.action}`;\n const fn = instance[route.methodName].bind(instance);\n\n if (route.frame) {\n this.register(intentName, { handle: fn });\n } else {\n this.register(intentName, fn);\n }\n this.intentHandlerRefs.set(\n intentName,\n `${instance.constructor.name}.${String(route.methodName)}`,\n );\n this.trackHandlerIntent(instance.constructor.name, intentName);\n\n this.registerIntentMeta(\n intentName,\n proto,\n String(route.methodName),\n handlerSensors,\n handlerObservers,\n );\n }\n\n for (const key of Object.getOwnPropertyNames(proto)) {\n if (routedMethods.has(key)) continue;\n\n const meta = Reflect.getMetadata(INTENT_METADATA_KEY, proto, key);\n if (!meta?.intent) continue;\n\n const intentName = meta.absolute\n ? meta.intent\n : `${prefix}.${meta.intent}`;\n\n if (!this.handlers.has(intentName)) {\n this.register(intentName, (instance as any)[key].bind(instance));\n }\n\n this.registerIntentMeta(\n intentName,\n proto,\n key,\n handlerSensors,\n handlerObservers,\n );\n this.trackHandlerIntent(instance.constructor.name, intentName);\n }\n }\n\n /**\n * Routes a decoded AXIS frame to the appropriate handler.\n *\n * **Precedence:**\n * 1. SDK meta-intents (`CHAIN.EXEC`, `INTENT.EXEC`)\n * 2. Dynamically registered handlers from modules\n * 3. Simple SDK built-in fallback (`system.ping`, `public.ping`, `system.time`, `system.echo`)\n *\n * Registered app handlers intentionally win over simple built-ins. This lets\n * applications attach sensors, rate limits, and custom responses to intents\n * like `system.ping` while keeping a default fallback for apps that do not\n * register their own handler.\n *\n * @param {AxisFrame} frame - The validated and decoded binary frame\n * @returns {Promise<AxisEffect>} The resulting effect of the execution\n * @throws {Error} If the intent header is missing or no handler is registered\n */\n async route(frame: AxisFrame): Promise<AxisEffect> {\n const start = process.hrtime();\n let intent = \"unknown\";\n let handlerRef: string | undefined;\n\n try {\n const intentBytes = frame.headers.get(TLV_INTENT);\n if (!intentBytes) throw new Error(\"Missing intent\");\n intent = this.resolveIntentAlias(this.decoder.decode(intentBytes));\n handlerRef = this.intentHandlerRefs.get(intent);\n const observerBindings = this.getObservers(intent);\n\n await this.emitIntentObservers(observerBindings, {\n event: \"intent.received\",\n timestamp: Date.now(),\n intent,\n handler: handlerRef,\n frame,\n });\n\n let effect: AxisEffect;\n\n effect = await this.routeResolvedIntent(intent, frame);\n\n await this.emitIntentObservers(observerBindings, {\n event: \"intent.completed\",\n timestamp: Date.now(),\n intent,\n handler: handlerRef,\n frame,\n effect,\n metadata: effect.metadata,\n });\n\n this.logIntent(intent, start, true);\n return effect;\n } catch (e: any) {\n await this.emitIntentObservers(this.getObservers(intent), {\n event: \"intent.failed\",\n timestamp: Date.now(),\n intent,\n handler: handlerRef,\n frame,\n error: e.message,\n });\n this.logIntent(intent, start, false, e.message);\n throw e;\n }\n }\n\n /**\n * Dispatches a resolved canonical intent to the correct execution path.\n * This keeps route() focused on observer/error lifecycle concerns.\n */\n private async routeResolvedIntent(\n intent: string,\n frame: AxisFrame,\n ): Promise<AxisEffect> {\n if (isChainExecIntent(intent)) {\n const chainRequest = this.parseChainRequestBody(frame.body);\n return this.executeChainRequest(frame, chainRequest);\n }\n\n if (isIntentExecIntent(intent)) {\n return this.routeIntentExec(frame);\n }\n\n if (this.handlers.has(intent)) {\n return this.routeRegisteredIntent(intent, frame);\n }\n\n const builtinEffect = routeSystemBuiltinIntent(\n intent,\n frame.body,\n this.encoder,\n );\n if (builtinEffect) {\n if (intent === \"system.ping\" || intent === \"public.ping\") {\n this.logger.debug(\"PING received\");\n }\n return builtinEffect;\n }\n\n return this.routeRegisteredIntent(intent, frame);\n }\n\n /**\n * Handles INTENT.EXEC by building an inner frame and routing it normally.\n * The recursive route call is intentional so sensors/observers/policies for\n * the inner intent stay identical to a direct request.\n */\n private async routeIntentExec(frame: AxisFrame): Promise<AxisEffect> {\n const execBody = this.parseIntentExecBody(frame.body);\n const innerIntent = execBody.intent;\n const innerArgs = execBody.args || {};\n\n if (!innerIntent) {\n throw new Error(\"INTENT.EXEC missing inner intent\");\n }\n\n this.logger.debug(`EXEC: routing to inner intent '${innerIntent}'`);\n\n const innerHeaders = new Map(frame.headers);\n innerHeaders.set(TLV_INTENT, this.encoder.encode(innerIntent));\n\n const inlineCapsule = this.toInlineCapsuleRecord(execBody.capsule);\n const capsuleId = this.extractInlineCapsuleId(inlineCapsule);\n if (capsuleId) {\n innerHeaders.set(TLV_CAPSULE, this.encoder.encode(capsuleId));\n innerHeaders.set(TLV_PROOF_REF, this.encoder.encode(capsuleId));\n }\n\n const innerFrame = withAxisExecutionContext(\n {\n ...frame,\n headers: innerHeaders,\n body: this.encodeJson(innerArgs),\n },\n mergeAxisExecutionContext(getAxisExecutionContext(frame), {\n metaIntent: \"INTENT.EXEC\",\n actorId: this.getActorIdFromFrame(frame),\n inlineCapsule,\n }) || {},\n );\n\n return this.route(innerFrame);\n }\n\n /**\n * Executes an app-registered intent: before sensors, body decode, capsule\n * policy, handler invocation, then after sensors.\n */\n private async routeRegisteredIntent(\n intent: string,\n frame: AxisFrame,\n ): Promise<AxisEffect> {\n const handler = this.handlers.get(intent);\n if (!handler) {\n throw new Error(`Intent not found: ${intent}`);\n }\n\n const sensorBindings = this.intentSensors.get(intent);\n if (sensorBindings && sensorBindings.length > 0) {\n await this.runIntentSensors(sensorBindings, intent, frame, \"before\");\n }\n\n const decoder = this.intentDecoders.get(intent);\n const decodedBody = this.decodeIntentBody(intent, frame, decoder);\n\n this.enforceCapsulePolicy(\n intent,\n frame,\n decodedBody,\n this.getEffectiveCapsulePolicy(intent, frame),\n );\n\n const effect = await this.invokeRegisteredHandler(\n intent,\n handler,\n frame,\n decoder,\n decodedBody,\n );\n\n if (sensorBindings && sensorBindings.length > 0) {\n await this.runIntentSensors(sensorBindings, intent, frame, \"after\", {\n decodedBody,\n effect,\n });\n }\n\n return effect;\n }\n\n private decodeIntentBody(\n intent: string,\n frame: AxisFrame,\n decoder?: (buf: Buffer) => any,\n ): any {\n if (!decoder) return frame.body;\n\n try {\n return decoder(Buffer.from(frame.body));\n } catch (decodeErr: any) {\n throw new Error(\n `IntentBody decode failed for ${intent}: ${decodeErr.message}`,\n );\n }\n }\n\n private async invokeRegisteredHandler(\n intent: string,\n handler: any,\n frame: AxisFrame,\n decoder: ((buf: Buffer) => any) | undefined,\n decodedBody: any,\n ): Promise<AxisEffect> {\n if (typeof handler === \"function\") {\n const resultBody = decoder\n ? await handler(decodedBody, frame.headers)\n : await handler(frame.body, frame.headers);\n return {\n ok: true,\n effect: \"complete\",\n body: resultBody,\n };\n }\n\n if (typeof handler.handle === \"function\") {\n return handler.handle(frame);\n }\n\n if (typeof handler.execute === \"function\") {\n const bodyRes = decoder\n ? await handler.execute(decodedBody, frame.headers)\n : await handler.execute(frame.body, frame.headers);\n return {\n ok: true,\n effect: \"complete\",\n body: bodyRes,\n };\n }\n\n throw new Error(\n `Handler for ${intent} does not implement handle or execute`,\n );\n }\n\n private logIntent(\n intent: string,\n start: [number, number],\n ok: boolean,\n error?: string,\n ) {\n const diff = process.hrtime(start);\n const ms = (diff[0] * 1e3 + diff[1] / 1e6).toFixed(2);\n if (ok) {\n this.logger.debug(`${intent} completed in ${ms}ms`);\n } else {\n this.logger.warn(`${intent} failed in ${ms}ms - ${error}`);\n }\n }\n\n registerIntentMeta(\n intent: string,\n proto: object,\n methodName: string,\n handlerSensors?: AxisIntentSensorBindingInput[],\n handlerObservers?: AxisObserverBinding[],\n ): void {\n const decoder = Reflect.getMetadata(INTENT_BODY_KEY, proto, methodName);\n if (decoder) {\n this.intentDecoders.set(intent, decoder);\n }\n\n const intentSensors = Reflect.getMetadata(\n INTENT_SENSORS_KEY,\n proto,\n methodName,\n );\n const meta = Reflect.getMetadata(INTENT_METADATA_KEY, proto, methodName);\n const combined = mergeIntentSensorBindings(\n handlerSensors,\n Array.isArray(intentSensors) ? intentSensors : undefined,\n Array.isArray(meta?.is) ? meta.is : undefined,\n );\n if (combined.length > 0) {\n this.intentSensors.set(intent, combined);\n }\n\n const methodObservers: AxisObserverBinding[] =\n Reflect.getMetadata(OBSERVER_BINDINGS_KEY, proto, methodName) || [];\n const observers = mergeObserverBindings([\n ...(handlerObservers || []),\n ...methodObservers,\n ]);\n if (observers.length > 0) {\n this.intentObservers.set(intent, observers);\n }\n\n const handlerCapsulePolicy = Reflect.getMetadata(\n CAPSULE_POLICY_METADATA_KEY,\n proto.constructor,\n ) as CapsulePolicyOptions | undefined;\n const methodCapsulePolicy = Reflect.getMetadata(\n CAPSULE_POLICY_METADATA_KEY,\n proto,\n methodName,\n ) as CapsulePolicyOptions | undefined;\n const capsulePolicy = mergeCapsulePolicyOptions(\n handlerCapsulePolicy,\n methodCapsulePolicy,\n );\n if (capsulePolicy) {\n this.intentCapsulePolicies.set(intent, capsulePolicy);\n }\n\n if (meta) {\n this.storeSchema({ ...meta, intent });\n if (meta.kind) {\n this.intentKinds.set(intent, meta.kind);\n }\n\n const chainMeta = Reflect.getMetadata(\n CHAIN_METADATA_KEY,\n proto,\n methodName,\n ) as RegisteredChainConfig | undefined;\n const chainConfig = normalizeChainConfig(chainMeta, meta.chain);\n if (chainConfig) {\n this.intentChains.set(intent, chainConfig);\n }\n }\n\n // ── @Sensitivity ────────────────────────────────────────────────────────\n const methodSensitivity: SensitivityLevel | undefined = Reflect.getMetadata(\n SENSITIVITY_METADATA_KEY,\n proto,\n methodName,\n );\n const classSensitivity: SensitivityLevel | undefined = Reflect.getMetadata(\n SENSITIVITY_METADATA_KEY,\n proto.constructor,\n );\n const sensitivity =\n meta?.sensitivity ?? methodSensitivity ?? classSensitivity;\n if (sensitivity) {\n this.intentSensitivity.set(intent, sensitivity);\n }\n\n // ── @Contract ───────────────────────────────────────────────────────────\n const methodContract: Record<string, any> | undefined = Reflect.getMetadata(\n CONTRACT_METADATA_KEY,\n proto,\n methodName,\n );\n const classContract: Record<string, any> | undefined = Reflect.getMetadata(\n CONTRACT_METADATA_KEY,\n proto.constructor,\n );\n const contract = methodContract ?? classContract;\n if (contract) {\n this.intentContracts.set(intent, contract);\n }\n\n // Inline @Intent({ requiredProof }) wins over decorator/class defaults.\n const inlineRequiredProof = normalizeRequiredProof(meta?.requiredProof);\n const proofPolicy = resolveIntentProofPolicy(proto, methodName);\n const requiredProof = inlineRequiredProof ?? proofPolicy.requiredProof;\n if (requiredProof.length > 0) {\n this.intentRequiredProof.set(intent, requiredProof);\n }\n\n // ── @AxisRateLimit ───────────────────────────────────────────────────────\n const rateLimit: AxisRateLimitConfig | undefined = Reflect.getMetadata(\n AXIS_RATE_LIMIT_KEY,\n proto,\n methodName,\n );\n if (rateLimit) {\n this.intentRateLimits.set(intent, rateLimit);\n }\n }\n\n // ─── Policy Getters ────────────────────────────────────────────────────────\n\n getSensitivity(intent: string): SensitivityLevel | undefined {\n return this.intentSensitivity.get(this.resolveIntentAlias(intent));\n }\n\n getContract(intent: string): Record<string, any> | undefined {\n return this.intentContracts.get(this.resolveIntentAlias(intent));\n }\n\n getRequiredProof(intent: string): RequiredProofKind[] | undefined {\n return this.intentRequiredProof.get(this.resolveIntentAlias(intent));\n }\n\n isPublic(intent: string): boolean {\n return this.getRequiredProof(intent)?.includes(\"NONE\") ?? false;\n }\n\n isAnonymous(intent: string): boolean {\n return this.getRequiredProof(intent)?.includes(\"ANONYMOUS\") ?? false;\n }\n\n isAuthorized(intent: string): boolean {\n return this.getRequiredProof(intent)?.includes(\"AUTHORIZED\") ?? false;\n }\n\n getRateLimit(intent: string): AxisRateLimitConfig | undefined {\n return this.intentRateLimits.get(this.resolveIntentAlias(intent));\n }\n\n // ─── Handler-level Getters ─────────────────────────────────────────────────\n\n /** All intents registered under the given handler class name. */\n getHandlerIntents(handlerName: string): string[] {\n return this.handlerIntents.get(handlerName) ?? [];\n }\n\n /** Returns the handler class name that owns the given intent, or undefined if not found. */\n getHandlerByIntent(intent: string): string | undefined {\n const resolved = this.resolveIntentAlias(intent);\n return this.handlerByIntent.get(resolved);\n }\n\n /** All registered handler class names. */\n getRegisteredHandlers(): string[] {\n return Array.from(this.handlerIntents.keys());\n }\n\n /** The system/builtin intents (ping, time, echo, chain, intent.exec). */\n getSystemIntents(): string[] {\n return [...BUILTIN_INTENTS];\n }\n\n /** True if every intent in the handler is public, or any one is public — returns true if ANY intent is @AxisPublic. */\n isHandlerPublic(handlerName: string): boolean {\n return this.getHandlerIntents(handlerName).some((i) => this.isPublic(i));\n }\n\n /** True if any intent in the handler is @AxisAnonymous. */\n isHandlerAnonymous(handlerName: string): boolean {\n return this.getHandlerIntents(handlerName).some((i) => this.isAnonymous(i));\n }\n\n /** True if any intent in the handler is @AxisAuthorized. */\n isHandlerAuthorized(handlerName: string): boolean {\n return this.getHandlerIntents(handlerName).some((i) =>\n this.isAuthorized(i),\n );\n }\n\n /** Union of all required proof kinds across the handler's intents (deduplicated). */\n getHandlerProof(handlerName: string): RequiredProofKind[] | undefined {\n const all = this.getHandlerIntents(handlerName).flatMap(\n (i) => this.getRequiredProof(i) ?? [],\n );\n if (all.length === 0) return undefined;\n return [...new Set(all)];\n }\n\n /** Contract from the first intent that has one (class-level contracts propagate to all intents). */\n getHandlerContract(handlerName: string): Record<string, any> | undefined {\n for (const intent of this.getHandlerIntents(handlerName)) {\n const contract = this.getContract(intent);\n if (contract) return contract;\n }\n return undefined;\n }\n\n /** Sensitivity from the first intent that has one. */\n getHandlerSensitivity(handlerName: string): SensitivityLevel | undefined {\n for (const intent of this.getHandlerIntents(handlerName)) {\n const sensitivity = this.getSensitivity(intent);\n if (sensitivity) return sensitivity;\n }\n return undefined;\n }\n\n /** Rate limit from the first intent that has one. */\n getHandlerRateLimit(handlerName: string): AxisRateLimitConfig | undefined {\n for (const intent of this.getHandlerIntents(handlerName)) {\n const rateLimit = this.getRateLimit(intent);\n if (rateLimit) return rateLimit;\n }\n return undefined;\n }\n\n /** Capsule policy from the first intent that has one. */\n getHandlerCapsulePolicy(\n handlerName: string,\n ): CapsulePolicyOptions | undefined {\n for (const intent of this.getHandlerIntents(handlerName)) {\n const policy = this.intentCapsulePolicies.get(intent);\n if (policy) return policy;\n }\n return undefined;\n }\n\n /** Intent namespace prefix declared in @Handler('auth'). */\n getHandlerPrefix(handlerName: string): string | undefined {\n return this.handlerPrefixes.get(handlerName);\n }\n\n /** Class-level sensor bindings from @HandlerSensors (run before every intent in this handler). */\n getHandlerClassSensors(\n handlerName: string,\n ): AxisIntentSensorBinding[] | undefined {\n return this.handlerClassSensors.get(handlerName);\n }\n\n /** Class-level observer bindings from @Handler({ observe: [...] }). */\n getHandlerClassObservers(\n handlerName: string,\n ): AxisObserverBinding[] | undefined {\n return this.handlerClassObservers.get(handlerName);\n }\n\n /**\n * Resolves the optional `handler...intent` wire shorthand to a registered\n * canonical intent. Existing exact intent names always win.\n */\n resolveIntentAlias(intent: string): string {\n if (this.handlers.has(intent) || isBuiltinIntent(intent)) {\n return intent;\n }\n\n const separator = \"...\";\n const separatorIndex = intent.indexOf(separator);\n if (separatorIndex <= 0) return intent;\n\n const handlerKey = intent.slice(0, separatorIndex);\n const action = intent.slice(separatorIndex + separator.length);\n if (!handlerKey || !action) return intent;\n\n const handlerName =\n this.handlerByPrefix.get(handlerKey) ??\n (this.handlerIntents.has(handlerKey) ? handlerKey : undefined);\n if (!handlerName) return intent;\n\n const prefix = this.getHandlerPrefix(handlerName) ?? handlerKey;\n const handlerIntents = this.getHandlerIntents(handlerName);\n const prefixedIntent = `${prefix}.${action}`;\n if (handlerIntents.includes(prefixedIntent)) return prefixedIntent;\n\n if (handlerIntents.includes(action)) return action;\n\n const suffix = `.${action}`;\n const suffixMatches = handlerIntents.filter((candidate) =>\n candidate.endsWith(suffix),\n );\n return suffixMatches.length === 1 ? suffixMatches[0] : intent;\n }\n\n /** Full summary of a handler's registered intents and aggregated policies. Returns null if unknown. */\n getHandlerSummary(handlerName: string): HandlerSummary | null {\n const intents = this.getHandlerIntents(handlerName);\n if (intents.length === 0) return null;\n return {\n handler: handlerName,\n prefix: this.getHandlerPrefix(handlerName),\n intents,\n isPublic: this.isHandlerPublic(handlerName),\n isAnonymous: this.isHandlerAnonymous(handlerName),\n isAuthorized: this.isHandlerAuthorized(handlerName),\n requiredProof: this.getHandlerProof(handlerName),\n contract: this.getHandlerContract(handlerName),\n sensitivity: this.getHandlerSensitivity(handlerName),\n rateLimit: this.getHandlerRateLimit(handlerName),\n capsulePolicy: this.getHandlerCapsulePolicy(handlerName),\n classSensors: this.getHandlerClassSensors(handlerName),\n classObservers: this.getHandlerClassObservers(handlerName),\n };\n }\n\n /** Summary of all registered handlers keyed by handler class name. */\n getAllHandlerSummaries(): Map<string, HandlerSummary> {\n const result = new Map<string, HandlerSummary>();\n for (const handlerName of this.handlerIntents.keys()) {\n const summary = this.getHandlerSummary(handlerName);\n if (summary) result.set(handlerName, summary);\n }\n return result;\n }\n\n private async emitIntentObservers(\n bindings: AxisObserverBinding[],\n context: Parameters<ObserverDispatcherService[\"dispatch\"]>[1],\n ): Promise<void> {\n if (!this.observerDispatcher) return;\n await this.observerDispatcher.dispatch(\n bindings.length > 0 ? bindings : undefined,\n context,\n );\n }\n\n private async runIntentSensors(\n sensorBindings: AxisIntentSensorBinding[],\n intent: string,\n frame: AxisFrame,\n stage: \"before\" | \"after\",\n extras?: {\n decodedBody?: unknown;\n effect?: AxisEffect;\n },\n ): Promise<void> {\n for (const binding of sensorBindings) {\n if (binding.when !== stage && binding.when !== \"both\") continue;\n\n const sensorRef = binding.ref;\n const sensor = this.resolveIntentSensor(sensorRef);\n const sensorName = sensorRefKey(sensorRef);\n\n if (!sensor) {\n this.logger.error(\n `Intent sensor ${sensorName} is not registered for ${intent}`,\n );\n throw new Error(`SENSOR_MISSING:${sensorName}`);\n }\n\n const sensorInput: SensorInput = {\n rawBytes: frame.body,\n intent,\n body: frame.body,\n headerTLVs: frame.headers as any,\n frameBody: frame.body,\n metadata: {\n phase: \"intent\",\n stage,\n intent,\n schema: this.getSchema(intent),\n validators: this.getValidators(intent),\n decodedBody: extras?.decodedBody,\n effect: extras?.effect,\n },\n };\n\n if (sensor.supports && !sensor.supports(sensorInput)) continue;\n\n const decision = normalizeSensorDecision(await sensor.run(sensorInput));\n if (!decision.allow) {\n const reason = decision.reasons[0] || `${sensor.name}:DENIED`;\n this.logger.warn(\n `Intent sensor ${sensor.name} denied ${intent}: ${reason}`,\n );\n throw new Error(`SENSOR_DENY:${reason}`);\n }\n }\n }\n\n trackHandlerIntent(handlerName: string, intent: string): void {\n this.handlerByIntent.set(intent, handlerName);\n const existing = this.handlerIntents.get(handlerName);\n if (existing) {\n if (!existing.includes(intent)) existing.push(intent);\n } else {\n this.handlerIntents.set(handlerName, [intent]);\n }\n }\n\n /**\n * Stores class-level handler metadata (prefix, sensors, observers) gathered\n * at discovery time. Should be called once per handler class.\n */\n trackHandlerMeta(\n className: string,\n prefix: string,\n sensors: AxisIntentSensorBindingInput[],\n observers: AxisObserverBinding[],\n ): void {\n this.handlerPrefixes.set(className, prefix);\n this.handlerByPrefix.set(prefix, className);\n if (sensors.length > 0) {\n this.handlerClassSensors.set(\n className,\n mergeIntentSensorBindings(sensors),\n );\n }\n if (observers.length > 0) {\n this.handlerClassObservers.set(\n className,\n mergeObserverBindings(observers),\n );\n }\n }\n\n private resolveIntentSensor(\n ref: AxisIntentSensorRef,\n ): AxisSensor | undefined {\n const registered = this.sensorRegistry?.resolve(ref);\n if (registered) {\n return registered;\n }\n\n if (!this.dependencyResolver || typeof ref === \"string\") {\n return undefined;\n }\n\n const resolved = this.dependencyResolver.resolve(ref);\n return isAxisSensorInstance(resolved) ? resolved : undefined;\n }\n\n private getEffectiveCapsulePolicy(\n intent: string,\n frame: AxisFrame,\n ): CapsulePolicyOptions | undefined {\n const registeredPolicy = this.intentCapsulePolicies.get(intent);\n const chainConfig = this.intentChains.get(intent);\n const executionContext = getAxisExecutionContext(frame);\n\n const derivedScopes = Array.from(\n new Set([\n ...this.toScopeList(chainConfig?.capsuleScope),\n ...this.toScopeList(executionContext?.capsuleRef?.scope),\n ...this.toScopeList(executionContext?.chainStep?.capsuleScope),\n ]),\n );\n\n const requiresCapsule =\n chainConfig?.proofRequired ||\n executionContext?.capsuleRef?.proofRequired ||\n executionContext?.chainStep?.proofRequired ||\n executionContext?.chainEnvelope?.capsule?.proofRequired ||\n derivedScopes.length > 0;\n\n const derivedPolicy = requiresCapsule\n ? normalizeCapsulePolicyOptions({\n required: true,\n scopes: derivedScopes.length > 0 ? derivedScopes : undefined,\n })\n : undefined;\n\n return mergeCapsulePolicyOptions(registeredPolicy, derivedPolicy);\n }\n\n private enforceCapsulePolicy(\n intent: string,\n frame: AxisFrame,\n body: unknown,\n policy?: CapsulePolicyOptions,\n ): void {\n const executionContext = getAxisExecutionContext(frame);\n const inlineCapsuleRecord = this.toInlineCapsuleRecord(\n executionContext?.inlineCapsule,\n );\n const inlineCapsule = normalizeInlineCapsule(inlineCapsuleRecord);\n const normalizedPolicy = policy\n ? normalizeCapsulePolicyOptions(policy)\n : undefined;\n\n if (!inlineCapsule) {\n if (normalizedPolicy?.required) {\n if (\n normalizedPolicy.allowCapsuleRef &&\n this.hasCapsuleReference(frame) &&\n this.toScopeList(normalizedPolicy.scopes).length === 0 &&\n normalizedPolicy.intentBound === false\n ) {\n return;\n }\n\n throw new AxisError(\n this.hasCapsuleReference(frame)\n ? \"CAPSULE_CLAIMS_REQUIRED\"\n : \"CAPSULE_REQUIRED\",\n `Intent ${intent} requires an inline capsule for policy enforcement`,\n 403,\n { intent },\n );\n }\n\n return;\n }\n\n if (isInlineCapsuleExpired(inlineCapsule)) {\n throw new AxisError(\n \"CAPSULE_EXPIRED\",\n `Capsule for ${intent} is expired`,\n 403,\n { intent, capsuleId: inlineCapsule.id },\n );\n }\n\n const actorId =\n this.getActorIdFromFrame(frame) || executionContext?.actorId;\n if (\n actorId &&\n inlineCapsule.actorId &&\n !this.identifiersMatch(actorId, inlineCapsule.actorId)\n ) {\n throw new AxisError(\n \"CAPSULE_ACTOR_MISMATCH\",\n `Capsule actor does not match request actor for ${intent}`,\n 403,\n {\n intent,\n actorId,\n capsuleActorId: inlineCapsule.actorId,\n },\n );\n }\n\n const proofRef = this.getProofRefFromFrame(frame);\n if (\n proofRef &&\n inlineCapsule.id &&\n !this.identifiersMatch(proofRef, inlineCapsule.id)\n ) {\n throw new AxisError(\n \"CAPSULE_REF_MISMATCH\",\n `Capsule reference does not match request proof for ${intent}`,\n 403,\n {\n intent,\n proofRef,\n capsuleId: inlineCapsule.id,\n },\n );\n }\n\n const realm = this.getHeaderValue(frame, TLV_REALM);\n if (realm && inlineCapsule.realm && realm !== inlineCapsule.realm) {\n throw new AxisError(\n \"CAPSULE_REALM_MISMATCH\",\n `Capsule realm does not match request realm for ${intent}`,\n 403,\n { intent, realm, capsuleRealm: inlineCapsule.realm },\n );\n }\n\n const node = this.getHeaderValue(frame, TLV_NODE);\n if (node && inlineCapsule.node && node !== inlineCapsule.node) {\n throw new AxisError(\n \"CAPSULE_NODE_MISMATCH\",\n `Capsule node does not match request node for ${intent}`,\n 403,\n { intent, node, capsuleNode: inlineCapsule.node },\n );\n }\n\n const shouldCheckIntent = normalizedPolicy?.intentBound ?? true;\n if (\n shouldCheckIntent &&\n !inlineCapsuleAllowsIntent(inlineCapsule, intent)\n ) {\n throw new AxisError(\n \"CAPSULE_DENIED\",\n `Capsule does not authorize ${intent}`,\n 403,\n {\n intent,\n capsuleId: inlineCapsule.id,\n allowedIntents: inlineCapsule.intents,\n },\n );\n }\n\n const requiredScopes = this.toScopeList(normalizedPolicy?.scopes);\n if (requiredScopes.length === 0) {\n return;\n }\n\n let resolvedScopes: string[];\n try {\n resolvedScopes = resolvePolicyScopes(requiredScopes, {\n body,\n intent,\n actorId,\n chainId: executionContext?.chainEnvelope?.chainId,\n stepId: executionContext?.chainStep?.stepId,\n });\n } catch (error: any) {\n this.logger.error(`Scope template error for ${intent}: ${error.message}`);\n throw new AxisError(\n \"CAPSULE_SCOPE_TEMPLATE_UNRESOLVED\",\n \"Scope policy validation failed\",\n 400,\n { intent },\n );\n }\n\n if (\n !inlineCapsuleSatisfiesScopes(\n inlineCapsule,\n resolvedScopes,\n normalizedPolicy?.scopeMode ?? \"all\",\n )\n ) {\n throw new AxisError(\n \"SCOPE_MISMATCH\",\n `Capsule scopes do not satisfy ${intent}`,\n 403,\n {\n intent,\n requiredScopes: resolvedScopes,\n availableScopes: inlineCapsule.scopes || [],\n },\n );\n }\n }\n\n private async executeChainRequest(\n frame: AxisFrame,\n request: AxisChainRequest<unknown, Record<string, unknown>>,\n ): Promise<AxisEffect> {\n const { AxisChainExecutor } = await import(\"./axis-chain.executor\");\n const headerActorId = this.getActorIdFromFrame(frame);\n if (\n request.actorId &&\n headerActorId &&\n !this.identifiersMatch(request.actorId, headerActorId)\n ) {\n throw new AxisError(\n \"ACTOR_MISMATCH\",\n \"CHAIN.EXEC actorId conflicts with authenticated frame identity\",\n 403,\n );\n }\n const actorId = headerActorId || request.actorId;\n const inlineCapsule = this.toInlineCapsuleRecord(request.capsule);\n const capsuleId = this.extractInlineCapsuleId(inlineCapsule);\n const headers = new Map(frame.headers);\n\n if (capsuleId) {\n headers.set(TLV_CAPSULE, this.encoder.encode(capsuleId));\n headers.set(TLV_PROOF_REF, this.encoder.encode(capsuleId));\n }\n\n const baseFrame = withAxisExecutionContext(\n {\n ...frame,\n headers,\n },\n mergeAxisExecutionContext(getAxisExecutionContext(frame), {\n metaIntent: \"CHAIN.EXEC\",\n actorId,\n inlineCapsule,\n capsuleRef: request.envelope.capsule,\n chainEnvelope: request.envelope,\n }) || {},\n );\n\n const executor = new AxisChainExecutor(this, this.observerDispatcher);\n const result = await executor.execute(request.envelope, {\n actorId,\n baseFrame,\n });\n\n return {\n ok: result.status !== \"FAILED\",\n effect: \"chain.complete\",\n body: this.encodeJson(result),\n metadata: {\n chainId: result.chainId,\n status: result.status,\n },\n };\n }\n\n private parseIntentExecBody(bytes: Uint8Array): {\n intent: string;\n args?: unknown;\n capsule?: Record<string, unknown>;\n execNonce?: string;\n } {\n try {\n return JSON.parse(this.decoder.decode(bytes));\n } catch (error: any) {\n throw new Error(`INTENT.EXEC unwrapping failed: ${error.message}`);\n }\n }\n\n private parseChainRequestBody(\n bytes: Uint8Array,\n ): AxisChainRequest<unknown, Record<string, unknown>> {\n let jsonError: Error | undefined;\n\n try {\n const parsed = JSON.parse(this.decoder.decode(bytes));\n if (this.isChainRequestLike(parsed)) {\n return {\n envelope: parsed.envelope,\n capsule: this.toInlineCapsuleRecord(parsed.capsule),\n actorId:\n typeof parsed.actorId === \"string\" ? parsed.actorId : undefined,\n };\n }\n\n if (this.isChainEnvelopeLike(parsed)) {\n return { envelope: parsed };\n }\n } catch (error: any) {\n jsonError = error;\n }\n\n try {\n const decoded = decodeChainRequest<unknown, Record<string, unknown>>(\n bytes,\n );\n return {\n envelope: decoded.envelope,\n capsule: this.toInlineCapsuleRecord(decoded.capsule),\n actorId: decoded.actorId,\n };\n } catch (requestError: any) {\n try {\n return {\n envelope: decodeChainEnvelope(bytes) as AxisChainEnvelope,\n };\n } catch (envelopeError: any) {\n const reason = [\n jsonError?.message,\n requestError.message,\n envelopeError.message,\n ]\n .filter(Boolean)\n .join(\" | \");\n throw new Error(`CHAIN.EXEC decode failed: ${reason}`);\n }\n }\n }\n\n private isChainRequestLike(\n value: unknown,\n ): value is AxisChainRequest<unknown, Record<string, unknown>> {\n return (\n !!value &&\n typeof value === \"object\" &&\n \"envelope\" in value &&\n this.isChainEnvelopeLike((value as Record<string, unknown>).envelope)\n );\n }\n\n private isChainEnvelopeLike(value: unknown): value is AxisChainEnvelope {\n return (\n !!value &&\n typeof value === \"object\" &&\n typeof (value as Record<string, unknown>).chainId === \"string\" &&\n Array.isArray((value as Record<string, unknown>).steps)\n );\n }\n\n private encodeJson(value: unknown): Uint8Array {\n return this.encoder.encode(JSON.stringify(value));\n }\n\n private getActorIdFromFrame(frame: AxisFrame): string | undefined {\n return this.getHeaderValue(frame, TLV_ACTOR_ID);\n }\n\n private getProofRefFromFrame(frame: AxisFrame): string | undefined {\n return (\n this.getHeaderValue(frame, TLV_PROOF_REF) ||\n this.getHeaderValue(frame, TLV_CAPSULE)\n );\n }\n\n private hasCapsuleReference(frame: AxisFrame): boolean {\n return !!this.getProofRefFromFrame(frame);\n }\n\n private getHeaderValue(frame: AxisFrame, tag: number): string | undefined {\n const value = frame.headers.get(tag);\n if (!value || value.length === 0) {\n return undefined;\n }\n\n const decoded = this.decoder.decode(value);\n if (/^[\\x20-\\x7e]+$/.test(decoded)) {\n return decoded;\n }\n\n return Buffer.from(value).toString(\"hex\");\n }\n\n private identifiersMatch(left: string, right: string): boolean {\n const normalize = (value: string) =>\n /^[0-9a-f]+$/i.test(value) ? value.toLowerCase() : value;\n return normalize(left) === normalize(right);\n }\n\n private extractInlineCapsuleId(\n capsule?: Record<string, unknown>,\n ): string | undefined {\n const id = capsule?.id;\n return typeof id === \"string\" && id.length > 0 ? id : undefined;\n }\n\n private toInlineCapsuleRecord(\n value: unknown,\n ): Record<string, unknown> | undefined {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) {\n return undefined;\n }\n\n return value as Record<string, unknown>;\n }\n\n private toScopeList(value?: string | string[]): string[] {\n if (!value) {\n return [];\n }\n\n return Array.isArray(value) ? value : [value];\n }\n\n // ===========================================================================\n // CCE — Capsule-Carried Encryption Support\n // ===========================================================================\n\n /**\n * Configure the CCE pipeline.\n * Must be called before routeCce() can process encrypted requests.\n */\n configureCce(config: Omit<CcePipelineConfig, \"handlers\">): void {\n this.ccePipelineConfig = config;\n this.logger.log(\"CCE pipeline configured\");\n }\n\n /**\n * Register a CCE-encrypted intent handler.\n * CCE handlers receive decrypted payloads and execution context.\n */\n registerCceHandler(intent: string, handler: CceHandler): void {\n this.cceHandlers.set(intent, handler);\n this.logger.debug(`CCE handler registered: ${intent}`);\n }\n\n /**\n * Check if a CCE handler exists for the given intent.\n */\n hasCceHandler(intent: string): boolean {\n return this.cceHandlers.has(intent);\n }\n\n /**\n * Route a CCE-encrypted request through the full pipeline.\n *\n * Steps:\n * 1. Sensor chain (envelope validation → capsule verification → replay → decrypt)\n * 2. Execution context derivation\n * 3. Handler execution\n * 4. Response encryption\n * 5. Witness recording\n */\n async routeCce(envelope: CceRequestEnvelope): Promise<CcePipelineResult> {\n if (!this.ccePipelineConfig) {\n return {\n ok: false,\n error: {\n code: \"CCE_NOT_CONFIGURED\",\n message: \"CCE pipeline not configured. Call configureCce() first.\",\n },\n status: \"ERROR\",\n };\n }\n\n const config: CcePipelineConfig = {\n ...this.ccePipelineConfig,\n handlers: this.cceHandlers,\n };\n\n return executeCcePipeline(envelope, config);\n }\n\n private storeSchema(meta: {\n intent: string;\n tlv?: IntentTlvField[];\n dto?: Function;\n bodyProfile?: \"TLV_MAP\" | \"RAW\" | \"TLV_OBJ\" | \"TLV_ARR\";\n kind?: IntentKind;\n }): void {\n if (meta.dto) {\n if (meta.tlv && meta.tlv.length > 0) {\n this.logger.warn(\n `${meta.intent}: both 'dto' and 'tlv' specified - using dto, ignoring tlv`,\n );\n }\n\n const extracted = extractDtoSchema(meta.dto);\n const schema: IntentSchema = {\n intent: meta.intent,\n version: 1,\n bodyProfile: meta.bodyProfile || \"TLV_MAP\",\n dtoName: meta.dto.name || undefined,\n fields: extracted.fields.map((f) => ({\n name: f.name,\n tlv: f.tag,\n kind: f.kind,\n required: f.required,\n maxLen: f.maxLen,\n max: f.max,\n scope: f.scope,\n })),\n };\n\n this.intentSchemas.set(meta.intent, schema);\n\n if (extracted.validators.size > 0) {\n this.intentValidators.set(meta.intent, extracted.validators);\n }\n\n if (!this.intentDecoders.has(meta.intent)) {\n this.intentDecoders.set(meta.intent, buildDtoDecoder(meta.dto));\n }\n\n return;\n }\n\n if (!meta.tlv || meta.tlv.length === 0) return;\n\n const schema: IntentSchema = {\n intent: meta.intent,\n version: 1,\n bodyProfile: meta.bodyProfile || \"TLV_MAP\",\n fields: meta.tlv.map((f) => ({\n name: f.name,\n tlv: f.tag,\n kind: f.kind,\n required: f.required,\n maxLen: f.maxLen,\n max: f.max,\n scope: f.scope,\n })),\n };\n\n this.intentSchemas.set(meta.intent, schema);\n }\n}\n","/**\n * Sensor Execution Bands\n *\n * Semantic groupings for the AXIS sensor chain.\n * Each band has 50–100 slots for ordering sensors within it.\n *\n * WIRE (0–39): Raw bytes, no decode. PRE_DECODE phase.\n * IDENTITY (40–89): Who is this? IP, access, proof, capsule. POST_DECODE.\n * POLICY (90–139): Are they allowed? Sig, capability, rate limit. POST_DECODE.\n * CONTENT (140–199): What's in the frame? TLV, body, schema, files. POST_DECODE.\n * BUSINESS (200–299): Business context. Stream, WS, timeout. POST_DECODE.\n * AUDIT (900+): Finalization, logging. POST_DECODE.\n */\nexport const BAND = {\n /** Pre-decode: raw byte validation, geo, budget, magic */\n WIRE: 0,\n /** Post-decode: identity resolution, capsule, proof */\n IDENTITY: 40,\n /** Post-decode: authorization, signature, rate limiting */\n POLICY: 90,\n /** Post-decode: content validation, TLV, schema, files */\n CONTENT: 140,\n /** Post-decode: business logic sensors, streams, WS */\n BUSINESS: 200,\n /** Post-decode: audit, logging (always last) */\n AUDIT: 900,\n} as const;\n\nexport type SensorBand = keyof typeof BAND;\n\n/** Sensors with order below this boundary run in PRE_DECODE phase (middleware) */\nexport const PRE_DECODE_BOUNDARY = 40;\n","/**\n * Deterministic JSON serialization for observation hashing.\n *\n * Sorts object keys alphabetically and strips `undefined` values\n * so that two structurally equivalent observations always produce\n * the same string — required for reproducible SHA-256 hashing.\n */\n\nfunction normalize(value: unknown): unknown {\n if (Array.isArray(value)) {\n return value.map((item) => normalize(item));\n }\n\n if (value && typeof value === 'object') {\n const entries = Object.entries(value as Record<string, unknown>)\n .filter(([, nested]) => nested !== undefined)\n .sort(([left], [right]) => left.localeCompare(right));\n\n const normalized: Record<string, unknown> = {};\n for (const [key, nested] of entries) {\n normalized[key] = normalize(nested);\n }\n return normalized;\n }\n\n return value;\n}\n\nexport function stableJsonStringify(value: unknown): string {\n return JSON.stringify(normalize(value));\n}\n","import { AxisObservation } from '../axis-observation';\nimport { ObservationQueueMessage } from './observation-queue.types';\n\nexport interface ObservationStreamEntry {\n id: string;\n message: ObservationQueueMessage;\n}\n\nexport function buildQueueMessage(\n observation: AxisObservation,\n sourceNodeId: string,\n previous?: ObservationQueueMessage,\n lastError?: string,\n): ObservationQueueMessage {\n const now = Date.now();\n\n return {\n v: 1,\n observation,\n attempts: previous ? previous.attempts + 1 : 0,\n firstEnqueuedAt: previous?.firstEnqueuedAt ?? now,\n lastEnqueuedAt: now,\n sourceNodeId,\n lastError,\n };\n}\n\nexport function encodeQueueMessage(message: ObservationQueueMessage): string {\n return JSON.stringify(message);\n}\n\nexport function decodeQueueMessage(\n raw: string,\n): ObservationQueueMessage | null {\n try {\n const parsed = JSON.parse(raw) as ObservationQueueMessage;\n if (!parsed || parsed.v !== 1 || !parsed.observation?.id) {\n return null;\n }\n return parsed;\n } catch {\n return null;\n }\n}\n\nexport function parseStreamEntries(raw: any): ObservationStreamEntry[] {\n if (!Array.isArray(raw)) {\n return [];\n }\n\n const entries: ObservationStreamEntry[] = [];\n for (const streamRow of raw) {\n if (!Array.isArray(streamRow) || streamRow.length < 2) {\n continue;\n }\n\n const messageRows = streamRow[1];\n if (!Array.isArray(messageRows)) {\n continue;\n }\n\n for (const row of messageRows) {\n if (!Array.isArray(row) || row.length < 2) {\n continue;\n }\n\n const id = String(row[0]);\n const fields = Array.isArray(row[1]) ? row[1] : [];\n const fieldMap = fieldsToMap(fields);\n const payload = fieldMap.get('payload');\n if (!payload) {\n continue;\n }\n\n const message = decodeQueueMessage(payload);\n if (!message) {\n continue;\n }\n\n entries.push({ id, message });\n }\n }\n\n return entries;\n}\n\nexport function parseAutoClaimEntries(raw: any): ObservationStreamEntry[] {\n if (!Array.isArray(raw) || raw.length < 2) {\n return [];\n }\n\n const rows = Array.isArray(raw[1]) ? raw[1] : [];\n return parseStreamEntries([['stream', rows]]);\n}\n\nfunction fieldsToMap(fields: any[]): Map<string, string> {\n const map = new Map<string, string>();\n for (let i = 0; i < fields.length; i += 2) {\n const key = fields[i];\n const value = fields[i + 1];\n if (key !== undefined && value !== undefined) {\n map.set(String(key), String(value));\n }\n }\n return map;\n}\n","import { createHash } from 'crypto';\n\nimport { AxisObservation } from '../axis-observation';\nimport { stableJsonStringify } from './stable-json';\n\n/**\n * Witness summary — a compact proof-of-observation payload\n * signed by the node that observed the execution.\n */\nexport interface ObservationWitnessSummary {\n intent?: string;\n actorId?: string;\n decision?: string;\n statusCode?: number;\n durationMs?: number;\n sensorCount: number;\n stageCount: number;\n}\n\n/**\n * Unsigned witness artifact — everything except the signature.\n * The backend adds `kid`, `sig`, and `alg` using its keyring.\n */\nexport interface UnsignedObservationWitness {\n v: 1;\n observationId: string;\n payloadHash: string;\n sealedAt: number;\n summary: ObservationWitnessSummary;\n}\n\n/**\n * Build the canonical JSON representation of an observation.\n *\n * Only includes structurally meaningful fields (no transient state).\n * Keys are sorted deterministically via `stableJsonStringify` so that\n * the same observation always produces the same string.\n */\nexport function canonicalizeObservation(obs: AxisObservation): string {\n const obj: Record<string, unknown> = {\n id: obs.id,\n startMs: obs.startMs,\n endMs: obs.endMs,\n transport: obs.transport,\n ip: obs.ip,\n intent: obs.intent,\n actorId: obs.actorId,\n capsuleId: obs.capsuleId,\n decision: obs.decision,\n resultCode: obs.resultCode,\n statusCode: obs.statusCode,\n durationMs: obs.durationMs,\n stages: obs.stages.map((s) => ({\n name: s.name,\n status: s.status,\n startMs: s.startMs,\n endMs: s.endMs,\n durationMs: s.durationMs,\n reason: s.reason,\n code: s.code,\n })),\n sensors: obs.sensors.map((s) => ({\n name: s.name,\n allowed: s.allowed,\n riskScore: s.riskScore,\n durationMs: s.durationMs,\n reasons: s.reasons,\n code: s.code,\n })),\n };\n\n return stableJsonStringify(obj);\n}\n\n/**\n * SHA-256 hash of the canonical observation payload.\n */\nexport function hashObservation(obs: AxisObservation): string {\n const canonical = canonicalizeObservation(obs);\n return createHash('sha256').update(canonical).digest('hex');\n}\n\n/**\n * Build an unsigned witness from a finalized observation.\n *\n * Returns `null` if the observation has not been finalized\n * (no `decision` or `endMs`).\n *\n * The caller (backend WitnessBuilder) adds `kid`, `sig`, `alg`\n * using its keyring.\n */\nexport function buildUnsignedWitness(\n obs: AxisObservation,\n): UnsignedObservationWitness | null {\n if (!obs.decision || !obs.endMs) {\n return null;\n }\n\n return {\n v: 1,\n observationId: obs.id,\n payloadHash: hashObservation(obs),\n sealedAt: Date.now(),\n summary: {\n intent: obs.intent,\n actorId: obs.actorId,\n decision: obs.decision,\n statusCode: obs.statusCode,\n durationMs: obs.durationMs,\n sensorCount: obs.sensors.length,\n stageCount: obs.stages.length,\n },\n };\n}\n","/**\n * Observer Truth Scoring\n *\n * Extends the AxisObservation model with truth verification:\n * - Expected vs actual outcome comparison\n * - Truth status classification\n * - Anomaly detection\n * - Deed confirmation\n *\n * This transforms the Observer from a \"logger\" into a \"verifier\" —\n * the moment where execution becomes witnessed truth.\n */\n\nimport type { AxisObservation, ObservationStage } from '../axis-observation';\n\n// ────────────────────────────────────────────────────────────────────────────\n// Truth Status\n// ────────────────────────────────────────────────────────────────────────────\n\nexport type TruthStatus =\n | 'confirmed' // Execution matched expected outcome exactly\n | 'partial' // Some expectations met, some could not be verified\n | 'uncertain' // Unable to determine correctness\n | 'failed' // Execution produced wrong or error result\n | 'disputed'; // Result contradicts expected state\n\n// ────────────────────────────────────────────────────────────────────────────\n// Expected Outcome\n// ────────────────────────────────────────────────────────────────────────────\n\nexport interface ExpectedOutcome {\n /** Expected final decision */\n decision?: 'ALLOW' | 'DENY';\n /** Expected effect label from handler */\n effect?: string;\n /** Expected status code */\n statusCode?: number;\n /** Whether the handler should succeed */\n ok?: boolean;\n /** Expected state changes (key-value) */\n stateChanges?: Record<string, unknown>;\n /** Maximum acceptable duration in ms */\n maxDurationMs?: number;\n /** Minimum required sensor count */\n minSensorsPassed?: number;\n /** custom assertions: field path → expected value */\n assertions?: Record<string, unknown>;\n}\n\n// ────────────────────────────────────────────────────────────────────────────\n// Anomaly\n// ────────────────────────────────────────────────────────────────────────────\n\nexport type AnomalyLevel = 'info' | 'warning' | 'critical';\n\nexport interface Anomaly {\n code: string;\n level: AnomalyLevel;\n message: string;\n field?: string;\n expected?: unknown;\n actual?: unknown;\n}\n\n// ────────────────────────────────────────────────────────────────────────────\n// Truth Verdict\n// ────────────────────────────────────────────────────────────────────────────\n\nexport interface TruthVerdict {\n /** Overall truth status */\n status: TruthStatus;\n /** Confidence score 0.0 – 1.0 */\n confidence: number;\n /** Detected anomalies */\n anomalies: Anomaly[];\n /** Number of checks that passed */\n passedChecks: number;\n /** Total number of checks performed */\n totalChecks: number;\n /** Timestamp of verdict */\n verifiedAt: number;\n /** Whether this observation constitutes a confirmed deed */\n isDeed: boolean;\n}\n\n// ────────────────────────────────────────────────────────────────────────────\n// Scoring Logic\n// ────────────────────────────────────────────────────────────────────────────\n\n/**\n * Score an observation against an expected outcome.\n * If no expectedOutcome is provided, performs structural verification only.\n */\nexport function scoreTruth(\n obs: AxisObservation,\n expected?: ExpectedOutcome,\n): TruthVerdict {\n const anomalies: Anomaly[] = [];\n let passedChecks = 0;\n let totalChecks = 0;\n\n // ── Structural checks (always run) ──\n\n // 1. Observation must be finalized\n totalChecks++;\n if (obs.endMs && obs.decision) {\n passedChecks++;\n } else {\n anomalies.push({\n code: 'OBS_NOT_FINALIZED',\n level: 'critical',\n message: 'Observation was not finalized',\n });\n }\n\n // 2. Must have at least one stage\n totalChecks++;\n if (obs.stages.length > 0) {\n passedChecks++;\n } else {\n anomalies.push({\n code: 'OBS_NO_STAGES',\n level: 'warning',\n message: 'Observation has no execution stages',\n });\n }\n\n // 3. No failed stages (unless decision is DENY)\n totalChecks++;\n const failedStages = obs.stages.filter((s) => s.status === 'fail');\n if (failedStages.length === 0 || obs.decision === 'DENY') {\n passedChecks++;\n } else {\n for (const stage of failedStages) {\n anomalies.push({\n code: 'STAGE_FAILED',\n level: 'warning',\n message: `Stage '${stage.name}' failed: ${stage.reason ?? 'unknown'}`,\n field: `stages.${stage.name}`,\n });\n }\n }\n\n // 4. All sensors should have valid timing\n totalChecks++;\n const invalidSensors = obs.sensors.filter((s) => s.durationMs < 0);\n if (invalidSensors.length === 0) {\n passedChecks++;\n } else {\n anomalies.push({\n code: 'SENSOR_INVALID_TIMING',\n level: 'warning',\n message: `${invalidSensors.length} sensor(s) have negative duration`,\n });\n }\n\n // 5. Duration sanity\n totalChecks++;\n if (obs.durationMs !== undefined && obs.durationMs >= 0 && obs.durationMs < 300_000) {\n passedChecks++;\n } else {\n anomalies.push({\n code: 'OBS_DURATION_ANOMALY',\n level: 'warning',\n message: `Observation duration ${obs.durationMs}ms is suspicious`,\n actual: obs.durationMs,\n });\n }\n\n // ── Expected outcome checks (if provided) ──\n\n if (expected) {\n // Decision match\n if (expected.decision !== undefined) {\n totalChecks++;\n if (obs.decision === expected.decision) {\n passedChecks++;\n } else {\n anomalies.push({\n code: 'DECISION_MISMATCH',\n level: 'critical',\n message: `Expected decision '${expected.decision}', got '${obs.decision}'`,\n field: 'decision',\n expected: expected.decision,\n actual: obs.decision,\n });\n }\n }\n\n // Status code match\n if (expected.statusCode !== undefined) {\n totalChecks++;\n if (obs.statusCode === expected.statusCode) {\n passedChecks++;\n } else {\n anomalies.push({\n code: 'STATUS_MISMATCH',\n level: 'warning',\n message: `Expected status ${expected.statusCode}, got ${obs.statusCode}`,\n field: 'statusCode',\n expected: expected.statusCode,\n actual: obs.statusCode,\n });\n }\n }\n\n // Effect match\n if (expected.effect !== undefined) {\n totalChecks++;\n if (obs.resultCode === expected.effect || obs.facts?.effect === expected.effect) {\n passedChecks++;\n } else {\n anomalies.push({\n code: 'EFFECT_MISMATCH',\n level: 'warning',\n message: `Expected effect '${expected.effect}', got '${obs.resultCode}'`,\n field: 'resultCode',\n expected: expected.effect,\n actual: obs.resultCode,\n });\n }\n }\n\n // Max duration\n if (expected.maxDurationMs !== undefined) {\n totalChecks++;\n if (obs.durationMs !== undefined && obs.durationMs <= expected.maxDurationMs) {\n passedChecks++;\n } else {\n anomalies.push({\n code: 'DURATION_EXCEEDED',\n level: 'warning',\n message: `Execution took ${obs.durationMs}ms, max allowed ${expected.maxDurationMs}ms`,\n field: 'durationMs',\n expected: expected.maxDurationMs,\n actual: obs.durationMs,\n });\n }\n }\n\n // Min sensors passed\n if (expected.minSensorsPassed !== undefined) {\n totalChecks++;\n const passed = obs.sensors.filter((s) => s.allowed).length;\n if (passed >= expected.minSensorsPassed) {\n passedChecks++;\n } else {\n anomalies.push({\n code: 'INSUFFICIENT_SENSORS',\n level: 'warning',\n message: `Only ${passed} sensors passed, minimum required ${expected.minSensorsPassed}`,\n field: 'sensors',\n expected: expected.minSensorsPassed,\n actual: passed,\n });\n }\n }\n\n // Custom assertions against facts\n if (expected.assertions) {\n for (const [key, expectedValue] of Object.entries(expected.assertions)) {\n totalChecks++;\n const actualValue = obs.facts[key];\n if (deepEqual(actualValue, expectedValue)) {\n passedChecks++;\n } else {\n anomalies.push({\n code: 'ASSERTION_FAILED',\n level: 'warning',\n message: `Assertion failed for facts.${key}`,\n field: `facts.${key}`,\n expected: expectedValue,\n actual: actualValue,\n });\n }\n }\n }\n }\n\n // ── Compute verdict ──\n\n const confidence = totalChecks > 0 ? passedChecks / totalChecks : 0;\n const hasCritical = anomalies.some((a) => a.level === 'critical');\n const status = computeTruthStatus(confidence, hasCritical, anomalies.length);\n const isDeed = status === 'confirmed' || (status === 'partial' && !hasCritical);\n\n return {\n status,\n confidence,\n anomalies,\n passedChecks,\n totalChecks,\n verifiedAt: Date.now(),\n isDeed,\n };\n}\n\nfunction computeTruthStatus(\n confidence: number,\n hasCritical: boolean,\n anomalyCount: number,\n): TruthStatus {\n if (hasCritical) return 'failed';\n if (confidence === 1.0) return 'confirmed';\n if (confidence >= 0.8) return 'partial';\n if (confidence >= 0.5) return 'uncertain';\n return 'disputed';\n}\n\n// ────────────────────────────────────────────────────────────────────────────\n// Attach truth to observation\n// ────────────────────────────────────────────────────────────────────────────\n\nexport interface ObservedDeed {\n observation: AxisObservation;\n verdict: TruthVerdict;\n}\n\n/**\n * Verify an observation and produce an ObservedDeed.\n * This is the moment where execution becomes accountable reality.\n */\nexport function verifyObservation(\n obs: AxisObservation,\n expected?: ExpectedOutcome,\n): ObservedDeed {\n const verdict = scoreTruth(obs, expected);\n return { observation: obs, verdict };\n}\n\n// ────────────────────────────────────────────────────────────────────────────\n// Helpers\n// ────────────────────────────────────────────────────────────────────────────\n\nfunction deepEqual(a: unknown, b: unknown): boolean {\n if (a === b) return true;\n if (a === null || b === null) return false;\n if (typeof a !== typeof b) return false;\n if (typeof a !== 'object') return String(a) === String(b);\n\n if (Array.isArray(a) && Array.isArray(b)) {\n if (a.length !== b.length) return false;\n return a.every((v, i) => deepEqual(v, b[i]));\n }\n\n if (Array.isArray(a) !== Array.isArray(b)) return false;\n\n const aKeys = Object.keys(a as Record<string, unknown>);\n const bKeys = Object.keys(b as Record<string, unknown>);\n if (aKeys.length !== bKeys.length) return false;\n\n return aKeys.every((key) =>\n deepEqual(\n (a as Record<string, unknown>)[key],\n (b as Record<string, unknown>)[key],\n ),\n );\n}\n","import { MAX_BODY_LEN } from '../../core/constants';\n\n/**\n * Minimal request context needed by ResponseObserver.\n * Compatible with the full AxisContext from schemas.\n */\nexport interface ResponseObserverContext {\n actorId: string;\n intent: string;\n}\n\n/**\n * Response contract that the observer validates.\n */\nexport interface ResponseContract {\n /** Whether the handler reported success */\n ok: boolean;\n /** The effect label returned by the handler */\n effect: string;\n /** Response body bytes (may be undefined for error responses) */\n body?: Uint8Array;\n /** Response TLV headers */\n headers?: Map<number, Uint8Array>;\n}\n\n/**\n * Result of observer validation.\n */\nexport interface ObserverVerdict {\n /** true = response passes all checks */\n passed: boolean;\n /** Machine-readable code if rejected */\n code?: string;\n /** Human-readable reason if rejected */\n reason?: string;\n}\n\n/** TLV tags that must never appear in a response (ACTOR_ID, PROOF_TYPE, PROOF_REF). */\nconst SENSITIVE_RESPONSE_TAGS = [4, 5, 6];\n\n/**\n * ResponseObserver — post-execution policy gate (protocol layer).\n *\n * Validates that:\n * 1. Effect is a valid non-empty string.\n * 2. Mandatory response body exists for successful results.\n * 3. No sensitive data leaks in response headers.\n * 4. Response size is within protocol limits.\n * 5. Effect does not expose internal error details.\n *\n * This is a defense-in-depth layer — primary correctness comes from\n * deterministic execution, signature verification, and nonce/replay controls.\n *\n * On failure, the engine returns a safe error instead of the original response.\n */\nexport function verifyResponse(\n ctx: ResponseObserverContext,\n response: ResponseContract,\n): ObserverVerdict {\n // 1. Effect must be a non-empty string\n if (!response.effect || typeof response.effect !== 'string') {\n return {\n passed: false,\n code: 'OBSERVER_INVALID_EFFECT',\n reason: 'Response effect is missing or invalid',\n };\n }\n\n // 2. Successful responses must have a body\n if (response.ok && (!response.body || response.body.length === 0)) {\n return {\n passed: false,\n code: 'OBSERVER_EMPTY_BODY',\n reason: 'Successful response must contain a body',\n };\n }\n\n // 3. Response body must not exceed protocol limits\n if (response.body && response.body.length > MAX_BODY_LEN) {\n return {\n passed: false,\n code: 'OBSERVER_BODY_OVERFLOW',\n reason: `Response body exceeds ${MAX_BODY_LEN} bytes`,\n };\n }\n\n // 4. Verify no sensitive TLV tags leak in response headers\n if (response.headers) {\n for (const tag of SENSITIVE_RESPONSE_TAGS) {\n if (response.headers.has(tag)) {\n return {\n passed: false,\n code: 'OBSERVER_DATA_LEAK',\n reason: `Response must not contain sensitive TLV tag ${tag}`,\n };\n }\n }\n }\n\n // 5. Effect should not expose internal error details\n if (\n response.effect.includes('Error:') ||\n response.effect.includes('stack') ||\n response.effect.includes('at /')\n ) {\n return {\n passed: false,\n code: 'OBSERVER_INFO_LEAK',\n reason: 'Response effect may contain internal error details',\n };\n }\n\n return { passed: true };\n}\n\n/**\n * Function type and value alias for the response observer validator.\n */\nexport type ResponseObserver = (\n ctx: ResponseObserverContext,\n response: ResponseContract,\n) => ObserverVerdict;\n\nexport const ResponseObserver: ResponseObserver = verifyResponse;\n","export { encodeVarint, decodeVarint, varintLength } from '@nextera.one/axis-protocol';\n","import * as z from 'zod';\nimport type { AxisFrame as ProtocolAxisFrame } from '@nextera.one/axis-protocol';\n\nexport {\n decodeFrame,\n encodeFrame,\n getSignTarget,\n} from '@nextera.one/axis-protocol';\nexport type { AxisFrame, AxisBinaryFrame } from '@nextera.one/axis-protocol';\n\n/**\n * AxisFrame Schema\n *\n * Defines the logical structure of an AXIS frame using Zod for runtime validation.\n * This is used for internal processing after the low-level binary parsing is complete.\n */\nexport const AxisFrameZ: z.ZodType<ProtocolAxisFrame> = z.object({\n /** Flag bits for protocol control (e.g., encryption, compression) */\n flags: z.number().int().nonnegative(),\n /** A map of TLV headers where key=Tag and value=BinaryData */\n headers: z.map(\n z.number(),\n z.custom<Uint8Array>((v) => v instanceof Uint8Array),\n ),\n /** The main payload of the frame */\n body: z.custom<Uint8Array>((v) => v instanceof Uint8Array),\n /** The cryptographic signature covering the frame (except the signature itself) */\n sig: z.custom<Uint8Array>((v) => v instanceof Uint8Array),\n});\n","import * as crypto from 'crypto';\n\nimport { AxisFrame, getSignTarget } from './axis-bin';\n\n/**\n * Signature utilities for AXIS binary frames\n * Supports Ed25519 signature generation and verification\n */\n\n/**\n * Computes the canonical payload for signing an AXIS frame.\n * The signature covers all bytes of the encoded frame EXCEPT the signature field itself.\n *\n * @param {AxisFrame} frame - The frame to prepare for signing\n * @returns {Buffer} The serialized canonical bytes for the signature algorithm\n */\nexport function computeSignaturePayload(frame: AxisFrame): Buffer {\n return Buffer.from(getSignTarget(frame));\n}\n\n/**\n * Signs an AXIS frame using the Ed25519 algorithm.\n * Automatically handles both raw 32-byte seeds and pkcs8 DER-encoded private keys.\n *\n * @param {AxisFrame} frame - The frame to sign\n * @param {Buffer} privateKey - Ed25519 private key (32-byte raw OR pkcs8 DER)\n * @returns {Buffer} The 64-byte Ed25519 signature\n * @throws {Error} If key format is invalid or signing fail\n */\nexport function signFrame(frame: AxisFrame, privateKey: Buffer): Buffer {\n const payload = computeSignaturePayload(frame);\n\n let keyObject: crypto.KeyObject;\n\n // Check if key is raw 32-byte seed or DER-encoded\n if (privateKey.length === 32) {\n // Raw seed - wrap in pkcs8 DER format\n // pkcs8 prefix for Ed25519: 0x302e020100300506032b657004220420\n const pkcs8Prefix = Buffer.from([\n 0x30, 0x2e, 0x02, 0x01, 0x00, 0x30, 0x05, 0x06, 0x03, 0x2b, 0x65, 0x70,\n 0x04, 0x22, 0x04, 0x20,\n ]);\n const pkcs8Key = Buffer.concat([pkcs8Prefix, privateKey]);\n\n keyObject = crypto.createPrivateKey({\n key: pkcs8Key,\n format: 'der',\n type: 'pkcs8',\n });\n } else {\n // Assume already DER-encoded pkcs8\n keyObject = crypto.createPrivateKey({\n key: privateKey,\n format: 'der',\n type: 'pkcs8',\n });\n }\n\n const signature = crypto.sign(null, payload, keyObject);\n\n if (signature.length !== 64) {\n throw new Error('Ed25519 signature must be 64 bytes');\n }\n\n return signature;\n}\n\n/**\n * Verifies an Ed25519 signature on an AXIS frame.\n * Automatically handles both raw 32-byte public keys and spki DER-encoded public keys.\n *\n * @param {AxisFrame} frame - The frame containing the signature to verify\n * @param {Buffer} publicKey - Ed25519 public key (32-byte raw OR spki DER)\n * @returns {boolean} True if the signature is cryptographically valid\n * @throws {Error} If signature length is invalid\n */\nexport function verifyFrameSignature(\n frame: AxisFrame,\n publicKey: Buffer,\n): boolean {\n if (frame.sig.length === 0) {\n return false; // No signature\n }\n\n if (frame.sig.length !== 64) {\n throw new Error('Ed25519 signature must be 64 bytes');\n }\n\n const payload = computeSignaturePayload(frame);\n\n try {\n let keyObject: crypto.KeyObject;\n\n // Check if key is raw 32-byte or DER-encoded\n if (publicKey.length === 32) {\n // Raw key - wrap in spki DER format\n // spki prefix for Ed25519: 0x302a300506032b6570032100\n const spkiPrefix = Buffer.from([\n 0x30, 0x2a, 0x30, 0x05, 0x06, 0x03, 0x2b, 0x65, 0x70, 0x03, 0x21, 0x00,\n ]);\n const spkiKey = Buffer.concat([spkiPrefix, publicKey]);\n\n keyObject = crypto.createPublicKey({\n key: spkiKey,\n format: 'der',\n type: 'spki',\n });\n } else {\n // Assume already DER-encoded spki\n keyObject = crypto.createPublicKey({\n key: publicKey,\n format: 'der',\n type: 'spki',\n });\n }\n\n const valid = crypto.verify(\n null,\n payload,\n keyObject,\n Buffer.from(frame.sig),\n );\n return valid;\n } catch (error) {\n return false;\n }\n}\n\n/**\n * Generates a new Ed25519 key pair for use with the AXIS protocol.\n * Returns keys in canonical DER format (pkcs8 for private, spki for public).\n *\n * @returns {Object} An object containing the privateKey and publicKey as Buffers\n */\nexport function generateEd25519KeyPair(): {\n privateKey: Buffer;\n publicKey: Buffer;\n} {\n const { privateKey, publicKey } = crypto.generateKeyPairSync('ed25519');\n\n return {\n privateKey: privateKey.export({ type: 'pkcs8', format: 'der' }) as Buffer,\n publicKey: publicKey.export({ type: 'spki', format: 'der' }) as Buffer,\n };\n}\n\n/**\n * Computes a standard SHA-256 hash of the provided data.\n *\n * @param {Buffer | Uint8Array} data - The input data to hash\n * @returns {Buffer} The 32-byte SHA-256 digest\n */\nexport function sha256(data: Buffer | Uint8Array): Buffer {\n return crypto.createHash('sha256').update(data).digest();\n}\n\n/**\n * Computes a hash for an AXIS receipt, optionally chaining it to a previous hash.\n * This is used for generating an immutable transaction chain.\n *\n * @param {Buffer | Uint8Array} receiptBytes - The canonical binary representation of the receipt\n * @param {Buffer | Uint8Array} [prevHash] - The hash of the previous receipt in the chain\n * @returns {Buffer} The 32-byte SHA-256 hash of the receipt (and link)\n */\nexport function computeReceiptHash(\n receiptBytes: Buffer | Uint8Array,\n prevHash?: Buffer | Uint8Array,\n): Buffer {\n const hasher = crypto.createHash('sha256');\n hasher.update(receiptBytes);\n\n if (prevHash && prevHash.length > 0) {\n hasher.update(prevHash);\n }\n\n return hasher.digest();\n}\n","// ats1.constants.ts\n\n// Header TLV tags (hdr TLVs)\nexport const ATS1_HDR = {\n INTENT_ID: 1, // uvarint\n ACTOR_KEY_ID: 2, // bytes (key fingerprint / credentialId hash)\n CAPSULE_ID: 3, // bytes or varint\n NONCE: 4, // 16 bytes\n TS_MS: 5, // u64be (8)\n SCHEMA_ID: 6, // uvarint\n BODY_HASH: 7, // 32 bytes (sha256)\n TRACE_ID: 8, // 16 bytes\n} as const;\n\n// Schema IDs (body TLVs meaning depends on schema)\nexport const ATS1_SCHEMA = {\n PASSKEY_LOGIN_OPTIONS_REQ: 2001,\n PASSKEY_LOGIN_OPTIONS_RES: 2002,\n\n PASSKEY_LOGIN_VERIFY_REQ: 2011,\n PASSKEY_LOGIN_VERIFY_RES: 2012,\n\n PASSKEY_REGISTER_OPTIONS_REQ: 2021,\n PASSKEY_REGISTER_OPTIONS_RES: 2022,\n\n PASSKEY_REGISTER_VERIFY_REQ: 2031,\n PASSKEY_REGISTER_VERIFY_RES: 2032,\n} as const;\n","/* eslint-disable @typescript-eslint/no-explicit-any */\n/**\n * ATS1 (AXIS-TLV Schema v1) — TypeScript Encoder/Decoder\n * - Canonical TLV: [TAG(uvarint)][LEN(uvarint)][VALUE(bytes)]\n * - Canonical ordering: ascending TAG\n * - Minimal varint encoding enforced in decoder\n * - Strict schema validation (unknown tags rejected by default)\n * - Nested TLV streams supported\n *\n * Node.js: uses crypto for SHA-256\n */\n\nimport { createHash, randomBytes } from 'crypto';\n\n// -----------------------------\n// Types\n// -----------------------------\n\nexport type Ats1FieldType = 'bytes' | 'utf8' | 'uvarint' | 'u64be' | 'nested';\n\nexport type Ats1FieldDescriptor = {\n tag: number;\n name: string;\n type: Ats1FieldType;\n required?: boolean;\n repeated?: boolean;\n nestedSchema?: Ats1SchemaDescriptor; // required if type === 'nested'\n maxLen?: number; // optional per-field limit (bytes length)\n};\n\nexport type Ats1SchemaDescriptor = {\n schemaId: number;\n name: string;\n strict: boolean; // if true: reject unknown tags\n maxNestingDepth: number; // e.g. 4\n maxBodyBytes?: number; // optional overall body limit\n fields: Ats1FieldDescriptor[];\n};\n\nexport type DecodedTlv = { tag: number; value: Buffer };\n\nexport type DecodedTlvMap = Map<number, Buffer[]>; // tag -> list of values\n\nexport type SensorInputLike = {\n hdrTLVs: DecodedTlvMap;\n bodyTLVs: DecodedTlvMap;\n schemaId: number;\n intentId: number;\n};\n\n// -----------------------------\n// Limits (sane defaults)\n// -----------------------------\n\nexport type Ats1Limits = {\n maxVarintBytes: number; // e.g. 10 for u64\n maxTlvCount: number; // e.g. 512\n maxValueBytes: number; // e.g. 1MB\n maxNestingDepth: number; // e.g. 4\n};\n\nexport const DEFAULT_LIMITS: Ats1Limits = {\n maxVarintBytes: 10,\n maxTlvCount: 512,\n maxValueBytes: 1_048_576, // 1 MiB\n maxNestingDepth: 4,\n};\n\n// -----------------------------\n// Varint (unsigned LEB128)\n// -----------------------------\n\nexport function encodeUVarint(n: number | bigint): Buffer {\n let x = typeof n === 'bigint' ? n : BigInt(n);\n if (x < 0n) throw new Error('encodeUVarint: negative not allowed');\n\n const out: number[] = [];\n while (x >= 0x80n) {\n out.push(Number((x & 0x7fn) | 0x80n));\n x >>= 7n;\n }\n out.push(Number(x));\n return Buffer.from(out);\n}\n\nexport function decodeUVarint(\n buf: Buffer,\n offset: number,\n limits: Ats1Limits = DEFAULT_LIMITS,\n): { value: bigint; offset: number; bytesRead: number } {\n let x = 0n;\n let shift = 0n;\n const start = offset;\n\n for (let i = 0; i < limits.maxVarintBytes; i++) {\n if (offset >= buf.length) throw new Error('decodeUVarint: truncated');\n const b = buf[offset++];\n x |= BigInt(b & 0x7f) << shift;\n\n if ((b & 0x80) === 0) {\n const bytesRead = offset - start;\n\n // Minimal-encoding check:\n // Re-encode and compare exact bytes.\n const re = encodeUVarint(x);\n const original = buf.subarray(start, offset);\n if (!re.equals(original))\n throw new Error('decodeUVarint: non-minimal varint');\n\n return { value: x, offset, bytesRead };\n }\n\n shift += 7n;\n }\n\n throw new Error('decodeUVarint: too long');\n}\n\n// -----------------------------\n// Primitive encoders/decoders\n// -----------------------------\n\nexport function encodeU64BE(n: bigint): Buffer {\n if (n < 0n) throw new Error('encodeU64BE: negative not allowed');\n const b = Buffer.alloc(8);\n b.writeBigUInt64BE(n, 0);\n return b;\n}\n\nexport function decodeU64BE(buf: Buffer): bigint {\n if (buf.length !== 8) throw new Error('decodeU64BE: length must be 8');\n return buf.readBigUInt64BE(0);\n}\n\nexport function sha256(data: Buffer): Buffer {\n return createHash('sha256').update(data).digest();\n}\n\n// -----------------------------\n// TLV encode/decode\n// -----------------------------\n\nexport function encodeTLV(tag: number, value: Buffer): Buffer {\n if (!Number.isInteger(tag) || tag <= 0)\n throw new Error('encodeTLV: tag must be positive int');\n const t = encodeUVarint(tag);\n const l = encodeUVarint(value.length);\n return Buffer.concat([t, l, value]);\n}\n\nexport function encodeTLVStreamCanonical(entries: DecodedTlv[]): Buffer {\n // Canonical sort ascending tag\n const sorted = [...entries].sort((a, b) => a.tag - b.tag);\n\n // Duplicate tags are allowed only if the schema says repeated.\n // This function does not enforce schema; caller should.\n const parts: Buffer[] = [];\n for (const e of sorted) parts.push(encodeTLV(e.tag, e.value));\n return Buffer.concat(parts);\n}\n\nexport function decodeTLVStream(\n stream: Buffer,\n limits: Ats1Limits = DEFAULT_LIMITS,\n): DecodedTlv[] {\n const out: DecodedTlv[] = [];\n let off = 0;\n\n while (off < stream.length) {\n if (out.length >= limits.maxTlvCount)\n throw new Error('decodeTLVStream: too many TLVs');\n\n const tagRes = decodeUVarint(stream, off, limits);\n const tag = Number(tagRes.value);\n off = tagRes.offset;\n\n const lenRes = decodeUVarint(stream, off, limits);\n const len = Number(lenRes.value);\n off = lenRes.offset;\n\n if (len < 0) throw new Error('decodeTLVStream: negative length');\n if (len > limits.maxValueBytes)\n throw new Error('decodeTLVStream: value too large');\n if (off + len > stream.length)\n throw new Error('decodeTLVStream: truncated value');\n\n const value = stream.subarray(off, off + len);\n off += len;\n\n out.push({ tag, value: Buffer.from(value) });\n }\n\n // Canonical check: must be sorted ascending tag.\n for (let i = 1; i < out.length; i++) {\n if (out[i].tag < out[i - 1].tag)\n throw new Error('decodeTLVStream: non-canonical tag order');\n }\n\n return out;\n}\n\nexport function tlvsToMap(entries: DecodedTlv[]): DecodedTlvMap {\n const m: DecodedTlvMap = new Map();\n for (const e of entries) {\n const arr = m.get(e.tag) ?? [];\n arr.push(e.value);\n m.set(e.tag, arr);\n }\n return m;\n}\n\n// -----------------------------\n// Schema validation + object \\u2194 TLV mapping\n// -----------------------------\n\ntype LogicalBody = { schemaId: number; fields: Record<string, any> };\n\nexport function validateTLVsAgainstSchema(\n schema: Ats1SchemaDescriptor,\n tlvs: DecodedTlv[],\n depth = 0,\n limits: Ats1Limits = DEFAULT_LIMITS,\n): void {\n if (depth > Math.min(schema.maxNestingDepth, limits.maxNestingDepth)) {\n throw new Error('validateTLVsAgainstSchema: nesting depth exceeded');\n }\n\n if (schema.maxBodyBytes && tlvsBytes(tlvs) > schema.maxBodyBytes) {\n throw new Error('validateTLVsAgainstSchema: body too large');\n }\n\n const byTag = new Map<number, DecodedTlv[]>();\n for (const t of tlvs) {\n if (!byTag.has(t.tag)) byTag.set(t.tag, []);\n byTag.get(t.tag)!.push(t);\n }\n\n const fieldByTag = new Map(schema.fields.map((f) => [f.tag, f] as const));\n\n // Unknown tags\n if (schema.strict) {\n for (const tag of byTag.keys()) {\n if (!fieldByTag.has(tag))\n throw new Error(`validateTLVsAgainstSchema: unknown tag ${tag}`);\n }\n }\n\n // Required fields & repetition rules\n for (const f of schema.fields) {\n const vals = byTag.get(f.tag) ?? [];\n if (f.required && vals.length === 0)\n throw new Error(`validateTLVsAgainstSchema: missing ${f.name}`);\n\n if (!f.repeated && vals.length > 1) {\n throw new Error(\n `validateTLVsAgainstSchema: duplicate tag not allowed for ${f.name}`,\n );\n }\n\n // Per-field max length\n if (typeof f.maxLen === 'number') {\n for (const v of vals) {\n if (v.value.length > f.maxLen)\n throw new Error(`validateTLVsAgainstSchema: ${f.name} too long`);\n }\n }\n\n // Type checks (lightweight)\n for (const v of vals) {\n switch (f.type) {\n case 'u64be':\n if (v.value.length !== 8)\n throw new Error(\n `validateTLVsAgainstSchema: ${f.name} u64be must be 8 bytes`,\n );\n break;\n case 'nested': {\n if (!f.nestedSchema)\n throw new Error(\n `validateTLVsAgainstSchema: ${f.name} missing nestedSchema`,\n );\n const nestedTlvs = decodeTLVStream(v.value, limits);\n validateTLVsAgainstSchema(\n f.nestedSchema,\n nestedTlvs,\n depth + 1,\n limits,\n );\n break;\n }\n default:\n // bytes/utf8/uvarint are accepted structurally; deeper validation can be added if you want.\n break;\n }\n }\n }\n}\n\nfunction tlvsBytes(tlvs: DecodedTlv[]): number {\n // approximate encoded size if re-encoded\n let n = 0;\n for (const t of tlvs) {\n n +=\n encodeUVarint(t.tag).length +\n encodeUVarint(t.value.length).length +\n t.value.length;\n }\n return n;\n}\n\nexport function logicalBodyToTLVs(\n schema: Ats1SchemaDescriptor,\n body: LogicalBody,\n limits: Ats1Limits = DEFAULT_LIMITS,\n): DecodedTlv[] {\n if (body.schemaId !== schema.schemaId)\n throw new Error('logicalBodyToTLVs: schemaId mismatch');\n\n const fieldsByName = new Map(schema.fields.map((f) => [f.name, f] as const));\n const tlvs: DecodedTlv[] = [];\n\n for (const [name, val] of Object.entries(body.fields ?? {})) {\n const f = fieldsByName.get(name);\n if (!f) {\n if (schema.strict)\n throw new Error(`logicalBodyToTLVs: unknown field ${name}`);\n continue;\n }\n\n const pushOne = (v: any) => {\n const valueBuf = encodeFieldValue(f, v, limits);\n if (valueBuf.length > limits.maxValueBytes)\n throw new Error('logicalBodyToTLVs: value too large');\n tlvs.push({ tag: f.tag, value: valueBuf });\n };\n\n if (f.repeated) {\n if (!Array.isArray(val))\n throw new Error(\n `logicalBodyToTLVs: repeated field ${name} must be array`,\n );\n for (const item of val) pushOne(item);\n } else {\n pushOne(val);\n }\n }\n\n // Validate required + duplicates + nested schema correctness\n // Validation also enforces canonical ordering check only after encoding/decoding;\n // here we validate semantics.\n validateTLVsAgainstSchema(schema, tlvs, 0, limits);\n\n // NOTE: canonical ordering will be applied in encodeTLVStreamCanonical()\n return tlvs;\n}\n\nfunction encodeFieldValue(\n f: Ats1FieldDescriptor,\n val: any,\n limits: Ats1Limits,\n): Buffer {\n switch (f.type) {\n case 'bytes':\n if (Buffer.isBuffer(val)) return Buffer.from(val);\n if (val instanceof Uint8Array) return Buffer.from(val);\n throw new Error(`encodeFieldValue: ${f.name} expects bytes`);\n case 'utf8':\n if (typeof val !== 'string')\n throw new Error(`encodeFieldValue: ${f.name} expects string`);\n return Buffer.from(val, 'utf8');\n case 'uvarint':\n if (typeof val !== 'number' && typeof val !== 'bigint')\n throw new Error(`encodeFieldValue: ${f.name} expects number/bigint`);\n return encodeUVarint(val);\n case 'u64be':\n if (typeof val !== 'bigint')\n throw new Error(`encodeFieldValue: ${f.name} expects bigint`);\n return encodeU64BE(val);\n case 'nested': {\n if (!f.nestedSchema)\n throw new Error(`encodeFieldValue: ${f.name} missing nestedSchema`);\n // Accept nested logical object in the form { fields: {...} } or direct record\n const nestedFields =\n val && typeof val === 'object' && 'fields' in val\n ? (val as any).fields\n : val;\n if (!nestedFields || typeof nestedFields !== 'object')\n throw new Error(`encodeFieldValue: ${f.name} expects object`);\n const nestedBody: LogicalBody = {\n schemaId: f.nestedSchema.schemaId,\n fields: nestedFields,\n };\n const nestedTlvs = logicalBodyToTLVs(f.nestedSchema, nestedBody, limits);\n const nestedBytes = encodeTLVStreamCanonical(nestedTlvs);\n // Re-parse to ensure canonical encoding would pass, and validate\n const re = decodeTLVStream(nestedBytes, limits);\n validateTLVsAgainstSchema(f.nestedSchema, re, 1, limits);\n return nestedBytes;\n }\n default:\n throw new Error(`encodeFieldValue: unsupported type ${(f as any).type}`);\n }\n}\n\nexport function tlvsToLogicalBody(\n schema: Ats1SchemaDescriptor,\n tlvs: DecodedTlv[],\n limits: Ats1Limits = DEFAULT_LIMITS,\n): LogicalBody {\n // TLVs must already be decoded and canonical-checked\n validateTLVsAgainstSchema(schema, tlvs, 0, limits);\n\n const fields: Record<string, any> = {};\n const fieldByTag = new Map(schema.fields.map((f) => [f.tag, f] as const));\n\n for (const t of tlvs) {\n const f = fieldByTag.get(t.tag);\n if (!f) {\n if (schema.strict)\n throw new Error(`tlvsToLogicalBody: unknown tag ${t.tag}`);\n continue;\n }\n\n const decoded = decodeFieldValue(f, t.value, limits);\n\n if (f.repeated) {\n if (!Array.isArray(fields[f.name])) fields[f.name] = [];\n fields[f.name].push(decoded);\n } else {\n fields[f.name] = decoded;\n }\n }\n\n return { schemaId: schema.schemaId, fields };\n}\n\nfunction decodeFieldValue(\n f: Ats1FieldDescriptor,\n value: Buffer,\n limits: Ats1Limits,\n): any {\n switch (f.type) {\n case 'bytes':\n return Buffer.from(value);\n case 'utf8':\n return value.toString('utf8');\n case 'uvarint': {\n const r = decodeUVarint(value, 0, limits);\n if (r.offset !== value.length)\n throw new Error(\n `decodeFieldValue: ${f.name} uvarint has trailing bytes`,\n );\n // return as number when safe, else bigint\n const asNum = Number(r.value);\n return Number.isSafeInteger(asNum) ? asNum : r.value;\n }\n case 'u64be':\n return decodeU64BE(value);\n case 'nested': {\n if (!f.nestedSchema)\n throw new Error(`decodeFieldValue: ${f.name} missing nestedSchema`);\n const nestedTlvs = decodeTLVStream(value, limits);\n // nested schema validation is called by validateTLVsAgainstSchema already,\n // but we decode again safely here.\n const nestedBody = tlvsToLogicalBody(f.nestedSchema, nestedTlvs, limits);\n return nestedBody.fields; // return the record by default\n }\n default:\n throw new Error(`decodeFieldValue: unsupported type ${(f as any).type}`);\n }\n}\n\n// -----------------------------\n// AXIS HDR tags (ATS1 header TLVs)\n// -----------------------------\n\nexport const HDR_TAGS = {\n intent_id: 1,\n actor_key_id: 2,\n capsule_id: 3,\n nonce: 4,\n ts_ms: 5,\n schema_id: 6,\n body_hash: 7,\n trace_id: 8,\n} as const;\n\nexport type AxisHeaderLogical = {\n intentId: number;\n actorKeyId: Uint8Array;\n capsuleId?: Uint8Array;\n nonce: Uint8Array; // 16 bytes\n tsMs: bigint; // ms\n schemaId: number;\n bodyHash: Uint8Array; // 32 bytes\n traceId?: Uint8Array; // 16 bytes\n version?: number; // optional\n headerHash?: Uint8Array; // 32 bytes\n headerTlvs?: DecodedTlv[]; // optional\n bodyTlvs?: DecodedTlv[]; // optional\n};\n\nexport type AxisLogicalRequest = {\n hdr: AxisHeaderLogical;\n body: LogicalBody;\n};\n\nexport function encodeAxisHeaderToTLVs(hdr: AxisHeaderLogical): DecodedTlv[] {\n if (hdr.nonce.byteLength !== 16)\n throw new Error('encodeAxisHeaderToTLVs: nonce must be 16 bytes');\n if (hdr.bodyHash.byteLength !== 32)\n throw new Error('encodeAxisHeaderToTLVs: bodyHash must be 32 bytes');\n if (hdr.traceId && hdr.traceId.byteLength !== 16)\n throw new Error('encodeAxisHeaderToTLVs: traceId must be 16 bytes');\n\n const tlvs: DecodedTlv[] = [\n { tag: HDR_TAGS.intent_id, value: encodeUVarint(hdr.intentId) },\n { tag: HDR_TAGS.actor_key_id, value: Buffer.from(hdr.actorKeyId) },\n { tag: HDR_TAGS.nonce, value: Buffer.from(hdr.nonce) },\n { tag: HDR_TAGS.ts_ms, value: encodeU64BE(hdr.tsMs) },\n { tag: HDR_TAGS.schema_id, value: encodeUVarint(hdr.schemaId) },\n { tag: HDR_TAGS.body_hash, value: Buffer.from(hdr.bodyHash) },\n ];\n\n if (hdr.capsuleId)\n tlvs.push({ tag: HDR_TAGS.capsule_id, value: Buffer.from(hdr.capsuleId) });\n if (hdr.traceId)\n tlvs.push({ tag: HDR_TAGS.trace_id, value: Buffer.from(hdr.traceId) });\n\n return tlvs;\n}\n\nexport function decodeAxisHeaderFromTLVs(\n hdrTlvs: DecodedTlv[],\n limits: Ats1Limits = DEFAULT_LIMITS,\n): AxisHeaderLogical {\n // hdr TLVs must be canonical-ordered (enforced by decodeTLVStream) and duplicates only if allowed.\n const m = tlvsToMap(hdrTlvs);\n\n const get1 = (tag: number) => {\n const arr = m.get(tag);\n if (!arr || arr.length !== 1)\n throw new Error(\n `decodeAxisHeaderFromTLVs: missing/dup header tag ${tag}`,\n );\n return arr[0];\n };\n const getOpt1 = (tag: number) => {\n const arr = m.get(tag);\n if (!arr) return undefined;\n if (arr.length !== 1)\n throw new Error(`decodeAxisHeaderFromTLVs: dup header tag ${tag}`);\n return arr[0];\n };\n\n const intentIdVar = decodeUVarint(get1(HDR_TAGS.intent_id), 0, limits);\n if (intentIdVar.offset !== get1(HDR_TAGS.intent_id).length)\n throw new Error('decodeAxisHeaderFromTLVs: intent_id trailing bytes');\n\n const schemaIdVar = decodeUVarint(get1(HDR_TAGS.schema_id), 0, limits);\n if (schemaIdVar.offset !== get1(HDR_TAGS.schema_id).length)\n throw new Error('decodeAxisHeaderFromTLVs: schema_id trailing bytes');\n\n const ts = decodeU64BE(get1(HDR_TAGS.ts_ms));\n\n const nonce = get1(HDR_TAGS.nonce);\n if (nonce.length !== 16)\n throw new Error('decodeAxisHeaderFromTLVs: nonce must be 16 bytes');\n\n const bodyHash = get1(HDR_TAGS.body_hash);\n if (bodyHash.length !== 32)\n throw new Error('decodeAxisHeaderFromTLVs: body_hash must be 32 bytes');\n\n const trace = getOpt1(HDR_TAGS.trace_id);\n if (trace && trace.length !== 16)\n throw new Error('decodeAxisHeaderFromTLVs: trace_id must be 16 bytes');\n\n return {\n intentId: Number(intentIdVar.value),\n actorKeyId: Buffer.from(get1(HDR_TAGS.actor_key_id)),\n capsuleId: getOpt1(HDR_TAGS.capsule_id)\n ? Buffer.from(getOpt1(HDR_TAGS.capsule_id)!)\n : undefined,\n nonce: Buffer.from(nonce),\n tsMs: ts,\n schemaId: Number(schemaIdVar.value),\n bodyHash: Buffer.from(bodyHash),\n traceId: trace ? Buffer.from(trace) : undefined,\n };\n}\n\n// -----------------------------\n// Encode/Decode AXIS request body + hdr with body_hash binding\n// -----------------------------\n\nexport function encodeAxisRequestBinary(\n schema: Ats1SchemaDescriptor,\n req: Omit<AxisLogicalRequest, 'hdr'> & {\n hdr: Omit<AxisHeaderLogical, 'bodyHash'>;\n },\n limits: Ats1Limits = DEFAULT_LIMITS,\n): { hdrBytes: Buffer; bodyBytes: Buffer; bodyHash: Buffer } {\n // 1) encode body TLVs\n const bodyTlvs = logicalBodyToTLVs(schema, req.body, limits);\n const bodyBytes = encodeTLVStreamCanonical(bodyTlvs);\n\n // 2) compute body hash\n const bodyHash = sha256(bodyBytes);\n\n // 3) encode hdr TLVs (with computed hash)\n const hdr: AxisHeaderLogical = {\n ...req.hdr,\n schemaId: schema.schemaId,\n bodyHash,\n };\n const hdrTlvs = encodeAxisHeaderToTLVs(hdr);\n const hdrBytes = encodeTLVStreamCanonical(hdrTlvs);\n\n return { hdrBytes, bodyBytes, bodyHash };\n}\n\nexport function decodeAxisRequestBinary(\n schema: Ats1SchemaDescriptor,\n hdrBytes: Buffer,\n bodyBytes: Buffer,\n limits: Ats1Limits = DEFAULT_LIMITS,\n): { hdr: AxisHeaderLogical; body: LogicalBody; sensorInput: SensorInputLike } {\n const hdrTlvs = decodeTLVStream(hdrBytes, limits);\n const bodyTlvs = decodeTLVStream(bodyBytes, limits);\n\n const hdr = decodeAxisHeaderFromTLVs(hdrTlvs, limits);\n\n // Schema binding check\n if (hdr.schemaId !== schema.schemaId)\n throw new Error('decodeAxisRequestBinary: schemaId mismatch');\n\n // body_hash check\n const bh = sha256(bodyBytes);\n if (!Buffer.from(hdr.bodyHash).equals(bh))\n throw new Error('decodeAxisRequestBinary: body_hash mismatch');\n\n // validate + decode body\n const body = tlvsToLogicalBody(schema, bodyTlvs, limits);\n\n const sensorInput: SensorInputLike = {\n hdrTLVs: tlvsToMap(hdrTlvs),\n bodyTLVs: tlvsToMap(bodyTlvs),\n schemaId: hdr.schemaId,\n intentId: hdr.intentId,\n };\n\n return { hdr, body, sensorInput };\n}\n\n// -----------------------------\n// Example Schemas\n// -----------------------------\n\nexport const Schema3100_DeviceContext: Ats1SchemaDescriptor = {\n schemaId: 3100,\n name: 'device.context',\n strict: true,\n maxNestingDepth: 4,\n fields: [\n { tag: 1, name: 'deviceId', type: 'bytes', required: true, maxLen: 128 },\n { tag: 2, name: 'os', type: 'utf8', required: true, maxLen: 64 },\n { tag: 3, name: 'hw', type: 'utf8', required: true, maxLen: 64 },\n ],\n};\n\nexport const Schema2001_PasskeyLoginOptionsReq: Ats1SchemaDescriptor = {\n schemaId: 2001,\n name: 'axis.auth.passkey.login.options.req',\n strict: true,\n maxNestingDepth: 4,\n fields: [\n { tag: 1, name: 'username', type: 'utf8', required: true, maxLen: 128 },\n ],\n};\n\nexport const Schema4001_LoginWithDeviceReq: Ats1SchemaDescriptor = {\n schemaId: 4001,\n name: 'axis.auth.login.with_device.req',\n strict: true,\n maxNestingDepth: 4,\n fields: [\n { tag: 1, name: 'username', type: 'utf8', required: true, maxLen: 128 },\n {\n tag: 2,\n name: 'device',\n type: 'nested',\n required: true,\n nestedSchema: Schema3100_DeviceContext,\n },\n ],\n};\n","import { ATS1_HDR, ATS1_SCHEMA } from './ats1.constants';\nimport * as ats1 from './ats1';\n\n/**\n * Build canonical hdr for any request using ATS1 codec.\n */\nexport function buildAts1Hdr(params: {\n intentId: number;\n schemaId: number;\n actorKeyId?: Buffer;\n capsuleId?: Buffer;\n traceId?: Buffer;\n tsMs?: bigint;\n nonce?: Buffer;\n bodyHash?: Buffer;\n}): Buffer {\n const hdr: ats1.AxisHeaderLogical = {\n intentId: params.intentId,\n schemaId: params.schemaId,\n actorKeyId: params.actorKeyId ?? Buffer.alloc(0),\n capsuleId: params.capsuleId,\n nonce: params.nonce ?? require('crypto').randomBytes(16),\n tsMs: params.tsMs ?? BigInt(Date.now()),\n bodyHash: params.bodyHash ?? Buffer.alloc(32),\n traceId: params.traceId,\n };\n\n const tlvs = ats1.encodeAxisHeaderToTLVs(hdr);\n return ats1.encodeTLVStreamCanonical(tlvs);\n}\n\n/**\n * PASSKEY: login.options.req\n * schema 2001 body:\n * - (1) username: utf8\n */\nexport function packPasskeyLoginOptionsReq(params: {\n intentId: number;\n username: string;\n actorKeyId?: Buffer;\n capsuleId?: Buffer;\n traceId?: Buffer;\n}) {\n const bodyTlvs = ats1.logicalBodyToTLVs(\n ats1.Schema2001_PasskeyLoginOptionsReq,\n {\n schemaId: ATS1_SCHEMA.PASSKEY_LOGIN_OPTIONS_REQ,\n fields: { username: params.username },\n },\n );\n const body = ats1.encodeTLVStreamCanonical(bodyTlvs);\n const bodyHash = ats1.sha256(body);\n\n const hdr = buildAts1Hdr({\n intentId: params.intentId,\n schemaId: ATS1_SCHEMA.PASSKEY_LOGIN_OPTIONS_REQ,\n actorKeyId: params.actorKeyId,\n capsuleId: params.capsuleId,\n traceId: params.traceId,\n bodyHash,\n });\n\n return { hdr, body };\n}\n\nexport function unpackPasskeyLoginOptionsReq(body: Buffer) {\n const tlvs = ats1.decodeTLVStream(body);\n const decoded = ats1.tlvsToLogicalBody(\n ats1.Schema2001_PasskeyLoginOptionsReq,\n tlvs,\n );\n return { username: decoded.fields.username as string };\n}\n\n/**\n * Defined schemas for passkey operations\n */\nexport const Schema2021_PasskeyRegisterOptionsReq: ats1.Ats1SchemaDescriptor = {\n schemaId: ATS1_SCHEMA.PASSKEY_REGISTER_OPTIONS_REQ,\n name: 'axis.auth.passkey.register.options.req',\n strict: true,\n maxNestingDepth: 4,\n fields: [\n { tag: 1, name: 'username', type: 'utf8', required: true, maxLen: 128 },\n ],\n};\n\nexport const Schema2011_PasskeyLoginVerifyReq: ats1.Ats1SchemaDescriptor = {\n schemaId: ATS1_SCHEMA.PASSKEY_LOGIN_VERIFY_REQ,\n name: 'axis.auth.passkey.login.verify.req',\n strict: true,\n maxNestingDepth: 4,\n fields: [\n { tag: 1, name: 'username', type: 'utf8', required: true, maxLen: 128 },\n {\n tag: 2,\n name: 'credentialId',\n type: 'bytes',\n required: true,\n maxLen: 1024,\n },\n {\n tag: 3,\n name: 'clientDataJSON',\n type: 'bytes',\n required: true,\n maxLen: 4096,\n },\n {\n tag: 4,\n name: 'authenticatorData',\n type: 'bytes',\n required: true,\n maxLen: 1024,\n },\n { tag: 5, name: 'signature', type: 'bytes', required: true, maxLen: 1024 },\n { tag: 6, name: 'userHandle', type: 'bytes', required: false, maxLen: 128 },\n ],\n};\n\n/**\n * PASSKEY: register.options.req\n */\nexport function packPasskeyRegisterOptionsReq(params: {\n intentId: number;\n username: string;\n actorKeyId?: Buffer;\n traceId?: Buffer;\n}) {\n const bodyTlvs = ats1.logicalBodyToTLVs(\n Schema2021_PasskeyRegisterOptionsReq,\n {\n schemaId: ATS1_SCHEMA.PASSKEY_REGISTER_OPTIONS_REQ,\n fields: { username: params.username },\n },\n );\n const body = ats1.encodeTLVStreamCanonical(bodyTlvs);\n const bodyHash = ats1.sha256(body);\n\n const hdr = buildAts1Hdr({\n intentId: params.intentId,\n schemaId: ATS1_SCHEMA.PASSKEY_REGISTER_OPTIONS_REQ,\n actorKeyId: params.actorKeyId,\n traceId: params.traceId,\n bodyHash,\n });\n\n return { hdr, body };\n}\n\nexport function unpackPasskeyRegisterOptionsReq(body: Buffer) {\n const tlvs = ats1.decodeTLVStream(body);\n const decoded = ats1.tlvsToLogicalBody(\n Schema2021_PasskeyRegisterOptionsReq,\n tlvs,\n );\n return { username: decoded.fields.username as string };\n}\n\n/**\n * PASSKEY: login.verify.req\n */\nexport function packPasskeyLoginVerifyReq(params: {\n intentId: number;\n username: string;\n credentialId: Buffer;\n clientDataJSON: Buffer;\n authenticatorData: Buffer;\n signature: Buffer;\n userHandle?: Buffer;\n actorKeyId?: Buffer;\n traceId?: Buffer;\n}) {\n const bodyTlvs = ats1.logicalBodyToTLVs(Schema2011_PasskeyLoginVerifyReq, {\n schemaId: ATS1_SCHEMA.PASSKEY_LOGIN_VERIFY_REQ,\n fields: {\n username: params.username,\n credentialId: params.credentialId,\n clientDataJSON: params.clientDataJSON,\n authenticatorData: params.authenticatorData,\n signature: params.signature,\n userHandle: params.userHandle,\n },\n });\n\n const body = ats1.encodeTLVStreamCanonical(bodyTlvs);\n const bodyHash = ats1.sha256(body);\n\n const hdr = buildAts1Hdr({\n intentId: params.intentId,\n schemaId: ATS1_SCHEMA.PASSKEY_LOGIN_VERIFY_REQ,\n actorKeyId: params.actorKeyId,\n traceId: params.traceId,\n bodyHash,\n });\n\n return { hdr, body };\n}\n\nexport function unpackPasskeyLoginVerifyReq(body: Buffer) {\n const tlvs = ats1.decodeTLVStream(body);\n const decoded = ats1.tlvsToLogicalBody(\n Schema2011_PasskeyLoginVerifyReq,\n tlvs,\n );\n const f = decoded.fields;\n\n return {\n username: f.username as string,\n credentialId: f.credentialId as Buffer,\n clientDataJSON: f.clientDataJSON as Buffer,\n authenticatorData: f.authenticatorData as Buffer,\n signature: f.signature as Buffer,\n userHandle: f.userHandle as Buffer | undefined,\n };\n}\n\n// ========================================\n// Response Schemas\n// ========================================\n\n/**\n * Schema 2002: Passkey Login Options Response\n * - (1) challenge: bytes\n * - (2) timeout: uvarint (ms)\n * - (3) rpId: utf8\n * - (4) allowCredentials: bytes (nested TLV array, each item is id+type+transports)\n * - (5) userVerification: utf8\n */\nexport const Schema2002_PasskeyLoginOptionsRes: ats1.Ats1SchemaDescriptor = {\n schemaId: ATS1_SCHEMA.PASSKEY_LOGIN_OPTIONS_RES,\n name: 'axis.auth.passkey.login.options.res',\n strict: false, // allow extra fields from WebAuthn library\n maxNestingDepth: 4,\n fields: [\n { tag: 1, name: 'challenge', type: 'utf8', required: true }, // base64url string\n { tag: 2, name: 'timeout', type: 'uvarint', required: false },\n { tag: 3, name: 'rpId', type: 'utf8', required: false },\n { tag: 4, name: 'userVerification', type: 'utf8', required: false },\n { tag: 5, name: 'allowCredentialsJson', type: 'utf8', required: false }, // JSON array for simplicity\n ],\n};\n\nexport function packPasskeyLoginOptionsRes(params: {\n challenge: string;\n timeout?: number;\n rpId?: string;\n userVerification?: string;\n allowCredentials?: { id: string; type: string; transports?: string[] }[];\n}): Buffer {\n const fields: Record<string, any> = {\n challenge: params.challenge,\n };\n if (params.timeout !== undefined) fields.timeout = params.timeout;\n if (params.rpId) fields.rpId = params.rpId;\n if (params.userVerification)\n fields.userVerification = params.userVerification;\n if (params.allowCredentials)\n fields.allowCredentialsJson = JSON.stringify(params.allowCredentials);\n\n const bodyTlvs = ats1.logicalBodyToTLVs(Schema2002_PasskeyLoginOptionsRes, {\n schemaId: ATS1_SCHEMA.PASSKEY_LOGIN_OPTIONS_RES,\n fields,\n });\n return ats1.encodeTLVStreamCanonical(bodyTlvs);\n}\n\n/**\n * Schema 2012: Passkey Login Verify Response\n * - (1) actorId: utf8\n * - (2) keyId: utf8 (credentialId base64url)\n * - (3) capsule: bytes\n * - (4) expiresAt: u64be (ms)\n */\nexport const Schema2012_PasskeyLoginVerifyRes: ats1.Ats1SchemaDescriptor = {\n schemaId: ATS1_SCHEMA.PASSKEY_LOGIN_VERIFY_RES,\n name: 'axis.auth.passkey.login.verify.res',\n strict: true,\n maxNestingDepth: 4,\n fields: [\n { tag: 1, name: 'actorId', type: 'utf8', required: true, maxLen: 256 },\n { tag: 2, name: 'keyId', type: 'utf8', required: true, maxLen: 256 },\n { tag: 3, name: 'capsule', type: 'bytes', required: true, maxLen: 4096 },\n { tag: 4, name: 'expiresAt', type: 'u64be', required: true },\n ],\n};\n\nexport function packPasskeyLoginVerifyRes(params: {\n actorId: string;\n keyId: string;\n capsule: Buffer;\n expiresAt: bigint;\n}): Buffer {\n const bodyTlvs = ats1.logicalBodyToTLVs(Schema2012_PasskeyLoginVerifyRes, {\n schemaId: ATS1_SCHEMA.PASSKEY_LOGIN_VERIFY_RES,\n fields: {\n actorId: params.actorId,\n keyId: params.keyId,\n capsule: params.capsule,\n expiresAt: params.expiresAt,\n },\n });\n return ats1.encodeTLVStreamCanonical(bodyTlvs);\n}\n","// tlv.encode.ts\nimport { randomBytes } from 'crypto';\n\nexport function encVarint(x: bigint): Buffer {\n if (x < 0n) throw new Error('VARINT_NEG');\n const out: number[] = [];\n while (x >= 0x80n) {\n out.push(Number((x & 0x7fn) | 0x80n));\n x >>= 7n;\n }\n out.push(Number(x));\n return Buffer.from(out);\n}\n\nexport function varintU(x: number | bigint): Buffer {\n const v = typeof x === 'number' ? BigInt(x) : x;\n return encVarint(v);\n}\n\nexport function u64be(x: bigint): Buffer {\n if (x < 0n) throw new Error('U64_NEG');\n const b = Buffer.alloc(8);\n b.writeBigUInt64BE(x, 0);\n return b;\n}\n\nexport function utf8(s: string): Buffer {\n return Buffer.from(s, 'utf8');\n}\n\nexport function bytes(b: Uint8Array | Buffer): Buffer {\n return Buffer.isBuffer(b) ? b : Buffer.from(b);\n}\n\nexport function nonce16(): Buffer {\n return randomBytes(16);\n}\n\nexport function tlv(type: number, value: Buffer): Buffer {\n if (!Number.isSafeInteger(type) || type < 0) throw new Error('TLV_BAD_TYPE');\n return Buffer.concat([\n encVarint(BigInt(type)),\n encVarint(BigInt(value.length)),\n value,\n ]);\n}\n\n/**\n * Canonical TLV encoding:\n * - sorted by type ascending\n * - no duplicates by default\n */\nexport function buildTLVs(\n items: { type: number; value: Buffer }[],\n opts?: { allowDupTypes?: Set<number> },\n): Buffer {\n const allow = opts?.allowDupTypes ?? new Set<number>();\n const sorted = [...items].sort((a, b) => a.type - b.type);\n\n for (let i = 1; i < sorted.length; i++) {\n if (sorted[i].type === sorted[i - 1].type && !allow.has(sorted[i].type)) {\n throw new Error(`TLV_DUP_TYPE_${sorted[i].type}`);\n }\n }\n\n return Buffer.concat(sorted.map((it) => tlv(it.type, it.value)));\n}\n","// axis1.encode.ts\nimport { AXIS_MAGIC, AXIS_VERSION } from '@nextera.one/axis-protocol';\n\nimport { encVarint } from './tlv.encode';\n\nconst MAGIC = Buffer.from(AXIS_MAGIC);\n\nexport type Axis1FrameToEncode = {\n ver: number; // 1\n flags: number; // bit flags\n hdr: Buffer; // TLVs\n body: Buffer; // TLVs or raw payload\n sig: Buffer; // signature bytes\n};\n\nexport function encodeAxis1Frame(f: Axis1FrameToEncode): Buffer {\n if (\n !Buffer.isBuffer(f.hdr) ||\n !Buffer.isBuffer(f.body) ||\n !Buffer.isBuffer(f.sig)\n ) {\n throw new Error('AXIS1_BAD_BUFFERS');\n }\n if (f.ver !== AXIS_VERSION) throw new Error('AXIS1_BAD_VER');\n\n const hdrLen = encVarint(BigInt(f.hdr.length));\n const bodyLen = encVarint(BigInt(f.body.length));\n const sigLen = encVarint(BigInt(f.sig.length));\n\n return Buffer.concat([\n MAGIC,\n Buffer.from([f.ver & 0xff]),\n Buffer.from([f.flags & 0xff]),\n hdrLen,\n bodyLen,\n sigLen,\n f.hdr,\n f.body,\n f.sig,\n ]);\n}\n","// axis1.signing.ts\nimport { AXIS_MAGIC, AXIS_VERSION } from '@nextera.one/axis-protocol';\n\nimport { encVarint } from './tlv.encode';\n\nconst MAGIC = Buffer.from(AXIS_MAGIC);\n\nexport function axis1SigningBytes(params: {\n ver: number;\n flags: number;\n hdr: Buffer;\n body: Buffer;\n}): Buffer {\n if (params.ver !== AXIS_VERSION) throw new Error('AXIS1_BAD_VER');\n const hdrLen = encVarint(BigInt(params.hdr.length));\n const bodyLen = encVarint(BigInt(params.body.length));\n const sigLenZero = encVarint(0n); // IMPORTANT: sigLen=0 in signing bytes\n\n return Buffer.concat([\n MAGIC,\n Buffer.from([params.ver & 0xff]),\n Buffer.from([params.flags & 0xff]),\n hdrLen,\n bodyLen,\n sigLenZero,\n params.hdr,\n params.body,\n ]);\n}\n","/**\n * Base64url encoding/decoding utilities\n * RFC 4648 base64url (URL-safe, no padding)\n */\n\n/**\n * Encode buffer to base64url string\n * @param buf - Buffer to encode\n * @returns Base64url string (no padding, URL-safe)\n */\nexport function b64urlEncode(buf: Buffer): string {\n return buf\n .toString('base64')\n .replace(/=/g, '')\n .replace(/\\+/g, '-')\n .replace(/\\//g, '_');\n}\n\n/**\n * Decode base64url string to buffer\n * @param str - Base64url string\n * @returns Decoded buffer\n */\nexport function b64urlDecode(str: string): Buffer {\n // Add padding if needed\n const pad = str.length % 4 ? '='.repeat(4 - (str.length % 4)) : '';\n const base64 = (str + pad).replace(/-/g, '+').replace(/_/g, '/');\n return Buffer.from(base64, 'base64');\n}\n\n/**\n * Encode string to base64url\n * @param str - String to encode\n * @param encoding - String encoding (default: utf8)\n * @returns Base64url string\n */\nexport function b64urlEncodeString(\n str: string,\n encoding: BufferEncoding = 'utf8',\n): string {\n return b64urlEncode(Buffer.from(str, encoding));\n}\n\n/**\n * Decode base64url string to string\n * @param str - Base64url string\n * @param encoding - String encoding (default: utf8)\n * @returns Decoded string\n */\nexport function b64urlDecodeString(\n str: string,\n encoding: BufferEncoding = 'utf8',\n): string {\n return b64urlDecode(str).toString(encoding);\n}\n","/**\n * Canonical JSON serialization for stable cryptographic signing\n *\n * Rules:\n * - Recursively sort object keys lexicographically\n * - Remove undefined values\n * - Preserve array order\n * - No whitespace in output\n * - Stable number formatting\n */\n\n/**\n * Recursively sort object keys and remove undefined values\n */\nfunction sortRec(value: any): any {\n if (value === null) {\n return null;\n }\n\n if (value === undefined) {\n return undefined;\n }\n\n if (Array.isArray(value)) {\n return value.map(sortRec);\n }\n\n if (typeof value === 'object') {\n const sorted: Record<string, any> = {};\n const keys = Object.keys(value).sort();\n\n for (const key of keys) {\n const sortedValue = sortRec(value[key]);\n // Skip undefined values\n if (sortedValue !== undefined) {\n sorted[key] = sortedValue;\n }\n }\n\n return sorted;\n }\n\n // Primitive types (number, string, boolean)\n return value;\n}\n\n/**\n * Convert value to canonical JSON string for signing\n *\n * @param value - Value to canonicalize\n * @returns Canonical JSON string (no whitespace, sorted keys, no undefined)\n */\nexport function canonicalJson(value: any): string {\n return JSON.stringify(sortRec(value));\n}\n\n/**\n * Helper to create canonical JSON for signing (excluding specific fields)\n *\n * @param obj - Object to canonicalize\n * @param exclude - Fields to exclude (e.g., 'sig' when signing)\n * @returns Canonical JSON string\n */\nexport function canonicalJsonExcluding(\n obj: Record<string, any>,\n exclude: string[],\n): string {\n const filtered: Record<string, any> = {};\n\n for (const key in obj) {\n if (!exclude.includes(key) && obj[key] !== undefined) {\n filtered[key] = obj[key];\n }\n }\n\n return canonicalJson(filtered);\n}\n","export class ContractViolationError extends Error {\n constructor(\n public code: string,\n message: string,\n ) {\n super(message);\n this.name = 'ContractViolationError';\n }\n}\n\nexport interface ExecutionMetrics {\n dbWrites: number;\n dbReads: number;\n externalCalls: number;\n elapsedMs: number;\n}\n\nexport class ExecutionMeter {\n private dbWrites = 0;\n private dbReads = 0;\n private externalCalls = 0;\n private startTime: number;\n private contract: any; // ExecutionContract\n\n constructor(contract: any) {\n this.contract = contract;\n this.startTime = Date.now();\n }\n\n recordDbWrite(): void {\n this.dbWrites++;\n if (this.dbWrites > this.contract.maxDbWrites) {\n throw new ContractViolationError(\n 'MAX_DB_WRITES_EXCEEDED',\n `DB writes exceeded: ${this.dbWrites}/${this.contract.maxDbWrites}`,\n );\n }\n }\n\n recordDbRead(): void {\n this.dbReads++;\n if (this.contract.maxDbReads && this.dbReads > this.contract.maxDbReads) {\n throw new ContractViolationError(\n 'MAX_DB_READS_EXCEEDED',\n `DB reads exceeded: ${this.dbReads}/${this.contract.maxDbReads}`,\n );\n }\n }\n\n recordExternalCall(): void {\n this.externalCalls++;\n if (this.externalCalls > this.contract.maxExternalCalls) {\n throw new ContractViolationError(\n 'MAX_EXTERNAL_CALLS_EXCEEDED',\n `External calls exceeded: ${this.externalCalls}/${this.contract.maxExternalCalls}`,\n );\n }\n }\n\n checkTime(): void {\n const elapsed = Date.now() - this.startTime;\n if (elapsed > this.contract.maxTimeMs) {\n throw new ContractViolationError(\n 'MAX_TIME_EXCEEDED',\n `Execution time exceeded: ${elapsed}ms/${this.contract.maxTimeMs}ms`,\n );\n }\n }\n\n validateEffect(effect: string): void {\n // Wildcard allows any effect\n if (this.contract.allowedEffects.includes('*')) {\n return;\n }\n\n if (!this.contract.allowedEffects.includes(effect)) {\n throw new ContractViolationError(\n 'INVALID_EFFECT',\n `Effect '${effect}' not allowed. Allowed: ${this.contract.allowedEffects.join(', ')}`,\n );\n }\n }\n\n getMetrics(): ExecutionMetrics {\n return {\n dbWrites: this.dbWrites,\n dbReads: this.dbReads,\n externalCalls: this.externalCalls,\n elapsedMs: Date.now() - this.startTime,\n };\n }\n\n getContract() {\n return this.contract;\n }\n}\n","export interface ExecutionContract {\n maxDbWrites: number;\n maxDbReads?: number;\n maxExternalCalls: number;\n maxTimeMs: number;\n allowedEffects: string[];\n maxMemoryMb?: number;\n}\n\nexport const DEFAULT_CONTRACTS: Record<string, ExecutionContract> = {\n // System intents\n 'system.ping': {\n maxDbWrites: 0,\n maxExternalCalls: 0,\n maxTimeMs: 100,\n allowedEffects: ['system.pong'],\n },\n\n // Catalog intents\n 'catalog.list': {\n maxDbWrites: 0,\n maxExternalCalls: 0,\n maxTimeMs: 200,\n allowedEffects: ['catalog.listed'],\n },\n 'catalog.search': {\n maxDbWrites: 0,\n maxExternalCalls: 0,\n maxTimeMs: 300,\n allowedEffects: ['catalog.searched'],\n },\n\n // Passport intents\n 'passport.issue': {\n maxDbWrites: 10,\n maxExternalCalls: 0,\n maxTimeMs: 500,\n allowedEffects: ['passport.issued', 'passport.rejected'],\n },\n 'passport.revoke': {\n maxDbWrites: 5,\n maxExternalCalls: 0,\n maxTimeMs: 300,\n allowedEffects: ['passport.revoked', 'passport.revoke_failed'],\n },\n\n // File intents\n 'file.init': {\n maxDbWrites: 2,\n maxExternalCalls: 0,\n maxTimeMs: 200,\n allowedEffects: ['file.initialized'],\n },\n 'file.chunk': {\n maxDbWrites: 2,\n maxExternalCalls: 0,\n maxTimeMs: 1000,\n allowedEffects: ['file.chunk.stored'],\n },\n 'file.finalize': {\n maxDbWrites: 2,\n maxExternalCalls: 0,\n maxTimeMs: 500,\n allowedEffects: ['file.finalized'],\n },\n\n // Stream intents\n 'stream.publish': {\n maxDbWrites: 1,\n maxExternalCalls: 0,\n maxTimeMs: 200,\n allowedEffects: ['stream.published'],\n },\n 'stream.read': {\n maxDbWrites: 0,\n maxExternalCalls: 0,\n maxTimeMs: 300,\n allowedEffects: ['stream.data'],\n },\n\n // Mail intents\n 'mail.send': {\n maxDbWrites: 3,\n maxExternalCalls: 1, // Email service\n maxTimeMs: 2000,\n allowedEffects: ['mail.sent', 'mail.failed'],\n },\n};\n\n// Default contract for unknown intents\nexport const FALLBACK_CONTRACT: ExecutionContract = {\n maxDbWrites: 10,\n maxExternalCalls: 0,\n maxTimeMs: 1000,\n allowedEffects: ['*'], // Allow any effect\n};\n","/**\n * Decodes a variable-length integer (Varint) from a buffer.\n * Supports up to 64-bit integers.\n *\n * @param {Buffer} buf - The buffer to read from\n * @param {number} off - The offset to start reading from\n * @returns {Object} The decoded bigint value and the new offset\n * @throws {Error} If the varint is malformed or exceeds 64 bits\n */\nexport function decVarint(\n buf: Buffer,\n off: number,\n): { val: bigint; off: number } {\n let shift = 0n;\n let x = 0n;\n while (true) {\n if (off >= buf.length) throw new Error('varint overflow');\n const b = BigInt(buf[off++]);\n x |= (b & 0x7fn) << shift;\n if ((b & 0x80n) === 0n) break;\n shift += 7n;\n if (shift > 63n) throw new Error('varint too large');\n }\n return { val: x, off };\n}\n\nimport type { TLV } from '../core/tlv';\n\n/**\n * Parses a buffer into an array of TLV objects.\n *\n * @param {Buffer} buf - The buffer containing TLV-encoded data\n * @param {number} [maxItems=512] - Security limit for the number of TLVs to parse\n * @returns {TLV[]} An array of parsed TLVs\n * @throws {Error} If TLV structure is invalid or limits are exceeded\n */\nexport function parseTLVs(buf: Buffer, maxItems: number = 512): TLV[] {\n const out: TLV[] = [];\n let off = 0;\n while (off < buf.length) {\n if (out.length >= maxItems) throw new Error('TLV_TOO_MANY_ITEMS');\n const t1 = decVarint(buf, off);\n off = t1.off;\n const t2 = decVarint(buf, off);\n off = t2.off;\n const type = Number(t1.val);\n const len = Number(t2.val);\n if (len < 0 || off + len > buf.length) {\n throw new Error('TLV_LEN_INVALID');\n }\n const value = buf.subarray(off, off + len);\n off += len;\n out.push({ type, value });\n }\n return out;\n}\n\n/**\n * Parses TLVs and organizes them into a Map for efficient access.\n * Multiple values for the same type are preserved in an array.\n *\n * @param {Buffer} buf - The raw TLV-encoded buffer\n * @returns {Map<number, Buffer[]>} A map of Tag -> [Values]\n */\nexport function tlvMap(buf: Buffer): Map<number, Buffer[]> {\n const m = new Map<number, Buffer[]>();\n for (const it of parseTLVs(buf)) {\n const arr = m.get(it.type) ?? [];\n arr.push(it.value as Buffer);\n m.set(it.type, arr);\n }\n return m;\n}\n\nexport function asUtf8(b?: Buffer): string | undefined {\n if (!b) return undefined;\n return b.toString('utf8');\n}\n\nexport function asBigintVarint(b?: Buffer): bigint | undefined {\n if (!b) return undefined;\n const { val, off } = decVarint(b, 0);\n if (off !== b.length) throw new Error('VARINT_TRAILING_BYTES');\n return val;\n}\n\n/**\n * Parses an 8-byte big-endian buffer as a BigInt.\n * Used for timestamps which are sent as fixed 8-byte u64.\n */\nexport function asBigint64BE(b?: Buffer): bigint | undefined {\n if (!b) return undefined;\n if (b.length !== 8) throw new Error('Expected 8 bytes for u64');\n return b.readBigUInt64BE(0);\n}\n\nexport function encVarint(x: bigint): Buffer {\n if (x < 0n) throw new Error('varint neg');\n const out: number[] = [];\n while (x >= 0x80n) {\n out.push(Number((x & 0x7fn) | 0x80n));\n x >>= 7n;\n }\n out.push(Number(x));\n return Buffer.from(out);\n}\n\nexport function tlv(type: number, value: Buffer): Buffer {\n return Buffer.concat([\n encVarint(BigInt(type)),\n encVarint(BigInt(value.length)),\n value,\n ]);\n}\n\nexport function buildTLVs(items: { type: number; value: Buffer }[]): Buffer {\n // Canonical: sort by type ascending\n const sorted = [...items].sort((a, b) => a.type - b.type);\n\n // Canonical: forbid duplicate tags by default\n for (let i = 1; i < sorted.length; i++) {\n if (sorted[i].type === sorted[i - 1].type) {\n throw new Error(`TLV_DUP_TYPE_${sorted[i].type}`);\n }\n }\n\n return Buffer.concat(sorted.map((it) => tlv(it.type, it.value)));\n}\n\nexport function u64be(x: bigint): Buffer {\n const b = Buffer.alloc(8);\n b.writeBigUInt64BE(x);\n return b;\n}\n\nexport function utf8(s: string): Buffer {\n return Buffer.from(s, 'utf8');\n}\n\nexport function varintU(x: number | bigint): Buffer {\n const v = typeof x === 'number' ? BigInt(x) : x;\n return encVarint(v);\n}\n","import { AXIS_MAGIC } from '@nextera.one/axis-protocol';\n\nimport { decVarint } from './tlv';\n\n/**\n * Axis1DecodedFrame\n *\n * Represents a parsed AXIS v1 binary frame.\n *\n * @typedef {Object} Axis1DecodedFrame\n */\nexport type Axis1DecodedFrame = {\n /** Protocol version (should be 1) */\n ver: number;\n /** Frame flags for protocol extensions */\n flags: number;\n /** Raw header bytes (containing primary TLVs) */\n hdr: Buffer;\n /** Raw body bytes (the main payload) */\n body: Buffer;\n /** Cryptographic signature bytes */\n sig: Buffer;\n /** Total original size of the frame in bytes */\n frameSize: number;\n};\n\nconst MAGIC = Buffer.from(AXIS_MAGIC);\n\n/**\n * Decodes a raw binary buffer into a structured Axis1DecodedFrame.\n * Implements the AXIS v1 wire format specification.\n *\n * **Binary Structure (canonical):**\n * 1. Magic: 'AXIS1' (5 bytes)\n * 2. Version: (1 byte)\n * 3. Flags: (1 byte)\n * 4. HDR_LEN: Varint\n * 5. BODY_LEN: Varint\n * 6. SIG_LEN: Varint\n * 7. HDR: (HDR_LEN bytes)\n * 8. BODY: (BODY_LEN bytes)\n * 9. SIG: (SIG_LEN bytes)\n *\n * @param {Buffer} buf - Raw bytes from the wire\n * @returns {Axis1DecodedFrame} Parsed frame object\n * @throws {Error} If magic is invalid, frame is truncated, or lengths are inconsistent\n */\nexport function decodeAxis1Frame(buf: Buffer): Axis1DecodedFrame {\n let off = 0;\n\n const magic = buf.subarray(off, off + 5);\n off += 5;\n if (magic.length !== 5 || !magic.equals(MAGIC))\n throw new Error('AXIS1_BAD_MAGIC');\n\n if (off + 2 > buf.length) throw new Error('AXIS1_TRUNCATED');\n const ver = buf[off++];\n const flags = buf[off++];\n\n // Read all three lengths first (canonical order: hdrLen, bodyLen, sigLen)\n const h1 = decVarint(buf, off);\n off = h1.off;\n const b1 = decVarint(buf, off);\n off = b1.off;\n const s1 = decVarint(buf, off);\n off = s1.off;\n\n const hdrLen = Number(h1.val);\n const bodyLen = Number(b1.val);\n const sigLen = Number(s1.val);\n\n if (hdrLen < 0 || bodyLen < 0 || sigLen < 0) throw new Error('AXIS1_LEN_NEG');\n\n if (off + hdrLen + bodyLen + sigLen > buf.length)\n throw new Error('AXIS1_TRUNCATED_PAYLOAD');\n\n // Then read payloads in order: HDR, BODY, SIG\n const hdr = buf.subarray(off, off + hdrLen);\n off += hdrLen;\n const body = buf.subarray(off, off + bodyLen);\n off += bodyLen;\n const sig = buf.subarray(off, off + sigLen);\n off += sigLen;\n\n if (off !== buf.length) throw new Error('AXIS1_TRAILING_BYTES');\n\n return { ver, flags, hdr, body, sig, frameSize: buf.length };\n}\n","import {\n TLV_ACTOR_ID,\n TLV_INTENT,\n TLV_NONCE,\n TLV_PID,\n TLV_PROOF_REF,\n TLV_PROOF_TYPE,\n TLV_TS,\n} from '../core/constants';\nimport { asBigint64BE, asBigintVarint, asUtf8, tlvMap } from './tlv';\n\n/**\n * AXIS TLV Tag Definitions (as per specification)\n */\nexport const T = {\n /** The specific intent or action (e.g., 'vault.create') */\n INTENT: TLV_INTENT,\n /** Package identifier / ID */\n PID: TLV_PID,\n /** Versioning of the intent schema */\n INTENT_VERSION: 10, // Defaulting to TRACE_ID for now or a new tag if available\n /** Unique identifier for the requesting actor */\n ACTOR_ID: TLV_ACTOR_ID,\n /** Optional Capability Token identifier (16 bytes) */\n CAPSULE_ID: TLV_PROOF_REF,\n /** Unique session/request identifier (16 bytes) */\n NONCE: TLV_NONCE,\n /** High-precision Unix timestamp in milliseconds */\n TS_MS: TLV_TS,\n /** Proof type */\n PROOF_TYPE: TLV_PROOF_TYPE,\n /** Standard binary body tag */\n BODY: 100,\n /** Standard JSON-encoded body tag */\n JSON: 200,\n};\n\n/**\n * AxisPacket\n *\n * Parsed binary-packet view of an AXIS request after TLV header extraction.\n *\n * This is intentionally different from the protocol `AxisFrame`:\n * - `AxisFrame` is the wire envelope (`flags`, `headers`, `body`, `sig`)\n * - `AxisPacket` is the semantic header projection used by the backend after\n * decoding raw header TLVs into strongly named fields like `intent`,\n * `actorId`, `pid`, and `tsMs`\n */\nexport type AxisPacket = {\n /** The intent string */\n intent: string;\n /** Intent schema version */\n intentVersion: number;\n /** Actor identifier, when provided by the frame header */\n actorId?: string;\n /** Optional binary Capsule ID */\n capsuleId?: Buffer;\n /** Packet identifier */\n pid: Buffer;\n /** Random nonce for replay protection */\n nonce: Buffer;\n /** Request timestamp */\n tsMs: bigint;\n /** Decoded header TLV map */\n headersMap: Map<number, Buffer[]>;\n /** Decoded body TLV map (if body contains TLVs) */\n bodyMap: Map<number, Buffer[]>;\n /** Original raw header bytes */\n hdrBytes: Buffer;\n /** Original raw body bytes */\n bodyBytes: Buffer;\n /** Cryptographic signature of the frame */\n sig: Buffer;\n};\n\n/**\n * Constructs a structured AxisPacket from raw header, body, and signature buffers.\n * Performs rigorous validation on mandatory AXIS fields.\n *\n * @param {Buffer} hdr - Raw header bytes containing the primary TLVs\n * @param {Buffer} body - Raw body bytes\n * @param {Buffer} sig - Signature bytes for the frame\n * @param {number} [flags=0] - Frame flags (bit 0 = BODY_IS_TLV)\n * @returns {AxisPacket} A fully validated AxisPacket object\n * @throws {Error} If mandatory fields (intent, version, nonce, ts) are missing or malformed\n */\nexport function buildPacket(\n hdr: Buffer,\n body: Buffer,\n sig: Buffer,\n flags: number = 0,\n): AxisPacket {\n const hm = tlvMap(hdr);\n\n // Only parse body as TLV if BODY_IS_TLV flag is set (bit 0)\n const BODY_IS_TLV = 0x01;\n const bm = flags & BODY_IS_TLV ? tlvMap(body) : new Map<number, Buffer[]>();\n\n const intent = asUtf8(hm.get(T.INTENT)?.[0]);\n const intentVerRaw = hm.get(T.INTENT_VERSION)?.[0];\n const intentVer = intentVerRaw ? Number(asBigintVarint(intentVerRaw)) : 1;\n const actorIdRaw = hm.get(T.ACTOR_ID)?.[0];\n const actorId = actorIdRaw ? actorIdRaw.toString('hex') : undefined;\n const capsuleId = hm.get(T.CAPSULE_ID)?.[0];\n const pid = hm.get(T.PID)?.[0] || hm.get(T.NONCE)?.[0]; // Fallback to nonce if pid missing\n const nonce = hm.get(T.NONCE)?.[0];\n const tsMs = asBigint64BE(hm.get(T.TS_MS)?.[0]);\n\n if (!intent) throw new Error('PACKET_MISSING_INTENT');\n if (!nonce || nonce.length < 16 || nonce.length > 32)\n throw new Error('PACKET_BAD_NONCE');\n if (!pid) throw new Error('PACKET_MISSING_PID');\n if (!tsMs) throw new Error('PACKET_MISSING_TS');\n\n return {\n intent,\n intentVersion: intentVer,\n actorId,\n capsuleId,\n pid,\n nonce,\n tsMs,\n headersMap: hm,\n bodyMap: bm,\n hdrBytes: hdr,\n bodyBytes: body,\n sig,\n };\n}\n","/**\n * AXIS Capability Model\n * Maps proof types to capabilities and intents to requirements.\n */\nimport { PROOF_CAPSULE, PROOF_JWT, PROOF_LOOM, PROOF_MTLS, PROOF_NONE, PROOF_WITNESS } from '../core/constants';\n\n/**\n * Available capabilities in the AXIS system.\n * Each represents a distinct permission level.\n */\nexport const CAPABILITIES = {\n read: 'read',\n write: 'write',\n execute: 'execute',\n admin: 'admin',\n sign: 'sign',\n witness: 'witness',\n} as const;\n\nexport type Capability = keyof typeof CAPABILITIES;\n\n/**\n * Maps proof type codes to granted capabilities.\n */\nexport const PROOF_CAPABILITIES: Record<number, Capability[]> = {\n [PROOF_NONE]: [],\n [PROOF_CAPSULE]: ['read', 'write', 'execute'],\n [PROOF_JWT]: ['read'],\n [PROOF_MTLS]: ['read', 'write', 'admin'],\n [PROOF_LOOM]: ['read', 'write', 'execute'],\n [PROOF_WITNESS]: ['read', 'write', 'execute', 'witness'],\n};\n\n/**\n * Maps intent patterns to required capabilities.\n * Patterns ending with '.*' match any intent with that prefix.\n */\nexport const INTENT_REQUIREMENTS: Record<string, Capability[]> = {\n 'public.*': [],\n 'schema.*': [],\n 'catalog.*': [],\n 'health.*': [],\n 'system.*': [],\n\n 'file.upload': ['write'],\n 'file.download': ['read'],\n 'file.delete': ['write', 'admin'],\n\n 'passport.issue': ['write', 'execute'],\n 'passport.revoke': ['write', 'witness'],\n\n 'stream.publish': ['write'],\n 'stream.subscribe': ['read'],\n\n // NestFlow intents\n 'auth.web.login.*': ['execute'],\n 'tickauth.challenge.*': ['execute'],\n 'capsule.issue.*': ['write', 'execute'],\n 'session.*': ['execute'],\n 'device.list': ['read'],\n 'device.rename': ['write'],\n 'device.trust.*': ['write', 'execute'],\n 'device.revoke': ['write', 'execute'],\n 'identity.*': ['admin', 'execute'],\n 'primary.device.*': ['admin', 'execute'],\n 'secret.rotate': ['admin'],\n 'org.security.*': ['admin'],\n 'production.execution.*': ['admin', 'execute'],\n\n 'admin.*': ['admin'],\n};\n","(function(nacl) {\n'use strict';\n\n// Ported in 2014 by Dmitry Chestnykh and Devi Mandiri.\n// Public domain.\n//\n// Implementation derived from TweetNaCl version 20140427.\n// See for details: http://tweetnacl.cr.yp.to/\n\nvar gf = function(init) {\n var i, r = new Float64Array(16);\n if (init) for (i = 0; i < init.length; i++) r[i] = init[i];\n return r;\n};\n\n// Pluggable, initialized in high-level API below.\nvar randombytes = function(/* x, n */) { throw new Error('no PRNG'); };\n\nvar _0 = new Uint8Array(16);\nvar _9 = new Uint8Array(32); _9[0] = 9;\n\nvar gf0 = gf(),\n gf1 = gf([1]),\n _121665 = gf([0xdb41, 1]),\n D = gf([0x78a3, 0x1359, 0x4dca, 0x75eb, 0xd8ab, 0x4141, 0x0a4d, 0x0070, 0xe898, 0x7779, 0x4079, 0x8cc7, 0xfe73, 0x2b6f, 0x6cee, 0x5203]),\n D2 = gf([0xf159, 0x26b2, 0x9b94, 0xebd6, 0xb156, 0x8283, 0x149a, 0x00e0, 0xd130, 0xeef3, 0x80f2, 0x198e, 0xfce7, 0x56df, 0xd9dc, 0x2406]),\n X = gf([0xd51a, 0x8f25, 0x2d60, 0xc956, 0xa7b2, 0x9525, 0xc760, 0x692c, 0xdc5c, 0xfdd6, 0xe231, 0xc0a4, 0x53fe, 0xcd6e, 0x36d3, 0x2169]),\n Y = gf([0x6658, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666, 0x6666]),\n I = gf([0xa0b0, 0x4a0e, 0x1b27, 0xc4ee, 0xe478, 0xad2f, 0x1806, 0x2f43, 0xd7a7, 0x3dfb, 0x0099, 0x2b4d, 0xdf0b, 0x4fc1, 0x2480, 0x2b83]);\n\nfunction ts64(x, i, h, l) {\n x[i] = (h >> 24) & 0xff;\n x[i+1] = (h >> 16) & 0xff;\n x[i+2] = (h >> 8) & 0xff;\n x[i+3] = h & 0xff;\n x[i+4] = (l >> 24) & 0xff;\n x[i+5] = (l >> 16) & 0xff;\n x[i+6] = (l >> 8) & 0xff;\n x[i+7] = l & 0xff;\n}\n\nfunction vn(x, xi, y, yi, n) {\n var i,d = 0;\n for (i = 0; i < n; i++) d |= x[xi+i]^y[yi+i];\n return (1 & ((d - 1) >>> 8)) - 1;\n}\n\nfunction crypto_verify_16(x, xi, y, yi) {\n return vn(x,xi,y,yi,16);\n}\n\nfunction crypto_verify_32(x, xi, y, yi) {\n return vn(x,xi,y,yi,32);\n}\n\nfunction core_salsa20(o, p, k, c) {\n var j0 = c[ 0] & 0xff | (c[ 1] & 0xff)<<8 | (c[ 2] & 0xff)<<16 | (c[ 3] & 0xff)<<24,\n j1 = k[ 0] & 0xff | (k[ 1] & 0xff)<<8 | (k[ 2] & 0xff)<<16 | (k[ 3] & 0xff)<<24,\n j2 = k[ 4] & 0xff | (k[ 5] & 0xff)<<8 | (k[ 6] & 0xff)<<16 | (k[ 7] & 0xff)<<24,\n j3 = k[ 8] & 0xff | (k[ 9] & 0xff)<<8 | (k[10] & 0xff)<<16 | (k[11] & 0xff)<<24,\n j4 = k[12] & 0xff | (k[13] & 0xff)<<8 | (k[14] & 0xff)<<16 | (k[15] & 0xff)<<24,\n j5 = c[ 4] & 0xff | (c[ 5] & 0xff)<<8 | (c[ 6] & 0xff)<<16 | (c[ 7] & 0xff)<<24,\n j6 = p[ 0] & 0xff | (p[ 1] & 0xff)<<8 | (p[ 2] & 0xff)<<16 | (p[ 3] & 0xff)<<24,\n j7 = p[ 4] & 0xff | (p[ 5] & 0xff)<<8 | (p[ 6] & 0xff)<<16 | (p[ 7] & 0xff)<<24,\n j8 = p[ 8] & 0xff | (p[ 9] & 0xff)<<8 | (p[10] & 0xff)<<16 | (p[11] & 0xff)<<24,\n j9 = p[12] & 0xff | (p[13] & 0xff)<<8 | (p[14] & 0xff)<<16 | (p[15] & 0xff)<<24,\n j10 = c[ 8] & 0xff | (c[ 9] & 0xff)<<8 | (c[10] & 0xff)<<16 | (c[11] & 0xff)<<24,\n j11 = k[16] & 0xff | (k[17] & 0xff)<<8 | (k[18] & 0xff)<<16 | (k[19] & 0xff)<<24,\n j12 = k[20] & 0xff | (k[21] & 0xff)<<8 | (k[22] & 0xff)<<16 | (k[23] & 0xff)<<24,\n j13 = k[24] & 0xff | (k[25] & 0xff)<<8 | (k[26] & 0xff)<<16 | (k[27] & 0xff)<<24,\n j14 = k[28] & 0xff | (k[29] & 0xff)<<8 | (k[30] & 0xff)<<16 | (k[31] & 0xff)<<24,\n j15 = c[12] & 0xff | (c[13] & 0xff)<<8 | (c[14] & 0xff)<<16 | (c[15] & 0xff)<<24;\n\n var x0 = j0, x1 = j1, x2 = j2, x3 = j3, x4 = j4, x5 = j5, x6 = j6, x7 = j7,\n x8 = j8, x9 = j9, x10 = j10, x11 = j11, x12 = j12, x13 = j13, x14 = j14,\n x15 = j15, u;\n\n for (var i = 0; i < 20; i += 2) {\n u = x0 + x12 | 0;\n x4 ^= u<<7 | u>>>(32-7);\n u = x4 + x0 | 0;\n x8 ^= u<<9 | u>>>(32-9);\n u = x8 + x4 | 0;\n x12 ^= u<<13 | u>>>(32-13);\n u = x12 + x8 | 0;\n x0 ^= u<<18 | u>>>(32-18);\n\n u = x5 + x1 | 0;\n x9 ^= u<<7 | u>>>(32-7);\n u = x9 + x5 | 0;\n x13 ^= u<<9 | u>>>(32-9);\n u = x13 + x9 | 0;\n x1 ^= u<<13 | u>>>(32-13);\n u = x1 + x13 | 0;\n x5 ^= u<<18 | u>>>(32-18);\n\n u = x10 + x6 | 0;\n x14 ^= u<<7 | u>>>(32-7);\n u = x14 + x10 | 0;\n x2 ^= u<<9 | u>>>(32-9);\n u = x2 + x14 | 0;\n x6 ^= u<<13 | u>>>(32-13);\n u = x6 + x2 | 0;\n x10 ^= u<<18 | u>>>(32-18);\n\n u = x15 + x11 | 0;\n x3 ^= u<<7 | u>>>(32-7);\n u = x3 + x15 | 0;\n x7 ^= u<<9 | u>>>(32-9);\n u = x7 + x3 | 0;\n x11 ^= u<<13 | u>>>(32-13);\n u = x11 + x7 | 0;\n x15 ^= u<<18 | u>>>(32-18);\n\n u = x0 + x3 | 0;\n x1 ^= u<<7 | u>>>(32-7);\n u = x1 + x0 | 0;\n x2 ^= u<<9 | u>>>(32-9);\n u = x2 + x1 | 0;\n x3 ^= u<<13 | u>>>(32-13);\n u = x3 + x2 | 0;\n x0 ^= u<<18 | u>>>(32-18);\n\n u = x5 + x4 | 0;\n x6 ^= u<<7 | u>>>(32-7);\n u = x6 + x5 | 0;\n x7 ^= u<<9 | u>>>(32-9);\n u = x7 + x6 | 0;\n x4 ^= u<<13 | u>>>(32-13);\n u = x4 + x7 | 0;\n x5 ^= u<<18 | u>>>(32-18);\n\n u = x10 + x9 | 0;\n x11 ^= u<<7 | u>>>(32-7);\n u = x11 + x10 | 0;\n x8 ^= u<<9 | u>>>(32-9);\n u = x8 + x11 | 0;\n x9 ^= u<<13 | u>>>(32-13);\n u = x9 + x8 | 0;\n x10 ^= u<<18 | u>>>(32-18);\n\n u = x15 + x14 | 0;\n x12 ^= u<<7 | u>>>(32-7);\n u = x12 + x15 | 0;\n x13 ^= u<<9 | u>>>(32-9);\n u = x13 + x12 | 0;\n x14 ^= u<<13 | u>>>(32-13);\n u = x14 + x13 | 0;\n x15 ^= u<<18 | u>>>(32-18);\n }\n x0 = x0 + j0 | 0;\n x1 = x1 + j1 | 0;\n x2 = x2 + j2 | 0;\n x3 = x3 + j3 | 0;\n x4 = x4 + j4 | 0;\n x5 = x5 + j5 | 0;\n x6 = x6 + j6 | 0;\n x7 = x7 + j7 | 0;\n x8 = x8 + j8 | 0;\n x9 = x9 + j9 | 0;\n x10 = x10 + j10 | 0;\n x11 = x11 + j11 | 0;\n x12 = x12 + j12 | 0;\n x13 = x13 + j13 | 0;\n x14 = x14 + j14 | 0;\n x15 = x15 + j15 | 0;\n\n o[ 0] = x0 >>> 0 & 0xff;\n o[ 1] = x0 >>> 8 & 0xff;\n o[ 2] = x0 >>> 16 & 0xff;\n o[ 3] = x0 >>> 24 & 0xff;\n\n o[ 4] = x1 >>> 0 & 0xff;\n o[ 5] = x1 >>> 8 & 0xff;\n o[ 6] = x1 >>> 16 & 0xff;\n o[ 7] = x1 >>> 24 & 0xff;\n\n o[ 8] = x2 >>> 0 & 0xff;\n o[ 9] = x2 >>> 8 & 0xff;\n o[10] = x2 >>> 16 & 0xff;\n o[11] = x2 >>> 24 & 0xff;\n\n o[12] = x3 >>> 0 & 0xff;\n o[13] = x3 >>> 8 & 0xff;\n o[14] = x3 >>> 16 & 0xff;\n o[15] = x3 >>> 24 & 0xff;\n\n o[16] = x4 >>> 0 & 0xff;\n o[17] = x4 >>> 8 & 0xff;\n o[18] = x4 >>> 16 & 0xff;\n o[19] = x4 >>> 24 & 0xff;\n\n o[20] = x5 >>> 0 & 0xff;\n o[21] = x5 >>> 8 & 0xff;\n o[22] = x5 >>> 16 & 0xff;\n o[23] = x5 >>> 24 & 0xff;\n\n o[24] = x6 >>> 0 & 0xff;\n o[25] = x6 >>> 8 & 0xff;\n o[26] = x6 >>> 16 & 0xff;\n o[27] = x6 >>> 24 & 0xff;\n\n o[28] = x7 >>> 0 & 0xff;\n o[29] = x7 >>> 8 & 0xff;\n o[30] = x7 >>> 16 & 0xff;\n o[31] = x7 >>> 24 & 0xff;\n\n o[32] = x8 >>> 0 & 0xff;\n o[33] = x8 >>> 8 & 0xff;\n o[34] = x8 >>> 16 & 0xff;\n o[35] = x8 >>> 24 & 0xff;\n\n o[36] = x9 >>> 0 & 0xff;\n o[37] = x9 >>> 8 & 0xff;\n o[38] = x9 >>> 16 & 0xff;\n o[39] = x9 >>> 24 & 0xff;\n\n o[40] = x10 >>> 0 & 0xff;\n o[41] = x10 >>> 8 & 0xff;\n o[42] = x10 >>> 16 & 0xff;\n o[43] = x10 >>> 24 & 0xff;\n\n o[44] = x11 >>> 0 & 0xff;\n o[45] = x11 >>> 8 & 0xff;\n o[46] = x11 >>> 16 & 0xff;\n o[47] = x11 >>> 24 & 0xff;\n\n o[48] = x12 >>> 0 & 0xff;\n o[49] = x12 >>> 8 & 0xff;\n o[50] = x12 >>> 16 & 0xff;\n o[51] = x12 >>> 24 & 0xff;\n\n o[52] = x13 >>> 0 & 0xff;\n o[53] = x13 >>> 8 & 0xff;\n o[54] = x13 >>> 16 & 0xff;\n o[55] = x13 >>> 24 & 0xff;\n\n o[56] = x14 >>> 0 & 0xff;\n o[57] = x14 >>> 8 & 0xff;\n o[58] = x14 >>> 16 & 0xff;\n o[59] = x14 >>> 24 & 0xff;\n\n o[60] = x15 >>> 0 & 0xff;\n o[61] = x15 >>> 8 & 0xff;\n o[62] = x15 >>> 16 & 0xff;\n o[63] = x15 >>> 24 & 0xff;\n}\n\nfunction core_hsalsa20(o,p,k,c) {\n var j0 = c[ 0] & 0xff | (c[ 1] & 0xff)<<8 | (c[ 2] & 0xff)<<16 | (c[ 3] & 0xff)<<24,\n j1 = k[ 0] & 0xff | (k[ 1] & 0xff)<<8 | (k[ 2] & 0xff)<<16 | (k[ 3] & 0xff)<<24,\n j2 = k[ 4] & 0xff | (k[ 5] & 0xff)<<8 | (k[ 6] & 0xff)<<16 | (k[ 7] & 0xff)<<24,\n j3 = k[ 8] & 0xff | (k[ 9] & 0xff)<<8 | (k[10] & 0xff)<<16 | (k[11] & 0xff)<<24,\n j4 = k[12] & 0xff | (k[13] & 0xff)<<8 | (k[14] & 0xff)<<16 | (k[15] & 0xff)<<24,\n j5 = c[ 4] & 0xff | (c[ 5] & 0xff)<<8 | (c[ 6] & 0xff)<<16 | (c[ 7] & 0xff)<<24,\n j6 = p[ 0] & 0xff | (p[ 1] & 0xff)<<8 | (p[ 2] & 0xff)<<16 | (p[ 3] & 0xff)<<24,\n j7 = p[ 4] & 0xff | (p[ 5] & 0xff)<<8 | (p[ 6] & 0xff)<<16 | (p[ 7] & 0xff)<<24,\n j8 = p[ 8] & 0xff | (p[ 9] & 0xff)<<8 | (p[10] & 0xff)<<16 | (p[11] & 0xff)<<24,\n j9 = p[12] & 0xff | (p[13] & 0xff)<<8 | (p[14] & 0xff)<<16 | (p[15] & 0xff)<<24,\n j10 = c[ 8] & 0xff | (c[ 9] & 0xff)<<8 | (c[10] & 0xff)<<16 | (c[11] & 0xff)<<24,\n j11 = k[16] & 0xff | (k[17] & 0xff)<<8 | (k[18] & 0xff)<<16 | (k[19] & 0xff)<<24,\n j12 = k[20] & 0xff | (k[21] & 0xff)<<8 | (k[22] & 0xff)<<16 | (k[23] & 0xff)<<24,\n j13 = k[24] & 0xff | (k[25] & 0xff)<<8 | (k[26] & 0xff)<<16 | (k[27] & 0xff)<<24,\n j14 = k[28] & 0xff | (k[29] & 0xff)<<8 | (k[30] & 0xff)<<16 | (k[31] & 0xff)<<24,\n j15 = c[12] & 0xff | (c[13] & 0xff)<<8 | (c[14] & 0xff)<<16 | (c[15] & 0xff)<<24;\n\n var x0 = j0, x1 = j1, x2 = j2, x3 = j3, x4 = j4, x5 = j5, x6 = j6, x7 = j7,\n x8 = j8, x9 = j9, x10 = j10, x11 = j11, x12 = j12, x13 = j13, x14 = j14,\n x15 = j15, u;\n\n for (var i = 0; i < 20; i += 2) {\n u = x0 + x12 | 0;\n x4 ^= u<<7 | u>>>(32-7);\n u = x4 + x0 | 0;\n x8 ^= u<<9 | u>>>(32-9);\n u = x8 + x4 | 0;\n x12 ^= u<<13 | u>>>(32-13);\n u = x12 + x8 | 0;\n x0 ^= u<<18 | u>>>(32-18);\n\n u = x5 + x1 | 0;\n x9 ^= u<<7 | u>>>(32-7);\n u = x9 + x5 | 0;\n x13 ^= u<<9 | u>>>(32-9);\n u = x13 + x9 | 0;\n x1 ^= u<<13 | u>>>(32-13);\n u = x1 + x13 | 0;\n x5 ^= u<<18 | u>>>(32-18);\n\n u = x10 + x6 | 0;\n x14 ^= u<<7 | u>>>(32-7);\n u = x14 + x10 | 0;\n x2 ^= u<<9 | u>>>(32-9);\n u = x2 + x14 | 0;\n x6 ^= u<<13 | u>>>(32-13);\n u = x6 + x2 | 0;\n x10 ^= u<<18 | u>>>(32-18);\n\n u = x15 + x11 | 0;\n x3 ^= u<<7 | u>>>(32-7);\n u = x3 + x15 | 0;\n x7 ^= u<<9 | u>>>(32-9);\n u = x7 + x3 | 0;\n x11 ^= u<<13 | u>>>(32-13);\n u = x11 + x7 | 0;\n x15 ^= u<<18 | u>>>(32-18);\n\n u = x0 + x3 | 0;\n x1 ^= u<<7 | u>>>(32-7);\n u = x1 + x0 | 0;\n x2 ^= u<<9 | u>>>(32-9);\n u = x2 + x1 | 0;\n x3 ^= u<<13 | u>>>(32-13);\n u = x3 + x2 | 0;\n x0 ^= u<<18 | u>>>(32-18);\n\n u = x5 + x4 | 0;\n x6 ^= u<<7 | u>>>(32-7);\n u = x6 + x5 | 0;\n x7 ^= u<<9 | u>>>(32-9);\n u = x7 + x6 | 0;\n x4 ^= u<<13 | u>>>(32-13);\n u = x4 + x7 | 0;\n x5 ^= u<<18 | u>>>(32-18);\n\n u = x10 + x9 | 0;\n x11 ^= u<<7 | u>>>(32-7);\n u = x11 + x10 | 0;\n x8 ^= u<<9 | u>>>(32-9);\n u = x8 + x11 | 0;\n x9 ^= u<<13 | u>>>(32-13);\n u = x9 + x8 | 0;\n x10 ^= u<<18 | u>>>(32-18);\n\n u = x15 + x14 | 0;\n x12 ^= u<<7 | u>>>(32-7);\n u = x12 + x15 | 0;\n x13 ^= u<<9 | u>>>(32-9);\n u = x13 + x12 | 0;\n x14 ^= u<<13 | u>>>(32-13);\n u = x14 + x13 | 0;\n x15 ^= u<<18 | u>>>(32-18);\n }\n\n o[ 0] = x0 >>> 0 & 0xff;\n o[ 1] = x0 >>> 8 & 0xff;\n o[ 2] = x0 >>> 16 & 0xff;\n o[ 3] = x0 >>> 24 & 0xff;\n\n o[ 4] = x5 >>> 0 & 0xff;\n o[ 5] = x5 >>> 8 & 0xff;\n o[ 6] = x5 >>> 16 & 0xff;\n o[ 7] = x5 >>> 24 & 0xff;\n\n o[ 8] = x10 >>> 0 & 0xff;\n o[ 9] = x10 >>> 8 & 0xff;\n o[10] = x10 >>> 16 & 0xff;\n o[11] = x10 >>> 24 & 0xff;\n\n o[12] = x15 >>> 0 & 0xff;\n o[13] = x15 >>> 8 & 0xff;\n o[14] = x15 >>> 16 & 0xff;\n o[15] = x15 >>> 24 & 0xff;\n\n o[16] = x6 >>> 0 & 0xff;\n o[17] = x6 >>> 8 & 0xff;\n o[18] = x6 >>> 16 & 0xff;\n o[19] = x6 >>> 24 & 0xff;\n\n o[20] = x7 >>> 0 & 0xff;\n o[21] = x7 >>> 8 & 0xff;\n o[22] = x7 >>> 16 & 0xff;\n o[23] = x7 >>> 24 & 0xff;\n\n o[24] = x8 >>> 0 & 0xff;\n o[25] = x8 >>> 8 & 0xff;\n o[26] = x8 >>> 16 & 0xff;\n o[27] = x8 >>> 24 & 0xff;\n\n o[28] = x9 >>> 0 & 0xff;\n o[29] = x9 >>> 8 & 0xff;\n o[30] = x9 >>> 16 & 0xff;\n o[31] = x9 >>> 24 & 0xff;\n}\n\nfunction crypto_core_salsa20(out,inp,k,c) {\n core_salsa20(out,inp,k,c);\n}\n\nfunction crypto_core_hsalsa20(out,inp,k,c) {\n core_hsalsa20(out,inp,k,c);\n}\n\nvar sigma = new Uint8Array([101, 120, 112, 97, 110, 100, 32, 51, 50, 45, 98, 121, 116, 101, 32, 107]);\n // \"expand 32-byte k\"\n\nfunction crypto_stream_salsa20_xor(c,cpos,m,mpos,b,n,k) {\n var z = new Uint8Array(16), x = new Uint8Array(64);\n var u, i;\n for (i = 0; i < 16; i++) z[i] = 0;\n for (i = 0; i < 8; i++) z[i] = n[i];\n while (b >= 64) {\n crypto_core_salsa20(x,z,k,sigma);\n for (i = 0; i < 64; i++) c[cpos+i] = m[mpos+i] ^ x[i];\n u = 1;\n for (i = 8; i < 16; i++) {\n u = u + (z[i] & 0xff) | 0;\n z[i] = u & 0xff;\n u >>>= 8;\n }\n b -= 64;\n cpos += 64;\n mpos += 64;\n }\n if (b > 0) {\n crypto_core_salsa20(x,z,k,sigma);\n for (i = 0; i < b; i++) c[cpos+i] = m[mpos+i] ^ x[i];\n }\n return 0;\n}\n\nfunction crypto_stream_salsa20(c,cpos,b,n,k) {\n var z = new Uint8Array(16), x = new Uint8Array(64);\n var u, i;\n for (i = 0; i < 16; i++) z[i] = 0;\n for (i = 0; i < 8; i++) z[i] = n[i];\n while (b >= 64) {\n crypto_core_salsa20(x,z,k,sigma);\n for (i = 0; i < 64; i++) c[cpos+i] = x[i];\n u = 1;\n for (i = 8; i < 16; i++) {\n u = u + (z[i] & 0xff) | 0;\n z[i] = u & 0xff;\n u >>>= 8;\n }\n b -= 64;\n cpos += 64;\n }\n if (b > 0) {\n crypto_core_salsa20(x,z,k,sigma);\n for (i = 0; i < b; i++) c[cpos+i] = x[i];\n }\n return 0;\n}\n\nfunction crypto_stream(c,cpos,d,n,k) {\n var s = new Uint8Array(32);\n crypto_core_hsalsa20(s,n,k,sigma);\n var sn = new Uint8Array(8);\n for (var i = 0; i < 8; i++) sn[i] = n[i+16];\n return crypto_stream_salsa20(c,cpos,d,sn,s);\n}\n\nfunction crypto_stream_xor(c,cpos,m,mpos,d,n,k) {\n var s = new Uint8Array(32);\n crypto_core_hsalsa20(s,n,k,sigma);\n var sn = new Uint8Array(8);\n for (var i = 0; i < 8; i++) sn[i] = n[i+16];\n return crypto_stream_salsa20_xor(c,cpos,m,mpos,d,sn,s);\n}\n\n/*\n* Port of Andrew Moon's Poly1305-donna-16. Public domain.\n* https://github.com/floodyberry/poly1305-donna\n*/\n\nvar poly1305 = function(key) {\n this.buffer = new Uint8Array(16);\n this.r = new Uint16Array(10);\n this.h = new Uint16Array(10);\n this.pad = new Uint16Array(8);\n this.leftover = 0;\n this.fin = 0;\n\n var t0, t1, t2, t3, t4, t5, t6, t7;\n\n t0 = key[ 0] & 0xff | (key[ 1] & 0xff) << 8; this.r[0] = ( t0 ) & 0x1fff;\n t1 = key[ 2] & 0xff | (key[ 3] & 0xff) << 8; this.r[1] = ((t0 >>> 13) | (t1 << 3)) & 0x1fff;\n t2 = key[ 4] & 0xff | (key[ 5] & 0xff) << 8; this.r[2] = ((t1 >>> 10) | (t2 << 6)) & 0x1f03;\n t3 = key[ 6] & 0xff | (key[ 7] & 0xff) << 8; this.r[3] = ((t2 >>> 7) | (t3 << 9)) & 0x1fff;\n t4 = key[ 8] & 0xff | (key[ 9] & 0xff) << 8; this.r[4] = ((t3 >>> 4) | (t4 << 12)) & 0x00ff;\n this.r[5] = ((t4 >>> 1)) & 0x1ffe;\n t5 = key[10] & 0xff | (key[11] & 0xff) << 8; this.r[6] = ((t4 >>> 14) | (t5 << 2)) & 0x1fff;\n t6 = key[12] & 0xff | (key[13] & 0xff) << 8; this.r[7] = ((t5 >>> 11) | (t6 << 5)) & 0x1f81;\n t7 = key[14] & 0xff | (key[15] & 0xff) << 8; this.r[8] = ((t6 >>> 8) | (t7 << 8)) & 0x1fff;\n this.r[9] = ((t7 >>> 5)) & 0x007f;\n\n this.pad[0] = key[16] & 0xff | (key[17] & 0xff) << 8;\n this.pad[1] = key[18] & 0xff | (key[19] & 0xff) << 8;\n this.pad[2] = key[20] & 0xff | (key[21] & 0xff) << 8;\n this.pad[3] = key[22] & 0xff | (key[23] & 0xff) << 8;\n this.pad[4] = key[24] & 0xff | (key[25] & 0xff) << 8;\n this.pad[5] = key[26] & 0xff | (key[27] & 0xff) << 8;\n this.pad[6] = key[28] & 0xff | (key[29] & 0xff) << 8;\n this.pad[7] = key[30] & 0xff | (key[31] & 0xff) << 8;\n};\n\npoly1305.prototype.blocks = function(m, mpos, bytes) {\n var hibit = this.fin ? 0 : (1 << 11);\n var t0, t1, t2, t3, t4, t5, t6, t7, c;\n var d0, d1, d2, d3, d4, d5, d6, d7, d8, d9;\n\n var h0 = this.h[0],\n h1 = this.h[1],\n h2 = this.h[2],\n h3 = this.h[3],\n h4 = this.h[4],\n h5 = this.h[5],\n h6 = this.h[6],\n h7 = this.h[7],\n h8 = this.h[8],\n h9 = this.h[9];\n\n var r0 = this.r[0],\n r1 = this.r[1],\n r2 = this.r[2],\n r3 = this.r[3],\n r4 = this.r[4],\n r5 = this.r[5],\n r6 = this.r[6],\n r7 = this.r[7],\n r8 = this.r[8],\n r9 = this.r[9];\n\n while (bytes >= 16) {\n t0 = m[mpos+ 0] & 0xff | (m[mpos+ 1] & 0xff) << 8; h0 += ( t0 ) & 0x1fff;\n t1 = m[mpos+ 2] & 0xff | (m[mpos+ 3] & 0xff) << 8; h1 += ((t0 >>> 13) | (t1 << 3)) & 0x1fff;\n t2 = m[mpos+ 4] & 0xff | (m[mpos+ 5] & 0xff) << 8; h2 += ((t1 >>> 10) | (t2 << 6)) & 0x1fff;\n t3 = m[mpos+ 6] & 0xff | (m[mpos+ 7] & 0xff) << 8; h3 += ((t2 >>> 7) | (t3 << 9)) & 0x1fff;\n t4 = m[mpos+ 8] & 0xff | (m[mpos+ 9] & 0xff) << 8; h4 += ((t3 >>> 4) | (t4 << 12)) & 0x1fff;\n h5 += ((t4 >>> 1)) & 0x1fff;\n t5 = m[mpos+10] & 0xff | (m[mpos+11] & 0xff) << 8; h6 += ((t4 >>> 14) | (t5 << 2)) & 0x1fff;\n t6 = m[mpos+12] & 0xff | (m[mpos+13] & 0xff) << 8; h7 += ((t5 >>> 11) | (t6 << 5)) & 0x1fff;\n t7 = m[mpos+14] & 0xff | (m[mpos+15] & 0xff) << 8; h8 += ((t6 >>> 8) | (t7 << 8)) & 0x1fff;\n h9 += ((t7 >>> 5)) | hibit;\n\n c = 0;\n\n d0 = c;\n d0 += h0 * r0;\n d0 += h1 * (5 * r9);\n d0 += h2 * (5 * r8);\n d0 += h3 * (5 * r7);\n d0 += h4 * (5 * r6);\n c = (d0 >>> 13); d0 &= 0x1fff;\n d0 += h5 * (5 * r5);\n d0 += h6 * (5 * r4);\n d0 += h7 * (5 * r3);\n d0 += h8 * (5 * r2);\n d0 += h9 * (5 * r1);\n c += (d0 >>> 13); d0 &= 0x1fff;\n\n d1 = c;\n d1 += h0 * r1;\n d1 += h1 * r0;\n d1 += h2 * (5 * r9);\n d1 += h3 * (5 * r8);\n d1 += h4 * (5 * r7);\n c = (d1 >>> 13); d1 &= 0x1fff;\n d1 += h5 * (5 * r6);\n d1 += h6 * (5 * r5);\n d1 += h7 * (5 * r4);\n d1 += h8 * (5 * r3);\n d1 += h9 * (5 * r2);\n c += (d1 >>> 13); d1 &= 0x1fff;\n\n d2 = c;\n d2 += h0 * r2;\n d2 += h1 * r1;\n d2 += h2 * r0;\n d2 += h3 * (5 * r9);\n d2 += h4 * (5 * r8);\n c = (d2 >>> 13); d2 &= 0x1fff;\n d2 += h5 * (5 * r7);\n d2 += h6 * (5 * r6);\n d2 += h7 * (5 * r5);\n d2 += h8 * (5 * r4);\n d2 += h9 * (5 * r3);\n c += (d2 >>> 13); d2 &= 0x1fff;\n\n d3 = c;\n d3 += h0 * r3;\n d3 += h1 * r2;\n d3 += h2 * r1;\n d3 += h3 * r0;\n d3 += h4 * (5 * r9);\n c = (d3 >>> 13); d3 &= 0x1fff;\n d3 += h5 * (5 * r8);\n d3 += h6 * (5 * r7);\n d3 += h7 * (5 * r6);\n d3 += h8 * (5 * r5);\n d3 += h9 * (5 * r4);\n c += (d3 >>> 13); d3 &= 0x1fff;\n\n d4 = c;\n d4 += h0 * r4;\n d4 += h1 * r3;\n d4 += h2 * r2;\n d4 += h3 * r1;\n d4 += h4 * r0;\n c = (d4 >>> 13); d4 &= 0x1fff;\n d4 += h5 * (5 * r9);\n d4 += h6 * (5 * r8);\n d4 += h7 * (5 * r7);\n d4 += h8 * (5 * r6);\n d4 += h9 * (5 * r5);\n c += (d4 >>> 13); d4 &= 0x1fff;\n\n d5 = c;\n d5 += h0 * r5;\n d5 += h1 * r4;\n d5 += h2 * r3;\n d5 += h3 * r2;\n d5 += h4 * r1;\n c = (d5 >>> 13); d5 &= 0x1fff;\n d5 += h5 * r0;\n d5 += h6 * (5 * r9);\n d5 += h7 * (5 * r8);\n d5 += h8 * (5 * r7);\n d5 += h9 * (5 * r6);\n c += (d5 >>> 13); d5 &= 0x1fff;\n\n d6 = c;\n d6 += h0 * r6;\n d6 += h1 * r5;\n d6 += h2 * r4;\n d6 += h3 * r3;\n d6 += h4 * r2;\n c = (d6 >>> 13); d6 &= 0x1fff;\n d6 += h5 * r1;\n d6 += h6 * r0;\n d6 += h7 * (5 * r9);\n d6 += h8 * (5 * r8);\n d6 += h9 * (5 * r7);\n c += (d6 >>> 13); d6 &= 0x1fff;\n\n d7 = c;\n d7 += h0 * r7;\n d7 += h1 * r6;\n d7 += h2 * r5;\n d7 += h3 * r4;\n d7 += h4 * r3;\n c = (d7 >>> 13); d7 &= 0x1fff;\n d7 += h5 * r2;\n d7 += h6 * r1;\n d7 += h7 * r0;\n d7 += h8 * (5 * r9);\n d7 += h9 * (5 * r8);\n c += (d7 >>> 13); d7 &= 0x1fff;\n\n d8 = c;\n d8 += h0 * r8;\n d8 += h1 * r7;\n d8 += h2 * r6;\n d8 += h3 * r5;\n d8 += h4 * r4;\n c = (d8 >>> 13); d8 &= 0x1fff;\n d8 += h5 * r3;\n d8 += h6 * r2;\n d8 += h7 * r1;\n d8 += h8 * r0;\n d8 += h9 * (5 * r9);\n c += (d8 >>> 13); d8 &= 0x1fff;\n\n d9 = c;\n d9 += h0 * r9;\n d9 += h1 * r8;\n d9 += h2 * r7;\n d9 += h3 * r6;\n d9 += h4 * r5;\n c = (d9 >>> 13); d9 &= 0x1fff;\n d9 += h5 * r4;\n d9 += h6 * r3;\n d9 += h7 * r2;\n d9 += h8 * r1;\n d9 += h9 * r0;\n c += (d9 >>> 13); d9 &= 0x1fff;\n\n c = (((c << 2) + c)) | 0;\n c = (c + d0) | 0;\n d0 = c & 0x1fff;\n c = (c >>> 13);\n d1 += c;\n\n h0 = d0;\n h1 = d1;\n h2 = d2;\n h3 = d3;\n h4 = d4;\n h5 = d5;\n h6 = d6;\n h7 = d7;\n h8 = d8;\n h9 = d9;\n\n mpos += 16;\n bytes -= 16;\n }\n this.h[0] = h0;\n this.h[1] = h1;\n this.h[2] = h2;\n this.h[3] = h3;\n this.h[4] = h4;\n this.h[5] = h5;\n this.h[6] = h6;\n this.h[7] = h7;\n this.h[8] = h8;\n this.h[9] = h9;\n};\n\npoly1305.prototype.finish = function(mac, macpos) {\n var g = new Uint16Array(10);\n var c, mask, f, i;\n\n if (this.leftover) {\n i = this.leftover;\n this.buffer[i++] = 1;\n for (; i < 16; i++) this.buffer[i] = 0;\n this.fin = 1;\n this.blocks(this.buffer, 0, 16);\n }\n\n c = this.h[1] >>> 13;\n this.h[1] &= 0x1fff;\n for (i = 2; i < 10; i++) {\n this.h[i] += c;\n c = this.h[i] >>> 13;\n this.h[i] &= 0x1fff;\n }\n this.h[0] += (c * 5);\n c = this.h[0] >>> 13;\n this.h[0] &= 0x1fff;\n this.h[1] += c;\n c = this.h[1] >>> 13;\n this.h[1] &= 0x1fff;\n this.h[2] += c;\n\n g[0] = this.h[0] + 5;\n c = g[0] >>> 13;\n g[0] &= 0x1fff;\n for (i = 1; i < 10; i++) {\n g[i] = this.h[i] + c;\n c = g[i] >>> 13;\n g[i] &= 0x1fff;\n }\n g[9] -= (1 << 13);\n\n mask = (c ^ 1) - 1;\n for (i = 0; i < 10; i++) g[i] &= mask;\n mask = ~mask;\n for (i = 0; i < 10; i++) this.h[i] = (this.h[i] & mask) | g[i];\n\n this.h[0] = ((this.h[0] ) | (this.h[1] << 13) ) & 0xffff;\n this.h[1] = ((this.h[1] >>> 3) | (this.h[2] << 10) ) & 0xffff;\n this.h[2] = ((this.h[2] >>> 6) | (this.h[3] << 7) ) & 0xffff;\n this.h[3] = ((this.h[3] >>> 9) | (this.h[4] << 4) ) & 0xffff;\n this.h[4] = ((this.h[4] >>> 12) | (this.h[5] << 1) | (this.h[6] << 14)) & 0xffff;\n this.h[5] = ((this.h[6] >>> 2) | (this.h[7] << 11) ) & 0xffff;\n this.h[6] = ((this.h[7] >>> 5) | (this.h[8] << 8) ) & 0xffff;\n this.h[7] = ((this.h[8] >>> 8) | (this.h[9] << 5) ) & 0xffff;\n\n f = this.h[0] + this.pad[0];\n this.h[0] = f & 0xffff;\n for (i = 1; i < 8; i++) {\n f = (((this.h[i] + this.pad[i]) | 0) + (f >>> 16)) | 0;\n this.h[i] = f & 0xffff;\n }\n\n mac[macpos+ 0] = (this.h[0] >>> 0) & 0xff;\n mac[macpos+ 1] = (this.h[0] >>> 8) & 0xff;\n mac[macpos+ 2] = (this.h[1] >>> 0) & 0xff;\n mac[macpos+ 3] = (this.h[1] >>> 8) & 0xff;\n mac[macpos+ 4] = (this.h[2] >>> 0) & 0xff;\n mac[macpos+ 5] = (this.h[2] >>> 8) & 0xff;\n mac[macpos+ 6] = (this.h[3] >>> 0) & 0xff;\n mac[macpos+ 7] = (this.h[3] >>> 8) & 0xff;\n mac[macpos+ 8] = (this.h[4] >>> 0) & 0xff;\n mac[macpos+ 9] = (this.h[4] >>> 8) & 0xff;\n mac[macpos+10] = (this.h[5] >>> 0) & 0xff;\n mac[macpos+11] = (this.h[5] >>> 8) & 0xff;\n mac[macpos+12] = (this.h[6] >>> 0) & 0xff;\n mac[macpos+13] = (this.h[6] >>> 8) & 0xff;\n mac[macpos+14] = (this.h[7] >>> 0) & 0xff;\n mac[macpos+15] = (this.h[7] >>> 8) & 0xff;\n};\n\npoly1305.prototype.update = function(m, mpos, bytes) {\n var i, want;\n\n if (this.leftover) {\n want = (16 - this.leftover);\n if (want > bytes)\n want = bytes;\n for (i = 0; i < want; i++)\n this.buffer[this.leftover + i] = m[mpos+i];\n bytes -= want;\n mpos += want;\n this.leftover += want;\n if (this.leftover < 16)\n return;\n this.blocks(this.buffer, 0, 16);\n this.leftover = 0;\n }\n\n if (bytes >= 16) {\n want = bytes - (bytes % 16);\n this.blocks(m, mpos, want);\n mpos += want;\n bytes -= want;\n }\n\n if (bytes) {\n for (i = 0; i < bytes; i++)\n this.buffer[this.leftover + i] = m[mpos+i];\n this.leftover += bytes;\n }\n};\n\nfunction crypto_onetimeauth(out, outpos, m, mpos, n, k) {\n var s = new poly1305(k);\n s.update(m, mpos, n);\n s.finish(out, outpos);\n return 0;\n}\n\nfunction crypto_onetimeauth_verify(h, hpos, m, mpos, n, k) {\n var x = new Uint8Array(16);\n crypto_onetimeauth(x,0,m,mpos,n,k);\n return crypto_verify_16(h,hpos,x,0);\n}\n\nfunction crypto_secretbox(c,m,d,n,k) {\n var i;\n if (d < 32) return -1;\n crypto_stream_xor(c,0,m,0,d,n,k);\n crypto_onetimeauth(c, 16, c, 32, d - 32, c);\n for (i = 0; i < 16; i++) c[i] = 0;\n return 0;\n}\n\nfunction crypto_secretbox_open(m,c,d,n,k) {\n var i;\n var x = new Uint8Array(32);\n if (d < 32) return -1;\n crypto_stream(x,0,32,n,k);\n if (crypto_onetimeauth_verify(c, 16,c, 32,d - 32,x) !== 0) return -1;\n crypto_stream_xor(m,0,c,0,d,n,k);\n for (i = 0; i < 32; i++) m[i] = 0;\n return 0;\n}\n\nfunction set25519(r, a) {\n var i;\n for (i = 0; i < 16; i++) r[i] = a[i]|0;\n}\n\nfunction car25519(o) {\n var i, v, c = 1;\n for (i = 0; i < 16; i++) {\n v = o[i] + c + 65535;\n c = Math.floor(v / 65536);\n o[i] = v - c * 65536;\n }\n o[0] += c-1 + 37 * (c-1);\n}\n\nfunction sel25519(p, q, b) {\n var t, c = ~(b-1);\n for (var i = 0; i < 16; i++) {\n t = c & (p[i] ^ q[i]);\n p[i] ^= t;\n q[i] ^= t;\n }\n}\n\nfunction pack25519(o, n) {\n var i, j, b;\n var m = gf(), t = gf();\n for (i = 0; i < 16; i++) t[i] = n[i];\n car25519(t);\n car25519(t);\n car25519(t);\n for (j = 0; j < 2; j++) {\n m[0] = t[0] - 0xffed;\n for (i = 1; i < 15; i++) {\n m[i] = t[i] - 0xffff - ((m[i-1]>>16) & 1);\n m[i-1] &= 0xffff;\n }\n m[15] = t[15] - 0x7fff - ((m[14]>>16) & 1);\n b = (m[15]>>16) & 1;\n m[14] &= 0xffff;\n sel25519(t, m, 1-b);\n }\n for (i = 0; i < 16; i++) {\n o[2*i] = t[i] & 0xff;\n o[2*i+1] = t[i]>>8;\n }\n}\n\nfunction neq25519(a, b) {\n var c = new Uint8Array(32), d = new Uint8Array(32);\n pack25519(c, a);\n pack25519(d, b);\n return crypto_verify_32(c, 0, d, 0);\n}\n\nfunction par25519(a) {\n var d = new Uint8Array(32);\n pack25519(d, a);\n return d[0] & 1;\n}\n\nfunction unpack25519(o, n) {\n var i;\n for (i = 0; i < 16; i++) o[i] = n[2*i] + (n[2*i+1] << 8);\n o[15] &= 0x7fff;\n}\n\nfunction A(o, a, b) {\n for (var i = 0; i < 16; i++) o[i] = a[i] + b[i];\n}\n\nfunction Z(o, a, b) {\n for (var i = 0; i < 16; i++) o[i] = a[i] - b[i];\n}\n\nfunction M(o, a, b) {\n var v, c,\n t0 = 0, t1 = 0, t2 = 0, t3 = 0, t4 = 0, t5 = 0, t6 = 0, t7 = 0,\n t8 = 0, t9 = 0, t10 = 0, t11 = 0, t12 = 0, t13 = 0, t14 = 0, t15 = 0,\n t16 = 0, t17 = 0, t18 = 0, t19 = 0, t20 = 0, t21 = 0, t22 = 0, t23 = 0,\n t24 = 0, t25 = 0, t26 = 0, t27 = 0, t28 = 0, t29 = 0, t30 = 0,\n b0 = b[0],\n b1 = b[1],\n b2 = b[2],\n b3 = b[3],\n b4 = b[4],\n b5 = b[5],\n b6 = b[6],\n b7 = b[7],\n b8 = b[8],\n b9 = b[9],\n b10 = b[10],\n b11 = b[11],\n b12 = b[12],\n b13 = b[13],\n b14 = b[14],\n b15 = b[15];\n\n v = a[0];\n t0 += v * b0;\n t1 += v * b1;\n t2 += v * b2;\n t3 += v * b3;\n t4 += v * b4;\n t5 += v * b5;\n t6 += v * b6;\n t7 += v * b7;\n t8 += v * b8;\n t9 += v * b9;\n t10 += v * b10;\n t11 += v * b11;\n t12 += v * b12;\n t13 += v * b13;\n t14 += v * b14;\n t15 += v * b15;\n v = a[1];\n t1 += v * b0;\n t2 += v * b1;\n t3 += v * b2;\n t4 += v * b3;\n t5 += v * b4;\n t6 += v * b5;\n t7 += v * b6;\n t8 += v * b7;\n t9 += v * b8;\n t10 += v * b9;\n t11 += v * b10;\n t12 += v * b11;\n t13 += v * b12;\n t14 += v * b13;\n t15 += v * b14;\n t16 += v * b15;\n v = a[2];\n t2 += v * b0;\n t3 += v * b1;\n t4 += v * b2;\n t5 += v * b3;\n t6 += v * b4;\n t7 += v * b5;\n t8 += v * b6;\n t9 += v * b7;\n t10 += v * b8;\n t11 += v * b9;\n t12 += v * b10;\n t13 += v * b11;\n t14 += v * b12;\n t15 += v * b13;\n t16 += v * b14;\n t17 += v * b15;\n v = a[3];\n t3 += v * b0;\n t4 += v * b1;\n t5 += v * b2;\n t6 += v * b3;\n t7 += v * b4;\n t8 += v * b5;\n t9 += v * b6;\n t10 += v * b7;\n t11 += v * b8;\n t12 += v * b9;\n t13 += v * b10;\n t14 += v * b11;\n t15 += v * b12;\n t16 += v * b13;\n t17 += v * b14;\n t18 += v * b15;\n v = a[4];\n t4 += v * b0;\n t5 += v * b1;\n t6 += v * b2;\n t7 += v * b3;\n t8 += v * b4;\n t9 += v * b5;\n t10 += v * b6;\n t11 += v * b7;\n t12 += v * b8;\n t13 += v * b9;\n t14 += v * b10;\n t15 += v * b11;\n t16 += v * b12;\n t17 += v * b13;\n t18 += v * b14;\n t19 += v * b15;\n v = a[5];\n t5 += v * b0;\n t6 += v * b1;\n t7 += v * b2;\n t8 += v * b3;\n t9 += v * b4;\n t10 += v * b5;\n t11 += v * b6;\n t12 += v * b7;\n t13 += v * b8;\n t14 += v * b9;\n t15 += v * b10;\n t16 += v * b11;\n t17 += v * b12;\n t18 += v * b13;\n t19 += v * b14;\n t20 += v * b15;\n v = a[6];\n t6 += v * b0;\n t7 += v * b1;\n t8 += v * b2;\n t9 += v * b3;\n t10 += v * b4;\n t11 += v * b5;\n t12 += v * b6;\n t13 += v * b7;\n t14 += v * b8;\n t15 += v * b9;\n t16 += v * b10;\n t17 += v * b11;\n t18 += v * b12;\n t19 += v * b13;\n t20 += v * b14;\n t21 += v * b15;\n v = a[7];\n t7 += v * b0;\n t8 += v * b1;\n t9 += v * b2;\n t10 += v * b3;\n t11 += v * b4;\n t12 += v * b5;\n t13 += v * b6;\n t14 += v * b7;\n t15 += v * b8;\n t16 += v * b9;\n t17 += v * b10;\n t18 += v * b11;\n t19 += v * b12;\n t20 += v * b13;\n t21 += v * b14;\n t22 += v * b15;\n v = a[8];\n t8 += v * b0;\n t9 += v * b1;\n t10 += v * b2;\n t11 += v * b3;\n t12 += v * b4;\n t13 += v * b5;\n t14 += v * b6;\n t15 += v * b7;\n t16 += v * b8;\n t17 += v * b9;\n t18 += v * b10;\n t19 += v * b11;\n t20 += v * b12;\n t21 += v * b13;\n t22 += v * b14;\n t23 += v * b15;\n v = a[9];\n t9 += v * b0;\n t10 += v * b1;\n t11 += v * b2;\n t12 += v * b3;\n t13 += v * b4;\n t14 += v * b5;\n t15 += v * b6;\n t16 += v * b7;\n t17 += v * b8;\n t18 += v * b9;\n t19 += v * b10;\n t20 += v * b11;\n t21 += v * b12;\n t22 += v * b13;\n t23 += v * b14;\n t24 += v * b15;\n v = a[10];\n t10 += v * b0;\n t11 += v * b1;\n t12 += v * b2;\n t13 += v * b3;\n t14 += v * b4;\n t15 += v * b5;\n t16 += v * b6;\n t17 += v * b7;\n t18 += v * b8;\n t19 += v * b9;\n t20 += v * b10;\n t21 += v * b11;\n t22 += v * b12;\n t23 += v * b13;\n t24 += v * b14;\n t25 += v * b15;\n v = a[11];\n t11 += v * b0;\n t12 += v * b1;\n t13 += v * b2;\n t14 += v * b3;\n t15 += v * b4;\n t16 += v * b5;\n t17 += v * b6;\n t18 += v * b7;\n t19 += v * b8;\n t20 += v * b9;\n t21 += v * b10;\n t22 += v * b11;\n t23 += v * b12;\n t24 += v * b13;\n t25 += v * b14;\n t26 += v * b15;\n v = a[12];\n t12 += v * b0;\n t13 += v * b1;\n t14 += v * b2;\n t15 += v * b3;\n t16 += v * b4;\n t17 += v * b5;\n t18 += v * b6;\n t19 += v * b7;\n t20 += v * b8;\n t21 += v * b9;\n t22 += v * b10;\n t23 += v * b11;\n t24 += v * b12;\n t25 += v * b13;\n t26 += v * b14;\n t27 += v * b15;\n v = a[13];\n t13 += v * b0;\n t14 += v * b1;\n t15 += v * b2;\n t16 += v * b3;\n t17 += v * b4;\n t18 += v * b5;\n t19 += v * b6;\n t20 += v * b7;\n t21 += v * b8;\n t22 += v * b9;\n t23 += v * b10;\n t24 += v * b11;\n t25 += v * b12;\n t26 += v * b13;\n t27 += v * b14;\n t28 += v * b15;\n v = a[14];\n t14 += v * b0;\n t15 += v * b1;\n t16 += v * b2;\n t17 += v * b3;\n t18 += v * b4;\n t19 += v * b5;\n t20 += v * b6;\n t21 += v * b7;\n t22 += v * b8;\n t23 += v * b9;\n t24 += v * b10;\n t25 += v * b11;\n t26 += v * b12;\n t27 += v * b13;\n t28 += v * b14;\n t29 += v * b15;\n v = a[15];\n t15 += v * b0;\n t16 += v * b1;\n t17 += v * b2;\n t18 += v * b3;\n t19 += v * b4;\n t20 += v * b5;\n t21 += v * b6;\n t22 += v * b7;\n t23 += v * b8;\n t24 += v * b9;\n t25 += v * b10;\n t26 += v * b11;\n t27 += v * b12;\n t28 += v * b13;\n t29 += v * b14;\n t30 += v * b15;\n\n t0 += 38 * t16;\n t1 += 38 * t17;\n t2 += 38 * t18;\n t3 += 38 * t19;\n t4 += 38 * t20;\n t5 += 38 * t21;\n t6 += 38 * t22;\n t7 += 38 * t23;\n t8 += 38 * t24;\n t9 += 38 * t25;\n t10 += 38 * t26;\n t11 += 38 * t27;\n t12 += 38 * t28;\n t13 += 38 * t29;\n t14 += 38 * t30;\n // t15 left as is\n\n // first car\n c = 1;\n v = t0 + c + 65535; c = Math.floor(v / 65536); t0 = v - c * 65536;\n v = t1 + c + 65535; c = Math.floor(v / 65536); t1 = v - c * 65536;\n v = t2 + c + 65535; c = Math.floor(v / 65536); t2 = v - c * 65536;\n v = t3 + c + 65535; c = Math.floor(v / 65536); t3 = v - c * 65536;\n v = t4 + c + 65535; c = Math.floor(v / 65536); t4 = v - c * 65536;\n v = t5 + c + 65535; c = Math.floor(v / 65536); t5 = v - c * 65536;\n v = t6 + c + 65535; c = Math.floor(v / 65536); t6 = v - c * 65536;\n v = t7 + c + 65535; c = Math.floor(v / 65536); t7 = v - c * 65536;\n v = t8 + c + 65535; c = Math.floor(v / 65536); t8 = v - c * 65536;\n v = t9 + c + 65535; c = Math.floor(v / 65536); t9 = v - c * 65536;\n v = t10 + c + 65535; c = Math.floor(v / 65536); t10 = v - c * 65536;\n v = t11 + c + 65535; c = Math.floor(v / 65536); t11 = v - c * 65536;\n v = t12 + c + 65535; c = Math.floor(v / 65536); t12 = v - c * 65536;\n v = t13 + c + 65535; c = Math.floor(v / 65536); t13 = v - c * 65536;\n v = t14 + c + 65535; c = Math.floor(v / 65536); t14 = v - c * 65536;\n v = t15 + c + 65535; c = Math.floor(v / 65536); t15 = v - c * 65536;\n t0 += c-1 + 37 * (c-1);\n\n // second car\n c = 1;\n v = t0 + c + 65535; c = Math.floor(v / 65536); t0 = v - c * 65536;\n v = t1 + c + 65535; c = Math.floor(v / 65536); t1 = v - c * 65536;\n v = t2 + c + 65535; c = Math.floor(v / 65536); t2 = v - c * 65536;\n v = t3 + c + 65535; c = Math.floor(v / 65536); t3 = v - c * 65536;\n v = t4 + c + 65535; c = Math.floor(v / 65536); t4 = v - c * 65536;\n v = t5 + c + 65535; c = Math.floor(v / 65536); t5 = v - c * 65536;\n v = t6 + c + 65535; c = Math.floor(v / 65536); t6 = v - c * 65536;\n v = t7 + c + 65535; c = Math.floor(v / 65536); t7 = v - c * 65536;\n v = t8 + c + 65535; c = Math.floor(v / 65536); t8 = v - c * 65536;\n v = t9 + c + 65535; c = Math.floor(v / 65536); t9 = v - c * 65536;\n v = t10 + c + 65535; c = Math.floor(v / 65536); t10 = v - c * 65536;\n v = t11 + c + 65535; c = Math.floor(v / 65536); t11 = v - c * 65536;\n v = t12 + c + 65535; c = Math.floor(v / 65536); t12 = v - c * 65536;\n v = t13 + c + 65535; c = Math.floor(v / 65536); t13 = v - c * 65536;\n v = t14 + c + 65535; c = Math.floor(v / 65536); t14 = v - c * 65536;\n v = t15 + c + 65535; c = Math.floor(v / 65536); t15 = v - c * 65536;\n t0 += c-1 + 37 * (c-1);\n\n o[ 0] = t0;\n o[ 1] = t1;\n o[ 2] = t2;\n o[ 3] = t3;\n o[ 4] = t4;\n o[ 5] = t5;\n o[ 6] = t6;\n o[ 7] = t7;\n o[ 8] = t8;\n o[ 9] = t9;\n o[10] = t10;\n o[11] = t11;\n o[12] = t12;\n o[13] = t13;\n o[14] = t14;\n o[15] = t15;\n}\n\nfunction S(o, a) {\n M(o, a, a);\n}\n\nfunction inv25519(o, i) {\n var c = gf();\n var a;\n for (a = 0; a < 16; a++) c[a] = i[a];\n for (a = 253; a >= 0; a--) {\n S(c, c);\n if(a !== 2 && a !== 4) M(c, c, i);\n }\n for (a = 0; a < 16; a++) o[a] = c[a];\n}\n\nfunction pow2523(o, i) {\n var c = gf();\n var a;\n for (a = 0; a < 16; a++) c[a] = i[a];\n for (a = 250; a >= 0; a--) {\n S(c, c);\n if(a !== 1) M(c, c, i);\n }\n for (a = 0; a < 16; a++) o[a] = c[a];\n}\n\nfunction crypto_scalarmult(q, n, p) {\n var z = new Uint8Array(32);\n var x = new Float64Array(80), r, i;\n var a = gf(), b = gf(), c = gf(),\n d = gf(), e = gf(), f = gf();\n for (i = 0; i < 31; i++) z[i] = n[i];\n z[31]=(n[31]&127)|64;\n z[0]&=248;\n unpack25519(x,p);\n for (i = 0; i < 16; i++) {\n b[i]=x[i];\n d[i]=a[i]=c[i]=0;\n }\n a[0]=d[0]=1;\n for (i=254; i>=0; --i) {\n r=(z[i>>>3]>>>(i&7))&1;\n sel25519(a,b,r);\n sel25519(c,d,r);\n A(e,a,c);\n Z(a,a,c);\n A(c,b,d);\n Z(b,b,d);\n S(d,e);\n S(f,a);\n M(a,c,a);\n M(c,b,e);\n A(e,a,c);\n Z(a,a,c);\n S(b,a);\n Z(c,d,f);\n M(a,c,_121665);\n A(a,a,d);\n M(c,c,a);\n M(a,d,f);\n M(d,b,x);\n S(b,e);\n sel25519(a,b,r);\n sel25519(c,d,r);\n }\n for (i = 0; i < 16; i++) {\n x[i+16]=a[i];\n x[i+32]=c[i];\n x[i+48]=b[i];\n x[i+64]=d[i];\n }\n var x32 = x.subarray(32);\n var x16 = x.subarray(16);\n inv25519(x32,x32);\n M(x16,x16,x32);\n pack25519(q,x16);\n return 0;\n}\n\nfunction crypto_scalarmult_base(q, n) {\n return crypto_scalarmult(q, n, _9);\n}\n\nfunction crypto_box_keypair(y, x) {\n randombytes(x, 32);\n return crypto_scalarmult_base(y, x);\n}\n\nfunction crypto_box_beforenm(k, y, x) {\n var s = new Uint8Array(32);\n crypto_scalarmult(s, x, y);\n return crypto_core_hsalsa20(k, _0, s, sigma);\n}\n\nvar crypto_box_afternm = crypto_secretbox;\nvar crypto_box_open_afternm = crypto_secretbox_open;\n\nfunction crypto_box(c, m, d, n, y, x) {\n var k = new Uint8Array(32);\n crypto_box_beforenm(k, y, x);\n return crypto_box_afternm(c, m, d, n, k);\n}\n\nfunction crypto_box_open(m, c, d, n, y, x) {\n var k = new Uint8Array(32);\n crypto_box_beforenm(k, y, x);\n return crypto_box_open_afternm(m, c, d, n, k);\n}\n\nvar K = [\n 0x428a2f98, 0xd728ae22, 0x71374491, 0x23ef65cd,\n 0xb5c0fbcf, 0xec4d3b2f, 0xe9b5dba5, 0x8189dbbc,\n 0x3956c25b, 0xf348b538, 0x59f111f1, 0xb605d019,\n 0x923f82a4, 0xaf194f9b, 0xab1c5ed5, 0xda6d8118,\n 0xd807aa98, 0xa3030242, 0x12835b01, 0x45706fbe,\n 0x243185be, 0x4ee4b28c, 0x550c7dc3, 0xd5ffb4e2,\n 0x72be5d74, 0xf27b896f, 0x80deb1fe, 0x3b1696b1,\n 0x9bdc06a7, 0x25c71235, 0xc19bf174, 0xcf692694,\n 0xe49b69c1, 0x9ef14ad2, 0xefbe4786, 0x384f25e3,\n 0x0fc19dc6, 0x8b8cd5b5, 0x240ca1cc, 0x77ac9c65,\n 0x2de92c6f, 0x592b0275, 0x4a7484aa, 0x6ea6e483,\n 0x5cb0a9dc, 0xbd41fbd4, 0x76f988da, 0x831153b5,\n 0x983e5152, 0xee66dfab, 0xa831c66d, 0x2db43210,\n 0xb00327c8, 0x98fb213f, 0xbf597fc7, 0xbeef0ee4,\n 0xc6e00bf3, 0x3da88fc2, 0xd5a79147, 0x930aa725,\n 0x06ca6351, 0xe003826f, 0x14292967, 0x0a0e6e70,\n 0x27b70a85, 0x46d22ffc, 0x2e1b2138, 0x5c26c926,\n 0x4d2c6dfc, 0x5ac42aed, 0x53380d13, 0x9d95b3df,\n 0x650a7354, 0x8baf63de, 0x766a0abb, 0x3c77b2a8,\n 0x81c2c92e, 0x47edaee6, 0x92722c85, 0x1482353b,\n 0xa2bfe8a1, 0x4cf10364, 0xa81a664b, 0xbc423001,\n 0xc24b8b70, 0xd0f89791, 0xc76c51a3, 0x0654be30,\n 0xd192e819, 0xd6ef5218, 0xd6990624, 0x5565a910,\n 0xf40e3585, 0x5771202a, 0x106aa070, 0x32bbd1b8,\n 0x19a4c116, 0xb8d2d0c8, 0x1e376c08, 0x5141ab53,\n 0x2748774c, 0xdf8eeb99, 0x34b0bcb5, 0xe19b48a8,\n 0x391c0cb3, 0xc5c95a63, 0x4ed8aa4a, 0xe3418acb,\n 0x5b9cca4f, 0x7763e373, 0x682e6ff3, 0xd6b2b8a3,\n 0x748f82ee, 0x5defb2fc, 0x78a5636f, 0x43172f60,\n 0x84c87814, 0xa1f0ab72, 0x8cc70208, 0x1a6439ec,\n 0x90befffa, 0x23631e28, 0xa4506ceb, 0xde82bde9,\n 0xbef9a3f7, 0xb2c67915, 0xc67178f2, 0xe372532b,\n 0xca273ece, 0xea26619c, 0xd186b8c7, 0x21c0c207,\n 0xeada7dd6, 0xcde0eb1e, 0xf57d4f7f, 0xee6ed178,\n 0x06f067aa, 0x72176fba, 0x0a637dc5, 0xa2c898a6,\n 0x113f9804, 0xbef90dae, 0x1b710b35, 0x131c471b,\n 0x28db77f5, 0x23047d84, 0x32caab7b, 0x40c72493,\n 0x3c9ebe0a, 0x15c9bebc, 0x431d67c4, 0x9c100d4c,\n 0x4cc5d4be, 0xcb3e42b6, 0x597f299c, 0xfc657e2a,\n 0x5fcb6fab, 0x3ad6faec, 0x6c44198c, 0x4a475817\n];\n\nfunction crypto_hashblocks_hl(hh, hl, m, n) {\n var wh = new Int32Array(16), wl = new Int32Array(16),\n bh0, bh1, bh2, bh3, bh4, bh5, bh6, bh7,\n bl0, bl1, bl2, bl3, bl4, bl5, bl6, bl7,\n th, tl, i, j, h, l, a, b, c, d;\n\n var ah0 = hh[0],\n ah1 = hh[1],\n ah2 = hh[2],\n ah3 = hh[3],\n ah4 = hh[4],\n ah5 = hh[5],\n ah6 = hh[6],\n ah7 = hh[7],\n\n al0 = hl[0],\n al1 = hl[1],\n al2 = hl[2],\n al3 = hl[3],\n al4 = hl[4],\n al5 = hl[5],\n al6 = hl[6],\n al7 = hl[7];\n\n var pos = 0;\n while (n >= 128) {\n for (i = 0; i < 16; i++) {\n j = 8 * i + pos;\n wh[i] = (m[j+0] << 24) | (m[j+1] << 16) | (m[j+2] << 8) | m[j+3];\n wl[i] = (m[j+4] << 24) | (m[j+5] << 16) | (m[j+6] << 8) | m[j+7];\n }\n for (i = 0; i < 80; i++) {\n bh0 = ah0;\n bh1 = ah1;\n bh2 = ah2;\n bh3 = ah3;\n bh4 = ah4;\n bh5 = ah5;\n bh6 = ah6;\n bh7 = ah7;\n\n bl0 = al0;\n bl1 = al1;\n bl2 = al2;\n bl3 = al3;\n bl4 = al4;\n bl5 = al5;\n bl6 = al6;\n bl7 = al7;\n\n // add\n h = ah7;\n l = al7;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n // Sigma1\n h = ((ah4 >>> 14) | (al4 << (32-14))) ^ ((ah4 >>> 18) | (al4 << (32-18))) ^ ((al4 >>> (41-32)) | (ah4 << (32-(41-32))));\n l = ((al4 >>> 14) | (ah4 << (32-14))) ^ ((al4 >>> 18) | (ah4 << (32-18))) ^ ((ah4 >>> (41-32)) | (al4 << (32-(41-32))));\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // Ch\n h = (ah4 & ah5) ^ (~ah4 & ah6);\n l = (al4 & al5) ^ (~al4 & al6);\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // K\n h = K[i*2];\n l = K[i*2+1];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // w\n h = wh[i%16];\n l = wl[i%16];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n th = c & 0xffff | d << 16;\n tl = a & 0xffff | b << 16;\n\n // add\n h = th;\n l = tl;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n // Sigma0\n h = ((ah0 >>> 28) | (al0 << (32-28))) ^ ((al0 >>> (34-32)) | (ah0 << (32-(34-32)))) ^ ((al0 >>> (39-32)) | (ah0 << (32-(39-32))));\n l = ((al0 >>> 28) | (ah0 << (32-28))) ^ ((ah0 >>> (34-32)) | (al0 << (32-(34-32)))) ^ ((ah0 >>> (39-32)) | (al0 << (32-(39-32))));\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // Maj\n h = (ah0 & ah1) ^ (ah0 & ah2) ^ (ah1 & ah2);\n l = (al0 & al1) ^ (al0 & al2) ^ (al1 & al2);\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n bh7 = (c & 0xffff) | (d << 16);\n bl7 = (a & 0xffff) | (b << 16);\n\n // add\n h = bh3;\n l = bl3;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = th;\n l = tl;\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n bh3 = (c & 0xffff) | (d << 16);\n bl3 = (a & 0xffff) | (b << 16);\n\n ah1 = bh0;\n ah2 = bh1;\n ah3 = bh2;\n ah4 = bh3;\n ah5 = bh4;\n ah6 = bh5;\n ah7 = bh6;\n ah0 = bh7;\n\n al1 = bl0;\n al2 = bl1;\n al3 = bl2;\n al4 = bl3;\n al5 = bl4;\n al6 = bl5;\n al7 = bl6;\n al0 = bl7;\n\n if (i%16 === 15) {\n for (j = 0; j < 16; j++) {\n // add\n h = wh[j];\n l = wl[j];\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = wh[(j+9)%16];\n l = wl[(j+9)%16];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // sigma0\n th = wh[(j+1)%16];\n tl = wl[(j+1)%16];\n h = ((th >>> 1) | (tl << (32-1))) ^ ((th >>> 8) | (tl << (32-8))) ^ (th >>> 7);\n l = ((tl >>> 1) | (th << (32-1))) ^ ((tl >>> 8) | (th << (32-8))) ^ ((tl >>> 7) | (th << (32-7)));\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n // sigma1\n th = wh[(j+14)%16];\n tl = wl[(j+14)%16];\n h = ((th >>> 19) | (tl << (32-19))) ^ ((tl >>> (61-32)) | (th << (32-(61-32)))) ^ (th >>> 6);\n l = ((tl >>> 19) | (th << (32-19))) ^ ((th >>> (61-32)) | (tl << (32-(61-32)))) ^ ((tl >>> 6) | (th << (32-6)));\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n wh[j] = (c & 0xffff) | (d << 16);\n wl[j] = (a & 0xffff) | (b << 16);\n }\n }\n }\n\n // add\n h = ah0;\n l = al0;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[0];\n l = hl[0];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[0] = ah0 = (c & 0xffff) | (d << 16);\n hl[0] = al0 = (a & 0xffff) | (b << 16);\n\n h = ah1;\n l = al1;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[1];\n l = hl[1];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[1] = ah1 = (c & 0xffff) | (d << 16);\n hl[1] = al1 = (a & 0xffff) | (b << 16);\n\n h = ah2;\n l = al2;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[2];\n l = hl[2];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[2] = ah2 = (c & 0xffff) | (d << 16);\n hl[2] = al2 = (a & 0xffff) | (b << 16);\n\n h = ah3;\n l = al3;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[3];\n l = hl[3];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[3] = ah3 = (c & 0xffff) | (d << 16);\n hl[3] = al3 = (a & 0xffff) | (b << 16);\n\n h = ah4;\n l = al4;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[4];\n l = hl[4];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[4] = ah4 = (c & 0xffff) | (d << 16);\n hl[4] = al4 = (a & 0xffff) | (b << 16);\n\n h = ah5;\n l = al5;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[5];\n l = hl[5];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[5] = ah5 = (c & 0xffff) | (d << 16);\n hl[5] = al5 = (a & 0xffff) | (b << 16);\n\n h = ah6;\n l = al6;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[6];\n l = hl[6];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[6] = ah6 = (c & 0xffff) | (d << 16);\n hl[6] = al6 = (a & 0xffff) | (b << 16);\n\n h = ah7;\n l = al7;\n\n a = l & 0xffff; b = l >>> 16;\n c = h & 0xffff; d = h >>> 16;\n\n h = hh[7];\n l = hl[7];\n\n a += l & 0xffff; b += l >>> 16;\n c += h & 0xffff; d += h >>> 16;\n\n b += a >>> 16;\n c += b >>> 16;\n d += c >>> 16;\n\n hh[7] = ah7 = (c & 0xffff) | (d << 16);\n hl[7] = al7 = (a & 0xffff) | (b << 16);\n\n pos += 128;\n n -= 128;\n }\n\n return n;\n}\n\nfunction crypto_hash(out, m, n) {\n var hh = new Int32Array(8),\n hl = new Int32Array(8),\n x = new Uint8Array(256),\n i, b = n;\n\n hh[0] = 0x6a09e667;\n hh[1] = 0xbb67ae85;\n hh[2] = 0x3c6ef372;\n hh[3] = 0xa54ff53a;\n hh[4] = 0x510e527f;\n hh[5] = 0x9b05688c;\n hh[6] = 0x1f83d9ab;\n hh[7] = 0x5be0cd19;\n\n hl[0] = 0xf3bcc908;\n hl[1] = 0x84caa73b;\n hl[2] = 0xfe94f82b;\n hl[3] = 0x5f1d36f1;\n hl[4] = 0xade682d1;\n hl[5] = 0x2b3e6c1f;\n hl[6] = 0xfb41bd6b;\n hl[7] = 0x137e2179;\n\n crypto_hashblocks_hl(hh, hl, m, n);\n n %= 128;\n\n for (i = 0; i < n; i++) x[i] = m[b-n+i];\n x[n] = 128;\n\n n = 256-128*(n<112?1:0);\n x[n-9] = 0;\n ts64(x, n-8, (b / 0x20000000) | 0, b << 3);\n crypto_hashblocks_hl(hh, hl, x, n);\n\n for (i = 0; i < 8; i++) ts64(out, 8*i, hh[i], hl[i]);\n\n return 0;\n}\n\nfunction add(p, q) {\n var a = gf(), b = gf(), c = gf(),\n d = gf(), e = gf(), f = gf(),\n g = gf(), h = gf(), t = gf();\n\n Z(a, p[1], p[0]);\n Z(t, q[1], q[0]);\n M(a, a, t);\n A(b, p[0], p[1]);\n A(t, q[0], q[1]);\n M(b, b, t);\n M(c, p[3], q[3]);\n M(c, c, D2);\n M(d, p[2], q[2]);\n A(d, d, d);\n Z(e, b, a);\n Z(f, d, c);\n A(g, d, c);\n A(h, b, a);\n\n M(p[0], e, f);\n M(p[1], h, g);\n M(p[2], g, f);\n M(p[3], e, h);\n}\n\nfunction cswap(p, q, b) {\n var i;\n for (i = 0; i < 4; i++) {\n sel25519(p[i], q[i], b);\n }\n}\n\nfunction pack(r, p) {\n var tx = gf(), ty = gf(), zi = gf();\n inv25519(zi, p[2]);\n M(tx, p[0], zi);\n M(ty, p[1], zi);\n pack25519(r, ty);\n r[31] ^= par25519(tx) << 7;\n}\n\nfunction scalarmult(p, q, s) {\n var b, i;\n set25519(p[0], gf0);\n set25519(p[1], gf1);\n set25519(p[2], gf1);\n set25519(p[3], gf0);\n for (i = 255; i >= 0; --i) {\n b = (s[(i/8)|0] >> (i&7)) & 1;\n cswap(p, q, b);\n add(q, p);\n add(p, p);\n cswap(p, q, b);\n }\n}\n\nfunction scalarbase(p, s) {\n var q = [gf(), gf(), gf(), gf()];\n set25519(q[0], X);\n set25519(q[1], Y);\n set25519(q[2], gf1);\n M(q[3], X, Y);\n scalarmult(p, q, s);\n}\n\nfunction crypto_sign_keypair(pk, sk, seeded) {\n var d = new Uint8Array(64);\n var p = [gf(), gf(), gf(), gf()];\n var i;\n\n if (!seeded) randombytes(sk, 32);\n crypto_hash(d, sk, 32);\n d[0] &= 248;\n d[31] &= 127;\n d[31] |= 64;\n\n scalarbase(p, d);\n pack(pk, p);\n\n for (i = 0; i < 32; i++) sk[i+32] = pk[i];\n return 0;\n}\n\nvar L = new Float64Array([0xed, 0xd3, 0xf5, 0x5c, 0x1a, 0x63, 0x12, 0x58, 0xd6, 0x9c, 0xf7, 0xa2, 0xde, 0xf9, 0xde, 0x14, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0x10]);\n\nfunction modL(r, x) {\n var carry, i, j, k;\n for (i = 63; i >= 32; --i) {\n carry = 0;\n for (j = i - 32, k = i - 12; j < k; ++j) {\n x[j] += carry - 16 * x[i] * L[j - (i - 32)];\n carry = Math.floor((x[j] + 128) / 256);\n x[j] -= carry * 256;\n }\n x[j] += carry;\n x[i] = 0;\n }\n carry = 0;\n for (j = 0; j < 32; j++) {\n x[j] += carry - (x[31] >> 4) * L[j];\n carry = x[j] >> 8;\n x[j] &= 255;\n }\n for (j = 0; j < 32; j++) x[j] -= carry * L[j];\n for (i = 0; i < 32; i++) {\n x[i+1] += x[i] >> 8;\n r[i] = x[i] & 255;\n }\n}\n\nfunction reduce(r) {\n var x = new Float64Array(64), i;\n for (i = 0; i < 64; i++) x[i] = r[i];\n for (i = 0; i < 64; i++) r[i] = 0;\n modL(r, x);\n}\n\n// Note: difference from C - smlen returned, not passed as argument.\nfunction crypto_sign(sm, m, n, sk) {\n var d = new Uint8Array(64), h = new Uint8Array(64), r = new Uint8Array(64);\n var i, j, x = new Float64Array(64);\n var p = [gf(), gf(), gf(), gf()];\n\n crypto_hash(d, sk, 32);\n d[0] &= 248;\n d[31] &= 127;\n d[31] |= 64;\n\n var smlen = n + 64;\n for (i = 0; i < n; i++) sm[64 + i] = m[i];\n for (i = 0; i < 32; i++) sm[32 + i] = d[32 + i];\n\n crypto_hash(r, sm.subarray(32), n+32);\n reduce(r);\n scalarbase(p, r);\n pack(sm, p);\n\n for (i = 32; i < 64; i++) sm[i] = sk[i];\n crypto_hash(h, sm, n + 64);\n reduce(h);\n\n for (i = 0; i < 64; i++) x[i] = 0;\n for (i = 0; i < 32; i++) x[i] = r[i];\n for (i = 0; i < 32; i++) {\n for (j = 0; j < 32; j++) {\n x[i+j] += h[i] * d[j];\n }\n }\n\n modL(sm.subarray(32), x);\n return smlen;\n}\n\nfunction unpackneg(r, p) {\n var t = gf(), chk = gf(), num = gf(),\n den = gf(), den2 = gf(), den4 = gf(),\n den6 = gf();\n\n set25519(r[2], gf1);\n unpack25519(r[1], p);\n S(num, r[1]);\n M(den, num, D);\n Z(num, num, r[2]);\n A(den, r[2], den);\n\n S(den2, den);\n S(den4, den2);\n M(den6, den4, den2);\n M(t, den6, num);\n M(t, t, den);\n\n pow2523(t, t);\n M(t, t, num);\n M(t, t, den);\n M(t, t, den);\n M(r[0], t, den);\n\n S(chk, r[0]);\n M(chk, chk, den);\n if (neq25519(chk, num)) M(r[0], r[0], I);\n\n S(chk, r[0]);\n M(chk, chk, den);\n if (neq25519(chk, num)) return -1;\n\n if (par25519(r[0]) === (p[31]>>7)) Z(r[0], gf0, r[0]);\n\n M(r[3], r[0], r[1]);\n return 0;\n}\n\nfunction crypto_sign_open(m, sm, n, pk) {\n var i;\n var t = new Uint8Array(32), h = new Uint8Array(64);\n var p = [gf(), gf(), gf(), gf()],\n q = [gf(), gf(), gf(), gf()];\n\n if (n < 64) return -1;\n\n if (unpackneg(q, pk)) return -1;\n\n for (i = 0; i < n; i++) m[i] = sm[i];\n for (i = 0; i < 32; i++) m[i+32] = pk[i];\n crypto_hash(h, m, n);\n reduce(h);\n scalarmult(p, q, h);\n\n scalarbase(q, sm.subarray(32));\n add(p, q);\n pack(t, p);\n\n n -= 64;\n if (crypto_verify_32(sm, 0, t, 0)) {\n for (i = 0; i < n; i++) m[i] = 0;\n return -1;\n }\n\n for (i = 0; i < n; i++) m[i] = sm[i + 64];\n return n;\n}\n\nvar crypto_secretbox_KEYBYTES = 32,\n crypto_secretbox_NONCEBYTES = 24,\n crypto_secretbox_ZEROBYTES = 32,\n crypto_secretbox_BOXZEROBYTES = 16,\n crypto_scalarmult_BYTES = 32,\n crypto_scalarmult_SCALARBYTES = 32,\n crypto_box_PUBLICKEYBYTES = 32,\n crypto_box_SECRETKEYBYTES = 32,\n crypto_box_BEFORENMBYTES = 32,\n crypto_box_NONCEBYTES = crypto_secretbox_NONCEBYTES,\n crypto_box_ZEROBYTES = crypto_secretbox_ZEROBYTES,\n crypto_box_BOXZEROBYTES = crypto_secretbox_BOXZEROBYTES,\n crypto_sign_BYTES = 64,\n crypto_sign_PUBLICKEYBYTES = 32,\n crypto_sign_SECRETKEYBYTES = 64,\n crypto_sign_SEEDBYTES = 32,\n crypto_hash_BYTES = 64;\n\nnacl.lowlevel = {\n crypto_core_hsalsa20: crypto_core_hsalsa20,\n crypto_stream_xor: crypto_stream_xor,\n crypto_stream: crypto_stream,\n crypto_stream_salsa20_xor: crypto_stream_salsa20_xor,\n crypto_stream_salsa20: crypto_stream_salsa20,\n crypto_onetimeauth: crypto_onetimeauth,\n crypto_onetimeauth_verify: crypto_onetimeauth_verify,\n crypto_verify_16: crypto_verify_16,\n crypto_verify_32: crypto_verify_32,\n crypto_secretbox: crypto_secretbox,\n crypto_secretbox_open: crypto_secretbox_open,\n crypto_scalarmult: crypto_scalarmult,\n crypto_scalarmult_base: crypto_scalarmult_base,\n crypto_box_beforenm: crypto_box_beforenm,\n crypto_box_afternm: crypto_box_afternm,\n crypto_box: crypto_box,\n crypto_box_open: crypto_box_open,\n crypto_box_keypair: crypto_box_keypair,\n crypto_hash: crypto_hash,\n crypto_sign: crypto_sign,\n crypto_sign_keypair: crypto_sign_keypair,\n crypto_sign_open: crypto_sign_open,\n\n crypto_secretbox_KEYBYTES: crypto_secretbox_KEYBYTES,\n crypto_secretbox_NONCEBYTES: crypto_secretbox_NONCEBYTES,\n crypto_secretbox_ZEROBYTES: crypto_secretbox_ZEROBYTES,\n crypto_secretbox_BOXZEROBYTES: crypto_secretbox_BOXZEROBYTES,\n crypto_scalarmult_BYTES: crypto_scalarmult_BYTES,\n crypto_scalarmult_SCALARBYTES: crypto_scalarmult_SCALARBYTES,\n crypto_box_PUBLICKEYBYTES: crypto_box_PUBLICKEYBYTES,\n crypto_box_SECRETKEYBYTES: crypto_box_SECRETKEYBYTES,\n crypto_box_BEFORENMBYTES: crypto_box_BEFORENMBYTES,\n crypto_box_NONCEBYTES: crypto_box_NONCEBYTES,\n crypto_box_ZEROBYTES: crypto_box_ZEROBYTES,\n crypto_box_BOXZEROBYTES: crypto_box_BOXZEROBYTES,\n crypto_sign_BYTES: crypto_sign_BYTES,\n crypto_sign_PUBLICKEYBYTES: crypto_sign_PUBLICKEYBYTES,\n crypto_sign_SECRETKEYBYTES: crypto_sign_SECRETKEYBYTES,\n crypto_sign_SEEDBYTES: crypto_sign_SEEDBYTES,\n crypto_hash_BYTES: crypto_hash_BYTES,\n\n gf: gf,\n D: D,\n L: L,\n pack25519: pack25519,\n unpack25519: unpack25519,\n M: M,\n A: A,\n S: S,\n Z: Z,\n pow2523: pow2523,\n add: add,\n set25519: set25519,\n modL: modL,\n scalarmult: scalarmult,\n scalarbase: scalarbase,\n};\n\n/* High-level API */\n\nfunction checkLengths(k, n) {\n if (k.length !== crypto_secretbox_KEYBYTES) throw new Error('bad key size');\n if (n.length !== crypto_secretbox_NONCEBYTES) throw new Error('bad nonce size');\n}\n\nfunction checkBoxLengths(pk, sk) {\n if (pk.length !== crypto_box_PUBLICKEYBYTES) throw new Error('bad public key size');\n if (sk.length !== crypto_box_SECRETKEYBYTES) throw new Error('bad secret key size');\n}\n\nfunction checkArrayTypes() {\n for (var i = 0; i < arguments.length; i++) {\n if (!(arguments[i] instanceof Uint8Array))\n throw new TypeError('unexpected type, use Uint8Array');\n }\n}\n\nfunction cleanup(arr) {\n for (var i = 0; i < arr.length; i++) arr[i] = 0;\n}\n\nnacl.randomBytes = function(n) {\n var b = new Uint8Array(n);\n randombytes(b, n);\n return b;\n};\n\nnacl.secretbox = function(msg, nonce, key) {\n checkArrayTypes(msg, nonce, key);\n checkLengths(key, nonce);\n var m = new Uint8Array(crypto_secretbox_ZEROBYTES + msg.length);\n var c = new Uint8Array(m.length);\n for (var i = 0; i < msg.length; i++) m[i+crypto_secretbox_ZEROBYTES] = msg[i];\n crypto_secretbox(c, m, m.length, nonce, key);\n return c.subarray(crypto_secretbox_BOXZEROBYTES);\n};\n\nnacl.secretbox.open = function(box, nonce, key) {\n checkArrayTypes(box, nonce, key);\n checkLengths(key, nonce);\n var c = new Uint8Array(crypto_secretbox_BOXZEROBYTES + box.length);\n var m = new Uint8Array(c.length);\n for (var i = 0; i < box.length; i++) c[i+crypto_secretbox_BOXZEROBYTES] = box[i];\n if (c.length < 32) return null;\n if (crypto_secretbox_open(m, c, c.length, nonce, key) !== 0) return null;\n return m.subarray(crypto_secretbox_ZEROBYTES);\n};\n\nnacl.secretbox.keyLength = crypto_secretbox_KEYBYTES;\nnacl.secretbox.nonceLength = crypto_secretbox_NONCEBYTES;\nnacl.secretbox.overheadLength = crypto_secretbox_BOXZEROBYTES;\n\nnacl.scalarMult = function(n, p) {\n checkArrayTypes(n, p);\n if (n.length !== crypto_scalarmult_SCALARBYTES) throw new Error('bad n size');\n if (p.length !== crypto_scalarmult_BYTES) throw new Error('bad p size');\n var q = new Uint8Array(crypto_scalarmult_BYTES);\n crypto_scalarmult(q, n, p);\n return q;\n};\n\nnacl.scalarMult.base = function(n) {\n checkArrayTypes(n);\n if (n.length !== crypto_scalarmult_SCALARBYTES) throw new Error('bad n size');\n var q = new Uint8Array(crypto_scalarmult_BYTES);\n crypto_scalarmult_base(q, n);\n return q;\n};\n\nnacl.scalarMult.scalarLength = crypto_scalarmult_SCALARBYTES;\nnacl.scalarMult.groupElementLength = crypto_scalarmult_BYTES;\n\nnacl.box = function(msg, nonce, publicKey, secretKey) {\n var k = nacl.box.before(publicKey, secretKey);\n return nacl.secretbox(msg, nonce, k);\n};\n\nnacl.box.before = function(publicKey, secretKey) {\n checkArrayTypes(publicKey, secretKey);\n checkBoxLengths(publicKey, secretKey);\n var k = new Uint8Array(crypto_box_BEFORENMBYTES);\n crypto_box_beforenm(k, publicKey, secretKey);\n return k;\n};\n\nnacl.box.after = nacl.secretbox;\n\nnacl.box.open = function(msg, nonce, publicKey, secretKey) {\n var k = nacl.box.before(publicKey, secretKey);\n return nacl.secretbox.open(msg, nonce, k);\n};\n\nnacl.box.open.after = nacl.secretbox.open;\n\nnacl.box.keyPair = function() {\n var pk = new Uint8Array(crypto_box_PUBLICKEYBYTES);\n var sk = new Uint8Array(crypto_box_SECRETKEYBYTES);\n crypto_box_keypair(pk, sk);\n return {publicKey: pk, secretKey: sk};\n};\n\nnacl.box.keyPair.fromSecretKey = function(secretKey) {\n checkArrayTypes(secretKey);\n if (secretKey.length !== crypto_box_SECRETKEYBYTES)\n throw new Error('bad secret key size');\n var pk = new Uint8Array(crypto_box_PUBLICKEYBYTES);\n crypto_scalarmult_base(pk, secretKey);\n return {publicKey: pk, secretKey: new Uint8Array(secretKey)};\n};\n\nnacl.box.publicKeyLength = crypto_box_PUBLICKEYBYTES;\nnacl.box.secretKeyLength = crypto_box_SECRETKEYBYTES;\nnacl.box.sharedKeyLength = crypto_box_BEFORENMBYTES;\nnacl.box.nonceLength = crypto_box_NONCEBYTES;\nnacl.box.overheadLength = nacl.secretbox.overheadLength;\n\nnacl.sign = function(msg, secretKey) {\n checkArrayTypes(msg, secretKey);\n if (secretKey.length !== crypto_sign_SECRETKEYBYTES)\n throw new Error('bad secret key size');\n var signedMsg = new Uint8Array(crypto_sign_BYTES+msg.length);\n crypto_sign(signedMsg, msg, msg.length, secretKey);\n return signedMsg;\n};\n\nnacl.sign.open = function(signedMsg, publicKey) {\n checkArrayTypes(signedMsg, publicKey);\n if (publicKey.length !== crypto_sign_PUBLICKEYBYTES)\n throw new Error('bad public key size');\n var tmp = new Uint8Array(signedMsg.length);\n var mlen = crypto_sign_open(tmp, signedMsg, signedMsg.length, publicKey);\n if (mlen < 0) return null;\n var m = new Uint8Array(mlen);\n for (var i = 0; i < m.length; i++) m[i] = tmp[i];\n return m;\n};\n\nnacl.sign.detached = function(msg, secretKey) {\n var signedMsg = nacl.sign(msg, secretKey);\n var sig = new Uint8Array(crypto_sign_BYTES);\n for (var i = 0; i < sig.length; i++) sig[i] = signedMsg[i];\n return sig;\n};\n\nnacl.sign.detached.verify = function(msg, sig, publicKey) {\n checkArrayTypes(msg, sig, publicKey);\n if (sig.length !== crypto_sign_BYTES)\n throw new Error('bad signature size');\n if (publicKey.length !== crypto_sign_PUBLICKEYBYTES)\n throw new Error('bad public key size');\n var sm = new Uint8Array(crypto_sign_BYTES + msg.length);\n var m = new Uint8Array(crypto_sign_BYTES + msg.length);\n var i;\n for (i = 0; i < crypto_sign_BYTES; i++) sm[i] = sig[i];\n for (i = 0; i < msg.length; i++) sm[i+crypto_sign_BYTES] = msg[i];\n return (crypto_sign_open(m, sm, sm.length, publicKey) >= 0);\n};\n\nnacl.sign.keyPair = function() {\n var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES);\n var sk = new Uint8Array(crypto_sign_SECRETKEYBYTES);\n crypto_sign_keypair(pk, sk);\n return {publicKey: pk, secretKey: sk};\n};\n\nnacl.sign.keyPair.fromSecretKey = function(secretKey) {\n checkArrayTypes(secretKey);\n if (secretKey.length !== crypto_sign_SECRETKEYBYTES)\n throw new Error('bad secret key size');\n var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES);\n for (var i = 0; i < pk.length; i++) pk[i] = secretKey[32+i];\n return {publicKey: pk, secretKey: new Uint8Array(secretKey)};\n};\n\nnacl.sign.keyPair.fromSeed = function(seed) {\n checkArrayTypes(seed);\n if (seed.length !== crypto_sign_SEEDBYTES)\n throw new Error('bad seed size');\n var pk = new Uint8Array(crypto_sign_PUBLICKEYBYTES);\n var sk = new Uint8Array(crypto_sign_SECRETKEYBYTES);\n for (var i = 0; i < 32; i++) sk[i] = seed[i];\n crypto_sign_keypair(pk, sk, true);\n return {publicKey: pk, secretKey: sk};\n};\n\nnacl.sign.publicKeyLength = crypto_sign_PUBLICKEYBYTES;\nnacl.sign.secretKeyLength = crypto_sign_SECRETKEYBYTES;\nnacl.sign.seedLength = crypto_sign_SEEDBYTES;\nnacl.sign.signatureLength = crypto_sign_BYTES;\n\nnacl.hash = function(msg) {\n checkArrayTypes(msg);\n var h = new Uint8Array(crypto_hash_BYTES);\n crypto_hash(h, msg, msg.length);\n return h;\n};\n\nnacl.hash.hashLength = crypto_hash_BYTES;\n\nnacl.verify = function(x, y) {\n checkArrayTypes(x, y);\n // Zero length arguments are considered not equal.\n if (x.length === 0 || y.length === 0) return false;\n if (x.length !== y.length) return false;\n return (vn(x, 0, y, 0, x.length) === 0) ? true : false;\n};\n\nnacl.setPRNG = function(fn) {\n randombytes = fn;\n};\n\n(function() {\n // Initialize PRNG if environment provides CSPRNG.\n // If not, methods calling randombytes will throw.\n var crypto = typeof self !== 'undefined' ? (self.crypto || self.msCrypto) : null;\n if (crypto && crypto.getRandomValues) {\n // Browsers.\n var QUOTA = 65536;\n nacl.setPRNG(function(x, n) {\n var i, v = new Uint8Array(n);\n for (i = 0; i < n; i += QUOTA) {\n crypto.getRandomValues(v.subarray(i, i + Math.min(n - i, QUOTA)));\n }\n for (i = 0; i < n; i++) x[i] = v[i];\n cleanup(v);\n });\n } else if (typeof require !== 'undefined') {\n // Node.js.\n crypto = require('crypto');\n if (crypto && crypto.randomBytes) {\n nacl.setPRNG(function(x, n) {\n var i, v = crypto.randomBytes(n);\n for (i = 0; i < n; i++) x[i] = v[i];\n cleanup(v);\n });\n }\n }\n})();\n\n})(typeof module !== 'undefined' && module.exports ? module.exports : (self.nacl = self.nacl || {}));\n","import * as crypto from \"crypto\";\nimport * as nacl from \"tweetnacl\";\nimport { createAxisLogger } from \"../utils/axis-logger\";\n\nexport type ProofType = 1 | 2 | 3 | 4;\n\nexport interface ProofVerificationResult {\n valid: boolean;\n actorId?: string;\n error?: string;\n metadata?: Record<string, any>;\n}\n\nexport interface MTLSContext {\n clientCertPem?: string;\n clientCertFingerprint?: string;\n clientCertSubject?: string;\n clientCertIssuer?: string;\n verified?: boolean;\n}\n\nexport interface DeviceSEContext {\n deviceId: string;\n signature: Uint8Array;\n publicKey: Uint8Array;\n challenge?: Uint8Array;\n}\n\nexport class ProofVerificationService {\n private readonly logger = createAxisLogger(ProofVerificationService.name);\n\n private readonly deviceKeys = new Map<string, Uint8Array>();\n private readonly trustedCerts = new Map<\n string,\n { actorId: string; issuedAt: number }\n >();\n\n async verifyProof(\n proofType: ProofType,\n proofRef: Uint8Array,\n context: {\n signTarget?: Uint8Array;\n signature?: Uint8Array;\n mtls?: MTLSContext;\n deviceSE?: DeviceSEContext;\n },\n ): Promise<ProofVerificationResult> {\n switch (proofType) {\n case 1:\n return this.verifyCapsuleProof(proofRef);\n case 2:\n return this.verifyJWTProof(proofRef);\n case 3:\n return this.verifyMTLSProof(context.mtls);\n case 4:\n return this.verifyDeviceSEProof(\n context.signTarget,\n context.signature,\n context.deviceSE,\n );\n default:\n return { valid: false, error: `Unknown proof type: ${proofType}` };\n }\n }\n\n private async verifyCapsuleProof(\n proofRef: Uint8Array,\n ): Promise<ProofVerificationResult> {\n const capsuleId = new TextDecoder().decode(proofRef);\n return {\n valid: true,\n metadata: { capsuleId, requiresCapsuleValidation: true },\n };\n }\n\n private async verifyJWTProof(\n proofRef: Uint8Array,\n ): Promise<ProofVerificationResult> {\n try {\n const token = new TextDecoder().decode(proofRef);\n const parts = token.split(\".\");\n\n if (parts.length !== 3) {\n return { valid: false, error: \"Invalid JWT format\" };\n }\n\n const payload = JSON.parse(Buffer.from(parts[1], \"base64url\").toString());\n\n if (payload.exp && Date.now() / 1000 > payload.exp) {\n return { valid: false, error: \"JWT expired\" };\n }\n\n if (payload.nbf && Date.now() / 1000 < payload.nbf) {\n return { valid: false, error: \"JWT not yet valid\" };\n }\n\n return {\n valid: true,\n actorId: payload.sub || payload.actor_id,\n metadata: { iss: payload.iss, scope: payload.scope },\n };\n } catch (e) {\n const message = e instanceof Error ? e.message : \"Unknown error\";\n return { valid: false, error: `JWT parse error: ${message}` };\n }\n }\n\n private async verifyMTLSProof(\n mtls?: MTLSContext,\n ): Promise<ProofVerificationResult> {\n if (!mtls) {\n return { valid: false, error: \"No mTLS context provided\" };\n }\n\n if (!mtls.verified) {\n return { valid: false, error: \"mTLS not verified by TLS terminator\" };\n }\n\n if (mtls.clientCertFingerprint) {\n const trusted = this.trustedCerts.get(mtls.clientCertFingerprint);\n if (trusted) {\n return {\n valid: true,\n actorId: trusted.actorId,\n metadata: {\n fingerprint: mtls.clientCertFingerprint,\n subject: mtls.clientCertSubject,\n },\n };\n }\n }\n\n if (mtls.clientCertSubject) {\n const cnMatch = mtls.clientCertSubject.match(/CN=([^,]+)/);\n if (cnMatch) {\n return {\n valid: true,\n actorId: cnMatch[1],\n metadata: {\n subject: mtls.clientCertSubject,\n issuer: mtls.clientCertIssuer,\n },\n };\n }\n }\n\n return { valid: false, error: \"Could not extract actor from certificate\" };\n }\n\n private async verifyDeviceSEProof(\n signTarget?: Uint8Array,\n signature?: Uint8Array,\n deviceSE?: DeviceSEContext,\n ): Promise<ProofVerificationResult> {\n if (!deviceSE || !signTarget || !signature) {\n return { valid: false, error: \"Missing Device SE context\" };\n }\n\n let publicKey = deviceSE.publicKey;\n\n const registeredKey = this.deviceKeys.get(deviceSE.deviceId);\n if (registeredKey) {\n publicKey = registeredKey;\n }\n\n if (!publicKey || publicKey.length !== 32) {\n return {\n valid: false,\n error: \"Invalid or unregistered device public key\",\n };\n }\n\n try {\n const valid = nacl.sign.detached.verify(signTarget, signature, publicKey);\n\n if (!valid) {\n return { valid: false, error: \"Device signature verification failed\" };\n }\n\n return {\n valid: true,\n actorId: deviceSE.deviceId,\n metadata: { deviceId: deviceSE.deviceId, proofType: \"DEVICE_SE\" },\n };\n } catch (e) {\n const message = e instanceof Error ? e.message : \"Unknown error\";\n return {\n valid: false,\n error: `Signature verification error: ${message}`,\n };\n }\n }\n\n registerDeviceKey(deviceId: string, publicKey: Uint8Array): void {\n if (publicKey.length !== 32) {\n throw new Error(\"Device public key must be 32 bytes (Ed25519)\");\n }\n this.deviceKeys.set(deviceId, publicKey);\n this.logger.log(`Registered device key for ${deviceId}`);\n }\n\n unregisterDevice(deviceId: string): boolean {\n return this.deviceKeys.delete(deviceId);\n }\n\n registerMTLSCert(fingerprint: string, actorId: string): void {\n this.trustedCerts.set(fingerprint, { actorId, issuedAt: Date.now() });\n this.logger.log(`Registered mTLS cert ${fingerprint} for actor ${actorId}`);\n }\n\n revokeMTLSCert(fingerprint: string): boolean {\n return this.trustedCerts.delete(fingerprint);\n }\n\n static calculateFingerprint(certPem: string): string {\n const der = Buffer.from(\n certPem\n .replace(/-----BEGIN CERTIFICATE-----/, \"\")\n .replace(/-----END CERTIFICATE-----/, \"\")\n .replace(/\\s/g, \"\"),\n \"base64\",\n );\n return crypto.createHash(\"sha256\").update(der).digest(\"hex\");\n }\n}\n","import { decodeTLVsList } from \"../core/tlv\";\n\nexport enum BodyProfile {\n RAW = 0,\n TLV_MAP = 1,\n OBJ = 2,\n ARR = 3,\n}\n\nexport interface BodyProfileValidation {\n valid: boolean;\n error?: string;\n profile: BodyProfile;\n}\n\n/**\n * Validates AXIS frame body against declared body profile.\n */\nexport class BodyProfileValidator {\n validate(body: Uint8Array, profile: BodyProfile): BodyProfileValidation {\n switch (profile) {\n case BodyProfile.RAW:\n return this.validateRaw(body);\n case BodyProfile.TLV_MAP:\n return this.validateTlvMap(body);\n case BodyProfile.OBJ:\n return this.validateObj(body);\n case BodyProfile.ARR:\n return this.validateArr(body);\n default:\n return {\n valid: false,\n error: `Unknown body profile: ${profile}`,\n profile,\n };\n }\n }\n\n private validateRaw(_body: Uint8Array): BodyProfileValidation {\n return { valid: true, profile: BodyProfile.RAW };\n }\n\n private validateTlvMap(body: Uint8Array): BodyProfileValidation {\n try {\n const tlvs = decodeTLVsList(body);\n for (const tlv of tlvs) {\n if (tlv.type === 254 || tlv.type === 255) {\n return {\n valid: false,\n error: \"TLV_MAP profile cannot contain nested OBJ/ARR types\",\n profile: BodyProfile.TLV_MAP,\n };\n }\n }\n return { valid: true, profile: BodyProfile.TLV_MAP };\n } catch (error) {\n const message = error instanceof Error ? error.message : \"Unknown error\";\n return {\n valid: false,\n error: `TLV_MAP decode failed: ${message}`,\n profile: BodyProfile.TLV_MAP,\n };\n }\n }\n\n private validateObj(body: Uint8Array): BodyProfileValidation {\n try {\n const tlvs = decodeTLVsList(body);\n const hasObj = tlvs.some((t) => t.type === 254);\n if (!hasObj && tlvs.length > 0) {\n return {\n valid: false,\n error: \"OBJ profile must contain OBJ type (254)\",\n profile: BodyProfile.OBJ,\n };\n }\n return { valid: true, profile: BodyProfile.OBJ };\n } catch (error) {\n const message = error instanceof Error ? error.message : \"Unknown error\";\n return {\n valid: false,\n error: `OBJ decode failed: ${message}`,\n profile: BodyProfile.OBJ,\n };\n }\n }\n\n private validateArr(body: Uint8Array): BodyProfileValidation {\n try {\n const tlvs = decodeTLVsList(body);\n const hasArr = tlvs.some((t) => t.type === 255);\n if (!hasArr && tlvs.length > 0) {\n return {\n valid: false,\n error: \"ARR profile must contain ARR type (255)\",\n profile: BodyProfile.ARR,\n };\n }\n return { valid: true, profile: BodyProfile.ARR };\n } catch (error) {\n const message = error instanceof Error ? error.message : \"Unknown error\";\n return {\n valid: false,\n error: `ARR decode failed: ${message}`,\n profile: BodyProfile.ARR,\n };\n }\n }\n}\n","import type { SensorInput } from \"../sensor/axis-sensor\";\n\nexport type AxisLawDecision = \"allow\" | \"deny\" | \"conditional\";\n\nexport interface AxisLawArticleSummary {\n article_id: string;\n article_type?: string;\n decision?: string;\n reason?: string;\n}\n\nexport interface AxisLawEvaluationContext {\n actorId?: string;\n intent?: string;\n audience?: string;\n tps?: string | number;\n country?: string;\n ip?: string;\n path?: string;\n clientId?: string;\n deviceId?: string;\n sessionId?: string;\n capsuleId?: string;\n metadata: Record<string, unknown>;\n packet?: Record<string, unknown>;\n frameBody?: unknown;\n}\n\nexport interface AxisLawEvaluationResult {\n decision: AxisLawDecision;\n reason: string;\n explanation?: string;\n denied?: AxisLawArticleSummary[];\n permitted?: AxisLawArticleSummary[];\n required?: AxisLawArticleSummary[];\n applicable?: AxisLawArticleSummary[];\n metadata?: Record<string, unknown>;\n}\n\nexport type AxisLawEvaluator =\n | ((\n context: AxisLawEvaluationContext,\n ) => AxisLawEvaluationResult | Promise<AxisLawEvaluationResult>);\n\nexport interface LawEvaluationSensorOptions {\n evaluator?: AxisLawEvaluator;\n conditionalDecision?: \"deny\" | \"flag\" | \"allow\";\n}\n\nexport function buildAxisLawEvaluationContext(\n input: SensorInput,\n): AxisLawEvaluationContext {\n const metadata = (input.metadata ?? {}) as Record<string, unknown>;\n const packet = input.packet as Record<string, unknown> | undefined;\n const packetBody =\n input.frameBody ??\n (packet?.body as unknown) ??\n (packet?.args as unknown) ??\n undefined;\n const capsuleId =\n (metadata.capsule_id as string | undefined) ??\n (metadata.capsuleId as string | undefined) ??\n (packet?.capsuleId as string | undefined) ??\n (input.clientId as string | undefined);\n const audience =\n (input.aud as string | undefined) ??\n (metadata.audience as string | undefined) ??\n (packet?.aud as string | undefined);\n const tps =\n (metadata.tps as string | number | undefined) ??\n (packet?.tps as string | number | undefined) ??\n (packet?.tickTps as string | number | undefined);\n\n return {\n actorId: input.actorId,\n intent: input.intent,\n audience,\n tps,\n country: input.country,\n ip: input.ip,\n path: input.path,\n clientId: input.clientId,\n deviceId: input.deviceId,\n sessionId: input.sessionId,\n capsuleId,\n metadata,\n packet,\n frameBody: packetBody,\n };\n}\n","export * from \"./law.types\";\n","/**\n * AXIS Risk Signal Types\n *\n * Protocol-level types for risk evaluation and signalling.\n * Used by sensors, risk gates, and anomaly detectors.\n */\n\n/**\n * A discrete risk signal emitted by a detector or sensor.\n * Signals are aggregated by the risk gate to produce a final RiskEvaluation.\n */\nexport interface RiskSignal {\n type: string;\n severity: 'low' | 'medium' | 'high' | 'critical';\n value: any;\n message: string;\n}\n\n/**\n * Granular risk gate decision outcomes.\n * More expressive than a binary ALLOW/DENY — covers step-up and witness flows.\n */\nexport enum RiskDecision {\n ALLOW = 'ALLOW',\n THROTTLE = 'THROTTLE',\n STEP_UP = 'STEP_UP',\n WITNESS = 'WITNESS',\n DENY = 'DENY',\n}\n\n/**\n * The result of a risk gate evaluation over a set of signals.\n */\nexport interface RiskEvaluation {\n decision: RiskDecision;\n reason?: string;\n retryAfterMs?: number;\n /** Confidence score in range [0, 1]. */\n confidence: number;\n signals: RiskSignal[];\n}\n","/**\n * AXIS Opcode Registry\n * Central registry of all allowed opcodes.\n * Unknown opcodes are rejected by default (no shadow endpoints).\n */\n\nexport const AXIS_OPCODES = new Set([\n 'CAPSULE.ISSUE',\n 'CAPSULE.BATCH',\n 'CAPSULE.REVOKE',\n 'INTENT.EXEC',\n 'ACTOR.KEY.ROTATE',\n 'ACTOR.KEY.REVOKE',\n 'ISSUER.KEY.ROTATE',\n // NestFlow opcodes\n 'AUTH.WEB.LOGIN',\n 'AUTH.WEB.SCAN',\n 'TICKAUTH.CREATE',\n 'TICKAUTH.FULFILL',\n 'TICKAUTH.REJECT',\n 'SESSION.ACTIVATE',\n 'SESSION.REFRESH',\n 'SESSION.LOGOUT',\n 'DEVICE.TRUST',\n 'DEVICE.PROMOTE',\n 'DEVICE.REVOKE',\n 'DEVICE.LIST',\n 'DEVICE.RENAME',\n 'IDENTITY.RECOVERY',\n 'IDENTITY.LOCK',\n]);\n\nexport function isKnownOpcode(op: string): boolean {\n return AXIS_OPCODES.has(op);\n}\n\n/**\n * Returns true if the opcode requires elevated permissions.\n */\nexport function isAdminOpcode(op: string): boolean {\n return (\n op.startsWith('ACTOR.KEY.') ||\n op.startsWith('ISSUER.KEY.') ||\n op.startsWith('IDENTITY.')\n );\n}\n","/**\n * AXIS Receipt Hash Construction\n * Canonical receipt chain hash — protocol invariant.\n * Any compliant implementation must produce identical hashes.\n */\nimport { createHash } from 'crypto';\n\n/** Canonical receipt effect types */\nexport type ReceiptEffect = 'ALLOW' | 'DENY' | 'ERROR';\n\n/**\n * Builds the canonical SHA-256 hash for a receipt in the chain.\n *\n * Field order (protocol-defined):\n * prevHash? | pid | actorId (utf8) | intent (utf8) | effect (utf8) | ts (utf8 string)\n *\n * @param prevHash Previous receipt hash (null for first receipt)\n * @param pid Process/packet ID (raw bytes)\n * @param actorId Actor identifier (string)\n * @param intent Intent name (string)\n * @param effect Execution effect ('ALLOW' | 'DENY' | 'ERROR')\n * @param ts Timestamp as bigint (milliseconds since epoch)\n * @returns 32-byte SHA-256 hash\n */\nexport function buildReceiptHash(\n prevHash: Buffer | null,\n pid: Buffer,\n actorId: string,\n intent: string,\n effect: ReceiptEffect,\n ts: bigint,\n): Buffer {\n const h = createHash('sha256');\n if (prevHash) h.update(prevHash);\n h.update(pid);\n h.update(Buffer.from(actorId, 'utf8'));\n h.update(Buffer.from(intent, 'utf8'));\n h.update(Buffer.from(effect, 'utf8'));\n h.update(Buffer.from(ts.toString(), 'utf8'));\n return h.digest();\n}\n","/**\n * AXIS Intent Sensitivity Classification\n * Protocol-level risk classification for intents.\n */\n\nexport enum IntentSensitivity {\n LOW = 1,\n MEDIUM = 2,\n HIGH = 3,\n CRITICAL = 4,\n}\n\n/**\n * Maps known intents to their sensitivity level.\n */\nexport const INTENT_SENSITIVITY_MAP: Record<string, IntentSensitivity> = {\n // System intents\n 'system.ping': IntentSensitivity.LOW,\n\n // Catalog intents\n 'catalog.list': IntentSensitivity.LOW,\n 'catalog.search': IntentSensitivity.LOW,\n 'catalog.intent.describe': IntentSensitivity.LOW,\n 'catalog.intent.complete': IntentSensitivity.LOW,\n\n // Stream intents\n 'stream.publish': IntentSensitivity.MEDIUM,\n 'stream.read': IntentSensitivity.MEDIUM,\n 'stream.subscribe': IntentSensitivity.MEDIUM,\n\n // File intents\n 'file.init': IntentSensitivity.MEDIUM,\n 'file.chunk': IntentSensitivity.MEDIUM,\n 'file.finalize': IntentSensitivity.MEDIUM,\n 'file.status': IntentSensitivity.LOW,\n\n // Passport intents\n 'passport.issue': IntentSensitivity.HIGH,\n 'passport.verify': IntentSensitivity.MEDIUM,\n 'passport.revoke': IntentSensitivity.CRITICAL,\n\n // Mail intents\n 'mail.send': IntentSensitivity.HIGH,\n\n // Admin intents\n 'admin.create_capsule': IntentSensitivity.CRITICAL,\n 'admin.revoke_capsule': IntentSensitivity.CRITICAL,\n 'admin.issue_node_cert': IntentSensitivity.CRITICAL,\n\n // NestFlow: Auth\n 'auth.web.login.request': IntentSensitivity.MEDIUM,\n 'auth.web.login.scan': IntentSensitivity.HIGH,\n\n // NestFlow: TickAuth\n 'tickauth.challenge.create': IntentSensitivity.MEDIUM,\n 'tickauth.challenge.fulfill': IntentSensitivity.HIGH,\n 'tickauth.challenge.reject': IntentSensitivity.MEDIUM,\n\n // NestFlow: Capsule issuance\n 'capsule.issue.login': IntentSensitivity.HIGH,\n 'capsule.issue.device_registration': IntentSensitivity.HIGH,\n 'capsule.issue.step_up': IntentSensitivity.HIGH,\n 'capsule.issue.recovery': IntentSensitivity.CRITICAL,\n\n // NestFlow: Session\n 'session.activate': IntentSensitivity.HIGH,\n 'session.refresh': IntentSensitivity.MEDIUM,\n 'session.logout': IntentSensitivity.LOW,\n\n // NestFlow: Device trust\n 'device.trust.request': IntentSensitivity.HIGH,\n 'device.trust.promote': IntentSensitivity.CRITICAL,\n 'device.revoke': IntentSensitivity.CRITICAL,\n 'device.list': IntentSensitivity.LOW,\n 'device.rename': IntentSensitivity.LOW,\n\n // NestFlow: Protected operations\n 'flow.publish': IntentSensitivity.MEDIUM,\n 'flow.delete': IntentSensitivity.HIGH,\n 'node.delete': IntentSensitivity.CRITICAL,\n 'secret.rotate': IntentSensitivity.CRITICAL,\n 'org.security.update': IntentSensitivity.CRITICAL,\n 'production.execution.approve': IntentSensitivity.CRITICAL,\n\n // NestFlow: Recovery\n 'identity.recovery.start': IntentSensitivity.CRITICAL,\n 'identity.recovery.complete': IntentSensitivity.CRITICAL,\n 'primary.device.rotate': IntentSensitivity.CRITICAL,\n 'identity.lock': IntentSensitivity.CRITICAL,\n 'identity.unlock': IntentSensitivity.CRITICAL,\n};\n\n/**\n * Classifies an intent's sensitivity level.\n *\n * Lookup strategy:\n * 1. Exact intent match\n * 2. Prefix wildcard match (realm.*)\n * 3. Default to MEDIUM\n */\nexport function classifyIntent(intent: string): IntentSensitivity {\n if (INTENT_SENSITIVITY_MAP[intent]) {\n return INTENT_SENSITIVITY_MAP[intent];\n }\n\n const realm = intent.split('.')[0];\n const wildcardKey = `${realm}.*`;\n if (INTENT_SENSITIVITY_MAP[wildcardKey]) {\n return INTENT_SENSITIVITY_MAP[wildcardKey];\n }\n\n return IntentSensitivity.MEDIUM;\n}\n\n/**\n * Returns the string name for a sensitivity level.\n */\nexport function sensitivityName(level: IntentSensitivity): string {\n switch (level) {\n case IntentSensitivity.LOW:\n return 'LOW';\n case IntentSensitivity.MEDIUM:\n return 'MEDIUM';\n case IntentSensitivity.HIGH:\n return 'HIGH';\n case IntentSensitivity.CRITICAL:\n return 'CRITICAL';\n }\n}\n","/**\n * AXIS Intent Timeout Configuration\n * Protocol-level per-intent execution time limits.\n */\n\n/**\n * Per-intent timeout configuration (milliseconds).\n * Patterns ending with '.*' match any intent with that prefix.\n */\nexport const INTENT_TIMEOUTS: Record<string, number> = {\n 'public.*': 5000,\n 'schema.*': 5000,\n 'catalog.*': 5000,\n 'health.*': 2000,\n\n 'file.upload': 60000,\n 'file.download': 60000,\n 'file.chunk': 30000,\n 'file.finalize': 30000,\n\n 'stream.*': 30000,\n\n 'passport.*': 15000,\n\n 'admin.*': 30000,\n};\n\n/** Default timeout for unspecified intents */\nexport const DEFAULT_TIMEOUT = 10000;\n\n/**\n * Resolves the timeout for a given intent.\n *\n * Lookup strategy:\n * 1. Exact intent match\n * 2. Prefix pattern match (e.g. 'file.*')\n * 3. DEFAULT_TIMEOUT\n */\nexport function resolveTimeout(intent: string): number {\n if (INTENT_TIMEOUTS[intent]) {\n return INTENT_TIMEOUTS[intent];\n }\n\n for (const [pattern, timeout] of Object.entries(INTENT_TIMEOUTS)) {\n if (pattern.endsWith('.*')) {\n const prefix = pattern.slice(0, -1);\n if (intent.startsWith(prefix)) {\n return timeout;\n }\n }\n }\n\n return DEFAULT_TIMEOUT;\n}\n","/**\n * AXIS Frame Shape Validator\n * Validates structural integrity of AXIS frames before cryptographic verification.\n */\n\n/**\n * Validates that a value has the structural shape of an AXIS Frame.\n * Checks version, required string fields, timestamp, signature envelope, and body.\n *\n * Note: This validates the JSON-level frame shape (v1 packet format).\n * For binary frame validation, use decodeFrame() which throws on malformed input.\n */\nexport function validateFrameShape(frame: any): boolean {\n if (!frame || typeof frame !== 'object') {\n return false;\n }\n\n if (frame.v !== 1) {\n return false;\n }\n\n const requiredStrings = ['pid', 'nonce', 'actorId', 'opcode'];\n for (const key of requiredStrings) {\n if (typeof frame[key] !== 'string' || frame[key].length < 6) {\n return false;\n }\n }\n\n if (typeof frame.ts !== 'number' || !Number.isFinite(frame.ts)) {\n return false;\n }\n\n if (\n frame.aud !== undefined &&\n (typeof frame.aud !== 'string' || frame.aud.length === 0)\n ) {\n return false;\n }\n\n if (!frame.sig || typeof frame.sig !== 'object') {\n return false;\n }\n\n if (frame.sig.alg !== 'EdDSA') {\n return false;\n }\n\n if (typeof frame.sig.kid !== 'string' || frame.sig.kid.length < 8) {\n return false;\n }\n\n if (typeof frame.sig.value !== 'string' || frame.sig.value.length < 32) {\n return false;\n }\n\n if (typeof frame.body !== 'object' || frame.body === null) {\n return false;\n }\n\n return true;\n}\n\n/**\n * Validates timestamp is within acceptable skew window.\n */\nexport function isTimestampValid(\n ts: number,\n skewSeconds: number = 120,\n): boolean {\n const now = Math.floor(Date.now() / 1000);\n const diff = Math.abs(now - ts);\n return diff <= skewSeconds;\n}\n","export const AXIS_UPLOAD_SESSION_STORE = 'AXIS_UPLOAD_SESSION_STORE';\nexport const AXIS_UPLOAD_FILE_STORE = 'AXIS_UPLOAD_FILE_STORE';\nexport const AXIS_UPLOAD_RECEIPT_SIGNER = 'AXIS_UPLOAD_RECEIPT_SIGNER';\n","import * as fs from 'fs';\nimport * as path from 'path';\n\nimport { UploadFileStat, UploadFileStore } from './upload.types';\n\nexport interface DiskUploadFileStoreOptions {\n uploadDir: string;\n chunkDir: string;\n}\n\nexport class DiskUploadFileStore implements UploadFileStore {\n private readonly uploadDir: string;\n private readonly chunkDir: string;\n\n constructor(options: DiskUploadFileStoreOptions) {\n this.uploadDir = options.uploadDir;\n this.chunkDir = options.chunkDir;\n }\n\n getFinalPath(fileId: string, filename?: string): string {\n const safeFilename = filename ? path.basename(filename) : fileId;\n return path.join(this.uploadDir, safeFilename);\n }\n\n getTempPath(fileId: string): string {\n const safeId = path.basename(fileId);\n return path.join(this.chunkDir, safeId);\n }\n\n async statFinal(\n fileId: string,\n filename?: string,\n ): Promise<UploadFileStat> {\n const finalPath = this.getFinalPath(fileId, filename);\n if (!fs.existsSync(finalPath)) {\n throw new Error('FILE_MISSING_ON_DISK');\n }\n const stat = fs.statSync(finalPath);\n return { path: finalPath, size: stat.size };\n }\n\n async readFinalRange(\n fileId: string,\n filename: string | undefined,\n start: number,\n length: number,\n ): Promise<Buffer> {\n const finalPath = this.getFinalPath(fileId, filename);\n const buffer = Buffer.alloc(length);\n const fd = fs.openSync(finalPath, 'r');\n try {\n fs.readSync(fd, buffer, 0, length, start);\n } finally {\n fs.closeSync(fd);\n }\n return buffer;\n }\n\n async hasTemp(fileId: string): Promise<boolean> {\n const tempPath = this.getTempPath(fileId);\n return fs.existsSync(tempPath);\n }\n\n async moveTempToFinal(\n fileId: string,\n filename?: string,\n ): Promise<string> {\n const tempPath = this.getTempPath(fileId);\n const finalPath = this.getFinalPath(fileId, filename);\n\n try {\n await fs.promises.rename(tempPath, finalPath);\n } catch {\n await fs.promises.copyFile(tempPath, finalPath);\n await fs.promises.unlink(tempPath);\n }\n\n return finalPath;\n }\n\n createTempReadStream(fileId: string): NodeJS.ReadableStream {\n const tempPath = this.getTempPath(fileId);\n return fs.createReadStream(tempPath);\n }\n}\n","import type { AxisObserverBinding } from \"../decorators/observer.decorator\";\nimport type { AxisObserverContext } from \"./axis-observer.interface\";\nimport { ObserverRegistry } from \"./registry/observer.registry\";\nimport { createAxisLogger } from \"../utils/axis-logger\";\n\nfunction unique<T>(values: T[]): T[] {\n return Array.from(new Set(values));\n}\n\nexport class ObserverDispatcherService {\n private readonly logger = createAxisLogger(ObserverDispatcherService.name);\n\n constructor(private readonly registry: ObserverRegistry) {}\n\n async dispatch(\n bindings: AxisObserverBinding[] | undefined,\n context: AxisObserverContext,\n ): Promise<void> {\n const explicitBindings = bindings || [];\n const implicitRegistrations = this.getImplicitRegistrations();\n\n if (!explicitBindings.length && implicitRegistrations.length === 0) {\n return;\n }\n\n const invoked = new Set<string>();\n\n const implicitBindings: AxisObserverBinding[] = implicitRegistrations.map(\n (registration) => ({\n refs: [registration.instance.constructor],\n events: registration.events,\n }),\n );\n\n const merged = mergeBindingRefs(explicitBindings, implicitBindings);\n\n for (const binding of merged) {\n if (\n binding.events &&\n binding.events.length > 0 &&\n !binding.events.includes(context.event)\n ) {\n continue;\n }\n\n for (const ref of binding.refs) {\n const registration = this.registry.resolve(ref);\n if (!registration) {\n this.logger.warn(`Observer ${String(ref)} could not be resolved`);\n continue;\n }\n\n if (invoked.has(registration.name)) continue;\n\n if (\n !matchesObserverIntent(registration.intents, context.intent) ||\n !matchesObserverHandler(registration.handlers, context.handler)\n ) {\n continue;\n }\n\n if (\n registration.events &&\n registration.events.length > 0 &&\n !registration.events.includes(context.event)\n ) {\n continue;\n }\n\n const observerContext: AxisObserverContext = {\n ...context,\n observerTags: unique([\n ...(registration.tags || []),\n ...(binding.tags || []),\n ...(context.observerTags || []),\n ]),\n };\n\n if (\n registration.instance.supports &&\n !registration.instance.supports(observerContext)\n ) {\n continue;\n }\n\n try {\n invoked.add(registration.name);\n await registration.instance.observe(observerContext);\n } catch (error: any) {\n this.logger.warn(\n `Observer ${registration.name} failed during ${context.event}: ${error.message}`,\n );\n }\n }\n }\n }\n\n private getImplicitRegistrations() {\n return this.registry.list();\n }\n}\n\nfunction matchesObserverIntent(\n intents: string[] | undefined,\n intent?: string,\n): boolean {\n if (!intents || intents.length === 0) {\n return true;\n }\n\n if (!intent) {\n return false;\n }\n\n return intents.includes(intent);\n}\n\nfunction normalizeHandlerToken(value: string): string {\n return value.trim().toLowerCase();\n}\n\nfunction matchesObserverHandler(\n handlers: string[] | undefined,\n handler?: string,\n): boolean {\n if (!handlers || handlers.length === 0) {\n return true;\n }\n\n if (!handler) {\n return false;\n }\n\n const normalizedHandler = normalizeHandlerToken(handler);\n return handlers.some((candidate) => {\n if (!candidate) {\n return false;\n }\n\n const normalizedCandidate = normalizeHandlerToken(candidate);\n return (\n normalizedHandler === normalizedCandidate ||\n normalizedHandler.endsWith(`.${normalizedCandidate}`) ||\n normalizedHandler.startsWith(`${normalizedCandidate}.`) ||\n normalizedCandidate.endsWith(`.${normalizedHandler}`) ||\n normalizedCandidate.startsWith(`${normalizedHandler}.`)\n );\n });\n}\n\nfunction observerRefKey(ref: { name?: string } | string | Function): string {\n return typeof ref === \"string\" ? ref : ref.name || \"(anonymous)\";\n}\n\nfunction mergeBindingRefs(\n ...bindingGroups: AxisObserverBinding[][]\n): AxisObserverBinding[] {\n const merged = new Map<string, AxisObserverBinding>();\n\n for (const bindings of bindingGroups) {\n for (const binding of bindings) {\n for (const ref of binding.refs) {\n const key = observerRefKey(ref);\n const current = merged.get(key);\n\n if (!current) {\n merged.set(key, {\n refs: [ref],\n tags: binding.tags ? [...new Set(binding.tags)] : undefined,\n events: binding.events ? [...new Set(binding.events)] : undefined,\n });\n continue;\n }\n\n current.tags = Array.from(\n new Set([...(current.tags || []), ...(binding.tags || [])]),\n );\n current.events =\n current.events === undefined || binding.events === undefined\n ? undefined\n : Array.from(new Set([...(current.events || []), ...binding.events]));\n }\n }\n }\n\n return Array.from(merged.values());\n}\n","import type { AxisObserverDefinition, AxisObserverRef } from \"../../decorators/observer.decorator\";\nimport type {\n AxisIntentObserver,\n AxisObserverRegistration,\n} from \"../axis-observer.interface\";\nimport { createAxisLogger } from \"../../utils/axis-logger\";\n\nexport class ObserverRegistry {\n private readonly logger = createAxisLogger(ObserverRegistry.name);\n private readonly byName = new Map<string, AxisObserverRegistration>();\n private readonly byType = new Map<Function, AxisObserverRegistration>();\n\n register(\n instance: AxisIntentObserver,\n meta: AxisObserverDefinition = {},\n ): void {\n const name = meta.name || instance.name || instance.constructor.name;\n const registration: AxisObserverRegistration = {\n name,\n instance,\n tags: meta.tags || [],\n events: meta.events,\n intents: meta.intents,\n handlers: meta.handlers,\n };\n\n this.byName.set(name, registration);\n this.byType.set(instance.constructor, registration);\n this.logger.debug(`Registered observer: ${name}`);\n }\n\n resolve(ref: AxisObserverRef): AxisObserverRegistration | undefined {\n if (typeof ref === \"string\") {\n return this.byName.get(ref);\n }\n\n return this.byType.get(ref) || this.byName.get(ref.name);\n }\n\n list(): AxisObserverRegistration[] {\n return Array.from(this.byName.values()).sort((left, right) =>\n left.name.localeCompare(right.name),\n );\n }\n\n clear(): void {\n this.byName.clear();\n this.byType.clear();\n }\n}\n","import type {\n AxisPostSensor,\n AxisPreSensor,\n AxisSensor,\n} from \"../../sensor/axis-sensor\";\nimport type { AxisIntentSensorRef } from \"../../decorators/intent.decorator\";\nimport { createAxisLogger } from \"../../utils/axis-logger\";\n\nexport interface AxisConfigReader {\n get<T = string>(key: string): T | undefined;\n}\n\n/**\n * AxisSensor Registry\n *\n * A central registry for all AXIS security sensors.\n */\nexport class SensorRegistry {\n private sensors: AxisSensor[] = [];\n private sensorsByName = new Map<string, AxisSensor>();\n private sensorsByType = new Map<Function, AxisSensor>();\n private readonly logger = createAxisLogger(SensorRegistry.name);\n\n constructor(private readonly configService?: AxisConfigReader) {}\n\n register(sensor: AxisSensor): void {\n if (!sensor.name) {\n throw new Error(\"AxisSensor must have a name\");\n }\n\n const enabledSensorsStr =\n this.configService?.get<string>(\"ENABLED_SENSORS\");\n const disabledSensorsStr =\n this.configService?.get<string>(\"DISABLED_SENSORS\");\n\n const enabledSensors = enabledSensorsStr\n ? enabledSensorsStr.split(\",\").map((s) => s.trim())\n : null;\n const disabledSensors = disabledSensorsStr\n ? disabledSensorsStr.split(\",\").map((s) => s.trim())\n : [];\n\n if (enabledSensors && !enabledSensors.includes(sensor.name)) {\n this.logger.log(\n `Skipping disabled sensor (not in ENABLED_SENSORS): ${sensor.name}`,\n );\n return;\n }\n\n if (disabledSensors.includes(sensor.name)) {\n this.logger.log(\n `Skipping disabled sensor (in DISABLED_SENSORS): ${sensor.name}`,\n );\n return;\n }\n\n if (sensor.order === undefined) {\n throw new Error(`AxisSensor \"${sensor.name}\" must have an order field`);\n }\n\n const isPreDecodeSensor = this.isPreDecodeSensor(sensor);\n const isPostDecodeSensor = this.isPostDecodeSensor(sensor);\n\n if (isPreDecodeSensor && sensor.order >= 40) {\n this.logger.warn(\n `AxisSensor \"${sensor.name}\" is marked as PRE_DECODE but has order ${sensor.order} (should be < 40)`,\n );\n }\n if (isPostDecodeSensor && sensor.order < 40) {\n this.logger.warn(\n `AxisSensor \"${sensor.name}\" is marked as POST_DECODE but has order ${sensor.order} (should be >= 40)`,\n );\n }\n\n this.sensors.push(sensor);\n this.indexSensor(sensor);\n const phaseLabel =\n typeof sensor.phase === \"string\"\n ? sensor.phase\n : sensor.phase?.phase || \"UNKNOWN\";\n this.logger.debug(\n `Registered sensor: ${sensor.name} (order: ${sensor.order}, phase: ${phaseLabel})`,\n );\n }\n\n list(): AxisSensor[] {\n return [...this.sensors].sort(\n (a, b) => (a.order ?? 999) - (b.order ?? 999),\n );\n }\n\n resolve(ref: AxisIntentSensorRef): AxisSensor | undefined {\n if (typeof ref === \"string\") {\n return this.sensorsByName.get(ref);\n }\n return this.sensorsByType.get(ref) ?? this.sensorsByName.get(ref.name);\n }\n\n getByName(name: string): AxisSensor | undefined {\n return this.sensorsByName.get(name);\n }\n\n getPreDecodeSensors(): AxisPreSensor[] {\n return this.list().filter((s): s is AxisPreSensor =>\n this.isPreDecodeSensor(s),\n );\n }\n\n getPostDecodeSensors(): AxisPostSensor[] {\n return this.list().filter((s): s is AxisPostSensor =>\n this.isPostDecodeSensor(s),\n );\n }\n\n getSensorCountByPhase(): { preDecodeCount: number; postDecodeCount: number } {\n return {\n preDecodeCount: this.getPreDecodeSensors().length,\n postDecodeCount: this.getPostDecodeSensors().length,\n };\n }\n\n clear(): void {\n this.sensors = [];\n this.sensorsByName.clear();\n this.sensorsByType.clear();\n }\n\n private isPreDecodeSensor(sensor: AxisSensor): boolean {\n const phase =\n typeof sensor.phase === \"string\" ? sensor.phase : sensor.phase?.phase;\n // Explicit phase metadata is authoritative; order is only the fallback.\n if (phase) return phase === \"PRE_DECODE\";\n return (sensor.order ?? 999) < 40;\n }\n\n private isPostDecodeSensor(sensor: AxisSensor): boolean {\n const phase =\n typeof sensor.phase === \"string\" ? sensor.phase : sensor.phase?.phase;\n // Explicit phase metadata is authoritative; order is only the fallback.\n if (phase) return phase === \"POST_DECODE\";\n return (sensor.order ?? 999) >= 40;\n }\n\n private indexSensor(sensor: AxisSensor): void {\n this.sensorsByName.set(sensor.name, sensor);\n\n const sensorType = sensor.constructor as Function | undefined;\n if (!sensorType) return;\n\n this.sensorsByType.set(sensorType, sensor);\n\n if (!this.sensorsByName.has(sensorType.name)) {\n this.sensorsByName.set(sensorType.name, sensor);\n }\n }\n}\n","import { randomBytes } from 'crypto';\n\n/* ─── Stage ─── */\n\nexport interface ObservationStage {\n name: string;\n status: 'ok' | 'fail' | 'skip';\n startMs: number;\n endMs?: number;\n durationMs?: number;\n reason?: string;\n code?: string;\n}\n\n/* ─── Sensor Record ─── */\n\nexport interface ObservationSensor {\n name: string;\n allowed: boolean;\n riskScore: number;\n durationMs: number;\n reasons: string[];\n code?: string;\n}\n\n/* ─── Observation (the execution witness) ─── */\n\nexport interface AxisObservation {\n /** Correlation ID (hex) */\n id: string;\n /** High-res start timestamp */\n startMs: number;\n /** Transport origin */\n transport: 'http' | 'ws';\n /** Client IP */\n ip?: string;\n /** Resolved intent */\n intent?: string;\n /** Actor ID (hex) */\n actorId?: string;\n /** Capsule ID */\n capsuleId?: string;\n\n /** Pipeline stages with timing */\n stages: ObservationStage[];\n /** Individual sensor decisions */\n sensors: ObservationSensor[];\n\n /** Final decision */\n decision?: 'ALLOW' | 'DENY';\n /** Machine-readable result code */\n resultCode?: string;\n /** HTTP status code */\n statusCode?: number;\n\n /** End timestamp */\n endMs?: number;\n /** Total duration */\n durationMs?: number;\n\n /** Extensible facts for downstream (receipt builder, audit, etc.) */\n facts: Record<string, unknown>;\n}\n\n/* ─── Factory ─── */\n\nexport function createObservation(\n transport: 'http' | 'ws',\n ip?: string,\n): AxisObservation {\n return {\n id: randomBytes(16).toString('hex'),\n startMs: Date.now(),\n transport,\n ip,\n stages: [],\n sensors: [],\n facts: {},\n };\n}\n\n/* ─── Stage helpers ─── */\n\nexport function startStage(\n obs: AxisObservation,\n name: string,\n): ObservationStage {\n const stage: ObservationStage = { name, status: 'ok', startMs: Date.now() };\n obs.stages.push(stage);\n return stage;\n}\n\nexport function endStage(\n stage: ObservationStage,\n status: 'ok' | 'fail' | 'skip' = 'ok',\n reason?: string,\n code?: string,\n): void {\n stage.endMs = Date.now();\n stage.durationMs = stage.endMs - stage.startMs;\n stage.status = status;\n if (reason) stage.reason = reason;\n if (code) stage.code = code;\n}\n\n/* ─── Sensor recording (called by chain service) ─── */\n\nexport function recordSensor(\n obs: AxisObservation,\n name: string,\n allowed: boolean,\n riskScore: number,\n durationMs: number,\n reasons: string[],\n code?: string,\n): void {\n obs.sensors.push({ name, allowed, riskScore, durationMs, reasons, code });\n}\n\n/* ─── Finalize ─── */\n\nexport function finalizeObservation(\n obs: AxisObservation,\n decision: 'ALLOW' | 'DENY',\n statusCode: number,\n resultCode?: string,\n): void {\n obs.endMs = Date.now();\n obs.durationMs = obs.endMs - obs.startMs;\n obs.decision = decision;\n obs.statusCode = statusCode;\n if (resultCode) obs.resultCode = resultCode;\n}\n","import type {\n AxisSensor,\n SensorDecision,\n SensorInput,\n} from \"../sensor/axis-sensor\";\nimport { normalizeSensorDecision } from \"../sensor/axis-sensor\";\nimport type { AxisObservation } from \"../engine/axis-observation\";\nimport { recordSensor } from \"../engine/axis-observation\";\nimport { SensorRegistry } from \"../engine/registry/sensor.registry\";\n\nexport type { SensorInput, SensorDecision };\n\n/**\n * The consolidated result of a sensor chain evaluation.\n */\nexport interface ChainResult {\n allowed: boolean;\n scoreDelta: number;\n statusCode: number;\n body?: string | Buffer | Uint8Array;\n headers?: Map<number, Uint8Array>;\n}\n\nexport class AxisSensorChainService {\n constructor(private readonly registry: SensorRegistry) {}\n\n async evaluate(\n input: SensorInput,\n phase: \"PRE_DECODE\" | \"POST_DECODE\" | \"BOTH\" = \"POST_DECODE\",\n baseDecision?: SensorDecision,\n ): Promise<SensorDecision> {\n if (phase === \"PRE_DECODE\") {\n return this.evaluateSensors(this.registry.getPreDecodeSensors(), input);\n }\n\n if (phase === \"BOTH\") {\n const rawPreResult = await this.evaluateSensors(\n this.registry.getPreDecodeSensors(),\n input,\n );\n const preResult = normalizeSensorDecision(rawPreResult);\n if (!preResult.allow) return rawPreResult;\n return this.evaluateSensors(\n this.registry.getPostDecodeSensors(),\n input,\n rawPreResult,\n );\n }\n\n return this.evaluateSensors(\n this.registry.getPostDecodeSensors(),\n input,\n baseDecision,\n );\n }\n\n async evaluatePre(input: SensorInput): Promise<SensorDecision> {\n return this.evaluateSensors(this.registry.getPreDecodeSensors(), input);\n }\n\n async evaluatePost(\n input: SensorInput,\n baseDecision?: SensorDecision,\n ): Promise<SensorDecision> {\n return this.evaluateSensors(\n this.registry.getPostDecodeSensors(),\n input,\n baseDecision,\n );\n }\n\n private async evaluateSensors(\n sensors: AxisSensor[],\n input: SensorInput,\n baseDecision?: SensorDecision,\n ): Promise<SensorDecision> {\n const relevantSensors: AxisSensor[] = [];\n for (const sensor of sensors) {\n if (!sensor.supports) {\n relevantSensors.push(sensor);\n continue;\n }\n\n try {\n // supports() is only an applicability gate; false means skip, not deny.\n if (sensor.supports(input)) {\n relevantSensors.push(sensor);\n }\n } catch (error) {\n console.error(\n `[AXIS][SENSOR] ${sensor.name} supports() failed:`,\n error,\n );\n\n const obs = input.metadata?.observation as AxisObservation | undefined;\n if (obs) {\n recordSensor(obs, sensor.name, false, 100, 0, [\n `sensor_support_error:${sensor.name}`,\n ]);\n }\n\n return {\n allow: false,\n riskScore: 100,\n reasons: [`sensor_support_error:${sensor.name}`],\n };\n }\n }\n\n const normalizedBase = baseDecision\n ? normalizeSensorDecision(baseDecision)\n : undefined;\n\n let riskScore = normalizedBase?.riskScore ?? 0;\n const reasons: string[] = normalizedBase?.reasons\n ? [...normalizedBase.reasons]\n : [];\n const tags: Record<string, any> = normalizedBase?.tags\n ? { ...normalizedBase.tags }\n : {};\n let expSecondsMax = normalizedBase?.tighten?.expSecondsMax;\n let constraintsPatch: Record<string, any> = normalizedBase?.tighten\n ?.constraintsPatch\n ? { ...normalizedBase.tighten.constraintsPatch }\n : {};\n\n for (const sensor of relevantSensors) {\n try {\n const t0 = Date.now();\n const rawDecision = await sensor.run(input);\n const elapsed = Date.now() - t0;\n const decision = normalizeSensorDecision(rawDecision);\n\n const obs = input.metadata?.observation as AxisObservation | undefined;\n if (obs) {\n recordSensor(\n obs,\n sensor.name,\n decision.allow,\n decision.riskScore,\n elapsed,\n decision.reasons,\n decision.allow ? undefined : (decision as any).code,\n );\n }\n\n if (!decision.allow) {\n return {\n allow: false,\n riskScore: Math.min(100, riskScore + decision.riskScore),\n reasons: [...reasons, ...decision.reasons],\n tags,\n };\n }\n\n riskScore = Math.min(100, riskScore + decision.riskScore);\n reasons.push(...decision.reasons);\n\n if (decision.tags) {\n Object.assign(tags, decision.tags);\n }\n\n if (decision.tighten?.expSecondsMax !== undefined) {\n expSecondsMax =\n expSecondsMax === undefined\n ? decision.tighten.expSecondsMax\n : Math.min(expSecondsMax, decision.tighten.expSecondsMax);\n }\n\n if (decision.tighten?.constraintsPatch) {\n constraintsPatch = {\n ...constraintsPatch,\n ...decision.tighten.constraintsPatch,\n };\n }\n } catch (error) {\n console.error(`[AXIS][SENSOR] ${sensor.name} failed:`, error);\n\n const obs = input.metadata?.observation as AxisObservation | undefined;\n if (obs) {\n recordSensor(obs, sensor.name, false, 100, 0, [\n `sensor_error:${sensor.name}`,\n ]);\n }\n\n return {\n allow: false,\n riskScore: 100,\n reasons: [`sensor_error:${sensor.name}`],\n };\n }\n }\n\n const tightenPatch =\n Object.keys(constraintsPatch).length > 0 ? constraintsPatch : undefined;\n\n return {\n allow: true,\n riskScore,\n reasons,\n tags,\n tighten:\n expSecondsMax !== undefined || tightenPatch\n ? {\n expSecondsMax,\n constraintsPatch: tightenPatch,\n }\n : undefined,\n };\n }\n}\n","/**\n * Timeline Engine\n *\n * Implements the three timeline operations:\n * - Replay: reconstruct and re-execute past events deterministically\n * - Fork: branch from a prior state with changed conditions\n * - Simulate: run scenarios in a shadow domain with no real effect\n *\n * Rules enforced:\n * 1. No past overwrite — original timeline is never modified\n * 2. Replay is not rewrite — original witness remains intact\n * 3. Forks are explicit — named branches with lineage\n * 4. Reality and shadow are separated — simulation never escapes\n * 5. Determinism is declared — each handler states its determinism class\n * 6. Witness is immutable — records are never altered\n */\n\nimport { createHash, randomBytes } from 'crypto';\n\nimport type {\n ForkRequest,\n ForkResult,\n ReplayDifference,\n ReplayRequest,\n ReplayResult,\n SimulatedSideEffect,\n SimulationRequest,\n SimulationResult,\n StateSnapshot,\n TimelineBranch,\n TimelineComparison,\n TimelineDomain,\n TimelineEvent,\n TimelineHandler,\n TimelineHandlerContext,\n TimelineHandlerResult,\n} from './timeline.types';\nimport type { TimelineStore } from './timeline.store';\n\n// ────────────────────────────────────────────────────────────────────────────\n// Helpers\n// ────────────────────────────────────────────────────────────────────────────\n\nfunction generateId(prefix: string): string {\n return `${prefix}_${randomBytes(16).toString('hex')}`;\n}\n\nfunction sha256(data: string): string {\n return createHash('sha256').update(data).digest('hex');\n}\n\nfunction hashPayload(payload: Record<string, unknown>): string {\n return sha256(JSON.stringify(payload));\n}\n\nfunction diffObjects(\n a: Record<string, unknown>,\n b: Record<string, unknown>,\n): ReplayDifference[] {\n const diffs: ReplayDifference[] = [];\n const allKeys = new Set([...Object.keys(a), ...Object.keys(b)]);\n\n for (const key of allKeys) {\n const va = a[key];\n const vb = b[key];\n if (JSON.stringify(va) !== JSON.stringify(vb)) {\n diffs.push({ field: key, original: va, replayed: vb });\n }\n }\n\n return diffs;\n}\n\n// ────────────────────────────────────────────────────────────────────────────\n// Timeline Engine\n// ────────────────────────────────────────────────────────────────────────────\n\nexport class TimelineEngine {\n private handlers = new Map<string, TimelineHandler>();\n\n constructor(private readonly store: TimelineStore) {}\n\n /** Register an intent handler for timeline execution */\n registerHandler(handler: TimelineHandler): void {\n this.handlers.set(handler.intent, handler);\n }\n\n // ──────────────────────────────────────────────────────────────────────\n // Record (store a real execution as a timeline event)\n // ──────────────────────────────────────────────────────────────────────\n\n async recordEvent(\n intent: string,\n actorId: string,\n payload: Record<string, unknown>,\n result: Record<string, unknown>,\n options: {\n timelineId?: string;\n branchId?: string;\n capsuleId?: string;\n tpsCoordinate?: string;\n witnessId?: string;\n determinism?: TimelineEvent['determinism'];\n parentEventId?: string;\n } = {},\n ): Promise<TimelineEvent> {\n const event: TimelineEvent = {\n event_id: generateId('evt'),\n timeline_id: options.timelineId ?? 'prime',\n branch_id: options.branchId ?? 'main',\n parent_event_id: options.parentEventId ?? null,\n intent,\n actor_id: actorId,\n capsule_id: options.capsuleId,\n tps_coordinate: options.tpsCoordinate,\n payload_hash: hashPayload(payload),\n result_hash: hashPayload(result),\n status: 'executed',\n domain: 'prime',\n determinism: options.determinism ?? 'deterministic',\n witness_id: options.witnessId,\n created_at: Date.now(),\n metadata: { payload, result },\n };\n\n await this.store.saveEvent(event);\n return event;\n }\n\n // ──────────────────────────────────────────────────────────────────────\n // Replay\n // ──────────────────────────────────────────────────────────────────────\n\n async replay(request: ReplayRequest): Promise<ReplayResult> {\n const originalEvent = await this.store.getEvent(request.source_event_id);\n if (!originalEvent) {\n throw new Error(`Event ${request.source_event_id} not found`);\n }\n\n const handler = this.handlers.get(originalEvent.intent);\n if (!handler) {\n throw new Error(`No handler registered for intent '${originalEvent.intent}'`);\n }\n\n // Get original payload from metadata\n const originalPayload =\n (originalEvent.metadata?.payload as Record<string, unknown>) ?? {};\n const replayPayload =\n request.mode === 'analytical' && request.override_payload\n ? request.override_payload\n : originalPayload;\n\n // Load snapshot if available\n const snapshot = await this.store.getSnapshotByEvent(originalEvent.event_id);\n\n const context: TimelineHandlerContext = {\n event_id: generateId('evt'),\n timeline_id: originalEvent.timeline_id,\n branch_id: `replay_${originalEvent.branch_id}`,\n domain: 'audit',\n actor_id: originalEvent.actor_id,\n tps_coordinate: originalEvent.tps_coordinate,\n snapshot: snapshot ?? undefined,\n is_replay: true,\n is_simulation: false,\n };\n\n const startMs = Date.now();\n const handlerResult = await handler.execute(replayPayload, context);\n const durationMs = Date.now() - startMs;\n\n const replayedEvent: TimelineEvent = {\n event_id: context.event_id,\n timeline_id: originalEvent.timeline_id,\n branch_id: context.branch_id,\n parent_event_id: originalEvent.event_id,\n intent: originalEvent.intent,\n actor_id: originalEvent.actor_id,\n capsule_id: originalEvent.capsule_id,\n tps_coordinate: originalEvent.tps_coordinate,\n payload_hash: hashPayload(replayPayload),\n result_hash: hashPayload(handlerResult.result_data),\n status: 'replayed',\n domain: 'audit',\n determinism: originalEvent.determinism,\n created_at: Date.now(),\n metadata: { payload: replayPayload, result: handlerResult.result_data },\n };\n\n await this.store.saveEvent(replayedEvent);\n\n // Compare results\n const originalResult =\n (originalEvent.metadata?.result as Record<string, unknown>) ?? {};\n const differences = diffObjects(originalResult, handlerResult.result_data);\n const deterministicMatch =\n originalEvent.result_hash === replayedEvent.result_hash;\n\n return {\n original_event: originalEvent,\n replayed_event: replayedEvent,\n mode: request.mode,\n deterministic_match: deterministicMatch,\n differences,\n duration_ms: durationMs,\n };\n }\n\n // ──────────────────────────────────────────────────────────────────────\n // Fork\n // ──────────────────────────────────────────────────────────────────────\n\n async fork(request: ForkRequest): Promise<ForkResult> {\n const sourceEvent = await this.store.getEvent(request.source_event_id);\n if (!sourceEvent) {\n throw new Error(`Event ${request.source_event_id} not found`);\n }\n\n const handler = this.handlers.get(sourceEvent.intent);\n if (!handler) {\n throw new Error(`No handler registered for intent '${sourceEvent.intent}'`);\n }\n\n // Create branch\n const branch: TimelineBranch = {\n branch_id: generateId('branch'),\n timeline_id: generateId('timeline'),\n origin_timeline_id: sourceEvent.timeline_id,\n origin_event_id: sourceEvent.event_id,\n branch_type: 'fork',\n creator_subject_id: request.actor_id,\n purpose: request.purpose,\n status: 'active',\n };\n\n await this.store.saveBranch(branch);\n\n // Take snapshot of source state\n const snapshot: StateSnapshot = {\n snapshot_id: generateId('snap'),\n timeline_id: sourceEvent.timeline_id,\n event_id: sourceEvent.event_id,\n tps_coordinate: sourceEvent.tps_coordinate,\n state_hash: hashPayload(\n (sourceEvent.metadata?.result as Record<string, unknown>) ?? {},\n ),\n state_data:\n (sourceEvent.metadata?.result as Record<string, unknown>) ?? {},\n created_at: Date.now(),\n };\n\n await this.store.saveSnapshot(snapshot);\n\n // Execute with new payload\n const context: TimelineHandlerContext = {\n event_id: generateId('evt'),\n timeline_id: branch.timeline_id,\n branch_id: branch.branch_id,\n domain: 'fork',\n actor_id: request.actor_id,\n tps_coordinate: sourceEvent.tps_coordinate,\n snapshot,\n is_replay: false,\n is_simulation: false,\n };\n\n const handlerResult = await handler.execute(request.new_payload, context);\n\n const forkedEvent: TimelineEvent = {\n event_id: context.event_id,\n timeline_id: branch.timeline_id,\n branch_id: branch.branch_id,\n parent_event_id: sourceEvent.event_id,\n intent: sourceEvent.intent,\n actor_id: request.actor_id,\n tps_coordinate: sourceEvent.tps_coordinate,\n payload_hash: hashPayload(request.new_payload),\n result_hash: hashPayload(handlerResult.result_data),\n status: 'forked',\n domain: 'fork',\n determinism: sourceEvent.determinism,\n created_at: Date.now(),\n metadata: {\n payload: request.new_payload,\n result: handlerResult.result_data,\n },\n };\n\n await this.store.saveEvent(forkedEvent);\n\n return { branch, forked_event: forkedEvent, snapshot };\n }\n\n // ──────────────────────────────────────────────────────────────────────\n // Simulate\n // ──────────────────────────────────────────────────────────────────────\n\n async simulate(request: SimulationRequest): Promise<SimulationResult> {\n const handler = this.handlers.get(request.intent);\n if (!handler) {\n throw new Error(`No handler registered for intent '${request.intent}'`);\n }\n\n // Load source snapshot if specified\n let snapshot: StateSnapshot | undefined;\n if (request.from_snapshot_id) {\n const loaded = await this.store.getSnapshot(request.from_snapshot_id);\n if (!loaded) {\n throw new Error(`Snapshot ${request.from_snapshot_id} not found`);\n }\n snapshot = loaded;\n }\n\n // Create shadow branch\n const branch: TimelineBranch = {\n branch_id: generateId('branch'),\n timeline_id: generateId('timeline'),\n origin_timeline_id: 'prime',\n origin_event_id: 'simulation_origin',\n branch_type: 'simulation',\n created_at_tps: request.at_tps,\n creator_subject_id: request.actor_id,\n purpose: request.purpose,\n status: 'active',\n };\n\n await this.store.saveBranch(branch);\n\n const context: TimelineHandlerContext = {\n event_id: generateId('evt'),\n timeline_id: branch.timeline_id,\n branch_id: branch.branch_id,\n domain: 'shadow',\n actor_id: request.actor_id,\n tps_coordinate: request.at_tps,\n snapshot,\n is_replay: false,\n is_simulation: true,\n };\n\n const startMs = Date.now();\n const handlerResult = await handler.execute(request.payload, context);\n const durationMs = Date.now() - startMs;\n\n const simulatedEvent: TimelineEvent = {\n event_id: context.event_id,\n timeline_id: branch.timeline_id,\n branch_id: branch.branch_id,\n parent_event_id: null,\n intent: request.intent,\n actor_id: request.actor_id,\n tps_coordinate: request.at_tps,\n payload_hash: hashPayload(request.payload),\n result_hash: hashPayload(handlerResult.result_data),\n status: 'simulated',\n domain: 'shadow',\n determinism: 'bounded_nondeterministic',\n created_at: Date.now(),\n metadata: { payload: request.payload, result: handlerResult.result_data },\n };\n\n await this.store.saveEvent(simulatedEvent);\n\n // Mark branch as completed\n branch.status = 'completed';\n await this.store.saveBranch(branch);\n\n return {\n branch,\n simulated_event: simulatedEvent,\n predicted_outcome: handlerResult.result_data,\n side_effects: handlerResult.side_effects ?? [],\n duration_ms: durationMs,\n };\n }\n\n // ──────────────────────────────────────────────────────────────────────\n // Compare timelines\n // ──────────────────────────────────────────────────────────────────────\n\n async compare(\n timelineIdA: string,\n timelineIdB: string,\n ): Promise<TimelineComparison> {\n const eventsA = await this.store.getEventsByTimeline(timelineIdA);\n const eventsB = await this.store.getEventsByTimeline(timelineIdB);\n\n // Sort by creation time\n eventsA.sort((a, b) => a.created_at - b.created_at);\n eventsB.sort((a, b) => a.created_at - b.created_at);\n\n const maxLen = Math.max(eventsA.length, eventsB.length);\n const eventPairs: TimelineComparison['event_pairs'] = [];\n let divergencePoint: string | undefined;\n\n for (let i = 0; i < maxLen; i++) {\n const a = eventsA[i];\n const b = eventsB[i];\n\n if (!a || !b) {\n if (!divergencePoint) {\n divergencePoint = a?.event_id ?? b?.event_id;\n }\n continue;\n }\n\n const match = a.result_hash === b.result_hash;\n const resultA =\n (a.metadata?.result as Record<string, unknown>) ?? {};\n const resultB =\n (b.metadata?.result as Record<string, unknown>) ?? {};\n const differences = match ? [] : diffObjects(resultA, resultB);\n\n if (!match && !divergencePoint) {\n divergencePoint = a.event_id;\n }\n\n eventPairs.push({ event_a: a, event_b: b, match, differences });\n }\n\n return {\n timeline_a: timelineIdA,\n timeline_b: timelineIdB,\n event_pairs: eventPairs,\n divergence_point: divergencePoint,\n };\n }\n\n // ──────────────────────────────────────────────────────────────────────\n // State snapshot management\n // ──────────────────────────────────────────────────────────────────────\n\n async createSnapshot(\n eventId: string,\n stateData: Record<string, unknown>,\n ): Promise<StateSnapshot> {\n const event = await this.store.getEvent(eventId);\n if (!event) {\n throw new Error(`Event ${eventId} not found`);\n }\n\n const snapshot: StateSnapshot = {\n snapshot_id: generateId('snap'),\n timeline_id: event.timeline_id,\n event_id: eventId,\n tps_coordinate: event.tps_coordinate,\n state_hash: hashPayload(stateData),\n state_data: stateData,\n created_at: Date.now(),\n };\n\n await this.store.saveSnapshot(snapshot);\n return snapshot;\n }\n\n async restoreSnapshot(snapshotId: string): Promise<StateSnapshot> {\n const snapshot = await this.store.getSnapshot(snapshotId);\n if (!snapshot) {\n throw new Error(`Snapshot ${snapshotId} not found`);\n }\n return snapshot;\n }\n}\n","/**\n * Timeline Store Interface\n *\n * Pluggable storage interface for timeline events, branches, and snapshots.\n * Implementations can use in-memory, database, or any persistence layer.\n */\n\nimport type {\n TimelineEvent,\n TimelineBranch,\n StateSnapshot,\n} from './timeline.types';\n\nexport interface TimelineStore {\n // Events\n saveEvent(event: TimelineEvent): Promise<void>;\n getEvent(eventId: string): Promise<TimelineEvent | null>;\n getEventsByTimeline(timelineId: string): Promise<TimelineEvent[]>;\n getEventsByBranch(branchId: string): Promise<TimelineEvent[]>;\n\n // Branches\n saveBranch(branch: TimelineBranch): Promise<void>;\n getBranch(branchId: string): Promise<TimelineBranch | null>;\n getBranchesByTimeline(timelineId: string): Promise<TimelineBranch[]>;\n\n // Snapshots\n saveSnapshot(snapshot: StateSnapshot): Promise<void>;\n getSnapshot(snapshotId: string): Promise<StateSnapshot | null>;\n getSnapshotByEvent(eventId: string): Promise<StateSnapshot | null>;\n}\n\n/**\n * In-memory timeline store for development and testing.\n */\nexport class InMemoryTimelineStore implements TimelineStore {\n private events = new Map<string, TimelineEvent>();\n private branches = new Map<string, TimelineBranch>();\n private snapshots = new Map<string, StateSnapshot>();\n\n async saveEvent(event: TimelineEvent): Promise<void> {\n this.events.set(event.event_id, event);\n }\n\n async getEvent(eventId: string): Promise<TimelineEvent | null> {\n return this.events.get(eventId) ?? null;\n }\n\n async getEventsByTimeline(timelineId: string): Promise<TimelineEvent[]> {\n return [...this.events.values()].filter((e) => e.timeline_id === timelineId);\n }\n\n async getEventsByBranch(branchId: string): Promise<TimelineEvent[]> {\n return [...this.events.values()].filter((e) => e.branch_id === branchId);\n }\n\n async saveBranch(branch: TimelineBranch): Promise<void> {\n this.branches.set(branch.branch_id, branch);\n }\n\n async getBranch(branchId: string): Promise<TimelineBranch | null> {\n return this.branches.get(branchId) ?? null;\n }\n\n async getBranchesByTimeline(timelineId: string): Promise<TimelineBranch[]> {\n return [...this.branches.values()].filter((b) => b.timeline_id === timelineId);\n }\n\n async saveSnapshot(snapshot: StateSnapshot): Promise<void> {\n this.snapshots.set(snapshot.snapshot_id, snapshot);\n }\n\n async getSnapshot(snapshotId: string): Promise<StateSnapshot | null> {\n return this.snapshots.get(snapshotId) ?? null;\n }\n\n async getSnapshotByEvent(eventId: string): Promise<StateSnapshot | null> {\n return (\n [...this.snapshots.values()].find((s) => s.event_id === eventId) ?? null\n );\n }\n}\n","import {\n buildTLVs,\n extractDtoSchema,\n} from '../index';\nimport type { IntentTlvField } from '../decorators/intent.decorator';\n\ntype AxisTlvDtoCtor<T = object> = new (...args: never[]) => T;\n\nexport function encodeAxisTlvDto<T extends object>(\n dtoClass: AxisTlvDtoCtor<T>,\n data: Partial<Record<keyof T, unknown>>,\n): Uint8Array {\n const schema = extractDtoSchema(dtoClass);\n const items = schema.fields.flatMap((field) => {\n const value = (data as Record<string, unknown>)[field.name];\n if (value === undefined || value === null) {\n if (field.required) {\n throw new Error(`Missing required TLV response field: ${field.name}`);\n }\n return [];\n }\n\n return [{ type: field.tag, value: encodeField(field, value) }];\n });\n\n return buildTLVs(items);\n}\n\nfunction encodeField(field: IntentTlvField, value: unknown): Buffer {\n switch (field.kind) {\n case 'utf8':\n return Buffer.from(String(value), 'utf8');\n case 'u64':\n return encodeU64(value);\n case 'bytes':\n case 'bytes16':\n return toBuffer(value);\n case 'bool':\n return Buffer.from([value ? 1 : 0]);\n case 'obj':\n case 'arr':\n return Buffer.from(JSON.stringify(value), 'utf8');\n default:\n return toBuffer(value);\n }\n}\n\nfunction encodeU64(value: unknown): Buffer {\n const encoded = Buffer.alloc(8);\n encoded.writeBigUInt64BE(\n typeof value === 'bigint' ? value : BigInt(value as number | string),\n );\n return encoded;\n}\n\nfunction toBuffer(value: unknown): Buffer {\n if (Buffer.isBuffer(value)) {\n return value;\n }\n if (value instanceof Uint8Array) {\n return Buffer.from(value);\n }\n if (typeof value === 'string') {\n return Buffer.from(value, 'utf8');\n }\n\n throw new Error(`Unsupported TLV bytes value: ${typeof value}`);\n}","/**\n * Loom Runtime - Lawful Execution Types\n *\n * Core type definitions for the Loom execution engine.\n * Loom replaces traditional auth with \"Lawful Execution\":\n * - Presence: Liveness proof (replaces login/sessions)\n * - Writ: Executable intent (replaces JWT)\n * - Grant: Standing permission (replaces RBAC)\n * - Receipt: Proof of execution (hash-chained)\n */\n\n// ============================================================================\n// Presence Types (Liveness State)\n// ============================================================================\n\nexport interface PresenceDeclaration {\n /** SoftID of the entity resuming presence (e.g., \"~ayesh#work\") */\n softid: string;\n /** Optional device metadata for scope binding */\n device_meta?: {\n fingerprint?: string;\n platform?: string;\n user_agent?: string;\n };\n}\n\nexport interface PresenceChallenge {\n /** Unique challenge identifier */\n challenge_id: string;\n /** High-entropy random nonce (32-byte hex) */\n nonce: string;\n /** Server's current Unix timestamp in milliseconds (temporal anchor) */\n temporal_anchor: number;\n /** Time-to-live for response in milliseconds (default 5000ms) */\n ttl_ms: number;\n /** Challenge expiry timestamp */\n expires_at: number;\n}\n\nexport interface PresenceProof {\n /** Challenge ID being answered */\n challenge_id: string;\n /** Ed25519 signature over canonical(nonce + temporal_anchor + device_meta) */\n signature: string;\n /** Public key corresponding to the SoftID */\n public_key: string;\n /** Optional key identifier */\n kid?: string;\n}\n\nexport interface PresenceReceipt {\n /** Presence ID - hash of the completed handshake */\n presence_id: string;\n /** SoftID that established presence */\n softid: string;\n /** Anchor Reflection ID for logs (privacy-preserving) */\n anchor_reflection: string;\n /** Scope constraints for this presence */\n scope: {\n ip?: string;\n device_fingerprint?: string;\n };\n /** When presence was established (Unix timestamp ms) */\n issued_at: number;\n /** When presence expires (Unix timestamp ms) */\n expires_at: number;\n /** Last renewal timestamp (updated on successful Writ execution) */\n renewed_at?: number;\n}\n\nexport type PresenceStatus = 'active' | 'expired' | 'revoked';\n\n// ============================================================================\n// Writ Types (Executable Intent)\n// ============================================================================\n\nexport interface WritHead {\n /** Thread ID - derived from actor, groups related writs */\n tid: string;\n /** Sequence number within the thread */\n seq: number;\n}\n\nexport interface WritBody {\n /** SoftID of the actor (Anchor or Shadow) */\n who: string;\n /** Operation Execution Code (e.g., \"dns.write\", \"file.upload\") */\n act: string;\n /** Resource target (e.g., \"zone:example.com\", \"bucket:uploads\") */\n res: string;\n /** Grant reference - grant_id or \"self\" for sovereign actions */\n law: string;\n}\n\nexport interface WritMeta {\n /** Issued-at timestamp (Unix seconds) */\n iat: number;\n /** Expiry timestamp (Unix seconds) */\n exp: number;\n /** Previous receipt hash (thread continuity) - empty string for first writ */\n prev: string;\n}\n\nexport interface WritSignature {\n /** Signature algorithm */\n alg: 'ed25519';\n /** Base64-encoded signature value */\n value: string;\n /** Optional key identifier */\n kid?: string;\n}\n\nexport interface Writ {\n head: WritHead;\n body: WritBody;\n meta: WritMeta;\n sig: WritSignature;\n}\n\n// ============================================================================\n// Grant Types (Standing Permission / Law)\n// ============================================================================\n\nexport type GrantType = 'sovereign' | 'delegated' | 'system';\n\nexport interface GrantCapability {\n /** Operation Execution Code this grant allows */\n oec: string;\n /** Resource scope constraint (e.g., \"zone:*.example.com\") */\n scope: string;\n /** Optional quantitative limits */\n limit?: {\n /** Rate limit (e.g., \"10/min\", \"100/day\") */\n rate?: string;\n /** Maximum amount/count */\n amount?: number;\n /** Depth constraint (e.g., \"subdomains_only\") */\n depth?: string;\n };\n}\n\nexport interface GrantMeta {\n /** Issued-at timestamp (Unix seconds) */\n iat: number;\n /** Expiry timestamp (Unix seconds) */\n exp: number;\n /** Whether this grant can be revoked */\n revocable: boolean;\n /** Version number for updates */\n version: number;\n /** Optional Digital Fabric contract reference */\n contract_ref?: string;\n}\n\nexport interface Grant {\n /** Unique grant identifier */\n grant_id: string;\n /** SoftID of the authority who issued this grant */\n issuer: string;\n /** SoftID of the grantee */\n subject: string;\n /** Grant type */\n grant_type: GrantType;\n /** Array of capabilities this grant provides */\n caps: GrantCapability[];\n /** Grant metadata */\n meta: GrantMeta;\n /** Signature over the grant */\n sig: WritSignature;\n}\n\nexport type GrantStatus = 'active' | 'revoked' | 'expired';\n\n// ============================================================================\n// Receipt Types (Proof of Execution)\n// ============================================================================\n\nexport interface LoomReceipt {\n /** Receipt ID */\n receipt_id: string;\n /** Hash of the writ that was executed */\n writ_hash: string;\n /** Thread ID */\n thread_id: string;\n /** Sequence number */\n sequence: number;\n /** Execution effect (e.g., \"ALLOW\", \"DENY\") */\n effect: string;\n /** Current receipt hash (for chaining) */\n hash: string;\n /** Previous receipt hash */\n prev_hash: string | null;\n /** Execution timestamp */\n executed_at: number;\n /** Additional metadata */\n metadata?: Record<string, unknown>;\n}\n\n// ============================================================================\n// Thread Types (Causal Continuity)\n// ============================================================================\n\nexport interface ThreadState {\n /** Thread ID */\n thread_id: string;\n /** SoftID that owns this thread */\n softid: string;\n /** Hash of the last receipt in this thread */\n last_receipt_hash: string;\n /** Current sequence number */\n sequence: number;\n /** Last update timestamp */\n updated_at: number;\n}\n\n// ============================================================================\n// Revocation Types (Null-Receipts)\n// ============================================================================\n\nexport type RevocationTargetType = 'grant' | 'presence' | 'softid';\n\nexport interface Revocation {\n /** Revocation ID */\n revocation_id: string;\n /** What type of entity is being revoked */\n target_type: RevocationTargetType;\n /** ID of the entity being revoked */\n target_id: string;\n /** SoftID of the issuer of this revocation */\n issuer_softid: string;\n /** Reason for revocation */\n reason?: string;\n /** When revocation takes effect (Unix timestamp) */\n effective_at: number;\n /** Signature over the revocation */\n sig_value: string;\n}\n\n// ============================================================================\n// Validation Result Types\n// ============================================================================\n\nexport interface LoomValidationResult {\n valid: boolean;\n error?: string;\n code?: string;\n}\n\nexport interface PresenceVerifyResult extends LoomValidationResult {\n presence?: PresenceReceipt;\n}\n\nexport interface WritValidationResult extends LoomValidationResult {\n writ?: Writ;\n gate_failed?: 'temporal' | 'causal' | 'legal' | 'authentic';\n}\n\nexport interface GrantValidationResult extends LoomValidationResult {\n grant?: Grant;\n}\n\n// ============================================================================\n// TLV Constants (re-exported from core/constants.ts for convenience)\n// ============================================================================\n\nexport {\n TLV_LOOM_PRESENCE_ID as TLV_PRESENCE_ID,\n TLV_LOOM_WRIT as TLV_WRIT,\n TLV_LOOM_THREAD_HASH as TLV_THREAD_HASH,\n PROOF_LOOM,\n} from '../core/constants';\n\n// ============================================================================\n// Utility Functions\n// ============================================================================\n\n/**\n * Derive Anchor Reflection ID (ARID) for privacy-preserving logs.\n * ARID = hash(anchor_pubkey + context + scope)\n */\nexport function deriveAnchorReflection(\n softid: string,\n context: string = 'openlogs',\n scope: string = 'loom',\n): string {\n // Implementation will use crypto hash\n // Placeholder structure: ar:<context>:<scope>:<hash>\n return `ar:${context}:${scope}:${softid}`;\n}\n\n/**\n * Canonicalize a Writ for signing/verification.\n * Returns deterministic JSON string.\n */\nexport function canonicalizeWrit(writ: Omit<Writ, 'sig'>): string {\n const ordered = {\n head: { tid: writ.head.tid, seq: writ.head.seq },\n body: {\n who: writ.body.who,\n act: writ.body.act,\n res: writ.body.res,\n law: writ.body.law,\n },\n meta: { iat: writ.meta.iat, exp: writ.meta.exp, prev: writ.meta.prev },\n };\n return JSON.stringify(ordered);\n}\n\n/**\n * Canonicalize a Grant for signing/verification.\n */\nexport function canonicalizeGrant(grant: Omit<Grant, 'sig'>): string {\n const ordered = {\n grant_id: grant.grant_id,\n issuer: grant.issuer,\n subject: grant.subject,\n grant_type: grant.grant_type,\n caps: grant.caps,\n meta: grant.meta,\n };\n return JSON.stringify(ordered);\n}\n","/**\n * Loom Runtime Engine\n *\n * Implements the full Loom execution lifecycle:\n * - Presence: challenge → proof → receipt (replaces login/sessions)\n * - Writ: creation → validation → execution (replaces JWT)\n * - Grant: resolution → capability matching (replaces RBAC)\n * - Receipt: hash-chained proof of execution\n * - Revocation: null-receipt revocation of grants/presence\n */\n\nimport { createHash, randomBytes } from 'crypto';\nimport { sign, verify } from 'tweetnacl';\n\nimport type {\n Grant,\n GrantCapability,\n GrantStatus,\n GrantValidationResult,\n LoomReceipt,\n PresenceChallenge,\n PresenceDeclaration,\n PresenceProof,\n PresenceReceipt,\n PresenceStatus,\n PresenceVerifyResult,\n Revocation,\n ThreadState,\n Writ,\n WritBody,\n WritHead,\n WritMeta,\n WritSignature,\n WritValidationResult,\n} from './loom.types';\nimport { canonicalizeGrant, canonicalizeWrit } from './loom.types';\n\n// ────────────────────────────────────────────────────────────────────────────\n// Crypto helpers\n// ────────────────────────────────────────────────────────────────────────────\n\nfunction sha256(data: string): string {\n return createHash('sha256').update(data).digest('hex');\n}\n\nfunction hexToUint8(hex: string): Uint8Array {\n const bytes = new Uint8Array(hex.length / 2);\n for (let i = 0; i < hex.length; i += 2) {\n bytes[i / 2] = parseInt(hex.substring(i, i + 2), 16);\n }\n return bytes;\n}\n\nfunction uint8ToHex(bytes: Uint8Array): string {\n return Array.from(bytes)\n .map((b) => b.toString(16).padStart(2, '0'))\n .join('');\n}\n\nfunction b64ToUint8(b64: string): Uint8Array {\n const bin = Buffer.from(b64, 'base64');\n return new Uint8Array(bin.buffer, bin.byteOffset, bin.byteLength);\n}\n\nfunction uint8ToB64(bytes: Uint8Array): string {\n return Buffer.from(bytes).toString('base64');\n}\n\n// ────────────────────────────────────────────────────────────────────────────\n// Presence Engine\n// ────────────────────────────────────────────────────────────────────────────\n\nconst DEFAULT_PRESENCE_TTL_MS = 5_000;\nconst DEFAULT_PRESENCE_DURATION_MS = 30 * 60 * 1000; // 30 minutes\n\n/**\n * Create a challenge for a presence declaration.\n */\nexport function createPresenceChallenge(\n declaration: PresenceDeclaration,\n ttlMs: number = DEFAULT_PRESENCE_TTL_MS,\n): PresenceChallenge {\n const now = Date.now();\n const nonce = randomBytes(32).toString('hex');\n const challengeId = sha256(`${declaration.softid}:${nonce}:${now}`);\n\n return {\n challenge_id: challengeId,\n nonce,\n temporal_anchor: now,\n ttl_ms: ttlMs,\n expires_at: now + ttlMs,\n };\n}\n\n/**\n * Canonical data for presence challenge signing.\n */\nfunction presenceSigningData(\n challenge: PresenceChallenge,\n deviceMeta?: PresenceDeclaration['device_meta'],\n): string {\n return JSON.stringify({\n nonce: challenge.nonce,\n temporal_anchor: challenge.temporal_anchor,\n device_meta: deviceMeta ?? null,\n });\n}\n\n/**\n * Sign a presence challenge with a private key.\n */\nexport function signPresenceChallenge(\n challenge: PresenceChallenge,\n privateKeyHex: string,\n publicKeyHex: string,\n declaration: PresenceDeclaration,\n kid?: string,\n): PresenceProof {\n const data = presenceSigningData(challenge, declaration.device_meta);\n const msgBytes = new TextEncoder().encode(data);\n const secretKey = hexToUint8(privateKeyHex);\n const signature = sign.detached(msgBytes, secretKey);\n\n return {\n challenge_id: challenge.challenge_id,\n signature: uint8ToHex(signature),\n public_key: publicKeyHex,\n kid,\n };\n}\n\n/**\n * Verify a presence proof and issue a receipt.\n */\nexport function verifyPresenceProof(\n challenge: PresenceChallenge,\n proof: PresenceProof,\n declaration: PresenceDeclaration,\n durationMs: number = DEFAULT_PRESENCE_DURATION_MS,\n): PresenceVerifyResult {\n // 1. Challenge expiry\n if (Date.now() > challenge.expires_at) {\n return { valid: false, error: 'Challenge expired', code: 'CHALLENGE_EXPIRED' };\n }\n\n // 2. Challenge ID match\n if (proof.challenge_id !== challenge.challenge_id) {\n return { valid: false, error: 'Challenge ID mismatch', code: 'CHALLENGE_MISMATCH' };\n }\n\n // 3. Verify signature\n const data = presenceSigningData(challenge, declaration.device_meta);\n const msgBytes = new TextEncoder().encode(data);\n const sigBytes = hexToUint8(proof.signature);\n const pubBytes = hexToUint8(proof.public_key);\n\n let isValid: boolean;\n try {\n isValid = sign.detached.verify(msgBytes, sigBytes, pubBytes);\n } catch {\n return { valid: false, error: 'Signature verification failed', code: 'SIG_INVALID' };\n }\n\n if (!isValid) {\n return { valid: false, error: 'Invalid signature', code: 'SIG_INVALID' };\n }\n\n // 4. Build presence receipt\n const now = Date.now();\n const presenceId = sha256(\n `${proof.public_key}:${challenge.nonce}:${challenge.temporal_anchor}`,\n );\n const anchorReflection = sha256(\n `ar:openlogs:loom:${proof.public_key}`,\n );\n\n const receipt: PresenceReceipt = {\n presence_id: presenceId,\n softid: declaration.softid,\n anchor_reflection: anchorReflection,\n scope: {\n device_fingerprint: declaration.device_meta?.fingerprint,\n },\n issued_at: now,\n expires_at: now + durationMs,\n };\n\n return { valid: true, presence: receipt };\n}\n\n/**\n * Check if a presence receipt is currently active.\n */\nexport function getPresenceStatus(receipt: PresenceReceipt): PresenceStatus {\n const now = Date.now();\n if (now > receipt.expires_at) return 'expired';\n return 'active';\n}\n\n/**\n * Renew presence (extend expiry).\n */\nexport function renewPresence(\n receipt: PresenceReceipt,\n extensionMs: number = DEFAULT_PRESENCE_DURATION_MS,\n): PresenceReceipt {\n const now = Date.now();\n return {\n ...receipt,\n renewed_at: now,\n expires_at: now + extensionMs,\n };\n}\n\n// ────────────────────────────────────────────────────────────────────────────\n// Writ Engine\n// ────────────────────────────────────────────────────────────────────────────\n\n/**\n * Create a new Writ (executable intent).\n */\nexport function createWrit(\n body: WritBody,\n meta: Omit<WritMeta, 'prev'>,\n thread: { tid: string; seq: number; prevHash: string },\n privateKeyHex: string,\n kid?: string,\n): Writ {\n const head: WritHead = { tid: thread.tid, seq: thread.seq };\n const writMeta: WritMeta = { ...meta, prev: thread.prevHash };\n\n const unsigned: Omit<Writ, 'sig'> = { head, body, meta: writMeta };\n const canonical = canonicalizeWrit(unsigned);\n const msgBytes = new TextEncoder().encode(canonical);\n const secretKey = hexToUint8(privateKeyHex);\n const signature = sign.detached(msgBytes, secretKey);\n\n const sig: WritSignature = {\n alg: 'ed25519',\n value: uint8ToB64(signature),\n kid,\n };\n\n return { head, body, meta: writMeta, sig };\n}\n\n/**\n * Validate a Writ through all four gates:\n * 1. Temporal: is the writ within its time window?\n * 2. Causal: does the prev hash match the thread state?\n * 3. Legal: does a valid grant allow this operation?\n * 4. Authentic: is the signature valid?\n */\nexport function validateWrit(\n writ: Writ,\n publicKeyHex: string,\n threadState: ThreadState | null,\n grants: Grant[],\n): WritValidationResult {\n const now = Math.floor(Date.now() / 1000);\n\n // Gate 1: Temporal\n if (now < writ.meta.iat) {\n return {\n valid: false,\n error: 'Writ not yet valid (iat in future)',\n code: 'TEMPORAL_NOT_YET',\n gate_failed: 'temporal',\n };\n }\n if (now > writ.meta.exp) {\n return {\n valid: false,\n error: 'Writ expired',\n code: 'TEMPORAL_EXPIRED',\n gate_failed: 'temporal',\n };\n }\n\n // Gate 2: Causal (thread continuity)\n if (threadState) {\n if (writ.head.tid !== threadState.thread_id) {\n return {\n valid: false,\n error: 'Thread ID mismatch',\n code: 'CAUSAL_TID',\n gate_failed: 'causal',\n };\n }\n if (writ.head.seq !== threadState.sequence + 1) {\n return {\n valid: false,\n error: `Expected seq ${threadState.sequence + 1}, got ${writ.head.seq}`,\n code: 'CAUSAL_SEQ',\n gate_failed: 'causal',\n };\n }\n if (writ.meta.prev !== threadState.last_receipt_hash) {\n return {\n valid: false,\n error: 'Previous receipt hash mismatch',\n code: 'CAUSAL_PREV',\n gate_failed: 'causal',\n };\n }\n } else {\n // First writ in thread\n if (writ.head.seq !== 1) {\n return {\n valid: false,\n error: 'First writ in thread must have seq=1',\n code: 'CAUSAL_FIRST_SEQ',\n gate_failed: 'causal',\n };\n }\n if (writ.meta.prev !== '') {\n return {\n valid: false,\n error: 'First writ must have empty prev hash',\n code: 'CAUSAL_FIRST_PREV',\n gate_failed: 'causal',\n };\n }\n }\n\n // Gate 3: Legal (grant matching)\n if (writ.body.law !== 'self') {\n const matchingGrant = grants.find((g) =>\n g.grant_id === writ.body.law &&\n g.subject === writ.body.who &&\n grantCoversAction(g, writ.body.act, writ.body.res, now),\n );\n if (!matchingGrant) {\n return {\n valid: false,\n error: `No valid grant found for law=${writ.body.law}`,\n code: 'LEGAL_NO_GRANT',\n gate_failed: 'legal',\n };\n }\n }\n\n // Gate 4: Authentic (signature verification)\n const unsigned: Omit<Writ, 'sig'> = {\n head: writ.head,\n body: writ.body,\n meta: writ.meta,\n };\n const canonical = canonicalizeWrit(unsigned);\n const msgBytes = new TextEncoder().encode(canonical);\n const sigBytes = b64ToUint8(writ.sig.value);\n const pubBytes = hexToUint8(publicKeyHex);\n\n let sigValid: boolean;\n try {\n sigValid = sign.detached.verify(msgBytes, sigBytes, pubBytes);\n } catch {\n return {\n valid: false,\n error: 'Signature verification failed',\n code: 'AUTH_SIG_FAIL',\n gate_failed: 'authentic',\n };\n }\n\n if (!sigValid) {\n return {\n valid: false,\n error: 'Invalid signature',\n code: 'AUTH_SIG_INVALID',\n gate_failed: 'authentic',\n };\n }\n\n return { valid: true, writ };\n}\n\n// ────────────────────────────────────────────────────────────────────────────\n// Grant Engine\n// ────────────────────────────────────────────────────────────────────────────\n\n/**\n * Check if a grant covers a specific action on a specific resource.\n */\nexport function grantCoversAction(\n grant: Grant,\n action: string,\n resource: string,\n nowUnix: number,\n): boolean {\n // Check temporal validity\n if (nowUnix < grant.meta.iat || nowUnix > grant.meta.exp) {\n return false;\n }\n\n // Check capabilities\n return grant.caps.some((cap) =>\n matchOec(cap.oec, action) && matchScope(cap.scope, resource),\n );\n}\n\n/**\n * Match an Operation Execution Code pattern against an action.\n * Supports wildcards: \"dns.*\" matches \"dns.write\", \"dns.read\", etc.\n */\nfunction matchOec(pattern: string, action: string): boolean {\n if (pattern === '*') return true;\n if (pattern === action) return true;\n\n if (pattern.endsWith('.*')) {\n const prefix = pattern.slice(0, -2);\n return action.startsWith(prefix + '.');\n }\n\n return false;\n}\n\n/**\n * Match a scope pattern against a resource.\n * Supports wildcards: \"zone:*.example.com\" matches \"zone:sub.example.com\"\n */\nfunction matchScope(pattern: string, resource: string): boolean {\n if (pattern === '*') return true;\n if (pattern === resource) return true;\n\n // Simple wildcard matching\n if (pattern.includes('*')) {\n const regex = new RegExp(\n '^' + pattern.replace(/\\./g, '\\\\.').replace(/\\*/g, '[^:]*') + '$',\n );\n return regex.test(resource);\n }\n\n return false;\n}\n\n/**\n * Get grant status based on current time and revocation state.\n */\nexport function getGrantStatus(\n grant: Grant,\n revocations: Revocation[],\n): GrantStatus {\n const now = Math.floor(Date.now() / 1000);\n\n // Check revocation\n const revoked = revocations.find(\n (r) => r.target_type === 'grant' && r.target_id === grant.grant_id,\n );\n if (revoked && revoked.effective_at <= now * 1000) {\n return 'revoked';\n }\n\n // Check expiry\n if (now > grant.meta.exp) return 'expired';\n\n return 'active';\n}\n\n/**\n * Validate a grant's signature.\n */\nexport function validateGrant(\n grant: Grant,\n issuerPublicKeyHex: string,\n): GrantValidationResult {\n const unsigned: Omit<Grant, 'sig'> = {\n grant_id: grant.grant_id,\n issuer: grant.issuer,\n subject: grant.subject,\n grant_type: grant.grant_type,\n caps: grant.caps,\n meta: grant.meta,\n };\n const canonical = canonicalizeGrant(unsigned);\n const msgBytes = new TextEncoder().encode(canonical);\n const sigBytes = b64ToUint8(grant.sig.value);\n const pubBytes = hexToUint8(issuerPublicKeyHex);\n\n let valid: boolean;\n try {\n valid = sign.detached.verify(msgBytes, sigBytes, pubBytes);\n } catch {\n return { valid: false, error: 'Grant signature verification failed', code: 'GRANT_SIG_FAIL' };\n }\n\n if (!valid) {\n return { valid: false, error: 'Invalid grant signature', code: 'GRANT_SIG_INVALID' };\n }\n\n return { valid: true, grant };\n}\n\n/**\n * Create and sign a new Grant.\n */\nexport function createGrant(\n grantId: string,\n issuer: string,\n subject: string,\n grantType: Grant['grant_type'],\n caps: GrantCapability[],\n meta: Grant['meta'],\n privateKeyHex: string,\n kid?: string,\n): Grant {\n const unsigned: Omit<Grant, 'sig'> = {\n grant_id: grantId,\n issuer,\n subject,\n grant_type: grantType,\n caps,\n meta,\n };\n\n const canonical = canonicalizeGrant(unsigned);\n const msgBytes = new TextEncoder().encode(canonical);\n const secretKey = hexToUint8(privateKeyHex);\n const signature = sign.detached(msgBytes, secretKey);\n\n return {\n ...unsigned,\n sig: {\n alg: 'ed25519',\n value: uint8ToB64(signature),\n kid,\n },\n };\n}\n\n// ────────────────────────────────────────────────────────────────────────────\n// Receipt Engine (hash-chained proof of execution)\n// ────────────────────────────────────────────────────────────────────────────\n\n/**\n * Create a hash-chained receipt for a writ execution.\n */\nexport function createReceipt(\n writ: Writ,\n effect: string,\n prevReceipt: LoomReceipt | null,\n metadata?: Record<string, unknown>,\n): LoomReceipt {\n const now = Date.now();\n const sequence = prevReceipt ? prevReceipt.sequence + 1 : 1;\n const prevHash = prevReceipt?.hash ?? null;\n\n // Hash the writ\n const writHash = sha256(canonicalizeWrit({\n head: writ.head,\n body: writ.body,\n meta: writ.meta,\n }));\n\n // Build receipt hash (chain integrity)\n const hashInput = [\n prevHash ?? '',\n writHash,\n writ.head.tid,\n String(sequence),\n effect,\n String(now),\n ].join(':');\n\n const receiptHash = sha256(hashInput);\n const receiptId = sha256(`receipt:${receiptHash}:${now}`);\n\n return {\n receipt_id: receiptId,\n writ_hash: writHash,\n thread_id: writ.head.tid,\n sequence,\n effect,\n hash: receiptHash,\n prev_hash: prevHash,\n executed_at: now,\n metadata,\n };\n}\n\n/**\n * Verify receipt chain integrity.\n */\nexport function verifyReceiptChain(receipts: LoomReceipt[]): {\n valid: boolean;\n brokenAt?: number;\n error?: string;\n} {\n if (receipts.length === 0) return { valid: true };\n\n // Sort by sequence\n const sorted = [...receipts].sort((a, b) => a.sequence - b.sequence);\n\n // First receipt must have null prev_hash\n if (sorted[0].prev_hash !== null) {\n return {\n valid: false,\n brokenAt: 0,\n error: 'First receipt must have null prev_hash',\n };\n }\n\n // Verify chain continuity\n for (let i = 1; i < sorted.length; i++) {\n if (sorted[i].prev_hash !== sorted[i - 1].hash) {\n return {\n valid: false,\n brokenAt: i,\n error: `Receipt ${i} prev_hash does not match receipt ${i - 1} hash`,\n };\n }\n }\n\n return { valid: true };\n}\n\n/**\n * Update thread state after receipt creation.\n */\nexport function updateThreadState(\n receipt: LoomReceipt,\n softid: string,\n): ThreadState {\n return {\n thread_id: receipt.thread_id,\n softid,\n last_receipt_hash: receipt.hash,\n sequence: receipt.sequence,\n updated_at: receipt.executed_at,\n };\n}\n\n// ────────────────────────────────────────────────────────────────────────────\n// Revocation Engine\n// ────────────────────────────────────────────────────────────────────────────\n\n/**\n * Create a revocation record.\n */\nexport function createRevocation(\n targetType: Revocation['target_type'],\n targetId: string,\n issuerSoftid: string,\n privateKeyHex: string,\n reason?: string,\n): Revocation {\n const now = Date.now();\n const revocationId = sha256(`revoke:${targetType}:${targetId}:${now}`);\n\n const payload = JSON.stringify({\n revocation_id: revocationId,\n target_type: targetType,\n target_id: targetId,\n issuer_softid: issuerSoftid,\n effective_at: now,\n reason: reason ?? null,\n });\n\n const msgBytes = new TextEncoder().encode(payload);\n const secretKey = hexToUint8(privateKeyHex);\n const signature = sign.detached(msgBytes, secretKey);\n\n return {\n revocation_id: revocationId,\n target_type: targetType,\n target_id: targetId,\n issuer_softid: issuerSoftid,\n reason,\n effective_at: now,\n sig_value: uint8ToHex(signature),\n };\n}\n\n/**\n * Check if a target has been revoked.\n */\nexport function isRevoked(\n targetType: Revocation['target_type'],\n targetId: string,\n revocations: Revocation[],\n): boolean {\n const now = Date.now();\n return revocations.some(\n (r) =>\n r.target_type === targetType &&\n r.target_id === targetId &&\n r.effective_at <= now,\n );\n}\n\n// ────────────────────────────────────────────────────────────────────────────\n// Full Loom Pipeline\n// ────────────────────────────────────────────────────────────────────────────\n\nexport interface LoomExecutionResult {\n receipt: LoomReceipt;\n threadState: ThreadState;\n writValidation: WritValidationResult;\n}\n\n/**\n * Execute a full Loom pipeline:\n * 1. Validate presence\n * 2. Validate writ (4 gates)\n * 3. Create receipt\n * 4. Update thread state\n */\nexport function executeLoomPipeline(\n writ: Writ,\n publicKeyHex: string,\n presence: PresenceReceipt,\n threadState: ThreadState | null,\n grants: Grant[],\n revocations: Revocation[],\n prevReceipt: LoomReceipt | null,\n): LoomExecutionResult | { valid: false; error: string; code: string } {\n // 1. Check presence\n const presenceStatus = getPresenceStatus(presence);\n if (presenceStatus !== 'active') {\n return { valid: false, error: 'Presence not active', code: 'PRESENCE_INACTIVE' };\n }\n\n // 2. Check presence revocation\n if (isRevoked('presence', presence.presence_id, revocations)) {\n return { valid: false, error: 'Presence revoked', code: 'PRESENCE_REVOKED' };\n }\n\n // 3. Filter out revoked grants\n const activeGrants = grants.filter(\n (g) => getGrantStatus(g, revocations) === 'active',\n );\n\n // 4. Validate writ\n const writResult = validateWrit(writ, publicKeyHex, threadState, activeGrants);\n if (!writResult.valid) {\n return { valid: false, error: writResult.error!, code: writResult.code! };\n }\n\n // 5. Create receipt\n const receipt = createReceipt(writ, 'ALLOW', prevReceipt);\n\n // 6. Update thread state\n const newThreadState = updateThreadState(receipt, writ.body.who);\n\n return {\n receipt,\n threadState: newThreadState,\n writValidation: writResult,\n };\n}\n","/**\n * IDEL Compiler — Intent Description & Execution Language\n *\n * Compiles raw intent proposals into validated, executable structures.\n *\n * Pipeline:\n * 1. Resolve: match raw input to a known intent schema\n * 2. Validate: check all required params and constraints\n * 3. Assess risk: evaluate intent risk level\n * 4. Generate clarifications: if ambiguous or incomplete\n * 5. Output: CompiledIntent ready for AXIS execution\n */\n\nimport type {\n AlternativeIntent,\n ClarificationQuestion,\n CompilationError,\n CompilationResult,\n CompiledIntent,\n IntentConstraint,\n IntentParamSchema,\n IntentProposal,\n IntentRisk,\n IntentSchema,\n RiskLevel,\n} from './idel.types';\n\n// ────────────────────────────────────────────────────────────────────────────\n// Schema Registry\n// ────────────────────────────────────────────────────────────────────────────\n\nexport class IdelSchemaRegistry {\n private schemas = new Map<string, IntentSchema>();\n private aliases = new Map<string, string>();\n\n register(schema: IntentSchema): void {\n this.schemas.set(schema.intent, schema);\n }\n\n registerAlias(alias: string, intent: string): void {\n this.aliases.set(alias.toLowerCase(), intent);\n }\n\n get(intent: string): IntentSchema | undefined {\n return this.schemas.get(intent);\n }\n\n resolve(raw: string): IntentSchema | undefined {\n // Exact match\n const exact = this.schemas.get(raw);\n if (exact) return exact;\n\n // Alias match\n const aliased = this.aliases.get(raw.toLowerCase());\n if (aliased) return this.schemas.get(aliased);\n\n // Prefix match (e.g., \"payment\" → \"payment.create\")\n const candidates = [...this.schemas.keys()].filter(\n (k) => k.startsWith(raw + '.') || k.toLowerCase().includes(raw.toLowerCase()),\n );\n if (candidates.length === 1) {\n return this.schemas.get(candidates[0]);\n }\n\n return undefined;\n }\n\n /**\n * Find all schemas that partially match the raw input.\n * Returns scored candidates for ambiguity resolution.\n */\n findCandidates(raw: string): Array<{ schema: IntentSchema; score: number }> {\n const normalized = raw.toLowerCase().trim();\n const results: Array<{ schema: IntentSchema; score: number }> = [];\n\n for (const [key, schema] of this.schemas) {\n let score = 0;\n\n // Exact match\n if (key === raw) {\n score = 1.0;\n }\n // Case-insensitive exact\n else if (key.toLowerCase() === normalized) {\n score = 0.95;\n }\n // Alias match\n else if (this.aliases.get(normalized) === key) {\n score = 0.9;\n }\n // Prefix match\n else if (key.toLowerCase().startsWith(normalized)) {\n score = 0.7;\n }\n // Contains match\n else if (key.toLowerCase().includes(normalized)) {\n score = 0.5;\n }\n // Tag match\n else if (schema.tags?.some((t) => t.toLowerCase().includes(normalized))) {\n score = 0.4;\n }\n // Description match\n else if (schema.description.toLowerCase().includes(normalized)) {\n score = 0.3;\n }\n\n if (score > 0) {\n results.push({ schema, score });\n }\n }\n\n return results.sort((a, b) => b.score - a.score);\n }\n\n list(): IntentSchema[] {\n return [...this.schemas.values()];\n }\n}\n\n// ────────────────────────────────────────────────────────────────────────────\n// IDEL Compiler\n// ────────────────────────────────────────────────────────────────────────────\n\nexport class IdelCompiler {\n constructor(private readonly registry: IdelSchemaRegistry) {}\n\n /**\n * Compile a raw intent proposal into a validated, executable structure.\n */\n compile(proposal: IntentProposal): CompilationResult {\n const errors: CompilationError[] = [];\n\n // 1. Resolve intent\n const candidates = this.registry.findCandidates(proposal.raw);\n if (candidates.length === 0) {\n return {\n ok: false,\n errors: [{\n code: 'IDEL_UNKNOWN_INTENT',\n message: `No intent found matching '${proposal.raw}'`,\n }],\n };\n }\n\n const best = candidates[0];\n const schema = best.schema;\n\n // 2. Build alternatives\n const alternatives: AlternativeIntent[] = candidates\n .slice(1, 4)\n .filter((c) => c.score >= 0.3)\n .map((c) => ({\n intent: c.schema.intent,\n confidence: c.score,\n reason: c.schema.description,\n }));\n\n // 3. Validate parameters\n const constraints: IntentConstraint[] = [];\n const clarifications: ClarificationQuestion[] = [];\n const params = { ...proposal.params };\n\n for (const paramSchema of schema.params) {\n const value = params[paramSchema.name];\n\n // Required check\n if (paramSchema.required && value === undefined) {\n if (paramSchema.default !== undefined) {\n params[paramSchema.name] = paramSchema.default;\n constraints.push({\n kind: 'required_param',\n field: paramSchema.name,\n description: `Defaulted to ${JSON.stringify(paramSchema.default)}`,\n satisfied: true,\n value: paramSchema.default,\n });\n } else {\n constraints.push({\n kind: 'required_param',\n field: paramSchema.name,\n description: `Required parameter '${paramSchema.name}' is missing`,\n satisfied: false,\n });\n clarifications.push({\n id: `clarify_${paramSchema.name}`,\n question: paramSchema.description ?? `What is the ${paramSchema.name}?`,\n field: paramSchema.name,\n options: paramSchema.enum?.map(String),\n required: true,\n });\n }\n continue;\n }\n\n if (value === undefined) continue;\n\n // Type check\n const typeValid = validateType(value, paramSchema.type);\n constraints.push({\n kind: 'type_check',\n field: paramSchema.name,\n description: `Must be ${paramSchema.type}`,\n satisfied: typeValid,\n value,\n expected: paramSchema.type,\n });\n if (!typeValid) {\n errors.push({\n code: 'IDEL_TYPE_ERROR',\n message: `Parameter '${paramSchema.name}' must be ${paramSchema.type}, got ${typeof value}`,\n field: paramSchema.name,\n });\n }\n\n // Range check\n if (paramSchema.min !== undefined || paramSchema.max !== undefined) {\n const numVal = typeof value === 'number' ? value : Number(value);\n const inRange =\n (paramSchema.min === undefined || numVal >= paramSchema.min) &&\n (paramSchema.max === undefined || numVal <= paramSchema.max);\n constraints.push({\n kind: 'range',\n field: paramSchema.name,\n description: `Must be between ${paramSchema.min ?? '-∞'} and ${paramSchema.max ?? '∞'}`,\n satisfied: inRange,\n value: numVal,\n });\n }\n\n // Pattern check\n if (paramSchema.pattern) {\n const matches = new RegExp(paramSchema.pattern).test(String(value));\n constraints.push({\n kind: 'pattern',\n field: paramSchema.name,\n description: `Must match ${paramSchema.pattern}`,\n satisfied: matches,\n value,\n expected: paramSchema.pattern,\n });\n }\n\n // Enum check\n if (paramSchema.enum) {\n const inEnum = paramSchema.enum.some(\n (e) => JSON.stringify(e) === JSON.stringify(value),\n );\n constraints.push({\n kind: 'custom',\n field: paramSchema.name,\n description: `Must be one of: ${paramSchema.enum.join(', ')}`,\n satisfied: inEnum,\n value,\n expected: paramSchema.enum,\n });\n }\n }\n\n // 4. Assess risk\n const risk = assessRisk(schema, proposal, constraints);\n\n // 5. Compute confidence\n const unsatisfied = constraints.filter((c) => !c.satisfied);\n const needsClarification = clarifications.length > 0;\n let confidence = best.score;\n if (unsatisfied.length > 0) {\n confidence *= 1 - (unsatisfied.length / Math.max(constraints.length, 1)) * 0.5;\n }\n if (errors.length > 0) {\n confidence *= 0.5;\n }\n\n const compiled: CompiledIntent = {\n intent: schema.intent,\n actor_id: proposal.actor_id,\n target: proposal.target,\n params,\n constraints,\n confidence,\n alternatives,\n needs_clarification: needsClarification,\n clarifications,\n expected_outcome: schema.description,\n fallback: schema.related?.[0],\n risk,\n metadata: {\n schema_intent: schema.intent,\n resolved_from: proposal.raw,\n has_side_effects: schema.has_side_effects,\n reversible: schema.reversible,\n },\n };\n\n return {\n ok: errors.length === 0 && !needsClarification,\n compiled,\n errors,\n };\n }\n\n /**\n * Apply clarification answers and re-compile.\n */\n applyClarifications(\n compiled: CompiledIntent,\n answers: Record<string, unknown>,\n ): CompilationResult {\n const proposal: IntentProposal = {\n raw: compiled.intent,\n actor_id: compiled.actor_id,\n target: compiled.target,\n params: { ...compiled.params, ...answers },\n };\n return this.compile(proposal);\n }\n}\n\n// ────────────────────────────────────────────────────────────────────────────\n// Helpers\n// ────────────────────────────────────────────────────────────────────────────\n\nfunction validateType(value: unknown, expectedType: IntentParamSchema['type']): boolean {\n switch (expectedType) {\n case 'string':\n return typeof value === 'string';\n case 'number':\n return typeof value === 'number' && Number.isFinite(value);\n case 'boolean':\n return typeof value === 'boolean';\n case 'object':\n return typeof value === 'object' && value !== null && !Array.isArray(value);\n case 'array':\n return Array.isArray(value);\n default:\n return true;\n }\n}\n\nfunction assessRisk(\n schema: IntentSchema,\n proposal: IntentProposal,\n constraints: IntentConstraint[],\n): IntentRisk {\n const factors: string[] = [];\n let score = 0;\n\n // Base risk from schema\n const baseRiskMap: Record<RiskLevel, number> = {\n none: 0,\n low: 0.1,\n medium: 0.3,\n high: 0.6,\n critical: 0.9,\n };\n score = baseRiskMap[schema.risk_level] ?? 0;\n if (schema.risk_level !== 'none') {\n factors.push(`Base risk: ${schema.risk_level}`);\n }\n\n // Side effects increase risk\n if (schema.has_side_effects) {\n score += 0.1;\n factors.push('Has side effects');\n }\n\n // Irreversible actions increase risk\n if (!schema.reversible) {\n score += 0.1;\n factors.push('Not reversible');\n }\n\n // Failed constraints increase risk\n const failed = constraints.filter((c) => !c.satisfied);\n if (failed.length > 0) {\n score += 0.05 * failed.length;\n factors.push(`${failed.length} unsatisfied constraint(s)`);\n }\n\n // Clamp\n score = Math.min(score, 1.0);\n\n let level: RiskLevel;\n if (score <= 0) level = 'none';\n else if (score <= 0.2) level = 'low';\n else if (score <= 0.5) level = 'medium';\n else if (score <= 0.8) level = 'high';\n else level = 'critical';\n\n return { level, score, factors };\n}\n","/**\n * Needle Engine — The unified execution pipeline\n *\n * Runs the full formula:\n * Intent → Needle enters (AXIS) → Action happens →\n * Observer verifies → Stitch is formed → Thread grows\n *\n * Each phase maps to a concrete operation:\n * created → assembleNeedle()\n * validated → executeLoomPipeline() gates\n * executing → handler runs\n * observed → verifyObservation()\n * stitched → formStitch() + updateThreadState()\n */\n\nimport { createHash, randomBytes } from 'crypto';\nimport {\n createObservation,\n startStage,\n endStage,\n finalizeObservation,\n recordSensor,\n} from '../engine/axis-observation';\nimport type { AxisObservation, ObservationStage } from '../engine/axis-observation';\nimport { scoreTruth } from '../engine/observation/truth-scoring';\nimport type { ExpectedOutcome, TruthVerdict } from '../engine/observation/truth-scoring';\nimport {\n validateWrit,\n createReceipt,\n updateThreadState,\n} from '../loom/loom.engine';\nimport type { LoomReceipt, ThreadState } from '../loom/loom.types';\nimport type { CompiledIntent } from '../idel/idel.types';\nimport type {\n Needle,\n NeedleError,\n NeedleHandler,\n NeedleHandlerContext,\n NeedleHandlerResult,\n NeedlePipelineConfig,\n NeedlePipelineResult,\n Stitch,\n StitchKind,\n NeedlePhase,\n} from './needle.types';\nimport type { Grant, PresenceReceipt, Writ } from '../loom/loom.types';\nimport type { AxisSensor, SensorInput } from '../sensor/axis-sensor';\nimport { normalizeSensorDecision } from '../sensor/axis-sensor';\n\n// ────────────────────────────────────────────────────────────────────────────\n// Needle Assembly\n// ────────────────────────────────────────────────────────────────────────────\n\n/**\n * Assemble a Needle — the execution carrier.\n * This combines intent + presence + writ + grants into a single context.\n */\nexport function assembleNeedle(params: {\n intent: CompiledIntent;\n presence: PresenceReceipt;\n writ: Writ;\n grants: Grant[];\n tps_coordinate?: string;\n}): Needle {\n return {\n needle_id: randomBytes(16).toString('hex'),\n phase: 'created',\n tps_coordinate: params.tps_coordinate,\n intent: params.intent,\n presence: params.presence,\n writ: params.writ,\n grants: params.grants,\n created_at: Date.now(),\n };\n}\n\n// ────────────────────────────────────────────────────────────────────────────\n// Stitch Formation\n// ────────────────────────────────────────────────────────────────────────────\n\n/**\n * Determine stitch kind from observation and verdict.\n */\nfunction classifyStitch(\n observation: AxisObservation,\n verdict: TruthVerdict,\n): StitchKind {\n // Failed or disputed → torn\n if (verdict.status === 'failed' || verdict.status === 'disputed') {\n return 'torn';\n }\n\n // DENY or no visible effect → silent stitch\n if (observation.decision === 'DENY') {\n return 'silent';\n }\n\n // Confirmed or partial deed → deed\n if (verdict.isDeed) {\n return 'deed';\n }\n\n // Uncertain but not failed → silent\n return 'silent';\n}\n\n/**\n * Form a Stitch from a completed Needle.\n * A Stitch = Needle (execution) + Observer (verification)\n */\nexport function formStitch(\n needle: Needle,\n observation: AxisObservation,\n verdict: TruthVerdict,\n receipt: LoomReceipt,\n): Stitch {\n return {\n stitch_id: needle.needle_id,\n kind: classifyStitch(observation, verdict),\n intent: needle.intent.intent,\n actor_id: needle.intent.actor_id,\n tps_coordinate: needle.tps_coordinate,\n observation,\n verdict,\n receipt,\n thread_id: receipt.thread_id,\n sequence: receipt.sequence,\n stitched_at: Date.now(),\n };\n}\n\n// ────────────────────────────────────────────────────────────────────────────\n// Needle Pipeline\n// ────────────────────────────────────────────────────────────────────────────\n\n/**\n * Run the full Needle pipeline:\n *\n * 1. Validate (Loom gates: temporal, causal, legal, authentic)\n * 2. Execute (handler runs the action)\n * 3. Observe (create observation + score truth)\n * 4. Stitch (form stitch, create receipt, grow thread)\n */\nexport async function runNeedlePipeline(\n needle: Needle,\n config: NeedlePipelineConfig,\n threadState: ThreadState | null,\n prevReceipt: LoomReceipt | null,\n expectedOutcome?: ExpectedOutcome,\n): Promise<NeedlePipelineResult> {\n const obs = createObservation('http');\n obs.intent = needle.intent.intent;\n obs.actorId = needle.intent.actor_id;\n\n // ── Phase 1: Validate (Loom gates) ──\n needle.phase = 'validated';\n let stage: ObservationStage = startStage(obs, 'loom.validate');\n\n const validation = validateWrit(\n needle.writ,\n config.public_key,\n threadState,\n needle.grants,\n );\n\n if (!validation.valid) {\n endStage(stage, 'fail', validation.error);\n return failNeedle(needle, obs, 'validated', 'LOOM_VALIDATION_FAILED', validation.error ?? 'Writ validation failed');\n }\n\n endStage(stage, 'ok');\n\n // ── Phase 1.5: Sensors (reality gates) ──\n if (config.sensors && config.sensors.length > 0) {\n stage = startStage(obs, 'sensors.evaluate');\n\n const sensorInput: SensorInput = {\n intent: needle.intent.intent,\n actorId: needle.intent.actor_id,\n metadata: {\n observation: obs,\n needle_id: needle.needle_id,\n tps_coordinate: needle.tps_coordinate,\n writ: needle.writ,\n grants: needle.grants,\n params: needle.intent.params,\n },\n };\n\n for (const sensor of config.sensors) {\n if (sensor.supports && !sensor.supports(sensorInput)) continue;\n\n const t0 = Date.now();\n let decision;\n try {\n const rawDecision = await sensor.run(sensorInput);\n decision = normalizeSensorDecision(rawDecision);\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n recordSensor(obs, sensor.name, false, 100, Date.now() - t0, [`sensor_error:${msg}`]);\n endStage(stage, 'fail', `Sensor ${sensor.name} threw: ${msg}`);\n return failNeedle(needle, obs, 'validated', 'SENSOR_ERROR', `Sensor ${sensor.name} failed: ${msg}`);\n }\n\n recordSensor(obs, sensor.name, decision.allow, decision.riskScore, Date.now() - t0, decision.reasons);\n\n if (!decision.allow) {\n endStage(stage, 'fail', `Sensor ${sensor.name} denied`);\n return failNeedle(needle, obs, 'validated', 'SENSOR_DENY', decision.reasons[0] ?? `Denied by ${sensor.name}`);\n }\n }\n\n endStage(stage, 'ok');\n }\n\n // ── Phase 2: Execute (handler) ──\n needle.phase = 'executing';\n stage = startStage(obs, 'handler.execute');\n\n const handler = config.handlers.get(needle.intent.intent);\n if (!handler) {\n endStage(stage, 'fail', `No handler for intent '${needle.intent.intent}'`);\n return failNeedle(needle, obs, 'executing', 'NO_HANDLER', `No handler registered for intent '${needle.intent.intent}'`);\n }\n\n const handlerCtx: NeedleHandlerContext = {\n needle_id: needle.needle_id,\n actor_id: needle.intent.actor_id,\n presence_id: needle.presence.presence_id,\n writ: needle.writ,\n grants: needle.grants,\n tps_coordinate: needle.tps_coordinate,\n };\n\n let handlerResult: NeedleHandlerResult;\n try {\n handlerResult = await handler(needle.intent, handlerCtx);\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n endStage(stage, 'fail', msg);\n return failNeedle(needle, obs, 'executing', 'HANDLER_ERROR', msg);\n }\n\n if (!handlerResult.ok) {\n endStage(stage, 'fail', handlerResult.effect);\n obs.decision = 'DENY';\n obs.resultCode = handlerResult.effect;\n obs.statusCode = handlerResult.status_code ?? 400;\n } else {\n endStage(stage, 'ok');\n obs.decision = 'ALLOW';\n obs.resultCode = handlerResult.effect;\n obs.statusCode = handlerResult.status_code ?? 200;\n }\n\n if (handlerResult.data) {\n obs.facts = { ...obs.facts, ...handlerResult.data };\n }\n\n // ── Phase 3: Observe ──\n needle.phase = 'observed';\n finalizeObservation(obs, obs.decision ?? 'DENY', obs.statusCode ?? 500, obs.resultCode);\n needle.observation = obs;\n\n const verdict = scoreTruth(obs, expectedOutcome);\n needle.verdict = verdict;\n\n // ── Phase 4: Stitch ──\n needle.phase = 'stitched';\n stage = startStage(obs, 'stitch.form');\n\n const receipt = createReceipt(\n needle.writ,\n obs.decision ?? 'DENY',\n prevReceipt,\n );\n needle.receipt = receipt;\n\n const newThreadState = updateThreadState(\n receipt,\n needle.intent.actor_id,\n );\n\n const stitch = formStitch(needle, obs, verdict, receipt);\n needle.completed_at = Date.now();\n\n endStage(stage, 'ok');\n\n return {\n ok: handlerResult.ok,\n needle,\n stitch,\n thread_state: newThreadState,\n };\n}\n\n// ────────────────────────────────────────────────────────────────────────────\n// Helpers\n// ────────────────────────────────────────────────────────────────────────────\n\nfunction failNeedle(\n needle: Needle,\n obs: AxisObservation,\n phase: NeedlePhase,\n code: string,\n message: string,\n): NeedlePipelineResult {\n needle.phase = 'failed';\n needle.error = { phase, code, message };\n needle.completed_at = Date.now();\n\n obs.decision = obs.decision ?? 'DENY';\n obs.statusCode = obs.statusCode ?? 500;\n finalizeObservation(obs, obs.decision, obs.statusCode, obs.resultCode);\n needle.observation = obs;\n\n const verdict = scoreTruth(obs);\n needle.verdict = verdict;\n\n return {\n ok: false,\n needle,\n };\n}\n","/**\n * Knot Engine — Critical binding points in the Thread\n *\n * Operations:\n * openKnot() → start a knot (begin grouping stitches)\n * addStitch() → add a stitch to an open knot\n * validateKnot() → check if all stitches are valid and complete\n * tieKnot() → seal the knot (immutable from here)\n * breakKnot() → break a knot (requires authority for law/irreversible)\n * forkFromKnot() → create a new branch from a decision knot\n */\n\nimport { createHash, randomBytes } from 'crypto';\nimport type {\n Knot,\n KnotBreakRequest,\n KnotError,\n KnotStatus,\n KnotType,\n KnotValidationResult,\n} from './knot.types';\nimport type { Stitch } from './needle.types';\n\n// ────────────────────────────────────────────────────────────────────────────\n// Open a Knot\n// ────────────────────────────────────────────────────────────────────────────\n\nexport interface OpenKnotParams {\n type: KnotType;\n thread_id: string;\n actor_id: string;\n tps_anchor?: string;\n capsule_id?: string;\n law_ref?: string;\n required_count?: number;\n all_or_nothing?: boolean;\n}\n\n/**\n * Open a new knot — begin grouping stitches into a critical binding point.\n */\nexport function openKnot(params: OpenKnotParams): Knot {\n const isIrreversible = params.type === 'irreversible';\n\n return {\n knot_id: `knot_${randomBytes(16).toString('hex')}`,\n type: params.type,\n status: 'open',\n stitch_ids: [],\n thread_id: params.thread_id,\n tps_anchor: params.tps_anchor,\n irreversible: isIrreversible,\n capsule_id: params.capsule_id,\n law_ref: params.law_ref,\n branch_ids: [],\n required_count: params.required_count,\n all_or_nothing: params.all_or_nothing ?? (params.type === 'authority' || isIrreversible),\n actor_id: params.actor_id,\n created_at: Date.now(),\n };\n}\n\n// ────────────────────────────────────────────────────────────────────────────\n// Add Stitch to Knot\n// ────────────────────────────────────────────────────────────────────────────\n\n/**\n * Add a stitch to an open knot.\n * Returns an error string if the stitch cannot be added.\n */\nexport function addStitchToKnot(\n knot: Knot,\n stitch: Stitch,\n): string | null {\n if (knot.status !== 'open') {\n return `Knot ${knot.knot_id} is ${knot.status}, cannot add stitches`;\n }\n\n if (stitch.thread_id !== knot.thread_id) {\n return `Stitch thread ${stitch.thread_id} does not match knot thread ${knot.thread_id}`;\n }\n\n if (knot.stitch_ids.includes(stitch.stitch_id)) {\n return `Stitch ${stitch.stitch_id} already in knot`;\n }\n\n // Authority knots: verify capsule matches\n if (knot.type === 'authority' && knot.capsule_id) {\n if (stitch.observation.capsuleId && stitch.observation.capsuleId !== knot.capsule_id) {\n return `Stitch capsule ${stitch.observation.capsuleId} does not match knot capsule ${knot.capsule_id}`;\n }\n }\n\n knot.stitch_ids.push(stitch.stitch_id);\n return null;\n}\n\n// ────────────────────────────────────────────────────────────────────────────\n// Validate Knot\n// ────────────────────────────────────────────────────────────────────────────\n\n/**\n * Validate a knot — check if all stitches are valid and the knot can be tied.\n */\nexport function validateKnot(\n knot: Knot,\n stitches: Stitch[],\n): KnotValidationResult {\n const errors: KnotError[] = [];\n const passedIds: string[] = [];\n const failedIds: string[] = [];\n\n // Rule 2: Knot must be fully witnessed — all stitches must exist\n const stitchMap = new Map(stitches.map((s) => [s.stitch_id, s]));\n\n for (const sid of knot.stitch_ids) {\n const stitch = stitchMap.get(sid);\n if (!stitch) {\n failedIds.push(sid);\n errors.push({\n code: 'KNOT_MISSING_STITCH',\n message: `Stitch ${sid} not found`,\n stitch_id: sid,\n });\n continue;\n }\n\n // Torn stitches fail validation\n if (stitch.kind === 'torn') {\n failedIds.push(sid);\n errors.push({\n code: 'KNOT_TORN_STITCH',\n message: `Stitch ${sid} is torn (failed/disputed)`,\n stitch_id: sid,\n });\n continue;\n }\n\n // Rule 3: Irreversible knots require deed-level stitches (not silent)\n if (knot.type === 'irreversible' && stitch.kind !== 'deed') {\n failedIds.push(sid);\n errors.push({\n code: 'KNOT_REQUIRES_DEED',\n message: `Irreversible knot requires deed stitch, got '${stitch.kind}'`,\n stitch_id: sid,\n });\n continue;\n }\n\n passedIds.push(sid);\n }\n\n // Check minimum required count\n if (knot.required_count !== undefined && knot.stitch_ids.length < knot.required_count) {\n errors.push({\n code: 'KNOT_INSUFFICIENT_STITCHES',\n message: `Knot requires ${knot.required_count} stitches, has ${knot.stitch_ids.length}`,\n });\n }\n\n // all_or_nothing: if any failed, knot cannot be tied\n const allPassed = failedIds.length === 0;\n const canTie = knot.all_or_nothing\n ? allPassed && (knot.required_count === undefined || knot.stitch_ids.length >= knot.required_count)\n : passedIds.length > 0 && (knot.required_count === undefined || passedIds.length >= knot.required_count);\n\n return {\n valid: allPassed && errors.length === 0,\n passed_stitch_ids: passedIds,\n failed_stitch_ids: failedIds,\n can_tie: canTie,\n errors,\n };\n}\n\n// ────────────────────────────────────────────────────────────────────────────\n// Tie Knot (seal it)\n// ────────────────────────────────────────────────────────────────────────────\n\n/**\n * Tie (seal) a knot — makes it immutable.\n * Computes a witness hash over all stitch receipt hashes.\n */\nexport function tieKnot(\n knot: Knot,\n stitches: Stitch[],\n): KnotValidationResult & { knot: Knot } {\n const validation = validateKnot(knot, stitches);\n\n if (!validation.can_tie) {\n return { ...validation, knot };\n }\n\n // Compute witness hash: H(stitch_receipt_hash_1 : stitch_receipt_hash_2 : ...)\n const receiptHashes = validation.passed_stitch_ids\n .map((sid) => stitches.find((s) => s.stitch_id === sid)!)\n .sort((a, b) => a.sequence - b.sequence)\n .map((s) => s.receipt.hash);\n\n const witnessPayload = receiptHashes.join(':');\n knot.witness_hash = createHash('sha256')\n .update(witnessPayload)\n .digest('hex');\n\n knot.status = 'tied';\n knot.tied_at = Date.now();\n\n return { ...validation, knot };\n}\n\n// ────────────────────────────────────────────────────────────────────────────\n// Break Knot\n// ────────────────────────────────────────────────────────────────────────────\n\n/**\n * Break a knot — requires authority for law/irreversible knots.\n *\n * Rule 1: Knot cannot be silently broken — must have reason + actor.\n * Rule 3: Irreversible knots require override_grant_id.\n */\nexport function breakKnot(\n knot: Knot,\n request: KnotBreakRequest,\n): { ok: boolean; error?: string } {\n if (knot.status === 'broken') {\n return { ok: false, error: 'Knot is already broken' };\n }\n\n if (knot.status === 'open') {\n // Open knots can be broken by the creator\n knot.status = 'broken';\n knot.broken_at = Date.now();\n knot.break_reason = request.reason;\n return { ok: true };\n }\n\n // Tied knots require stronger authority\n if (knot.status === 'tied') {\n // Rule 1: Must have a reason\n if (!request.reason) {\n return { ok: false, error: 'Breaking a tied knot requires a reason' };\n }\n\n // Rule 3: Irreversible + law knots need override authority\n if ((knot.irreversible || knot.type === 'law') && !request.override_grant_id) {\n return {\n ok: false,\n error: `Breaking ${knot.type} knot requires override_grant_id from higher authority`,\n };\n }\n\n knot.status = 'broken';\n knot.broken_at = Date.now();\n knot.break_reason = request.reason;\n return { ok: true };\n }\n\n return { ok: false, error: `Cannot break knot in status '${knot.status}'` };\n}\n\n// ────────────────────────────────────────────────────────────────────────────\n// Fork from Knot\n// ────────────────────────────────────────────────────────────────────────────\n\n/**\n * Mark a knot as a decision/fork point and register a new branch.\n *\n * Rule 4: Forking from knot creates new branch.\n */\nexport function forkFromKnot(\n knot: Knot,\n branchId: string,\n decisionStitchId?: string,\n): { ok: boolean; error?: string } {\n if (knot.status !== 'tied' && knot.status !== 'open') {\n return { ok: false, error: `Cannot fork from knot in status '${knot.status}'` };\n }\n\n if (decisionStitchId) {\n if (!knot.stitch_ids.includes(decisionStitchId)) {\n return { ok: false, error: `Decision stitch ${decisionStitchId} is not part of this knot` };\n }\n knot.decision_stitch_id = decisionStitchId;\n }\n\n knot.branch_ids.push(branchId);\n knot.status = 'forked';\n return { ok: true };\n}\n\n// ────────────────────────────────────────────────────────────────────────────\n// Query Helpers\n// ────────────────────────────────────────────────────────────────────────────\n\n/** Check if a knot is still open and accepting stitches */\nexport function isKnotOpen(knot: Knot): boolean {\n return knot.status === 'open';\n}\n\n/** Check if a knot represents a point of no return */\nexport function isPointOfNoReturn(knot: Knot): boolean {\n return knot.irreversible && knot.status === 'tied';\n}\n\n/** Check if a stitch is part of any knot in a set */\nexport function findKnotsForStitch(\n stitchId: string,\n knots: Knot[],\n): Knot[] {\n return knots.filter((k) => k.stitch_ids.includes(stitchId));\n}\n\n/** Get all irreversible knots in a thread */\nexport function getIrreversibleKnots(knots: Knot[]): Knot[] {\n return knots.filter((k) => k.irreversible && k.status === 'tied');\n}\n\n/** Get decision points (fork knots) in a thread */\nexport function getDecisionPoints(knots: Knot[]): Knot[] {\n return knots.filter((k) => k.type === 'decision' || k.status === 'forked');\n}\n","/**\n * Fabric Engine — State projection from stitches\n *\n * Weaves stitches into a unified state (Fabric).\n *\n * Operations:\n * createFabric() → empty fabric\n * applyStitch() → apply one stitch's effect to the fabric\n * weave() → project fabric from a sequence of stitches\n * projectAt() → compute fabric state at a specific TPS coordinate\n * queryFabric() → search fabric cells\n * diffFabrics() → compare two fabric states\n * lockCells() → mark cells as locked by an irreversible knot\n */\n\nimport { createHash, randomBytes } from 'crypto';\nimport type {\n Fabric,\n FabricCell,\n FabricDiff,\n FabricDiffEntry,\n FabricEffect,\n FabricEffectResolver,\n FabricQuery,\n} from './fabric.types';\nimport type { Knot } from './knot.types';\nimport type { Stitch } from './needle.types';\n\n// ────────────────────────────────────────────────────────────────────────────\n// Create\n// ────────────────────────────────────────────────────────────────────────────\n\n/** Create an empty Fabric. */\nexport function createFabric(): Fabric {\n return {\n fabric_id: `fab_${randomBytes(16).toString('hex')}`,\n state_hash: hashState(new Map()),\n cells: new Map(),\n thread_ids: [],\n stitch_count: 0,\n knot_count: 0,\n computed_at: Date.now(),\n version: 0,\n };\n}\n\n// ────────────────────────────────────────────────────────────────────────────\n// Apply single stitch\n// ────────────────────────────────────────────────────────────────────────────\n\n/**\n * Apply a single stitch's effect to the fabric.\n * Mutates the fabric in place and increments version.\n */\nexport function applyStitch(\n fabric: Fabric,\n stitch: Stitch,\n effect: FabricEffect,\n): void {\n // Apply mutations\n for (const [key, value] of Object.entries(effect.mutations)) {\n if (value === null) {\n // Delete\n fabric.cells.delete(key);\n } else {\n const existing = fabric.cells.get(key);\n\n // Cannot write to locked cells\n if (existing?.locked) {\n continue;\n }\n\n fabric.cells.set(key, {\n key,\n value,\n last_stitch_id: stitch.stitch_id,\n last_tps: stitch.tps_coordinate,\n write_count: (existing?.write_count ?? 0) + 1,\n locked: false,\n });\n }\n }\n\n // Track thread\n if (!fabric.thread_ids.includes(stitch.thread_id)) {\n fabric.thread_ids.push(stitch.thread_id);\n }\n\n fabric.stitch_count++;\n fabric.version++;\n fabric.projected_at_tps = stitch.tps_coordinate ?? fabric.projected_at_tps;\n fabric.computed_at = Date.now();\n fabric.state_hash = hashState(fabric.cells);\n}\n\n// ────────────────────────────────────────────────────────────────────────────\n// Weave (batch projection)\n// ────────────────────────────────────────────────────────────────────────────\n\n/**\n * Weave a sequence of stitches into a fabric.\n * Stitches must be in chronological order (by sequence).\n * The resolver extracts the FabricEffect from each stitch.\n */\nexport function weave(\n stitches: Stitch[],\n resolver: FabricEffectResolver,\n knots?: Knot[],\n): Fabric {\n const fabric = createFabric();\n\n // Sort by sequence to ensure deterministic ordering\n const sorted = [...stitches].sort((a, b) => a.sequence - b.sequence);\n\n for (const stitch of sorted) {\n // Skip torn stitches — they don't affect reality\n if (stitch.kind === 'torn') continue;\n\n const effect = resolver(stitch);\n applyStitch(fabric, stitch, effect);\n }\n\n // Apply knot locks\n if (knots) {\n for (const knot of knots) {\n if (knot.irreversible && knot.status === 'tied') {\n lockCellsByKnot(fabric, knot, stitches, resolver);\n fabric.knot_count++;\n }\n }\n }\n\n return fabric;\n}\n\n/**\n * Project fabric state at a specific TPS coordinate.\n * Only applies stitches up to (and including) the given TPS.\n */\nexport function projectAt(\n stitches: Stitch[],\n resolver: FabricEffectResolver,\n tpsFilter: (tps: string | undefined) => boolean,\n knots?: Knot[],\n): Fabric {\n const filtered = stitches.filter((s) => tpsFilter(s.tps_coordinate));\n return weave(filtered, resolver, knots);\n}\n\n// ────────────────────────────────────────────────────────────────────────────\n// Lock cells (irreversible knots)\n// ────────────────────────────────────────────────────────────────────────────\n\n/**\n * Lock all cells touched by stitches in an irreversible knot.\n * Locked cells cannot be overwritten by future stitches.\n */\nfunction lockCellsByKnot(\n fabric: Fabric,\n knot: Knot,\n stitches: Stitch[],\n resolver: FabricEffectResolver,\n): void {\n const knotStitchIds = new Set(knot.stitch_ids);\n const knotStitches = stitches.filter((s) => knotStitchIds.has(s.stitch_id));\n\n for (const stitch of knotStitches) {\n const effect = resolver(stitch);\n for (const key of Object.keys(effect.mutations)) {\n const cell = fabric.cells.get(key);\n if (cell) {\n cell.locked = true;\n cell.locked_by_knot = knot.knot_id;\n }\n }\n }\n}\n\n/** Manually lock specific cells by an irreversible knot. */\nexport function lockCells(\n fabric: Fabric,\n keys: string[],\n knotId: string,\n): void {\n for (const key of keys) {\n const cell = fabric.cells.get(key);\n if (cell) {\n cell.locked = true;\n cell.locked_by_knot = knotId;\n }\n }\n}\n\n// ────────────────────────────────────────────────────────────────────────────\n// Query\n// ────────────────────────────────────────────────────────────────────────────\n\n/** Query the fabric for cells matching criteria. */\nexport function queryFabric(\n fabric: Fabric,\n query: FabricQuery,\n): FabricCell[] {\n let results = [...fabric.cells.values()];\n\n if (query.keys) {\n const keySet = new Set(query.keys);\n results = results.filter((c) => keySet.has(c.key));\n }\n\n if (query.prefix) {\n const prefix = query.prefix;\n results = results.filter((c) => c.key.startsWith(prefix));\n }\n\n if (query.locked_only) {\n results = results.filter((c) => c.locked);\n }\n\n return results;\n}\n\n/** Get a single cell value. */\nexport function getFabricValue(\n fabric: Fabric,\n key: string,\n): unknown | undefined {\n return fabric.cells.get(key)?.value;\n}\n\n// ────────────────────────────────────────────────────────────────────────────\n// Diff\n// ────────────────────────────────────────────────────────────────────────────\n\n/** Compute the diff between two fabric states. */\nexport function diffFabrics(a: Fabric, b: Fabric): FabricDiff {\n const entries: FabricDiffEntry[] = [];\n let added = 0;\n let modified = 0;\n let deleted = 0;\n\n // Check all keys in B\n for (const [key, cellB] of b.cells) {\n const cellA = a.cells.get(key);\n if (!cellA) {\n entries.push({\n key,\n kind: 'added',\n after: cellB.value,\n caused_by_stitch: cellB.last_stitch_id,\n });\n added++;\n } else if (JSON.stringify(cellA.value) !== JSON.stringify(cellB.value)) {\n entries.push({\n key,\n kind: 'modified',\n before: cellA.value,\n after: cellB.value,\n caused_by_stitch: cellB.last_stitch_id,\n });\n modified++;\n }\n }\n\n // Check keys in A but not in B (deleted)\n for (const [key, cellA] of a.cells) {\n if (!b.cells.has(key)) {\n entries.push({\n key,\n kind: 'deleted',\n before: cellA.value,\n });\n deleted++;\n }\n }\n\n return {\n from_fabric_id: a.fabric_id,\n to_fabric_id: b.fabric_id,\n entries,\n added_count: added,\n modified_count: modified,\n deleted_count: deleted,\n };\n}\n\n// ────────────────────────────────────────────────────────────────────────────\n// Hash\n// ────────────────────────────────────────────────────────────────────────────\n\nfunction hashState(cells: Map<string, FabricCell>): string {\n const keys = [...cells.keys()].sort();\n const payload = keys\n .map((k) => `${k}=${JSON.stringify(cells.get(k)!.value)}`)\n .join('\\n');\n return createHash('sha256').update(payload).digest('hex');\n}\n","/**\n * Pattern Engine — Detect, record, and predict from recurring structures\n *\n * Operations:\n * InMemoryPatternStore → simple pattern storage\n * detectSequencePattern() → find recurring intent sequences in stitches\n * detectKnotPattern() → find recurring knot formations\n * matchPatterns() → check stitches against known patterns\n * recordOccurrence() → update a pattern when it's seen again\n */\n\nimport { randomBytes } from 'crypto';\nimport type {\n Pattern,\n PatternKind,\n PatternMatch,\n PatternSignature,\n PatternStore,\n} from './pattern.types';\nimport type { Knot } from './knot.types';\nimport type { Stitch } from './needle.types';\n\n// ────────────────────────────────────────────────────────────────────────────\n// In-Memory Pattern Store\n// ────────────────────────────────────────────────────────────────────────────\n\nexport class InMemoryPatternStore implements PatternStore {\n private patterns = new Map<string, Pattern>();\n\n save(pattern: Pattern): void {\n this.patterns.set(pattern.pattern_id, pattern);\n }\n\n get(patternId: string): Pattern | undefined {\n return this.patterns.get(patternId);\n }\n\n findByKind(kind: PatternKind): Pattern[] {\n return [...this.patterns.values()].filter((p) => p.kind === kind);\n }\n\n findByIntent(intent: string): Pattern[] {\n return [...this.patterns.values()].filter(\n (p) => p.signature.intent_sequence?.includes(intent),\n );\n }\n\n all(): Pattern[] {\n return [...this.patterns.values()];\n }\n}\n\n// ────────────────────────────────────────────────────────────────────────────\n// Sequence Pattern Detection\n// ────────────────────────────────────────────────────────────────────────────\n\n/**\n * Detect recurring intent sequences within a set of stitches.\n * Uses a sliding window to find sequences that appear at least `minOccurrences` times.\n */\nexport function detectSequencePatterns(\n stitches: Stitch[],\n windowSize: number,\n minOccurrences: number,\n): Pattern[] {\n if (stitches.length < windowSize || windowSize < 2) return [];\n\n const sorted = [...stitches].sort((a, b) => a.sequence - b.sequence);\n const sequenceCounts = new Map<string, { count: number; stitch_ids: string[][] }>();\n\n // Slide window across stitches\n for (let i = 0; i <= sorted.length - windowSize; i++) {\n const window = sorted.slice(i, i + windowSize);\n const key = window.map((s) => s.intent).join('→');\n const ids = window.map((s) => s.stitch_id);\n\n const existing = sequenceCounts.get(key);\n if (existing) {\n existing.count++;\n existing.stitch_ids.push(ids);\n } else {\n sequenceCounts.set(key, { count: 1, stitch_ids: [ids] });\n }\n }\n\n // Filter by minimum occurrences\n const patterns: Pattern[] = [];\n const now = Date.now();\n\n for (const [key, data] of sequenceCounts) {\n if (data.count < minOccurrences) continue;\n\n const intents = key.split('→');\n const confidence = Math.min(data.count / (minOccurrences * 2), 1.0);\n\n patterns.push({\n pattern_id: `pat_seq_${randomBytes(8).toString('hex')}`,\n kind: 'sequence',\n name: `Sequence: ${intents.join(' → ')}`,\n signature: {\n intent_sequence: intents,\n min_length: windowSize,\n max_length: windowSize,\n },\n confidence,\n occurrence_count: data.count,\n first_seen_at: now,\n last_seen_at: now,\n seen_in_threads: [...new Set(\n data.stitch_ids.flatMap((ids) =>\n ids.map((id) => sorted.find((s) => s.stitch_id === id)?.thread_id).filter(Boolean) as string[],\n ),\n )],\n classification: 'unclassified',\n });\n }\n\n return patterns;\n}\n\n// ────────────────────────────────────────────────────────────────────────────\n// Knot Pattern Detection\n// ────────────────────────────────────────────────────────────────────────────\n\n/**\n * Detect recurring knot formations (same type + similar size).\n */\nexport function detectKnotPatterns(\n knots: Knot[],\n minOccurrences: number,\n): Pattern[] {\n const groups = new Map<string, Knot[]>();\n\n for (const knot of knots) {\n if (knot.status !== 'tied') continue;\n const key = `${knot.type}:${knot.stitch_ids.length}`;\n const group = groups.get(key) ?? [];\n group.push(knot);\n groups.set(key, group);\n }\n\n const patterns: Pattern[] = [];\n const now = Date.now();\n\n for (const [key, group] of groups) {\n if (group.length < minOccurrences) continue;\n\n const [type, sizeStr] = key.split(':');\n const size = parseInt(sizeStr, 10);\n const confidence = Math.min(group.length / (minOccurrences * 2), 1.0);\n\n patterns.push({\n pattern_id: `pat_knot_${randomBytes(8).toString('hex')}`,\n kind: 'knot',\n name: `Knot: ${type} (${size} stitches)`,\n signature: {\n knot_type: type as Pattern['signature']['knot_type'],\n knot_size: size,\n },\n confidence,\n occurrence_count: group.length,\n first_seen_at: now,\n last_seen_at: now,\n seen_in_threads: [...new Set(group.map((k) => k.thread_id))],\n classification: 'unclassified',\n });\n }\n\n return patterns;\n}\n\n// ────────────────────────────────────────────────────────────────────────────\n// Pattern Matching\n// ────────────────────────────────────────────────────────────────────────────\n\n/**\n * Match a set of stitches against known patterns.\n * Returns all matches with their scores.\n */\nexport function matchPatterns(\n stitches: Stitch[],\n patterns: Pattern[],\n): PatternMatch[] {\n const sorted = [...stitches].sort((a, b) => a.sequence - b.sequence);\n const matches: PatternMatch[] = [];\n const now = Date.now();\n\n for (const pattern of patterns) {\n if (pattern.kind === 'sequence' && pattern.signature.intent_sequence) {\n const seq = pattern.signature.intent_sequence;\n const seqLen = seq.length;\n\n // Slide window\n for (let i = 0; i <= sorted.length - seqLen; i++) {\n const window = sorted.slice(i, i + seqLen);\n const windowIntents = window.map((s) => s.intent);\n\n if (windowIntents.every((intent, idx) => intent === seq[idx])) {\n matches.push({\n pattern_id: pattern.pattern_id,\n matched_stitch_ids: window.map((s) => s.stitch_id),\n match_score: 1.0,\n thread_id: window[0].thread_id,\n detected_at: now,\n });\n }\n }\n }\n }\n\n return matches;\n}\n\n// ────────────────────────────────────────────────────────────────────────────\n// Record Occurrence\n// ────────────────────────────────────────────────────────────────────────────\n\n/**\n * Record that a pattern was observed again.\n * Updates occurrence count, last_seen_at, confidence, and thread tracking.\n */\nexport function recordOccurrence(\n pattern: Pattern,\n threadId: string,\n): void {\n pattern.occurrence_count++;\n pattern.last_seen_at = Date.now();\n\n // Confidence grows with occurrences (asymptotic to 1.0)\n pattern.confidence = 1 - 1 / (1 + pattern.occurrence_count * 0.5);\n\n if (!pattern.seen_in_threads.includes(threadId)) {\n pattern.seen_in_threads.push(threadId);\n }\n}\n\n// ────────────────────────────────────────────────────────────────────────────\n// Anomaly Detection\n// ────────────────────────────────────────────────────────────────────────────\n\n/**\n * Check if recent stitches deviate from established patterns.\n * Returns anomaly patterns for sequences that should match but don't.\n */\nexport function detectAnomalies(\n recentStitches: Stitch[],\n knownPatterns: Pattern[],\n threshold: number = 0.7,\n): Pattern[] {\n const anomalies: Pattern[] = [];\n const sorted = [...recentStitches].sort((a, b) => a.sequence - b.sequence);\n const now = Date.now();\n\n for (const pattern of knownPatterns) {\n if (pattern.kind !== 'sequence' || !pattern.signature.intent_sequence) continue;\n if (pattern.confidence < threshold) continue;\n\n const seq = pattern.signature.intent_sequence;\n // Check if the sequence started but didn't complete\n if (sorted.length >= 1 && sorted.length < seq.length) {\n const partialMatch = sorted.every(\n (s, i) => i < seq.length && s.intent === seq[i],\n );\n\n if (partialMatch) {\n // Started the pattern but didn't finish — might be anomaly\n const expectedNext = seq[sorted.length];\n const lastStitch = sorted[sorted.length - 1];\n\n // Only flag if the pattern is well-established\n if (pattern.occurrence_count >= 3) {\n anomalies.push({\n pattern_id: `pat_anom_${randomBytes(8).toString('hex')}`,\n kind: 'anomaly',\n name: `Incomplete: ${pattern.name}`,\n description: `Expected '${expectedNext}' after '${lastStitch.intent}' based on pattern '${pattern.name}'`,\n signature: pattern.signature,\n confidence: pattern.confidence * 0.8,\n occurrence_count: 1,\n first_seen_at: now,\n last_seen_at: now,\n seen_in_threads: [lastStitch.thread_id],\n classification: 'anomalous',\n });\n }\n }\n }\n }\n\n return anomalies;\n}\n","import { Sensor } from \"../decorators/sensor.decorator\";\nimport { BAND } from \"../engine/sensor-bands\";\nimport { AxisSensor, SensorDecision, SensorInput } from \"../sensor/axis-sensor\";\n\n/**\n * Access Profile Resolver AxisSensor\n *\n * This sensor determines whether an AXIS request should be handled under the\n * 'PUBLIC' or 'GUARDED' access profile. It does this by checking for the presence\n * of authentication proofs in the request metadata.\n *\n * **Execution Order:** 50 (runs very early)\n *\n * **Core Concept:**\n * - If any structural proof is present (Capsule, Passport, or mTLS certificate),\n * the request is flagged as `GUARDED`.\n * - Otherwise, it is treated as `PUBLIC`.\n *\n * **Impact:**\n * This determination is stored in `input.metadata.profile` and is used by\n * downstream sensors like `CapabilityEnforcementSensor` to decide whether\n * to enforce strict authorization checks.\n *\n * @class AccessProfileResolverSensor\n * @implements {AxisSensor}\n * @implements {OnModuleInit}\n */\n@Sensor()\nexport class AccessProfileResolverSensor implements AxisSensor {\n /** AxisSensor identifier */\n readonly name = \"AccessProfileResolverSensor\";\n\n /**\n * Execution order - runs early to establish the access profile\n * for downstream sensors.\n */\n readonly order = BAND.IDENTITY + 10;\n\n // supports() is a synchronous applicability gate.\n // Return false to skip this sensor without producing a denial.\n supports(input: SensorInput): boolean {\n void input;\n return true;\n }\n\n // run() executes only after supports() passes.\n // Return the actual ALLOW/DENY/FLAG/THROTTLE decision here.\n async run(input: SensorInput): Promise<SensorDecision> {\n // Resolve profile: presence of proof => GUARDED, else PUBLIC\n const hasCapsule = !!input.metadata?.capsuleId;\n const hasPassport = !!input.metadata?.passportSig;\n const hasMTLS = !!input.metadata?.mtlsId;\n\n const profile = hasCapsule || hasPassport || hasMTLS ? \"GUARDED\" : \"PUBLIC\";\n\n // Store in metadata for downstream sensors\n if (!input.metadata) input.metadata = {};\n input.metadata.profile = profile;\n\n return { action: \"ALLOW\" };\n }\n}\n","import { MAX_BODY_LEN, MAX_HDR_LEN } from \"../core/constants\";\nimport { decodeVarint } from \"../core/varint\";\nimport { Sensor } from \"../decorators/sensor.decorator\";\nimport { BAND } from \"../engine/sensor-bands\";\nimport { AxisSensor, SensorDecision, SensorInput } from \"../sensor/axis-sensor\";\n\n/**\n * Body Budget AxisSensor - Section Size Limit Enforcement\n *\n * Validates that header and body sections of AXIS frames are within\n * configured size limits. This prevents memory exhaustion attacks and\n * ensures efficient processing.\n *\n * **Execution Order:** 150 (after auth, before schema validation)\n *\n * **Core Concept:**\n * AXIS frames have three main sections:\n * - Header (TLVs for routing, auth, etc.)\n * - Body (payload data)\n * - Signature\n *\n * Each section has a declared length in the frame header. This sensor\n * validates those lengths against configured maximums BEFORE reading\n * the full content.\n *\n * **Frame Format Reference:**\n * ```\n * Offset 0-4: Magic (AXIS1)\n * Offset 5: Version (0x01)\n * Offset 6: Flags\n * Offset 7+: HDR_LEN (varint)\n * Following: BODY_LEN (varint)\n * Following: SIG_LEN (varint)\n * Then: HDR bytes, BODY bytes, SIG bytes\n * ```\n *\n * **Default Limits (from constants.ts):**\n * - MAX_HDR_LEN: 2048 bytes (2KB)\n * - MAX_BODY_LEN: 65536 bytes (64KB)\n *\n * **Security Model:**\n * - **Fail Open:** Parse errors allow (other sensors catch)\n * - **Early Rejection:** Rejects before reading large payloads\n * - **Defense in Depth:** Works with FrameBudgetSensor\n *\n * **Actions:**\n * - `ALLOW` - Sizes within limits\n * - `DENY` - Header or body exceeds maximum\n *\n * **Error Codes:**\n * - `HEADER_TOO_LARGE` - Header exceeds MAX_HDR_LEN\n * - `BODY_TOO_LARGE` - Body exceeds MAX_BODY_LEN\n *\n * **Performance:**\n * - Parses first ~20 bytes (varint lengths)\n * - O(1) comparison\n * - Latency: <0.5ms\n *\n * @class BodyBudgetSensor\n * @implements {AxisSensor}\n * @implements {OnModuleInit}\n *\n * @example\n * Within limits:\n * ```typescript\n * // HDR_LEN: 500 (< 2048), BODY_LEN: 10000 (< 65536)\n * { action: 'ALLOW' }\n * ```\n *\n * @example\n * Body too large:\n * ```typescript\n * // BODY_LEN: 100000 (> 65536)\n * {\n * action: 'DENY',\n * code: 'BODY_TOO_LARGE',\n * reason: 'Body size 100000 exceeds limit 65536'\n * }\n * ```\n *\n * @see {@link FrameBudgetSensor} - Content-Length based limiting\n * @see {@link MAX_BODY_LEN} - Configurable body limit\n */\n@Sensor()\nexport class BodyBudgetSensor implements AxisSensor {\n /** AxisSensor identifier */\n readonly name = \"BodyBudgetSensor\";\n\n /**\n * Execution order - after authentication\n *\n * Order 150 ensures:\n * - Authentication complete\n * - Runs before full body read\n * - Before schema validation (170)\n */\n readonly order = BAND.CONTENT + 10;\n\n /**\n * Determines if this sensor should process the given input.\n *\n * Requires at least 8 bytes of peeked data to read headers.\n *\n * @param {SensorInput} input - Incoming request\n * @returns {boolean} True if sufficient peek data available\n */\n // supports() is a synchronous applicability gate.\n // Return false to skip this sensor without producing a denial.\n supports(input: SensorInput): boolean {\n return !!input.peek && input.peek.length >= 8;\n }\n\n /**\n * Validates header and body lengths against configured limits.\n *\n * **Frame Parsing:**\n * - Skip magic (5 bytes)\n * - Skip version (1 byte)\n * - Skip flags (1 byte)\n * - Read HDR_LEN varint\n * - Read BODY_LEN varint\n * - Compare against MAX_HDR_LEN and MAX_BODY_LEN\n *\n * @param {SensorInput} input - Request with peek data\n * @returns {Promise<SensorDecision>} ALLOW or DENY based on size limits\n */\n // run() executes only after supports() passes.\n // Return the actual ALLOW/DENY/FLAG/THROTTLE decision here.\n async run(input: SensorInput): Promise<SensorDecision> {\n const { peek } = input;\n\n // Should be caught by ProtocolStrict, but defensive check\n if (!peek || peek.length < 8) {\n return { action: \"ALLOW\" };\n }\n\n try {\n // Frame structure:\n // 0-4: Magic (AXIS1)\n // 5: Version\n // 6: Flags\n // 7+: Varints for HDR_LEN, BODY_LEN, SIG_LEN\n\n let offset = 5; // After magic\n offset += 1; // Skip version\n offset += 1; // Skip flags\n\n // Now at offset 7: read HDR_LEN varint\n const { value: hdrLen, length: hdrBytes } = decodeVarint(peek, offset);\n offset += hdrBytes;\n\n // Read BODY_LEN varint\n const { value: bodyLen } = decodeVarint(peek, offset);\n\n // === Check Header Limit ===\n if (hdrLen > MAX_HDR_LEN) {\n return {\n action: \"DENY\",\n code: \"HEADER_TOO_LARGE\",\n reason: `Header size ${hdrLen} exceeds limit ${MAX_HDR_LEN}`,\n };\n }\n\n // === Check Body Limit ===\n if (bodyLen > MAX_BODY_LEN) {\n return {\n action: \"DENY\",\n code: \"BODY_TOO_LARGE\",\n reason: `Body size ${bodyLen} exceeds limit ${MAX_BODY_LEN}`,\n };\n }\n\n return { action: \"ALLOW\" };\n } catch (e) {\n // Parse errors are likely malformed frames\n // ProtocolStrict will handle them\n return { action: \"ALLOW\" };\n }\n }\n}\n","import { Sensor } from \"../decorators/sensor.decorator\";\nimport { BAND } from \"../engine/sensor-bands\";\nimport {\n AxisSensor,\n Capability,\n INTENT_REQUIREMENTS,\n PROOF_CAPABILITIES,\n SensorDecision,\n SensorInput,\n} from \"../index\";\n\n/**\n * Capability Enforcement AxisSensor - Authorization Based on Proof Type\n *\n * Maps authentication proof types to capabilities and enforces capability\n * requirements per intent. This implements role-based access control (RBAC)\n * at the intent level.\n *\n * **Execution Order:** 100 (after capsule/signature verification)\n *\n * **Core Concept:**\n * Different authentication methods grant different capabilities:\n * - Stronger auth = more capabilities\n * - Weaker auth = fewer capabilities\n *\n * Each intent has required capabilities. The request's proof type must\n * grant ALL required capabilities for the intent to proceed.\n *\n * **Capability Definitions:**\n * - `read` - Can read/query data\n * - `write` - Can create/update data\n * - `execute` - Can trigger actions/operations\n * - `admin` - Administrative operations\n * - `sign` - Can create digital signatures\n * - `witness` - Can act as independent witness\n *\n * **Proof Type Mappings:**\n * | Type | Name | Capabilities |\n * |------|------|--------------|\n * | 0 | NONE | (none) |\n * | 1 | CAPSULE | read, write, execute |\n * | 2 | JWT | read |\n * | 3 | MTLS | read, write, admin |\n * | 4 | DEVICE_SE | read, write, sign |\n * | 5 | WITNESS_SIG | read, write, execute, witness |\n *\n * @class CapabilityEnforcementSensor\n * @implements {AxisSensor}\n * @implements {OnModuleInit}\n *\n * @example\n * File upload (requires 'write'):\n * ```typescript\n * // Proof type: CAPSULE (grants: read, write, execute)\n * // Intent: 'file.upload' (requires: write)\n * // write ∈ [read, write, execute] ✓\n * { action: 'ALLOW' }\n * ```\n *\n * @example\n * Admin operation (requires 'admin'):\n * ```typescript\n * // Proof type: CAPSULE (grants: read, write, execute)\n * // Intent: 'admin.users.delete' (requires: admin)\n * // admin ∉ [read, write, execute] ✗\n * {\n * action: 'DENY',\n * code: 'CAPABILITY_DENIED',\n * reason: 'Missing capabilities: admin'\n * }\n * ```\n */\n\n@Sensor()\nexport class CapabilityEnforcementSensor implements AxisSensor {\n private readonly logger = {\n warn: (msg: string) => console.warn(`[CapabilityEnforcementSensor] ${msg}`),\n };\n\n /** AxisSensor identifier for logging and registry */\n readonly name = \"CapabilityEnforcementSensor\";\n\n /**\n * Execution order - runs after authentication\n *\n * Order 100 ensures:\n * - Capsule is verified (CapsuleVerifySensor @ 80)\n * - Signature is verified (SigVerifySensor @ 90)\n * - We know the proof type for capability lookup\n */\n readonly order = BAND.POLICY + 10;\n\n /**\n * Determines if this sensor should process the given input.\n *\n * Only activates when an intent is present.\n *\n * @param {SensorInput} input - Incoming AXIS request\n * @returns {boolean} True if intent is present\n */\n // supports() is a synchronous applicability gate.\n // Return false to skip this sensor without producing a denial.\n supports(input: SensorInput): boolean {\n void input;\n return true;\n }\n\n /**\n * Enforces capability requirements for the requested intent.\n *\n * **Processing Flow:**\n * 1. Extract proof type from packet (default: 0/NONE)\n * 2. Look up capabilities granted by this proof type\n * 3. Look up capabilities required by the intent\n * 4. If no requirements, ALLOW\n * 5. Check if all required capabilities are granted\n * 6. If missing capabilities, DENY with details\n * 7. Otherwise, ALLOW\n *\n * @param {SensorInput} input - Request with intent and packet\n * @returns {Promise<SensorDecision>} ALLOW or DENY based on capabilities\n */\n // run() executes only after supports() passes.\n // Return the actual ALLOW/DENY/FLAG/THROTTLE decision here.\n async run(input: SensorInput): Promise<SensorDecision> {\n const { intent, packet } = input;\n if (!intent) {\n return { action: \"ALLOW\" };\n }\n\n const proofType = packet?.proofType ?? 0;\n\n // === STEP 1: Get Granted Capabilities ===\n // Look up what this proof type allows\n const grantedCapabilities = PROOF_CAPABILITIES[proofType] || [];\n\n // === STEP 2: Get Required Capabilities ===\n // Look up what this intent requires\n const requiredCapabilities = this.getRequiredCapabilities(intent);\n\n // === STEP 3: Check Public Intents ===\n // No capabilities required = public access\n if (requiredCapabilities.length === 0) {\n return { action: \"ALLOW\" };\n }\n\n // === STEP 4: Check Capability Match ===\n // Find any required capabilities not granted\n const missingCapabilities = requiredCapabilities.filter(\n (cap) => !grantedCapabilities.includes(cap),\n );\n\n if (missingCapabilities.length > 0) {\n // Capability mismatch - deny with details\n this.logger.warn(\n `Capability denied for ${intent}: missing ${missingCapabilities.join(\", \")} (has: ${grantedCapabilities.join(\", \")})`,\n );\n return {\n action: \"DENY\",\n code: \"CAPABILITY_DENIED\",\n reason: `Missing capabilities: ${missingCapabilities.join(\", \")}`,\n };\n }\n\n // All required capabilities present\n return { action: \"ALLOW\" };\n }\n\n /**\n * Gets required capabilities for an intent.\n *\n * **Lookup Strategy:**\n * 1. Check for exact intent match\n * 2. Check for prefix pattern match (*.suffix)\n * 3. Default to 'execute' for unknown intents\n *\n * @private\n * @param {string} intent - Intent name to look up\n * @returns {Capability[]} Array of required capabilities\n */\n private getRequiredCapabilities(intent: string): Capability[] {\n // Check exact match first\n if (INTENT_REQUIREMENTS[intent]) {\n return INTENT_REQUIREMENTS[intent];\n }\n\n // Check prefix patterns (e.g., 'admin.*' matches 'admin.users.delete')\n for (const [pattern, caps] of Object.entries(INTENT_REQUIREMENTS)) {\n if (pattern.endsWith(\".*\")) {\n const prefix = pattern.slice(0, -1); // Remove '*'\n if (intent.startsWith(prefix)) {\n return caps;\n }\n }\n }\n\n // Default: require execute for unknown intents (safe default)\n return [\"execute\"];\n }\n}\n","import { createHash } from \"crypto\";\n\nimport { Sensor } from \"../decorators/sensor.decorator\";\nimport { BAND } from \"../engine/sensor-bands\";\nimport { AxisError } from \"../core/axis-error\";\nimport { AxisSensor, SensorDecision, SensorInput } from \"../sensor/axis-sensor\";\n\n/**\n * Chunk Hash Sensor - Data Integrity Verification\n *\n * Validates that uploaded file chunks match their declared SHA-256 hash.\n * This ensures data integrity during transfer and detects corruption or\n * tampering.\n *\n * **Execution Order:** 190 (after session validation, before handler)\n *\n * **Core Concept:**\n * Each file chunk includes a SHA-256 hash in the header. The sensor:\n * 1. Extracts the expected hash from header TLV\n * 2. Computes the actual hash of the body\n * 3. Compares them byte-by-byte\n * 4. Rejects if mismatch (data corruption)\n *\n * This provides end-to-end integrity verification, catching:\n * - Network corruption\n * - Storage errors\n * - Man-in-the-middle modifications\n * - Client-side bugs\n *\n * **TLV Type:**\n * - Type 73 (`TLV_SHA256_CHUNK`): 32-byte SHA-256 hash\n *\n * **Hash Calculation:**\n * ```typescript\n * const actual = createHash('sha256').update(bodyBytes).digest();\n * ```\n *\n * **Security Model:**\n * - **Fail Closed:** Hash mismatch = DENY\n * - **Immutable Check:** Hash computed server-side\n * - **Early Rejection:** Before storage writes\n *\n * **Actions:**\n * - `ALLOW` - Hash matches\n * - `DENY` - Hash mismatch or missing\n *\n * **Error Codes:**\n * - `FILE_CHUNK_HASH_MISSING` - TLV 73 not present or wrong size\n * - `FILE_CHUNK_HASH_MISMATCH` - Computed hash != expected hash\n *\n * **Performance:**\n * - SHA-256 computation: ~100MB/s on modern CPUs\n * - For 1MB chunk: ~10ms\n *\n * @class ChunkHashSensor\n * @implements {AxisSensor}\n *\n * @example\n * Hash matches:\n * ```typescript\n * // Header TLV 73: sha256(body) = expected\n * { action: 'ALLOW' }\n * ```\n *\n * @example\n * Hash mismatch:\n * ```typescript\n * // Body was corrupted during transfer\n * {\n * action: 'DENY',\n * code: 'FILE_CHUNK_HASH_MISMATCH',\n * reason: 'Chunk hash mismatch - data corrupted'\n * }\n * ```\n *\n * @see {@link FileUploadStateSensor} - Session validation\n * @see {@link https://en.wikipedia.org/wiki/SHA-2 SHA-256}\n */\n@Sensor()\nexport class ChunkHashSensor implements AxisSensor {\n /** Sensor identifier */\n readonly name = \"ChunkHashSensor\";\n\n /**\n * Execution order - after session validation\n *\n * Order 190 ensures:\n * - Session validated (180)\n * - Chunk parameters verified\n * - Hash check before storage\n */\n readonly order = BAND.CONTENT + 50;\n\n /**\n * Determines if this sensor should process the given input.\n *\n * Only processes file.chunk intents.\n *\n * @param {SensorInput} input - Incoming request\n * @returns {boolean} True if intent is 'file.chunk'\n */\n // supports() is a synchronous applicability gate.\n // Return false to skip this sensor without producing a denial.\n supports(input: SensorInput): boolean {\n return input.intent === \"file.chunk\";\n }\n\n /**\n * Validates chunk data against declared SHA-256 hash.\n *\n * **Processing Flow:**\n * 1. Check for required headerTLVs and body\n * 2. Extract expected hash from TLV 73\n * 3. Verify hash is exactly 32 bytes\n * 4. Compute SHA-256 of body\n * 5. Compare bytes (timing-safe)\n * 6. DENY on mismatch\n *\n * @param {SensorInput} input - Request with chunk body\n * @returns {Promise<SensorDecision>} ALLOW if hash matches, DENY otherwise\n */\n // run() executes only after supports() passes.\n // Return the actual ALLOW/DENY/FLAG/THROTTLE decision here.\n async run(input: SensorInput): Promise<SensorDecision> {\n const headerTLVs = input.headerTLVs as Map<number, Uint8Array>;\n const bodyBytes = input.body as Uint8Array;\n\n // Validate required inputs\n if (!headerTLVs || !bodyBytes) {\n return {\n action: \"DENY\",\n code: \"SENSOR_INVALID_INPUT\",\n reason: \"Missing headerTLVs or body\",\n };\n }\n\n // TLV type for chunk SHA-256 hash\n const TLV_SHA256_CHUNK = 73;\n\n // === STEP 1: Extract Expected Hash ===\n const expected = headerTLVs.get(TLV_SHA256_CHUNK);\n\n if (!expected || expected.length !== 32) {\n return {\n action: \"DENY\",\n code: \"FILE_CHUNK_HASH_MISSING\",\n reason: \"Missing sha256Chunk TLV in header\",\n };\n }\n\n // === STEP 2: Compute Actual Hash ===\n const actual = createHash(\"sha256\").update(bodyBytes).digest();\n\n // === STEP 3: Compare Hashes ===\n // Using Buffer.equals for comparison\n if (!Buffer.from(actual).equals(Buffer.from(expected))) {\n return {\n action: \"DENY\",\n code: \"FILE_CHUNK_HASH_MISMATCH\",\n reason: \"Chunk hash mismatch - data corrupted\",\n };\n }\n\n return { action: \"ALLOW\" };\n }\n}\n","import * as crypto from \"crypto\";\n\nimport { Sensor } from \"../decorators/sensor.decorator\";\nimport { BAND } from \"../engine/sensor-bands\";\n\nimport { TLV_NONCE, TLV_PID } from \"../core/constants\";\nimport { AxisSensor, SensorDecision, SensorInput } from \"../sensor/axis-sensor\";\n\n/**\n * Entropy AxisSensor - Randomness Quality Analysis\n *\n * Validates that cryptographic identifiers (PIDs, nonces) have sufficient\n * randomness to prevent predictability attacks. Weak entropy in IDs can\n * lead to collision attacks and session hijacking.\n *\n * **Execution Order:** 130 (after replay protection, before policy checks)\n *\n * **Core Concept:**\n * Proper cryptographic security requires high-quality randomness. This sensor\n * detects patterns that suggest weak random number generation:\n * - Low Shannon entropy\n * - Sequential patterns (1,2,3,4...)\n * - Repeated patterns (0xAB,0xAB,0xAB...)\n *\n * **How It Works:**\n * ```\n * 1. Extract PID and nonce from headers\n * 2. Calculate Shannon entropy for each\n * 3. Check for sequential patterns\n * 4. Check for repeated patterns\n * 5. FLAG if issues found (doesn't DENY for availability)\n * ```\n *\n * **Shannon Entropy Calculation:**\n * ```\n * H = -Σ(p_i * log2(p_i))\n * ```\n * Where p_i is the probability of byte value i appearing.\n * - High entropy (7-8 bits/byte): Good randomness\n * - Low entropy (<3 bits/byte): Suspicious pattern\n *\n * **Pattern Detection:**\n * - **Sequential:** More than 50% of bytes are +1 or -1 from previous\n * - **Repeated:** 90%+ match with 2, 4, or 8 byte repeating pattern\n *\n * **Security Model:**\n * - **Fail Open:** Issues cause FLAG, not DENY\n * - **Trust Score Impact:** Each issue reduces trust score\n * - **Detection Only:** Logs suspicious patterns for investigation\n *\n * **Actions:**\n * - `ALLOW` - Sufficient entropy, no patterns detected\n * - `FLAG` - Issues detected (reduces trust score)\n *\n * **Score Deltas:**\n * | Issue | Delta |\n * |-------|-------|\n * | Low entropy (<3 bits/byte) | -3 |\n * | Sequential pattern | -5 |\n * | Repeated pattern | -5 |\n *\n * **Why Not DENY?**\n * Legitimate clients with older RNG libraries might trigger false positives.\n * FLAG allows monitoring without breaking legitimate traffic.\n *\n * **Performance:**\n * - In-memory analysis\n * - O(n) where n = bytes analyzed\n * - Latency: <1ms\n *\n * @class EntropySensor\n * @implements {AxisSensor}\n * @implements {OnModuleInit}\n *\n * @example\n * High-entropy nonce (good):\n * ```typescript\n * // Nonce from crypto.randomBytes(16)\n * // Entropy: 7.2 bits/byte\n * { action: 'ALLOW' }\n * ```\n *\n * @example\n * Sequential pattern (suspicious):\n * ```typescript\n * // Nonce: [1,2,3,4,5,6,7,8,9,10,11,12]\n * {\n * action: 'FLAG',\n * scoreDelta: -5,\n * reasons: ['nonce_sequential']\n * }\n * ```\n *\n * @see {@link https://en.wikipedia.org/wiki/Entropy_(information_theory) Shannon Entropy}\n */\n@Sensor()\nexport class EntropySensor implements AxisSensor {\n private readonly logger = {\n warn: (msg: string) => console.warn(`[EntropySensor] ${msg}`),\n };\n\n /**\n * Minimum acceptable entropy in bits per byte.\n *\n * 3.0 bits/byte is a conservative threshold:\n * - Random data: ~7.9 bits/byte\n * - English text: ~4.5 bits/byte\n * - Sequential data: ~0-2 bits/byte\n */\n private readonly MIN_ENTROPY_THRESHOLD = 3.0;\n\n /** AxisSensor identifier */\n readonly name = \"EntropySensor\";\n\n /**\n * Execution order - anomaly detection phase\n *\n * Order 130 ensures:\n * - Replay protection done (120)\n * - Runs before expensive policy lookups\n */\n readonly order = BAND.POLICY + 35;\n\n /**\n * Calculates Shannon entropy of a byte array.\n *\n * **Algorithm:**\n * 1. Count frequency of each byte value (0-255)\n * 2. Calculate probability p = count / total\n * 3. Sum: -Σ(p * log2(p))\n *\n * @private\n * @param {Uint8Array} data - Bytes to analyze\n * @returns {number} Entropy in bits per byte (0-8 scale)\n */\n private calculateEntropy(data: Uint8Array): number {\n if (data.length === 0) return 0;\n\n // Count byte frequencies\n const freq = new Map<number, number>();\n for (const byte of data) {\n freq.set(byte, (freq.get(byte) || 0) + 1);\n }\n\n // Calculate Shannon entropy\n let entropy = 0;\n const len = data.length;\n for (const count of freq.values()) {\n const p = count / len;\n entropy -= p * Math.log2(p);\n }\n\n return entropy;\n }\n\n /**\n * Checks for sequential patterns in data.\n *\n * Detects sequences like [1,2,3,4...] or [10,9,8,7...].\n * More than 50% sequential is considered suspicious.\n *\n * @private\n * @param {Uint8Array} data - Bytes to analyze\n * @returns {boolean} True if sequential pattern detected\n */\n private hasSequentialPattern(data: Uint8Array): boolean {\n if (data.length < 4) return false;\n\n let ascending = 0;\n let descending = 0;\n\n for (let i = 1; i < data.length; i++) {\n if (data[i] === data[i - 1] + 1) ascending++;\n if (data[i] === data[i - 1] - 1) descending++;\n }\n\n // More than 50% sequential is suspicious\n return ascending > data.length / 2 || descending > data.length / 2;\n }\n\n /**\n * Checks for repeated patterns in data.\n *\n * Detects patterns like [0xAB, 0xCD, 0xAB, 0xCD...].\n * Checks for 2, 4, and 8 byte repeating patterns.\n *\n * @private\n * @param {Uint8Array} data - Bytes to analyze\n * @returns {boolean} True if repeated pattern detected\n */\n private hasRepeatedPattern(data: Uint8Array): boolean {\n if (data.length < 8) return false;\n\n // Check for 2-byte, 4-byte, and 8-byte repeating patterns\n for (const patternLen of [2, 4, 8]) {\n if (data.length % patternLen !== 0) continue;\n\n let matches = 0;\n for (let i = patternLen; i < data.length; i++) {\n if (data[i] === data[i % patternLen]) matches++;\n }\n\n // 90%+ match = repeating pattern\n if (matches > (data.length - patternLen) * 0.9) {\n return true;\n }\n }\n\n return false;\n }\n\n /**\n * Analyzes entropy of PID and nonce in request headers.\n *\n * **Processing Flow:**\n * 1. Extract PID and nonce from header TLVs\n * 2. Calculate entropy for each\n * 3. Check for sequential patterns\n * 4. Check for repeated patterns\n * 5. Accumulate issues and score delta\n * 6. Return FLAG if issues found, ALLOW otherwise\n *\n * @param {SensorInput} input - Request with header TLVs\n * @returns {Promise<SensorDecision>} ALLOW or FLAG based on entropy analysis\n */\n // This sensor does not define supports(), so it is applicable whenever registered.\n // run() returns the actual ALLOW/DENY/FLAG/THROTTLE decision.\n async run(input: SensorInput): Promise<SensorDecision> {\n const headers = input.headerTLVs as Map<number, Uint8Array>;\n\n // If no headers, allow (WebSocket handshake, etc.)\n if (!headers) {\n return { action: \"ALLOW\" };\n }\n\n // Extract PID and nonce from headers\n const pid = headers.get(TLV_PID);\n const nonce = headers.get(TLV_NONCE);\n\n const issues: string[] = [];\n let totalDelta = 0;\n\n // === Analyze PID ===\n if (pid && pid.length > 0) {\n const pidEntropy = this.calculateEntropy(pid);\n\n // Check minimum entropy threshold\n if (pidEntropy < this.MIN_ENTROPY_THRESHOLD) {\n issues.push(`pid_low_entropy:${pidEntropy.toFixed(2)}`);\n totalDelta -= 3;\n }\n\n // Check for sequential pattern\n if (this.hasSequentialPattern(pid)) {\n issues.push(\"pid_sequential\");\n totalDelta -= 5;\n }\n\n // Check for repeated pattern\n if (this.hasRepeatedPattern(pid)) {\n issues.push(\"pid_repeated\");\n totalDelta -= 5;\n }\n }\n\n // === Analyze Nonce ===\n if (nonce && nonce.length > 0) {\n const nonceEntropy = this.calculateEntropy(nonce);\n\n // Check minimum entropy threshold\n if (nonceEntropy < this.MIN_ENTROPY_THRESHOLD) {\n issues.push(`nonce_low_entropy:${nonceEntropy.toFixed(2)}`);\n totalDelta -= 3;\n }\n\n // Check for sequential pattern\n if (this.hasSequentialPattern(nonce)) {\n issues.push(\"nonce_sequential\");\n totalDelta -= 5;\n }\n\n // Check for repeated pattern\n if (this.hasRepeatedPattern(nonce)) {\n issues.push(\"nonce_repeated\");\n totalDelta -= 5;\n }\n }\n\n // === Return Decision ===\n if (issues.length > 0) {\n this.logger.warn(`Entropy issues from ${input.ip}: ${issues.join(\", \")}`);\n return {\n action: \"FLAG\",\n scoreDelta: totalDelta,\n reasons: issues,\n };\n }\n\n return { action: \"ALLOW\" };\n }\n\n /**\n * Generates cryptographically secure random bytes.\n *\n * Utility method for SDK/client code to ensure proper entropy.\n * Uses Node.js crypto.randomBytes for secure PRNG.\n *\n * @static\n * @param {number} length - Number of random bytes\n * @returns {Uint8Array} Cryptographically secure random bytes\n */\n static generateSecureRandom(length: number): Uint8Array {\n return new Uint8Array(crypto.randomBytes(length));\n }\n}\n","import { Sensor } from \"../decorators/sensor.decorator\";\nimport { BAND } from \"../engine/sensor-bands\";\nimport { AxisSensor, SensorDecision, SensorInput } from \"../sensor/axis-sensor\";\nimport { resolveTimeout } from \"../core/timeouts\";\n\n/**\n * Execution Timeout AxisSensor - Intent-Based Deadline Enforcement\n *\n * Sets per-intent execution time limits and stores deadlines in the request\n * context. This prevents runaway handlers and ensures predictable response times.\n *\n * **Execution Order:** 210 (late, before handler execution)\n *\n * **Core Concept:**\n * Different intents have different acceptable latencies:\n * - Health checks: 2 seconds (must be fast)\n * - File uploads: 60 seconds (large transfers)\n * - Standard operations: 10 seconds (default)\n *\n * The sensor calculates a deadline timestamp and stores it in the context.\n * Handler code can check this deadline to abort if running too long.\n *\n * **How It Works:**\n * ```\n * 1. Look up timeout for intent (exact match or prefix pattern)\n * 2. Calculate deadline = now + timeout\n * 3. Store deadline in context\n * 4. Return ALLOW (enforcement happens in handler)\n * ```\n *\n * **Timeout Lookup:**\n * 1. Check exact intent match first\n * 2. Then check prefix patterns (e.g., 'file.*')\n * 3. Fall back to DEFAULT_TIMEOUT (10s)\n *\n * **Context Properties Set:**\n * - `deadline`: Absolute timestamp (ms since epoch)\n * - `timeoutMs`: Configured timeout duration\n *\n * **Handler Usage:**\n * ```typescript\n * if (ExecutionTimeoutSensor.isExpired(ctx)) {\n * throw new Error('Execution timeout exceeded');\n * }\n *\n * const remaining = ExecutionTimeoutSensor.getRemainingMs(ctx);\n * ```\n *\n * **Security Model:**\n * - **Always Allow:** This sensor only sets context, doesn't block\n * - **Handler Responsibility:** Actual enforcement in handler code\n * - **Defense in Depth:** Works with ExecutionContractSensor\n *\n * **Actions:**\n * - `ALLOW` - Always (only sets context)\n *\n * **Performance:**\n * - Map lookup: O(1) to O(n patterns)\n * - Latency: <0.1ms\n *\n * @class ExecutionTimeoutSensor\n * @implements {AxisSensor}\n * @implements {OnModuleInit}\n *\n * @example\n * File upload:\n * ```typescript\n * // Intent: file.upload\n * // Timeout: 60000ms\n * // ctx.deadline = Date.now() + 60000\n * { action: 'ALLOW' }\n * ```\n *\n * @example\n * Checking deadline in handler:\n * ```typescript\n * if (ExecutionTimeoutSensor.isExpired(ctx)) {\n * throw new TimeoutError('Handler exceeded deadline');\n * }\n * ```\n *\n * @see {@link ExecutionContractSensor} - Resource limit enforcement\n */\n@Sensor()\nexport class ExecutionTimeoutSensor implements AxisSensor {\n private readonly logger = { debug: (msg: string) => void 0 };\n\n /** AxisSensor identifier */\n readonly name = \"ExecutionTimeoutSensor\";\n\n /**\n * Execution order - late, near handler execution\n *\n * Order 210 ensures:\n * - All validation complete\n * - Deadline set just before handler\n */\n readonly order = BAND.BUSINESS + 10;\n\n /**\n * Determines if this sensor should process the given input.\n *\n * @param {SensorInput} input - Incoming request\n * @returns {boolean} True if intent is present\n */\n // supports() is a synchronous applicability gate.\n // Return false to skip this sensor without producing a denial.\n supports(): boolean {\n return true;\n }\n\n /**\n * Sets execution deadline in the request context.\n *\n * **Processing Flow:**\n * 1. Look up timeout for intent\n * 2. Calculate absolute deadline\n * 3. Store in context for handler use\n * 4. Return ALLOW\n *\n * @param {SensorInput} input - Request with intent\n * @returns {Promise<SensorDecision>} Always ALLOW\n */\n // run() executes only after supports() passes.\n // Return the actual ALLOW/DENY/FLAG/THROTTLE decision here.\n async run(input: SensorInput): Promise<SensorDecision> {\n const { intent, context } = input;\n if (!intent) {\n return { action: \"ALLOW\" };\n }\n\n // Get timeout for this intent\n const timeout = resolveTimeout(intent);\n\n // Calculate absolute deadline\n const deadline = Date.now() + timeout;\n\n // Store deadline in context for downstream components\n if (context) {\n (context as any).deadline = deadline;\n (context as any).timeoutMs = timeout;\n }\n\n this.logger.debug(\n `Set ${timeout}ms timeout for ${intent} (deadline: ${new Date(deadline).toISOString()})`,\n );\n\n // Actual timeout enforcement happens in the intent router/executor\n // This sensor just sets the deadline\n return { action: \"ALLOW\" };\n }\n\n /**\n * Checks if a deadline has been exceeded.\n *\n * Utility method for handler code.\n *\n * @static\n * @param {object} ctx - Context with deadline\n * @returns {boolean} True if deadline passed\n */\n static isExpired(ctx: { deadline?: number }): boolean {\n if (!ctx.deadline) return false;\n return Date.now() > ctx.deadline;\n }\n\n /**\n * Gets remaining time until deadline.\n *\n * Utility method for handler code.\n *\n * @static\n * @param {object} ctx - Context with deadline\n * @returns {number} Remaining milliseconds (0 if expired, Infinity if no deadline)\n */\n static getRemainingMs(ctx: { deadline?: number }): number {\n if (!ctx.deadline) return Infinity;\n return Math.max(0, ctx.deadline - Date.now());\n }\n}\n","import { Sensor } from \"../decorators/sensor.decorator\";\nimport { BAND } from \"../engine/sensor-bands\";\nimport { AxisSensor, SensorDecision, SensorInput } from \"../sensor/axis-sensor\";\n\n/**\n * Frame Budget AxisSensor - Request Size Validation\n *\n * Validates that incoming frame sizes do not exceed configured limits.\n * This prevents memory exhaustion attacks and ensures fair resource allocation.\n *\n * **Execution Order:** 20 (after ProtocolStrictSensor, before security checks)\n *\n * **Core Concept:**\n * Large payloads can be used for denial-of-service attacks, buffer overflows,\n * or to exhaust server memory. This sensor enforces per-intent size limits\n * defined in the intent policy, rejecting oversized frames before they are\n * fully processed.\n *\n * **How It Works:**\n * 1. Extract Content-Length from request\n * 2. Look up maximum allowed size from intent policy\n * 3. If size exceeds limit, DENY the request\n * 4. Otherwise, ALLOW request to proceed\n *\n * **Default Limits:**\n * - Standard requests: 1MB (1,048,576 bytes)\n * - File uploads: 100MB (104,857,600 bytes)\n * - Streaming: No limit (handled by StreamScopeSensor)\n *\n * **Security Model:**\n * - **Fail Open:** If Content-Length is not available, ALLOW (other sensors handle)\n * - **Early Rejection:** Reject oversized frames before full download\n * - **Per-Intent Limits:** Different intents can have different size limits\n *\n * **Configuration:**\n * ```env\n * AXIS_MAX_FRAME_BYTES=1048576 # 1MB default\n * AXIS_MAX_UPLOAD_BYTES=104857600 # 100MB for uploads\n * ```\n *\n * **Actions:**\n * - `ALLOW` - Frame size within limits or unknown\n * - `DENY` - Frame exceeds configured maximum (code: FRAME_TOO_LARGE)\n *\n * **Performance:**\n * - Single comparison operation\n * - No I/O or external calls\n * - Latency: <0.1ms\n *\n * @class FrameBudgetSensor\n * @implements {AxisSensor}\n * @implements {OnModuleInit}\n *\n * @example\n * Normal request (within limits):\n * ```typescript\n * // Content-Length: 50000 (50KB)\n * // Policy max: 1MB\n * { action: 'ALLOW' }\n * ```\n *\n * @example\n * Oversized request:\n * ```typescript\n * // Content-Length: 10485760 (10MB)\n * // Policy max: 1MB\n * {\n * action: 'DENY',\n * code: 'FRAME_TOO_LARGE',\n * reason: 'Frame size 10485760 exceeds limit 1048576'\n * }\n * ```\n *\n * @todo Implement actual size checking against intent policy maxFrameBytes\n * @see {@link BodyBudgetSensor} - Body-specific size limiting\n */\n@Sensor({ phase: \"PRE_DECODE\" })\nexport class FrameBudgetSensor implements AxisSensor {\n /** AxisSensor identifier for logging and registry */\n readonly name = \"FrameBudgetSensor\";\n\n /**\n * Execution order - runs after protocol validation\n *\n * Order 20 ensures:\n * - Protocol is valid (ProtocolStrictSensor @ 10)\n * - Size checked before expensive processing\n */\n readonly order = BAND.WIRE + 20;\n\n /**\n * Determines if this sensor should process the given input.\n *\n * Only activates when Content-Length header is available.\n * WebSocket frames may not have Content-Length; they use different size tracking.\n *\n * @param {SensorInput} input - Incoming AXIS request\n * @returns {boolean} True if Content-Length is present\n */\n // supports() is a synchronous applicability gate.\n // Return false to skip this sensor without producing a denial.\n supports(input: SensorInput): boolean {\n return typeof input.contentLength === \"number\";\n }\n\n /**\n * Validates frame size against configured limits.\n *\n * **Current Implementation:** Stub that always allows.\n *\n * **TODO:** Full implementation should:\n * 1. Load intent policy for the request\n * 2. Get maxFrameBytes from policy\n * 3. Compare against contentLength\n * 4. DENY if exceeded\n *\n * @param {SensorInput} input - Request with contentLength\n * @returns {Promise<SensorDecision>} ALLOW or DENY based on size\n */\n // run() executes only after supports() passes.\n // Return the actual ALLOW/DENY/FLAG/THROTTLE decision here.\n async run(input: SensorInput): Promise<SensorDecision> {\n const maxBytes =\n Number(process.env[\"AXIS_MAX_FRAME_SIZE\"]) || 50 * 1024 * 1024;\n const contentLength = input.contentLength;\n\n if (typeof contentLength !== \"number\") {\n return { action: \"ALLOW\" };\n }\n\n if (contentLength > maxBytes) {\n return {\n action: \"DENY\",\n code: \"FRAME_TOO_LARGE\",\n reason: `Frame size ${contentLength} exceeds limit ${maxBytes}`,\n };\n }\n\n return { action: \"ALLOW\" };\n }\n}\n","import { Sensor } from \"../decorators/sensor.decorator\";\nimport { AXIS_MAGIC, AXIS_VERSION, MAX_FRAME_LEN } from \"../core/constants\";\nimport { BAND } from \"../engine/sensor-bands\";\nimport { AxisSensor, SensorDecision, SensorInput } from \"../sensor/axis-sensor\";\n\n@Sensor({ phase: \"PRE_DECODE\" })\nexport class FrameHeaderSanitySensor implements AxisSensor {\n readonly name = \"FrameHeaderSanitySensor\";\n readonly order = BAND.WIRE + 30;\n\n // supports() is a synchronous applicability gate.\n // Return false to skip this sensor without producing a denial.\n supports(input: SensorInput): boolean {\n return !!input.peek && input.peek.length >= 7;\n }\n\n // run() executes only after supports() passes.\n // Return the actual ALLOW/DENY/FLAG/THROTTLE decision here.\n async run(input: SensorInput): Promise<SensorDecision> {\n const peek = input.peek!;\n const contentLen = input.contentLength || 0;\n\n // Check magic (first 5 bytes: AXIS1)\n if (peek.length < 5 || !this.bufferEqual(peek.slice(0, 5), AXIS_MAGIC)) {\n return {\n action: \"DENY\",\n code: \"INVALID_MAGIC\",\n reason: \"Frame magic is not AXIS1\",\n };\n }\n\n // Check version (byte 5)\n if (peek[5] !== AXIS_VERSION) {\n return {\n action: \"DENY\",\n code: \"UNSUPPORTED_VERSION\",\n reason: `Unsupported version: ${peek[5]}`,\n };\n }\n\n // Check frame length against hard limit\n if (contentLen > MAX_FRAME_LEN) {\n return {\n action: \"DENY\",\n code: \"FRAME_TOO_LARGE\",\n reason: `Frame size ${contentLen} exceeds max ${MAX_FRAME_LEN}`,\n };\n }\n\n return { action: \"ALLOW\" };\n }\n\n private bufferEqual(a: Uint8Array, b: Uint8Array): boolean {\n if (a.length !== b.length) return false;\n for (let i = 0; i < a.length; i++) {\n if (a[i] !== b[i]) return false;\n }\n return true;\n }\n}\n","import { Sensor } from \"../decorators/sensor.decorator\";\nimport { MAX_HDR_LEN } from \"../core/constants\";\nimport { BAND } from \"../engine/sensor-bands\";\nimport { AxisSensor, SensorDecision, SensorInput } from \"../sensor/axis-sensor\";\n\n@Sensor()\nexport class HeaderTLVLimitSensor implements AxisSensor {\n readonly name = \"HeaderTLVLimitSensor\";\n readonly order = BAND.CONTENT + 0;\n private readonly MAX_TLVS = 64;\n\n // supports() is a synchronous applicability gate.\n // Return false to skip this sensor without producing a denial.\n supports(input: SensorInput): boolean {\n return !!input.headerTLVs || !!input.packet;\n }\n\n // run() executes only after supports() passes.\n // Return the actual ALLOW/DENY/FLAG/THROTTLE decision here.\n async run(input: SensorInput): Promise<SensorDecision> {\n if (input.headerTLVs && input.headerTLVs.size > this.MAX_TLVS) {\n return {\n action: \"DENY\",\n code: \"TOO_MANY_TLVS\",\n reason: `Header TLVs (${input.headerTLVs.size}) exceed max (${this.MAX_TLVS})`,\n };\n }\n\n if (input.packet && input.packet.headerBytes) {\n const hdrLen = input.packet.headerBytes.length;\n if (hdrLen > MAX_HDR_LEN) {\n return {\n action: \"DENY\",\n code: \"HEADER_TOO_LARGE\",\n reason: `Header size ${hdrLen} exceeds max ${MAX_HDR_LEN}`,\n };\n }\n }\n\n return { action: \"ALLOW\" };\n }\n}\n","import { Sensor } from \"../decorators/sensor.decorator\";\nimport { BAND } from \"../engine/sensor-bands\";\nimport { AxisSensor, SensorDecision, SensorInput } from \"../sensor/axis-sensor\";\n\n// Public intent allowlist (exact or prefix)\nconst PUBLIC_INTENT_ALLOWLIST = [\n \"public.\",\n \"schema.\",\n \"catalog.\",\n \"health.\",\n \"system.\",\n];\n\n@Sensor()\nexport class IntentAllowlistSensor implements AxisSensor {\n readonly name = \"IntentAllowlistSensor\";\n readonly order = BAND.IDENTITY + 20;\n\n // supports() is a synchronous applicability gate.\n // Return false to skip this sensor without producing a denial.\n supports(input: SensorInput): boolean {\n // Only run in post-decode phase when intent is available\n return !!input.intent;\n }\n\n // run() executes only after supports() passes.\n // Return the actual ALLOW/DENY/FLAG/THROTTLE decision here.\n async run(input: SensorInput): Promise<SensorDecision> {\n const profile = input.metadata?.profile || \"PUBLIC\";\n const intent = input.intent || \"\";\n\n // PUBLIC profile: only allow whitelisted intents\n if (profile === \"PUBLIC\") {\n const isAllowed = PUBLIC_INTENT_ALLOWLIST.some((prefix) =>\n intent.startsWith(prefix),\n );\n if (!isAllowed) {\n return {\n action: \"DENY\",\n code: \"INTENT_NOT_ALLOWED\",\n reason: `Intent '${intent}' not in public allowlist`,\n };\n }\n }\n\n // GUARDED profile: allow all intents (capability enforcement comes later)\n return { action: \"ALLOW\" };\n }\n}\n","import { Sensor } from \"../decorators/sensor.decorator\";\nimport { AxisSensor, SensorDecision, SensorInput } from \"../sensor/axis-sensor\";\nimport { IntentRouter } from \"../engine/intent.router\";\nimport { BAND } from \"../engine/sensor-bands\";\n\n/**\n * IntentRegistrySensor\n *\n * Runs early in POST_DECODE to reject intents that have no registered handler.\n * This prevents wasting resources on sensors, decoding, and routing for\n * intents that will inevitably fail with \"Intent not found\".\n *\n * Order: BAND.IDENTITY + 25 (65) — right after IntentAllowlistSensor (60).\n */\n@Sensor({ phase: \"POST_DECODE\" })\nexport class IntentRegistrySensor implements AxisSensor {\n readonly name = \"IntentRegistrySensor\";\n readonly order = BAND.IDENTITY + 25;\n\n constructor(private readonly router: IntentRouter) {}\n\n // supports() is a synchronous applicability gate.\n // Return false to skip this sensor without producing a denial.\n supports(): boolean {\n return true;\n }\n\n // run() executes only after supports() passes.\n // Return the actual ALLOW/DENY/FLAG/THROTTLE decision here.\n async run(input: SensorInput): Promise<SensorDecision> {\n const intent = input.intent!;\n\n if (this.router.has(intent)) {\n return { action: \"ALLOW\" };\n }\n\n return {\n action: \"DENY\",\n code: \"INTENT_NOT_REGISTERED\",\n reason: `Intent '${intent}' is not registered`,\n };\n }\n}\n","import { Sensor } from \"../decorators/sensor.decorator\";\nimport { BAND } from \"../engine/sensor-bands\";\nimport type {\n AxisSensor,\n SensorDecision,\n SensorInput,\n} from \"../sensor/axis-sensor\";\n\nexport type LawArticlePresenceMode = \"off\" | \"audit\" | \"strict\";\n\nexport interface LawArticlePresenceSensorOptions {\n mode?: LawArticlePresenceMode | (() => LawArticlePresenceMode);\n exemptIntents?: string[];\n missingCode?: string;\n auditScoreDelta?: number;\n getLawArticleCount: (\n intent: string,\n input: SensorInput,\n ) => number | Promise<number>;\n}\n\n/**\n * Checks whether an intent has at least one mapped law article.\n *\n * Storage stays outside the SDK: callers provide `getLawArticleCount()`.\n */\n@Sensor({ phase: \"POST_DECODE\" })\nexport class LawArticlePresenceSensor implements AxisSensor {\n readonly name: string = \"LawArticlePresenceSensor\";\n readonly order: number = BAND.IDENTITY + 27;\n\n constructor(private readonly options: LawArticlePresenceSensorOptions) {}\n\n // supports() is a synchronous applicability gate.\n // Return false to skip this sensor without producing a denial.\n supports(input: SensorInput): boolean {\n if (this.mode() === \"off\") return false;\n if (!input.intent) return false;\n if (this.exemptIntents().includes(input.intent)) return false;\n return true;\n }\n\n // run() executes only after supports() passes.\n // Return the actual ALLOW/DENY/FLAG/THROTTLE decision here.\n async run(input: SensorInput): Promise<SensorDecision> {\n const intent = input.intent!;\n const count = await this.options.getLawArticleCount(intent, input);\n\n if (count > 0) {\n return {\n action: \"ALLOW\",\n meta: { lawArticles: count },\n };\n }\n\n const reason = `Intent '${intent}' has no law article mapping`;\n if (this.mode() === \"strict\") {\n return {\n action: \"DENY\",\n code: this.options.missingCode ?? \"CAPSULE_NOT_LAWFUL\",\n reason,\n };\n }\n\n return {\n action: \"FLAG\",\n scoreDelta: this.options.auditScoreDelta ?? 5,\n reasons: [\"LAW_ARTICLE_MISSING\", reason],\n meta: { lawArticles: 0 },\n };\n }\n\n private mode(): LawArticlePresenceMode {\n const configured = this.options.mode;\n if (typeof configured === \"function\") return configured();\n return configured ?? \"audit\";\n }\n\n private exemptIntents(): string[] {\n return this.options.exemptIntents ?? [\"system.ping\"];\n }\n}\n","import { Sensor } from \"../decorators/sensor.decorator\";\nimport { BAND } from \"../engine/sensor-bands\";\nimport type {\n AxisLawEvaluationContext,\n AxisLawEvaluationResult,\n LawEvaluationSensorOptions,\n} from \"../law\";\nimport { buildAxisLawEvaluationContext } from \"../law\";\nimport type {\n AxisSensor,\n SensorDecision,\n SensorInput,\n} from \"../sensor/axis-sensor\";\nimport { createAxisLogger } from \"../utils/axis-logger\";\n\n@Sensor()\nexport class LawEvaluationSensor implements AxisSensor {\n private readonly logger = createAxisLogger(LawEvaluationSensor.name);\n\n readonly name = \"LawEvaluationSensor\";\n readonly order = BAND.POLICY + 5;\n\n constructor(private readonly options: LawEvaluationSensorOptions = {}) {}\n\n // supports() is a synchronous applicability gate.\n // Return false to skip this sensor without producing a denial.\n supports(input: SensorInput): boolean {\n return !!this.options.evaluator && !!input.intent;\n }\n\n // run() executes only after supports() passes.\n // Return the actual ALLOW/DENY/FLAG/THROTTLE decision here.\n async run(input: SensorInput): Promise<SensorDecision> {\n const evaluator = this.options.evaluator;\n if (!evaluator) {\n return { action: \"ALLOW\" };\n }\n\n const context = buildAxisLawEvaluationContext(input);\n\n let result: AxisLawEvaluationResult;\n try {\n result = await evaluator(context);\n } catch (error) {\n const message =\n error instanceof Error ? error.message : \"Unknown law evaluation error\";\n this.logger.error(\n `Law evaluation failed for ${input.intent}: ${message}`,\n );\n input.metadata = {\n ...(input.metadata ?? {}),\n lawEvaluation: {\n decision: \"deny\",\n reason: \"Law evaluation failed\",\n explanation: message,\n },\n };\n return {\n action: \"DENY\",\n code: \"LAW_EVALUATION_ERROR\",\n reason: message,\n meta: { lawDecision: \"deny\" },\n };\n }\n\n input.metadata = {\n ...(input.metadata ?? {}),\n lawEvaluation: {\n ...result,\n context: sanitizeLawContext(context),\n },\n };\n\n if (result.decision === \"allow\") {\n return {\n allow: true,\n riskScore: 0,\n reasons: result.reason ? [result.reason] : [],\n tags: {\n lawDecision: \"allow\",\n ...(result.applicable\n ? { lawApplicableArticles: result.applicable.length }\n : {}),\n },\n meta: result,\n };\n }\n\n if (result.decision === \"conditional\") {\n const mode = this.options.conditionalDecision ?? \"deny\";\n const reasons = [result.reason, result.explanation].filter(\n Boolean,\n ) as string[];\n\n if (mode === \"allow\") {\n return {\n allow: true,\n riskScore: 0,\n reasons,\n tags: {\n lawDecision: \"conditional\",\n },\n meta: result,\n };\n }\n\n if (mode === \"flag\") {\n return {\n action: \"FLAG\",\n scoreDelta: 25,\n reasons:\n reasons.length > 0\n ? reasons\n : [\n \"Execution is conditionally permitted pending additional requirements\",\n ],\n meta: result,\n };\n }\n\n return {\n action: \"DENY\",\n code: \"LAW_CONDITIONAL\",\n reason:\n reasons.join(\" | \") ||\n \"Execution is conditionally permitted pending additional requirements\",\n meta: { lawDecision: \"conditional\", evaluation: result },\n };\n }\n\n return {\n action: \"DENY\",\n code: \"LAW_DENIED\",\n reason:\n [result.reason, result.explanation].filter(Boolean).join(\" | \") ||\n \"Execution denied by law evaluation\",\n meta: { lawDecision: \"deny\", evaluation: result },\n };\n }\n}\n\nfunction sanitizeLawContext(\n context: AxisLawEvaluationContext,\n): Record<string, unknown> {\n return {\n actorId: context.actorId,\n intent: context.intent,\n audience: context.audience,\n tps: context.tps,\n country: context.country,\n ip: context.ip,\n path: context.path,\n clientId: context.clientId,\n deviceId: context.deviceId,\n sessionId: context.sessionId,\n capsuleId: context.capsuleId,\n };\n}\n","import * as z from \"zod\";\n\nimport { AxisFrameZ } from \"../core/axis-bin\";\nimport { PROOF_KINDS, type ProofKind } from \"../core/constants\";\n\n/**\n * AXIS Sensor Input/Output Validation Schemas\n *\n * Centralized Zod schemas for all sensor input validation.\n * Ensures type-safe, runtime-validated data across the entire sensor chain.\n *\n * Usage:\n * const input = CountryBlockSensorInputZ.parse(data);\n * const input = CountryBlockSensorInputZ.safeParse(data);\n */\n\n// ============================================================================\n// COMMON TYPES & UTILITIES\n// ============================================================================\n\n/**\n * Sensor decision outcomes (Zod version for schema composition)\n */\nexport const SensorDecisionZ = z.union([\n z.object({ action: z.literal(\"ALLOW\"), meta: z.any().optional() }),\n z.object({\n action: z.literal(\"DENY\"),\n code: z.string(),\n reason: z.string().optional(),\n meta: z.any().optional(),\n }),\n]);\n\nexport const SensorDecisionWithMetadataZ = z.union([\n z.object({ action: z.literal(\"ALLOW\"), meta: z.any().optional() }),\n z.object({\n action: z.literal(\"DENY\"),\n code: z.string(),\n reason: z.string().optional(),\n retryAfterMs: z.number().int().positive().optional(),\n meta: z.any().optional(),\n }),\n]);\n\n// ============================================================================\n// COUNTRY BLOCK SENSOR\n// ============================================================================\n\nexport const CountryBlockSensorInputZ = z.object({\n ip: z.string().min(1),\n country: z.string().length(2).toUpperCase().optional(),\n});\nexport type CountryBlockSensorInput = z.infer<typeof CountryBlockSensorInputZ>;\n\nexport const CountryBlockDecisionZ = SensorDecisionZ;\nexport type CountryBlockDecision = z.infer<typeof CountryBlockDecisionZ>;\n\n// ============================================================================\n// SCAN BURST SENSOR\n// ============================================================================\n\nexport const ScanBurstSensorInputZ = z.object({\n ip: z.string().min(1),\n isFailure: z.boolean().optional(),\n});\nexport type ScanBurstSensorInput = z.infer<typeof ScanBurstSensorInputZ>;\n\nexport const ScanBurstDecisionZ = SensorDecisionWithMetadataZ;\nexport type ScanBurstDecision = z.infer<typeof ScanBurstDecisionZ>;\n\n// ============================================================================\n// PROOF PRESENCE SENSOR\n// ============================================================================\n\nexport const ProofKindZ = z.enum(PROOF_KINDS);\nexport type { ProofKind };\n\nexport const AccessProfileZ = z.enum([\"PUBLIC\", \"PARTNER\", \"INTERNAL\", \"NODE\"]);\nexport type AccessProfile = z.infer<typeof AccessProfileZ>;\n\nexport const ProofPresenceInputZ = z.object({\n profile: AccessProfileZ,\n visibility: z.enum([\"PUBLIC\", \"GUARDED\"]),\n requiredProof: z.array(ProofKindZ).min(1),\n hasCapsule: z.boolean(),\n hasPassportSignature: z.boolean(),\n intent: z.string().min(1),\n});\nexport type ProofPresenceInput = z.infer<typeof ProofPresenceInputZ>;\n\n// ============================================================================\n// INTENT POLICY SENSOR\n// ============================================================================\n\nexport const SensitivityLevelZ = z.enum([\"LOW\", \"MEDIUM\", \"HIGH\", \"CRITICAL\"]);\nexport type SensitivityLevel = z.infer<typeof SensitivityLevelZ>;\n\nexport const IntentPolicyZ = z.object({\n intent: z.string().min(1),\n sensitivity: SensitivityLevelZ,\n maxFrameBytes: z.number().int().positive(),\n maxHeaderBytes: z.number().int().positive(),\n maxBodyBytes: z.number().int().positive(),\n maxSigBytes: z.number().int().positive().optional(),\n rateLimitPerMinute: z.number().int().positive().optional(),\n rateLimitPerHour: z.number().int().positive().optional(),\n requiresSignature: z.boolean(),\n requiresCapsule: z.boolean(),\n timeoutMs: z.number().int().positive(),\n});\nexport type IntentPolicy = z.infer<typeof IntentPolicyZ>;\n\nexport const IntentPolicySensorInputZ = z.object({\n frame: AxisFrameZ,\n intent: z.string().min(1),\n rawFrameSize: z.number().int().positive(),\n});\nexport type IntentPolicySensorInput = z.infer<typeof IntentPolicySensorInputZ>;\n\nexport const IntentPolicyDecisionZ = z.union([\n z.object({\n action: z.literal(\"ALLOW\"),\n policy: IntentPolicyZ,\n }),\n z.object({\n action: z.literal(\"DENY\"),\n reason: z.string(),\n }),\n]);\nexport type IntentPolicyDecision = z.infer<typeof IntentPolicyDecisionZ>;\n\n// ============================================================================\n// CAPSULE VERIFY SENSOR\n// ============================================================================\n\nexport const CapsuleClaimsZ = z.object({\n capsuleId: z.string().min(8),\n allowIntents: z.array(z.string()).min(1),\n limits: z\n .object({\n maxBodyBytes: z.number().int().positive().optional(),\n })\n .optional(),\n scopes: z.record(z.string(), z.any()).optional(),\n});\nexport type CapsuleClaims = z.infer<typeof CapsuleClaimsZ>;\n\nexport const CapsuleZ = z.object({\n id: z.string(),\n claims: CapsuleClaimsZ,\n issuedAt: z.number().int(),\n expiresAt: z.number().int(),\n tier: z.enum([\"FREE\", \"STANDARD\", \"PREMIUM\"]),\n});\nexport type Capsule = z.infer<typeof CapsuleZ>;\n\nexport const CapsuleValidationResultZ = z.object({\n valid: z.boolean(),\n capsule: CapsuleZ.optional(),\n reason: z.string().optional(),\n requiresStepUp: z.boolean().optional(),\n});\nexport type CapsuleValidationResult = z.infer<typeof CapsuleValidationResultZ>;\n\nexport const CapsuleVerifySensorInputZ = z.object({\n headers: z.map(\n z.number(),\n z.custom<Uint8Array>((v) => v instanceof Uint8Array),\n ),\n intent: z.string().min(1),\n ctx: z.any(), // AxisContext - avoid circular dependency\n});\nexport type CapsuleVerifySensorInput = z.infer<\n typeof CapsuleVerifySensorInputZ\n>;\n\nexport const CapsuleVerifyResultZ = z.object({\n ok: z.literal(true),\n capsule: CapsuleZ,\n});\nexport type CapsuleVerifyResult = z.infer<typeof CapsuleVerifyResultZ>;\n\n// ============================================================================\n// RATE LIMIT SENSOR\n// ============================================================================\n\nexport const RateLimitProfileZ = z.enum([\n \"PUBLIC\",\n \"PARTNER\",\n \"INTERNAL\",\n \"NODE\",\n]);\nexport type RateLimitProfile = z.infer<typeof RateLimitProfileZ>;\n\nexport const RateLimitInputZ = z.object({\n ip: z.string().min(1),\n userAgent: z.string().optional(),\n actorId: z.string().optional(),\n capsuleId: z.string().optional(),\n intent: z.string().min(1),\n profile: RateLimitProfileZ,\n});\nexport type RateLimitInput = z.infer<typeof RateLimitInputZ>;\n\nexport const RateLimitConfigZ = z.object({\n windowSec: z.number().int().positive(),\n max: z.number().int().positive(),\n key: z.enum([\"ip_fingerprint\", \"actor_capsule\"]),\n});\nexport type RateLimitConfig = z.infer<typeof RateLimitConfigZ>;\n\nexport const SensorResultZ = z.object({\n ok: z.literal(true),\n});\nexport type SensorResult = z.infer<typeof SensorResultZ>;\n\n// ============================================================================\n// SIGNATURE VERIFICATION SENSOR (Detailed)\n// ============================================================================\n\nexport const PassportZ = z.object({\n id: z.string(),\n public_key: z.custom<Buffer>((v) => Buffer.isBuffer(v)),\n status: z.enum([\"ACTIVE\", \"REVOKED\", \"EXPIRED\", \"PENDING\"]),\n issuedAt: z.number().int(),\n expiresAt: z.number().int().optional(),\n});\nexport const ExecutionMetricsZ = z.object({\n dbWrites: z.number().int(),\n dbReads: z.number().int(),\n externalCalls: z.number().int(),\n elapsedMs: z.number().int().optional(),\n});\n\nexport type Passport = z.infer<typeof PassportZ>;\n\n// ============================================================================\n// GENERAL SENSOR CHAIN INPUT\n// ============================================================================\n\nexport const SensorChainInputZ = z.object({\n ip: z.string().min(1),\n path: z.string().min(1),\n contentLength: z.number().int().nonnegative(),\n peek: z.instanceof(Uint8Array),\n country: z.string().optional(),\n});\nexport type SensorChainInput = z.infer<typeof SensorChainInputZ>;\n\n// ============================================================================\n// ENTROPY SENSOR\n// ============================================================================\n\nexport const EntropySensorInputZ = z.object({\n pid: z.custom<Buffer>((v) => Buffer.isBuffer(v)).optional(),\n nonce: z.custom<Buffer>((v) => Buffer.isBuffer(v)).optional(),\n ip: z.string().min(1),\n});\nexport type EntropySensorInput = z.infer<typeof EntropySensorInputZ>;\n\n// ============================================================================\n// PROTOCOL STRICT SENSOR\n// ============================================================================\n\nexport const ProtocolStrictInputZ = z.object({\n rawBytes: z\n .union([\n z.custom<Buffer>((v) => Buffer.isBuffer(v)),\n z.instanceof(Uint8Array),\n ])\n .optional(),\n ip: z.string().min(1),\n path: z.string().min(1),\n contentLength: z.number().int().nonnegative(),\n peek: z.instanceof(Uint8Array),\n country: z.string().optional(),\n contentType: z.string().optional(),\n});\nexport type ProtocolStrictInput = z.infer<typeof ProtocolStrictInputZ>;\n\n// ============================================================================\n// SCHEMA VALIDATION SENSOR\n// ============================================================================\n\nexport const SchemaFieldKindZ = z.enum([\n \"utf8\",\n \"u64\",\n \"bytes\",\n \"bytes16\",\n \"bool\",\n \"obj\",\n \"arr\",\n]);\nexport type SchemaFieldKind = z.infer<typeof SchemaFieldKindZ>;\n\nexport const ScopeZ = z.enum([\"header\", \"body\"]);\nexport type Scope = z.infer<typeof ScopeZ>;\n\nexport const SchemaFieldZ = z.object({\n name: z.string().min(1),\n tlv: z.number().int().positive(),\n kind: SchemaFieldKindZ,\n required: z.boolean().optional(),\n maxLen: z.number().int().positive().optional(),\n max: z.string().optional(),\n scope: ScopeZ.optional(),\n});\nexport type SchemaField = z.infer<typeof SchemaFieldZ>;\n\nexport const BodyProfileZ = z.enum([\"TLV_MAP\", \"RAW\", \"TLV_OBJ\", \"TLV_ARR\"]);\nexport type BodyProfile = z.infer<typeof BodyProfileZ>;\n\nexport const IntentSchemaZ = z.object({\n intent: z.string().min(1),\n version: z.number().int().positive(),\n bodyProfile: BodyProfileZ,\n fields: z.array(SchemaFieldZ).min(1),\n});\nexport type IntentSchema = z.infer<typeof IntentSchemaZ>;\n\n// ============================================================================\n// WEBSOCKET HANDSHAKE SENSOR\n// ============================================================================\n\nexport const WsHandshakeInputZ = z.object({\n clientId: z.string().min(1),\n isWs: z.boolean(),\n ip: z.string().min(1),\n});\nexport type WsHandshakeInput = z.infer<typeof WsHandshakeInputZ>;\n\nexport const WsHandshakeDecisionZ = z.union([\n z.object({ action: z.literal(\"ALLOW\") }),\n z.object({ action: z.literal(\"DENY\"), code: z.string() }),\n]);\nexport type WsHandshakeDecision = z.infer<typeof WsHandshakeDecisionZ>;\n\n// ============================================================================\n// IP REPUTATION SENSOR\n// ============================================================================\n\nexport const IPReputationInputZ = z.object({\n ip: z.string().min(1),\n});\nexport type IPReputationInput = z.infer<typeof IPReputationInputZ>;\n\nexport const IPReputationZ = z.object({\n score: z.number().min(-100).max(100),\n lastUpdated: z.number().int(),\n totalRequests: z.number().int().nonnegative(),\n failedRequests: z.number().int().nonnegative(),\n blockedRequests: z.number().int().nonnegative(),\n tags: z.array(z.string()),\n});\nexport type IPReputation = z.infer<typeof IPReputationZ>;\n\n// ============================================================================\n// FILE UPLOAD STATE SENSOR\n// ============================================================================\n\nexport const UploadStatusZ = z.enum([\n \"INIT\",\n \"UPLOADING\",\n \"FINALIZING\",\n \"DONE\",\n \"ABORTED\",\n]);\nexport type UploadStatus = z.infer<typeof UploadStatusZ>;\n\nexport const UploadSessionZ = z.object({\n uploadIdHex: z.string().min(1),\n fileName: z.string().min(1),\n totalSize: z.number().int().positive(),\n chunkSize: z.number().int().positive(),\n totalChunks: z.number().int().positive(),\n receivedCount: z.number().int().nonnegative(),\n status: UploadStatusZ,\n});\nexport type UploadSession = z.infer<typeof UploadSessionZ>;\n\n// ============================================================================\n// BODY BUDGET SENSOR\n// ============================================================================\n\nexport const BodyBudgetInputZ = z.object({\n intent: z.string().min(1),\n headerLen: z.number().int().nonnegative(),\n bodyLen: z.number().int().nonnegative(),\n});\nexport type BodyBudgetInput = z.infer<typeof BodyBudgetInputZ>;\n\nexport const BodyBudgetPolicyZ = z.object({\n maxHeaderBytes: z.number().int().positive(),\n maxBodyBytes: z.number().int().positive(),\n});\nexport type BodyBudgetPolicy = z.infer<typeof BodyBudgetPolicyZ>;\n\n// ============================================================================\n// CHUNK HASH SENSOR\n// ============================================================================\n\nexport const ChunkHashInputZ = z.object({\n headerTLVs: z.any(), // Map<number, Uint8Array> - flexible validation for compatibility\n bodyBytes: z.any(), // Uint8Array - flexible validation for compatibility\n intent: z.string().min(1),\n});\nexport type ChunkHashInput = z.infer<typeof ChunkHashInputZ>;\n\n// ============================================================================\n// AXIS CONTEXT (Request Context across sensors)\n// ============================================================================\n\nexport enum ProofType {\n CAPSULE = 1,\n JWT = 2,\n MTLS_ID = 3,\n DEVICE_SE = 4,\n WITNESS_SIG = 5,\n}\n\nexport const AxisContextZ = z.object({\n pid: z.custom<Buffer>((v) => Buffer.isBuffer(v)), // Process ID\n ts: z.bigint(), // Timestamp\n intent: z.string().min(1),\n actorId: z.custom<Buffer>((v) => Buffer.isBuffer(v)),\n proofType: z.enum(ProofType),\n proofRef: z.custom<Buffer>((v) => Buffer.isBuffer(v)),\n nonce: z.custom<Buffer>((v) => Buffer.isBuffer(v)),\n ip: z.string().min(1),\n nodeCertHash: z.string().optional(),\n capsule: CapsuleZ.optional(),\n passport: PassportZ.optional(),\n meter: z.any().optional(), // ExecutionMeter instance - any to avoid circular dependency and allow class instance\n});\n\nexport type AxisContext = z.infer<typeof AxisContextZ>;\n\n// ============================================================================\n// ERROR HANDLING\n// ============================================================================\n\nexport const AxisErrorZ = z.object({\n code: z.string(),\n message: z.string(),\n httpStatus: z.number().int(),\n});\nexport type AxisError = z.infer<typeof AxisErrorZ>;\n","import { Sensor } from \"../decorators/sensor.decorator\";\nimport { BAND } from \"../engine/sensor-bands\";\nimport {\n ProofPresenceInput,\n ProofPresenceInputZ,\n} from \"../schemas/axis-schemas\";\nimport { AxisError } from \"../core/axis-error\";\nimport { AxisSensor, SensorDecision } from \"../sensor/axis-sensor\";\n\n@Sensor()\nexport class ProofPresenceSensor implements AxisSensor {\n readonly name = \"ProofPresenceSensor\";\n readonly order = BAND.IDENTITY + 30;\n\n // supports() is a synchronous applicability gate.\n // Return false to skip this sensor without producing a denial.\n supports(input: ProofPresenceInput): boolean {\n return !!input.profile && !!input.visibility;\n }\n\n // run() executes only after supports() passes.\n // Return the actual ALLOW/DENY/FLAG/THROTTLE decision here.\n async run(input: ProofPresenceInput): Promise<SensorDecision> {\n // Validate input with Zod\n const validatedInput = ProofPresenceInputZ.safeParse(input);\n if (!validatedInput.success) {\n throw new AxisError(\n \"SENSOR_INVALID_INPUT\",\n `Input validation failed: ${validatedInput.error.message}`,\n 400,\n );\n }\n\n const {\n visibility,\n requiredProof,\n hasCapsule,\n hasPassportSignature,\n profile,\n intent,\n } = validatedInput.data;\n\n // Public intents don't require proof\n if (visibility === \"PUBLIC\") {\n return { action: \"ALLOW\" };\n }\n\n // If NONE is in required proofs, allow without proof\n if (requiredProof.includes(\"NONE\")) {\n return { action: \"ALLOW\" };\n }\n\n // Check if any required proof is satisfied\n const hasCapsuleProof = requiredProof.includes(\"CAPSULE\") && hasCapsule;\n const hasPassportProof =\n requiredProof.includes(\"PASSPORT\") && hasPassportSignature;\n const hasNodeProof = requiredProof.includes(\"MTLS\") && profile === \"NODE\";\n\n const satisfied = hasCapsuleProof || hasPassportProof || hasNodeProof;\n\n if (!satisfied) {\n throw new AxisError(\n \"SENSOR_PROOF_REQUIRED\",\n `Proof required for guarded intent: ${intent}`,\n 403,\n );\n }\n\n return { action: \"ALLOW\" };\n }\n}\n","import { Sensor } from \"../decorators/sensor.decorator\";\nimport { BAND } from \"../engine/sensor-bands\";\nimport { ProtocolStrictInputZ } from \"../schemas/axis-schemas\";\nimport { AxisSensor } from \"../sensor/axis-sensor\";\nimport {\n AXIS_MAGIC,\n AXIS_VERSION,\n AxisMediaTypes,\n FLAG_BODY_TLV,\n FLAG_CHAIN_REQ,\n FLAG_HAS_WITNESS,\n} from \"../core/constants\";\nimport { decodeVarint } from \"../core/varint\";\nimport { SensorDecision, SensorInput } from \"../sensor/axis-sensor\";\n\n/**\n * Valid flag combinations for AXIS frames.\n *\n * Flags can be combined using bitwise OR:\n * - 0x00: No flags (basic request)\n * - FLAG_BODY_TLV: Body section contains TLV-encoded data\n * - FLAG_CHAIN_REQ: Request requires receipt chaining\n * - FLAG_HAS_WITNESS: Frame includes witness signatures\n *\n * Any other flag combination is considered invalid.\n */\nconst VALID_FLAGS = [\n 0x00, // No flags\n FLAG_BODY_TLV, // Body contains TLVs\n FLAG_CHAIN_REQ, // Requires receipt chaining\n FLAG_HAS_WITNESS, // Has witness signatures\n FLAG_BODY_TLV | FLAG_CHAIN_REQ,\n FLAG_BODY_TLV | FLAG_HAS_WITNESS,\n FLAG_CHAIN_REQ | FLAG_HAS_WITNESS,\n FLAG_BODY_TLV | FLAG_CHAIN_REQ | FLAG_HAS_WITNESS,\n];\n\n/**\n * Protocol Strict Sensor - Binary Protocol Validation Gateway\n *\n * **CRITICAL SECURITY COMPONENT - FIRST LINE OF DEFENSE**\n *\n * This sensor validates the raw binary structure of incoming AXIS frames before\n * any further processing occurs. It acts as the protocol gatekeeper, ensuring\n * only well-formed, spec-compliant frames are processed by the system.\n *\n * **Execution Order:** 10 (FIRST sensor in the chain)\n *\n * **Core Concept:**\n * AXIS uses a custom binary wire format for efficiency and security. This sensor\n * validates the frame structure at the byte level, catching malformed packets\n * before they can exploit parsing vulnerabilities deeper in the stack.\n *\n * **Frame Structure Validated:**\n * ```\n * +-------+-------+-------+-------+-------+-------+-------+...\n * | MAGIC (5 bytes: \"AXIS1\") | VER | FLAGS | HDR_LEN (varint)\n * +-------+-------+-------+-------+-------+-------+-------+...\n * | BODY_LEN (varint) | SIG_LEN (varint) | HDR TLVs... |\n * +-------+-------+-------+-------+-------+-------+-------+...\n * | BODY... | SIGNATURE... |\n * +-------+-------+-------+-------+-------+-------+-------+...\n * ```\n *\n * **Validations Performed:**\n * 1. **Content-Type** - Must be `application/axis-bin` or similar\n * 2. **Magic Bytes** - Must be \"AXIS1\" (5 bytes)\n * 3. **Version** - Must match AXIS_VERSION constant\n * 4. **Flags** - Must be a valid combination\n * 5. **Varint Encoding** - Must be minimal (no unnecessary bytes)\n * 6. **TLV Ordering** - Must be canonical (sorted by type)\n * 7. **Client Version** - TLV 100 should be present\n *\n * **Security Model:**\n * - **Fail Closed:** Invalid magic/version = DENY\n * - **Flag for Minor Issues:** Non-critical violations decrease trust score\n * - **Defense in Depth:** First of multiple validation layers\n *\n * **Actions:**\n * - `ALLOW` - Frame is well-formed and spec-compliant\n * - `DENY` - Critical protocol violation (magic, version, frame too short)\n * - `FLAG` - Minor issues that decrease trust score\n *\n * **Performance:**\n * - Validates first 20 bytes of each frame\n * - No external dependencies (pure byte validation)\n * - Latency: <1ms for typical frames\n *\n * @class ProtocolStrictSensor\n * @implements {AxisSensor}\n * @implements {OnModuleInit}\n *\n * @example\n * Valid AXIS frame:\n * ```typescript\n * // Frame starts with: \"AXIS1\" + version(1) + flags(0x01) + lengths...\n * // Sensor returns: { action: 'ALLOW' }\n * ```\n *\n * @example\n * Invalid magic bytes:\n * ```typescript\n * // Frame starts with: \"HTTP1\" (wrong protocol)\n * // Sensor returns: {\n * // action: 'DENY',\n * // code: 'INVALID_MAGIC',\n * // reason: 'Expected AXIS1 magic, got HTTP1'\n * // }\n * ```\n *\n * @see {@link https://axis-spec.example.com/wire-format AXIS Wire Format Spec}\n */\n@Sensor({ phase: \"PRE_DECODE\" })\nexport class ProtocolStrictSensor implements AxisSensor {\n private readonly logger = {\n error: (msg: string, ...args: unknown[]) =>\n console.error(`[ProtocolStrictSensor] ${msg}`, ...args),\n debug: (msg: string) => void 0,\n warn: (msg: string) => console.warn(`[ProtocolStrictSensor] ${msg}`),\n };\n\n /** Sensor identifier for logging and registry */\n readonly name = \"ProtocolStrictSensor\";\n\n /**\n * Execution order - FIRST sensor in the chain\n *\n * Order 10 ensures:\n * - Runs before any other processing\n * - Invalid frames rejected immediately\n * - Protects all downstream sensors from malformed input\n */\n readonly order = BAND.WIRE + 10;\n\n private protocolMagic: Uint8Array = AXIS_MAGIC;\n private protocolVersion = AXIS_VERSION;\n\n /**\n * Static validation for streaming middleware (Fast Check)\n */\n public static validateMagic(\n chunk: Uint8Array,\n expected: Uint8Array,\n ): { valid: boolean; actual?: string } {\n if (chunk.length < expected.length) return { valid: true }; // Not enough data yet\n const actual = chunk.subarray(0, expected.length);\n const valid = Buffer.from(actual).equals(Buffer.from(expected));\n return {\n valid,\n actual: valid ? undefined : new TextDecoder().decode(actual),\n };\n }\n\n public static validateVersion(version: number, expected: number): boolean {\n return version === expected;\n }\n\n /**\n * Lifecycle hook: Load config overrides on module initialization.\n */\n onModuleInit() {\n const magicStr = process.env[\"AXIS_PROTOCOL_MAGIC\"];\n this.protocolMagic = magicStr ? Buffer.from(magicStr, \"ascii\") : AXIS_MAGIC;\n const versionStr = process.env[\"AXIS_PROTOCOL_VERSION\"];\n this.protocolVersion = versionStr ? Number(versionStr) : AXIS_VERSION;\n }\n\n /**\n * Evaluate protocol strictness\n */\n // This sensor does not define supports(), so it is applicable whenever registered.\n // run() returns the actual ALLOW/DENY/FLAG/THROTTLE decision.\n async run(input: SensorInput): Promise<SensorDecision> {\n const validatedInput = ProtocolStrictInputZ.safeParse(input);\n if (!validatedInput.success) {\n this.logger.error(\n `Invalid input: ${validatedInput.error.message}`,\n validatedInput.error.issues,\n );\n return {\n action: \"DENY\",\n code: \"INVALID_INPUT\",\n reason: \"Protocol validation input failed\",\n };\n }\n\n const { contentType, peek } = validatedInput.data;\n const issues: string[] = [];\n\n // Debug: Log first 10 bytes\n if (peek.length >= 8) {\n const hex = Buffer.from(peek.subarray(0, 10)).toString(\"hex\");\n this.logger.debug(`Raw Frame Header (Hex): ${hex} (IP: ${input.ip})`);\n }\n\n // 1. Check Content-Type header (HTTP only)\n if (contentType !== undefined) {\n if (!this.isValidContentType(contentType)) {\n issues.push(`invalid_content_type:${contentType}`);\n }\n }\n\n // Need at least 9 bytes for basic frame header (Magic:5, Ver:1, Flags:1, HLen:1, BLen:1, SLen:1)\n if (peek.length < 9) {\n return {\n action: \"DENY\",\n code: \"FRAME_TOO_SHORT\",\n reason: \"Frame too short for protocol header\",\n };\n }\n\n // 2. Check magic bytes\n const magicCheck = ProtocolStrictSensor.validateMagic(\n peek,\n this.protocolMagic,\n );\n if (!magicCheck.valid) {\n return {\n action: \"DENY\",\n code: \"INVALID_MAGIC\",\n reason: `Expected ${new TextDecoder().decode(this.protocolMagic)} magic, got ${magicCheck.actual}`,\n };\n }\n\n // 3. Check version (Offset 5)\n const version = peek[5];\n if (!ProtocolStrictSensor.validateVersion(version, this.protocolVersion)) {\n issues.push(`unsupported_version:${version}`);\n }\n\n // 4. Check flags validity (Offset 6)\n const flags = peek[6];\n if (!this.isValidFlags(flags)) {\n issues.push(`invalid_flags:0x${flags.toString(16)}`);\n }\n\n // 5. Check length encoding (varints should be minimal) - Starts at Offset 7\n if (peek.length >= 10) {\n const lengthCheck = this.checkVarintEncoding(peek.subarray(7));\n if (!lengthCheck.valid) {\n issues.push(`non_minimal_varint:${lengthCheck.reason}`);\n }\n }\n\n // 6. Check TLV ordering if we have enough data\n if (peek.length >= 20) {\n const tlvCheck = this.checkTLVOrdering(peek);\n if (!tlvCheck.valid) {\n issues.push(`tlv_not_canonical:${tlvCheck.reason}`);\n }\n\n // 7. Check Client Version (TLV 100) presence\n const hasClientVersion = await this.checkForClientVersion(peek);\n if (!hasClientVersion) {\n // Warn for now (Phase 7 Soft Rollout)\n issues.push(\"missing_client_version\");\n }\n }\n\n // Return FLAG for minor issues, DENY for critical\n if (issues.length > 0) {\n // Check for critical issues\n const critical = issues.some(\n (i) =>\n i.startsWith(\"invalid_magic\") || i.startsWith(\"unsupported_version\"),\n );\n\n if (critical) {\n return {\n action: \"DENY\",\n code: \"PROTOCOL_VIOLATION\",\n reason: issues.join(\", \"),\n };\n }\n\n this.logger.warn(\n `Protocol issues from ${input.ip}: ${issues.join(\", \")}`,\n );\n return {\n action: \"FLAG\",\n scoreDelta: -issues.length * 2,\n reasons: issues,\n };\n }\n\n return { action: \"ALLOW\" };\n }\n\n /**\n * Compare two buffers for equality\n */\n private buffersEqual(a: Uint8Array, b: Uint8Array): boolean {\n if (a.length !== b.length) return false;\n for (let i = 0; i < a.length; i++) {\n if (a[i] !== b[i]) return false;\n }\n return true;\n }\n\n /**\n * Check if Content-Type is valid for AXIS\n */\n private isValidContentType(contentType: string): boolean {\n return AxisMediaTypes.isAxisContentType(contentType);\n }\n\n /**\n * Check if flags are a valid combination\n */\n private isValidFlags(flags: number): boolean {\n return VALID_FLAGS.includes(flags);\n }\n\n /**\n * Check varint encoding is minimal (no leading zeros)\n */\n private checkVarintEncoding(data: Uint8Array): {\n valid: boolean;\n reason?: string;\n } {\n try {\n const { value, length: bytesRead } = decodeVarint(data, 0);\n\n // Check for non-minimal encoding\n // A varint should use the minimum number of bytes\n if (value < 128 && bytesRead > 1) {\n return { valid: false, reason: \"non-minimal-small-value\" };\n }\n if (value < 16384 && bytesRead > 2) {\n return { valid: false, reason: \"non-minimal-medium-value\" };\n }\n\n return { valid: true };\n } catch {\n return { valid: false, reason: \"varint-decode-error\" };\n }\n }\n\n /**\n * Check TLV ordering is canonical (sorted by type, no duplicates)\n */\n private checkTLVOrdering(data: Uint8Array): {\n valid: boolean;\n reason?: string;\n } {\n // This is a simplified check - full check would require decoding the frame\n // For now, we do a heuristic check on the first few TLVs\n\n try {\n // Skip to length section (after magic, version, flags)\n let offset = 7;\n\n // Decode header length\n const { value: hdrLen, length: hdrBytes } = decodeVarint(data, offset);\n offset += hdrBytes;\n\n // Decode body length\n const { length: bodyBytes } = decodeVarint(data, offset);\n offset += bodyBytes;\n\n // Decode sig length\n const { length: sigBytes } = decodeVarint(data, offset);\n offset += sigBytes;\n\n // Now at HDR TLVs\n const hdrStart = offset;\n const hdrEnd = hdrStart + Number(hdrLen);\n\n if (hdrEnd > data.length) {\n return { valid: true }; // Not enough data to check\n }\n\n // Check TLV types are ascending\n let lastType = -1;\n let pos = hdrStart;\n\n while (pos < hdrEnd && pos < data.length - 2) {\n const { value: type, length: typeBytes } = decodeVarint(data, pos);\n pos += typeBytes;\n\n if (pos >= hdrEnd) break;\n\n const { value: len, length: lenBytes } = decodeVarint(data, pos);\n pos += lenBytes;\n\n // Check ordering\n if (Number(type) <= lastType) {\n return {\n valid: false,\n reason: `type-${type}-after-${lastType}`,\n };\n }\n\n lastType = Number(type);\n pos += Number(len);\n }\n\n return { valid: true };\n } catch {\n return { valid: true }; // On error, don't block\n }\n }\n\n /**\n * Check if TLV 100 (Client Version) exists in the headers\n */\n private async checkForClientVersion(data: Uint8Array): Promise<boolean> {\n try {\n let offset = 7;\n const { value: hdrLen, length: hdrBytes } = decodeVarint(data, offset);\n offset += hdrBytes;\n const { length: bodyBytes } = decodeVarint(data, offset);\n offset += bodyBytes;\n const { length: sigBytes } = decodeVarint(data, offset);\n offset += sigBytes;\n\n const hdrEnd = offset + Number(hdrLen);\n\n let pos = offset;\n while (pos < hdrEnd && pos < data.length) {\n const { value: type, length: typeBytes } = decodeVarint(data, pos);\n pos += typeBytes;\n const { length: lenBytes } = decodeVarint(data, pos); // value not needed\n pos += lenBytes;\n\n const { value: valLen, length: valLenBytes } = decodeVarint(\n data,\n pos - lenBytes,\n ); // reread legnth\n\n // Correct interaction: varint includes bytes read.\n // decodeVarint returns { value, length } -> length is how many bytes the varint took.\n // Wait, I need to read the length value to skip.\n\n // Re-do loop structure correctly:\n // 1. Read Type\n // 2. Read Length\n // 3. Skip Value\n }\n\n // Let's use a simpler heuristic scan for now as full parse is expensive here\n // and done elsewhere. But for correctness let's do it right.\n\n pos = offset;\n while (pos < hdrEnd && pos < data.length) {\n const t = decodeVarint(data, pos);\n pos += t.length;\n const l = decodeVarint(data, pos);\n pos += l.length;\n\n if (t.value === 100) return true;\n\n pos += Number(l.value);\n }\n\n return false;\n } catch {\n return false;\n }\n }\n}\n","\nimport { Sensor } from '../decorators/sensor.decorator';\nimport { BAND } from '../engine/sensor-bands';\nimport { AxisSensor, SensorDecision } from '../sensor/axis-sensor';\n\n@Sensor()\nexport class ReceiptPolicySensor implements AxisSensor {\n readonly name = 'ReceiptPolicySensor';\n readonly order = BAND.BUSINESS + 20;\n\n // supports() is a synchronous applicability gate.\n // Return false to skip this sensor without producing a denial.\n supports(): boolean {\n return true;\n }\n\n // run() executes only after supports() passes.\n // Return the actual ALLOW/DENY/FLAG/THROTTLE decision here.\n async run(): Promise<SensorDecision> {\n // Stub: allow. Real impl defines which intents must yield signed receipts.\n return { action: 'ALLOW' };\n }\n}\n","\nimport { Sensor } from '../decorators/sensor.decorator';\nimport { BAND } from '../engine/sensor-bands';\nimport type { RiskSignal, RiskEvaluation } from '../risk';\nimport { RiskDecision } from '../risk';\nimport type { AxisSensor, SensorDecision, SensorInput } from '../sensor/axis-sensor';\n\n/**\n * Risk signal collector function.\n * Implementations gather signals from the request context\n * (anomaly scores, geo risk, velocity checks, device fingerprint, etc.)\n */\nexport type RiskSignalCollector = (\n input: SensorInput,\n) => Promise<RiskSignal[]> | RiskSignal[];\n\n/**\n * Configuration for the Risk Gate Sensor.\n */\nexport interface RiskGateSensorOptions {\n /**\n * One or more collectors that produce RiskSignals.\n * All collectors run and their signals are aggregated.\n */\n collectors: RiskSignalCollector[];\n\n /**\n * Risk score threshold at which the sensor denies (0–100).\n * Defaults to 75.\n */\n denyThreshold?: number;\n\n /**\n * Risk score threshold at which the sensor flags but allows (0–100).\n * Defaults to 40.\n */\n flagThreshold?: number;\n}\n\n/** Map severity to a numeric weight */\nconst SEVERITY_WEIGHT: Record<RiskSignal['severity'], number> = {\n low: 10,\n medium: 25,\n high: 50,\n critical: 100,\n};\n\n/**\n * Risk Gate Sensor — Aggregates risk signals into a gate decision.\n *\n * Collects signals from pluggable collectors, computes a weighted\n * aggregate risk score, and translates RiskDecision into a\n * SensorDecision the chain can enforce.\n *\n * Runs in the BUSINESS band so all identity, policy, and content\n * sensors have already contributed their metadata.\n */\n@Sensor()\nexport class RiskGateSensor implements AxisSensor {\n readonly name = 'RiskGateSensor';\n readonly order = BAND.BUSINESS + 10;\n\n private readonly collectors: RiskSignalCollector[];\n private readonly denyThreshold: number;\n private readonly flagThreshold: number;\n\n constructor(options: RiskGateSensorOptions) {\n this.collectors = options.collectors;\n this.denyThreshold = options.denyThreshold ?? 75;\n this.flagThreshold = options.flagThreshold ?? 40;\n }\n\n // This sensor does not define supports(), so it is applicable whenever registered.\n // run() returns the actual ALLOW/DENY/FLAG/THROTTLE decision.\n async run(input: SensorInput): Promise<SensorDecision> {\n // Collect all signals in parallel\n const results = await Promise.all(\n this.collectors.map((c) => c(input)),\n );\n const signals: RiskSignal[] = results.flat();\n\n // Aggregate: weighted mean of severity scores, capped at 100\n let totalWeight = 0;\n let weightedSum = 0;\n for (const signal of signals) {\n const w = SEVERITY_WEIGHT[signal.severity];\n totalWeight += 1;\n weightedSum += w;\n }\n const aggregateScore =\n totalWeight > 0 ? Math.min(100, Math.round(weightedSum / totalWeight)) : 0;\n\n // Evaluate\n const evaluation = this.evaluate(aggregateScore, signals);\n\n // Store evaluation in metadata for downstream consumers\n input.metadata = {\n ...(input.metadata ?? {}),\n riskEvaluation: evaluation,\n };\n\n if (evaluation.decision === RiskDecision.DENY) {\n return {\n allow: false,\n riskScore: aggregateScore,\n reasons: signals.map((s) => s.message),\n code: 'RISK_GATE_DENY',\n tags: { riskDecision: evaluation.decision, signalCount: signals.length },\n };\n }\n\n if (evaluation.decision === RiskDecision.THROTTLE) {\n return {\n allow: false,\n riskScore: aggregateScore,\n reasons: signals.map((s) => s.message),\n code: 'RISK_GATE_THROTTLE',\n retryAfterMs: evaluation.retryAfterMs,\n tags: { riskDecision: evaluation.decision, signalCount: signals.length },\n };\n }\n\n // ALLOW, STEP_UP, WITNESS, FLAG — allow but propagate score\n return {\n allow: true,\n riskScore: aggregateScore,\n reasons: signals\n .filter((s) => s.severity === 'medium' || s.severity === 'high')\n .map((s) => s.message),\n tags: {\n riskDecision: evaluation.decision,\n signalCount: signals.length,\n },\n };\n }\n\n private evaluate(\n score: number,\n signals: RiskSignal[],\n ): RiskEvaluation {\n // Any critical signal → immediate DENY\n const hasCritical = signals.some((s) => s.severity === 'critical');\n if (hasCritical) {\n return {\n decision: RiskDecision.DENY,\n reason: 'Critical risk signal detected',\n confidence: 1,\n signals,\n };\n }\n\n if (score >= this.denyThreshold) {\n return {\n decision: RiskDecision.DENY,\n reason: `Aggregate risk score ${score} exceeds deny threshold ${this.denyThreshold}`,\n confidence: score / 100,\n signals,\n };\n }\n\n if (score >= this.flagThreshold) {\n return {\n decision: RiskDecision.STEP_UP,\n reason: `Aggregate risk score ${score} exceeds flag threshold ${this.flagThreshold}`,\n confidence: score / 100,\n signals,\n };\n }\n\n return {\n decision: RiskDecision.ALLOW,\n confidence: 1 - score / 100,\n signals,\n };\n }\n}\n","\nimport { Sensor } from '../decorators/sensor.decorator';\nimport { BAND } from '../engine/sensor-bands';\nimport { IntentSchema, IntentSchemaZ } from '../schemas/axis-schemas';\nimport { AxisSensor, SensorDecision } from '../sensor/axis-sensor';\nimport { AxisError } from '../core/axis-error';\nimport type { TlvValidatorFn } from '../decorators/tlv-field.decorator';\n\n/**\n * Reads a big-endian unsigned 64-bit integer from a byte array.\n *\n * @param {Uint8Array} b - 8-byte array\n * @returns {bigint} The decoded integer\n * @throws {AxisError} If array is not exactly 8 bytes\n */\nfunction readU64be(b: Uint8Array): bigint {\n if (b.length !== 8)\n throw new AxisError('SCHEMA_TYPE_MISMATCH', 'u64 must be 8 bytes', 400);\n let x = 0n;\n for (const by of b) x = (x << 8n) | BigInt(by);\n return x;\n}\n\n/**\n * Schema Validation Sensor - TLV Field Contract Enforcement\n *\n * Validates that incoming request bodies conform to the defined intent schema.\n * This ensures type safety and data integrity before handler execution.\n *\n * **Execution Order:** 170 (late in pipeline, after all auth/policy checks)\n *\n * **Core Concept:**\n * Every AXIS intent can define a schema that specifies:\n * - Required fields and their TLV types\n * - Field types (utf8, bytes, u64, bool, etc.)\n * - Size limits per field\n * - Scope (header or body)\n *\n * The sensor validates each field against its schema definition, rejecting\n * requests that violate the contract.\n *\n * **Supported Field Types:**\n * | Kind | Description | Validation |\n * |------|-------------|------------|\n * | `utf8` | UTF-8 string | Valid UTF-8 encoding |\n * | `bool` | Boolean | 1 byte: 0x00 or 0x01 |\n * | `u64` | Unsigned 64-bit int | Exactly 8 bytes, big-endian |\n * | `bytes16` | Fixed 16 bytes | Exactly 16 bytes (UUIDs) |\n * | `bytes` | Variable bytes | Any length up to maxLen |\n * | `obj` | Nested object | (Reserved for future) |\n * | `arr` | Array | (Reserved for future) |\n *\n * **How It Works:**\n * ```\n * 1. Validate schema structure with Zod\n * 2. For each field in schema:\n * a. Look up TLV in headers or body (based on scope)\n * b. Check if field is required\n * c. Check size against maxLen\n * d. Validate type (utf8 encoding, bool values, etc.)\n * 3. Throw AxisError on any violation\n * ```\n *\n * **Security Model:**\n * - **Fail Closed:** Schema violations throw errors (no silent failures)\n * - **Pre-Handler:** All validation happens before handler execution\n * - **Type-Safe:** Handlers receive type-validated data\n *\n * **Error Codes:**\n * - `SCHEMA_INVALID` - Schema itself is malformed\n * - `SCHEMA_FIELD_MISSING` - Required field not present\n * - `SCHEMA_LIMIT_EXCEEDED` - Field exceeds maxLen or max value\n * - `SCHEMA_TYPE_MISMATCH` - Field type doesn't match expected\n *\n * **Performance:**\n * - In-memory validation (no I/O)\n * - O(n) where n = number of schema fields\n * - Latency: ~1-5ms for typical schemas\n *\n * @class SchemaValidationSensor\n * @implements {OnModuleInit}\n *\n * @example\n * Valid schema validation:\n * ```typescript\n * const schema = {\n * fields: [\n * { name: 'fullName', tlv: 100, kind: 'utf8', required: true, maxLen: 256 },\n * { name: 'age', tlv: 101, kind: 'u64', max: 150 }\n * ]\n * };\n * // Body TLVs contain valid data\n * { ok: true }\n * ```\n *\n * @example\n * Missing required field:\n * ```typescript\n * // TLV 100 (fullName) not present in body\n * throw AxisError('SCHEMA_FIELD_MISSING',\n * 'Missing required field: fullName (TLV 100)', 400);\n * ```\n *\n * @see {@link IntentSchema}\n */\n@Sensor()\nexport class SchemaValidationSensor implements AxisSensor {\n /** Sensor identifier for logging and registry */\n readonly name = 'SchemaValidationSensor';\n\n /**\n * Execution order - runs late in the pipeline\n *\n * Order 170 ensures:\n * - All authentication complete\n * - All policy checks complete\n * - Data validated before handler execution\n */\n readonly order = BAND.CONTENT + 35;\n\n /**\n * Determines if this sensor should process the given input.\n *\n * Only activates when a schema is provided for the intent (post-decode phase).\n *\n * @param {any} input - Sensor input\n * @returns {Promise<SensorDecision>} Allow when a schema exists, deny otherwise\n */\n // supports() is a synchronous applicability gate.\n // Return false to skip this sensor without producing a denial.\n supports(input: any): boolean {\n // Only run in post-decode phase when schema is provided\n return !!input.metadata?.schema;\n }\n\n /**\n * Validates TLV fields against the schema definition.\n *\n * **Validation Steps:**\n * 1. Validate the schema itself using Zod\n * 2. Iterate through each field definition\n * 3. Check required fields are present\n * 4. Validate size limits (maxLen)\n * 5. Validate type-specific rules\n *\n * @param {any} input - Standard SensorInput\n * @returns {{ action: 'ALLOW' } | { action: 'DENY', code: string, reason: string }} Decision\n */\n // run() executes only after supports() passes.\n // Return the actual ALLOW/DENY/FLAG/THROTTLE decision here.\n async run(\n input: any,\n ): Promise<\n { action: 'ALLOW' } | { action: 'DENY'; code: string; reason: string }\n > {\n const schema = input.metadata?.schema as IntentSchema;\n const headerTLVs = input.headerTLVs as Map<number, Uint8Array>;\n const bodyTLVs = input.bodyTLVs as Map<number, Uint8Array> | undefined;\n\n // If no schema, allow (no validation needed)\n if (!schema) {\n return { action: 'ALLOW' };\n }\n\n // === STEP 1: Validate Schema Structure ===\n const validatedSchema = IntentSchemaZ.safeParse(schema);\n if (!validatedSchema.success) {\n return {\n action: 'DENY',\n code: 'SCHEMA_INVALID',\n reason: `Schema validation failed: ${validatedSchema.error.message}`,\n };\n }\n\n // === STEP 2: Validate Each Field ===\n try {\n for (const field of schema.fields) {\n // Determine which TLV map to use (header or body)\n const scope = field.scope ?? 'body';\n const map = scope === 'header' ? headerTLVs : bodyTLVs;\n\n // Get the field value from the appropriate map\n const val = map?.get(field.tlv);\n\n // === Check Required Fields ===\n if (field.required && !val) {\n throw new AxisError(\n 'SCHEMA_FIELD_MISSING',\n `Missing required field: ${field.name} (TLV ${field.tlv})`,\n 400,\n );\n }\n\n // Skip validation if field not present (and not required)\n if (!val) continue;\n\n // === Check Size Limit ===\n if (typeof field.maxLen === 'number' && val.length > field.maxLen) {\n throw new AxisError(\n 'SCHEMA_LIMIT_EXCEEDED',\n `Field ${field.name} too large (${val.length} > ${field.maxLen})`,\n 413, // Payload Too Large\n );\n }\n\n // === Type-Specific Validation ===\n switch (field.kind) {\n case 'utf8':\n // Validate UTF-8 encoding\n try {\n new TextDecoder('utf-8', { fatal: true }).decode(val);\n } catch {\n throw new AxisError(\n 'SCHEMA_TYPE_MISMATCH',\n `Invalid UTF-8 in ${field.name}`,\n 400,\n );\n }\n break;\n\n case 'bool':\n // Boolean must be exactly 1 byte: 0x00 or 0x01\n if (val.length !== 1 || (val[0] !== 0 && val[0] !== 1)) {\n throw new AxisError(\n 'SCHEMA_TYPE_MISMATCH',\n `Invalid bool: ${field.name}`,\n 400,\n );\n }\n break;\n\n case 'u64': {\n // Unsigned 64-bit integer (big-endian)\n const x = readU64be(val);\n\n // Check max value if specified\n if (field.max) {\n const mx = BigInt(field.max);\n if (x > mx) {\n throw new AxisError(\n 'SCHEMA_LIMIT_EXCEEDED',\n `u64 ${field.name} exceeds max (${x} > ${mx})`,\n 400,\n );\n }\n }\n break;\n }\n\n case 'bytes16':\n // Fixed 16-byte field (UUIDs, IDs)\n if (val.length !== 16) {\n throw new AxisError(\n 'SCHEMA_TYPE_MISMATCH',\n `bytes16 required for ${field.name}`,\n 400,\n );\n }\n break;\n\n case 'bytes':\n // Variable-length bytes - any length within maxLen is allowed\n break;\n\n case 'obj':\n case 'arr':\n // Nested object/array validation (reserved for future)\n // TODO: Implement nested validation\n break;\n\n default:\n throw new AxisError(\n 'SCHEMA_TYPE_MISMATCH',\n `Unknown schema kind: ${field.kind}`,\n 500,\n );\n }\n }\n\n // === STEP 3: Run custom @TlvValidate validators ===\n const validators = input.metadata?.validators as\n | Map<number, TlvValidatorFn[]>\n | undefined;\n if (validators && validators.size > 0) {\n for (const field of schema.fields) {\n const fns = validators.get(field.tlv);\n if (!fns || fns.length === 0) continue;\n\n const scope = field.scope ?? 'body';\n const map = scope === 'header' ? headerTLVs : bodyTLVs;\n const val = map?.get(field.tlv);\n if (!val) continue; // missing fields already handled above\n\n for (const fn of fns) {\n const error = fn(val, field.name);\n if (error) {\n throw new AxisError(\n 'SCHEMA_VALIDATION_FAILED',\n `${field.name} (TLV ${field.tlv}): ${error}`,\n 400,\n );\n }\n }\n }\n }\n } catch (err: any) {\n // Convert AxisError to DENY decision\n if (err instanceof AxisError) {\n return {\n action: 'DENY',\n code: err.code,\n reason: err.message,\n };\n }\n throw err; // Re-throw unknown errors\n }\n\n return { action: 'ALLOW' };\n }\n}\n","\nimport { Sensor } from '../decorators/sensor.decorator';\nimport { BAND } from '../engine/sensor-bands';\nimport { AxisSensor, SensorDecision } from '../sensor/axis-sensor';\n\n/**\n * Stream Scope Sensor - Topic-Level Access Control\n *\n * Enforces read/write permissions on stream topics. Validates that\n * the actor has appropriate access to subscribe or publish to the\n * requested stream topic.\n *\n * **Execution Order:** 200 (near execution, after all validation)\n *\n * **Core Concept:**\n * AXIS supports real-time streaming via WebSocket. Streams are organized\n * by topics (e.g., 'citizen.123.timeline', 'hub.news.updates'). This\n * sensor enforces topic-level access control:\n * - Can the actor subscribe to this topic?\n * - Can the actor publish to this topic?\n *\n * **Topic Patterns:**\n * - `citizen.{id}.timeline` - Personal timeline (owner + admin)\n * - `hub.{name}.updates` - Hub updates (members)\n * - `public.*` - Public topics (anyone)\n * - `admin.*` - Admin topics (admins only)\n *\n * **How It Would Work (Full Implementation):**\n * ```\n * 1. Extract topic from stream intent body\n * 2. Parse topic pattern (e.g., citizen.123.timeline)\n * 3. Determine required access (read for subscribe, write for publish)\n * 4. Check actor's permissions against topic ACL\n * 5. DENY if unauthorized, ALLOW if permitted\n * ```\n *\n * **Stream Operations:**\n * - `stream.subscribe` - Requires READ access\n * - `stream.publish` - Requires WRITE access\n * - `stream.unsubscribe` - Always allowed (cleanup)\n *\n * **Security Model:**\n * - **Stub Implementation:** Currently allows all\n * - **Topic Isolation:** Each topic has independent ACL\n * - **Inheritance:** Pattern-based permissions (citizen.* = citizen owner)\n *\n * **Actions (planned):**\n * - `ALLOW` - Actor has permission\n * - `DENY` - Unauthorized topic access\n *\n * **Error Codes (planned):**\n * - `STREAM_UNAUTHORIZED` - No permission for topic\n * - `STREAM_TOPIC_NOT_FOUND` - Topic doesn't exist\n *\n * **Performance:**\n * - ACL lookup: O(1) with caching\n * - Pattern matching: O(patterns)\n *\n * @class StreamScopeSensor\n * @implements {Sensor}\n * @implements {OnModuleInit}\n *\n * @example\n * Authorized subscription:\n * ```typescript\n * // Actor: user123\n * // Topic: citizen.user123.timeline\n * // Permission: owner can read own timeline\n * { action: 'ALLOW' }\n * ```\n *\n * @example\n * Unauthorized subscription (planned):\n * ```typescript\n * // Actor: user456\n * // Topic: citizen.user123.timeline\n * // Permission: NOT owner\n * {\n * action: 'DENY',\n * code: 'STREAM_UNAUTHORIZED',\n * reason: 'No read access to citizen.user123.timeline'\n * }\n * ```\n *\n * @todo Implement topic ACL lookup and permission checking\n * @see {@link CapabilityEnforcementSensor} - Request-level capabilities\n */\n@Sensor()\nexport class StreamScopeSensor implements AxisSensor {\n /** Sensor identifier */\n readonly name = 'StreamScopeSensor';\n\n /**\n * Execution order - near handler execution\n *\n * Order 200 ensures:\n * - All authentication complete\n * - All policy checks complete\n * - Stream-specific check right before subscription\n */\n readonly order = BAND.BUSINESS + 0;\n\n /**\n * Determines if this sensor should process the given input.\n *\n * Currently processes all inputs.\n *\n * @returns {Promise<SensorDecision>} Always allow\n */\n // supports() is a synchronous applicability gate.\n // Return false to skip this sensor without producing a denial.\n supports(): boolean {\n return true;\n }\n\n /**\n * Validates stream topic access permissions.\n *\n * **Current Implementation:** Stub that always allows.\n *\n * **TODO:** Full implementation should:\n * 1. Check if intent is stream.subscribe or stream.publish\n * 2. Extract topic from body TLVs\n * 3. Parse topic into owner/resource pattern\n * 4. Look up topic ACL from database/cache\n * 5. Check if actor has required permission (read/write)\n * 6. DENY if unauthorized\n *\n * @returns {Promise<SensorDecision>} ALLOW (stub implementation)\n */\n // run() executes only after supports() passes.\n // Return the actual ALLOW/DENY/FLAG/THROTTLE decision here.\n async run(): Promise<SensorDecision> {\n // TODO: Implement topic scope enforcement\n //\n // Full implementation would:\n // const { intent, packet, actorId } = input;\n //\n // if (!intent?.startsWith('stream.')) {\n // return { action: 'ALLOW' }; // Not a stream intent\n // }\n //\n // const topic = extractTopicFromBody(input.bodyTLVs);\n // const operation = intent === 'stream.publish' ? 'write' : 'read';\n //\n // const acl = await this.getTopicACL(topic);\n // if (!acl.allows(actorId, operation)) {\n // return {\n // action: 'DENY',\n // code: 'STREAM_UNAUTHORIZED',\n // reason: `No ${operation} access to ${topic}`\n // };\n // }\n\n return { action: 'ALLOW' };\n }\n}\n","import { Sensor } from \"../decorators/sensor.decorator\";\nimport { BAND } from \"../engine/sensor-bands\";\nimport type {\n AxisSensor,\n SensorDecision,\n SensorInput,\n} from \"../sensor/axis-sensor\";\n\n/**\n * A TickAuth capsule as provided by the transport layer\n * or extracted by an earlier sensor.\n */\nexport interface TickAuthCapsuleRef {\n capsule_id: string;\n capsule_type?: string;\n intent?: string;\n mode?: string;\n verification?: {\n status:\n | \"approved\"\n | \"denied\"\n | \"expired\"\n | \"replay_rejected\"\n | \"consumed\"\n | \"revoked\";\n reason?: string;\n };\n scope?: string[];\n single_use?: boolean;\n tick_index?: number;\n}\n\n/**\n * Pluggable TickAuth verifier.\n * Returns `null` if verification succeeds, or an error string if it fails.\n */\nexport type TickAuthVerifier = (\n capsule: TickAuthCapsuleRef,\n input: SensorInput,\n) => Promise<string | null> | (string | null);\n\n/**\n * Configuration for the TickAuth Sensor.\n */\nexport interface TickAuthSensorOptions {\n /**\n * Optional external verifier that performs full TickAuth handshake\n * validation (signature, window, replay).\n * If not provided the sensor performs structural checks only.\n */\n verifier?: TickAuthVerifier;\n\n /**\n * Whether to require the capsule intent to match the AXIS intent.\n * Defaults to true.\n */\n matchIntent?: boolean;\n\n /**\n * Accept these capsule types. If empty, all types are accepted.\n */\n acceptTypes?: string[];\n}\n\n/**\n * TickAuth Sensor — Validates TickAuth capsule handshake.\n *\n * Goes beyond `ProofPresenceSensor` (which only checks capsule *presence*)\n * to verify the capsule's structural integrity:\n *\n * 1. Capsule exists and has a valid ID\n * 2. Capsule status is 'approved'\n * 3. Capsule type is in the accept list (if configured)\n * 4. Capsule intent matches the AXIS intent (if matchIntent)\n * 5. External verifier (signature + replay + window) passes\n *\n * Runs in the IDENTITY band after proof-presence.\n */\n@Sensor()\nexport class TickAuthSensor implements AxisSensor {\n readonly name = \"TickAuthSensor\";\n readonly order = BAND.IDENTITY + 40; // after ProofPresenceSensor (30)\n\n private readonly verifier?: TickAuthVerifier;\n private readonly matchIntent: boolean;\n private readonly acceptTypes: Set<string> | null;\n\n constructor(options: TickAuthSensorOptions = {}) {\n this.verifier = options.verifier;\n this.matchIntent = options.matchIntent ?? true;\n this.acceptTypes = options.acceptTypes?.length\n ? new Set(options.acceptTypes)\n : null;\n }\n\n // supports() is a synchronous applicability gate.\n // Return false to skip this sensor without producing a denial.\n supports(input: SensorInput): boolean {\n // Only engage when a capsule reference is present\n return !!(\n input.metadata?.capsule ||\n input.metadata?.tickauthCapsule ||\n input.metadata?.cceEnvelope?.capsule\n );\n }\n\n // run() executes only after supports() passes.\n // Return the actual ALLOW/DENY/FLAG/THROTTLE decision here.\n async run(input: SensorInput): Promise<SensorDecision> {\n const capsule: TickAuthCapsuleRef | undefined =\n input.metadata?.capsule ??\n input.metadata?.tickauthCapsule ??\n input.metadata?.cceEnvelope?.capsule;\n\n if (!capsule) {\n return {\n allow: false,\n riskScore: 90,\n reasons: [\"TickAuth capsule not found\"],\n code: \"TICKAUTH_MISSING\",\n };\n }\n\n // 1. Structural: capsule_id must be present\n if (!capsule.capsule_id || typeof capsule.capsule_id !== \"string\") {\n return {\n allow: false,\n riskScore: 100,\n reasons: [\"TickAuth capsule has no valid capsule_id\"],\n code: \"TICKAUTH_INVALID_ID\",\n };\n }\n\n // 2. Status check\n const status = capsule.verification?.status;\n if (status && status !== \"approved\") {\n return {\n allow: false,\n riskScore: 100,\n reasons: [\n `TickAuth capsule status is '${status}'${capsule.verification?.reason ? `: ${capsule.verification.reason}` : \"\"}`,\n ],\n code: `TICKAUTH_STATUS_${status.toUpperCase()}`,\n };\n }\n\n // 3. Type filter\n if (this.acceptTypes && capsule.capsule_type) {\n if (!this.acceptTypes.has(capsule.capsule_type)) {\n return {\n allow: false,\n riskScore: 80,\n reasons: [\n `TickAuth capsule type '${capsule.capsule_type}' is not in accept list`,\n ],\n code: \"TICKAUTH_TYPE_REJECTED\",\n };\n }\n }\n\n // 4. Intent match\n if (this.matchIntent && input.intent && capsule.intent) {\n if (capsule.intent !== input.intent) {\n return {\n allow: false,\n riskScore: 80,\n reasons: [\n `TickAuth capsule intent '${capsule.intent}' does not match AXIS intent '${input.intent}'`,\n ],\n code: \"TICKAUTH_INTENT_MISMATCH\",\n };\n }\n }\n\n // 5. External verifier (full handshake: sig, window, replay)\n if (this.verifier) {\n const error = await this.verifier(capsule, input);\n if (error) {\n return {\n allow: false,\n riskScore: 90,\n reasons: [`TickAuth verification failed: ${error}`],\n code: \"TICKAUTH_VERIFY_FAILED\",\n };\n }\n }\n\n return {\n allow: true,\n riskScore: 0,\n reasons: [],\n tags: {\n tickauthCapsuleId: capsule.capsule_id,\n tickauthMode: capsule.mode,\n tickauthSingleUse: capsule.single_use,\n },\n };\n }\n}\n","import { Sensor } from \"../decorators/sensor.decorator\";\nimport { BAND } from \"../engine/sensor-bands\";\nimport { AxisSensor, SensorDecision, SensorInput } from \"../sensor/axis-sensor\";\nimport { decodeVarint } from \"../core/varint\";\n\n/**\n * TLV Parse AxisSensor - Type-Length-Value Parsing Verification\n *\n * Verifies that TLV data in packets is properly formed and follows\n * canonical ordering rules. Ensures binary payload integrity before\n * field extraction.\n *\n * **Execution Order:** 160 (after policy checks, before schema validation)\n *\n * Validates:\n * - TLV types are ascending (canonical ordering)\n * - No duplicate TLV types\n * - Length values are accurate (no buffer overrun)\n * - Varint encoding is minimal (no padding bytes)\n * - Tag values are > 0\n *\n * @class TLVParseSensor\n * @implements {AxisSensor}\n * @implements {OnModuleInit}\n */\n@Sensor()\nexport class TLVParseSensor implements AxisSensor {\n readonly name = \"TLVParseSensor\";\n readonly order = BAND.CONTENT + 20;\n\n // supports() is a synchronous applicability gate.\n // Return false to skip this sensor without producing a denial.\n supports(input: SensorInput): boolean {\n return !!input.packet;\n }\n\n // run() executes only after supports() passes.\n // Return the actual ALLOW/DENY/FLAG/THROTTLE decision here.\n async run(input: SensorInput): Promise<SensorDecision> {\n const packet = input.packet;\n if (!packet) return { action: \"ALLOW\" };\n\n // Validate header TLVs if raw header bytes are available\n const hdrBytes: Uint8Array | Buffer | undefined =\n packet.hdrBytes ?? packet.headerBytes;\n if (hdrBytes && hdrBytes.length > 0) {\n const result = this.validateCanonicalTLV(hdrBytes, \"header\");\n if (result) return result;\n }\n\n // Validate body TLVs if body is flagged as TLV-encoded\n const bodyBytes: Uint8Array | Buffer | undefined =\n packet.bodyBytes ?? input.body;\n const bodyIsTlv =\n packet.flags !== undefined ? (packet.flags & 0x01) !== 0 : false;\n\n // @Intent({ bodyProfile: 'RAW' }) explicitly skips body TLV validation\n const bodyProfile = input.metadata?.schema?.bodyProfile;\n const skipBody = bodyProfile === \"RAW\";\n\n if (!skipBody && bodyIsTlv && bodyBytes && bodyBytes.length > 0) {\n const result = this.validateCanonicalTLV(bodyBytes, \"body\");\n if (result) return result;\n }\n\n return { action: \"ALLOW\" };\n }\n\n /**\n * Validates a TLV buffer for canonical ordering, no duplicates,\n * valid bounds, and minimal varint encoding.\n */\n private validateCanonicalTLV(\n buf: Uint8Array,\n section: string,\n ): SensorDecision | null {\n let offset = 0;\n let lastType = -1;\n let count = 0;\n const maxItems = 512;\n\n while (offset < buf.length) {\n if (count >= maxItems) {\n return {\n action: \"DENY\",\n code: \"TLV_LIMIT\",\n reason: `Too many TLVs in ${section}`,\n };\n }\n\n // Decode TYPE varint\n let type: number;\n let typeLen: number;\n try {\n const r = decodeVarint(buf, offset);\n type = r.value;\n typeLen = r.length;\n } catch {\n return {\n action: \"DENY\",\n code: \"TLV_PARSE_ERROR\",\n reason: `Malformed type varint in ${section} at offset ${offset}`,\n };\n }\n offset += typeLen;\n\n // Tag must be > 0\n if (type <= 0) {\n return {\n action: \"DENY\",\n code: \"TLV_INVALID_TAG\",\n reason: `Invalid tag ${type} in ${section}`,\n };\n }\n\n // Canonical order: strictly ascending\n if (type <= lastType) {\n return {\n action: \"DENY\",\n code: \"TLV_NOT_CANONICAL\",\n reason: `Non-canonical tag order in ${section}: ${type} after ${lastType}`,\n };\n }\n lastType = type;\n\n // Decode LEN varint\n let len: number;\n let lenLen: number;\n try {\n const r = decodeVarint(buf, offset);\n len = r.value;\n lenLen = r.length;\n } catch {\n return {\n action: \"DENY\",\n code: \"TLV_PARSE_ERROR\",\n reason: `Malformed length varint in ${section}`,\n };\n }\n offset += lenLen;\n\n // Bounds check\n if (offset + len > buf.length) {\n return {\n action: \"DENY\",\n code: \"TLV_TRUNCATED\",\n reason: `TLV value truncated in ${section}`,\n };\n }\n\n offset += len;\n count++;\n }\n\n return null; // Valid\n }\n}\n","import { Sensor } from \"../decorators/sensor.decorator\";\nimport { BAND } from \"../engine/sensor-bands\";\nimport type {\n AxisSensor,\n SensorDecision,\n SensorInput,\n} from \"../sensor/axis-sensor\";\n\n/**\n * Configuration for the TPS Sensor.\n */\nexport interface TpsSensorOptions {\n /**\n * Maximum allowed clock drift in milliseconds between\n * the TPS coordinate timestamp and server time.\n * Defaults to 30_000 (30 seconds).\n */\n maxDriftMs?: number;\n\n /**\n * Optional function to resolve a TPS coordinate string\n * into a UTC epoch milliseconds value.\n * If not provided, the sensor parses i-notation directly.\n */\n resolver?: (tps: string) => number | null;\n}\n\n/** TPS epoch: 1999-08-11T07:00:00Z in milliseconds */\nconst TPS_EPOCH_MS = 934354800000;\n\n/**\n * Parse a TPS i-notation coordinate (e.g. 'i858993459200.000')\n * into a UTC epoch milliseconds value.\n */\nfunction parseINotation(tps: string): number | null {\n if (!tps.startsWith(\"i\")) return null;\n const num = Number(tps.slice(1));\n if (!Number.isFinite(num)) return null;\n // i-notation is milliseconds since TPS epoch\n return TPS_EPOCH_MS + num;\n}\n\n/**\n * TPS Sensor — Temporal Positioning System time gate.\n *\n * Validates that the TPS coordinate attached to a request\n * is structurally valid and not excessively drifted from\n * the server's current time (guards against replay and\n * future-dated requests).\n *\n * Sensor rules:\n * - If no TPS coordinate is present, the sensor allows (other sensors gate identity).\n * - If the TPS coordinate is structurally invalid, DENY.\n * - If the resolved timestamp drifts beyond maxDriftMs, DENY.\n */\n@Sensor()\nexport class TpsSensor implements AxisSensor {\n readonly name = \"TpsSensor\";\n readonly order = BAND.POLICY + 2; // runs early in POLICY band, before Law\n\n private readonly maxDriftMs: number;\n private readonly resolver: (tps: string) => number | null;\n\n constructor(options: TpsSensorOptions = {}) {\n this.maxDriftMs = options.maxDriftMs ?? 30_000;\n this.resolver = options.resolver ?? parseINotation;\n }\n\n // supports() is a synchronous applicability gate.\n // Return false to skip this sensor without producing a denial.\n supports(input: SensorInput): boolean {\n // Only run when a TPS coordinate is present\n const tps =\n input.metadata?.tps_coordinate ??\n input.metadata?.tps ??\n input.packet?.tps;\n return typeof tps === \"string\" && tps.length > 0;\n }\n\n // run() executes only after supports() passes.\n // Return the actual ALLOW/DENY/FLAG/THROTTLE decision here.\n async run(input: SensorInput): Promise<SensorDecision> {\n const tps: string =\n input.metadata?.tps_coordinate ??\n input.metadata?.tps ??\n input.packet?.tps;\n\n // Resolve to UTC ms\n const resolved = this.resolver(tps);\n\n if (resolved === null) {\n return {\n allow: false,\n riskScore: 80,\n reasons: [`TPS coordinate '${tps}' is structurally invalid`],\n code: \"TPS_INVALID_FORMAT\",\n };\n }\n\n // Check drift\n const now = Date.now();\n const drift = Math.abs(now - resolved);\n\n if (drift > this.maxDriftMs) {\n const direction = resolved > now ? \"future\" : \"past\";\n return {\n allow: false,\n riskScore: 70,\n reasons: [\n `TPS drift ${drift}ms exceeds max ${this.maxDriftMs}ms (${direction})`,\n ],\n code: \"TPS_DRIFT_EXCEEDED\",\n tags: { tpsDriftMs: drift, tpsDirection: direction },\n };\n }\n\n return {\n allow: true,\n riskScore: 0,\n reasons: [],\n tags: {\n tpsResolved: resolved,\n tpsDriftMs: drift,\n },\n };\n }\n}\n","import { Sensor } from \"../decorators/sensor.decorator\";\nimport { BAND } from \"../engine/sensor-bands\";\nimport { AxisSensor, SensorDecision, SensorInput } from \"../sensor/axis-sensor\";\n\n/**\n * Varint Hardening Sensor - Variable-Length Integer Overflow Protection\n *\n * Detects and blocks malicious varint values that could cause integer overflow\n * or excessive memory allocation. Varints in AXIS frames encode lengths and types.\n *\n * **Execution Order:** 40 (early, before length-based parsing)\n *\n * **Core Concept:**\n * AXIS uses variable-length integers (varints) to encode:\n * - Header length\n * - Body length\n * - Signature length\n * - TLV types and lengths\n *\n * Varints use a continuation bit (MSB) to indicate more bytes follow.\n * An attacker could send an extremely long varint (many continuation bytes)\n * to cause:\n * - Integer overflow\n * - Excessive parsing time\n * - Memory exhaustion\n *\n * **Varint Format:**\n * ```\n * Each byte: [1-bit continuation][7-bit data]\n *\n * Examples:\n * 127 = 0x7F (1 byte)\n * 128 = 0x80 0x01 (2 bytes)\n * 16384 = 0x80 0x80 0x01 (3 bytes)\n * ```\n *\n * **Limit:** Maximum 5 bytes per varint\n * - 5 bytes = 35 bits of data = max value ~34 billion\n * - Sufficient for any legitimate length in AXIS\n *\n * **How It Works:**\n * ```\n * 1. Skip to varint start (offset 7: after magic+version+flags)\n * 2. Count consecutive bytes with MSB set (continuation bit)\n * 3. If count > 5, reject frame\n * ```\n *\n * **Security Model:**\n * - **Fail Closed:** Overflow = DENY\n * - **Early Detection:** Before full parsing\n * - **Low Cost:** Simple bit check\n *\n * **Actions:**\n * - `ALLOW` - Varint within bounds\n * - `DENY` - Varint exceeds 5 bytes\n *\n * **Error Codes:**\n * - `VARINT_OVERFLOW` - Varint exceeds maximum length\n *\n * **Performance:**\n * - Bit masking: O(1) per byte\n * - Maximum 15 bytes checked\n * - Latency: <0.1ms\n *\n * @class VarintHardeningSensor\n * @implements {AxisSensor}\n * @implements {OnModuleInit}\n *\n * @example\n * Valid varint:\n * ```typescript\n * // Length 16384 encoded as 0x80 0x80 0x01 (3 bytes)\n * { action: 'ALLOW' }\n * ```\n *\n * @example\n * Overflow attack:\n * ```typescript\n * // 6 bytes with continuation bits set\n * {\n * action: 'DENY',\n * code: 'VARINT_OVERFLOW',\n * reason: 'Varint exceeds 5 bytes'\n * }\n * ```\n *\n * @see {@link BodyBudgetSensor} - Uses varints for length parsing\n */\n@Sensor({ phase: \"PRE_DECODE\" })\nexport class VarintHardeningSensor implements AxisSensor {\n /** Sensor identifier */\n readonly name = \"VarintHardeningSensor\";\n\n /**\n * Execution order - early detection\n *\n * Order 40 ensures:\n * - After protocol magic check\n * - Before length-based parsing\n */\n readonly order = BAND.WIRE + 35;\n\n /** Maximum allowed bytes for a single varint */\n private readonly MAX_VARINT_BYTES = 5;\n\n /**\n * Determines if this sensor should process the given input.\n *\n * Requires at least 7 bytes of peeked data.\n *\n * @param {SensorInput} input - Incoming request\n * @returns {boolean} True if sufficient peek data\n */\n // supports() is a synchronous applicability gate.\n // Return false to skip this sensor without producing a denial.\n supports(input: SensorInput): boolean {\n return !!input.peek && input.peek.length >= 7;\n }\n\n /**\n * Validates varint lengths in frame header.\n *\n * **Processing Flow:**\n * 1. Skip to varint section (offset 7)\n * 2. Scan for continuation bytes (MSB = 1)\n * 3. Count consecutive continuation bytes\n * 4. DENY if count exceeds MAX_VARINT_BYTES\n *\n * @param {SensorInput} input - Request with peek data\n * @returns {Promise<SensorDecision>} ALLOW or DENY based on varint length\n */\n // run() executes only after supports() passes.\n // Return the actual ALLOW/DENY/FLAG/THROTTLE decision here.\n async run(input: SensorInput): Promise<SensorDecision> {\n // After magic(5) + version(1) + flags(1), varints follow for hdrLen, bodyLen, sigLen\n const peek = input.peek!;\n const offset = 7;\n const maxOffset = Math.min(offset + 15, peek.length);\n\n // Count consecutive bytes with continuation bit set (MSB = 1)\n let continuationCount = 0;\n for (let i = offset; i < maxOffset; i++) {\n if ((peek[i] & 0x80) !== 0) {\n continuationCount++;\n if (continuationCount > this.MAX_VARINT_BYTES) {\n return {\n action: \"DENY\",\n code: \"VARINT_OVERFLOW\",\n reason: `Varint exceeds ${this.MAX_VARINT_BYTES} bytes`,\n };\n }\n } else {\n // End of current varint - reset for next\n continuationCount = 0;\n }\n }\n\n return { action: \"ALLOW\" };\n }\n}\n","export * from './access-profile-resolver.sensor';\nexport * from './body-budget.sensor';\nexport * from './capability-enforcement.sensor';\nexport * from './chunk-hash.sensor';\nexport * from './entropy.sensor';\nexport * from './execution-timeout.sensor';\nexport * from './frame-budget.sensor';\nexport * from './frame-header-sanity.sensor';\nexport * from './header-tlv-limit.sensor';\nexport * from './intent-allowlist.sensor';\nexport * from './intent-registry.sensor';\nexport * from './law-article-presence.sensor';\nexport * from './law-evaluation.sensor';\nexport * from './proof-presence.sensor';\nexport * from './protocol-strict.sensor';\nexport * from './receipt-policy.sensor';\nexport * from './risk-gate.sensor';\nexport * from './schema-validation.sensor';\nexport * from './stream-scope.sensor';\nexport * from './tickauth.sensor';\nexport * from './tlv-parse.sensor';\nexport * from './tps.sensor';\nexport * from './varint-hardening.sensor';\n","// Decorators\nexport { Chain, CHAIN_METADATA_KEY } from \"./decorators/chain.decorator\";\nexport {\n CapsulePolicy,\n CAPSULE_POLICY_METADATA_KEY,\n} from \"./decorators/capsule-policy.decorator\";\nexport {\n Axis,\n AXIS_META_KEY,\n AxisStream,\n AXIS_STREAM_META_KEY,\n AxisPublic,\n AXIS_PUBLIC_KEY,\n AxisAnonymous,\n AXIS_ANONYMOUS_KEY,\n AxisAuthorized,\n AXIS_AUTHORIZED_KEY,\n AxisRateLimit,\n AXIS_RATE_LIMIT_KEY,\n Sensitivity,\n SENSITIVITY_METADATA_KEY,\n Contract,\n CONTRACT_METADATA_KEY,\n RequiredProof,\n REQUIRED_PROOF_METADATA_KEY,\n Capsule,\n Witness,\n} from \"./decorators/intent-policy.decorator\";\nexport type {\n RequiredProofKind,\n AxisRateLimitConfig,\n AxisStreamOptions,\n} from \"./decorators/intent-policy.decorator\";\nexport { Handler, HANDLER_METADATA_KEY } from \"./decorators/handler.decorator\";\nexport type { HandlerOptions } from \"./decorators/handler.decorator\";\nexport {\n Intent,\n INTENT_METADATA_KEY,\n INTENT_ROUTES_KEY,\n AxisIntentSensorBindingOptions,\n AxisIntentSensorBinding,\n AxisIntentSensorBindingInput,\n AxisIntentSensorOptions,\n AxisIntentSensorRef,\n AxisIntentSensorWhen,\n IntentRoute,\n IntentOptions,\n IntentTlvField,\n IntentKind,\n toIntentSensorBinding,\n} from \"./decorators/intent.decorator\";\nexport {\n IntentBody,\n INTENT_BODY_KEY,\n} from \"./decorators/intent-body.decorator\";\nexport {\n IntentSensors,\n INTENT_SENSORS_KEY,\n} from \"./decorators/intent-sensors.decorator\";\nexport {\n Observer,\n OBSERVER_BINDINGS_KEY,\n OBSERVER_METADATA_KEY,\n} from \"./decorators/observer.decorator\";\nexport type {\n CapsulePolicyOptions,\n CapsuleScopeMode,\n} from \"./decorators/capsule-policy.decorator\";\nexport type {\n AxisObserverBinding,\n AxisObserverBindingInput,\n AxisObserverBindingOptions,\n AxisObserverDefinition,\n AxisObserverRef,\n} from \"./decorators/observer.decorator\";\nexport { toObserverBinding } from \"./decorators/observer.decorator\";\nexport {\n HandlerSensors,\n HANDLER_SENSORS_KEY,\n} from \"./decorators/handler-sensors.decorator\";\nexport { Sensor, SENSOR_METADATA_KEY } from \"./decorators/sensor.decorator\";\nexport type { SensorOptions, SensorPhase } from \"./decorators/sensor.decorator\";\n\n// TLV Field Decorators\nexport {\n TlvField,\n TlvValidate,\n TlvUtf8Pattern,\n TlvMinLen,\n TlvEnum,\n TlvRange,\n TLV_FIELDS_KEY,\n TLV_VALIDATORS_KEY,\n} from \"./decorators/tlv-field.decorator\";\nexport type {\n TlvFieldKind,\n TlvFieldOptions,\n TlvFieldMeta,\n TlvValidatorFn,\n TlvValidatorMeta,\n} from \"./decorators/tlv-field.decorator\";\n\n// DTO Schema Utilities\nexport {\n extractDtoSchema,\n buildDtoDecoder,\n} from \"./decorators/dto-schema.util\";\nexport type { DtoSchema } from \"./decorators/dto-schema.util\";\n\n// Base DTO Classes\nexport { AxisTlvDto } from \"./base/axis-tlv.dto\";\nexport { AxisIdDto } from \"./base/axis-id.dto\";\nexport { AxisPartialType } from \"./base/axis-partial-type\";\nexport {\n AxisResponseDto,\n RESPONSE_TAG_ID,\n RESPONSE_TAG_CREATED_AT,\n RESPONSE_TAG_UPDATED_AT,\n RESPONSE_TAG_CREATED_BY,\n RESPONSE_TAG_UPDATED_BY,\n} from \"./base/axis-response.dto\";\n\n// Engine\nexport { AxisChainExecutor } from \"./engine/axis-chain.executor\";\nexport type {\n AxisCapsuleRef,\n AxisChainEnvelope,\n AxisChainEncryption,\n AxisChainRequest,\n AxisChainResult,\n AxisChainStatus,\n AxisChainStep,\n AxisChainStepResult,\n AxisChainStepStatus,\n AxisExecutionMode,\n AxisIntentEnvelope,\n AxisKeyExchangeRef,\n AxisObserverEvent,\n ChainOptions,\n RegisteredChainConfig,\n} from \"./engine/axis-chain.types\";\nexport type { AxisExecutionContext } from \"./engine/axis-execution-context\";\nexport {\n AXIS_EXECUTION_CONTEXT_KEY,\n getAxisExecutionContext,\n mergeAxisExecutionContext,\n withAxisExecutionContext,\n} from \"./engine/axis-execution-context\";\nexport type {\n AxisIntentObserver,\n AxisObserverContext,\n AxisObserverRegistration,\n} from \"./engine/axis-observer.interface\";\nexport { IntentRouter, AxisEffect } from \"./engine/intent.router\";\nexport { BAND, PRE_DECODE_BOUNDARY } from \"./engine/sensor-bands\";\nexport type { SensorBand } from \"./engine/sensor-bands\";\n\n// Observation (protocol-level observation pipeline)\nexport { stableJsonStringify } from \"./engine/observation/stable-json\";\nexport type {\n ObservationQueueMessage,\n ObservationQueueConfig,\n} from \"./engine/observation/observation-queue.types\";\nexport {\n buildQueueMessage,\n encodeQueueMessage,\n decodeQueueMessage,\n parseStreamEntries,\n parseAutoClaimEntries,\n} from \"./engine/observation/observation-queue.codec\";\nexport type { ObservationStreamEntry } from \"./engine/observation/observation-queue.codec\";\nexport {\n canonicalizeObservation,\n hashObservation,\n buildUnsignedWitness,\n} from \"./engine/observation/observation-hash\";\nexport type {\n ObservationWitnessSummary,\n UnsignedObservationWitness,\n} from \"./engine/observation/observation-hash\";\nexport {\n scoreTruth,\n verifyObservation,\n} from \"./engine/observation/truth-scoring\";\nexport type {\n TruthStatus,\n TruthVerdict,\n ExpectedOutcome,\n Anomaly,\n AnomalyLevel,\n ObservedDeed,\n} from \"./engine/observation/truth-scoring\";\nexport {\n verifyResponse,\n ResponseObserver,\n} from \"./engine/observation/response-observer\";\nexport type {\n ResponseObserverContext,\n ResponseContract,\n ObserverVerdict,\n} from \"./engine/observation/response-observer\";\n\n// Core Protocol\nexport * from \"./core/constants\";\nexport * from \"./core/varint\";\nexport * from \"./core/tlv\";\nexport * from \"./core/signature\";\nexport {\n AxisFrameZ,\n decodeFrame,\n encodeFrame,\n getSignTarget,\n} from \"./core/axis-bin\";\nexport type { AxisFrame, AxisBinaryFrame } from \"./core/axis-bin\";\n\n// Codec\nexport * from \"./codec/ats1.constants\";\nexport * from \"./codec/ats1.passkey.schemas\";\nexport * as Ats1Codec from \"./codec/ats1\";\nexport * from \"./codec/axis1.encode\";\nexport * from \"./codec/axis1.signing\";\nexport * from \"./codec/tlv.encode\";\n\n// Crypto Utilities\nexport * from \"./crypto/b64url\";\nexport * from \"./crypto/canonical-json\";\nexport type {\n AxisAlg,\n AxisCapsule,\n CapsuleMode,\n KeyStatus,\n AxisSig,\n AxisPacket,\n AxisCapsuleConstraints,\n AxisCapsulePayload,\n} from \"./crypto/types\";\n\n// Contract Utilities\nexport * from \"./contract/execution-meter\";\nexport * from \"./contract/contract.interface\";\n\n// Packet and Sensor Types\nexport { Axis1DecodedFrame, decodeAxis1Frame } from \"./types/frame\";\nexport {\n AxisPacket as AxisBinaryPacket,\n T as AxisPacketTags,\n buildPacket,\n} from \"./types/packet\";\nexport type {\n AxisObservedContext,\n AxisRequestContext,\n} from \"./types/axis-frame.types\";\nexport type { TLV as AxisTlvType } from \"./core/tlv\";\nexport {\n Decision,\n normalizeSensorDecision,\n SensorDecisions,\n} from \"./sensor/axis-sensor\";\nexport type {\n AxisSensor,\n AxisSensorInit,\n AxisPreSensor,\n AxisPostSensor,\n SensorPhaseMetadata,\n SensorInput,\n SensorDecision,\n SensorMinifiedDecision,\n} from \"./sensor/axis-sensor\";\n\n// Interfaces\nexport {\n AxisHandler,\n AxisHandlerInit,\n} from \"./interfaces/axis-handler.interface\";\nexport { AxisCrudHandler } from \"./interfaces/axis-crud-handler.interface\";\n\n// Security\nexport * from \"./security/scopes\";\nexport * from \"./security/capabilities\";\nexport { ProofVerificationService } from \"./crypto/proof-verification.service\";\nexport type {\n DeviceSEContext,\n MTLSContext,\n ProofType,\n ProofVerificationResult,\n} from \"./crypto/proof-verification.service\";\nexport {\n BodyProfile,\n BodyProfileValidator,\n} from \"./schemas/body-profile.validator\";\nexport type { BodyProfileValidation } from \"./schemas/body-profile.validator\";\n\n// Law\nexport * from \"./law\";\n\n// Risk\nexport * from \"./risk/index\";\n\n// Core: Opcode Registry\nexport * from \"./core/opcodes\";\n\n// Core: Receipt Hash\nexport * from \"./core/receipt\";\n\n// Core: Intent Sensitivity\nexport * from \"./core/intent-sensitivity\";\n\n// Core: Timeouts\nexport * from \"./core/timeouts\";\n\n// Types: Intent Definitions\nexport type { IntentDefinition } from \"./types/intent-definition\";\n\n// Frame Validation\nexport { validateFrameShape, isTimestampValid } from \"./core/frame-validator\";\n\n// Types: JSON-level Frame Types\nexport type {\n AxisFrame as AxisJsonFrame,\n AxisResponse as AxisJsonResponse,\n AxisSig as AxisJsonSig,\n AxisAlg as AxisJsonAlg,\n} from \"./types/axis-frame.types\";\n\n// Upload stores and tokens\nexport {\n AXIS_UPLOAD_FILE_STORE,\n AXIS_UPLOAD_RECEIPT_SIGNER,\n AXIS_UPLOAD_SESSION_STORE,\n} from \"./upload/upload.tokens\";\nexport type {\n UploadFileStore,\n UploadFileStat,\n UploadReceiptSigner,\n UploadSessionRecord,\n UploadSessionStatus,\n UploadSessionStore,\n} from \"./upload/upload.types\";\nexport { DiskUploadFileStore } from \"./upload/disk-upload-file.store\";\n\n// Types\n\n// Additional root exports for import ergonomics\nexport { AxisError } from \"./core/axis-error\";\nexport { ObserverDispatcherService } from \"./engine/observer-dispatcher.service\";\nexport { ObserverRegistry } from \"./engine/registry/observer.registry\";\nexport { SensorRegistry } from \"./engine/registry/sensor.registry\";\nexport type { AxisDecoded } from \"./engine/axis-decoded\";\nexport {\n createObservation,\n startStage,\n endStage,\n recordSensor,\n finalizeObservation,\n} from \"./engine/axis-observation\";\nexport type {\n AxisObservation,\n ObservationSensor,\n ObservationStage,\n} from \"./engine/axis-observation\";\nexport { AxisSensorChainService } from \"./security/axis-sensor-chain.service\";\nexport type { ChainResult } from \"./security/axis-sensor-chain.service\";\n\n// Timeline Engine\nexport { TimelineEngine } from \"./timeline/timeline.engine\";\nexport { InMemoryTimelineStore } from \"./timeline/timeline.store\";\nexport type { TimelineStore } from \"./timeline/timeline.store\";\nexport type {\n TimelineEvent,\n TimelineBranch,\n TimelineDomain,\n TimelineEventStatus,\n StateSnapshot,\n ReplayRequest,\n ReplayResult,\n ReplayDifference,\n ForkRequest,\n ForkResult,\n SimulationRequest,\n SimulationResult,\n SimulatedSideEffect,\n TimelineComparison,\n TimelineHandler,\n TimelineHandlerContext,\n TimelineHandlerResult,\n} from \"./timeline/timeline.types\";\n\n// CCE — Capsule-Carried Encryption\nexport { executeCcePipeline } from \"./cce/cce-pipeline\";\nexport type {\n CceHandler,\n CceHandlerContext,\n CceHandlerResult,\n CcePolicyContext,\n CcePolicyDecision,\n CcePolicyEvaluator,\n CcePipelineConfig,\n CcePipelineResult,\n} from \"./cce/cce-pipeline\";\nexport { CCE_PROTOCOL_VERSION, CCE_ERROR, CceError } from \"./cce/cce.types\";\nexport type {\n CceCapsuleClaims as CceCapsuleClaimsType,\n CceRequestEnvelope as CceRequestEnvelopeType,\n CceResponseEnvelope as CceResponseEnvelopeType,\n CceExecutionContext as CceExecutionContextType,\n CceWitnessRecord as CceWitnessRecordType,\n} from \"./cce/cce.types\";\n\n// Utils\nexport { encodeAxisTlvDto } from \"./utils/axis-tlv-codec\";\n\n// Loom runtime helpers and types\nexport {\n TLV_PRESENCE_ID,\n TLV_WRIT,\n TLV_THREAD_HASH,\n deriveAnchorReflection,\n canonicalizeWrit,\n canonicalizeGrant,\n} from \"./loom/loom.types\";\nexport {\n createPresenceChallenge,\n signPresenceChallenge,\n verifyPresenceProof,\n getPresenceStatus,\n renewPresence,\n createWrit,\n validateWrit,\n grantCoversAction,\n getGrantStatus,\n validateGrant,\n createGrant,\n createReceipt,\n verifyReceiptChain,\n updateThreadState,\n createRevocation,\n isRevoked,\n executeLoomPipeline,\n} from \"./loom/loom.engine\";\nexport type { LoomExecutionResult } from \"./loom/loom.engine\";\nexport type {\n PresenceDeclaration,\n PresenceChallenge,\n PresenceProof,\n PresenceReceipt,\n PresenceStatus,\n WritHead,\n WritBody,\n WritMeta,\n WritSignature,\n Writ,\n GrantType,\n GrantCapability,\n GrantMeta,\n Grant,\n GrantStatus,\n LoomReceipt,\n ThreadState,\n RevocationTargetType,\n Revocation,\n LoomValidationResult,\n PresenceVerifyResult,\n WritValidationResult,\n GrantValidationResult,\n} from \"./loom/loom.types\";\n\n// IDEL — Intent Description & Execution Language\nexport { IdelSchemaRegistry, IdelCompiler } from \"./idel/idel.compiler\";\nexport type {\n IntentProposal,\n CompiledIntent,\n IntentConstraint,\n ConstraintKind,\n AlternativeIntent,\n ClarificationQuestion,\n IntentRisk,\n RiskLevel,\n IntentSchema,\n IntentParamSchema,\n CompilationResult,\n CompilationError,\n} from \"./idel/idel.types\";\n\n// Needle & Thread — Unified execution pipeline\nexport {\n assembleNeedle,\n formStitch,\n runNeedlePipeline,\n} from \"./needle/needle.engine\";\nexport type {\n Needle,\n NeedlePhase,\n NeedleError,\n NeedleHandler,\n NeedleHandlerContext,\n NeedleHandlerResult,\n NeedlePipelineConfig,\n NeedlePipelineResult,\n Stitch,\n StitchKind,\n Thread,\n} from \"./needle/needle.types\";\n\n// Knot — Critical binding points in the Thread\nexport {\n openKnot,\n addStitchToKnot,\n validateKnot,\n tieKnot,\n breakKnot,\n forkFromKnot,\n isKnotOpen,\n isPointOfNoReturn,\n findKnotsForStitch,\n getIrreversibleKnots,\n getDecisionPoints,\n} from \"./needle/knot.engine\";\nexport type {\n KnotType,\n KnotStatus,\n Knot,\n KnotValidationResult,\n KnotError,\n KnotBreakRequest,\n} from \"./needle/knot.types\";\n\n// Fabric — State-space projection from woven Stitches\nexport {\n createFabric,\n applyStitch,\n weave,\n projectAt,\n lockCells,\n queryFabric,\n getFabricValue,\n diffFabrics,\n} from \"./needle/fabric.engine\";\nexport type {\n FabricCell,\n Fabric,\n FabricEffect,\n FabricEffectResolver,\n FabricDiff,\n FabricDiffEntry,\n FabricDiffKind,\n FabricQuery,\n} from \"./needle/fabric.types\";\n\n// Pattern — Recurring structure detection\nexport {\n InMemoryPatternStore,\n detectSequencePatterns,\n detectKnotPatterns,\n matchPatterns,\n recordOccurrence,\n detectAnomalies,\n} from \"./needle/pattern.engine\";\nexport type {\n PatternKind,\n Pattern,\n PatternSignature,\n PatternMatch,\n PatternPrediction,\n PatternStore,\n PatternConfidence,\n} from \"./needle/pattern.types\";\n\n// Sensors — Reality gates (all sensors exported from barrel)\nexport * from \"./sensors/index\";\n\n// Grouped namespaces were previously exported (`export * as cce`, etc.) but\n// all named exports above already cover the public surface used by consumers.\n// Grouped namespace re-exports removed to slim the bundle; import submodules\n// directly via `@nextera.one/axis-server-sdk/<path>` sub-paths if needed.\n"],"mappings":"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V,cAAM,IAAI;AACV,cAAM,IAAI;AACV,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,YAAI,EAAE,CAAC;AACP,cAAM,IAAI;AACV,cAAM,IAAI;AACV,cAAM,IAAI;AACV,cAAM,IAAI;AACV,cAAM,IAAI;AACV,cAAM,IAAI;AACV,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,YAAI,EAAE,CAAC;AACP,cAAM,IAAI;AACV,cAAM,IAAI;AACV,cAAM,IAAI;AACV,cAAM,IAAI;AACV,cAAM,IAAI;AACV,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,YAAI,EAAE,CAAC;AACP,cAAM,IAAI;AACV,cAAM,IAAI;AACV,cAAM,IAAI;AACV,cAAM,IAAI;AACV,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,YAAI,EAAE,CAAC;AACP,cAAM,IAAI;AACV,cAAM,IAAI;AACV,cAAM,IAAI;AACV,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAAI;AACX,eAAO,IAA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AA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qBAAAC;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gBAAAC;AAAA,EAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAoFAC,mBAmBAC,oBAQA,gBAEA;AAjHA;AAAA;AACA;AACA;AAIA;AA2BA;AAEA;AAgBA;AAIA;AAIA;AAgBA;AACA;AAIA;AAIA,IAAAD,oBASO;AAUP,IAAAC,qBAGO;AAIP;AACA,qBAA0B;AAC1B;AACA,2BAOO;AAGP;AAmBA;AAWA;AACA;AAIA;AAKA;AAQA;AASA;AAYA;AAWA;AACA;AACA;AACA;AACA;AASA;AACA;AACA;AACA;AACA;AACA;AAGA;AACA;AAaA;AACA;AAGA;AACA;AAUA;AAwBA;AACA;AACA;AAOA;AAOA;AAGA;AAGA;AAGA;AAGA;AAGA;AAMA;AAWA;AAaA;AAKA;AACA;AACA;AACA;AAEA;AAYA;AAIA;AACA;AAuBA;AAWA;AAUA;AAGA;AAQA;AA+CA;AAiBA;AAoBA;AAuBA;AAsBA;AAmBA;AAAA,8BAAc,iBAxjBd;AAAA;AAAA;","names":["import_reflect_metadata","import_reflect_metadata","import_reflect_metadata","existing","import_reflect_metadata","import_reflect_metadata","import_reflect_metadata","import_reflect_metadata","import_reflect_metadata","import_reflect_metadata","exports","TlvField","TlvValidate","TlvUtf8Pattern","TlvMinLen","TlvEnum","TlvRange","exports","extractDtoSchema","buildDtoDecoder","tlvMap","AxisIdDto","exports","import_reflect_metadata","exports","AxisResponseDto","import_axis_protocol","path","path","Decision","bytes","import_utils","import_sha2","import_crypto","bytes","import_utils","import_crypto","hexToBytes","bytes","import_utils","import_hkdf","import_sha2","verification","witness","handlerDuration","import_reflect_metadata","import_axis_protocol","AxisChainExecutor","bytes","normalize","schema","map","import_crypto","import_axis_protocol","import_axis_protocol","sha256","crypto","sha256","import_crypto","sha256","import_crypto","import_axis_protocol","MAGIC","import_axis_protocol","init_tlv","MAGIC","import_axis_protocol","init_tlv","init_tlv","exports","module","nacl","z","bytes","crypto","crypto","BodyProfile","tlv","RiskDecision","import_crypto","IntentSensitivity","observerRefKey","import_crypto","sha256","hashPayload","import_crypto","sha256","bytes","import_crypto","import_crypto","import_crypto","import_crypto","import_crypto","exports","exports","exports","TLV_SHA256_CHUNK","exports","crypto","exports","exports","exports","exports","exports","exports","exports","exports","exports","ProofType","z","exports","exports","exports","exports","map","exports","exports","exports","exports","exports","exports","BodyProfile","sha256","import_tlv_field","import_dto_schema"]}
|