/** * @module @arcis/node/nuxt * * Nuxt (h3) adapter for Arcis. Drop into a server middleware file. * * **Scope:** rate-limit + bot detection + security headers. For * XSS/SQL/SSTI/etc. body-payload blocking, call `sanitizeObject` from * `@arcis/node/sanitizers` inside your route handler. v1 keeps the * middleware surface narrow. * * ```ts * // server/middleware/arcis.ts * import { defineEventHandler } from 'h3'; * import { arcisHandler } from '@arcis/node/nuxt'; * export default defineEventHandler(arcisHandler({ rateLimit: { max: 100 } })); * ``` * * Or compose with other handlers — each Nuxt server middleware file runs in * the order Nitro discovers them (alphabetical by default). * * The adapter operates against h3's Node-compat layer (`event.node.req` / * `event.node.res`) so it works on the standard Nuxt server. There is no * runtime dependency on `h3` — its event shape is duck-typed. */ import type { HeaderOptions, RateLimitOptions } from '../core/types'; import { type BotProtectionOptions } from './bot-detection'; interface NodeIncomingMessageLike { headers: Record; socket?: { remoteAddress?: string; }; method?: string; url?: string; } interface NodeServerResponseLike { statusCode: number; writableEnded?: boolean; setHeader(name: string, value: string | number | string[]): void; removeHeader(name: string): void; end(body?: string): void; } export interface H3EventLike { node: { req: NodeIncomingMessageLike; res: NodeServerResponseLike; }; } export type ArcisH3Handler = (event: H3EventLike) => Promise | void; export interface ArcisNuxtOptions { /** Security headers configuration. Default: enabled. Pass `false` to disable. */ headers?: boolean | HeaderOptions; /** Rate limiter configuration. Default: 100 req/60s in-memory. Pass `false` to disable. */ rateLimit?: boolean | RateLimitOptions; /** Bot protection. Default: disabled (opt-in). */ bot?: boolean | BotProtectionOptions; } /** * Build an h3 event handler that applies Arcis protections on each request. * Wrap it with `defineEventHandler` in your Nuxt server middleware. When a * request is rate-limited or denied, the handler writes the 429/403 response * directly via `event.node.res` and returns; otherwise it sets security * headers and falls through to the next handler. */ export declare function arcisHandler(options?: ArcisNuxtOptions): ArcisH3Handler; export default arcisHandler; //# sourceMappingURL=nuxt.d.ts.map