import { EventEmitter } from 'events';
export interface BatchRequestConfig {
    maxBatchSize: number;
    maxWaitTime: number;
    minBatchInterval: number;
    enableIntelligentBatching: boolean;
    maxConcurrentBatches: number;
    retryAttempts: number;
    retryDelay: number;
}
export interface BatchRequestItem {
    id: string;
    method: string;
    url: string;
    params: Record<string, any>;
    body?: any;
    headers?: Record<string, string>;
    priority: 'low' | 'medium' | 'high';
    timestamp: number;
    resolve: (value: any) => void;
    reject: (error: any) => void;
    timeout?: number;
}
export interface BatchResult {
    batchId: string;
    requestCount: number;
    successCount: number;
    failureCount: number;
    processingTime: number;
    results: Array<{
        requestId: string;
        success: boolean;
        data?: any;
        error?: any;
        responseTime: number;
    }>;
}
export interface BatchStats {
    totalBatches: number;
    totalRequests: number;
    averageBatchSize: number;
    averageProcessingTime: number;
    successRate: number;
    requestsPerSecond: number;
    pendingRequests: number;
    activeBatches: number;
}
export declare class BatchRequestManager extends EventEmitter {
    private config;
    private pendingRequests;
    private activeBatches;
    private batchTimers;
    private stats;
    private requestIdCounter;
    private batchIdCounter;
    private isRunning;
    private periodicProcessTimer?;
    constructor(config?: Partial<BatchRequestConfig>);
    start(): void;
    stop(): void;
    addRequest(method: string, url: string, params?: Record<string, any>, body?: any, options?: {
        priority?: 'low' | 'medium' | 'high';
        headers?: Record<string, string>;
        timeout?: number;
    }): Promise<any>;
    getStats(): BatchStats;
    getPendingRequests(): Array<{
        id: string;
        method: string;
        url: string;
        priority: string;
        timestamp: number;
    }>;
    flushPendingRequests(): Promise<void>;
    updateConfig(newConfig: Partial<BatchRequestConfig>): void;
    resetStats(): void;
    private generateRequestId;
    private generateBatchId;
    private checkBatchProcessingConditions;
    private scheduleImmediateBatchProcessing;
    private setupPeriodicBatchProcessing;
    private processNextBatch;
    private selectRequestsForBatch;
    private selectIntelligentBatch;
    private processBatch;
    private executeBatch;
    private executeIndividualRequest;
    private updateBatchStats;
}
//# sourceMappingURL=batch-request-manager.d.ts.map