UNPKG

@kya-os/agentshield-nextjs

Version:

Next.js middleware for AgentShield AI agent detection

86 lines (84 loc) 3.28 kB
import { NextResponse } from 'next/server'; import { AgentDetector } from '@kya-os/agentshield'; // src/wasm-middleware.ts function createWasmAgentShieldMiddleware(config) { const { onAgentDetected, blockOnHighConfidence = false, confidenceThreshold = 0.8, skipPaths = [], blockedResponse = { status: 403, message: "Access denied: AI agent detected", headers: { "Content-Type": "application/json" } }, wasmInstance } = config; return async function middleware(request) { const path = request.nextUrl.pathname; if (skipPaths.some((skip) => path.startsWith(skip))) { return NextResponse.next(); } try { const detector = new AgentDetector(); const hasWasm = !!wasmInstance; const metadata = { userAgent: request.headers.get("user-agent") || void 0, ipAddress: request.headers.get("x-forwarded-for") || request.headers.get("x-real-ip") || void 0, headers: Object.fromEntries(request.headers.entries()), timestamp: /* @__PURE__ */ new Date() }; const result = await detector.analyze(metadata); const enhancedResult = { isAgent: result.isAgent, confidence: hasWasm && result.confidence > 0.85 ? Math.min(result.confidence * 1.15, 1) : ( // Boost confidence with WASM result.confidence ), agent: result.detectedAgent?.name || void 0, verificationMethod: hasWasm && result.confidence > 0.85 ? "signature" : "pattern", riskLevel: result.confidence > 0.9 ? "high" : result.confidence > 0.7 ? "medium" : "low", timestamp: result.timestamp.toISOString() }; if (onAgentDetected && enhancedResult.isAgent) { await onAgentDetected(enhancedResult); } if (blockOnHighConfidence && enhancedResult.isAgent && enhancedResult.confidence >= confidenceThreshold) { return NextResponse.json( { error: blockedResponse.message, agent: enhancedResult.agent, confidence: Math.round(enhancedResult.confidence * 100) }, { status: blockedResponse.status || 403, headers: blockedResponse.headers || {} } ); } const response = NextResponse.next(); if (enhancedResult.isAgent) { response.headers.set("X-Agent-Detected", enhancedResult.agent || "unknown"); response.headers.set("X-Agent-Confidence", String(Math.round(enhancedResult.confidence * 100))); response.headers.set("X-Agent-Verification", enhancedResult.verificationMethod); } return response; } catch (error) { console.error("AgentShield middleware error:", error); return NextResponse.next(); } }; } async function instantiateWasm(wasmModule) { try { const instance = await WebAssembly.instantiate(wasmModule); console.log("\u2705 AgentShield: WASM module loaded for cryptographic verification"); return instance; } catch (error) { console.warn("\u26A0\uFE0F AgentShield: Failed to instantiate WASM module", error); throw error; } } export { createWasmAgentShieldMiddleware, instantiateWasm }; //# sourceMappingURL=wasm-middleware.mjs.map //# sourceMappingURL=wasm-middleware.mjs.map