/**
 * Production-grade Token Bucket Rate Limiter
 * Implements ethical scanning boundaries with configurable limits
 */
import { HttpRequest, RateLimiter, RateLimitStats } from '../types/scanner.js';
export declare class TokenBucketRateLimiter implements RateLimiter {
    protected requestsPerSecond: number;
    protected burstSize: number;
    private tokens;
    private lastRefill;
    private totalRequests;
    private throttledRequests;
    constructor(requestsPerSecond?: number, burstSize?: number);
    /**
     * Throttles requests according to token bucket algorithm
     * Respects server capabilities and ethical boundaries
     */
    throttle(_request: HttpRequest): Promise<void>;
    /**
     * Refills tokens based on elapsed time
     */
    private refillTokens;
    /**
     * Calculates wait time until next token is available
     */
    private calculateWaitTime;
    /**
     * Sleep utility for throttling
     */
    private sleep;
    /**
     * Gets current rate limiting statistics
     */
    getStats(): RateLimitStats;
    /**
     * Updates rate limiting parameters
     */
    updateLimits(requestsPerSecond: number, burstSize: number): void;
    /**
     * Calculates optimal rate limit based on server response headers
     */
    adaptToServerCapabilities(responseHeaders: Record<string, string>): void;
    /**
     * Resets rate limiter state
     */
    reset(): void;
}
/**
 * Advanced Rate Limiter with domain-specific controls
 */
export declare class AdaptiveRateLimiter extends TokenBucketRateLimiter {
    private domainLimits;
    private serverResponseTimes;
    constructor(requestsPerSecond?: number, burstSize?: number);
    /**
     * Sets domain-specific rate limits
     */
    setDomainLimit(domain: string, requestsPerSecond: number, burstSize: number): void;
    /**
     * Throttles with domain-aware rate limiting
     */
    throttle(request: HttpRequest): Promise<void>;
    /**
     * Records server response time for adaptive rate limiting
     */
    recordResponseTime(url: string, responseTime: number): void;
    /**
     * Adapts rate limiting based on server performance
     */
    private adaptRateToServerPerformance;
    /**
     * Extracts domain from URL
     */
    private extractDomain;
}
/**
 * Rate Limiter Factory
 */
export declare class RateLimiterFactory {
    static createBasic(requestsPerSecond?: number, burstSize?: number): RateLimiter;
    static createAdaptive(requestsPerSecond?: number, burstSize?: number): AdaptiveRateLimiter;
    static createEthical(): RateLimiter;
    static createFromConfig(config: {
        type: 'basic' | 'adaptive' | 'ethical';
        requestsPerSecond?: number;
        burstSize?: number;
    }): RateLimiter;
}
//# sourceMappingURL=rate-limiter.d.ts.map