@kya-os/agentshield-nextjs
Version:
Next.js middleware for AgentShield AI agent detection
1 lines • 20.8 kB
Source Map (JSON)
{"version":3,"sources":["../src/edge-wasm-middleware.ts"],"names":["ptr"],"mappings":"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","file":"edge-wasm-middleware.mjs","sourcesContent":["/**\n * Edge Runtime Compatible WASM Middleware for AgentShield\n * \n * This module provides WASM-based AI agent detection with 95-100% confidence\n * in Next.js Edge Runtime and Vercel Edge Functions.\n * \n * IMPORTANT: WebAssembly.instantiate(module) IS supported in Edge Runtime\n * when using a pre-compiled module imported with ?module suffix.\n */\n\nimport type { NextRequest } from 'next/server';\nimport { NextResponse } from 'next/server';\n\n// Type definitions\nexport interface EdgeWasmDetectionResult {\n isAgent: boolean;\n confidence: number;\n agent?: string;\n verificationMethod: 'signature' | 'pattern' | 'wasm';\n riskLevel: 'low' | 'medium' | 'high';\n timestamp: string;\n reasons?: string[];\n}\n\nexport interface EdgeAgentShieldConfig {\n onAgentDetected?: (result: EdgeWasmDetectionResult) => void | Promise<void>;\n blockOnHighConfidence?: boolean;\n confidenceThreshold?: number;\n skipPaths?: string[];\n blockedResponse?: {\n status?: number;\n message?: string;\n headers?: Record<string, string>;\n };\n}\n\n// WASM module cache\nlet wasmExports: any = null;\nlet wasmInitPromise: Promise<void> | null = null;\n\n// wasm-bindgen glue code\nconst heap = new Array(128).fill(undefined);\nheap.push(undefined, null, true, false);\nlet heap_next = heap.length;\n\nfunction addHeapObject(obj: any) {\n if (heap_next === heap.length) heap.push(heap.length + 1);\n const idx = heap_next;\n heap_next = heap[idx];\n heap[idx] = obj;\n return idx;\n}\n\nfunction getObject(idx: number) { return heap[idx]; }\n\nfunction dropObject(idx: number) {\n if (idx < 132) return;\n heap[idx] = heap_next;\n heap_next = idx;\n}\n\nfunction takeObject(idx: number) {\n const ret = getObject(idx);\n dropObject(idx);\n return ret;\n}\n\nconst cachedTextDecoder = new TextDecoder('utf-8', { ignoreBOM: true, fatal: true });\nconst cachedTextEncoder = new TextEncoder();\n\nlet cachedUint8ArrayMemory0: Uint8Array | null = null;\nfunction getUint8ArrayMemory0() {\n if (cachedUint8ArrayMemory0 === null || cachedUint8ArrayMemory0.byteLength === 0) {\n cachedUint8ArrayMemory0 = new Uint8Array(wasmExports.memory.buffer);\n }\n return cachedUint8ArrayMemory0;\n}\n\nfunction getStringFromWasm0(ptr: number, len: number) {\n ptr = ptr >>> 0;\n return cachedTextDecoder.decode(getUint8ArrayMemory0().subarray(ptr, ptr + len));\n}\n\nlet WASM_VECTOR_LEN = 0;\n\nfunction passStringToWasm0(arg: string, malloc: any, realloc: any) {\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 offset += ret.written!;\n }\n\n WASM_VECTOR_LEN = offset;\n return ptr;\n}\n\nlet cachedDataViewMemory0: DataView | null = null;\nfunction getDataViewMemory0() {\n if (cachedDataViewMemory0 === null || \n (cachedDataViewMemory0.buffer !== wasmExports.memory.buffer)) {\n cachedDataViewMemory0 = new DataView(wasmExports.memory.buffer);\n }\n return cachedDataViewMemory0;\n}\n\n/**\n * Initialize WASM module with proper imports for Edge Runtime\n */\nexport async function initializeEdgeWasm(wasmModule: WebAssembly.Module): Promise<void> {\n if (wasmInitPromise) {\n return wasmInitPromise;\n }\n\n wasmInitPromise = (async () => {\n try {\n // Create imports object required by wasm-bindgen\n const imports = {\n './agentshield_wasm_bg.js': {\n __wbindgen_object_drop_ref: function(arg0: number) {\n dropObject(arg0);\n },\n __wbindgen_string_new: function(arg0: number, arg1: number) {\n const ret = getStringFromWasm0(arg0, arg1);\n return addHeapObject(ret);\n },\n __wbindgen_string_get: function(arg0: number, arg1: number) {\n const obj = getObject(arg1);\n const ret = typeof(obj) === 'string' ? obj : undefined;\n const ptr1 = ret ? passStringToWasm0(ret, wasmExports.__wbindgen_malloc, wasmExports.__wbindgen_realloc) : 0;\n const len1 = WASM_VECTOR_LEN;\n getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true);\n getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true);\n },\n __wbindgen_throw: function(arg0: number, arg1: number) {\n throw new Error(getStringFromWasm0(arg0, arg1));\n },\n },\n wbg: {\n __wbindgen_object_drop_ref: function(arg0: number) {\n dropObject(arg0);\n },\n __wbindgen_string_new: function(arg0: number, arg1: number) {\n const ret = getStringFromWasm0(arg0, arg1);\n return addHeapObject(ret);\n },\n __wbindgen_string_get: function(arg0: number, arg1: number) {\n const obj = getObject(arg1);\n const ret = typeof(obj) === 'string' ? obj : undefined;\n const ptr1 = ret ? passStringToWasm0(ret, wasmExports.__wbindgen_malloc, wasmExports.__wbindgen_realloc) : 0;\n const len1 = WASM_VECTOR_LEN;\n getDataViewMemory0().setInt32(arg0 + 4 * 1, len1, true);\n getDataViewMemory0().setInt32(arg0 + 4 * 0, ptr1, true);\n },\n __wbindgen_throw: function(arg0: number, arg1: number) {\n throw new Error(getStringFromWasm0(arg0, arg1));\n },\n },\n };\n\n // Instantiate with proper imports\n const instance = await WebAssembly.instantiate(wasmModule, imports);\n wasmExports = instance.exports;\n\n // Initialize wasm-bindgen if needed\n if (wasmExports.__wbindgen_start) {\n wasmExports.__wbindgen_start();\n }\n\n console.log('✅ AgentShield: WASM module loaded successfully in Edge Runtime (95-100% confidence enabled)');\n } catch (error) {\n console.error('❌ AgentShield: Failed to initialize WASM in Edge Runtime:', error);\n throw error;\n }\n })();\n\n return wasmInitPromise;\n}\n\n/**\n * Detect AI agent using WASM in Edge Runtime\n */\nasync function detectWithWasm(metadata: {\n userAgent?: string | undefined;\n ipAddress?: string | undefined;\n headers: Record<string, string>;\n timestamp: string;\n}): Promise<EdgeWasmDetectionResult> {\n if (!wasmExports) {\n throw new Error('WASM not initialized. Call initializeEdgeWasm first.');\n }\n\n try {\n // Create WASM request metadata\n const userAgent = metadata.userAgent || '';\n const ipAddress = metadata.ipAddress || '';\n const headers = JSON.stringify(metadata.headers);\n const timestamp = metadata.timestamp;\n\n // Call WASM function directly\n const ptr0 = passStringToWasm0(userAgent, wasmExports.__wbindgen_malloc, wasmExports.__wbindgen_realloc);\n const len0 = WASM_VECTOR_LEN;\n const ptr1 = passStringToWasm0(ipAddress, wasmExports.__wbindgen_malloc, wasmExports.__wbindgen_realloc);\n const len1 = WASM_VECTOR_LEN;\n const ptr2 = passStringToWasm0(headers, wasmExports.__wbindgen_malloc, wasmExports.__wbindgen_realloc);\n const len2 = WASM_VECTOR_LEN;\n const ptr3 = passStringToWasm0(timestamp, wasmExports.__wbindgen_malloc, wasmExports.__wbindgen_realloc);\n const len3 = WASM_VECTOR_LEN;\n\n // Create metadata object in WASM\n const metadataPtr = wasmExports.jsrequestmetadata_new(ptr0, len0, ptr1, len1, ptr2, len2, ptr3, len3);\n \n // Perform detection\n const resultPtr = wasmExports.detect_agent(metadataPtr);\n const result = takeObject(resultPtr);\n\n // Free WASM metadata\n wasmExports.__wbg_jsrequestmetadata_free(metadataPtr, 0);\n\n // Parse result\n const parsedResult = typeof result === 'string' ? JSON.parse(result) : result;\n\n return {\n isAgent: parsedResult.is_agent || false,\n confidence: parsedResult.confidence || 0,\n agent: parsedResult.agent,\n verificationMethod: parsedResult.verification_method || 'wasm',\n riskLevel: parsedResult.risk_level || 'low',\n timestamp: parsedResult.timestamp || metadata.timestamp,\n reasons: parsedResult.reasons || []\n };\n } catch (error) {\n console.error('WASM detection failed:', error);\n // Fall back to pattern detection\n return {\n isAgent: false,\n confidence: 0,\n verificationMethod: 'pattern',\n riskLevel: 'low',\n timestamp: metadata.timestamp\n };\n }\n}\n\n/**\n * Create Edge Runtime compatible WASM middleware\n * \n * @example\n * ```typescript\n * // middleware.ts\n * import wasmModule from '@kya-os/agentshield/wasm?module';\n * import { createEdgeWasmMiddleware } from '@kya-os/agentshield-nextjs/edge-wasm-middleware';\n * \n * export const middleware = createEdgeWasmMiddleware({\n * wasmModule,\n * onAgentDetected: (result) => {\n * console.log(`AI Agent: ${result.agent} (${result.confidence * 100}% confidence)`);\n * }\n * });\n * ```\n */\nexport function createEdgeWasmMiddleware(config: EdgeAgentShieldConfig & {\n wasmModule: WebAssembly.Module;\n}) {\n const {\n wasmModule,\n onAgentDetected,\n blockOnHighConfidence = false,\n confidenceThreshold = 0.9,\n skipPaths = [],\n blockedResponse = {\n status: 403,\n message: 'AI agent access restricted',\n headers: { 'Content-Type': 'application/json' }\n }\n } = config;\n\n // Initialize WASM on first load\n const initPromise = initializeEdgeWasm(wasmModule);\n\n return async function middleware(request: NextRequest) {\n // Check if path should be skipped\n const path = request.nextUrl.pathname;\n if (skipPaths.some(skip => path.startsWith(skip))) {\n return NextResponse.next();\n }\n\n try {\n // Ensure WASM is initialized\n await initPromise;\n\n // Prepare metadata\n const metadata = {\n userAgent: request.headers.get('user-agent') || undefined,\n ipAddress: request.headers.get('x-forwarded-for') || \n request.headers.get('x-real-ip') || \n undefined,\n headers: Object.fromEntries(request.headers.entries()),\n timestamp: new Date().toISOString()\n };\n\n // Perform WASM detection\n const result = await detectWithWasm(metadata);\n\n // Call user callback if provided\n if (onAgentDetected && result.isAgent) {\n await onAgentDetected(result);\n }\n\n // Block if configured\n if (blockOnHighConfidence && \n result.isAgent && \n result.confidence >= confidenceThreshold) {\n \n return NextResponse.json(\n { \n error: blockedResponse.message,\n agent: result.agent,\n confidence: Math.round(result.confidence * 100)\n },\n { \n status: blockedResponse.status || 403,\n headers: blockedResponse.headers || {}\n }\n );\n }\n\n // Add detection headers\n const response = NextResponse.next();\n if (result.isAgent) {\n response.headers.set('X-Agent-Detected', result.agent || 'unknown');\n response.headers.set('X-Agent-Confidence', String(Math.round(result.confidence * 100)));\n response.headers.set('X-Agent-Verification', result.verificationMethod);\n }\n\n return response;\n\n } catch (error) {\n console.error('Edge WASM middleware error:', error);\n // Continue without blocking on error\n return NextResponse.next();\n }\n };\n}"]}