@felixgeelhaar/govee-api-client 1.1.0 → 2.0.1

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 (68) hide show
  1. package/README.md +160 -7
  2. package/dist/GoveeClient.d.ts +31 -0
  3. package/dist/GoveeClient.d.ts.map +1 -1
  4. package/dist/GoveeClient.js +33 -0
  5. package/dist/GoveeClient.js.map +1 -1
  6. package/dist/errors/GoveeApiError.d.ts +1 -1
  7. package/dist/errors/GoveeApiError.d.ts.map +1 -1
  8. package/dist/errors/GoveeApiError.js +9 -2
  9. package/dist/errors/GoveeApiError.js.map +1 -1
  10. package/dist/errors/ValidationError.d.ts +28 -0
  11. package/dist/errors/ValidationError.d.ts.map +1 -0
  12. package/dist/errors/ValidationError.js +44 -0
  13. package/dist/errors/ValidationError.js.map +1 -0
  14. package/dist/errors/index.d.ts +1 -0
  15. package/dist/errors/index.d.ts.map +1 -1
  16. package/dist/errors/index.js +1 -0
  17. package/dist/errors/index.js.map +1 -1
  18. package/dist/index.d.ts +1 -0
  19. package/dist/index.d.ts.map +1 -1
  20. package/dist/index.js +2 -0
  21. package/dist/index.js.map +1 -1
  22. package/dist/infrastructure/GoveeDeviceRepository.d.ts.map +1 -1
  23. package/dist/infrastructure/GoveeDeviceRepository.js +26 -3
  24. package/dist/infrastructure/GoveeDeviceRepository.js.map +1 -1
  25. package/dist/infrastructure/SlidingWindowRateLimiter.d.ts +83 -0
  26. package/dist/infrastructure/SlidingWindowRateLimiter.d.ts.map +1 -0
  27. package/dist/infrastructure/SlidingWindowRateLimiter.js +218 -0
  28. package/dist/infrastructure/SlidingWindowRateLimiter.js.map +1 -0
  29. package/dist/infrastructure/index.d.ts +2 -0
  30. package/dist/infrastructure/index.d.ts.map +1 -1
  31. package/dist/infrastructure/index.js +2 -0
  32. package/dist/infrastructure/index.js.map +1 -1
  33. package/dist/infrastructure/response-schemas.d.ts +82 -0
  34. package/dist/infrastructure/response-schemas.d.ts.map +1 -0
  35. package/dist/infrastructure/response-schemas.js +59 -0
  36. package/dist/infrastructure/response-schemas.js.map +1 -0
  37. package/dist/infrastructure/retry/IntegrationGuide.d.ts +133 -0
  38. package/dist/infrastructure/retry/IntegrationGuide.d.ts.map +1 -0
  39. package/dist/infrastructure/retry/IntegrationGuide.js +295 -0
  40. package/dist/infrastructure/retry/IntegrationGuide.js.map +1 -0
  41. package/dist/infrastructure/retry/RetryConfigPresets.d.ts +114 -0
  42. package/dist/infrastructure/retry/RetryConfigPresets.d.ts.map +1 -0
  43. package/dist/infrastructure/retry/RetryConfigPresets.js +406 -0
  44. package/dist/infrastructure/retry/RetryConfigPresets.js.map +1 -0
  45. package/dist/infrastructure/retry/RetryPolicy.d.ts +148 -0
  46. package/dist/infrastructure/retry/RetryPolicy.d.ts.map +1 -0
  47. package/dist/infrastructure/retry/RetryPolicy.js +373 -0
  48. package/dist/infrastructure/retry/RetryPolicy.js.map +1 -0
  49. package/dist/infrastructure/retry/RetryableRepository.d.ts +75 -0
  50. package/dist/infrastructure/retry/RetryableRepository.d.ts.map +1 -0
  51. package/dist/infrastructure/retry/RetryableRepository.js +142 -0
  52. package/dist/infrastructure/retry/RetryableRepository.js.map +1 -0
  53. package/dist/infrastructure/retry/RetryableRequest.d.ts +132 -0
  54. package/dist/infrastructure/retry/RetryableRequest.d.ts.map +1 -0
  55. package/dist/infrastructure/retry/RetryableRequest.js +248 -0
  56. package/dist/infrastructure/retry/RetryableRequest.js.map +1 -0
  57. package/dist/infrastructure/retry/index.d.ts +35 -0
  58. package/dist/infrastructure/retry/index.d.ts.map +1 -0
  59. package/dist/infrastructure/retry/index.js +36 -0
  60. package/dist/infrastructure/retry/index.js.map +1 -0
  61. package/dist/services/GoveeControlService.d.ts +53 -0
  62. package/dist/services/GoveeControlService.d.ts.map +1 -1
  63. package/dist/services/GoveeControlService.js +138 -12
  64. package/dist/services/GoveeControlService.js.map +1 -1
  65. package/docs/EXAMPLES.md +799 -0
  66. package/docs/LLM_API_REFERENCE.md +425 -0
  67. package/docs/TYPE_DEFINITIONS.md +803 -0
  68. package/package.json +25 -16
@@ -1 +1 @@
1
- {"version":3,"file":"GoveeDeviceRepository.js","sourceRoot":"","sources":["../../src/infrastructure/GoveeDeviceRepository.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"GoveeDeviceRepository.js","sourceRoot":"","sources":["../../src/infrastructure/GoveeDeviceRepository.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,83 @@
1
+ import { Logger } from 'pino';
2
+ /**
3
+ * Configuration for the sliding window rate limiter
4
+ */
5
+ export interface SlidingWindowRateLimiterConfig {
6
+ /** Maximum number of requests allowed per window */
7
+ maxRequests: number;
8
+ /** Window duration in milliseconds */
9
+ windowMs: number;
10
+ /** Logger instance for debugging */
11
+ logger?: Logger;
12
+ /** Maximum queue size to prevent memory leaks */
13
+ maxQueueSize?: number;
14
+ }
15
+ /**
16
+ * High-performance sliding window rate limiter implementation
17
+ *
18
+ * Uses a sliding window algorithm to allow bursts up to the rate limit
19
+ * while maintaining the average rate over time. More efficient than
20
+ * sequential processing as it allows concurrent execution within limits.
21
+ */
22
+ export declare class SlidingWindowRateLimiter {
23
+ private readonly maxRequests;
24
+ private readonly windowMs;
25
+ private readonly logger?;
26
+ private readonly maxQueueSize;
27
+ private readonly requestTimes;
28
+ private readonly requestQueue;
29
+ private processingQueue;
30
+ constructor(config: SlidingWindowRateLimiterConfig);
31
+ /**
32
+ * Factory method to create a rate limiter for Govee API (95 requests/minute)
33
+ */
34
+ static forGoveeApi(logger?: Logger): SlidingWindowRateLimiter;
35
+ /**
36
+ * Factory method to create a custom rate limiter
37
+ */
38
+ static custom(requestsPerMinute: number, logger?: Logger): SlidingWindowRateLimiter;
39
+ /**
40
+ * Executes a function with rate limiting applied
41
+ *
42
+ * @param fn - The async function to execute
43
+ * @returns Promise that resolves with the function's result
44
+ */
45
+ execute<T>(fn: () => Promise<T>): Promise<T>;
46
+ /**
47
+ * Gets current rate limiter statistics
48
+ */
49
+ getStats(): {
50
+ currentRequests: number;
51
+ maxRequests: number;
52
+ queueSize: number;
53
+ windowMs: number;
54
+ utilizationPercent: number;
55
+ canExecuteImmediately: boolean;
56
+ nextAvailableSlot: number;
57
+ };
58
+ /**
59
+ * Processes the request queue, executing requests when rate limits allow
60
+ */
61
+ private processQueue;
62
+ /**
63
+ * Synchronously processes all requests that can execute immediately
64
+ */
65
+ private processQueueSync;
66
+ /**
67
+ * Removes expired request timestamps from the sliding window
68
+ */
69
+ private cleanupExpiredRequests;
70
+ /**
71
+ * Checks if a request can be executed immediately
72
+ */
73
+ private canExecuteNow;
74
+ /**
75
+ * Calculates when the next request slot will be available
76
+ */
77
+ private getNextAvailableTime;
78
+ /**
79
+ * Validates the rate limiter configuration
80
+ */
81
+ private validateConfig;
82
+ }
83
+ //# sourceMappingURL=SlidingWindowRateLimiter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SlidingWindowRateLimiter.d.ts","sourceRoot":"","sources":["../../src/infrastructure/SlidingWindowRateLimiter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAE9B;;GAEG;AACH,MAAM,WAAW,8BAA8B;IAC7C,oDAAoD;IACpD,WAAW,EAAE,MAAM,CAAC;IACpB,sCAAsC;IACtC,QAAQ,EAAE,MAAM,CAAC;IACjB,oCAAoC;IACpC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,iDAAiD;IACjD,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAYD;;;;;;GAMG;AACH,qBAAa,wBAAwB;IACnC,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAS;IAClC,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAS;IACjC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IAGtC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAgB;IAG7C,OAAO,CAAC,QAAQ,CAAC,YAAY,CAA4B;IAGzD,OAAO,CAAC,eAAe,CAAS;gBAEpB,MAAM,EAAE,8BAA8B;IAkBlD;;OAEG;IACH,MAAM,CAAC,WAAW,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,wBAAwB;IAQ7D;;OAEG;IACH,MAAM,CAAC,MAAM,CAAC,iBAAiB,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,GAAG,wBAAwB;IAQnF;;;;;OAKG;IACG,OAAO,CAAC,CAAC,EAAE,EAAE,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;IAwBlD;;OAEG;IACH,QAAQ;;;;;;;;;IAeR;;OAEG;IACH,OAAO,CAAC,YAAY;IAcpB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAyDxB;;OAEG;IACH,OAAO,CAAC,sBAAsB;IAuB9B;;OAEG;IACH,OAAO,CAAC,aAAa;IAKrB;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAe5B;;OAEG;IACH,OAAO,CAAC,cAAc;CAmCvB"}
@@ -0,0 +1,218 @@
1
+ /**
2
+ * High-performance sliding window rate limiter implementation
3
+ *
4
+ * Uses a sliding window algorithm to allow bursts up to the rate limit
5
+ * while maintaining the average rate over time. More efficient than
6
+ * sequential processing as it allows concurrent execution within limits.
7
+ */
8
+ export class SlidingWindowRateLimiter {
9
+ constructor(config) {
10
+ // Track request timestamps within the current window
11
+ this.requestTimes = [];
12
+ // Queue for pending requests when rate limit is exceeded
13
+ this.requestQueue = [];
14
+ // Flag to prevent multiple queue processors
15
+ this.processingQueue = false;
16
+ this.validateConfig(config);
17
+ this.maxRequests = config.maxRequests;
18
+ this.windowMs = config.windowMs;
19
+ this.logger = config.logger;
20
+ this.maxQueueSize = config.maxQueueSize ?? 1000;
21
+ this.logger?.debug({
22
+ maxRequests: this.maxRequests,
23
+ windowMs: this.windowMs,
24
+ maxQueueSize: this.maxQueueSize,
25
+ }, 'SlidingWindowRateLimiter initialized');
26
+ }
27
+ /**
28
+ * Factory method to create a rate limiter for Govee API (95 requests/minute)
29
+ */
30
+ static forGoveeApi(logger) {
31
+ return new SlidingWindowRateLimiter({
32
+ maxRequests: 95, // 5 request buffer under the 100/min limit
33
+ windowMs: 60 * 1000, // 1 minute
34
+ logger,
35
+ });
36
+ }
37
+ /**
38
+ * Factory method to create a custom rate limiter
39
+ */
40
+ static custom(requestsPerMinute, logger) {
41
+ return new SlidingWindowRateLimiter({
42
+ maxRequests: requestsPerMinute,
43
+ windowMs: 60 * 1000,
44
+ logger,
45
+ });
46
+ }
47
+ /**
48
+ * Executes a function with rate limiting applied
49
+ *
50
+ * @param fn - The async function to execute
51
+ * @returns Promise that resolves with the function's result
52
+ */
53
+ async execute(fn) {
54
+ return new Promise((resolve, reject) => {
55
+ const request = {
56
+ fn,
57
+ resolve,
58
+ reject,
59
+ timestamp: Date.now(),
60
+ };
61
+ // Check queue size to prevent memory leaks
62
+ if (this.requestQueue.length >= this.maxQueueSize) {
63
+ const error = new Error(`Rate limiter queue is full (${this.maxQueueSize} requests). Request rejected.`);
64
+ this.logger?.warn({ queueSize: this.requestQueue.length }, error.message);
65
+ reject(error);
66
+ return;
67
+ }
68
+ this.requestQueue.push(request);
69
+ this.processQueue();
70
+ });
71
+ }
72
+ /**
73
+ * Gets current rate limiter statistics
74
+ */
75
+ getStats() {
76
+ const now = Date.now();
77
+ this.cleanupExpiredRequests(now);
78
+ return {
79
+ currentRequests: this.requestTimes.length,
80
+ maxRequests: this.maxRequests,
81
+ queueSize: this.requestQueue.length,
82
+ windowMs: this.windowMs,
83
+ utilizationPercent: Math.round((this.requestTimes.length / this.maxRequests) * 100),
84
+ canExecuteImmediately: this.canExecuteNow(now),
85
+ nextAvailableSlot: this.getNextAvailableTime(now),
86
+ };
87
+ }
88
+ /**
89
+ * Processes the request queue, executing requests when rate limits allow
90
+ */
91
+ processQueue() {
92
+ if (this.processingQueue) {
93
+ return;
94
+ }
95
+ this.processingQueue = true;
96
+ try {
97
+ this.processQueueSync();
98
+ }
99
+ finally {
100
+ this.processingQueue = false;
101
+ }
102
+ }
103
+ /**
104
+ * Synchronously processes all requests that can execute immediately
105
+ */
106
+ processQueueSync() {
107
+ const now = Date.now();
108
+ this.cleanupExpiredRequests(now);
109
+ // Execute all requests that can run immediately
110
+ while (this.requestQueue.length > 0 && this.canExecuteNow(now)) {
111
+ const request = this.requestQueue.shift();
112
+ if (!request)
113
+ break;
114
+ // Check if request has expired (optional timeout)
115
+ // Only timeout in production, not in tests
116
+ const requestAge = now - request.timestamp;
117
+ const isTest = process.env.NODE_ENV === 'test' || process.env.VITEST;
118
+ if (!isTest && requestAge > 30000) {
119
+ // 30 second timeout
120
+ const error = new Error('Request timeout: waited too long in rate limiter queue');
121
+ this.logger?.warn({ requestAge }, error.message);
122
+ request.reject(error);
123
+ continue;
124
+ }
125
+ // Record the request time and execute
126
+ this.requestTimes.push(now);
127
+ this.logger?.debug({
128
+ queueSize: this.requestQueue.length,
129
+ currentRequests: this.requestTimes.length,
130
+ utilizationPercent: Math.round((this.requestTimes.length / this.maxRequests) * 100),
131
+ }, 'Executing request');
132
+ // Execute the request without awaiting to allow concurrent execution
133
+ request.fn().then(request.resolve).catch(request.reject);
134
+ }
135
+ // Schedule processing for queued requests if rate limit is reached
136
+ if (this.requestQueue.length > 0) {
137
+ const nextSlot = this.getNextAvailableTime(now);
138
+ const delay = Math.max(0, nextSlot - now);
139
+ this.logger?.debug({
140
+ delay,
141
+ queueSize: this.requestQueue.length,
142
+ currentRequests: this.requestTimes.length,
143
+ }, 'Rate limit reached, scheduling next execution');
144
+ setTimeout(() => {
145
+ this.processQueue();
146
+ }, delay);
147
+ }
148
+ }
149
+ /**
150
+ * Removes expired request timestamps from the sliding window
151
+ */
152
+ cleanupExpiredRequests(now) {
153
+ const windowStart = now - this.windowMs;
154
+ let removeCount = 0;
155
+ // Remove timestamps outside the current window
156
+ for (let i = 0; i < this.requestTimes.length; i++) {
157
+ const requestTime = this.requestTimes[i];
158
+ if (requestTime !== undefined && requestTime <= windowStart) {
159
+ removeCount++;
160
+ }
161
+ else {
162
+ break; // Array is sorted, so we can stop here
163
+ }
164
+ }
165
+ if (removeCount > 0) {
166
+ this.requestTimes.splice(0, removeCount);
167
+ this.logger?.debug({ removedCount: removeCount, remainingRequests: this.requestTimes.length }, 'Cleaned up expired request timestamps');
168
+ }
169
+ }
170
+ /**
171
+ * Checks if a request can be executed immediately
172
+ */
173
+ canExecuteNow(now) {
174
+ this.cleanupExpiredRequests(now);
175
+ return this.requestTimes.length < this.maxRequests;
176
+ }
177
+ /**
178
+ * Calculates when the next request slot will be available
179
+ */
180
+ getNextAvailableTime(now) {
181
+ this.cleanupExpiredRequests(now);
182
+ if (this.requestTimes.length < this.maxRequests) {
183
+ return now; // Can execute immediately
184
+ }
185
+ // The next slot becomes available when the oldest request expires
186
+ const oldestRequest = this.requestTimes[0];
187
+ if (oldestRequest === undefined) {
188
+ return now; // No requests tracked, can execute immediately
189
+ }
190
+ return oldestRequest + this.windowMs + 1; // +1ms to ensure it's truly available
191
+ }
192
+ /**
193
+ * Validates the rate limiter configuration
194
+ */
195
+ validateConfig(config) {
196
+ if (!config) {
197
+ throw new Error('SlidingWindowRateLimiter config is required');
198
+ }
199
+ if (!Number.isInteger(config.maxRequests) || config.maxRequests <= 0) {
200
+ throw new Error('maxRequests must be a positive integer');
201
+ }
202
+ if (!Number.isInteger(config.windowMs) || config.windowMs <= 0) {
203
+ throw new Error('windowMs must be a positive integer');
204
+ }
205
+ if (config.maxQueueSize !== undefined &&
206
+ (!Number.isInteger(config.maxQueueSize) || config.maxQueueSize <= 0)) {
207
+ throw new Error('maxQueueSize must be a positive integer');
208
+ }
209
+ // Warn about potentially problematic configurations
210
+ if (config.maxRequests > 1000) {
211
+ config.logger?.warn({ maxRequests: config.maxRequests }, 'Very high rate limit configured - consider memory implications');
212
+ }
213
+ if (config.windowMs < 1000) {
214
+ config.logger?.warn({ windowMs: config.windowMs }, 'Very short window configured - may cause high CPU usage');
215
+ }
216
+ }
217
+ }
218
+ //# sourceMappingURL=SlidingWindowRateLimiter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"SlidingWindowRateLimiter.js","sourceRoot":"","sources":["../../src/infrastructure/SlidingWindowRateLimiter.ts"],"names":[],"mappings":"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"}
@@ -1,2 +1,4 @@
1
1
  export { GoveeDeviceRepository } from './GoveeDeviceRepository';
2
+ export { SlidingWindowRateLimiter, type SlidingWindowRateLimiterConfig, } from './SlidingWindowRateLimiter';
3
+ export * from './retry';
2
4
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/infrastructure/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/infrastructure/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EACL,wBAAwB,EACxB,KAAK,8BAA8B,GACpC,MAAM,4BAA4B,CAAC;AACpC,cAAc,SAAS,CAAC"}
@@ -1,2 +1,4 @@
1
1
  export { GoveeDeviceRepository } from './GoveeDeviceRepository';
2
+ export { SlidingWindowRateLimiter, } from './SlidingWindowRateLimiter';
3
+ export * from './retry';
2
4
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/infrastructure/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/infrastructure/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,yBAAyB,CAAC;AAChE,OAAO,EACL,wBAAwB,GAEzB,MAAM,4BAA4B,CAAC;AACpC,cAAc,SAAS,CAAC"}
@@ -0,0 +1,82 @@
1
+ import { z } from 'zod';
2
+ export declare const GoveeCapabilitySchema: z.ZodObject<{
3
+ type: z.ZodNullable<z.ZodOptional<z.ZodString>>;
4
+ instance: z.ZodNullable<z.ZodOptional<z.ZodString>>;
5
+ parameters: z.ZodOptional<z.ZodObject<{
6
+ dataType: z.ZodString;
7
+ options: z.ZodOptional<z.ZodArray<z.ZodObject<{
8
+ name: z.ZodString;
9
+ value: z.ZodUnknown;
10
+ }, z.core.$strip>>>;
11
+ }, z.core.$strip>>;
12
+ }, z.core.$loose>;
13
+ export declare const GoveeDeviceResponseSchema: z.ZodObject<{
14
+ device: z.ZodNullable<z.ZodOptional<z.ZodString>>;
15
+ sku: z.ZodNullable<z.ZodOptional<z.ZodString>>;
16
+ deviceName: z.ZodNullable<z.ZodOptional<z.ZodString>>;
17
+ capabilities: z.ZodNullable<z.ZodOptional<z.ZodArray<z.ZodObject<{
18
+ type: z.ZodNullable<z.ZodOptional<z.ZodString>>;
19
+ instance: z.ZodNullable<z.ZodOptional<z.ZodString>>;
20
+ parameters: z.ZodOptional<z.ZodObject<{
21
+ dataType: z.ZodString;
22
+ options: z.ZodOptional<z.ZodArray<z.ZodObject<{
23
+ name: z.ZodString;
24
+ value: z.ZodUnknown;
25
+ }, z.core.$strip>>>;
26
+ }, z.core.$strip>>;
27
+ }, z.core.$loose>>>>;
28
+ }, z.core.$loose>;
29
+ export declare const GoveeDevicesResponseSchema: z.ZodObject<{
30
+ code: z.ZodNumber;
31
+ message: z.ZodString;
32
+ data: z.ZodArray<z.ZodObject<{
33
+ device: z.ZodNullable<z.ZodOptional<z.ZodString>>;
34
+ sku: z.ZodNullable<z.ZodOptional<z.ZodString>>;
35
+ deviceName: z.ZodNullable<z.ZodOptional<z.ZodString>>;
36
+ capabilities: z.ZodNullable<z.ZodOptional<z.ZodArray<z.ZodObject<{
37
+ type: z.ZodNullable<z.ZodOptional<z.ZodString>>;
38
+ instance: z.ZodNullable<z.ZodOptional<z.ZodString>>;
39
+ parameters: z.ZodOptional<z.ZodObject<{
40
+ dataType: z.ZodString;
41
+ options: z.ZodOptional<z.ZodArray<z.ZodObject<{
42
+ name: z.ZodString;
43
+ value: z.ZodUnknown;
44
+ }, z.core.$strip>>>;
45
+ }, z.core.$strip>>;
46
+ }, z.core.$loose>>>>;
47
+ }, z.core.$loose>>;
48
+ }, z.core.$strip>;
49
+ export declare const GoveeStateCapabilitySchema: z.ZodObject<{
50
+ type: z.ZodString;
51
+ instance: z.ZodString;
52
+ state: z.ZodObject<{
53
+ value: z.ZodUnknown;
54
+ }, z.core.$strip>;
55
+ }, z.core.$strip>;
56
+ export declare const GoveeStateResponseSchema: z.ZodObject<{
57
+ code: z.ZodNumber;
58
+ message: z.ZodString;
59
+ data: z.ZodObject<{
60
+ device: z.ZodString;
61
+ sku: z.ZodString;
62
+ capabilities: z.ZodArray<z.ZodObject<{
63
+ type: z.ZodString;
64
+ instance: z.ZodString;
65
+ state: z.ZodObject<{
66
+ value: z.ZodUnknown;
67
+ }, z.core.$strip>;
68
+ }, z.core.$strip>>;
69
+ }, z.core.$strip>;
70
+ }, z.core.$strip>;
71
+ export declare const GoveeCommandResponseSchema: z.ZodObject<{
72
+ code: z.ZodNumber;
73
+ message: z.ZodString;
74
+ data: z.ZodOptional<z.ZodUnknown>;
75
+ }, z.core.$strip>;
76
+ export type GoveeCapability = z.infer<typeof GoveeCapabilitySchema>;
77
+ export type GoveeDeviceResponse = z.infer<typeof GoveeDeviceResponseSchema>;
78
+ export type GoveeDevicesResponse = z.infer<typeof GoveeDevicesResponseSchema>;
79
+ export type GoveeStateCapability = z.infer<typeof GoveeStateCapabilitySchema>;
80
+ export type GoveeStateResponse = z.infer<typeof GoveeStateResponseSchema>;
81
+ export type GoveeCommandResponse = z.infer<typeof GoveeCommandResponseSchema>;
82
+ //# sourceMappingURL=response-schemas.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"response-schemas.d.ts","sourceRoot":"","sources":["../../src/infrastructure/response-schemas.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,eAAO,MAAM,qBAAqB;;;;;;;;;;iBAkBlB,CAAC;AAGjB,eAAO,MAAM,yBAAyB;;;;;;;;;;;;;;;iBAOtB,CAAC;AAGjB,eAAO,MAAM,0BAA0B;;;;;;;;;;;;;;;;;;;iBAIrC,CAAC;AAGH,eAAO,MAAM,0BAA0B;;;;;;iBAMrC,CAAC;AAGH,eAAO,MAAM,wBAAwB;;;;;;;;;;;;;;iBAQnC,CAAC;AAGH,eAAO,MAAM,0BAA0B;;;;iBAIrC,CAAC;AAGH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,qBAAqB,CAAC,CAAC;AACpE,MAAM,MAAM,mBAAmB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,yBAAyB,CAAC,CAAC;AAC5E,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAC;AAC9E,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAC;AAC9E,MAAM,MAAM,kBAAkB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,wBAAwB,CAAC,CAAC;AAC1E,MAAM,MAAM,oBAAoB,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,0BAA0B,CAAC,CAAC"}
@@ -0,0 +1,59 @@
1
+ import { z } from 'zod';
2
+ // Govee API Capability schema - permissive for parsing
3
+ export const GoveeCapabilitySchema = z
4
+ .object({
5
+ type: z.string().optional().nullable(),
6
+ instance: z.string().optional().nullable(),
7
+ parameters: z
8
+ .object({
9
+ dataType: z.string(),
10
+ options: z
11
+ .array(z.object({
12
+ name: z.string(),
13
+ value: z.unknown(),
14
+ }))
15
+ .optional(),
16
+ })
17
+ .optional(),
18
+ })
19
+ .passthrough();
20
+ // Individual device response schema - permissive for parsing
21
+ export const GoveeDeviceResponseSchema = z
22
+ .object({
23
+ device: z.string().optional().nullable(),
24
+ sku: z.string().optional().nullable(),
25
+ deviceName: z.string().optional().nullable(),
26
+ capabilities: z.array(GoveeCapabilitySchema).optional().nullable(), // Keep null as null for filtering
27
+ })
28
+ .passthrough();
29
+ // Full devices API response schema
30
+ export const GoveeDevicesResponseSchema = z.object({
31
+ code: z.number(),
32
+ message: z.string(),
33
+ data: z.array(GoveeDeviceResponseSchema),
34
+ });
35
+ // Device state capability schema
36
+ export const GoveeStateCapabilitySchema = z.object({
37
+ type: z.string().min(1, 'State capability type must be a non-empty string'),
38
+ instance: z.string().min(1, 'State capability instance must be a non-empty string'),
39
+ state: z.object({
40
+ value: z.unknown(),
41
+ }),
42
+ });
43
+ // Device state API response schema
44
+ export const GoveeStateResponseSchema = z.object({
45
+ code: z.number(),
46
+ message: z.string(),
47
+ data: z.object({
48
+ device: z.string().min(1, 'Device ID must be a non-empty string'),
49
+ sku: z.string().min(1, 'SKU must be a non-empty string'),
50
+ capabilities: z.array(GoveeStateCapabilitySchema),
51
+ }),
52
+ });
53
+ // Command API response schema
54
+ export const GoveeCommandResponseSchema = z.object({
55
+ code: z.number(),
56
+ message: z.string(),
57
+ data: z.unknown().optional(),
58
+ });
59
+ //# sourceMappingURL=response-schemas.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"response-schemas.js","sourceRoot":"","sources":["../../src/infrastructure/response-schemas.ts"],"names":[],"mappings":"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"}