UNPKG

redis-sliding-rate-limiter

Version:

Flexible and performant rate limiter based on sliding window algorithm with arbitrary precision

84 lines (83 loc) 3.48 kB
import { Request, Response, NextFunction } from 'express'; import { RateLimiter, RateLimiterResponse } from '..'; export interface MiddlewareLimiter { /** * Rate limiter. */ limiter: RateLimiter; /** * A unique Redis key for this limiter. Can be overridden. */ key?: any; /** * Enable/disable key override. Default is false. */ overrideKey?: boolean; /** * Compute Redis key from request object and limiter. * If keyOverride is enabled in the limiter, this will override any key defined for that limiter. * This takes priority over middleware option overrideKeyFn. * Must be defined if overrideKey is enabled and middleware option overrideKeyFn is undefined. */ overrideKeyFn?: (req: Request, limiter: RateLimiter) => any; /** * Enable/disable limit override. Default is false. */ overrideLimit?: boolean; /** * If enabled, this will override limiter limit value. * This takes priority over middleware option overrideLimitFn. * Must be defined if overrideLimit is enabled and middleware option overrideLimitFn is undefined. */ overrideLimitFn?: (req: Request, limiter: RateLimiter) => number; /** * Custom error message for this limiter. Default is 'Too many requests'. */ errorMessage?: string | object; /** * Optional function to skip request evaluation for the current limiter. * Should return true if evaluation must be skipped, false otherwise. */ skipFn?: (req: Request, limiter: RateLimiter) => boolean; } interface ExpressMiddlewareOptions { /** * Limiters that will be evaluated from the middleware. */ limiters: MiddlewareLimiter[]; /** * Compute Redis key from request object and limiter. * If keyOverride is enabled in the limiter, this will override any key defined for that limiter. * Must be defined if there is a limiter with overrideKey enabled and overrideKeyFn undefined. */ overrideKeyFn?: (req: Request, limiter: RateLimiter) => any; /** * If enabled, this will override limiter limit value. * Must be defined if there is a limiter with overrideLimit enabled and overrideLimitFn undefined. */ overrideLimitFn?: (req: Request, limiter: RateLimiter) => number; /** * Status code to be returned if request is throttled (default is 429). */ errorStatusCode?: number; /** * Enable/disable setting rate limit headers on response object. Default is true. */ setHeaders?: boolean; /** * Optional function to set headers on response object. If not provided, default headers will be set on the response. * Called only if setHeaders is enabled. */ setHeadersFn?: (req: Request, res: Response, limiter: RateLimiter, limiterResponse: RateLimiterResponse) => void; /** * Optional function for deciding to skip rate limiting for the request. Useful for white-listing requests. * Return true if the request should be skipped, false otherwise. */ skipFn?: (req: Request) => boolean; /** * Optional function to be called when a request is throttled (not allowed). */ onThrottleRequest?: (req: Request, res: Response, key: any) => void; } export declare const createExpressMiddleware: (options: ExpressMiddlewareOptions) => (req: Request, res: Response, next: NextFunction) => Promise<void | Response<any, Record<string, any>>>; export {};