UNPKG

codecrucible-synth

Version:

Production-Ready AI Development Platform with Multi-Voice Synthesis, Smithery MCP Integration, Enterprise Security, and Zero-Timeout Reliability

104 lines 2.85 kB
/** * Enterprise Rate Limiting System * Implements sliding window, fixed window, and token bucket algorithms with Redis backend */ import { EventEmitter } from 'events'; export interface RateLimitConfig { algorithm: 'sliding-window' | 'fixed-window' | 'token-bucket'; windowMs: number; maxRequests: number; keyGenerator?: (req: any) => string; skipSuccessfulRequests?: boolean; skipFailedRequests?: boolean; skipIf?: (req: any) => boolean; message?: string; standardHeaders?: boolean; legacyHeaders?: boolean; store?: RateLimitStore; onLimitReached?: (req: any, res: any) => void; } export interface RateLimitInfo { totalHits: number; totalHitsLimit: number; remainingHits: number; msBeforeNext: number; resetTime: Date; } export interface RateLimitStore { get(key: string): Promise<RateLimitInfo | null>; set(key: string, info: RateLimitInfo, ttl: number): Promise<void>; increment(key: string): Promise<RateLimitInfo>; reset(key: string): Promise<void>; } export interface TokenBucketConfig { capacity: number; refillRate: number; refillInterval: number; } export interface SlidingWindowConfig { windowSize: number; subWindows: number; } /** * Main rate limiter class */ export declare class RateLimiter extends EventEmitter { private config; private store; private tokenBuckets; private slidingWindows; private cleanupInterval?; constructor(config: RateLimitConfig); /** * Create Express middleware */ middleware(): (req: any, res: any, next: any) => Promise<any>; /** * Check if request is within rate limit */ checkLimit(key: string, req?: any): Promise<{ allowed: boolean; info: RateLimitInfo; }>; /** * Check token bucket rate limit */ private checkTokenBucket; /** * Check sliding window rate limit */ private checkSlidingWindow; /** * Check fixed window rate limit */ private checkFixedWindow; /** * Default key generator (IP-based) */ private defaultKeyGenerator; /** * Get rate limit status for a key */ getStatus(key: string): Promise<RateLimitInfo | null>; /** * Reset rate limit for a key */ reset(key: string): Promise<void>; /** * Create key generator for specific field */ static createKeyGenerator(field: 'ip' | 'userId' | 'sessionId' | string): (req: any) => string; /** * Create different rate limiters for different endpoints */ static createTieredLimiters(): Record<string, RateLimiter>; /** * Clean up sliding windows */ private cleanupSlidingWindows; /** * Stop rate limiter and clean up resources */ stop(): void; } //# sourceMappingURL=rate-limiter.d.ts.map