/**
 * Rate limiting and quota management for OpenRouter API
 */
/**
 * Rate limit configuration
 */
export interface RateLimitConfig {
    requestsPerMinute: number;
    requestsPerHour: number;
    requestsPerDay: number;
    tokensPerMinute?: number;
    tokensPerHour?: number;
    tokensPerDay?: number;
    costPerMinute?: number;
    costPerHour?: number;
    costPerDay?: number;
}
/**
 * Usage tracking data
 */
export interface UsageStats {
    requests: {
        minute: number;
        hour: number;
        day: number;
    };
    tokens: {
        minute: number;
        hour: number;
        day: number;
    };
    cost: {
        minute: number;
        hour: number;
        day: number;
    };
    lastReset: {
        minute: number;
        hour: number;
        day: number;
    };
}
/**
 * Rate limit status
 */
export interface RateLimitStatus {
    allowed: boolean;
    reason?: string;
    retryAfter?: number;
    remaining: {
        requests: {
            minute: number;
            hour: number;
            day: number;
        };
        tokens?: {
            minute: number;
            hour: number;
            day: number;
        };
        cost?: {
            minute: number;
            hour: number;
            day: number;
        };
    };
}
/**
 * Default rate limits (conservative defaults)
 */
export declare const DEFAULT_RATE_LIMITS: RateLimitConfig;
/**
 * Rate limiter with multiple time windows
 */
export declare class RateLimiter {
    private config;
    private usage;
    private buckets;
    constructor(config: RateLimitConfig);
    /**
     * Check if a request is allowed
     */
    checkRequest(tokens?: number, cost?: number): RateLimitStatus;
    /**
     * Record usage after a successful request
     */
    recordUsage(tokens?: number, cost?: number): void;
    /**
     * Get current usage statistics
     */
    getUsage(): UsageStats;
    /**
     * Get remaining limits
     */
    private getRemainingLimits;
    /**
     * Reset counters when time windows expire
     */
    private resetCountersIfNeeded;
    /**
     * Initialize usage tracking
     */
    private initializeUsage;
    /**
     * Update rate limit configuration
     */
    updateConfig(config: Partial<RateLimitConfig>): void;
}
/**
 * Quota management for cost control
 */
export interface QuotaConfig {
    dailyBudget: number;
    monthlyBudget: number;
    alertThresholds: number[];
    autoStop: boolean;
}
/**
 * Quota usage tracking
 */
export interface QuotaUsage {
    daily: {
        spent: number;
        budget: number;
        remaining: number;
        percentage: number;
    };
    monthly: {
        spent: number;
        budget: number;
        remaining: number;
        percentage: number;
    };
    lastReset: {
        daily: number;
        monthly: number;
    };
}
/**
 * Quota alert
 */
export interface QuotaAlert {
    type: 'warning' | 'critical' | 'exceeded';
    period: 'daily' | 'monthly';
    threshold: number;
    current: number;
    budget: number;
    message: string;
}
/**
 * Quota manager for cost control
 */
export declare class QuotaManager {
    private config;
    private usage;
    private alerts;
    constructor(config: QuotaConfig);
    /**
     * Check if a request is within quota
     */
    checkQuota(estimatedCost: number): {
        allowed: boolean;
        alert?: QuotaAlert;
    };
    /**
     * Record actual spending
     */
    recordSpending(actualCost: number): void;
    /**
     * Get current quota usage
     */
    getUsage(): QuotaUsage;
    /**
     * Get recent alerts
     */
    getAlerts(): QuotaAlert[];
    /**
     * Clear alerts
     */
    clearAlerts(): void;
    /**
     * Update quota configuration
     */
    updateConfig(config: Partial<QuotaConfig>): void;
    private initializeUsage;
    private updateUsageCalculations;
    private resetQuotasIfNeeded;
    private checkThresholds;
}
//# sourceMappingURL=rate-limiting.d.ts.map