@spaik/mcp-server-roi
Version:
MCP server for AI ROI prediction and tracking with Monte Carlo simulations
77 lines • 2 kB
TypeScript
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