import { EventEmitter } from 'events';
export interface ApiOptimizerConfig {
    enableCaching: boolean;
    cacheTtl: number;
    maxCacheSize: number;
    enableDeduplication: boolean;
    deduplicationWindow: number;
    enableCoalescing: boolean;
    coalescingWindow: number;
    enableCompression: boolean;
    compressionThreshold: number;
}
export interface OptimizationStats {
    totalRequests: number;
    cachedRequests: number;
    deduplicatedRequests: number;
    coalescedRequests: number;
    cacheHitRatio: number;
    averageResponseTime: number;
    bytesSaved: number;
    currentCacheSize: number;
}
export declare class ApiOptimizer extends EventEmitter {
    private config;
    private cache;
    private pendingRequests;
    private recentRequests;
    private stats;
    private coalescingTimers;
    constructor(config?: Partial<ApiOptimizerConfig>);
    optimizeRequest(method: string, url: string, params?: Record<string, any>, body?: any, options?: {
        priority?: 'low' | 'medium' | 'high';
        bypassCache?: boolean;
        ttl?: number;
    }): Promise<any>;
    invalidateCache(pattern?: string): void;
    getStats(): OptimizationStats;
    getCacheInfo(): {
        size: number;
        entries: Array<{
            hash: string;
            timestamp: number;
            ttl: number;
            hitCount: number;
            size: number;
        }>;
    };
    updateConfig(newConfig: Partial<ApiOptimizerConfig>): void;
    reset(): void;
    private createRequestSignature;
    private hashSignature;
    private hashObject;
    private getCachedResponse;
    private checkForDuplicate;
    private coalesceRequest;
    private executePendingRequest;
    private executeRequest;
    private cacheResponse;
    private evictOldestEntry;
    private estimateSize;
    private getPriorityValue;
    private updateStats;
    private setupCacheCleanup;
    private cleanupExpiredEntries;
}
//# sourceMappingURL=api-optimizer.d.ts.map