import { TapoCredentials, TapoApiRequest, TapoApiResponse, TapoDeviceInfo } from '../types'; import { ConnectionManager } from '../core/connection-manager'; import { SessionManager } from '../core/session-manager'; import { ProtocolSelector, ProtocolType } from '../core/protocol-selector'; import { RequestManager } from '../core/request-manager'; import { DeviceController } from '../controllers/device-controller'; import { EnergyController } from '../controllers/energy-controller'; import { LightingController } from '../controllers/lighting-controller'; export interface DeviceCapabilities { hasEnergyMonitoring: boolean; hasBrightnessControl: boolean; hasColorControl: boolean; hasColorTemperature: boolean; hasLightEffects: boolean; } /** * Base device class using composition pattern * Single responsibility: Device lifecycle and controller coordination */ export declare abstract class BaseDevice { protected readonly ip: string; protected readonly credentials: TapoCredentials; protected readonly deviceModel: string; protected connectionManager: ConnectionManager; protected sessionManager: SessionManager; protected protocolSelector: ProtocolSelector; protected requestManager: RequestManager; protected deviceController: DeviceController; protected energyController?: EnergyController; protected lightingController?: LightingController; protected capabilities: DeviceCapabilities; protected isInitialized: boolean; constructor(ip: string, credentials: TapoCredentials, deviceModel: string); /** * Connect to the device */ connect(): Promise; /** * Disconnect from the device */ disconnect(): Promise; /** * Send request through the request manager */ protected sendRequest(request: TapoApiRequest): Promise; /** * Configure request executor for the request manager */ protected setRequestExecutor(executor: (request: TapoApiRequest) => Promise): void; turnOn(): Promise; turnOff(): Promise; getDeviceInfo(): Promise; setAlias(alias: string): Promise; ping(): Promise; getEnergyUsage(): Promise; getCurrentPower(): Promise; setBrightness(brightness: number): Promise; setColorHSV(hue: number, saturation: number, brightness?: number): Promise; setColorRGB(red: number, green: number, blue: number, brightness?: number): Promise; setNamedColor(colorName: string, brightness?: number): Promise; setColorTemperature(temperature: number, brightness?: number): Promise; getCapabilities(): DeviceCapabilities; isConnected(): boolean; getDeviceModel(): string; getDeviceIP(): string; /** * Determine device capabilities based on model */ protected determineCapabilities(deviceModel: string): DeviceCapabilities; /** * Check if device supports light effects */ protected supportsLightEffects(deviceModel: string): boolean; /** * Initialize session based on protocol type */ protected abstract initializeSession(protocol: ProtocolType): Promise; /** * Cleanup resources */ protected cleanup(): Promise; /** * Handle session refresh */ protected refreshSession(): Promise; }