import { Request, Response, NextFunction } from 'express';
import { RateLimitService, RateLimitConfig } from '../../services/rateLimit/RateLimitService';
export interface RateLimitMiddlewareConfig extends RateLimitConfig {
    identifierExtractor?: (req: Request) => string;
    onLimitReached?: (req: Request, res: Response, info: any) => void;
    standardHeaders?: boolean;
    legacyHeaders?: boolean;
    message?: string;
}
export declare class RateLimitMiddleware {
    private readonly rateLimitService;
    private readonly config;
    constructor(rateLimitService: RateLimitService, config: RateLimitMiddlewareConfig);
    createMiddleware(): (req: Request, res: Response, next: NextFunction) => Promise<Response<any, Record<string, any>> | undefined>;
    private getClientIdentifier;
    private setRateLimitHeaders;
}
export declare function createRateLimitMiddleware(rateLimitService: RateLimitService, config?: RateLimitMiddlewareConfig): (req: Request, res: Response, next: NextFunction) => Promise<Response<any, Record<string, any>> | undefined>;
export declare function createStrictRateLimitMiddleware(rateLimitService: RateLimitService): (req: Request, res: Response, next: NextFunction) => Promise<Response<any, Record<string, any>> | undefined>;
export declare function createGenerousRateLimitMiddleware(rateLimitService: RateLimitService): (req: Request, res: Response, next: NextFunction) => Promise<Response<any, Record<string, any>> | undefined>;
export declare function createPathSpecificRateLimit(rateLimitService: RateLimitService, pathConfigs: Record<string, RateLimitMiddlewareConfig>): (req: Request, res: Response, next: NextFunction) => Promise<Response<any, Record<string, any>> | undefined>;
export declare function createUserRateLimit(rateLimitService: RateLimitService, config?: RateLimitMiddlewareConfig): (req: Request, res: Response, next: NextFunction) => Promise<Response<any, Record<string, any>> | undefined>;
export declare function createApiKeyRateLimit(rateLimitService: RateLimitService, config?: RateLimitMiddlewareConfig): (req: Request, res: Response, next: NextFunction) => Promise<Response<any, Record<string, any>> | undefined>;
//# sourceMappingURL=RateLimitMiddleware.d.ts.map