UNPKG

@felixgeelhaar/govee-api-client

Version:

Enterprise-grade TypeScript client library for the Govee Developer REST API

141 lines 5.09 kB
import { Logger } from 'pino'; import { IGoveeDeviceRepository } from '../domain/repositories/IGoveeDeviceRepository'; import { GoveeDevice } from '../domain/entities/GoveeDevice'; import { DeviceState } from '../domain/entities/DeviceState'; import { Command } from '../domain/entities/Command'; import { ColorRgb, ColorTemperature, Brightness } from '../domain/value-objects'; import { SlidingWindowRateLimiterConfig } from '../infrastructure'; import { RetryPolicy } from '../infrastructure/retry'; export interface GoveeControlServiceConfig { repository: IGoveeDeviceRepository; rateLimit?: number; logger?: Logger; rateLimiterConfig?: Partial<SlidingWindowRateLimiterConfig>; enableRetries?: boolean; retryPolicy?: 'development' | 'testing' | 'production' | 'custom' | RetryPolicy; } export declare class GoveeControlService { private readonly repository; private readonly logger; private readonly rateLimiter; private readonly enableRetries; constructor(config: GoveeControlServiceConfig); /** * Creates a retry-enabled repository wrapper */ private createRetryableRepository; private validateConfig; /** * Retrieves all devices associated with the configured API key */ getDevices(): Promise<GoveeDevice[]>; /** * Retrieves the current state of a specific device */ getDeviceState(deviceId: string, model: string): Promise<DeviceState>; /** * Sends a command to control a specific device */ sendCommand(deviceId: string, model: string, command: Command): Promise<void>; /** * Turns a device on */ turnOn(deviceId: string, model: string): Promise<void>; /** * Turns a device off */ turnOff(deviceId: string, model: string): Promise<void>; /** * Sets the brightness of a device */ setBrightness(deviceId: string, model: string, brightness: Brightness): Promise<void>; /** * Sets the color of a device */ setColor(deviceId: string, model: string, color: ColorRgb): Promise<void>; /** * Sets the color temperature of a device */ setColorTemperature(deviceId: string, model: string, colorTemperature: ColorTemperature): Promise<void>; /** * Convenience method to turn on a device and set its brightness */ turnOnWithBrightness(deviceId: string, model: string, brightness: Brightness): Promise<void>; /** * Convenience method to turn on a device and set its color */ turnOnWithColor(deviceId: string, model: string, color: ColorRgb, brightness?: Brightness): Promise<void>; /** * Convenience method to turn on a device and set its color temperature */ turnOnWithColorTemperature(deviceId: string, model: string, colorTemperature: ColorTemperature, brightness?: Brightness): Promise<void>; /** * Convenience method to check if a device is online */ isDeviceOnline(deviceId: string, model: string): Promise<boolean>; /** * Convenience method to check if a device is powered on */ isDevicePoweredOn(deviceId: string, model: string): Promise<boolean>; /** * Convenience method to get all controllable devices */ getControllableDevices(): Promise<GoveeDevice[]>; /** * Convenience method to get all retrievable devices */ getRetrievableDevices(): Promise<GoveeDevice[]>; /** * Convenience method to find a device by name (case-insensitive) */ findDeviceByName(deviceName: string): Promise<GoveeDevice | undefined>; /** * Convenience method to find devices by model */ findDevicesByModel(model: string): Promise<GoveeDevice[]>; /** * Gets current rate limiter statistics for monitoring and debugging */ getRateLimiterStats(): { currentRequests: number; maxRequests: number; queueSize: number; windowMs: number; utilizationPercent: number; canExecuteImmediately: boolean; nextAvailableSlot: number; }; /** * Gets retry metrics if retry functionality is enabled */ getRetryMetrics(): Readonly<import("../infrastructure").RetryMetrics> | null; /** * Resets retry metrics if retry functionality is enabled */ resetRetryMetrics(): void; /** * Gets comprehensive service statistics including rate limiter and retry metrics */ getServiceStats(): { rateLimiter: { currentRequests: number; maxRequests: number; queueSize: number; windowMs: number; utilizationPercent: number; canExecuteImmediately: boolean; nextAvailableSlot: number; }; retries: Readonly<import("../infrastructure").RetryMetrics> | null; configuration: { enableRetries: boolean; rateLimit: number; }; }; /** * Checks if retry functionality is enabled */ isRetryEnabled(): boolean; private validateDeviceParams; } //# sourceMappingURL=GoveeControlService.d.ts.map