/** * Unified device connection and communication manager * Eliminates duplication between plug and bulb implementations */ import { TapoCredentials, TapoApiRequest, TapoApiResponse } from '../types'; export interface DeviceConnectionOptions { maxRetries?: number; retryDelay?: number; minRequestInterval?: number; enableLegacyFallback?: boolean; } export interface SessionErrorPatterns { klapSessionErrors: string[]; generalSessionErrors: string[]; busyErrors: string[]; } /** * Centralized device communication manager * Handles authentication, session management, and request queuing */ export declare class DeviceManager { private readonly ip; private readonly deviceType; private auth; private klapAuth; private useKlap; private requestQueue; private lastRequestTime; private isConnected; private readonly options; private readonly sessionErrorPatterns; constructor(ip: string, credentials: TapoCredentials, deviceType: string, options?: DeviceConnectionOptions); /** * Check if device is reachable */ private checkDeviceConnectivity; /** * Determine if errors indicate legacy device */ private isLikelyLegacyDevice; /** * Classify error types for appropriate handling */ private classifyError; /** * Establish connection to device */ connect(): Promise; /** * Disconnect from device */ disconnect(): Promise; /** * Check if currently connected */ isDeviceConnected(): boolean; /** * Send request with automatic session management and rate limiting */ sendRequest(request: TapoApiRequest): Promise>; /** * Execute the actual request using the appropriate protocol */ private executeRequest; /** * Handle session error by re-authenticating */ private reconnectAfterSessionError; /** * Get current protocol information */ getConnectionInfo(): { protocol: 'KLAP' | 'SecurePassthrough'; connected: boolean; }; }