import { EventEmitter } from 'events'; export interface RateLimitConfig { windowMs: number; maxRequests: number; skipSuccessfulRequests?: boolean; skipFailedRequests?: boolean; keyGenerator?: (endpoint: string, clientId?: string) => string; onLimitReached?: (key: string) => void; enableBackoff?: boolean; backoffMultiplier?: number; maxBackoffMs?: number; enableDynamicLimits?: boolean; burstLimit?: number; burstWindowMs?: number; } export interface RateLimitInfo { limit: number; remaining: number; resetTime: number; retryAfter?: number; } export interface RateLimitResult { allowed: boolean; info: RateLimitInfo; backoffMs?: number; } export declare class APIRateLimiter extends EventEmitter { private config; private requests; private backoffStates; private dynamicLimits; private logger; private cleanupInterval; constructor(config: RateLimitConfig); checkLimit(endpoint: string, clientId?: string): Promise; recordRequest(endpoint: string, success: boolean, responseTime?: number, clientId?: string): Promise; getStatus(endpoint: string, clientId?: string): RateLimitInfo; getMetrics(): { activeKeys: number; totalRequests: number; rateLimitedRequests: number; averageResponseTime: number; backoffStates: number; topEndpoints: Array<{ endpoint: string; requests: number; avgTime: number; }>; }; reset(endpoint?: string, clientId?: string): void; getSecurityEvents(): Array<{ timestamp: number; type: 'rate_limit_exceeded' | 'burst_limit_exceeded' | 'backoff_entered' | 'suspicious_activity'; key: string; endpoint: string; metadata?: any; }>; detectSuspiciousActivity(endpoint: string, clientId?: string): boolean; private cleanup; private getKey; private getValidRequests; private getEffectiveLimit; private getResetTime; private getRetryAfter; private isInBackoff; private enterBackoff; private resetBackoff; private calculateBackoffTime; private updateDynamicLimit; destroy(): void; } export declare class RateLimiterFactory { static createAPILimiter(config?: Partial): APIRateLimiter; static createStrictLimiter(config?: Partial): APIRateLimiter; static createDevelopmentLimiter(config?: Partial): APIRateLimiter; } //# sourceMappingURL=api-rate-limiter.d.ts.map