UNPKG

@kya-os/agentshield-nextjs

Version:

Next.js middleware for AgentShield AI agent detection

106 lines (102 loc) 2.73 kB
import { NextRequest, NextResponse } from 'next/server'; import { AgentShieldConfig, DetectionResult } from '@kya-os/agentshield-shared'; import { AgentShieldEvents } from '@kya-os/agentshield'; /** * Next.js-specific type definitions */ /** * Next.js middleware configuration */ interface NextJSMiddlewareConfig extends Partial<AgentShieldConfig> { /** * Action to take when an agent is detected */ onAgentDetected?: 'block' | 'redirect' | 'rewrite' | 'allow' | 'log'; /** * Custom handler for agent detection * @deprecated Use 'events' instead. Will be removed in v1.0.0 */ onDetection?: (req: NextRequest, result: DetectionResult) => NextResponse | Promise<NextResponse> | void | Promise<void>; /** * Event handlers for detection events */ events?: Partial<AgentShieldEvents>; /** * Path patterns to skip detection */ skipPaths?: string[] | RegExp[]; /** * Response when blocking agents */ blockedResponse?: { status: number; message: string; headers?: Record<string, string>; }; /** * Redirect URL when redirecting detected agents */ redirectUrl?: string; /** * Rewrite URL when rewriting requests from detected agents */ rewriteUrl?: string; /** * Confidence threshold for agent detection */ confidenceThreshold?: number; /** * Enable WASM for enhanced detection */ enableWasm?: boolean; /** * Session tracking configuration */ sessionTracking?: { /** * Enable session tracking */ enabled: boolean; /** * Cookie name for session storage * Default: '__agentshield_session' */ cookieName?: string; /** * Cookie max age in seconds * Default: 3600 (1 hour) */ cookieMaxAge?: number; /** * Encryption key for session data * Default: Uses AGENTSHIELD_SECRET env var or default key */ encryptionKey?: string; }; } /** * Extended NextRequest with AgentShield data */ interface AgentShieldRequest extends NextRequest { agentShield?: { result?: DetectionResult; skipped: boolean; session?: { id: string; agent: string; confidence: number; detectedAt: number; expires: number; }; }; } /** * Detection context for hooks */ interface DetectionContext { result: DetectionResult; request: NextRequest; userAgent?: string; ip?: string; } export type { AgentShieldRequest as A, DetectionContext as D, NextJSMiddlewareConfig as N };