import { Request } from 'express'; type NbAttempts = '1' | '2' | '3' | '4' | '5' | '6' | '7' | '10' | '15' | '20' | '30' | '50' | '60' | '100' | '150' | '200'; type TimeRange = 'min' | '30s' | '5s'; export type RateLimiterStr = `${NbAttempts}/${TimeRange}` | 'disable'; type RateLimiterObj = { /** Max nb attemps in the given time window */ maxNbAttemptsInGivenTimeWindow: number | { main: number; } & { [env in Exclude]?: number; }; /** Time window for nb attemps */ timeWindowInSecondsForNbAttempts: number | { main: number; } & { [env in Exclude]?: number; }; }; export type RateLimiterConfig = RateLimiterObj | RateLimiterStr | ({ [k in Env]?: RateLimiterStr; } & { default: RateLimiterStr; }); export declare const rateLimiter: { recordAttemptAndThrowIfNeeded(ctx: Ctx, route: string, rateLimiterConfig?: RateLimiterConfig): Promise; cleanup(): Promise; }; export declare function rateLimiterMiddleware(ipWhitelist?: string[], config?: RateLimiterConfig): (req: Request, res: any, next: any) => Promise; export {};