UNPKG

@spaik/mcp-server-roi

Version:

MCP server for AI ROI prediction and tracking with Monte Carlo simulations

77 lines 2 kB
export interface RateLimiterConfig { maxRequestsPerWindow: number; windowMs: number; maxConcurrent?: number; retryAfterMs?: number; name?: string; } export interface RateLimitInfo { remainingRequests: number; resetTime: Date; isLimited: boolean; retryAfter?: number; } /** * Token bucket rate limiter with sliding window */ export declare class RateLimiter { private logger; private requestTimestamps; private currentConcurrent; private readonly config; constructor(config: RateLimiterConfig); /** * Check if a request can be made without hitting rate limits */ canMakeRequest(): RateLimitInfo; /** * Wait for rate limit if necessary and execute request */ executeWithRateLimit<T>(fn: () => Promise<T>, options?: { priority?: 'high' | 'normal' | 'low'; timeout?: number; }): Promise<T>; /** * Wait for an available request slot */ private waitForSlot; /** * Record a request timestamp */ private recordRequest; /** * Remove timestamps outside the current window */ private cleanupOldTimestamps; /** * Calculate retry after time based on current state */ private calculateRetryAfter; /** * Get current rate limiter statistics */ getStats(): { name: string; requestsInWindow: number; currentConcurrent: number; remainingRequests: number; isLimited: boolean; }; /** * Reset the rate limiter */ reset(): void; } /** * Create rate limiters for different services */ export declare const rateLimiters: { perplexity: RateLimiter; fmp: RateLimiter; supabase: RateLimiter; }; /** * Decorator for rate-limited methods */ export declare function RateLimited(limiterName: keyof typeof rateLimiters): (target: any, propertyKey: string, descriptor: PropertyDescriptor) => PropertyDescriptor; //# sourceMappingURL=rate-limiter.d.ts.map