@felixgeelhaar/govee-api-client 3.0.0 → 3.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (62) hide show
  1. package/README.md +162 -2
  2. package/dist/GoveeClient.d.ts +16 -1
  3. package/dist/GoveeClient.d.ts.map +1 -1
  4. package/dist/GoveeClient.js +27 -0
  5. package/dist/GoveeClient.js.map +1 -1
  6. package/dist/domain/entities/Command.d.ts +124 -1
  7. package/dist/domain/entities/Command.d.ts.map +1 -1
  8. package/dist/domain/entities/Command.js +173 -1
  9. package/dist/domain/entities/Command.js.map +1 -1
  10. package/dist/domain/entities/DeviceState.d.ts +34 -2
  11. package/dist/domain/entities/DeviceState.d.ts.map +1 -1
  12. package/dist/domain/entities/DeviceState.js +32 -0
  13. package/dist/domain/entities/DeviceState.js.map +1 -1
  14. package/dist/domain/entities/GoveeDevice.d.ts.map +1 -1
  15. package/dist/domain/entities/GoveeDevice.js +56 -0
  16. package/dist/domain/entities/GoveeDevice.js.map +1 -1
  17. package/dist/domain/entities/index.d.ts +2 -2
  18. package/dist/domain/entities/index.d.ts.map +1 -1
  19. package/dist/domain/entities/index.js +1 -1
  20. package/dist/domain/entities/index.js.map +1 -1
  21. package/dist/domain/repositories/IGoveeDeviceRepository.d.ts +5 -0
  22. package/dist/domain/repositories/IGoveeDeviceRepository.d.ts.map +1 -1
  23. package/dist/domain/value-objects/LightScene.d.ts +72 -0
  24. package/dist/domain/value-objects/LightScene.d.ts.map +1 -0
  25. package/dist/domain/value-objects/LightScene.js +138 -0
  26. package/dist/domain/value-objects/LightScene.js.map +1 -0
  27. package/dist/domain/value-objects/MusicMode.d.ts +51 -0
  28. package/dist/domain/value-objects/MusicMode.d.ts.map +1 -0
  29. package/dist/domain/value-objects/MusicMode.js +95 -0
  30. package/dist/domain/value-objects/MusicMode.js.map +1 -0
  31. package/dist/domain/value-objects/SegmentColor.d.ts +59 -0
  32. package/dist/domain/value-objects/SegmentColor.d.ts.map +1 -0
  33. package/dist/domain/value-objects/SegmentColor.js +90 -0
  34. package/dist/domain/value-objects/SegmentColor.js.map +1 -0
  35. package/dist/domain/value-objects/index.d.ts +3 -0
  36. package/dist/domain/value-objects/index.d.ts.map +1 -1
  37. package/dist/domain/value-objects/index.js +3 -0
  38. package/dist/domain/value-objects/index.js.map +1 -1
  39. package/dist/index.d.ts +3 -3
  40. package/dist/index.d.ts.map +1 -1
  41. package/dist/index.js +3 -3
  42. package/dist/index.js.map +1 -1
  43. package/dist/infrastructure/GoveeDeviceRepository.d.ts +2 -0
  44. package/dist/infrastructure/GoveeDeviceRepository.d.ts.map +1 -1
  45. package/dist/infrastructure/GoveeDeviceRepository.js +125 -8
  46. package/dist/infrastructure/GoveeDeviceRepository.js.map +1 -1
  47. package/dist/infrastructure/response-schemas.d.ts +47 -0
  48. package/dist/infrastructure/response-schemas.d.ts.map +1 -1
  49. package/dist/infrastructure/response-schemas.js +28 -0
  50. package/dist/infrastructure/response-schemas.js.map +1 -1
  51. package/dist/infrastructure/retry/RetryableRepository.d.ts +5 -0
  52. package/dist/infrastructure/retry/RetryableRepository.d.ts.map +1 -1
  53. package/dist/infrastructure/retry/RetryableRepository.js +17 -0
  54. package/dist/infrastructure/retry/RetryableRepository.js.map +1 -1
  55. package/dist/services/GoveeControlService.d.ts +43 -1
  56. package/dist/services/GoveeControlService.d.ts.map +1 -1
  57. package/dist/services/GoveeControlService.js +70 -0
  58. package/dist/services/GoveeControlService.js.map +1 -1
  59. package/docs/EXAMPLES.md +238 -0
  60. package/docs/LLM_API_REFERENCE.md +139 -6
  61. package/docs/TYPE_DEFINITIONS.md +86 -0
  62. package/package.json +1 -1
@@ -48,6 +48,25 @@ class GoveeClient {
48
48
  colorTemperature: ColorTemperature
49
49
  ): Promise<void>;
50
50
 
51
+ // Advanced Light Control
52
+ getDynamicScenes(deviceId: string, model: string): Promise<LightScene[]>;
53
+ setLightScene(deviceId: string, model: string, scene: LightScene): Promise<void>;
54
+ setSegmentColors(
55
+ deviceId: string,
56
+ model: string,
57
+ segments: SegmentColor | SegmentColor[]
58
+ ): Promise<void>;
59
+ setSegmentBrightness(
60
+ deviceId: string,
61
+ model: string,
62
+ segments: Array<{ index: number; brightness: Brightness }> | { index: number; brightness: Brightness }
63
+ ): Promise<void>;
64
+ setMusicMode(deviceId: string, model: string, musicMode: MusicMode): Promise<void>;
65
+ setNightlightToggle(deviceId: string, model: string, enabled: boolean): Promise<void>;
66
+ setGradientToggle(deviceId: string, model: string, enabled: boolean): Promise<void>;
67
+ setNightlightScene(deviceId: string, model: string, sceneValue: string | number): Promise<void>;
68
+ setPresetScene(deviceId: string, model: string, sceneValue: string | number): Promise<void>;
69
+
51
70
  // Convenience Methods
52
71
  turnOnWithBrightness(deviceId: string, model: string, brightness: Brightness): Promise<void>;
53
72
  turnOnWithColor(
@@ -125,13 +144,31 @@ class DeviceState {
125
144
  readonly model: string;
126
145
  readonly properties: readonly StateProperty[];
127
146
 
147
+ // Basic state getters
128
148
  getPowerState(): 'on' | 'off' | undefined;
129
- getBrightness(): number | undefined; // 0-100
130
- getColor(): { r: number; g: number; b: number } | undefined;
131
- getColorTemperature(): number | undefined; // Kelvin
149
+ getBrightness(): Brightness | undefined;
150
+ getColor(): ColorRgb | undefined;
151
+ getColorTemperature(): ColorTemperature | undefined;
152
+
153
+ // Advanced state getters
154
+ getLightScene(): LightScene | undefined;
155
+ getSegmentColors(): SegmentColor[] | undefined;
156
+ getSegmentBrightness(): Array<{ index: number; brightness: Brightness }> | undefined;
157
+ getMusicMode(): MusicMode | undefined;
158
+ getNightlightToggle(): boolean | undefined;
159
+ getGradientToggle(): boolean | undefined;
160
+ getNightlightScene(): string | number | undefined;
161
+ getPresetScene(): string | number | undefined;
162
+
163
+ // Status checks
132
164
  isOnline(): boolean;
133
- hasProperty(type: string, instance: string): boolean;
134
- getProperty(type: string, instance: string): StateProperty | undefined;
165
+ isPoweredOn(): boolean;
166
+ isPoweredOff(): boolean;
167
+ isOffline(): boolean;
168
+
169
+ // Property access
170
+ hasProperty(key: string): boolean;
171
+ getProperty<T extends StateProperty>(key: string): T | undefined;
135
172
  }
136
173
  ```
137
174
 
@@ -146,20 +183,44 @@ abstract class Command {
146
183
  abstract toApiFormat(): { name: string; value: unknown }
147
184
  }
148
185
 
149
- // Command types:
186
+ // Basic command types:
150
187
  class PowerOnCommand extends Command
151
188
  class PowerOffCommand extends Command
152
189
  class BrightnessCommand extends Command
153
190
  class ColorCommand extends Command
154
191
  class ColorTemperatureCommand extends Command
155
192
 
193
+ // Advanced command types:
194
+ class LightSceneCommand extends Command
195
+ class SegmentColorRgbCommand extends Command
196
+ class SegmentBrightnessCommand extends Command
197
+ class MusicModeCommand extends Command
198
+ class ToggleCommand extends Command
199
+ class ModeCommand extends Command
200
+
156
201
  // Command factory:
157
202
  class CommandFactory {
203
+ // Basic commands
158
204
  static powerOn(): PowerOnCommand
159
205
  static powerOff(): PowerOffCommand
160
206
  static brightness(brightness: Brightness): BrightnessCommand
161
207
  static color(color: ColorRgb): ColorCommand
162
208
  static colorTemperature(temp: ColorTemperature): ColorTemperatureCommand
209
+
210
+ // Advanced commands
211
+ static lightScene(scene: LightScene): LightSceneCommand
212
+ static segmentColorRgb(segments: SegmentColor | SegmentColor[]): SegmentColorRgbCommand
213
+ static segmentBrightness(segments: Array<{ index: number; brightness: Brightness }> | { index: number; brightness: Brightness }): SegmentBrightnessCommand
214
+ static musicMode(musicMode: MusicMode): MusicModeCommand
215
+ static toggle(instance: string, enabled: boolean): ToggleCommand
216
+ static nightlightToggle(enabled: boolean): ToggleCommand
217
+ static gradientToggle(enabled: boolean): ToggleCommand
218
+ static mode(instance: string, modeValue: string | number): ModeCommand
219
+ static nightlightScene(sceneValue: string | number): ModeCommand
220
+ static presetScene(sceneValue: string | number): ModeCommand
221
+
222
+ // Create from object
223
+ static fromObject(obj: { name: string; value: unknown }): Command
163
224
  }
164
225
  ```
165
226
 
@@ -234,6 +295,78 @@ class Brightness {
234
295
  }
235
296
  ```
236
297
 
298
+ ### LightScene
299
+
300
+ Represents a dynamic light scene with ID, paramId, and name.
301
+
302
+ ```typescript
303
+ class LightScene {
304
+ constructor(id: number, paramId: number, name: string);
305
+
306
+ readonly id: number;
307
+ readonly paramId: number;
308
+ readonly name: string;
309
+
310
+ equals(other: LightScene): boolean;
311
+ toString(): string;
312
+ toApiValue(): { paramId: number; id: number };
313
+ toObject(): { id: number; paramId: number; name: string };
314
+
315
+ // Factory methods for common scenes
316
+ static sunrise(): LightScene;
317
+ static sunset(): LightScene;
318
+ static rainbow(): LightScene;
319
+ static aurora(): LightScene;
320
+ static candlelight(): LightScene;
321
+ static nightlight(): LightScene;
322
+ static romantic(): LightScene;
323
+ static blinking(): LightScene;
324
+ static fromObject(obj: { id: number; paramId: number; name: string }): LightScene;
325
+ }
326
+ ```
327
+
328
+ ### SegmentColor
329
+
330
+ Represents color (and optional brightness) for an individual LED segment in RGB IC devices.
331
+
332
+ ```typescript
333
+ class SegmentColor {
334
+ constructor(index: number, color: ColorRgb, brightness?: Brightness);
335
+
336
+ readonly index: number; // Segment index (0-based)
337
+ readonly color: ColorRgb;
338
+ readonly brightness: Brightness | undefined;
339
+
340
+ equals(other: SegmentColor): boolean;
341
+ hasBrightness(): boolean;
342
+ toString(): string;
343
+ toObject(): { index: number; color: { r: number; g: number; b: number }; brightness?: { level: number } };
344
+
345
+ static fromObject(obj: { index: number; color: { r: number; g: number; b: number }; brightness?: { level: number } }): SegmentColor;
346
+ }
347
+ ```
348
+
349
+ ### MusicMode
350
+
351
+ Represents music-reactive lighting mode configuration.
352
+
353
+ ```typescript
354
+ class MusicMode {
355
+ constructor(modeId: number, sensitivity?: number);
356
+
357
+ readonly modeId: number;
358
+ readonly sensitivity: number | undefined; // 0-100 (optional)
359
+
360
+ equals(other: MusicMode): boolean;
361
+ hasSensitivity(): boolean;
362
+ toString(): string;
363
+ toApiValue(): { modeId: number; sensitivity?: number };
364
+ toObject(): { modeId: number; sensitivity?: number };
365
+
366
+ static fromObject(obj: { modeId: number; sensitivity?: number }): MusicMode;
367
+ }
368
+ ```
369
+
237
370
  ## Error Handling
238
371
 
239
372
  ### Error Hierarchy
@@ -295,6 +295,92 @@ interface BrightnessObject {
295
295
  }
296
296
  ```
297
297
 
298
+ ### LightScene
299
+
300
+ Represents a dynamic light scene with paramId and sceneId.
301
+
302
+ ```typescript
303
+ class LightScene {
304
+ readonly id: number;
305
+ readonly paramId: number;
306
+ readonly name: string;
307
+
308
+ constructor(id: number, paramId: number, name: string);
309
+ equals(other: LightScene): boolean;
310
+ toString(): string;
311
+ toApiValue(): { paramId: number; id: number };
312
+ toObject(): LightSceneObject;
313
+
314
+ // Factory methods for common scenes
315
+ static sunrise(): LightScene;
316
+ static sunset(): LightScene;
317
+ static rainbow(): LightScene;
318
+ static aurora(): LightScene;
319
+ static candlelight(): LightScene;
320
+ static nightlight(): LightScene;
321
+ static romantic(): LightScene;
322
+ static blinking(): LightScene;
323
+ static fromObject(obj: LightSceneObject): LightScene;
324
+ }
325
+
326
+ interface LightSceneObject {
327
+ id: number;
328
+ paramId: number;
329
+ name: string;
330
+ }
331
+ ```
332
+
333
+ ### SegmentColor
334
+
335
+ Represents color (and optional brightness) for an individual LED segment in RGB IC devices.
336
+
337
+ ```typescript
338
+ class SegmentColor {
339
+ readonly index: number; // Segment index (0-based)
340
+ readonly color: ColorRgb;
341
+ readonly brightness: Brightness | undefined;
342
+
343
+ constructor(index: number, color: ColorRgb, brightness?: Brightness);
344
+ equals(other: SegmentColor): boolean;
345
+ hasBrightness(): boolean;
346
+ toString(): string;
347
+ toObject(): SegmentColorObject;
348
+
349
+ static fromObject(obj: SegmentColorObject): SegmentColor;
350
+ }
351
+
352
+ interface SegmentColorObject {
353
+ index: number;
354
+ color: ColorRgbObject;
355
+ brightness?: BrightnessObject;
356
+ }
357
+ ```
358
+
359
+ ### MusicMode
360
+
361
+ Represents music-reactive lighting mode configuration.
362
+
363
+ ```typescript
364
+ class MusicMode {
365
+ readonly modeId: number;
366
+ readonly sensitivity: number | undefined; // 0-100 (optional)
367
+
368
+ constructor(modeId: number, sensitivity?: number);
369
+ equals(other: MusicMode): boolean;
370
+ hasSensitivity(): boolean;
371
+ toString(): string;
372
+ toApiValue(): { modeId: number; sensitivity?: number };
373
+ toObject(): MusicModeObject;
374
+
375
+ static fromObject(obj: MusicModeObject): MusicMode;
376
+ }
377
+
378
+ interface MusicModeObject {
379
+ modeId: number;
380
+ sensitivity?: number;
381
+ }
382
+ ```
383
+
298
384
  ## Error Types
299
385
 
300
386
  ### Error Hierarchy
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@felixgeelhaar/govee-api-client",
3
- "version": "3.0.0",
3
+ "version": "3.0.2",
4
4
  "description": "Enterprise-grade TypeScript client library for the Govee Developer REST API",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",