UNPKG

@aikidosec/firewall

Version:

Zen by Aikido is an embedded Web Application Firewall that autonomously protects Node.js apps against common and critical attacks

146 lines (145 loc) 3.55 kB
import { APISpec } from "../api-discovery/getApiInfo"; import { Kind } from "../Attack"; import { Source } from "../Source"; export type AgentInfo = { dryMode: boolean; hostname: string; version: string; library: string; packages: Record<string, string>; ipAddress: string; preventedPrototypePollution: boolean; incompatiblePackages: { prototypePollution: Record<string, string>; }; os: { name: string; version: string; }; platform: { version: string; arch: string; }; nodeEnv: string; serverless: boolean; stack: string[]; }; type Started = { type: "started"; agent: AgentInfo; time: number; }; export type User = { id: string; name?: string; }; export type DetectedAttack = { type: "detected_attack"; request: { method: string | undefined; ipAddress: string | undefined; userAgent: string | undefined; url: string | undefined; headers: Record<string, string | string[]>; body: string | undefined; source: string; route: string | undefined; }; attack: { kind: Kind; operation: string; module: string; blocked: boolean; source: Source; path: string; stack: string; payload: string; metadata: Record<string, string>; user: User | undefined; }; agent: AgentInfo; time: number; }; export type OperationKind = "sql_op" | "nosql_op" | "outgoing_http_op" | "fs_op" | "exec_op" | "deserialize_op" | "graphql_op" | "eval_op" | "ai_op"; type OperationStats = { kind: OperationKind; attacksDetected: { total: number; blocked: number; }; interceptorThrewError: number; withoutContext: number; total: number; compressedTimings: { averageInMS: number; percentiles: Record<string, number>; compressedAt: number; }[]; }; type Heartbeat = { type: "heartbeat"; stats: { operations: Record<string, OperationStats>; startedAt: number; endedAt: number; sqlTokenizationFailures: number; requests: { total: number; aborted: number; rateLimited: number; attacksDetected: { total: number; blocked: number; }; }; userAgents: { breakdown: Record<string, number>; }; ipAddresses: { breakdown: Record<string, number>; }; }; ai: { provider: string; model: string; calls: number; tokens: { input: number; output: number; total: number; }; }[]; packages: { name: string; version: string; requiredAt: number; }[]; hostnames: { hostname: string; port: number | undefined; hits: number; }[]; routes: { path: string; method: string; hits: number; rateLimitedCount: number; graphql?: { type: "query" | "mutation"; name: string; }; apispec: APISpec; }[]; users: { id: string; name: string | undefined; lastIpAddress: string | undefined; firstSeenAt: number; lastSeenAt: number; }[]; agent: AgentInfo; time: number; middlewareInstalled?: boolean; }; export type Event = Started | DetectedAttack | Heartbeat; export {};