import type { Logger } from '@iota-big3/sdk-observability'; import type { NextFunction, Request, Response } from 'express'; import { Redis } from 'ioredis'; export interface RateLimitConfig { enabled?: boolean; windowMs?: number; maxRequests?: number; strategy?: 'sliding-window' | 'token-bucket' | 'fixed-window'; keyGenerator?: (req: Request) => string; skipSuccessfulRequests?: boolean; skipFailedRequests?: boolean; store?: RateLimitStore; message?: string; headers?: boolean; draft_polli_ratelimit_headers?: boolean; } export interface RateLimitStore { incrementAsync(key: string): Promise; decrementAsync(key: string): Promise; resetAsync(key: string): Promise; } export interface RateLimitInfo { count: number; resetTime: Date; remaining: number; } export interface TokenBucketConfig { capacity: number; refillRate: number; refillAmount: number; } export declare class RedisRateLimitStore implements RateLimitStore { private redis; private windowMs; private maxRequests; private strategy; constructor(redis: Redis, windowMs: number, maxRequests: number, strategy: string); incrementAsync(key: string): Promise; private incrementSlidingWindowAsync; private incrementTokenBucketAsync; private incrementFixedWindowAsync; decrementAsync(key: string): Promise; resetAsync(key: string): Promise; } export declare class MemoryRateLimitStore implements RateLimitStore { private windowMs; private maxRequests; private requests; constructor(windowMs: number, maxRequests: number); incrementAsync(key: string): Promise; decrementAsync(key: string): Promise; resetAsync(key: string): Promise; } export declare class RateLimiter { private config; private logger?; constructor(config?: RateLimitConfig, logger?: Logger); expressMiddleware(): (req: Request, res: Response, next: NextFunction) => Promise>>; private setHeaders; static forRoute(options: { path?: string | RegExp; method?: string | string[]; maxRequests: number; windowMs: number; }): RateLimiter; } //# sourceMappingURL=rate-limiter.d.ts.map