UNPKG

express-rate-limiter-ts

Version:

A powerful, flexible and modern rate limiter middleware for Express.js written in TypeScript.

73 lines (72 loc) 2.02 kB
export type StorageType = 'memory'; export interface RateLimiterOptions { windowMs: number; max: number; message?: string | object; statusCode?: number; keyGenerator?: (req: any) => string; skip?: (req: any) => boolean; storageType?: StorageType; logger?: { log: (msg: string, meta?: any) => void; warn?: (msg: string, meta?: any) => void; error?: (msg: string, meta?: any) => void; }; routes?: { [route: string]: Partial<Omit<RateLimiterOptions, 'routes'>>; }; identifierType?: 'ip' | 'header' | 'jwt'; identifierHeader?: string; stats?: boolean; whitelist?: string[] | ((req: any) => boolean); blacklist?: string[] | ((req: any) => boolean); customResponse?: (req: any, res: any, info: RateLimitInfo) => any; banSeconds?: number; dynamicMax?: (req: any) => number; } export interface RateLimitInfo { current: number; remaining: number; resetTime: Date; exceeded: boolean; banned?: boolean; banExpiresAt?: Date; } export interface RateLimitStats { [route: string]: { count: number; lastTriggered: Date; }; } export interface AdminPanelStats { stats: RateLimitStats; banned: { [key: string]: { banExpiresAt: Date; reason: string; }; }; } export interface IRateLimitStore { incr(key: string): Promise<RateLimitInfo>; get(key: string): Promise<{ count: number; resetTime: number; } | undefined>; reset(key: string): Promise<void>; recordStat(route: string): Promise<void>; getStats(): Promise<RateLimitStats>; ban(key: string, seconds: number, reason: string): Promise<void>; isBanned(key: string): Promise<{ banned: boolean; banExpiresAt?: Date; reason?: string; }>; getBanned(): Promise<{ [key: string]: { banExpiresAt: Date; reason: string; }; }>; unban(key: string): Promise<void>; }