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
TypeScript
/**
* 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