/**
 * Rate limiting for expensive operations.
 * Uses token bucket algorithm to prevent API abuse.
 * Ported from Python rate_limiter.py
 */
export interface RateLimitStatus {
    allowed: boolean;
    remaining: number;
    resetInSeconds: number;
}
/**
 * Token bucket rate limiter.
 *
 * Usage:
 *   const limiter = new RateLimiter(60, 3600);
 *   if (limiter.isAllowed('user_123')) {
 *     // Allow request
 *   } else {
 *     // Reject (rate limited)
 *   }
 */
export declare class RateLimiter {
    private maxRequests;
    private windowMs;
    private requests;
    /**
     * Initialize rate limiter.
     *
     * @param maxRequests - Maximum requests allowed in window
     * @param windowSeconds - Time window in seconds
     */
    constructor(maxRequests: number, windowSeconds: number);
    /**
     * Check if request is allowed.
     */
    isAllowed(identifier: string): boolean;
    /**
     * Get remaining requests in current window.
     */
    getRemaining(identifier: string): number;
    /**
     * Get full rate limit status.
     */
    getStatus(identifier: string): RateLimitStatus;
    /**
     * Reset rate limit for identifier.
     */
    reset(identifier: string): void;
    /**
     * Clear all rate limit data.
     */
    clearAll(): void;
    /**
     * Cleanup old entries to prevent memory leaks.
     * Call this periodically (e.g., every minute).
     */
    cleanup(): void;
}
export declare const openaiLimiter: RateLimiter;
export declare const websocketLimiter: RateLimiter;
/**
 * Check if user can make request of a given type.
 */
export declare function checkRateLimit(userId: string, type: 'openai' | 'websocket'): boolean;
/**
 * Check if user can make OpenAI request.
 */
export declare function checkOpenAIRateLimit(userId: string): boolean;
/**
 * Check if user can send WebSocket message.
 */
export declare function checkWebSocketRateLimit(userId: string): boolean;
/**
 * Get OpenAI rate limit status for user.
 */
export declare function getOpenAIRateLimitStatus(userId: string): RateLimitStatus;
/**
 * Get WebSocket rate limit status for user.
 */
export declare function getWebSocketRateLimitStatus(userId: string): RateLimitStatus;
export declare const rateLimiter: {
    RateLimiter: typeof RateLimiter;
    openaiLimiter: RateLimiter;
    websocketLimiter: RateLimiter;
    checkOpenAIRateLimit: typeof checkOpenAIRateLimit;
    checkWebSocketRateLimit: typeof checkWebSocketRateLimit;
    getOpenAIRateLimitStatus: typeof getOpenAIRateLimitStatus;
    getWebSocketRateLimitStatus: typeof getWebSocketRateLimitStatus;
};
//# sourceMappingURL=rate_limiter.d.ts.map