/** * Common type definitions for all device types * Consolidates and standardizes device-related types */ import { TapoDeviceInfo } from './base'; import { TapoDeviceType } from './device-types'; /** * Standard device operation options */ export interface DeviceOperationOptions { /** Timeout for the operation in milliseconds */ timeout?: number; /** Whether to throw an error if the feature is not supported */ throwOnUnsupported?: boolean; /** Whether to use cached values when available */ useCache?: boolean; /** Force refresh of cached values */ forceRefresh?: boolean; } /** * Extended device information with common properties */ export interface ExtendedDeviceInfo extends TapoDeviceInfo { /** Device capabilities flags */ capabilities?: Record; /** Last communication timestamp */ lastCommunication?: number; /** Connection protocol used */ protocol?: 'KLAP' | 'SecurePassthrough'; /** Device health status */ healthStatus?: 'online' | 'offline' | 'degraded' | 'unknown'; } /** * Device feature capability definition */ export interface DeviceCapability { /** Feature identifier */ name: string; /** Whether the feature is supported */ supported: boolean; /** Minimum value (for numeric features) */ minValue?: number; /** Maximum value (for numeric features) */ maxValue?: number; /** Valid values (for enumerated features) */ validValues?: (string | number)[]; /** Feature description */ description?: string; } /** * Device state information */ export interface DeviceState { /** Whether the device is powered on */ isOn: boolean; /** Device operational status */ status: 'ready' | 'busy' | 'error' | 'offline'; /** Last state update timestamp */ lastUpdate: number; /** Any error messages */ errorMessage?: string; } /** * Device control result */ export interface DeviceControlResult { /** Whether the operation was successful */ success: boolean; /** Operation completion timestamp */ timestamp: number; /** Error information if unsuccessful */ error?: { code: string; message: string; retryable: boolean; }; /** Additional result data */ data?: Record; } /** * Device method execution context */ export interface DeviceMethodContext { /** Method name being executed */ method: string; /** Method parameters */ parameters?: Record; /** Operation options */ options?: DeviceOperationOptions; /** Execution start time */ startTime: number; } /** * Device event types */ export declare enum DeviceEventType { CONNECTED = "connected", DISCONNECTED = "disconnected", STATE_CHANGED = "state_changed", ERROR = "error", CAPABILITY_CHANGED = "capability_changed" } /** * Device event data */ export interface DeviceEvent { /** Event type */ type: DeviceEventType; /** Event timestamp */ timestamp: number; /** Device identifier */ deviceId: string; /** Event-specific data */ data?: Record; /** Previous state (for state change events) */ previousState?: any; /** Current state (for state change events) */ currentState?: any; } /** * Device metrics for monitoring */ export interface DeviceMetrics { /** Total number of successful operations */ successfulOperations: number; /** Total number of failed operations */ failedOperations: number; /** Average response time in milliseconds */ averageResponseTime: number; /** Last successful communication timestamp */ lastSuccess?: number; /** Last failed communication timestamp */ lastFailure?: number; /** Connection uptime in milliseconds */ uptime: number; /** Number of reconnection attempts */ reconnectionAttempts: number; } /** * Standard result wrapper for device operations */ export interface DeviceOperationResult { /** Whether the operation succeeded */ success: boolean; /** Result data if successful */ data?: T; /** Error information if unsuccessful */ error?: { type: string; message: string; code?: string; retryable: boolean; retryAfter: number | undefined; }; /** Operation metadata */ metadata?: { duration: number; timestamp: number; protocol: string; attempt: number; }; } /** * Device configuration options */ export interface DeviceConfiguration { /** Device connection settings */ connection?: { timeout?: number; retryAttempts?: number; retryDelay?: number; keepAlive?: boolean; }; /** Feature-specific settings */ features?: { enableCaching?: boolean; cacheTimeout?: number; autoDiscovery?: boolean; }; /** Logging and monitoring */ monitoring?: { enableMetrics?: boolean; enableEvents?: boolean; logLevel?: 'debug' | 'info' | 'warn' | 'error'; }; } /** * Infer TapoDeviceType from device information using deviceTypeToCategory mapping * @param deviceInfo Device information obtained from the device * @returns Inferred TapoDeviceType */ export declare function inferTapoDeviceType(deviceInfo: TapoDeviceInfo): TapoDeviceType;