@felixgeelhaar/govee-api-client 1.1.0 → 2.0.0
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/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.js +1 -1
- 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/package.json +16 -13
|
@@ -1,17 +1,93 @@
|
|
|
1
|
-
import pLimit from 'p-limit';
|
|
2
1
|
import { CommandFactory } from '../domain/entities/Command';
|
|
2
|
+
import { SlidingWindowRateLimiter } from '../infrastructure';
|
|
3
|
+
import { RetryableRepository, RetryExecutor, RetryPolicy, RetryConfigPresets, } from '../infrastructure/retry';
|
|
3
4
|
export class GoveeControlService {
|
|
4
5
|
constructor(config) {
|
|
5
6
|
this.validateConfig(config);
|
|
6
|
-
|
|
7
|
+
// Set up retry functionality if enabled
|
|
8
|
+
this.enableRetries = config.enableRetries ?? false;
|
|
9
|
+
if (this.enableRetries) {
|
|
10
|
+
this.repository = this.createRetryableRepository(config);
|
|
11
|
+
}
|
|
12
|
+
else {
|
|
13
|
+
this.repository = config.repository;
|
|
14
|
+
}
|
|
7
15
|
this.logger = config.logger;
|
|
8
|
-
// Default to
|
|
9
|
-
const requestsPerMinute = config.rateLimit ??
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
16
|
+
// Default to 95 requests per minute (5 request buffer under Govee API limit)
|
|
17
|
+
const requestsPerMinute = config.rateLimit ?? 95;
|
|
18
|
+
// Initialize the sliding window rate limiter
|
|
19
|
+
if (config.rateLimiterConfig) {
|
|
20
|
+
// Use custom configuration
|
|
21
|
+
this.rateLimiter = new SlidingWindowRateLimiter({
|
|
22
|
+
maxRequests: requestsPerMinute,
|
|
23
|
+
windowMs: 60 * 1000, // 1 minute
|
|
24
|
+
logger: this.logger,
|
|
25
|
+
...config.rateLimiterConfig,
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
else if (requestsPerMinute === 95) {
|
|
29
|
+
// Use optimized factory for Govee API
|
|
30
|
+
this.rateLimiter = SlidingWindowRateLimiter.forGoveeApi(this.logger);
|
|
31
|
+
}
|
|
32
|
+
else {
|
|
33
|
+
// Use custom rate limit
|
|
34
|
+
this.rateLimiter = SlidingWindowRateLimiter.custom(requestsPerMinute, this.logger);
|
|
35
|
+
}
|
|
36
|
+
this.logger?.info({
|
|
37
|
+
requestsPerMinute,
|
|
38
|
+
rateLimiterType: 'SlidingWindow',
|
|
39
|
+
enableRetries: this.enableRetries,
|
|
40
|
+
retryPolicy: this.enableRetries ? config.retryPolicy || 'production' : 'disabled',
|
|
41
|
+
stats: this.rateLimiter.getStats(),
|
|
42
|
+
}, 'Initialized GoveeControlService with sliding window rate limiting');
|
|
43
|
+
}
|
|
44
|
+
/**
|
|
45
|
+
* Creates a retry-enabled repository wrapper
|
|
46
|
+
*/
|
|
47
|
+
createRetryableRepository(config) {
|
|
48
|
+
let retryPolicy;
|
|
49
|
+
// Determine retry policy based on configuration
|
|
50
|
+
if (config.retryPolicy instanceof RetryPolicy) {
|
|
51
|
+
retryPolicy = config.retryPolicy;
|
|
52
|
+
}
|
|
53
|
+
else {
|
|
54
|
+
const policyType = config.retryPolicy || 'production';
|
|
55
|
+
switch (policyType) {
|
|
56
|
+
case 'development':
|
|
57
|
+
retryPolicy = new RetryPolicy(RetryConfigPresets.development(this.logger));
|
|
58
|
+
break;
|
|
59
|
+
case 'testing':
|
|
60
|
+
retryPolicy = new RetryPolicy(RetryConfigPresets.testing(this.logger));
|
|
61
|
+
break;
|
|
62
|
+
case 'production':
|
|
63
|
+
retryPolicy = new RetryPolicy(RetryConfigPresets.production(this.logger));
|
|
64
|
+
break;
|
|
65
|
+
case 'custom':
|
|
66
|
+
// Use Govee-optimized defaults for custom
|
|
67
|
+
retryPolicy = RetryPolicy.createGoveeOptimized(this.logger);
|
|
68
|
+
break;
|
|
69
|
+
default:
|
|
70
|
+
retryPolicy = new RetryPolicy(RetryConfigPresets.production(this.logger));
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
const retryExecutor = new RetryExecutor(retryPolicy, {
|
|
74
|
+
logger: this.logger,
|
|
75
|
+
enableRequestLogging: true,
|
|
76
|
+
enablePerformanceTracking: true,
|
|
77
|
+
});
|
|
78
|
+
const retryableRepository = new RetryableRepository({
|
|
79
|
+
repository: config.repository,
|
|
80
|
+
retryExecutor,
|
|
81
|
+
logger: this.logger,
|
|
82
|
+
enableRequestIds: true,
|
|
83
|
+
});
|
|
84
|
+
this.logger?.info({
|
|
85
|
+
retryPolicy: retryPolicy.getMetrics().circuitBreakerState
|
|
86
|
+
? 'enabled_with_circuit_breaker'
|
|
87
|
+
: 'enabled',
|
|
88
|
+
maxAttempts: retryPolicy instanceof RetryPolicy ? 'configured' : 'default',
|
|
89
|
+
}, 'Created retry-enabled repository wrapper');
|
|
90
|
+
return retryableRepository;
|
|
15
91
|
}
|
|
16
92
|
validateConfig(config) {
|
|
17
93
|
if (!config.repository) {
|
|
@@ -27,7 +103,7 @@ export class GoveeControlService {
|
|
|
27
103
|
*/
|
|
28
104
|
async getDevices() {
|
|
29
105
|
this.logger?.info('Getting all devices');
|
|
30
|
-
return this.rateLimiter(async () => {
|
|
106
|
+
return this.rateLimiter.execute(async () => {
|
|
31
107
|
const devices = await this.repository.findAll();
|
|
32
108
|
this.logger?.info(`Retrieved ${devices.length} devices`);
|
|
33
109
|
return devices;
|
|
@@ -39,7 +115,7 @@ export class GoveeControlService {
|
|
|
39
115
|
async getDeviceState(deviceId, model) {
|
|
40
116
|
this.validateDeviceParams(deviceId, model);
|
|
41
117
|
this.logger?.info({ deviceId, model }, 'Getting device state');
|
|
42
|
-
return this.rateLimiter(async () => {
|
|
118
|
+
return this.rateLimiter.execute(async () => {
|
|
43
119
|
const state = await this.repository.findState(deviceId, model);
|
|
44
120
|
this.logger?.info({ deviceId, model, online: state.online }, 'Retrieved device state');
|
|
45
121
|
return state;
|
|
@@ -51,7 +127,7 @@ export class GoveeControlService {
|
|
|
51
127
|
async sendCommand(deviceId, model, command) {
|
|
52
128
|
this.validateDeviceParams(deviceId, model);
|
|
53
129
|
this.logger?.info({ deviceId, model, command: command.toObject() }, 'Sending command');
|
|
54
|
-
return this.rateLimiter(async () => {
|
|
130
|
+
return this.rateLimiter.execute(async () => {
|
|
55
131
|
await this.repository.sendCommand(deviceId, model, command);
|
|
56
132
|
this.logger?.info({ deviceId, model }, 'Command sent successfully');
|
|
57
133
|
});
|
|
@@ -163,6 +239,56 @@ export class GoveeControlService {
|
|
|
163
239
|
const devices = await this.getDevices();
|
|
164
240
|
return devices.filter(device => device.model === model);
|
|
165
241
|
}
|
|
242
|
+
/**
|
|
243
|
+
* Gets current rate limiter statistics for monitoring and debugging
|
|
244
|
+
*/
|
|
245
|
+
getRateLimiterStats() {
|
|
246
|
+
return this.rateLimiter.getStats();
|
|
247
|
+
}
|
|
248
|
+
/**
|
|
249
|
+
* Gets retry metrics if retry functionality is enabled
|
|
250
|
+
*/
|
|
251
|
+
getRetryMetrics() {
|
|
252
|
+
if (!this.enableRetries) {
|
|
253
|
+
return null;
|
|
254
|
+
}
|
|
255
|
+
if (this.repository instanceof RetryableRepository) {
|
|
256
|
+
return this.repository.getRetryMetrics();
|
|
257
|
+
}
|
|
258
|
+
return null;
|
|
259
|
+
}
|
|
260
|
+
/**
|
|
261
|
+
* Resets retry metrics if retry functionality is enabled
|
|
262
|
+
*/
|
|
263
|
+
resetRetryMetrics() {
|
|
264
|
+
if (!this.enableRetries) {
|
|
265
|
+
return;
|
|
266
|
+
}
|
|
267
|
+
if (this.repository instanceof RetryableRepository) {
|
|
268
|
+
this.repository.resetRetryMetrics();
|
|
269
|
+
this.logger?.info('Retry metrics reset');
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
/**
|
|
273
|
+
* Gets comprehensive service statistics including rate limiter and retry metrics
|
|
274
|
+
*/
|
|
275
|
+
getServiceStats() {
|
|
276
|
+
const stats = {
|
|
277
|
+
rateLimiter: this.getRateLimiterStats(),
|
|
278
|
+
retries: this.getRetryMetrics(),
|
|
279
|
+
configuration: {
|
|
280
|
+
enableRetries: this.enableRetries,
|
|
281
|
+
rateLimit: this.rateLimiter.getStats().maxRequests,
|
|
282
|
+
},
|
|
283
|
+
};
|
|
284
|
+
return stats;
|
|
285
|
+
}
|
|
286
|
+
/**
|
|
287
|
+
* Checks if retry functionality is enabled
|
|
288
|
+
*/
|
|
289
|
+
isRetryEnabled() {
|
|
290
|
+
return this.enableRetries;
|
|
291
|
+
}
|
|
166
292
|
validateDeviceParams(deviceId, model) {
|
|
167
293
|
if (!deviceId || typeof deviceId !== 'string' || deviceId.trim().length === 0) {
|
|
168
294
|
throw new Error('Device ID must be a non-empty string');
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GoveeControlService.js","sourceRoot":"","sources":["../../src/services/GoveeControlService.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"GoveeControlService.js","sourceRoot":"","sources":["../../src/services/GoveeControlService.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@felixgeelhaar/govee-api-client",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "2.0.0",
|
|
4
4
|
"description": "Enterprise-grade TypeScript client library for the Govee Developer REST API",
|
|
5
|
+
"type": "module",
|
|
5
6
|
"main": "dist/index.js",
|
|
6
7
|
"types": "dist/index.d.ts",
|
|
7
8
|
"files": [
|
|
@@ -30,20 +31,22 @@
|
|
|
30
31
|
"author": "Felix Geelhaar <felix@geelhaar.com>",
|
|
31
32
|
"license": "MIT",
|
|
32
33
|
"dependencies": {
|
|
33
|
-
"axios": "
|
|
34
|
-
"pino": "
|
|
35
|
-
"
|
|
34
|
+
"axios": "1.11.0",
|
|
35
|
+
"pino": "8.21.0",
|
|
36
|
+
"zod": "4.0.10"
|
|
36
37
|
},
|
|
37
38
|
"devDependencies": {
|
|
38
|
-
"@types/
|
|
39
|
-
"@
|
|
40
|
-
"@vitest/
|
|
41
|
-
"
|
|
42
|
-
"
|
|
43
|
-
"
|
|
44
|
-
"
|
|
45
|
-
"
|
|
46
|
-
"
|
|
39
|
+
"@types/nock": "10.0.3",
|
|
40
|
+
"@types/node": "20.19.9",
|
|
41
|
+
"@vitest/coverage-v8": "3.2.4",
|
|
42
|
+
"@vitest/ui": "3.2.4",
|
|
43
|
+
"husky": "8.0.3",
|
|
44
|
+
"lint-staged": "15.5.2",
|
|
45
|
+
"msw": "2.10.4",
|
|
46
|
+
"nock": "14.0.7",
|
|
47
|
+
"prettier": "3.6.2",
|
|
48
|
+
"typescript": "5.8.3",
|
|
49
|
+
"vitest": "3.2.4"
|
|
47
50
|
},
|
|
48
51
|
"engines": {
|
|
49
52
|
"node": ">=18.0.0"
|