import { TapoApiRequest, TapoApiResponse } from '../types'; export interface RequestOptions { timeout?: number; retries?: number; priority?: RequestPriority; } export declare enum RequestPriority { LOW = 0, NORMAL = 1, HIGH = 2, CRITICAL = 3 } interface QueuedRequest { id: string; request: TapoApiRequest; options: RequestOptions; priority: RequestPriority; timestamp: number; resolve: (response: TapoApiResponse) => void; reject: (error: Error) => void; } /** * Manages request queuing, rate limiting, and request lifecycle * Single responsibility: Request queue management and rate limiting */ export declare class RequestManager { private readonly minRequestInterval; private requestQueue; private isProcessing; private lastRequestTime; private requestCounter; private requestExecutor?; constructor(minRequestInterval?: number); /** * Queue a request for execution */ queueRequest(request: TapoApiRequest, options?: RequestOptions): Promise; /** * Add request to queue with priority ordering */ private addToQueue; /** * Process the request queue */ private processQueue; /** * Set the request executor function */ setRequestExecutor(executor: (request: TapoApiRequest) => Promise): void; /** * Execute a single request using the configured executor */ protected executeRequest(queuedRequest: QueuedRequest): Promise; /** * Enforce rate limiting between requests */ private enforceRateLimit; /** * Determine if a request should be retried */ private shouldRetry; /** * Generate unique request ID */ private generateRequestId; /** * Get current queue status */ getQueueStatus(): { queueLength: number; isProcessing: boolean; lastRequestTime: number; }; /** * Clear the request queue (useful for cleanup) */ clearQueue(): void; /** * Cancel a specific request by ID */ cancelRequest(requestId: string): boolean; /** * Get requests by priority */ getRequestsByPriority(priority: RequestPriority): QueuedRequest[]; /** * Update minimum request interval (useful for different protocols) */ updateMinRequestInterval(interval: number): void; } export {};