@kya-os/agentshield-nextjs 0.1.41 → 0.1.42
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/.tsbuildinfo +1 -0
- package/dist/api-client.d.mts +145 -0
- package/dist/api-client.d.ts +145 -0
- package/dist/api-client.js +130 -0
- package/dist/api-client.js.map +1 -0
- package/dist/api-client.mjs +126 -0
- package/dist/api-client.mjs.map +1 -0
- package/dist/api-middleware.d.mts +118 -0
- package/dist/api-middleware.d.ts +118 -0
- package/dist/api-middleware.js +295 -0
- package/dist/api-middleware.js.map +1 -0
- package/dist/api-middleware.mjs +292 -0
- package/dist/api-middleware.mjs.map +1 -0
- package/dist/create-middleware.d.mts +2 -1
- package/dist/create-middleware.d.ts +2 -1
- package/dist/create-middleware.js +474 -200
- package/dist/create-middleware.js.map +1 -1
- package/dist/create-middleware.mjs +454 -200
- package/dist/create-middleware.mjs.map +1 -1
- package/dist/edge/index.d.mts +110 -0
- package/dist/edge/index.d.ts +110 -0
- package/dist/edge/index.js +253 -0
- package/dist/edge/index.js.map +1 -0
- package/dist/edge/index.mjs +251 -0
- package/dist/edge/index.mjs.map +1 -0
- package/dist/edge-detector-wrapper.d.mts +6 -15
- package/dist/edge-detector-wrapper.d.ts +6 -15
- package/dist/edge-detector-wrapper.js +314 -95
- package/dist/edge-detector-wrapper.js.map +1 -1
- package/dist/edge-detector-wrapper.mjs +294 -95
- package/dist/edge-detector-wrapper.mjs.map +1 -1
- package/dist/edge-runtime-loader.d.mts +1 -1
- package/dist/edge-runtime-loader.d.ts +1 -1
- package/dist/edge-runtime-loader.js +10 -25
- package/dist/edge-runtime-loader.js.map +1 -1
- package/dist/edge-runtime-loader.mjs +11 -23
- package/dist/edge-runtime-loader.mjs.map +1 -1
- package/dist/edge-wasm-middleware.js +2 -1
- package/dist/edge-wasm-middleware.js.map +1 -1
- package/dist/edge-wasm-middleware.mjs +2 -1
- package/dist/edge-wasm-middleware.mjs.map +1 -1
- package/dist/enhanced-middleware.d.mts +153 -0
- package/dist/enhanced-middleware.d.ts +153 -0
- package/dist/enhanced-middleware.js +1074 -0
- package/dist/enhanced-middleware.js.map +1 -0
- package/dist/enhanced-middleware.mjs +1072 -0
- package/dist/enhanced-middleware.mjs.map +1 -0
- package/dist/index.d.mts +8 -153
- package/dist/index.d.ts +8 -153
- package/dist/index.js +821 -233
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +797 -234
- package/dist/index.mjs.map +1 -1
- package/dist/middleware.d.mts +2 -1
- package/dist/middleware.d.ts +2 -1
- package/dist/middleware.js +474 -200
- package/dist/middleware.js.map +1 -1
- package/dist/middleware.mjs +454 -200
- package/dist/middleware.mjs.map +1 -1
- package/dist/session-tracker.d.mts +1 -1
- package/dist/session-tracker.d.ts +1 -1
- package/dist/session-tracker.js.map +1 -1
- package/dist/session-tracker.mjs.map +1 -1
- package/dist/signature-verifier.d.mts +1 -0
- package/dist/signature-verifier.d.ts +1 -0
- package/dist/signature-verifier.js +204 -44
- package/dist/signature-verifier.js.map +1 -1
- package/dist/signature-verifier.mjs +184 -44
- package/dist/signature-verifier.mjs.map +1 -1
- package/dist/{types-BJTEUa4T.d.mts → types-DVmy9NE3.d.mts} +19 -2
- package/dist/{types-BJTEUa4T.d.ts → types-DVmy9NE3.d.ts} +19 -2
- package/dist/wasm-middleware.js +15 -6
- package/dist/wasm-middleware.js.map +1 -1
- package/dist/wasm-middleware.mjs +15 -6
- package/dist/wasm-middleware.mjs.map +1 -1
- package/package.json +27 -6
- package/wasm/agentshield_wasm.js +209 -152
- package/wasm/agentshield_wasm_bg.wasm +0 -0
- package/wasm/package.json +30 -0
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/edge-wasm-middleware.ts"],"names":["ptr","NextResponse"],"mappings":"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","file":"edge-wasm-middleware.js","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}"]}
|
|
1
|
+
{"version":3,"sources":["../src/edge-wasm-middleware.ts"],"names":["ptr","NextResponse"],"mappings":"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","file":"edge-wasm-middleware.js","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 = 90, // Updated to 0-100 scale (was 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}"]}
|
|
@@ -184,7 +184,8 @@ function createEdgeWasmMiddleware(config) {
|
|
|
184
184
|
wasmModule,
|
|
185
185
|
onAgentDetected,
|
|
186
186
|
blockOnHighConfidence = false,
|
|
187
|
-
confidenceThreshold =
|
|
187
|
+
confidenceThreshold = 90,
|
|
188
|
+
// Updated to 0-100 scale (was 0.9)
|
|
188
189
|
skipPaths = [],
|
|
189
190
|
blockedResponse = {
|
|
190
191
|
status: 403,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"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}"]}
|
|
1
|
+
{"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 = 90, // Updated to 0-100 scale (was 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}"]}
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
import { NextRequest, NextResponse } from 'next/server';
|
|
2
|
+
import { DetectionResult, DetectionInput } from '@kya-os/agentshield-shared';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Storage adapter types for AgentShield
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Agent detection event stored in the system
|
|
9
|
+
*/
|
|
10
|
+
interface AgentDetectionEvent {
|
|
11
|
+
eventId: string;
|
|
12
|
+
sessionId: string;
|
|
13
|
+
timestamp: string;
|
|
14
|
+
agentType: string;
|
|
15
|
+
agentName: string;
|
|
16
|
+
confidence: number;
|
|
17
|
+
path: string;
|
|
18
|
+
userAgent?: string;
|
|
19
|
+
ipAddress?: string;
|
|
20
|
+
method: string;
|
|
21
|
+
detectionReasons: string[];
|
|
22
|
+
verificationMethod: string;
|
|
23
|
+
detectionDetails?: {
|
|
24
|
+
patterns?: string[];
|
|
25
|
+
behaviors?: string[];
|
|
26
|
+
fingerprintMatches?: string[];
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Agent session information
|
|
31
|
+
*/
|
|
32
|
+
interface AgentSession {
|
|
33
|
+
sessionId: string;
|
|
34
|
+
ipAddress?: string;
|
|
35
|
+
userAgent?: string;
|
|
36
|
+
agentType: string;
|
|
37
|
+
agentName?: string;
|
|
38
|
+
firstSeen: string;
|
|
39
|
+
lastSeen: string;
|
|
40
|
+
eventCount: number;
|
|
41
|
+
paths: string[];
|
|
42
|
+
averageConfidence: number;
|
|
43
|
+
verificationMethods: string[];
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Storage adapter interface
|
|
47
|
+
* All methods should be async for compatibility with different backends
|
|
48
|
+
*/
|
|
49
|
+
interface StorageAdapter {
|
|
50
|
+
/**
|
|
51
|
+
* Store a detection event
|
|
52
|
+
*/
|
|
53
|
+
storeEvent(event: AgentDetectionEvent): Promise<void>;
|
|
54
|
+
/**
|
|
55
|
+
* Get recent events
|
|
56
|
+
*/
|
|
57
|
+
getRecentEvents(limit?: number): Promise<AgentDetectionEvent[]>;
|
|
58
|
+
/**
|
|
59
|
+
* Get events for a specific session
|
|
60
|
+
*/
|
|
61
|
+
getSessionEvents(sessionId: string): Promise<AgentDetectionEvent[]>;
|
|
62
|
+
/**
|
|
63
|
+
* Store or update a session
|
|
64
|
+
*/
|
|
65
|
+
storeSession(session: AgentSession): Promise<void>;
|
|
66
|
+
/**
|
|
67
|
+
* Get a session by ID
|
|
68
|
+
*/
|
|
69
|
+
getSession(sessionId: string): Promise<AgentSession | null>;
|
|
70
|
+
/**
|
|
71
|
+
* Get recent sessions
|
|
72
|
+
*/
|
|
73
|
+
getRecentSessions(limit?: number): Promise<AgentSession[]>;
|
|
74
|
+
/**
|
|
75
|
+
* Clean up old data (optional)
|
|
76
|
+
*/
|
|
77
|
+
cleanup?(olderThan: Date): Promise<void>;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Storage configuration options
|
|
81
|
+
*/
|
|
82
|
+
interface StorageConfig {
|
|
83
|
+
/**
|
|
84
|
+
* Type of storage to use
|
|
85
|
+
*/
|
|
86
|
+
type: 'redis' | 'memory' | 'custom';
|
|
87
|
+
/**
|
|
88
|
+
* Redis configuration (if type is 'redis')
|
|
89
|
+
*/
|
|
90
|
+
redis?: {
|
|
91
|
+
url: string;
|
|
92
|
+
token: string;
|
|
93
|
+
};
|
|
94
|
+
/**
|
|
95
|
+
* Custom storage adapter (if type is 'custom')
|
|
96
|
+
*/
|
|
97
|
+
custom?: StorageAdapter;
|
|
98
|
+
/**
|
|
99
|
+
* TTL for stored data in seconds
|
|
100
|
+
* Default: 86400 (24 hours)
|
|
101
|
+
*/
|
|
102
|
+
ttl?: number;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
* Enhanced Next.js middleware with all features built-in
|
|
107
|
+
*/
|
|
108
|
+
|
|
109
|
+
/**
|
|
110
|
+
* Enhanced configuration with built-in features
|
|
111
|
+
*/
|
|
112
|
+
interface EnhancedMiddlewareConfig {
|
|
113
|
+
/**
|
|
114
|
+
* Storage configuration
|
|
115
|
+
*/
|
|
116
|
+
storage?: StorageConfig;
|
|
117
|
+
/**
|
|
118
|
+
* Session tracking configuration
|
|
119
|
+
*/
|
|
120
|
+
sessionTracking?: {
|
|
121
|
+
enabled?: boolean;
|
|
122
|
+
ttl?: number;
|
|
123
|
+
};
|
|
124
|
+
/**
|
|
125
|
+
* Paths to skip detection
|
|
126
|
+
*/
|
|
127
|
+
skipPaths?: string[];
|
|
128
|
+
/**
|
|
129
|
+
* Action when agent detected
|
|
130
|
+
*/
|
|
131
|
+
onAgentDetected?: 'block' | 'log' | 'allow';
|
|
132
|
+
/**
|
|
133
|
+
* Custom handler for agent detection
|
|
134
|
+
*/
|
|
135
|
+
onDetection?: (result: DetectionResult, context: DetectionInput) => void | Promise<void>;
|
|
136
|
+
/**
|
|
137
|
+
* Confidence threshold
|
|
138
|
+
*/
|
|
139
|
+
confidenceThreshold?: number;
|
|
140
|
+
/**
|
|
141
|
+
* Response when blocking
|
|
142
|
+
*/
|
|
143
|
+
blockedResponse?: {
|
|
144
|
+
status?: number;
|
|
145
|
+
message?: string;
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Create enhanced AgentShield middleware with all features
|
|
150
|
+
*/
|
|
151
|
+
declare function createEnhancedAgentShieldMiddleware(config?: EnhancedMiddlewareConfig): (request: NextRequest) => Promise<NextResponse>;
|
|
152
|
+
|
|
153
|
+
export { type AgentDetectionEvent, type AgentSession, type EnhancedMiddlewareConfig, type StorageAdapter, type StorageConfig, createEnhancedAgentShieldMiddleware };
|
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
import { NextRequest, NextResponse } from 'next/server';
|
|
2
|
+
import { DetectionResult, DetectionInput } from '@kya-os/agentshield-shared';
|
|
3
|
+
|
|
4
|
+
/**
|
|
5
|
+
* Storage adapter types for AgentShield
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Agent detection event stored in the system
|
|
9
|
+
*/
|
|
10
|
+
interface AgentDetectionEvent {
|
|
11
|
+
eventId: string;
|
|
12
|
+
sessionId: string;
|
|
13
|
+
timestamp: string;
|
|
14
|
+
agentType: string;
|
|
15
|
+
agentName: string;
|
|
16
|
+
confidence: number;
|
|
17
|
+
path: string;
|
|
18
|
+
userAgent?: string;
|
|
19
|
+
ipAddress?: string;
|
|
20
|
+
method: string;
|
|
21
|
+
detectionReasons: string[];
|
|
22
|
+
verificationMethod: string;
|
|
23
|
+
detectionDetails?: {
|
|
24
|
+
patterns?: string[];
|
|
25
|
+
behaviors?: string[];
|
|
26
|
+
fingerprintMatches?: string[];
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Agent session information
|
|
31
|
+
*/
|
|
32
|
+
interface AgentSession {
|
|
33
|
+
sessionId: string;
|
|
34
|
+
ipAddress?: string;
|
|
35
|
+
userAgent?: string;
|
|
36
|
+
agentType: string;
|
|
37
|
+
agentName?: string;
|
|
38
|
+
firstSeen: string;
|
|
39
|
+
lastSeen: string;
|
|
40
|
+
eventCount: number;
|
|
41
|
+
paths: string[];
|
|
42
|
+
averageConfidence: number;
|
|
43
|
+
verificationMethods: string[];
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Storage adapter interface
|
|
47
|
+
* All methods should be async for compatibility with different backends
|
|
48
|
+
*/
|
|
49
|
+
interface StorageAdapter {
|
|
50
|
+
/**
|
|
51
|
+
* Store a detection event
|
|
52
|
+
*/
|
|
53
|
+
storeEvent(event: AgentDetectionEvent): Promise<void>;
|
|
54
|
+
/**
|
|
55
|
+
* Get recent events
|
|
56
|
+
*/
|
|
57
|
+
getRecentEvents(limit?: number): Promise<AgentDetectionEvent[]>;
|
|
58
|
+
/**
|
|
59
|
+
* Get events for a specific session
|
|
60
|
+
*/
|
|
61
|
+
getSessionEvents(sessionId: string): Promise<AgentDetectionEvent[]>;
|
|
62
|
+
/**
|
|
63
|
+
* Store or update a session
|
|
64
|
+
*/
|
|
65
|
+
storeSession(session: AgentSession): Promise<void>;
|
|
66
|
+
/**
|
|
67
|
+
* Get a session by ID
|
|
68
|
+
*/
|
|
69
|
+
getSession(sessionId: string): Promise<AgentSession | null>;
|
|
70
|
+
/**
|
|
71
|
+
* Get recent sessions
|
|
72
|
+
*/
|
|
73
|
+
getRecentSessions(limit?: number): Promise<AgentSession[]>;
|
|
74
|
+
/**
|
|
75
|
+
* Clean up old data (optional)
|
|
76
|
+
*/
|
|
77
|
+
cleanup?(olderThan: Date): Promise<void>;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Storage configuration options
|
|
81
|
+
*/
|
|
82
|
+
interface StorageConfig {
|
|
83
|
+
/**
|
|
84
|
+
* Type of storage to use
|
|
85
|
+
*/
|
|
86
|
+
type: 'redis' | 'memory' | 'custom';
|
|
87
|
+
/**
|
|
88
|
+
* Redis configuration (if type is 'redis')
|
|
89
|
+
*/
|
|
90
|
+
redis?: {
|
|
91
|
+
url: string;
|
|
92
|
+
token: string;
|
|
93
|
+
};
|
|
94
|
+
/**
|
|
95
|
+
* Custom storage adapter (if type is 'custom')
|
|
96
|
+
*/
|
|
97
|
+
custom?: StorageAdapter;
|
|
98
|
+
/**
|
|
99
|
+
* TTL for stored data in seconds
|
|
100
|
+
* Default: 86400 (24 hours)
|
|
101
|
+
*/
|
|
102
|
+
ttl?: number;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
/**
|
|
106
|
+
* Enhanced Next.js middleware with all features built-in
|
|
107
|
+
*/
|
|
108
|
+
|
|
109
|
+
/**
|
|
110
|
+
* Enhanced configuration with built-in features
|
|
111
|
+
*/
|
|
112
|
+
interface EnhancedMiddlewareConfig {
|
|
113
|
+
/**
|
|
114
|
+
* Storage configuration
|
|
115
|
+
*/
|
|
116
|
+
storage?: StorageConfig;
|
|
117
|
+
/**
|
|
118
|
+
* Session tracking configuration
|
|
119
|
+
*/
|
|
120
|
+
sessionTracking?: {
|
|
121
|
+
enabled?: boolean;
|
|
122
|
+
ttl?: number;
|
|
123
|
+
};
|
|
124
|
+
/**
|
|
125
|
+
* Paths to skip detection
|
|
126
|
+
*/
|
|
127
|
+
skipPaths?: string[];
|
|
128
|
+
/**
|
|
129
|
+
* Action when agent detected
|
|
130
|
+
*/
|
|
131
|
+
onAgentDetected?: 'block' | 'log' | 'allow';
|
|
132
|
+
/**
|
|
133
|
+
* Custom handler for agent detection
|
|
134
|
+
*/
|
|
135
|
+
onDetection?: (result: DetectionResult, context: DetectionInput) => void | Promise<void>;
|
|
136
|
+
/**
|
|
137
|
+
* Confidence threshold
|
|
138
|
+
*/
|
|
139
|
+
confidenceThreshold?: number;
|
|
140
|
+
/**
|
|
141
|
+
* Response when blocking
|
|
142
|
+
*/
|
|
143
|
+
blockedResponse?: {
|
|
144
|
+
status?: number;
|
|
145
|
+
message?: string;
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
/**
|
|
149
|
+
* Create enhanced AgentShield middleware with all features
|
|
150
|
+
*/
|
|
151
|
+
declare function createEnhancedAgentShieldMiddleware(config?: EnhancedMiddlewareConfig): (request: NextRequest) => Promise<NextResponse>;
|
|
152
|
+
|
|
153
|
+
export { type AgentDetectionEvent, type AgentSession, type EnhancedMiddlewareConfig, type StorageAdapter, type StorageConfig, createEnhancedAgentShieldMiddleware };
|