import { EventEmitter } from 'events';
export interface AdaptivePollingConfig {
    baseInterval: number;
    minInterval: number;
    maxInterval: number;
    sensitivity: number;
    sampleSize: number;
    rateLimitPerMinute: number;
}
export interface DataSourceStats {
    id: string;
    currentInterval: number;
    lastPoll: number;
    changeCount: number;
    totalPolls: number;
    changeRate: number;
    volatility: number;
    changeSamples: number[];
}
export interface BatchRequestConfig {
    maxBatchSize: number;
    batchTimeout: number;
    batchInterval: number;
}
export interface ApiCallStats {
    totalCalls: number;
    successfulCalls: number;
    failedCalls: number;
    averageResponseTime: number;
    callsPerMinute: number;
    lastCallTime: number;
}
export declare class AdaptivePollingManager extends EventEmitter {
    private config;
    private dataSourceStats;
    private intervalTimers;
    private batchConfig;
    private apiStats;
    private pendingRequests;
    private batchTimers;
    private isRunning;
    constructor(config?: Partial<AdaptivePollingConfig>);
    start(): void;
    stop(): void;
    registerDataSource(dataSourceId: string, initialInterval?: number): void;
    unregisterDataSource(dataSourceId: string): void;
    reportDataChange(dataSourceId: string, changeData?: any): void;
    getOptimalInterval(dataSourceId: string): number;
    queueBatchRequest(batchId: string, request: any, priority?: 'high' | 'medium' | 'low'): Promise<any>;
    getApiStats(): ApiCallStats;
    getDataSourceStats(): Map<string, DataSourceStats>;
    getStats(): {
        dataSourceCount: number;
        totalPolls: number;
        totalChanges: number;
        apiStats: ApiCallStats;
        averageInterval: number;
        activeDataSources: string[];
    };
    private startPollingForDataSource;
    private pollDataSource;
    private updateVolatilityAndInterval;
    private calculateOptimalInterval;
    private restartPollingForDataSource;
    private processBatch;
    private trackApiCall;
    private setupRateLimitMonitoring;
}
//# sourceMappingURL=adaptive-polling.d.ts.map