@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.
- package/README.md +160 -7
- package/dist/GoveeClient.d.ts +31 -0
- package/dist/GoveeClient.d.ts.map +1 -1
- package/dist/GoveeClient.js +33 -0
- package/dist/GoveeClient.js.map +1 -1
- package/dist/errors/GoveeApiError.d.ts +1 -1
- package/dist/errors/GoveeApiError.d.ts.map +1 -1
- package/dist/errors/GoveeApiError.js +9 -2
- package/dist/errors/GoveeApiError.js.map +1 -1
- package/dist/errors/ValidationError.d.ts +28 -0
- package/dist/errors/ValidationError.d.ts.map +1 -0
- package/dist/errors/ValidationError.js +44 -0
- package/dist/errors/ValidationError.js.map +1 -0
- package/dist/errors/index.d.ts +1 -0
- package/dist/errors/index.d.ts.map +1 -1
- package/dist/errors/index.js +1 -0
- package/dist/errors/index.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/infrastructure/GoveeDeviceRepository.d.ts.map +1 -1
- package/dist/infrastructure/GoveeDeviceRepository.js +26 -3
- package/dist/infrastructure/GoveeDeviceRepository.js.map +1 -1
- package/dist/infrastructure/SlidingWindowRateLimiter.d.ts +83 -0
- package/dist/infrastructure/SlidingWindowRateLimiter.d.ts.map +1 -0
- package/dist/infrastructure/SlidingWindowRateLimiter.js +218 -0
- package/dist/infrastructure/SlidingWindowRateLimiter.js.map +1 -0
- package/dist/infrastructure/index.d.ts +2 -0
- package/dist/infrastructure/index.d.ts.map +1 -1
- package/dist/infrastructure/index.js +2 -0
- package/dist/infrastructure/index.js.map +1 -1
- package/dist/infrastructure/response-schemas.d.ts +82 -0
- package/dist/infrastructure/response-schemas.d.ts.map +1 -0
- package/dist/infrastructure/response-schemas.js +59 -0
- package/dist/infrastructure/response-schemas.js.map +1 -0
- package/dist/infrastructure/retry/IntegrationGuide.d.ts +133 -0
- package/dist/infrastructure/retry/IntegrationGuide.d.ts.map +1 -0
- package/dist/infrastructure/retry/IntegrationGuide.js +295 -0
- package/dist/infrastructure/retry/IntegrationGuide.js.map +1 -0
- package/dist/infrastructure/retry/RetryConfigPresets.d.ts +114 -0
- package/dist/infrastructure/retry/RetryConfigPresets.d.ts.map +1 -0
- package/dist/infrastructure/retry/RetryConfigPresets.js +406 -0
- package/dist/infrastructure/retry/RetryConfigPresets.js.map +1 -0
- package/dist/infrastructure/retry/RetryPolicy.d.ts +148 -0
- package/dist/infrastructure/retry/RetryPolicy.d.ts.map +1 -0
- package/dist/infrastructure/retry/RetryPolicy.js +373 -0
- package/dist/infrastructure/retry/RetryPolicy.js.map +1 -0
- package/dist/infrastructure/retry/RetryableRepository.d.ts +75 -0
- package/dist/infrastructure/retry/RetryableRepository.d.ts.map +1 -0
- package/dist/infrastructure/retry/RetryableRepository.js +142 -0
- package/dist/infrastructure/retry/RetryableRepository.js.map +1 -0
- package/dist/infrastructure/retry/RetryableRequest.d.ts +132 -0
- package/dist/infrastructure/retry/RetryableRequest.d.ts.map +1 -0
- package/dist/infrastructure/retry/RetryableRequest.js +248 -0
- package/dist/infrastructure/retry/RetryableRequest.js.map +1 -0
- package/dist/infrastructure/retry/index.d.ts +35 -0
- package/dist/infrastructure/retry/index.d.ts.map +1 -0
- package/dist/infrastructure/retry/index.js +36 -0
- package/dist/infrastructure/retry/index.js.map +1 -0
- package/dist/services/GoveeControlService.d.ts +53 -0
- package/dist/services/GoveeControlService.d.ts.map +1 -1
- package/dist/services/GoveeControlService.js +138 -12
- package/dist/services/GoveeControlService.js.map +1 -1
- package/docs/EXAMPLES.md +799 -0
- package/docs/LLM_API_REFERENCE.md +425 -0
- package/docs/TYPE_DEFINITIONS.md +803 -0
- package/package.json +25 -16
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GoveeDeviceRepository.js","sourceRoot":"","sources":["../../src/infrastructure/GoveeDeviceRepository.ts"],"names":[],"mappings":"AAAA,OAAO,KAAoC,MAAM,OAAO,CAAC;AAGzD,OAAO,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAC7D,OAAO,EACL,WAAW,GAKZ,MAAM,gCAAgC,CAAC;AAExC,OAAO,EAAE,QAAQ,EAAE,gBAAgB,EAAE,UAAU,EAAE,MAAM,yBAAyB,CAAC;AACjF,OAAO,EAAE,aAAa,EAAE,kBAAkB,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAoF5F,MAAM,OAAO,qBAAqB;IAKxB,iBAAiB;QACvB,OAAO,
|
|
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 +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 +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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"}
|