@kya-os/checkpoint-wasm-runtime 1.0.0 → 1.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (47) hide show
  1. package/CHANGELOG.md +166 -0
  2. package/dist/adapters.js +0 -2
  3. package/dist/adapters.mjs +0 -2
  4. package/dist/edge.js +0 -2
  5. package/dist/edge.mjs +0 -2
  6. package/dist/engine-edge.js +0 -2
  7. package/dist/engine-edge.mjs +0 -2
  8. package/dist/engine.js +447 -4
  9. package/dist/engine.mjs +447 -4
  10. package/dist/index.js +0 -2
  11. package/dist/index.mjs +0 -2
  12. package/dist/kya_os_engine_bg.wasm +0 -0
  13. package/dist/node.js +0 -2
  14. package/dist/node.mjs +0 -2
  15. package/dist/orchestrator-edge.d.mts +5 -199
  16. package/dist/orchestrator-edge.d.ts +5 -199
  17. package/dist/orchestrator-edge.js +0 -2
  18. package/dist/orchestrator-edge.mjs +0 -2
  19. package/dist/orchestrator-node.d.mts +49 -0
  20. package/dist/orchestrator-node.d.ts +49 -0
  21. package/dist/orchestrator-node.js +992 -0
  22. package/dist/orchestrator-node.mjs +983 -0
  23. package/dist/orchestrator.d.mts +4 -47
  24. package/dist/orchestrator.d.ts +4 -47
  25. package/dist/orchestrator.js +448 -8
  26. package/dist/orchestrator.mjs +448 -8
  27. package/dist/render-decision-C1a-iuiW.d.mts +200 -0
  28. package/dist/render-decision-Dsjwt96g.d.ts +200 -0
  29. package/package.json +14 -2
  30. package/wasm/kya-os-engine/package.json +7 -0
  31. package/wasm/kya-os-engine-web/package.json +7 -0
  32. package/dist/adapters.js.map +0 -1
  33. package/dist/adapters.mjs.map +0 -1
  34. package/dist/edge.js.map +0 -1
  35. package/dist/edge.mjs.map +0 -1
  36. package/dist/engine-edge.js.map +0 -1
  37. package/dist/engine-edge.mjs.map +0 -1
  38. package/dist/engine.js.map +0 -1
  39. package/dist/engine.mjs.map +0 -1
  40. package/dist/index.js.map +0 -1
  41. package/dist/index.mjs.map +0 -1
  42. package/dist/node.js.map +0 -1
  43. package/dist/node.mjs.map +0 -1
  44. package/dist/orchestrator-edge.js.map +0 -1
  45. package/dist/orchestrator-edge.mjs.map +0 -1
  46. package/dist/orchestrator.js.map +0 -1
  47. package/dist/orchestrator.mjs.map +0 -1
package/dist/node.mjs.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/types.ts","../src/wasm-detector.ts","../src/loaders/dynamic-loader.ts","../src/policy/policy-loader.ts","../src/fallback/rules-detector.ts","../src/node.ts"],"names":["fs","exports"],"mappings":"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","file":"node.mjs","sourcesContent":["/**\n * AgentShield WASM Runtime Types\n *\n * Core interfaces following SOLID principles:\n * - Interface Segregation: Small, focused interfaces\n * - Dependency Inversion: Depend on abstractions\n */\n\n/**\n * Detection input - information about the request to analyze\n */\nexport interface IDetectionInput {\n /** User-Agent header value */\n userAgent?: string;\n /** Client IP address */\n ipAddress?: string;\n /** All request headers */\n headers: Record<string, string>;\n /** Request URL path */\n url?: string;\n /** HTTP method (GET, POST, etc.) */\n method?: string;\n /** Client fingerprint data (for browser detection) */\n clientFingerprint?: string;\n /** Request timestamp */\n timestamp?: Date;\n}\n\n/**\n * Verification method used to detect the agent\n */\nexport type VerificationMethod =\n | 'signature' // Cryptographic signature verification (highest confidence)\n | 'pattern' // User-agent or header pattern matching\n | 'behavioral' // Behavioral analysis\n | 'network' // Network/IP-based detection\n | 'mcp_i_handshake' // MCP-I protocol handshake\n | 'none'; // No verification method\n\n/**\n * Detection class - categorization of the detected entity\n */\nexport type DetectionClass =\n | { type: 'Human' }\n | { type: 'AiAgent'; agentType: string }\n | { type: 'Bot'; botType?: string }\n | { type: 'Automation'; toolType?: string }\n | { type: 'Unknown' };\n\n/**\n * Forgeability risk level\n * How easy it is to spoof the detection signals\n */\nexport type ForgeabilityRisk = 'low' | 'medium' | 'high';\n\n/**\n * Detected agent information\n */\nexport interface IDetectedAgent {\n /** Agent type identifier (e.g., 'openai', 'anthropic') */\n type: string;\n /** Human-readable agent name (e.g., 'ChatGPT', 'Claude') */\n name: string;\n /** Vendor/company name */\n vendor?: string;\n /** Model identifier if known */\n model?: string;\n /** Version if known */\n version?: string;\n}\n\n/**\n * Detection result - output from the detection engine\n * Confidence is ALWAYS on 0-100 scale\n */\nexport interface IDetectionResult {\n /** Whether the request was identified as coming from an agent */\n isAgent: boolean;\n /** Confidence score on 0-100 scale (NOT 0-1) */\n confidence: number;\n /** Detection classification */\n detectionClass: DetectionClass;\n /** Detected agent details if identified */\n detectedAgent?: IDetectedAgent;\n /** Method used for verification */\n verificationMethod: VerificationMethod;\n /** Risk level of signal forgeability */\n forgeabilityRisk: ForgeabilityRisk;\n /** Reasons/signals that contributed to detection */\n reasons: string[];\n /** Detection timestamp */\n timestamp: Date;\n /** Whether the request should be blocked (set by policy) */\n shouldBlock?: boolean;\n /** Reason for blocking (set by policy) */\n blockReason?: string;\n}\n\n/**\n * WASM bindings interface - functions exposed by the WASM module\n */\nexport interface IWasmBindings {\n /** Detect an agent from request metadata */\n detect_agent(metadata: IWasmRequestMetadata): IWasmDetectionResult;\n /** Get WASM module version */\n get_version(): string;\n /** Get build information */\n get_build_info(): string;\n}\n\n/**\n * WASM request metadata - input to WASM detect_agent function\n */\nexport interface IWasmRequestMetadata {\n user_agent: string | null;\n ip_address: string | null;\n headers: string; // JSON string\n timestamp: string; // ISO 8601\n url: string | null;\n method: string | null;\n client_fingerprint: string | null;\n free(): void;\n}\n\n/**\n * WASM detection result - output from WASM detect_agent function\n */\nexport interface IWasmDetectionResult {\n is_agent: boolean;\n confidence: number; // 0-100 scale (converted at WASM boundary)\n agent: string | null;\n verification_method: string;\n risk_level: string;\n timestamp: string;\n}\n\n/**\n * WASM loader interface - abstracts WASM loading strategy\n */\nexport interface IWasmLoader {\n /** Load the WASM module */\n load(): Promise<void>;\n /** Get the WASM bindings after loading */\n getBindings(): IWasmBindings;\n /** Check if WASM is loaded */\n isLoaded(): boolean;\n /** Get the loading strategy name */\n getStrategy(): string;\n}\n\n/**\n * Agent detector interface - main detection API\n */\nexport interface IDetector {\n /** Analyze a request and detect if it's from an agent */\n detect(input: IDetectionInput): Promise<IDetectionResult>;\n /** Check if the detector is ready */\n isReady(): boolean;\n /** Ensure the detector is initialized */\n ensureReady(): Promise<void>;\n /** Get detector version */\n getVersion(): Promise<string>;\n}\n\n/**\n * Customer policy - rules for agent handling\n */\nexport interface ICustomerPolicy {\n /** Project ID */\n projectId: string;\n /** Agents to always block */\n denyList?: string[];\n /** Agents to always allow (if set, blocks all others) */\n allowList?: string[];\n /** Minimum confidence to trigger blocking */\n blockThreshold?: number;\n /** Path-based rules */\n pathRules?: IPathRule[];\n /** Policy version for cache invalidation */\n version?: string;\n /** Last updated timestamp */\n updatedAt?: Date;\n}\n\n/**\n * Path-based rule for policy\n */\nexport interface IPathRule {\n /** Path pattern (glob or regex) */\n pattern: string;\n /** Action for matching paths */\n action: 'allow' | 'block' | 'challenge';\n /** Specific agents this rule applies to */\n agents?: string[];\n}\n\n/**\n * Policy loader interface - loads customer policies\n */\nexport interface IPolicyLoader {\n /** Load policy for an API key */\n loadPolicy(apiKey: string): Promise<ICustomerPolicy>;\n /** Get cached policy if available */\n getCachedPolicy(apiKey: string): ICustomerPolicy | null;\n /** Invalidate cached policy */\n invalidateCache(apiKey: string): void;\n}\n\n/**\n * Detector configuration options\n */\nexport interface IDetectorOptions {\n /** API key for loading customer policies */\n apiKey?: string;\n /** Custom WASM loader (for Edge Runtime static imports) */\n wasmLoader?: IWasmLoader;\n /** Whether to fall back to JavaScript if WASM fails */\n fallbackToJS?: boolean;\n /** Whether to cache policies */\n cachePolicy?: boolean;\n /** Policy cache TTL in milliseconds */\n policyTTL?: number;\n /** Base URL for policy API */\n policyApiUrl?: string;\n /** Enable debug logging */\n debug?: boolean;\n}\n\n/**\n * Confidence thresholds - centralized constants\n */\nexport const CONFIDENCE = {\n /** Minimum confidence for isAgent=true */\n THRESHOLD_AGENT: 30,\n /** Cryptographic signature verified */\n SIGNATURE_VERIFIED: 100,\n /** Signature header present but not verified */\n SIGNATURE_PRESENT: 85,\n /** Strong pattern match */\n PATTERN_HIGH: 85,\n /** Moderate pattern match */\n PATTERN_MEDIUM: 60,\n /** Weak pattern match */\n PATTERN_LOW: 40,\n /** Cloud IP detection only */\n CLOUD_IP: 30,\n} as const;\n","/**\n * Unified WASM Detector\n *\n * Single implementation of the AgentShield detection engine used by all packages.\n * Follows the Single Responsibility Principle: this class only handles detection.\n *\n * Key design decisions:\n * - Confidence is ALWAYS on 0-100 scale (no conversions needed)\n * - WASM output is used directly (no post-processing adjustments)\n * - Policy application is optional and happens after detection\n */\n\nimport type {\n IDetector,\n IDetectionInput,\n IDetectionResult,\n IWasmLoader,\n IWasmRequestMetadata,\n IPolicyLoader,\n ICustomerPolicy,\n DetectionClass,\n VerificationMethod,\n ForgeabilityRisk,\n IDetectorOptions,\n} from './types';\nimport { CONFIDENCE } from './types';\n\n/**\n * Convert verification method string from WASM to typed enum\n */\nfunction parseVerificationMethod(method: string): VerificationMethod {\n switch (method.toLowerCase()) {\n case 'signature':\n return 'signature';\n case 'pattern':\n return 'pattern';\n case 'behavioral':\n return 'behavioral';\n case 'network':\n return 'network';\n case 'mcp_i_handshake':\n return 'mcp_i_handshake';\n default:\n return 'none';\n }\n}\n\n/**\n * Determine forgeability risk based on verification method and confidence\n */\nfunction determineForgeabilityRisk(\n method: VerificationMethod,\n confidence: number\n): ForgeabilityRisk {\n // Cryptographic signature verification = low risk\n if (method === 'signature' && confidence >= 90) {\n return 'low';\n }\n\n // High confidence pattern match = medium risk\n if (confidence >= 80) {\n return 'medium';\n }\n\n // Everything else = high risk (easily spoofable)\n return 'high';\n}\n\n/**\n * Determine detection class from WASM result\n */\nfunction determineDetectionClass(\n isAgent: boolean,\n agentName: string | null,\n confidence: number\n): DetectionClass {\n if (!isAgent || confidence < CONFIDENCE.THRESHOLD_AGENT) {\n return { type: 'Human' };\n }\n\n if (agentName) {\n // Check if it's an AI agent\n const aiAgentPatterns = [\n 'chatgpt',\n 'gpt',\n 'openai',\n 'claude',\n 'anthropic',\n 'perplexity',\n 'gemini',\n 'google ai',\n 'copilot',\n 'bing chat',\n ];\n\n const lowerName = agentName.toLowerCase();\n if (aiAgentPatterns.some((pattern) => lowerName.includes(pattern))) {\n return { type: 'AiAgent', agentType: agentName };\n }\n\n // Check if it's a bot\n const botPatterns = ['bot', 'crawler', 'spider', 'scraper'];\n if (botPatterns.some((pattern) => lowerName.includes(pattern))) {\n return { type: 'Bot', botType: agentName };\n }\n\n // Check if it's automation\n const automationPatterns = ['selenium', 'puppeteer', 'playwright', 'cypress'];\n if (automationPatterns.some((pattern) => lowerName.includes(pattern))) {\n return { type: 'Automation', toolType: agentName };\n }\n\n // Default to AI agent if detected but unrecognized\n return { type: 'AiAgent', agentType: agentName };\n }\n\n return { type: 'Unknown' };\n}\n\n/**\n * Unified WASM Detector\n *\n * Main detection class that wraps the WASM engine and provides\n * a consistent interface across all AgentShield packages.\n */\nexport class WasmDetector implements IDetector {\n private ready = false;\n private loadPromise: Promise<void> | null = null;\n\n /**\n * Create a new WasmDetector\n * @param loader - WASM loader (static for Edge, dynamic for Node.js)\n * @param policyLoader - Optional policy loader for API key support\n * @param options - Detector configuration options\n */\n constructor(\n private readonly loader: IWasmLoader,\n private readonly policyLoader?: IPolicyLoader,\n private readonly options: IDetectorOptions = {}\n ) {}\n\n /**\n * Analyze a request and detect if it's from an agent\n */\n async detect(input: IDetectionInput): Promise<IDetectionResult> {\n // Ensure WASM is loaded\n await this.ensureReady();\n\n try {\n // Get WASM bindings\n const bindings = this.loader.getBindings();\n\n // Create WASM metadata\n const metadata: IWasmRequestMetadata = {\n user_agent: input.userAgent || null,\n ip_address: input.ipAddress || null,\n headers: JSON.stringify(input.headers || {}),\n timestamp: (input.timestamp || new Date()).toISOString(),\n url: input.url || null,\n method: input.method || null,\n client_fingerprint: input.clientFingerprint || null,\n free: () => {}, // No-op for JS\n };\n\n // Call WASM detection\n const wasmResult = bindings.detect_agent(metadata);\n\n // Convert WASM result to IDetectionResult\n // NOTE: WASM already outputs confidence on 0-100 scale\n // No conversion needed!\n const verificationMethod = parseVerificationMethod(wasmResult.verification_method);\n const forgeabilityRisk = determineForgeabilityRisk(verificationMethod, wasmResult.confidence);\n const detectionClass = determineDetectionClass(\n wasmResult.is_agent,\n wasmResult.agent,\n wasmResult.confidence\n );\n\n let result: IDetectionResult = {\n isAgent: wasmResult.is_agent,\n confidence: wasmResult.confidence, // Already 0-100, no conversion!\n detectionClass,\n detectedAgent: wasmResult.agent\n ? {\n type: this.inferAgentType(wasmResult.agent),\n name: wasmResult.agent,\n }\n : undefined,\n verificationMethod,\n forgeabilityRisk,\n reasons: this.extractReasons(wasmResult),\n timestamp: new Date(),\n };\n\n // Apply customer policy if available\n if (this.policyLoader && this.options.apiKey) {\n result = await this.applyPolicy(result);\n }\n\n return result;\n } catch (error) {\n // Log error if debug enabled\n if (this.options.debug) {\n console.error('[WasmDetector] Detection error:', error);\n }\n\n // Return safe default (assume human)\n return this.createDefaultResult();\n }\n }\n\n /**\n * Check if the detector is ready\n */\n isReady(): boolean {\n return this.ready;\n }\n\n /**\n * Ensure the detector is initialized\n */\n async ensureReady(): Promise<void> {\n if (this.ready) {\n return;\n }\n\n if (this.loadPromise) {\n return this.loadPromise;\n }\n\n this.loadPromise = this.initialize();\n return this.loadPromise;\n }\n\n /**\n * Get detector version\n */\n async getVersion(): Promise<string> {\n await this.ensureReady();\n return this.loader.getBindings().get_version();\n }\n\n /**\n * Initialize the detector\n */\n private async initialize(): Promise<void> {\n try {\n await this.loader.load();\n this.ready = true;\n\n if (this.options.debug) {\n const version = this.loader.getBindings().get_version();\n console.log(\n `[WasmDetector] Initialized with WASM v${version} (${this.loader.getStrategy()})`\n );\n }\n } catch (error) {\n this.loadPromise = null;\n throw error;\n }\n }\n\n /**\n * Apply customer policy to detection result\n */\n private async applyPolicy(result: IDetectionResult): Promise<IDetectionResult> {\n if (!this.policyLoader || !this.options.apiKey) {\n return result;\n }\n\n try {\n // Try to get cached policy first\n let policy = this.policyLoader.getCachedPolicy(this.options.apiKey);\n\n // Load policy if not cached\n if (!policy) {\n policy = await this.policyLoader.loadPolicy(this.options.apiKey);\n }\n\n return this.applyPolicyRules(result, policy);\n } catch (error) {\n if (this.options.debug) {\n console.warn('[WasmDetector] Failed to load policy:', error);\n }\n // Return original result if policy loading fails\n return result;\n }\n }\n\n /**\n * Check if agent name matches a policy list entry\n * Uses exact match or word-boundary prefix match to avoid false positives\n * e.g., \"gpt\" matches \"ChatGPT\" and \"GPT-4\" but not \"EgyptBot\"\n */\n private matchesPolicyEntry(agentName: string, policyEntry: string): boolean {\n const lowerAgent = agentName.toLowerCase();\n const lowerEntry = policyEntry.toLowerCase();\n\n // Exact match\n if (lowerAgent === lowerEntry) {\n return true;\n }\n\n // Word boundary match: entry appears as a complete word or at word boundaries\n // This prevents \"ai\" from matching \"baidubot\" while allowing \"gpt\" to match \"chatgpt\"\n const wordBoundaryRegex = new RegExp(\n `(^|[^a-z0-9])${this.escapeRegex(lowerEntry)}($|[^a-z0-9])`,\n 'i'\n );\n return wordBoundaryRegex.test(lowerAgent);\n }\n\n /**\n * Escape special regex characters in a string\n */\n private escapeRegex(str: string): string {\n return str.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&');\n }\n\n /**\n * Apply policy rules to detection result\n */\n private applyPolicyRules(result: IDetectionResult, policy: ICustomerPolicy): IDetectionResult {\n // Check deny list\n if (policy.denyList && result.detectedAgent) {\n const agentName = result.detectedAgent.name;\n const isDenied = policy.denyList.some((denied) => this.matchesPolicyEntry(agentName, denied));\n\n if (isDenied) {\n return {\n ...result,\n shouldBlock: true,\n blockReason: 'deny_list',\n };\n }\n }\n\n // Check allow list (if set, blocks everything not in list, but allows listed agents)\n if (policy.allowList && policy.allowList.length > 0 && result.isAgent) {\n const agentName = result.detectedAgent?.name;\n\n // If agent was detected but not identified (no name), skip allow list check\n // Allow list is for named agents only - unidentified agents go through threshold check\n if (!agentName) {\n // Fall through to threshold check below\n } else {\n const isAllowed = policy.allowList.some((allowed) =>\n this.matchesPolicyEntry(agentName, allowed)\n );\n\n if (!isAllowed) {\n return {\n ...result,\n shouldBlock: true,\n blockReason: 'not_in_allow_list',\n };\n }\n\n // Agent is explicitly allowed - skip threshold check and don't block\n return {\n ...result,\n shouldBlock: false,\n };\n }\n }\n\n // Check confidence threshold (only for detected agents not in allow list)\n // Use !== undefined instead of truthiness check since 0 is a valid threshold\n // (meaning \"block all detected agents regardless of confidence\")\n if (\n policy.blockThreshold !== undefined &&\n result.isAgent &&\n result.confidence >= policy.blockThreshold\n ) {\n return {\n ...result,\n shouldBlock: true,\n blockReason: 'threshold',\n };\n }\n\n return result;\n }\n\n /**\n * Infer agent type from name\n */\n private inferAgentType(agentName: string): string {\n const lowerName = agentName.toLowerCase();\n\n if (\n lowerName.includes('chatgpt') ||\n lowerName.includes('openai') ||\n lowerName.includes('gpt')\n ) {\n return 'openai';\n }\n if (lowerName.includes('claude') || lowerName.includes('anthropic')) {\n return 'anthropic';\n }\n if (lowerName.includes('perplexity')) {\n return 'perplexity';\n }\n if (lowerName.includes('gemini') || lowerName.includes('google')) {\n return 'google';\n }\n if (lowerName.includes('copilot') || lowerName.includes('bing')) {\n return 'microsoft';\n }\n\n return 'unknown';\n }\n\n /**\n * Extract reasons from WASM result\n */\n private extractReasons(wasmResult: {\n verification_method: string;\n agent: string | null;\n }): string[] {\n const reasons: string[] = [];\n\n if (wasmResult.verification_method) {\n reasons.push(`method:${wasmResult.verification_method}`);\n }\n\n if (wasmResult.agent) {\n reasons.push(`agent:${wasmResult.agent.toLowerCase()}`);\n }\n\n return reasons;\n }\n\n /**\n * Create default result (assumed human)\n */\n private createDefaultResult(): IDetectionResult {\n return {\n isAgent: false,\n confidence: 0,\n detectionClass: { type: 'Human' },\n verificationMethod: 'none',\n forgeabilityRisk: 'high',\n reasons: ['detection_failed'],\n timestamp: new Date(),\n };\n }\n}\n","/**\n * Dynamic WASM Loader for Node.js\n *\n * This loader dynamically loads and compiles WASM at runtime,\n * which is supported in Node.js but NOT in Edge Runtime.\n *\n * Usage:\n * ```typescript\n * import { DynamicWasmLoader, WasmDetector } from '@kya-os/checkpoint-wasm-runtime/node';\n *\n * const loader = new DynamicWasmLoader();\n * const detector = new WasmDetector(loader);\n * ```\n */\n\nimport type {\n IWasmLoader,\n IWasmBindings,\n IWasmRequestMetadata,\n IWasmDetectionResult,\n} from '../types';\n\n/**\n * Try to import the WASM module from various locations\n */\nasync function findWasmModule(): Promise<ArrayBuffer> {\n const wasmPaths = [\n // Relative to this package\n '../wasm/agentshield_wasm_bg.wasm',\n './wasm/agentshield_wasm_bg.wasm',\n // From agentshield-core package\n '@kya-os/checkpoint/wasm/agentshield_wasm_bg.wasm',\n // From monorepo build output\n '../../rust/target/wasm32-unknown-unknown/release/agentshield_wasm_bg.wasm',\n ];\n\n // Try dynamic imports first (works with bundlers)\n for (const path of wasmPaths) {\n try {\n // Try webpack/bundler style import\n const module = await import(/* webpackIgnore: true */ path);\n if (module.default && module.default instanceof ArrayBuffer) {\n return module.default;\n }\n } catch {\n // Continue to next path\n }\n }\n\n // Try Node.js fs for file system loading\n try {\n const fs = await import('node:fs/promises');\n const nodePath = await import('node:path');\n\n // Get current module's directory - handle both ESM and CJS\n let moduleDir: string | null = null;\n\n // Try ESM approach first (import.meta.url)\n try {\n // Use eval to prevent bundlers from statically analyzing import.meta\n // which would cause CJS builds to fail at parse time\n const importMetaUrl = eval('typeof import.meta !== \"undefined\" && import.meta.url');\n if (importMetaUrl) {\n const url = await import('node:url');\n moduleDir = nodePath.dirname(url.fileURLToPath(importMetaUrl));\n }\n } catch {\n // ESM not available, try CJS\n }\n\n // Try CJS approach (__dirname)\n if (!moduleDir) {\n try {\n // __dirname is available in CJS but not ESM\n // Use eval to prevent ESM bundlers from complaining\n const cjsDirname = eval('typeof __dirname !== \"undefined\" && __dirname');\n if (cjsDirname) {\n moduleDir = cjsDirname;\n }\n } catch {\n // CJS __dirname not available\n }\n }\n\n // Build paths to try - start with process.cwd() based paths that work in both\n const fsWasmPaths = [\n nodePath.resolve(\n process.cwd(),\n 'node_modules/@kya-os/checkpoint-wasm-runtime/wasm/agentshield_wasm_bg.wasm'\n ),\n nodePath.resolve(\n process.cwd(),\n 'node_modules/@kya-os/checkpoint/dist/wasm/agentshield_wasm_bg.wasm'\n ),\n ];\n\n // Add module-relative paths if we found the module directory\n if (moduleDir) {\n fsWasmPaths.unshift(\n nodePath.resolve(moduleDir, '../wasm/agentshield_wasm_bg.wasm'),\n nodePath.resolve(moduleDir, '../../wasm/agentshield_wasm_bg.wasm')\n );\n }\n\n for (const wasmPath of fsWasmPaths) {\n try {\n const buffer = await fs.readFile(wasmPath);\n // Create a new ArrayBuffer to avoid SharedArrayBuffer issues\n const arrayBuffer = new ArrayBuffer(buffer.byteLength);\n new Uint8Array(arrayBuffer).set(buffer);\n return arrayBuffer;\n } catch {\n // Continue to next path\n }\n }\n } catch {\n // fs not available (browser/edge)\n }\n\n throw new Error(\n 'Could not find WASM module. Ensure @kya-os/checkpoint-wasm-runtime/wasm is installed.'\n );\n}\n\n/**\n * JsRequestMetadata constructor class\n * Matches the WASM JsRequestMetadata struct\n */\nclass JsRequestMetadata implements IWasmRequestMetadata {\n constructor(\n public user_agent: string | null,\n public ip_address: string | null,\n public headers: string,\n public timestamp: string,\n public url: string | null,\n public method: string | null,\n public client_fingerprint: string | null\n ) {}\n\n free(): void {\n // No-op for JavaScript implementation\n }\n}\n\n/**\n * Dynamic WASM Loader\n *\n * For Node.js environments that support dynamic WASM compilation.\n * Automatically finds and loads the WASM module.\n */\nexport class DynamicWasmLoader implements IWasmLoader {\n private bindings: IWasmBindings | null = null;\n private instance: WebAssembly.Instance | null = null;\n private loadPromise: Promise<void> | null = null;\n\n /**\n * Create a new DynamicWasmLoader\n * @param wasmPath - Optional custom path to WASM file\n */\n constructor(private readonly wasmPath?: string) {}\n\n /**\n * Load and compile the WASM module\n */\n async load(): Promise<void> {\n if (this.bindings) {\n return; // Already loaded\n }\n\n // Prevent concurrent loading\n if (this.loadPromise) {\n return this.loadPromise;\n }\n\n this.loadPromise = this.doLoad();\n return this.loadPromise;\n }\n\n private async doLoad(): Promise<void> {\n try {\n let wasmBuffer: ArrayBuffer;\n\n if (this.wasmPath) {\n // Load from custom path\n const fs = await import('node:fs/promises');\n const buffer = await fs.readFile(this.wasmPath);\n // Create a new ArrayBuffer to avoid SharedArrayBuffer issues\n wasmBuffer = new ArrayBuffer(buffer.byteLength);\n new Uint8Array(wasmBuffer).set(buffer);\n } else {\n // Auto-find WASM module\n wasmBuffer = await findWasmModule();\n }\n\n // Compile and instantiate\n const compiled = await WebAssembly.compile(wasmBuffer);\n const imports: WebAssembly.Imports = {\n wbg: this.createWasmBindgenImports() as WebAssembly.ModuleImports,\n };\n this.instance = await WebAssembly.instantiate(compiled, imports);\n\n // Create bindings wrapper\n const exports = this.instance.exports as Record<string, unknown>;\n this.bindings = this.createBindings(exports);\n } catch (error) {\n this.loadPromise = null;\n throw new Error(\n `Failed to load WASM module: ${error instanceof Error ? error.message : String(error)}`\n );\n }\n }\n\n /**\n * Get the WASM bindings after loading\n */\n getBindings(): IWasmBindings {\n if (!this.bindings) {\n throw new Error('WASM not loaded. Call load() first.');\n }\n return this.bindings;\n }\n\n /**\n * Check if WASM is loaded\n */\n isLoaded(): boolean {\n return this.bindings !== null;\n }\n\n /**\n * Get the loading strategy name\n */\n getStrategy(): string {\n return 'dynamic-compile';\n }\n\n /**\n * Create wasm-bindgen required imports\n */\n private createWasmBindgenImports(): Record<string, unknown> {\n return {\n __wbg_log_f740dc2253ea759b: (ptr: number, len: number) => {\n console.log('[WASM]', ptr, len);\n },\n __wbg_error_f851667af71bcfc6: (ptr: number, len: number) => {\n console.error('[WASM Error]', ptr, len);\n },\n __wbg_now_c644db5194be8437: () => Date.now(),\n __wbindgen_throw: (ptr: number, len: number) => {\n throw new Error(`WASM threw: ${ptr}, ${len}`);\n },\n __wbindgen_object_drop_ref: () => {},\n };\n }\n\n /**\n * Create bindings wrapper from WASM exports\n */\n private createBindings(exports: Record<string, unknown>): IWasmBindings {\n const detectAgent = exports['detect_agent'] as\n | ((metadata: IWasmRequestMetadata) => IWasmDetectionResult)\n | undefined;\n const getVersion = exports['get_version'] as (() => string) | undefined;\n const getBuildInfo = exports['get_build_info'] as (() => string) | undefined;\n\n if (!detectAgent) {\n throw new Error('WASM module missing detect_agent export');\n }\n\n return {\n detect_agent: (metadata: IWasmRequestMetadata): IWasmDetectionResult => {\n const wasmMetadata = new JsRequestMetadata(\n metadata.user_agent,\n metadata.ip_address,\n metadata.headers,\n metadata.timestamp,\n metadata.url,\n metadata.method,\n metadata.client_fingerprint\n );\n\n try {\n return detectAgent(wasmMetadata);\n } finally {\n wasmMetadata.free();\n }\n },\n get_version: () => {\n if (getVersion) {\n return getVersion();\n }\n return '0.1.0-dynamic';\n },\n get_build_info: () => {\n if (getBuildInfo) {\n return getBuildInfo();\n }\n return JSON.stringify({ version: '0.1.0', strategy: 'dynamic-compile' });\n },\n };\n }\n}\n\n/**\n * Create a dynamic loader\n */\nexport function createDynamicLoader(wasmPath?: string): DynamicWasmLoader {\n return new DynamicWasmLoader(wasmPath);\n}\n","/**\n * Policy Loader\n *\n * Loads customer policies from the AgentShield API.\n * Supports LRU caching with background refresh.\n */\n\nimport type { IPolicyLoader, ICustomerPolicy } from '../types';\n\n/**\n * Cached policy entry\n */\ninterface CachedPolicy {\n policy: ICustomerPolicy;\n loadedAt: number;\n refreshing: boolean;\n}\n\n/**\n * Policy loader configuration\n */\nexport interface PolicyLoaderConfig {\n /** Base URL for the policy API */\n apiUrl?: string;\n /** Cache TTL in milliseconds (default: 5 minutes) */\n cacheTTL?: number;\n /** Maximum number of policies to cache (default: 100) */\n maxCacheSize?: number;\n /** Enable background refresh (default: true) */\n backgroundRefresh?: boolean;\n /** Timeout for API requests in milliseconds (default: 5000) */\n timeout?: number;\n}\n\nconst DEFAULT_CONFIG: Required<PolicyLoaderConfig> = {\n apiUrl: 'https://api.agentshield.io',\n cacheTTL: 5 * 60 * 1000, // 5 minutes\n maxCacheSize: 100,\n backgroundRefresh: true,\n timeout: 5000,\n};\n\n/**\n * Policy Loader\n *\n * Loads and caches customer policies from the AgentShield API.\n * Follows Single Responsibility Principle: only handles policy loading.\n */\nexport class PolicyLoader implements IPolicyLoader {\n private cache = new Map<string, CachedPolicy>();\n private config: Required<PolicyLoaderConfig>;\n\n constructor(config: PolicyLoaderConfig = {}) {\n this.config = { ...DEFAULT_CONFIG, ...config };\n }\n\n /**\n * Load policy for an API key\n */\n async loadPolicy(apiKey: string): Promise<ICustomerPolicy> {\n // Check cache first\n const cached = this.getCachedPolicy(apiKey);\n if (cached) {\n // Trigger background refresh if nearing expiry\n if (this.config.backgroundRefresh && this.shouldRefresh(apiKey)) {\n this.refreshInBackground(apiKey);\n }\n return cached;\n }\n\n // Fetch from API\n return this.fetchPolicy(apiKey);\n }\n\n /**\n * Get cached policy if available and not expired\n */\n getCachedPolicy(apiKey: string): ICustomerPolicy | null {\n const entry = this.cache.get(apiKey);\n if (!entry) {\n return null;\n }\n\n // Check if expired\n if (this.isExpired(entry)) {\n this.cache.delete(apiKey);\n return null;\n }\n\n return entry.policy;\n }\n\n /**\n * Invalidate cached policy\n */\n invalidateCache(apiKey: string): void {\n this.cache.delete(apiKey);\n }\n\n /**\n * Fetch policy from API and cache it\n */\n private async fetchPolicy(apiKey: string): Promise<ICustomerPolicy> {\n const policy = await this.fetchPolicyFromApi(apiKey);\n this.cachePolicy(apiKey, policy);\n return policy;\n }\n\n /**\n * Fetch policy from API without caching\n * Used internally for both direct fetches and background refreshes\n */\n private async fetchPolicyFromApi(apiKey: string): Promise<ICustomerPolicy> {\n const controller = new AbortController();\n const timeoutId = setTimeout(() => controller.abort(), this.config.timeout);\n\n try {\n const response = await fetch(`${this.config.apiUrl}/api/v1/policy`, {\n method: 'GET',\n headers: {\n Authorization: `Bearer ${apiKey}`,\n 'Content-Type': 'application/json',\n 'User-Agent': 'agentshield-wasm-runtime/0.1.0',\n },\n signal: controller.signal,\n });\n\n clearTimeout(timeoutId);\n\n if (!response.ok) {\n if (response.status === 401) {\n throw new PolicyLoadError('Invalid API key', 'INVALID_API_KEY');\n }\n if (response.status === 404) {\n // Return default policy if not found\n return this.getDefaultPolicy(apiKey);\n }\n throw new PolicyLoadError(`Failed to load policy: ${response.status}`, 'API_ERROR');\n }\n\n return (await response.json()) as ICustomerPolicy;\n } catch (error) {\n clearTimeout(timeoutId);\n\n if (error instanceof PolicyLoadError) {\n throw error;\n }\n\n if (error instanceof Error && error.name === 'AbortError') {\n throw new PolicyLoadError('Policy request timeout', 'TIMEOUT');\n }\n\n throw new PolicyLoadError(\n `Failed to load policy: ${error instanceof Error ? error.message : 'Unknown error'}`,\n 'NETWORK_ERROR'\n );\n }\n }\n\n /**\n * Cache a policy\n */\n private cachePolicy(apiKey: string, policy: ICustomerPolicy): void {\n // Enforce cache size limit (simple LRU: delete oldest)\n if (this.cache.size >= this.config.maxCacheSize) {\n const oldestKey = this.cache.keys().next().value;\n if (oldestKey) {\n this.cache.delete(oldestKey);\n }\n }\n\n this.cache.set(apiKey, {\n policy,\n loadedAt: Date.now(),\n refreshing: false,\n });\n }\n\n /**\n * Check if cached entry is expired\n */\n private isExpired(entry: CachedPolicy): boolean {\n return Date.now() - entry.loadedAt > this.config.cacheTTL;\n }\n\n /**\n * Check if cache entry should be refreshed\n */\n private shouldRefresh(apiKey: string): boolean {\n const entry = this.cache.get(apiKey);\n if (!entry) {\n return false;\n }\n\n // Refresh when 80% of TTL has passed\n const refreshThreshold = this.config.cacheTTL * 0.8;\n return Date.now() - entry.loadedAt > refreshThreshold && !entry.refreshing;\n }\n\n /**\n * Refresh policy in background\n */\n private async refreshInBackground(apiKey: string): Promise<void> {\n const entry = this.cache.get(apiKey);\n if (!entry || entry.refreshing) {\n return;\n }\n\n // Mark as refreshing\n entry.refreshing = true;\n\n try {\n // Use fetch-only method to avoid double caching\n const policy = await this.fetchPolicyFromApi(apiKey);\n this.cachePolicy(apiKey, policy);\n } catch {\n // Ignore errors in background refresh, keep serving stale cache\n } finally {\n // Reset refreshing flag on the current entry\n // (cachePolicy creates a new entry with refreshing: false, so this is\n // only needed if the fetch failed and we're still serving the old entry)\n const currentEntry = this.cache.get(apiKey);\n if (currentEntry && currentEntry.refreshing) {\n currentEntry.refreshing = false;\n }\n }\n }\n\n /**\n * Get default policy for a project\n */\n private getDefaultPolicy(apiKey: string): ICustomerPolicy {\n return {\n projectId: apiKey.split('_')[1] || 'unknown',\n blockThreshold: 90,\n };\n }\n}\n\n/**\n * Policy load error\n */\nexport class PolicyLoadError extends Error {\n constructor(\n message: string,\n public readonly code: 'INVALID_API_KEY' | 'API_ERROR' | 'NETWORK_ERROR' | 'TIMEOUT'\n ) {\n super(message);\n this.name = 'PolicyLoadError';\n }\n}\n\n/**\n * Create a policy loader with default configuration\n */\nexport function createPolicyLoader(config?: PolicyLoaderConfig): PolicyLoader {\n return new PolicyLoader(config);\n}\n","/**\n * Rules-Based Fallback Detector\n *\n * JavaScript fallback detector that uses merged-rules.json when WASM is unavailable.\n * This provides consistent detection using the same rules as WASM, just implemented in JS.\n */\n\nimport type {\n IDetector,\n IDetectionInput,\n IDetectionResult,\n DetectionClass,\n VerificationMethod,\n} from '../types';\nimport { CONFIDENCE } from '../types';\nimport { loadRulesSync, type DetectionRules } from '@kya-os/checkpoint-shared';\n\n/**\n * Rules-Based Fallback Detector\n *\n * Uses the same merged-rules.json as the WASM engine to provide\n * consistent detection when WASM is not available.\n */\nexport class RulesDetector implements IDetector {\n private rules: DetectionRules | null = null;\n private ready = false;\n\n /**\n * Analyze a request and detect if it's from an agent\n */\n async detect(input: IDetectionInput): Promise<IDetectionResult> {\n await this.ensureReady();\n\n const reasons: string[] = [];\n let confidence = 0;\n let detectedAgentName: string | null = null;\n let verificationMethod: VerificationMethod = 'none';\n\n const userAgent = input.userAgent || input.headers['user-agent'] || '';\n const normalizedHeaders = this.normalizeHeaders(input.headers);\n\n // Check User-Agent patterns\n if (userAgent && this.rules) {\n const uaMatch = this.matchUserAgent(userAgent);\n if (uaMatch) {\n confidence = Math.max(confidence, uaMatch.confidence);\n detectedAgentName = uaMatch.agentName;\n verificationMethod = 'pattern';\n reasons.push(`pattern:${uaMatch.agentKey}`);\n }\n }\n\n // Check suspicious headers\n if (this.rules) {\n const headerMatch = this.matchHeaders(normalizedHeaders);\n if (headerMatch.confidence > 0) {\n confidence = Math.max(confidence, headerMatch.confidence);\n reasons.push(`headers:${headerMatch.count}`);\n }\n }\n\n // Check for signature headers (indicates AI agent)\n if (this.hasSignatureHeaders(normalizedHeaders)) {\n confidence = Math.max(confidence, CONFIDENCE.SIGNATURE_PRESENT);\n reasons.push('signature_headers_present');\n verificationMethod = 'pattern'; // Can't verify signature in JS fallback\n }\n\n // Determine detection class\n const isAgent = confidence > CONFIDENCE.THRESHOLD_AGENT;\n const detectionClass = this.determineDetectionClass(isAgent, detectedAgentName, confidence);\n\n return {\n isAgent,\n confidence,\n detectionClass,\n detectedAgent: detectedAgentName\n ? {\n type: this.inferAgentType(detectedAgentName),\n name: detectedAgentName,\n }\n : undefined,\n verificationMethod,\n forgeabilityRisk: 'high', // JS fallback is always high risk\n reasons,\n timestamp: new Date(),\n };\n }\n\n /**\n * Check if the detector is ready\n */\n isReady(): boolean {\n return this.ready;\n }\n\n /**\n * Ensure the detector is initialized\n */\n async ensureReady(): Promise<void> {\n if (this.ready) {\n return;\n }\n\n try {\n this.rules = loadRulesSync();\n this.ready = true;\n } catch (error) {\n console.warn('[RulesDetector] Failed to load rules:', error);\n // Continue without rules - will return default results\n this.ready = true;\n }\n }\n\n /**\n * Get detector version\n */\n async getVersion(): Promise<string> {\n return '0.1.0-js-fallback';\n }\n\n /**\n * Normalize headers to lowercase keys\n */\n private normalizeHeaders(headers: Record<string, string>): Record<string, string> {\n const normalized: Record<string, string> = {};\n for (const [key, value] of Object.entries(headers)) {\n normalized[key.toLowerCase()] = value;\n }\n return normalized;\n }\n\n /**\n * Match user agent against rules\n */\n private matchUserAgent(\n userAgent: string\n ): { confidence: number; agentName: string; agentKey: string } | null {\n if (!this.rules) {\n return null;\n }\n\n const userAgents = this.rules.rules.userAgents;\n\n // Sort to check specific patterns first (generic_bot, dev_tools, automation_tools last)\n const genericKeys = ['generic_bot', 'dev_tools', 'automation_tools'];\n const entries = Object.entries(userAgents).sort((a, b) => {\n const aIsGeneric = genericKeys.includes(a[0]);\n const bIsGeneric = genericKeys.includes(b[0]);\n if (aIsGeneric && !bIsGeneric) return 1;\n if (!aIsGeneric && bIsGeneric) return -1;\n return 0;\n });\n\n for (const [agentKey, rule] of entries) {\n for (const pattern of rule.patterns) {\n try {\n const regex = new RegExp(pattern, 'i');\n if (regex.test(userAgent)) {\n return {\n // Convert 0-1 rule confidence to 0-100 scale\n confidence: rule.confidence * 100,\n agentName: this.getAgentName(agentKey),\n agentKey,\n };\n }\n } catch {\n // Invalid regex, skip\n }\n }\n }\n\n return null;\n }\n\n /**\n * Match headers against suspicious header rules\n */\n private matchHeaders(headers: Record<string, string>): { confidence: number; count: number } {\n if (!this.rules) {\n return { confidence: 0, count: 0 };\n }\n\n const suspicious = this.rules.rules.headers.suspicious || [];\n let maxConfidence = 0;\n let count = 0;\n\n for (const headerRule of suspicious) {\n if (headers[headerRule.name.toLowerCase()]) {\n // Convert 0-1 rule confidence to 0-100 scale\n maxConfidence = Math.max(maxConfidence, headerRule.confidence * 100);\n count++;\n }\n }\n\n return { confidence: maxConfidence, count };\n }\n\n /**\n * Check if signature headers are present\n */\n private hasSignatureHeaders(headers: Record<string, string>): boolean {\n return !!(headers['signature'] || headers['signature-input'] || headers['signature-agent']);\n }\n\n /**\n * Get human-readable agent name from rule key\n */\n private getAgentName(agentKey: string): string {\n const nameMap: Record<string, string> = {\n openai_gptbot: 'ChatGPT/GPTBot',\n anthropic_claude: 'Claude',\n perplexity_bot: 'Perplexity',\n google_ai: 'Google AI',\n microsoft_ai: 'Microsoft Copilot',\n meta_ai: 'Meta AI',\n cohere_bot: 'Cohere',\n huggingface_bot: 'HuggingFace',\n generic_bot: 'Generic Bot',\n dev_tools: 'Development Tool',\n automation_tools: 'Automation Tool',\n };\n return nameMap[agentKey] || agentKey;\n }\n\n /**\n * Infer agent type from name\n */\n private inferAgentType(agentName: string): string {\n const lowerName = agentName.toLowerCase();\n\n if (lowerName.includes('chatgpt') || lowerName.includes('gpt')) return 'openai';\n if (lowerName.includes('claude')) return 'anthropic';\n if (lowerName.includes('perplexity')) return 'perplexity';\n if (lowerName.includes('google')) return 'google';\n if (lowerName.includes('copilot') || lowerName.includes('bing')) return 'microsoft';\n\n return 'unknown';\n }\n\n /**\n * Determine detection class\n */\n private determineDetectionClass(\n isAgent: boolean,\n agentName: string | null,\n confidence: number\n ): DetectionClass {\n if (!isAgent || confidence < CONFIDENCE.THRESHOLD_AGENT) {\n return { type: 'Human' };\n }\n\n if (agentName) {\n const lowerName = agentName.toLowerCase();\n\n // AI agents\n const aiPatterns = ['chatgpt', 'gpt', 'claude', 'perplexity', 'gemini', 'copilot'];\n if (aiPatterns.some((p) => lowerName.includes(p))) {\n return { type: 'AiAgent', agentType: agentName };\n }\n\n // Bots\n if (lowerName.includes('bot') || lowerName.includes('crawler')) {\n return { type: 'Bot', botType: agentName };\n }\n\n // Automation\n if (lowerName.includes('automation') || lowerName.includes('tool')) {\n return { type: 'Automation', toolType: agentName };\n }\n\n return { type: 'AiAgent', agentType: agentName };\n }\n\n return { type: 'Unknown' };\n }\n}\n\n/**\n * Create a rules-based fallback detector\n */\nexport function createRulesDetector(): RulesDetector {\n return new RulesDetector();\n}\n","/**\n * AgentShield WASM Runtime - Node.js Entry\n *\n * Optimized exports for Node.js environments.\n * Uses dynamic WASM loading for Node.js compatibility.\n *\n * @example\n * ```typescript\n * import { createNodeDetector } from '@kya-os/checkpoint-wasm-runtime/node';\n *\n * const detector = createNodeDetector({\n * apiKey: process.env.AGENTSHIELD_API_KEY,\n * });\n *\n * // In Express middleware:\n * app.use(async (req, res, next) => {\n * const result = await detector.detect({\n * userAgent: req.get('User-Agent'),\n * headers: req.headers as Record<string, string>,\n * ipAddress: req.ip,\n * });\n *\n * if (result.shouldBlock) {\n * return res.status(403).send('Forbidden');\n * }\n *\n * req.agentShield = result;\n * next();\n * });\n * ```\n */\n\n// Export types\nexport type {\n IDetectionInput,\n IDetectionResult,\n IDetector,\n IWasmLoader,\n IPolicyLoader,\n ICustomerPolicy,\n IDetectedAgent,\n IDetectorOptions,\n DetectionClass,\n VerificationMethod,\n ForgeabilityRisk,\n} from './types';\n\nexport { CONFIDENCE } from './types';\n\n// Import classes for use in this module\nimport { WasmDetector } from './wasm-detector';\nimport { DynamicWasmLoader, createDynamicLoader } from './loaders/dynamic-loader';\nimport { PolicyLoader, createPolicyLoader } from './policy/policy-loader';\nimport { RulesDetector, createRulesDetector } from './fallback/rules-detector';\n\n// Re-export for consumers\nexport { WasmDetector };\nexport { DynamicWasmLoader, createDynamicLoader };\nexport { PolicyLoader, createPolicyLoader };\nexport { RulesDetector, createRulesDetector };\n\n/**\n * Create a detector for Node.js with dynamic WASM loading\n *\n * @param options - Detector configuration\n */\nexport function createNodeDetector(\n options: import('./types').IDetectorOptions = {}\n): import('./types').IDetector {\n const loader = new DynamicWasmLoader();\n\n let policyLoader: import('./types').IPolicyLoader | undefined;\n if (options.apiKey) {\n policyLoader = new PolicyLoader({\n apiUrl: options.policyApiUrl,\n cacheTTL: options.policyTTL,\n });\n }\n\n return new WasmDetector(loader, policyLoader, options);\n}\n\n/**\n * Create a fallback detector using JavaScript rules\n * Use this when WASM loading fails\n */\nexport function createFallbackDetector(): import('./types').IDetector {\n return new RulesDetector();\n}\n\n/**\n * Extract detection input from an Express-like request object\n */\nexport function extractInputFromExpressRequest(req: {\n headers: Record<string, string | string[] | undefined>;\n ip?: string;\n url?: string;\n method?: string;\n}): import('./types').IDetectionInput {\n // Normalize headers (Express headers can be string or string[])\n const headers: Record<string, string> = {};\n for (const [key, value] of Object.entries(req.headers)) {\n if (value) {\n headers[key] = Array.isArray(value) ? value[0] : value;\n }\n }\n\n return {\n userAgent: headers['user-agent'],\n ipAddress: req.ip || headers['x-forwarded-for']?.split(',')[0]?.trim() || headers['x-real-ip'],\n headers,\n url: req.url,\n method: req.method,\n };\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../wasm/kya-os-engine-web/kya_os_engine.js","../src/engine/adapters/outbound-url-policy.ts","../src/engine/edge.ts","../src/engine/adapters/util.ts","../src/engine/orchestrator/build-agent-request.ts","../src/engine/orchestrator/render-decision.ts","../src/engine/orchestrator/verify-request-edge.ts"],"names":["ptr","verify","verifyRequestEdge"],"mappings":"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","file":"orchestrator-edge.js","sourcesContent":["let wasm;\n\nlet cachedUint8ArrayMemory0 = null;\n\nfunction getUint8ArrayMemory0() {\n if (cachedUint8ArrayMemory0 === null || cachedUint8ArrayMemory0.byteLength === 0) {\n cachedUint8ArrayMemory0 = new Uint8Array(wasm.memory.buffer);\n }\n return cachedUint8ArrayMemory0;\n}\n\nlet cachedTextDecoder = new TextDecoder('utf-8', { ignoreBOM: true, fatal: true });\n\ncachedTextDecoder.decode();\n\nconst MAX_SAFARI_DECODE_BYTES = 2146435072;\nlet numBytesDecoded = 0;\nfunction decodeText(ptr, len) {\n numBytesDecoded += len;\n if (numBytesDecoded >= MAX_SAFARI_DECODE_BYTES) {\n cachedTextDecoder = new TextDecoder('utf-8', { ignoreBOM: true, fatal: true });\n cachedTextDecoder.decode();\n numBytesDecoded = len;\n }\n return cachedTextDecoder.decode(getUint8ArrayMemory0().subarray(ptr, ptr + len));\n}\n\nfunction getStringFromWasm0(ptr, len) {\n ptr = ptr >>> 0;\n return decodeText(ptr, len);\n}\n\nlet heap = new Array(128).fill(undefined);\n\nheap.push(undefined, null, true, false);\n\nlet heap_next = heap.length;\n\nfunction addHeapObject(obj) {\n if (heap_next === heap.length) heap.push(heap.length + 1);\n const idx = heap_next;\n heap_next = heap[idx];\n\n heap[idx] = obj;\n return idx;\n}\n\nfunction getObject(idx) { return heap[idx]; }\n\nlet WASM_VECTOR_LEN = 0;\n\nconst cachedTextEncoder = new TextEncoder();\n\nif (!('encodeInto' in cachedTextEncoder)) {\n cachedTextEncoder.encodeInto = function (arg, view) {\n const buf = cachedTextEncoder.encode(arg);\n view.set(buf);\n return {\n read: arg.length,\n written: buf.length\n };\n }\n}\n\nfunction passStringToWasm0(arg, malloc, realloc) {\n\n if (realloc === undefined) {\n const buf = cachedTextEncoder.encode(arg);\n const ptr = malloc(buf.length, 1) >>> 0;\n getUint8ArrayMemory0().subarray(ptr, ptr + buf.length).set(buf);\n WASM_VECTOR_LEN = buf.length;\n return ptr;\n }\n\n let len = arg.length;\n let ptr = malloc(len, 1) >>> 0;\n\n const mem = getUint8ArrayMemory0();\n\n let offset = 0;\n\n for (; offset < len; offset++) {\n const code = arg.charCodeAt(offset);\n if (code > 0x7F) break;\n mem[ptr + offset] = code;\n }\n\n if (offset !== len) {\n if (offset !== 0) {\n arg = arg.slice(offset);\n }\n ptr = realloc(ptr, len, len = offset + arg.length * 3, 1) >>> 0;\n const view = getUint8ArrayMemory0().subarray(ptr + offset, ptr + len);\n const ret = cachedTextEncoder.encodeInto(arg, view);\n\n offset += ret.written;\n ptr = realloc(ptr, len, offset, 1) >>> 0;\n }\n\n WASM_VECTOR_LEN = offset;\n return ptr;\n}\n\nlet cachedDataViewMemory0 = null;\n\nfunction getDataViewMemory0() {\n if (cachedDataViewMemory0 === null || cachedDataViewMemory0.buffer.detached === true || (cachedDataViewMemory0.buffer.detached === undefined && cachedDataViewMemory0.buffer !== wasm.memory.buffer)) {\n cachedDataViewMemory0 = new DataView(wasm.memory.buffer);\n }\n return cachedDataViewMemory0;\n}\n\nfunction isLikeNone(x) {\n return x === undefined || x === null;\n}\n\nfunction debugString(val) {\n // primitive types\n const type = typeof val;\n if (type == 'number' || type == 'boolean' || val == null) {\n return `${val}`;\n }\n if (type == 'string') {\n return `\"${val}\"`;\n }\n if (type == 'symbol') {\n const description = val.description;\n if (description == null) {\n return 'Symbol';\n } else {\n return `Symbol(${description})`;\n }\n }\n if (type == 'function') {\n const name = val.name;\n if (typeof name == 'string' && name.length > 0) {\n return `Function(${name})`;\n } else {\n return 'Function';\n }\n }\n // objects\n if (Array.isArray(val)) {\n const length = val.length;\n let debug = '[';\n if (length > 0) {\n debug += debugString(val[0]);\n }\n for(let i = 1; i < length; i++) {\n debug += ', ' + debugString(val[i]);\n }\n debug += ']';\n return debug;\n }\n // Test for built-in\n const builtInMatches = /\\[object ([^\\]]+)\\]/.exec(toString.call(val));\n let className;\n if (builtInMatches && builtInMatches.length > 1) {\n className = builtInMatches[1];\n } else {\n // Failed to match the standard '[object ClassName]'\n return toString.call(val);\n }\n if (className == 'Object') {\n // we're a user defined class or Object\n // JSON.stringify avoids problems with cycles, and is generally much\n // easier than looping through ownProperties of `val`.\n try {\n return 'Object(' + JSON.stringify(val) + ')';\n } catch (_) {\n return 'Object';\n }\n }\n // errors\n if (val instanceof Error) {\n return `${val.name}: ${val.message}\\n${val.stack}`;\n }\n // TODO we could test for more things here, like `Set`s and `Map`s.\n return className;\n}\n\nfunction handleError(f, args) {\n try {\n return f.apply(this, args);\n } catch (e) {\n wasm.__wbindgen_export3(addHeapObject(e));\n }\n}\n\nfunction getArrayU8FromWasm0(ptr, len) {\n ptr = ptr >>> 0;\n return getUint8ArrayMemory0().subarray(ptr / 1, ptr / 1 + len);\n}\n\nfunction dropObject(idx) {\n if (idx < 132) return;\n heap[idx] = heap_next;\n heap_next = idx;\n}\n\nfunction takeObject(idx) {\n const ret = getObject(idx);\n dropObject(idx);\n return ret;\n}\n/**\n * Cross-boundary `verify` wrapper. The JS host calls `engine.verify(input,\n * ctxSpec)`; on success it gets a [`VerifyResult`] JSON object; on\n * infrastructure failure (or malformed input) it gets a thrown JS error\n * whose message names the failure mode.\n *\n * **Error semantics**:\n *\n * - Verification *verdicts* (Block/Challenge/etc.) surface inside the\n * returned `VerifyResult` — they are not thrown.\n * - Engine [`VerifyError`][crate::error::VerifyError] (resolver / cache /\n * reputation / policy infra failures) surface as thrown JS errors.\n * - Serde deserialisation failures (malformed JS input) surface as thrown\n * JS errors too, mirroring the typed-vs-thrown split.\n *\n * # JS signature\n *\n * ```ts\n * function verify(input: AgentRequest, ctx: ContextSpec): VerifyResult;\n * ```\n * @param {any} input_js\n * @param {any} ctx_js\n * @returns {any}\n */\nexport function verify(input_js, ctx_js) {\n try {\n const retptr = wasm.__wbindgen_add_to_stack_pointer(-16);\n wasm.verify(retptr, addHeapObject(input_js), addHeapObject(ctx_js));\n var r0 = getDataViewMemory0().getInt32(retptr + 4 * 0, true);\n var r1 = getDataViewMemory0().getInt32(retptr + 4 * 1, true);\n var r2 = getDataViewMemory0().getInt32(retptr + 4 * 2, true);\n if (r2) {\n throw takeObject(r1);\n }\n return takeObject(r0);\n } finally {\n wasm.__wbindgen_add_to_stack_pointer(16);\n }\n}\n\nconst EXPECTED_RESPONSE_TYPES = new Set(['basic', 'cors', 'default']);\n\nasync function __wbg_load(module, imports) {\n if (typeof Response === 'function' && module instanceof Response) {\n if (typeof WebAssembly.instantiateStreaming === 'function') {\n try {\n return await WebAssembly.instantiateStreaming(module, imports);\n\n } catch (e) {\n const validResponse = module.ok && EXPECTED_RESPONSE_TYPES.has(module.type);\n\n if (validResponse && module.headers.get('Content-Type') !== 'application/wasm') {\n console.warn(\"`WebAssembly.instantiateStreaming` failed because your server does not serve Wasm with `application/wasm` MIME type. Falling back to `WebAssembly.instantiate` which is slower. Original error:\\n\", e);\n\n } else {\n throw e;\n }\n }\n }\n\n const bytes = await module.arrayBuffer();\n return await WebAssembly.instantiate(bytes, imports);\n\n } else {\n const instance = await WebAssembly.instantiate(module, imports);\n\n if (instance instanceof WebAssembly.Instance) {\n return { instance, module };\n\n } else {\n return instance;\n }\n }\n}\n\nfunction __wbg_get_imports() {\n const imports = {};\n imports.wbg = {};\n imports.wbg.__wbg_Error_e83987f665cf5504 = function(arg0, arg1) {\n const ret = Error(getStringFromWasm0(arg0, arg1));\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_Number_bb48ca12f395cd08 = function(arg0) {\n const ret = Number(getObject(arg0));\n return ret;\n };\n imports.wbg.__wbg_String_8f0eb39a4a4c2f66 = function(arg0, arg1) {\n const ret = String(getObject(arg1));\n const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_export, wasm.__wbindgen_export2);\n const len1 = WASM_VECTOR_LEN;\n getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true);\n getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true);\n };\n imports.wbg.__wbg___wbindgen_bigint_get_as_i64_f3ebc5a755000afd = function(arg0, arg1) {\n const v = getObject(arg1);\n const ret = typeof(v) === 'bigint' ? v : undefined;\n getDataViewMemory0().setBigInt64(arg0 + 8 * 1, isLikeNone(ret) ? BigInt(0) : ret, true);\n getDataViewMemory0().setInt32(arg0 + 4 * 0, !isLikeNone(ret), true);\n };\n imports.wbg.__wbg___wbindgen_boolean_get_6d5a1ee65bab5f68 = function(arg0) {\n const v = getObject(arg0);\n const ret = typeof(v) === 'boolean' ? v : undefined;\n return isLikeNone(ret) ? 0xFFFFFF : ret ? 1 : 0;\n };\n imports.wbg.__wbg___wbindgen_debug_string_df47ffb5e35e6763 = function(arg0, arg1) {\n const ret = debugString(getObject(arg1));\n const ptr1 = passStringToWasm0(ret, wasm.__wbindgen_export, wasm.__wbindgen_export2);\n const len1 = WASM_VECTOR_LEN;\n getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true);\n getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true);\n };\n imports.wbg.__wbg___wbindgen_in_bb933bd9e1b3bc0f = function(arg0, arg1) {\n const ret = getObject(arg0) in getObject(arg1);\n return ret;\n };\n imports.wbg.__wbg___wbindgen_is_bigint_cb320707dcd35f0b = function(arg0) {\n const ret = typeof(getObject(arg0)) === 'bigint';\n return ret;\n };\n imports.wbg.__wbg___wbindgen_is_function_ee8a6c5833c90377 = function(arg0) {\n const ret = typeof(getObject(arg0)) === 'function';\n return ret;\n };\n imports.wbg.__wbg___wbindgen_is_object_c818261d21f283a4 = function(arg0) {\n const val = getObject(arg0);\n const ret = typeof(val) === 'object' && val !== null;\n return ret;\n };\n imports.wbg.__wbg___wbindgen_is_string_fbb76cb2940daafd = function(arg0) {\n const ret = typeof(getObject(arg0)) === 'string';\n return ret;\n };\n imports.wbg.__wbg___wbindgen_is_undefined_2d472862bd29a478 = function(arg0) {\n const ret = getObject(arg0) === undefined;\n return ret;\n };\n imports.wbg.__wbg___wbindgen_jsval_eq_6b13ab83478b1c50 = function(arg0, arg1) {\n const ret = getObject(arg0) === getObject(arg1);\n return ret;\n };\n imports.wbg.__wbg___wbindgen_jsval_loose_eq_b664b38a2f582147 = function(arg0, arg1) {\n const ret = getObject(arg0) == getObject(arg1);\n return ret;\n };\n imports.wbg.__wbg___wbindgen_number_get_a20bf9b85341449d = function(arg0, arg1) {\n const obj = getObject(arg1);\n const ret = typeof(obj) === 'number' ? obj : undefined;\n getDataViewMemory0().setFloat64(arg0 + 8 * 1, isLikeNone(ret) ? 0 : ret, true);\n getDataViewMemory0().setInt32(arg0 + 4 * 0, !isLikeNone(ret), true);\n };\n imports.wbg.__wbg___wbindgen_string_get_e4f06c90489ad01b = function(arg0, arg1) {\n const obj = getObject(arg1);\n const ret = typeof(obj) === 'string' ? obj : undefined;\n var ptr1 = isLikeNone(ret) ? 0 : passStringToWasm0(ret, wasm.__wbindgen_export, wasm.__wbindgen_export2);\n var len1 = WASM_VECTOR_LEN;\n getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true);\n getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true);\n };\n imports.wbg.__wbg___wbindgen_throw_b855445ff6a94295 = function(arg0, arg1) {\n throw new Error(getStringFromWasm0(arg0, arg1));\n };\n imports.wbg.__wbg_call_e762c39fa8ea36bf = function() { return handleError(function (arg0, arg1) {\n const ret = getObject(arg0).call(getObject(arg1));\n return addHeapObject(ret);\n }, arguments) };\n imports.wbg.__wbg_done_2042aa2670fb1db1 = function(arg0) {\n const ret = getObject(arg0).done;\n return ret;\n };\n imports.wbg.__wbg_entries_e171b586f8f6bdbf = function(arg0) {\n const ret = Object.entries(getObject(arg0));\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_get_7bed016f185add81 = function(arg0, arg1) {\n const ret = getObject(arg0)[arg1 >>> 0];\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_get_efcb449f58ec27c2 = function() { return handleError(function (arg0, arg1) {\n const ret = Reflect.get(getObject(arg0), getObject(arg1));\n return addHeapObject(ret);\n }, arguments) };\n imports.wbg.__wbg_get_with_ref_key_1dc361bd10053bfe = function(arg0, arg1) {\n const ret = getObject(arg0)[getObject(arg1)];\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_instanceof_ArrayBuffer_70beb1189ca63b38 = function(arg0) {\n let result;\n try {\n result = getObject(arg0) instanceof ArrayBuffer;\n } catch (_) {\n result = false;\n }\n const ret = result;\n return ret;\n };\n imports.wbg.__wbg_instanceof_Map_8579b5e2ab5437c7 = function(arg0) {\n let result;\n try {\n result = getObject(arg0) instanceof Map;\n } catch (_) {\n result = false;\n }\n const ret = result;\n return ret;\n };\n imports.wbg.__wbg_instanceof_Uint8Array_20c8e73002f7af98 = function(arg0) {\n let result;\n try {\n result = getObject(arg0) instanceof Uint8Array;\n } catch (_) {\n result = false;\n }\n const ret = result;\n return ret;\n };\n imports.wbg.__wbg_isArray_96e0af9891d0945d = function(arg0) {\n const ret = Array.isArray(getObject(arg0));\n return ret;\n };\n imports.wbg.__wbg_isSafeInteger_d216eda7911dde36 = function(arg0) {\n const ret = Number.isSafeInteger(getObject(arg0));\n return ret;\n };\n imports.wbg.__wbg_iterator_e5822695327a3c39 = function() {\n const ret = Symbol.iterator;\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_length_69bca3cb64fc8748 = function(arg0) {\n const ret = getObject(arg0).length;\n return ret;\n };\n imports.wbg.__wbg_length_cdd215e10d9dd507 = function(arg0) {\n const ret = getObject(arg0).length;\n return ret;\n };\n imports.wbg.__wbg_new_1acc0b6eea89d040 = function() {\n const ret = new Object();\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_new_5a79be3ab53b8aa5 = function(arg0) {\n const ret = new Uint8Array(getObject(arg0));\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_new_68651c719dcda04e = function() {\n const ret = new Map();\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_new_e17d9f43105b08be = function() {\n const ret = new Array();\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_next_020810e0ae8ebcb0 = function() { return handleError(function (arg0) {\n const ret = getObject(arg0).next();\n return addHeapObject(ret);\n }, arguments) };\n imports.wbg.__wbg_next_2c826fe5dfec6b6a = function(arg0) {\n const ret = getObject(arg0).next;\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_prototypesetcall_2a6620b6922694b2 = function(arg0, arg1, arg2) {\n Uint8Array.prototype.set.call(getArrayU8FromWasm0(arg0, arg1), getObject(arg2));\n };\n imports.wbg.__wbg_set_3f1d0b984ed272ed = function(arg0, arg1, arg2) {\n getObject(arg0)[takeObject(arg1)] = takeObject(arg2);\n };\n imports.wbg.__wbg_set_907fb406c34a251d = function(arg0, arg1, arg2) {\n const ret = getObject(arg0).set(getObject(arg1), getObject(arg2));\n return addHeapObject(ret);\n };\n imports.wbg.__wbg_set_c213c871859d6500 = function(arg0, arg1, arg2) {\n getObject(arg0)[arg1 >>> 0] = takeObject(arg2);\n };\n imports.wbg.__wbg_value_692627309814bb8c = function(arg0) {\n const ret = getObject(arg0).value;\n return addHeapObject(ret);\n };\n imports.wbg.__wbindgen_cast_2241b6af4c4b2941 = function(arg0, arg1) {\n // Cast intrinsic for `Ref(String) -> Externref`.\n const ret = getStringFromWasm0(arg0, arg1);\n return addHeapObject(ret);\n };\n imports.wbg.__wbindgen_cast_4625c577ab2ec9ee = function(arg0) {\n // Cast intrinsic for `U64 -> Externref`.\n const ret = BigInt.asUintN(64, arg0);\n return addHeapObject(ret);\n };\n imports.wbg.__wbindgen_cast_9ae0607507abb057 = function(arg0) {\n // Cast intrinsic for `I64 -> Externref`.\n const ret = arg0;\n return addHeapObject(ret);\n };\n imports.wbg.__wbindgen_cast_d6cd19b81560fd6e = function(arg0) {\n // Cast intrinsic for `F64 -> Externref`.\n const ret = arg0;\n return addHeapObject(ret);\n };\n imports.wbg.__wbindgen_object_clone_ref = function(arg0) {\n const ret = getObject(arg0);\n return addHeapObject(ret);\n };\n imports.wbg.__wbindgen_object_drop_ref = function(arg0) {\n takeObject(arg0);\n };\n\n return imports;\n}\n\nfunction __wbg_finalize_init(instance, module) {\n wasm = instance.exports;\n __wbg_init.__wbindgen_wasm_module = module;\n cachedDataViewMemory0 = null;\n cachedUint8ArrayMemory0 = null;\n\n\n\n return wasm;\n}\n\nfunction initSync(module) {\n if (wasm !== undefined) return wasm;\n\n\n if (typeof module !== 'undefined') {\n if (Object.getPrototypeOf(module) === Object.prototype) {\n ({module} = module)\n } else {\n console.warn('using deprecated parameters for `initSync()`; pass a single object instead')\n }\n }\n\n const imports = __wbg_get_imports();\n\n if (!(module instanceof WebAssembly.Module)) {\n module = new WebAssembly.Module(module);\n }\n\n const instance = new WebAssembly.Instance(module, imports);\n\n return __wbg_finalize_init(instance, module);\n}\n\nasync function __wbg_init(module_or_path) {\n if (wasm !== undefined) return wasm;\n\n\n if (typeof module_or_path !== 'undefined') {\n if (Object.getPrototypeOf(module_or_path) === Object.prototype) {\n ({module_or_path} = module_or_path)\n } else {\n console.warn('using deprecated parameters for the initialization function; pass a single object instead')\n }\n }\n\n if (typeof module_or_path === 'undefined') {\n module_or_path = new URL('kya_os_engine_bg.wasm', import.meta.url);\n }\n const imports = __wbg_get_imports();\n\n if (typeof module_or_path === 'string' || (typeof Request === 'function' && module_or_path instanceof Request) || (typeof URL === 'function' && module_or_path instanceof URL)) {\n module_or_path = fetch(module_or_path);\n }\n\n const { instance, module } = await __wbg_load(await module_or_path, imports);\n\n return __wbg_finalize_init(instance, module);\n}\n\nexport { initSync };\nexport default __wbg_init;\n","/**\n * Shared egress guard for verifier-owned outbound fetches.\n *\n * MCP-I payloads are attacker controlled until the signature verifies. Any\n * host-side fetch derived from that payload must reject obvious local/private\n * targets before invoking `fetch`.\n */\n\nconst BLOCKED_HOSTNAMES = new Set(['localhost', 'metadata', 'metadata.google.internal']);\n\nexport class UnsafeOutboundUrl extends Error {\n readonly kind = 'UnsafeOutboundUrl';\n}\n\nexport function assertSafeHttpsUrl(rawUrl: string, label = 'outbound URL'): string {\n let parsed: URL;\n try {\n parsed = new URL(rawUrl);\n } catch {\n throw new UnsafeOutboundUrl(`${label} must be a valid URL: ${rawUrl}`);\n }\n\n if (parsed.protocol !== 'https:') {\n throw new UnsafeOutboundUrl(`${label} must use https: ${rawUrl}`);\n }\n if (parsed.username || parsed.password) {\n throw new UnsafeOutboundUrl(`${label} must not contain credentials: ${rawUrl}`);\n }\n\n const hostname = normalizeHostname(parsed.hostname);\n if (!hostname || isBlockedHostname(hostname)) {\n throw new UnsafeOutboundUrl(`${label} targets a local or private host: ${rawUrl}`);\n }\n\n return rawUrl;\n}\n\nfunction normalizeHostname(hostname: string): string {\n let normalized = hostname.trim().toLowerCase();\n if (normalized.startsWith('[') && normalized.endsWith(']')) {\n normalized = normalized.slice(1, -1);\n }\n while (normalized.endsWith('.')) {\n normalized = normalized.slice(0, -1);\n }\n return normalized;\n}\n\nfunction isBlockedHostname(hostname: string): boolean {\n if (BLOCKED_HOSTNAMES.has(hostname) || hostname.endsWith('.localhost')) {\n return true;\n }\n\n const ipv4 = parseIpv4(hostname);\n if (ipv4) {\n return isBlockedIpv4(ipv4);\n }\n\n return isBlockedIpv6(hostname);\n}\n\nfunction parseIpv4(hostname: string): [number, number, number, number] | null {\n const parts = hostname.split('.');\n if (parts.length !== 4) return null;\n\n const octets = parts.map((part) => {\n if (!/^\\d{1,3}$/.test(part)) return Number.NaN;\n const value = Number(part);\n return value >= 0 && value <= 255 ? value : Number.NaN;\n });\n\n if (octets.some(Number.isNaN)) return null;\n return octets as [number, number, number, number];\n}\n\nfunction isBlockedIpv4([a, b]: [number, number, number, number]): boolean {\n return (\n a === 0 ||\n a === 10 ||\n a === 127 ||\n (a === 100 && b >= 64 && b <= 127) ||\n (a === 169 && b === 254) ||\n (a === 172 && b >= 16 && b <= 31) ||\n (a === 192 && b === 168) ||\n (a === 198 && (b === 18 || b === 19)) ||\n a >= 224\n );\n}\n\nfunction isBlockedIpv6(hostname: string): boolean {\n if (!hostname.includes(':')) return false;\n\n const ipv4Mapped = hostname.match(/(?:^|:)ffff:(\\d{1,3}(?:\\.\\d{1,3}){3})$/);\n if (ipv4Mapped) {\n const ipv4 = parseIpv4(ipv4Mapped[1]);\n return ipv4 ? isBlockedIpv4(ipv4) : true;\n }\n\n if (hostname === '::' || hostname === '::1' || hostname === '0:0:0:0:0:0:0:1') {\n return true;\n }\n\n const firstSegment = Number.parseInt(hostname.split(':')[0] || '0', 16);\n if (Number.isNaN(firstSegment)) return true;\n\n return (\n (firstSegment & 0xfe00) === 0xfc00 || // unique local fc00::/7\n (firstSegment & 0xffc0) === 0xfe80 || // link-local fe80::/10\n (firstSegment & 0xff00) === 0xff00 // multicast ff00::/8\n );\n}\n","/**\n * `kya-os-engine` WASM bridge for edge runtimes — Edge-WASM-1.\n *\n * The Node target (`./index.ts`) uses `fs.readFileSync` at module\n * load and exposes a sync `engineVerify`. That's incompatible with\n * Vercel Edge / Cloudflare Workers / browser embedding (no `fs`,\n * no sync wasm load).\n *\n * This module loads the `wasm-pack --target web` artifact via the\n * async `__wbg_init` default export, then exposes the same typed\n * `engineVerifyEdge(input, ctx) → Promise<VerifyResult>` shape with\n * a small lazy-init wrapper. First call awaits initialisation;\n * subsequent calls resolve synchronously on the JS side (the\n * underlying wasm `verify` is sync).\n *\n * **Why this matters for the consolidation narrative.** Phase A\n * shipped Node-only. Without an edge build, the first Vercel-edge\n * or Cloudflare-Workers deployment after Phase D would hit the\n * same wasm-bindgen-on-edge wall the Sites-1 F3 workaround was\n * created to dodge — and someone would re-introduce the\n * inline-TS detector that Q10 ratified deleting. Shipping the\n * edge target alongside the Node target keeps Phase D's\n * deletion narrative durable.\n */\n\nimport type { AgentRequest, ContextSpec, VerifyResult } from './types';\n\n// The `--target web` artifact exports `init` (default, async) and the\n// `verify` function. We dynamic-import it to keep this module's top\n// level free of side effects — important for edge runtimes that\n// statically analyse for `fs` / `node:` imports at deploy time.\n\ntype VerifyFn = (input: unknown, ctx: unknown) => unknown;\ntype InitFn = (\n moduleOrPath?: WebAssembly.Module | URL | string | Request | BufferSource\n) => Promise<unknown>;\n\nlet initialised: Promise<VerifyFn> | null = null;\n\n/**\n * Initialise the edge wasm module. Idempotent — subsequent calls\n * return the same in-flight or resolved promise. Host wrappers can\n * call this at startup to eagerly load the wasm and avoid first-\n * request latency, but it's not required: `engineVerifyEdge`\n * lazily initialises on first call.\n *\n * @param moduleOrPath Optional pre-fetched `WebAssembly.Module` or\n * a URL / Request the wasm-bindgen loader will\n * fetch. Defaults to the bundled artifact via\n * `import.meta.url`. Cloudflare Workers / Vercel\n * Edge typically pass a pre-bundled `Module`.\n */\nexport function initEngineEdge(\n moduleOrPath?: WebAssembly.Module | URL | string | Request | BufferSource\n): Promise<void> {\n return ensureReady(moduleOrPath).then(() => undefined);\n}\n\nfunction ensureReady(\n moduleOrPath?: WebAssembly.Module | URL | string | Request | BufferSource\n): Promise<VerifyFn> {\n if (initialised) return initialised;\n\n // Dynamic import keeps this module's top level free of side\n // effects — important for edge runtimes that statically analyse\n // imports at deploy time. The generated wasm-bindgen module\n // has no static `.d.ts` types we can rely on; cast at the\n // boundary.\n const pending = (async () => {\n const mod = (await import('../../wasm/kya-os-engine-web/kya_os_engine.js')) as unknown as {\n default: InitFn;\n verify: VerifyFn;\n };\n // wasm-bindgen's generated init accepts EITHER an undefined\n // (use bundled wasm via `import.meta.url`) OR a `{ module_or_path }`\n // object. Passing the raw value triggers a `console.warn` on\n // every startup (\"using deprecated parameters for the\n // initialization function; pass a single object instead\").\n // Wrap explicitly to avoid the spurious warning that would\n // otherwise hit every Cloudflare Workers / Vercel Edge boot.\n await mod.default(moduleOrPath !== undefined ? { module_or_path: moduleOrPath } : undefined);\n return mod.verify;\n })();\n\n // Cache the in-flight promise so concurrent callers join the\n // same init. On rejection, clear the cache so subsequent calls\n // (including a retry with valid input) can re-attempt; the\n // pre-fix behavior cached the rejection forever.\n initialised = pending;\n pending.catch(() => {\n if (initialised === pending) {\n initialised = null;\n }\n });\n return initialised;\n}\n\n/**\n * Edge-runtime async equivalent of `engineVerify`.\n *\n * Identical contract (typed `AgentRequest` + `ContextSpec` in,\n * typed `VerifyResult` out) — only the return type changes from\n * `VerifyResult` to `Promise<VerifyResult>` because the underlying\n * wasm artifact is loaded async on this target.\n *\n * @throws If `engineVerify` rejects the input (deserialisation\n * failure) or the engine returns a `VerifyError`. Verdicts\n * surface inside the returned `VerifyResult`, not as throws.\n */\nexport async function engineVerifyEdge(\n input: AgentRequest,\n ctx: ContextSpec\n): Promise<VerifyResult> {\n const verify = await ensureReady();\n return verify(input, ctx) as VerifyResult;\n}\n\n// Re-export every typed shape so edge consumers don't need a second\n// import line for the ABI types.\nexport type {\n AgentRequest,\n A2ARequest,\n A2PRequest,\n BlockReason,\n ChallengeParams,\n ContextSpec,\n Decision,\n DidDocument,\n EngineInfo,\n EnforcementMode,\n HttpSignedRequest,\n InstructPayload,\n KeyType,\n McpIPayload,\n McpIRequest,\n PlainHttpRequest,\n RedirectTarget,\n SuggestedAction,\n VerificationMethod,\n VerifyResult,\n} from './types';\n","/**\n * Shared utilities for the Phase B adapters.\n *\n * Anything used by more than one adapter belongs here so a future\n * bug fix touches one site, not N.\n */\n\n/**\n * base64url decode without external deps. Pads if necessary,\n * substitutes URL-safe chars, returns the raw bytes as `Uint8Array`.\n * RFC 4648 § 5 — characters `-` and `_` substitute for `+` and `/`;\n * padding `=` is optional and stripped in URL contexts.\n */\nexport function base64UrlDecode(input: string): Uint8Array {\n const padded = input.replace(/-/g, '+').replace(/_/g, '/');\n const padding = padded.length % 4 === 0 ? '' : '='.repeat(4 - (padded.length % 4));\n return new Uint8Array(Buffer.from(padded + padding, 'base64'));\n}\n","/**\n * HTTP-to-`AgentRequest` translator — Phase C.1.\n *\n * Detects which engine protocol the request belongs to and builds\n * the typed `AgentRequest` the WASM consumes. Conservative\n * detection: never escalates an ambiguous request into a higher\n * verification tier. Anonymous PlainHttp is the default.\n *\n * **What this layer parses and what it doesn't.** It parses *only\n * what's needed to drive conditional pre-fetch* — header presence,\n * the MCP-I envelope's payload segment (to extract `iss` + `sub` +\n * optional credentialStatus URL). It does **not** verify\n * signatures, decode VC chains for revocation bits, or evaluate\n * scope. Those live in the engine (H-1's parser + Stages 2-5).\n *\n * **Buffer-portability note.** This module uses `Buffer.from(...)` and\n * `Buffer.isBuffer(...)` at multiple call sites (the JWS preflight\n * `hasMalformedJwsBody`, both `tryBuildMcpIFromBody` variants, the\n * legacy-header reconstitution path, and `bodyAsBytes`). All of these\n * assume the Node `Buffer` global is available — provided natively by\n * the Node runtime, polyfilled on Vercel Edge, and gated behind\n * `nodejs_compat` on Cloudflare Workers. Bare-Edge and pure-browser\n * embedders would need a `Buffer` polyfill or a refactor to\n * `TextEncoder` / `Uint8Array.from`. Tracked as a follow-up since\n * Phase D's Vercel Node + Vercel Edge targets are both covered today.\n */\n\nimport { base64UrlDecode } from '../adapters/util';\nimport type {\n AgentRequest,\n HttpSignedRequest,\n McpIPayload,\n McpIRequest,\n PlainHttpRequest,\n} from '../types';\n\nimport type { IncomingHttpLike } from './types';\n\n// -----------------------------------------------------------------------------\n// Public surface.\n// -----------------------------------------------------------------------------\n\nexport interface BuildAgentRequestOpts {\n /** See `VerifyRequestOpts.legacyEnvelopeFallback`. */\n legacyEnvelopeFallback?: boolean;\n}\n\n/**\n * Translate an HTTP-like request into the engine's `AgentRequest`.\n *\n * Detection order (conservative — never escalate ambiguous input):\n * 1. MCP-I L2 detached proof in `_meta.proof.jws` (spec form).\n * 2. (Legacy, opt-in) MCP-I in `KYA-Delegation` header\n * (Envelope-1 #2537 transition window only).\n * 3. RFC 9421 HTTP Message Signatures (`Signature-Input` header).\n * 4. PlainHttp (default — anonymous traffic).\n */\nexport function buildAgentRequest(\n req: IncomingHttpLike,\n opts: BuildAgentRequestOpts = {}\n): AgentRequest {\n // 1. MCP-I L2 detached proof — spec form, body's `_meta.proof.jws`.\n const mcpI = tryBuildMcpIFromBody(req);\n if (mcpI) {\n return { protocol: 'McpI', request: mcpI };\n }\n\n // 2. MCP-I legacy header (Envelope-1 transition only).\n if (opts.legacyEnvelopeFallback) {\n const legacyMcpI = tryBuildMcpIFromLegacyHeader(req);\n if (legacyMcpI) {\n return { protocol: 'McpI', request: legacyMcpI };\n }\n }\n\n // 3. RFC 9421 HTTP Message Signatures.\n if (getHeader(req, 'signature-input')) {\n return { protocol: 'HttpSigned', request: buildHttpSigned(req) };\n }\n\n // 4. Default — anonymous PlainHttp.\n return { protocol: 'PlainHttp', request: buildPlainHttp(req) };\n}\n\n/**\n * Preflight check — does the request body carry a `_meta.proof.jws`\n * string that `parseJwsPayloadStruct` cannot project into a typed\n * `McpIPayload`?\n *\n * The caller declared intent (an MCP-I envelope) by including the\n * JWS field; structural failure to extract the payload means the\n * envelope is malformed, not absent. Without this preflight, the\n * orchestrator would silently fall through to PlainHttp — pre-#2560\n * that happened to also Block (engine returned `Block(ParseError)`\n * for every PlainHttp), so the regression was invisible; post-#2560\n * the engine's Stage 1 + stub policy returns `Permit` for anonymous\n * PlainHttp and tampered envelopes would be silently accepted.\n *\n * Returns `true` when the orchestrator should synthesize\n * `Block(ParseError)` BEFORE calling `buildAgentRequest`.\n */\nexport function hasMalformedJwsBody(req: IncomingHttpLike): boolean {\n const parsed = parseBodyAsObject(req.body);\n if (!parsed || typeof parsed !== 'object') return false;\n const meta = (parsed as Record<string, unknown>)._meta;\n if (!meta || typeof meta !== 'object') return false;\n const proof = (meta as Record<string, unknown>).proof;\n if (!proof || typeof proof !== 'object') return false;\n const jws = (proof as Record<string, unknown>).jws;\n if (typeof jws !== 'string' || jws.length === 0) return false;\n const raw = Array.from(Buffer.from(jws, 'utf8'));\n return parseJwsPayloadStruct(raw) === null;\n}\n\n// -----------------------------------------------------------------------------\n// Identifier extractors — drive conditional pre-fetch in Phase C.2.\n// -----------------------------------------------------------------------------\n\n/**\n * Issuer DID — Stage 1 (identity resolution) targets this. `null`\n * for PlainHttp (anonymous → no DID to resolve).\n */\nexport function extractIssuer(request: AgentRequest): string | null {\n if (request.protocol === 'McpI') return request.request.payload.iss || null;\n return null;\n}\n\n/**\n * Agent DID — used by ReputationOracle. Defaults to `payload.sub`\n * for MCP-I (subject = the agent the proof is *about*).\n */\nexport function extractAgentDid(request: AgentRequest): string | null {\n if (request.protocol === 'McpI') return request.request.payload.sub || null;\n return null;\n}\n\n/**\n * Status-list URL for revocation pre-fetch. Pulled from the JWS\n * payload's `vc.credentialStatus.id` (W3C VC Data Model 1.1).\n * `null` when the envelope is L1 (no VC chain) — Stage 3 will skip.\n */\nexport function extractCredentialStatusUrl(request: AgentRequest): string | null {\n if (request.protocol !== 'McpI') return null;\n // Re-parse the JWS payload as raw JSON to reach the `vc` claim;\n // the typed `McpIPayload` deliberately omits it.\n const raw = decodeJwsPayloadJson(request.request.raw);\n if (!raw) return null;\n const vc = (raw as Record<string, unknown>).vc;\n if (!vc || typeof vc !== 'object') return null;\n const credentialStatus = (vc as Record<string, unknown>).credentialStatus;\n if (!credentialStatus || typeof credentialStatus !== 'object') return null;\n const id = (credentialStatus as Record<string, unknown>).id;\n return typeof id === 'string' ? id : null;\n}\n\n// -----------------------------------------------------------------------------\n// MCP-I — spec form (`_meta.proof.jws`).\n// -----------------------------------------------------------------------------\n\nfunction tryBuildMcpIFromBody(req: IncomingHttpLike): McpIRequest | null {\n const parsed = parseBodyAsObject(req.body);\n if (!parsed) return null;\n const meta = (parsed as Record<string, unknown>)._meta;\n if (!meta || typeof meta !== 'object') return null;\n const proof = (meta as Record<string, unknown>).proof;\n if (!proof || typeof proof !== 'object') return null;\n const jws = (proof as Record<string, unknown>).jws;\n if (typeof jws !== 'string' || jws.length === 0) return null;\n\n const raw = Array.from(Buffer.from(jws, 'utf8'));\n const payload = parseJwsPayloadStruct(raw);\n if (!payload) return null;\n return { raw, payload };\n}\n\nfunction parseBodyAsObject(body: unknown): unknown {\n if (!body) return null;\n // Buffer check MUST come before the generic `typeof === 'object'`\n // branch — `typeof <Buffer> === 'object'` in JavaScript, so the\n // naive ordering would return the raw Buffer instance instead of\n // a parsed object, and `tryBuildMcpIFromBody` would silently fail\n // to find `_meta.proof.jws` (which Express middleware passing\n // `req.body` as a Buffer exercises). Bugbot caught the ordering\n // on the initial Phase C drop.\n if (Buffer.isBuffer(body)) {\n try {\n return JSON.parse(body.toString('utf8'));\n } catch {\n return null;\n }\n }\n if (typeof body === 'string') {\n try {\n return JSON.parse(body);\n } catch {\n return null;\n }\n }\n if (typeof body === 'object') return body;\n return null;\n}\n\n// -----------------------------------------------------------------------------\n// MCP-I — legacy header form (Envelope-1 transition only).\n// -----------------------------------------------------------------------------\n\n/**\n * Pre-Envelope-1, the TS bouncer ships `{protected,payload,signature}`\n * JSON in the `KYA-Delegation` header. Phase 1 reconstructs the\n * compact JWS form (`<protected>.<payload>.<signature>`) so the\n * engine's parser can consume it uniformly.\n *\n * **This is a transition shim.** Envelope-1 (#2537) aligns the\n * bouncer with the spec form; once that ships and customer bouncers\n * re-deploy, this function gets deleted along with the\n * `legacyEnvelopeFallback` flag.\n */\nfunction tryBuildMcpIFromLegacyHeader(req: IncomingHttpLike): McpIRequest | null {\n const header = getHeader(req, 'kya-delegation');\n if (!header) return null;\n let parsed: unknown;\n try {\n parsed = JSON.parse(header);\n } catch {\n return null;\n }\n if (!parsed || typeof parsed !== 'object') return null;\n const obj = parsed as Record<string, unknown>;\n const protectedSeg = obj.protected;\n const payloadSeg = obj.payload;\n const signatureSeg = obj.signature;\n if (\n typeof protectedSeg !== 'string' ||\n typeof payloadSeg !== 'string' ||\n typeof signatureSeg !== 'string'\n ) {\n return null;\n }\n // Reconstitute the compact JWS form `<header>.<payload>.<signature>`.\n const compact = `${protectedSeg}.${payloadSeg}.${signatureSeg}`;\n const raw = Array.from(Buffer.from(compact, 'utf8'));\n const payload = parseJwsPayloadStruct(raw);\n if (!payload) return null;\n return { raw, payload };\n}\n\n// -----------------------------------------------------------------------------\n// JWS payload extraction — just enough to populate McpIRequest.payload.\n// -----------------------------------------------------------------------------\n\n/**\n * Decode the payload segment of a JWS-compact byte string into the\n * typed `McpIPayload` shape. **Does not verify the signature.** The\n * engine does that (H-1's `verify_mcp_i` Stage 2); this layer just\n * extracts the struct so the engine's bare-vs-signed cross-check\n * has something to compare against.\n *\n * Returns `null` on any structural failure — the orchestrator\n * treats that as \"not a parseable MCP-I envelope\" and falls\n * through to the next detection branch.\n */\nfunction parseJwsPayloadStruct(rawBytes: readonly number[]): McpIPayload | null {\n const json = decodeJwsPayloadJson(rawBytes);\n if (!json || typeof json !== 'object') return null;\n return projectMcpIPayload(json as Record<string, unknown>);\n}\n\n/**\n * Decode the payload segment of a JWS-compact byte string into raw\n * JSON. Returns `null` on any failure (not 3 segments / not valid\n * base64url / not valid JSON).\n */\nfunction decodeJwsPayloadJson(rawBytes: readonly number[]): unknown {\n const text = Buffer.from(rawBytes).toString('utf8');\n const segments = text.split('.');\n if (segments.length !== 3) return null;\n let decoded: Uint8Array;\n try {\n decoded = base64UrlDecode(segments[1]);\n } catch {\n return null;\n }\n try {\n return JSON.parse(Buffer.from(decoded).toString('utf8'));\n } catch {\n return null;\n }\n}\n\nfunction projectMcpIPayload(raw: Record<string, unknown>): McpIPayload | null {\n // Defensive: require all eight fields. Returning `null` here\n // signals \"payload extraction failed\". The orchestrator-level\n // `hasMalformedJwsBody` preflight (see verify-request.ts /\n // verify-request-edge.ts) catches that signal when the body\n // carried a JWS string and synthesizes `Block(ParseError)`\n // — keeping a malformed envelope from silently degrading to\n // PlainHttp. We still bail rather than synthesizing a partial\n // payload here, because letting an incomplete payload through\n // would mask bare-vs-signed mismatches at engine Stage 2.\n const aud = raw.aud;\n const iss = raw.iss;\n const sub = raw.sub;\n const nonce = raw.nonce;\n const sessionId = raw.sessionId;\n const ts = raw.ts;\n const requestHash = raw.requestHash;\n const responseHash = raw.responseHash;\n if (\n typeof aud !== 'string' ||\n typeof iss !== 'string' ||\n typeof sub !== 'string' ||\n typeof nonce !== 'string' ||\n typeof sessionId !== 'string' ||\n typeof ts !== 'number' ||\n typeof requestHash !== 'string' ||\n typeof responseHash !== 'string'\n ) {\n return null;\n }\n return { aud, iss, sub, nonce, sessionId, ts, requestHash, responseHash };\n}\n\n// -----------------------------------------------------------------------------\n// HTTP-Signed (RFC 9421).\n// -----------------------------------------------------------------------------\n\nfunction buildHttpSigned(req: IncomingHttpLike): HttpSignedRequest {\n return {\n raw: bodyAsBytes(req.body),\n method: req.method,\n path: req.url,\n headers: flattenHeaders(req.headers),\n };\n}\n\n// -----------------------------------------------------------------------------\n// PlainHttp.\n// -----------------------------------------------------------------------------\n\nfunction buildPlainHttp(req: IncomingHttpLike): PlainHttpRequest {\n return {\n raw: bodyAsBytes(req.body),\n method: req.method,\n path: req.url,\n headers: flattenHeaders(req.headers),\n userAgent: getHeader(req, 'user-agent') ?? null,\n remoteIp: req.remoteAddress ?? null,\n };\n}\n\n// -----------------------------------------------------------------------------\n// Helpers — header / body normalisation.\n// -----------------------------------------------------------------------------\n\nfunction getHeader(req: IncomingHttpLike, name: string): string | null {\n const lowered = name.toLowerCase();\n for (const [key, value] of Object.entries(req.headers)) {\n if (key.toLowerCase() !== lowered) continue;\n if (Array.isArray(value)) return value[0] ?? null;\n if (typeof value === 'string') return value;\n }\n return null;\n}\n\nfunction flattenHeaders(\n headers: Record<string, string | string[] | undefined>\n): Array<[string, string]> {\n const out: Array<[string, string]> = [];\n for (const [key, value] of Object.entries(headers)) {\n if (value === undefined) continue;\n if (Array.isArray(value)) {\n for (const v of value) out.push([key, v]);\n } else {\n out.push([key, value]);\n }\n }\n return out;\n}\n\nfunction bodyAsBytes(body: unknown): number[] {\n if (!body) return [];\n if (Buffer.isBuffer(body)) return Array.from(body);\n if (typeof body === 'string') return Array.from(Buffer.from(body, 'utf8'));\n if (typeof body === 'object') return Array.from(Buffer.from(JSON.stringify(body), 'utf8'));\n return [];\n}\n","/**\n * Transport-agnostic `Decision` → HTTP renderer — Phase C.3.\n *\n * Translates a `VerifyResult` into a framework-neutral\n * `{ status, headers, body }` shape. Phase D (Next.js) adapts this\n * to `NextResponse`; Phase E (Express) adapts it to `res.status().set().send()`.\n * One source of truth for the verdict→HTTP mapping.\n *\n * Mapping table (§ 4.5 of Phase C kickoff):\n *\n * | Decision | HTTP | Notes |\n * |-----------------------------------|------|-----------------------------------------|\n * | Permit | null | Pass through to next handler |\n * | Block(Unauthenticated) | 401 | WWW-Authenticate header |\n * | Block(InvalidSignature) | 403 | |\n * | Block(Revoked) | 403 | |\n * | Block(Expired) | 401 | Refresh-the-credential semantics |\n * | Block(OutOfScope) | 403 | Body carries requested + granted |\n * | Block(LowReputation) | 403 | Body carries score + threshold |\n * | Block(PolicyDenied) | 403 | Body carries detail |\n * | Block(ParseError) | 400 | Body carries detail |\n * | Challenge | 401 | Body carries ChallengeParams |\n * | Redirect | 302 | Location header |\n * | Instruct | 422 | application/problem+json body |\n *\n * Observe mode overrides: every verdict renders as `status: null`\n * (pass through) with an `X-Checkpoint-Would-Have-Been` header\n * carrying the verdict kind, plus the standard attribution headers.\n *\n * Every response carries the Phase 0.1 attribution headers:\n * `X-Checkpoint-Engine`, `X-Checkpoint-Engine-Version`, and\n * (when present) `X-Checkpoint-Ruleset-Hash`.\n */\n\nimport type { BlockReason, VerifyResult } from '../types';\n\nimport type { RenderedResponse } from './types';\n\nexport function renderDecisionAsResponse(result: VerifyResult): RenderedResponse {\n const baseHeaders = buildBaseHeaders(result);\n\n // Observe mode never blocks — pass through with would-have-been headers.\n if (result.enforcementMode === 'observe') {\n return {\n status: null,\n headers: {\n ...baseHeaders,\n 'X-Checkpoint-Mode': 'observe',\n 'X-Checkpoint-Would-Have-Been': result.decision.kind,\n ...wouldHaveBeenReasonHeader(result),\n },\n };\n }\n\n switch (result.decision.kind) {\n case 'Permit':\n return {\n status: null,\n headers: { ...baseHeaders, 'X-Checkpoint-Decision': 'permit' },\n };\n\n case 'Block': {\n const reason = result.decision.reason;\n return {\n status: httpStatusForBlockReason(reason),\n headers: {\n ...baseHeaders,\n ...blockHeaders(reason),\n 'X-Checkpoint-Decision': 'block',\n 'X-Checkpoint-Reason': reason.kind,\n },\n body: blockResponseBody(reason),\n };\n }\n\n case 'Challenge': {\n const params = result.decision.params;\n return {\n status: 401,\n headers: {\n ...baseHeaders,\n 'X-Checkpoint-Decision': 'challenge',\n 'X-Checkpoint-Challenge': params.nonce,\n },\n body: {\n challenge: params,\n },\n };\n }\n\n case 'Redirect': {\n const target = result.decision.target;\n return {\n status: 302,\n headers: {\n ...baseHeaders,\n 'X-Checkpoint-Decision': 'redirect',\n Location: target.url,\n 'X-Checkpoint-Redirect-Reason': target.reason,\n },\n };\n }\n\n case 'Instruct': {\n const payload = result.decision.payload;\n return {\n status: 422,\n headers: {\n ...baseHeaders,\n 'X-Checkpoint-Decision': 'instruct',\n 'Content-Type': 'application/problem+json',\n },\n body: {\n type: payload.problem,\n title: payload.title,\n suggestedActions: payload.suggestedActions,\n },\n };\n }\n }\n}\n\n// -----------------------------------------------------------------------------\n// Helpers.\n// -----------------------------------------------------------------------------\n\nfunction buildBaseHeaders(result: VerifyResult): Record<string, string> {\n const headers: Record<string, string> = {\n 'X-Checkpoint-Engine': result.engineInfo.name,\n 'X-Checkpoint-Engine-Version': result.engineInfo.version,\n };\n if (result.engineInfo.rulesetHash) {\n headers['X-Checkpoint-Ruleset-Hash'] = result.engineInfo.rulesetHash;\n }\n return headers;\n}\n\nfunction httpStatusForBlockReason(reason: BlockReason): number {\n switch (reason.kind) {\n case 'Unauthenticated':\n case 'Expired':\n return 401;\n case 'ParseError':\n return 400;\n case 'InvalidSignature':\n case 'Revoked':\n case 'OutOfScope':\n case 'LowReputation':\n case 'PolicyDenied':\n return 403;\n }\n}\n\nfunction blockHeaders(reason: BlockReason): Record<string, string> {\n if (reason.kind === 'Unauthenticated') {\n return { 'WWW-Authenticate': 'KyaProof realm=\"checkpoint\"' };\n }\n return {};\n}\n\nfunction blockResponseBody(reason: BlockReason): object {\n switch (reason.kind) {\n case 'Revoked':\n case 'InvalidSignature':\n case 'Unauthenticated':\n case 'Expired':\n return { error: humanError(reason.kind), reason: reason.kind };\n case 'OutOfScope':\n return {\n error: 'requested scope is not granted',\n reason: 'OutOfScope',\n requested: reason.requested,\n granted: reason.granted,\n };\n case 'LowReputation':\n return {\n error: 'agent reputation below tenant threshold',\n reason: 'LowReputation',\n score: reason.score,\n threshold: reason.threshold,\n };\n case 'PolicyDenied':\n return {\n error: 'tenant policy denied the request',\n reason: 'PolicyDenied',\n detail: reason.detail,\n };\n case 'ParseError':\n return {\n error: 'request envelope could not be parsed',\n reason: 'ParseError',\n detail: reason.detail,\n };\n }\n}\n\nfunction humanError(kind: 'Revoked' | 'InvalidSignature' | 'Unauthenticated' | 'Expired'): string {\n switch (kind) {\n case 'Revoked':\n return 'credential has been revoked';\n case 'InvalidSignature':\n return 'request signature failed verification';\n case 'Unauthenticated':\n return 'authentication required';\n case 'Expired':\n return 'credential is expired';\n }\n}\n\n/** Observe-mode helper — surface the block reason in a side header so */\n/** dashboards can attribute the would-have-been verdict. */\nfunction wouldHaveBeenReasonHeader(result: VerifyResult): Record<string, string> {\n if (result.decision.kind === 'Block') {\n return { 'X-Checkpoint-Would-Have-Been-Reason': result.decision.reason.kind };\n }\n return {};\n}\n","/**\n * `verifyRequestEdge` async-init orchestrator — Edge-WASM-2 (folded into\n * Phase D's PR).\n *\n * Mirror of [[./verify-request.ts]] for edge runtimes. Differs in only\n * three places:\n *\n * 1. Imports `engineVerifyEdge` + `initEngineEdge` from `../edge`\n * instead of `engineVerify` from `../index` (Node target).\n * 2. Awaits `initEngineEdge()` before the engine call — async-init\n * pattern required by the `--target web` wasm-bindgen build.\n * 3. The final engine call is `await engineVerifyEdge(...)` rather\n * than the synchronous `engineVerify(...)`.\n *\n * **The two files MUST stay in sync.** Any change to verify-request.ts\n * (new adapter, new error-classification rule, new ContextSpec field)\n * MUST be mirrored here. The cross-target parity test in\n * [[__tests__/verify-request-parity.test.ts]] guards the verdict-shape\n * invariant — both orchestrators must produce identical\n * `VerifyResult.decision` / `engineInfo.name` on identical inputs.\n *\n * Cedar-1 forward-compat: same seam as the Node variant — step (5)\n * (tenant policy eval) is the only place the PolicyEvaluator\n * interface gets exercised. When Cedar-1 swaps implementations, this\n * orchestrator does not change.\n */\n\nimport type {\n DidNotFound,\n DidResolverError,\n DidResolverTimeout,\n MalformedDid,\n UnsupportedDidMethod,\n UnsupportedKeyType,\n} from '../adapters/did-resolver';\nimport type { StatusListCacheAdapter } from '../adapters/status-list-cache';\nimport { assertSafeHttpsUrl, UnsafeOutboundUrl } from '../adapters/outbound-url-policy';\nimport { engineVerifyEdge, initEngineEdge } from '../edge';\nimport type { ContextSpec, DidDocument, EnforcementMode, VerifyResult } from '../types';\n\nimport {\n buildAgentRequest,\n extractAgentDid,\n extractCredentialStatusUrl,\n extractIssuer,\n hasMalformedJwsBody,\n} from './build-agent-request';\nimport type { IncomingHttpLike, VerifyRequestOpts } from './types';\n\nconst DEFAULT_REPUTATION_BASELINE = 1.0;\n\n/**\n * Factory — constructs a `verifyRequestEdge` closure that remembers the\n * one-shot Argus-not-configured warning state. Use this when the\n * host wrapper wants the startup log; call `verifyRequestEdge` directly\n * (the loose function below) if you don't.\n */\nexport function makeVerifyRequestEdge(\n opts: VerifyRequestOpts\n): (req: IncomingHttpLike) => Promise<VerifyResult> {\n let argusWarningLogged = false;\n const log = opts.logger ?? defaultLogger;\n return async function verifyRequestEdge(req: IncomingHttpLike): Promise<VerifyResult> {\n if (!argusWarningLogged && !opts.argusUrl) {\n log(\n '[Checkpoint] WARNING: Argus URL not configured; reputation will degrade to baseline 1.0 (\"trust by default\"). Set ARGUS_API_URL to enable.'\n );\n argusWarningLogged = true;\n }\n return verifyRequestEdge_internal(req, opts);\n };\n}\n\n/**\n * Single-shot async entry. Use [`makeVerifyRequestEdge`] in long-lived\n * hosts (so the Argus warning is one-shot per process); use this\n * loose form in tests + one-off invocations.\n */\nexport async function verifyRequestEdge(\n req: IncomingHttpLike,\n opts: VerifyRequestOpts\n): Promise<VerifyResult> {\n return verifyRequestEdge_internal(req, opts);\n}\n\nasync function verifyRequestEdge_internal(\n req: IncomingHttpLike,\n opts: VerifyRequestOpts\n): Promise<VerifyResult> {\n // JWS-aware preflight — see verify-request.ts for rationale. The\n // edge variant MUST mirror Node-side behaviour exactly per the\n // cross-runtime parity contract (D.1.5 — verify-request-parity).\n if (hasMalformedJwsBody(req)) {\n return blockWithParseError('malformed JWS body', opts.enforcementMode);\n }\n\n const agentRequest = buildAgentRequest(req, {\n legacyEnvelopeFallback: opts.legacyEnvelopeFallback,\n });\n const issuer = extractIssuer(agentRequest);\n const agentDid = extractAgentDid(agentRequest);\n const credentialStatusUrl = extractCredentialStatusUrl(agentRequest);\n const baseline = opts.reputationBaseline ?? DEFAULT_REPUTATION_BASELINE;\n\n // --- Stage 1 of orchestration: parallel pre-fetch. -----------------------\n //\n // Conditional `Promise.allSettled` per § 4.4 — no network calls\n // for shapes that don't need them. Anonymous PlainHttp resolves\n // immediately with three sentinel values.\n //\n // **`allSettled`, not `all`.** With `Promise.all`, a concurrent\n // StatusList rejection could mask a co-occurring DID failure —\n // classification becomes timing-dependent (whichever rejected\n // first decides whether the host returns 400 or 503). Settled-\n // mode evaluation lets us observe every adapter's outcome and\n // apply a deterministic priority:\n //\n // 1. DID failure → `Block(ParseError)` verdict (client problem)\n // 2. StatusList failure → re-throw (infra; host renders 503)\n // 3. Reputation failure → bubble up (adapter contract says\n // reputation never throws; this branch is defensive)\n //\n // **DID wins over StatusList** because a structural request\n // failure (malformed identity material) is a client problem the\n // dashboard wants to see, not an infra outage that would mask it.\n const [didResult, statusResult, repResult] = await Promise.allSettled([\n issuer ? opts.didResolver.resolve(issuer) : Promise.resolve(null),\n credentialStatusUrl\n ? fetchCredentialStatus(credentialStatusUrl, opts.statusListCache)\n : Promise.resolve(null),\n agentDid ? opts.reputationOracle.score(agentDid) : Promise.resolve(baseline),\n ]);\n\n // Priority 1 — DID failure.\n if (didResult.status === 'rejected') {\n if (isDidResolverError(didResult.reason)) {\n return blockWithParseError(\n didResult.reason instanceof Error ? didResult.reason.message : String(didResult.reason),\n opts.enforcementMode\n );\n }\n throw didResult.reason;\n }\n\n // Priority 2 — StatusList failure.\n if (statusResult.status === 'rejected') {\n if (statusResult.reason instanceof UnsafeOutboundUrl) {\n return blockWithParseError(statusResult.reason.message, opts.enforcementMode);\n }\n // Both kya-known StatusList errors and unexpected throws re-\n // raise (host renders 503 either way; the second branch is\n // belt-and-suspenders for future adapter implementations).\n throw statusResult.reason;\n }\n\n // Priority 3 — unexpected reputation throw.\n if (repResult.status === 'rejected') {\n throw repResult.reason;\n }\n\n const didDoc: DidDocument | null = didResult.value;\n const revokedIndices: number[] | null = statusResult.value;\n const repScore: number = repResult.value;\n\n // --- Stage 2 of orchestration: tenant policy eval. -----------------------\n //\n // Runs after reputation resolves — the evaluator's input includes\n // the resolved score. Cedar-1 will swap this implementation\n // without touching the surrounding orchestrator.\n const tenantDecision = await opts.policyEvaluator.evaluate({\n tenantHost: opts.tenantHost,\n reputation: repScore,\n });\n\n // --- Stage 3 of orchestration: ContextSpec composition + edge verify. ---\n //\n // **The async-init pre-call.** `initEngineEdge()` is idempotent —\n // subsequent calls resolve the same in-flight or completed init\n // promise. The first call to a long-lived edge host wraps the cold-\n // boot latency; every subsequent call resolves synchronously on the\n // JS side. Eager-init hosts can call `initEngineEdge()` at process\n // startup to amortise this onto deploy time.\n await initEngineEdge();\n\n const ctx: ContextSpec = {\n didDocs: didDoc && issuer ? { [issuer]: didDoc } : {},\n revoked:\n revokedIndices !== null && credentialStatusUrl\n ? { [credentialStatusUrl]: revokedIndices }\n : {},\n reputation: agentDid ? { [agentDid]: repScore } : {},\n tenantDecision,\n nowUnix: opts.clock.nowUnix(),\n enforcementMode: opts.enforcementMode,\n };\n\n return engineVerifyEdge(agentRequest, ctx);\n}\n\nasync function fetchCredentialStatus(\n credentialStatusUrl: string,\n statusListCache: StatusListCacheAdapter\n): Promise<number[]> {\n assertSafeHttpsUrl(credentialStatusUrl, 'credential status URL');\n return statusListCache.fetch(credentialStatusUrl);\n}\n\n// -----------------------------------------------------------------------------\n// Adapter-error translation helpers. Mirror of verify-request.ts.\n// -----------------------------------------------------------------------------\n\ntype DidErr =\n | DidNotFound\n | DidResolverTimeout\n | DidResolverError\n | MalformedDid\n | UnsupportedKeyType\n | UnsupportedDidMethod;\n\nfunction isDidResolverError(err: unknown): err is DidErr {\n if (!(err instanceof Error)) return false;\n const kind = (err as { kind?: string }).kind;\n return (\n kind === 'DidNotFound' ||\n kind === 'DidResolverTimeout' ||\n kind === 'DidResolverError' ||\n kind === 'MalformedDid' ||\n kind === 'UnsupportedKeyType' ||\n kind === 'UnsupportedDidMethod'\n );\n}\n\n/**\n * Synthesize a `VerifyResult` carrying `Block(ParseError)` for the\n * DID-failure case. Identical to verify-request.ts's helper — kept in\n * sync so that DID-resolver-failure verdicts are byte-identical across\n * Node + Edge targets (the parity test asserts this).\n */\nfunction blockWithParseError(detail: string, enforcementMode: EnforcementMode): VerifyResult {\n return {\n decision: {\n kind: 'Block',\n reason: {\n kind: 'ParseError',\n detail,\n },\n },\n enforcementMode,\n engineInfo: {\n name: 'checkpoint-engine-wasm',\n version: '0.0.0-host-synth',\n rulesetHash: 'sha256:host-synthesized',\n rulesetVersion: '0.0.0-host-synth',\n extras: { synthesized: true },\n },\n };\n}\n\nfunction defaultLogger(msg: string): void {\n console.warn(msg);\n}\n\n// Re-export `initEngineEdge` so eager-init hosts can warm the wasm\n// load at startup instead of waiting for the first request:\n//\n// import { initEngineEdge } from '@kya-os/checkpoint-wasm-runtime/orchestrator/edge';\n// await initEngineEdge(webAssemblyModule); // process startup\n//\n// Without this re-export, hosts would need a second import line\n// pointing at `./engine/edge`. Surfacing it through the orchestrator\n// subpath keeps the host wrapper's import block tight.\nexport { initEngineEdge };\n\n// -----------------------------------------------------------------------------\n// Re-export shared orchestrator utilities so edge-runtime bundlers get\n// a complete surface from this single subpath. Without these, an edge\n// host wrapper would need two import lines:\n//\n// import { verifyRequestEdge } from '.../orchestrator/edge';\n// import { renderDecisionAsResponse } from '.../orchestrator'; // ← awkward\n//\n// The shared utilities (renderDecisionAsResponse, buildAgentRequest,\n// types) are pure / runtime-independent — same bytes in both targets.\n// -----------------------------------------------------------------------------\n\nexport {\n buildAgentRequest,\n extractAgentDid,\n extractCredentialStatusUrl,\n extractIssuer,\n hasMalformedJwsBody,\n type BuildAgentRequestOpts,\n} from './build-agent-request';\nexport { renderDecisionAsResponse } from './render-decision';\nexport type { IncomingHttpLike, RenderedResponse, VerifyRequestOpts } from './types';\n"]}