@felixgeelhaar/govee-api-client
Version:
Enterprise-grade TypeScript client library for the Govee Developer REST API
141 lines • 5.09 kB
TypeScript
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