export interface RateLimitConfig {
    windowMs: number;
    maxRequests: number;
    maxCost: number;
    blockDurationMs: number;
    algorithm: 'fixed' | 'sliding' | 'token-bucket';
}
export interface RateLimitResult {
    allowed: boolean;
    remaining: number;
    resetTime: number;
    retryAfter?: number;
    reason: string | undefined;
}
export interface UsageRecord {
    timestamp: number;
    requests: number;
    cost: number;
}
export declare class RateLimitService {
    private static instance;
    private usageStore;
    private blockStore;
    private tokenBuckets;
    private readonly rateLimits;
    private constructor();
    static getInstance(): RateLimitService;
    checkRateLimit(userId: string, userTier?: string, cost?: number): Promise<RateLimitResult>;
    private applySlidingWindowRateLimit;
    private applyTokenBucketRateLimit;
    private applyFixedWindowRateLimit;
    getUserUsage(userId: string, userTier?: string): Promise<{
        currentPeriod: {
            requests: number;
            cost: number;
        };
        remaining: {
            requests: number;
            cost: number;
        };
        resetTime: number;
        tier: string;
        blocked: boolean;
        blockExpiresAt?: number;
    }>;
    resetUserLimits(userId: string): Promise<void>;
    getAllUsersStatus(): Promise<Map<string, any>>;
    cleanup(): Promise<void>;
}
export declare const rateLimitService: RateLimitService;
//# sourceMappingURL=RateLimitService.d.ts.map