@felixgeelhaar/govee-api-client 1.0.1 → 1.1.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/dist/domain/entities/GoveeDevice.d.ts +22 -4
- package/dist/domain/entities/GoveeDevice.d.ts.map +1 -1
- package/dist/domain/entities/GoveeDevice.js +73 -22
- package/dist/domain/entities/GoveeDevice.js.map +1 -1
- package/dist/domain/repositories/IGoveeDeviceRepository.d.ts +2 -2
- package/dist/domain/repositories/IGoveeDeviceRepository.d.ts.map +1 -1
- package/dist/infrastructure/GoveeDeviceRepository.d.ts +5 -4
- package/dist/infrastructure/GoveeDeviceRepository.d.ts.map +1 -1
- package/dist/infrastructure/GoveeDeviceRepository.js +109 -43
- package/dist/infrastructure/GoveeDeviceRepository.js.map +1 -1
- package/package.json +1 -1
|
@@ -1,17 +1,34 @@
|
|
|
1
|
+
interface GoveeCapability {
|
|
2
|
+
type: string;
|
|
3
|
+
instance: string;
|
|
4
|
+
parameters?: {
|
|
5
|
+
dataType: string;
|
|
6
|
+
options?: Array<{
|
|
7
|
+
name: string;
|
|
8
|
+
value: unknown;
|
|
9
|
+
}>;
|
|
10
|
+
};
|
|
11
|
+
}
|
|
1
12
|
export declare class GoveeDevice {
|
|
2
13
|
private readonly _deviceId;
|
|
3
|
-
private readonly
|
|
14
|
+
private readonly _sku;
|
|
4
15
|
private readonly _deviceName;
|
|
16
|
+
private readonly _capabilities;
|
|
5
17
|
private readonly _controllable;
|
|
6
18
|
private readonly _retrievable;
|
|
7
19
|
private readonly _supportedCmds;
|
|
8
|
-
constructor(deviceId: string,
|
|
20
|
+
constructor(deviceId: string, sku: string, deviceName: string, capabilities: GoveeCapability[]);
|
|
9
21
|
private validateDeviceId;
|
|
10
|
-
private
|
|
22
|
+
private validateSku;
|
|
11
23
|
private validateDeviceName;
|
|
12
|
-
private
|
|
24
|
+
private validateCapabilities;
|
|
25
|
+
private deriveControllable;
|
|
26
|
+
private deriveRetrievable;
|
|
27
|
+
private deriveSupportedCommands;
|
|
13
28
|
get deviceId(): string;
|
|
14
29
|
get model(): string;
|
|
30
|
+
get sku(): string;
|
|
31
|
+
get capabilities(): readonly GoveeCapability[];
|
|
15
32
|
get deviceName(): string;
|
|
16
33
|
get controllable(): boolean;
|
|
17
34
|
get retrievable(): boolean;
|
|
@@ -38,4 +55,5 @@ export declare class GoveeDevice {
|
|
|
38
55
|
supportedCmds: string[];
|
|
39
56
|
}): GoveeDevice;
|
|
40
57
|
}
|
|
58
|
+
export {};
|
|
41
59
|
//# sourceMappingURL=GoveeDevice.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GoveeDevice.d.ts","sourceRoot":"","sources":["../../../src/domain/entities/GoveeDevice.ts"],"names":[],"mappings":"AAAA,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,
|
|
1
|
+
{"version":3,"file":"GoveeDevice.d.ts","sourceRoot":"","sources":["../../../src/domain/entities/GoveeDevice.ts"],"names":[],"mappings":"AAAA,UAAU,eAAe;IACvB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE;QACX,QAAQ,EAAE,MAAM,CAAC;QACjB,OAAO,CAAC,EAAE,KAAK,CAAC;YACd,IAAI,EAAE,MAAM,CAAC;YACb,KAAK,EAAE,OAAO,CAAC;SAChB,CAAC,CAAC;KACJ,CAAC;CACH;AAED,qBAAa,WAAW;IACtB,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;IAC9B,OAAO,CAAC,QAAQ,CAAC,WAAW,CAAS;IACrC,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAoB;IAClD,OAAO,CAAC,QAAQ,CAAC,aAAa,CAAU;IACxC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAU;IACvC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAW;gBAE9B,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,YAAY,EAAE,eAAe,EAAE;IAe9F,OAAO,CAAC,gBAAgB;IAMxB,OAAO,CAAC,WAAW;IAMnB,OAAO,CAAC,kBAAkB;IAM1B,OAAO,CAAC,oBAAoB;IAe5B,OAAO,CAAC,kBAAkB;IAU1B,OAAO,CAAC,iBAAiB;IAKzB,OAAO,CAAC,uBAAuB;IAgB/B,IAAI,QAAQ,IAAI,MAAM,CAErB;IAED,IAAI,KAAK,IAAI,MAAM,CAElB;IAED,IAAI,GAAG,IAAI,MAAM,CAEhB;IAED,IAAI,YAAY,IAAI,SAAS,eAAe,EAAE,CAE7C;IAED,IAAI,UAAU,IAAI,MAAM,CAEvB;IAED,IAAI,YAAY,IAAI,OAAO,CAE1B;IAED,IAAI,WAAW,IAAI,OAAO,CAEzB;IAED,IAAI,aAAa,IAAI,SAAS,MAAM,EAAE,CAErC;IAED,MAAM,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO;IAInC,QAAQ,IAAI,MAAM;IAIlB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO;IAIzC,UAAU,IAAI,OAAO;IAIrB,WAAW,IAAI,OAAO;IAItB,QAAQ,IAAI;QACV,QAAQ,EAAE,MAAM,CAAC;QACjB,KAAK,EAAE,MAAM,CAAC;QACd,UAAU,EAAE,MAAM,CAAC;QACnB,YAAY,EAAE,OAAO,CAAC;QACtB,WAAW,EAAE,OAAO,CAAC;QACrB,aAAa,EAAE,MAAM,EAAE,CAAC;KACzB;IAWD,MAAM,CAAC,UAAU,CAAC,GAAG,EAAE;QACrB,QAAQ,EAAE,MAAM,CAAC;QACjB,KAAK,EAAE,MAAM,CAAC;QACd,UAAU,EAAE,MAAM,CAAC;QACnB,YAAY,EAAE,OAAO,CAAC;QACtB,WAAW,EAAE,OAAO,CAAC;QACrB,aAAa,EAAE,MAAM,EAAE,CAAC;KACzB,GAAG,WAAW;CAsBhB"}
|
|
@@ -1,24 +1,25 @@
|
|
|
1
1
|
export class GoveeDevice {
|
|
2
|
-
constructor(deviceId,
|
|
2
|
+
constructor(deviceId, sku, deviceName, capabilities) {
|
|
3
3
|
this.validateDeviceId(deviceId);
|
|
4
|
-
this.
|
|
4
|
+
this.validateSku(sku);
|
|
5
5
|
this.validateDeviceName(deviceName);
|
|
6
|
-
this.
|
|
6
|
+
this.validateCapabilities(capabilities);
|
|
7
7
|
this._deviceId = deviceId;
|
|
8
|
-
this.
|
|
8
|
+
this._sku = sku;
|
|
9
9
|
this._deviceName = deviceName;
|
|
10
|
-
this.
|
|
11
|
-
this.
|
|
12
|
-
this.
|
|
10
|
+
this._capabilities = [...capabilities];
|
|
11
|
+
this._controllable = this.deriveControllable(capabilities);
|
|
12
|
+
this._retrievable = this.deriveRetrievable(capabilities);
|
|
13
|
+
this._supportedCmds = this.deriveSupportedCommands(capabilities);
|
|
13
14
|
}
|
|
14
15
|
validateDeviceId(deviceId) {
|
|
15
16
|
if (!deviceId || typeof deviceId !== 'string' || deviceId.trim().length === 0) {
|
|
16
17
|
throw new Error('Device ID must be a non-empty string');
|
|
17
18
|
}
|
|
18
19
|
}
|
|
19
|
-
|
|
20
|
-
if (!
|
|
21
|
-
throw new Error('
|
|
20
|
+
validateSku(sku) {
|
|
21
|
+
if (!sku || typeof sku !== 'string' || sku.trim().length === 0) {
|
|
22
|
+
throw new Error('SKU must be a non-empty string');
|
|
22
23
|
}
|
|
23
24
|
}
|
|
24
25
|
validateDeviceName(deviceName) {
|
|
@@ -26,21 +27,55 @@ export class GoveeDevice {
|
|
|
26
27
|
throw new Error('Device name must be a non-empty string');
|
|
27
28
|
}
|
|
28
29
|
}
|
|
29
|
-
|
|
30
|
-
if (!Array.isArray(
|
|
31
|
-
throw new Error('
|
|
30
|
+
validateCapabilities(capabilities) {
|
|
31
|
+
if (!Array.isArray(capabilities)) {
|
|
32
|
+
throw new Error('Capabilities must be an array');
|
|
32
33
|
}
|
|
33
|
-
for (const
|
|
34
|
-
if (
|
|
35
|
-
|
|
34
|
+
for (const capability of capabilities) {
|
|
35
|
+
if (!capability.type ||
|
|
36
|
+
typeof capability.type !== 'string' ||
|
|
37
|
+
capability.type.trim().length === 0) {
|
|
38
|
+
throw new Error('All capabilities must have non-empty type strings');
|
|
36
39
|
}
|
|
37
40
|
}
|
|
38
41
|
}
|
|
42
|
+
deriveControllable(capabilities) {
|
|
43
|
+
// Device is controllable if it has any control capabilities
|
|
44
|
+
return capabilities.some(cap => cap.type.includes('on_off') ||
|
|
45
|
+
cap.type.includes('range') ||
|
|
46
|
+
cap.type.includes('color_setting'));
|
|
47
|
+
}
|
|
48
|
+
deriveRetrievable(capabilities) {
|
|
49
|
+
// Most devices with capabilities are retrievable
|
|
50
|
+
return capabilities.length > 0;
|
|
51
|
+
}
|
|
52
|
+
deriveSupportedCommands(capabilities) {
|
|
53
|
+
const commands = new Set();
|
|
54
|
+
for (const capability of capabilities) {
|
|
55
|
+
if (capability.type.includes('on_off'))
|
|
56
|
+
commands.add('turn');
|
|
57
|
+
if (capability.type.includes('range') && capability.instance === 'brightness')
|
|
58
|
+
commands.add('brightness');
|
|
59
|
+
if (capability.type.includes('color_setting')) {
|
|
60
|
+
if (capability.instance === 'colorRgb')
|
|
61
|
+
commands.add('color');
|
|
62
|
+
if (capability.instance === 'colorTemperatureK')
|
|
63
|
+
commands.add('colorTem');
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
return Array.from(commands);
|
|
67
|
+
}
|
|
39
68
|
get deviceId() {
|
|
40
69
|
return this._deviceId;
|
|
41
70
|
}
|
|
42
71
|
get model() {
|
|
43
|
-
return this.
|
|
72
|
+
return this._sku; // For backward compatibility
|
|
73
|
+
}
|
|
74
|
+
get sku() {
|
|
75
|
+
return this._sku;
|
|
76
|
+
}
|
|
77
|
+
get capabilities() {
|
|
78
|
+
return Object.freeze([...this._capabilities]);
|
|
44
79
|
}
|
|
45
80
|
get deviceName() {
|
|
46
81
|
return this._deviceName;
|
|
@@ -55,10 +90,10 @@ export class GoveeDevice {
|
|
|
55
90
|
return Object.freeze([...this._supportedCmds]);
|
|
56
91
|
}
|
|
57
92
|
equals(other) {
|
|
58
|
-
return this._deviceId === other._deviceId && this.
|
|
93
|
+
return this._deviceId === other._deviceId && this._sku === other._sku;
|
|
59
94
|
}
|
|
60
95
|
toString() {
|
|
61
|
-
return `GoveeDevice(${this._deviceId}, ${this.
|
|
96
|
+
return `GoveeDevice(${this._deviceId}, ${this._sku}, "${this._deviceName}")`;
|
|
62
97
|
}
|
|
63
98
|
supportsCommand(command) {
|
|
64
99
|
return this._supportedCmds.includes(command);
|
|
@@ -72,7 +107,7 @@ export class GoveeDevice {
|
|
|
72
107
|
toObject() {
|
|
73
108
|
return {
|
|
74
109
|
deviceId: this._deviceId,
|
|
75
|
-
model: this.
|
|
110
|
+
model: this._sku,
|
|
76
111
|
deviceName: this._deviceName,
|
|
77
112
|
controllable: this._controllable,
|
|
78
113
|
retrievable: this._retrievable,
|
|
@@ -80,8 +115,24 @@ export class GoveeDevice {
|
|
|
80
115
|
};
|
|
81
116
|
}
|
|
82
117
|
static fromObject(obj) {
|
|
83
|
-
|
|
84
|
-
|
|
118
|
+
// Convert old format to new capabilities format for backward compatibility
|
|
119
|
+
const capabilities = [];
|
|
120
|
+
if (obj.supportedCmds.includes('turn')) {
|
|
121
|
+
capabilities.push({ type: 'devices.capabilities.on_off', instance: 'powerSwitch' });
|
|
122
|
+
}
|
|
123
|
+
if (obj.supportedCmds.includes('brightness')) {
|
|
124
|
+
capabilities.push({ type: 'devices.capabilities.range', instance: 'brightness' });
|
|
125
|
+
}
|
|
126
|
+
if (obj.supportedCmds.includes('color')) {
|
|
127
|
+
capabilities.push({ type: 'devices.capabilities.color_setting', instance: 'colorRgb' });
|
|
128
|
+
}
|
|
129
|
+
if (obj.supportedCmds.includes('colorTem')) {
|
|
130
|
+
capabilities.push({
|
|
131
|
+
type: 'devices.capabilities.color_setting',
|
|
132
|
+
instance: 'colorTemperatureK',
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
return new GoveeDevice(obj.deviceId, obj.model, obj.deviceName, capabilities);
|
|
85
136
|
}
|
|
86
137
|
}
|
|
87
138
|
//# sourceMappingURL=GoveeDevice.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GoveeDevice.js","sourceRoot":"","sources":["../../../src/domain/entities/GoveeDevice.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"GoveeDevice.js","sourceRoot":"","sources":["../../../src/domain/entities/GoveeDevice.ts"],"names":[],"mappings":"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"}
|
|
@@ -9,10 +9,10 @@ export interface IGoveeDeviceRepository {
|
|
|
9
9
|
/**
|
|
10
10
|
* Retrieves the current state of a specific device
|
|
11
11
|
*/
|
|
12
|
-
findState(deviceId: string,
|
|
12
|
+
findState(deviceId: string, sku: string): Promise<DeviceState>;
|
|
13
13
|
/**
|
|
14
14
|
* Sends a command to control a specific device
|
|
15
15
|
*/
|
|
16
|
-
sendCommand(deviceId: string,
|
|
16
|
+
sendCommand(deviceId: string, sku: string, command: Command): Promise<void>;
|
|
17
17
|
}
|
|
18
18
|
//# sourceMappingURL=IGoveeDeviceRepository.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"IGoveeDeviceRepository.d.ts","sourceRoot":"","sources":["../../../src/domain/repositories/IGoveeDeviceRepository.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAE9C,MAAM,WAAW,sBAAsB;IACrC;;OAEG;IACH,OAAO,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;IAElC;;OAEG;IACH,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,
|
|
1
|
+
{"version":3,"file":"IGoveeDeviceRepository.d.ts","sourceRoot":"","sources":["../../../src/domain/repositories/IGoveeDeviceRepository.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAC;AACtD,OAAO,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAE9C,MAAM,WAAW,sBAAsB;IACrC;;OAEG;IACH,OAAO,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;IAElC;;OAEG;IACH,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC;IAE/D;;OAEG;IACH,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC7E"}
|
|
@@ -12,16 +12,17 @@ export declare class GoveeDeviceRepository implements IGoveeDeviceRepository {
|
|
|
12
12
|
private readonly httpClient;
|
|
13
13
|
private readonly logger;
|
|
14
14
|
private static readonly BASE_URL;
|
|
15
|
+
private generateRequestId;
|
|
15
16
|
constructor(config: GoveeApiConfig);
|
|
16
17
|
private validateConfig;
|
|
17
18
|
private setupInterceptors;
|
|
18
19
|
private handleHttpError;
|
|
19
20
|
findAll(): Promise<GoveeDevice[]>;
|
|
20
|
-
findState(deviceId: string,
|
|
21
|
-
sendCommand(deviceId: string,
|
|
21
|
+
findState(deviceId: string, sku: string): Promise<DeviceState>;
|
|
22
|
+
sendCommand(deviceId: string, sku: string, command: Command): Promise<void>;
|
|
22
23
|
private validateDeviceParams;
|
|
23
|
-
private
|
|
24
|
-
private
|
|
24
|
+
private convertCommandToCapability;
|
|
25
|
+
private mapCapabilitiesToStateProperties;
|
|
25
26
|
}
|
|
26
27
|
export {};
|
|
27
28
|
//# sourceMappingURL=GoveeDeviceRepository.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"GoveeDeviceRepository.d.ts","sourceRoot":"","sources":["../../src/infrastructure/GoveeDeviceRepository.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAC9B,OAAO,EAAE,sBAAsB,EAAE,MAAM,+CAA+C,CAAC;AACvF,OAAO,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAC7D,OAAO,EACL,WAAW,EAKZ,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;AAIrD,UAAU,cAAc;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;
|
|
1
|
+
{"version":3,"file":"GoveeDeviceRepository.d.ts","sourceRoot":"","sources":["../../src/infrastructure/GoveeDeviceRepository.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,MAAM,EAAE,MAAM,MAAM,CAAC;AAC9B,OAAO,EAAE,sBAAsB,EAAE,MAAM,+CAA+C,CAAC;AACvF,OAAO,EAAE,WAAW,EAAE,MAAM,gCAAgC,CAAC;AAC7D,OAAO,EACL,WAAW,EAKZ,MAAM,gCAAgC,CAAC;AACxC,OAAO,EAAE,OAAO,EAAE,MAAM,4BAA4B,CAAC;AAIrD,UAAU,cAAc;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AA8ED,qBAAa,qBAAsB,YAAW,sBAAsB;IAClE,OAAO,CAAC,QAAQ,CAAC,UAAU,CAAgB;IAC3C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAqB;IAC5C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAmC;IAEnE,OAAO,CAAC,iBAAiB;gBAIb,MAAM,EAAE,cAAc;IAgBlC,OAAO,CAAC,cAAc;IAYtB,OAAO,CAAC,iBAAiB;IAqCzB,OAAO,CAAC,eAAe;IAkCjB,OAAO,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;IA+FjC,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC;IA8C9D,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC;IAoCjF,OAAO,CAAC,oBAAoB;IAS5B,OAAO,CAAC,0BAA0B;IAsBlC,OAAO,CAAC,gCAAgC;CA4BzC"}
|
|
@@ -4,6 +4,9 @@ import { DeviceState, } from '../domain/entities/DeviceState';
|
|
|
4
4
|
import { ColorRgb, ColorTemperature, Brightness } from '../domain/value-objects';
|
|
5
5
|
import { GoveeApiError, InvalidApiKeyError, RateLimitError, NetworkError } from '../errors';
|
|
6
6
|
export class GoveeDeviceRepository {
|
|
7
|
+
generateRequestId() {
|
|
8
|
+
return `${Date.now()}-${Math.random().toString(36).substr(2, 9)}`;
|
|
9
|
+
}
|
|
7
10
|
constructor(config) {
|
|
8
11
|
this.validateConfig(config);
|
|
9
12
|
this.logger = config.logger;
|
|
@@ -75,13 +78,53 @@ export class GoveeDeviceRepository {
|
|
|
75
78
|
async findAll() {
|
|
76
79
|
this.logger?.info('Fetching all devices');
|
|
77
80
|
try {
|
|
78
|
-
const response = await this.httpClient.get('/devices');
|
|
81
|
+
const response = await this.httpClient.get('/router/api/v1/user/devices');
|
|
79
82
|
const apiResponse = response.data;
|
|
80
83
|
if (apiResponse.code !== 200) {
|
|
81
84
|
throw new GoveeApiError(`API returned error code ${apiResponse.code}: ${apiResponse.message}`, response.status, apiResponse.code, apiResponse.message);
|
|
82
85
|
}
|
|
83
|
-
const devices = apiResponse.data
|
|
84
|
-
|
|
86
|
+
const devices = apiResponse.data
|
|
87
|
+
.filter(device => {
|
|
88
|
+
if (!device.device ||
|
|
89
|
+
typeof device.device !== 'string' ||
|
|
90
|
+
device.device.trim().length === 0) {
|
|
91
|
+
this.logger?.warn({ device: { ...device, device: '[INVALID]' } }, 'Filtering out device with invalid device ID');
|
|
92
|
+
return false;
|
|
93
|
+
}
|
|
94
|
+
if (!device.sku || typeof device.sku !== 'string' || device.sku.trim().length === 0) {
|
|
95
|
+
this.logger?.warn({ device: { ...device, sku: '[INVALID]' } }, 'Filtering out device with invalid sku');
|
|
96
|
+
return false;
|
|
97
|
+
}
|
|
98
|
+
if (!device.deviceName ||
|
|
99
|
+
typeof device.deviceName !== 'string' ||
|
|
100
|
+
device.deviceName.trim().length === 0) {
|
|
101
|
+
this.logger?.warn({ device: { ...device, deviceName: '[INVALID]' } }, 'Filtering out device with invalid device name');
|
|
102
|
+
return false;
|
|
103
|
+
}
|
|
104
|
+
if (!Array.isArray(device.capabilities)) {
|
|
105
|
+
this.logger?.warn({ device: { ...device, capabilities: '[INVALID]' } }, 'Filtering out device with invalid capabilities');
|
|
106
|
+
return false;
|
|
107
|
+
}
|
|
108
|
+
for (const capability of device.capabilities) {
|
|
109
|
+
if (!capability.type ||
|
|
110
|
+
typeof capability.type !== 'string' ||
|
|
111
|
+
capability.type.trim().length === 0) {
|
|
112
|
+
this.logger?.warn({ device: { ...device, capabilities: '[INVALID]' } }, 'Filtering out device with invalid capability type');
|
|
113
|
+
return false;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
return true;
|
|
117
|
+
})
|
|
118
|
+
.map(device => new GoveeDevice(device.device, device.sku, device.deviceName, device.capabilities));
|
|
119
|
+
const totalDevicesFromApi = apiResponse.data.length;
|
|
120
|
+
const validDevices = devices.length;
|
|
121
|
+
const filteredDevices = totalDevicesFromApi - validDevices;
|
|
122
|
+
if (filteredDevices > 0) {
|
|
123
|
+
this.logger?.info(`Successfully fetched ${validDevices} devices (filtered out ${filteredDevices} invalid devices from ${totalDevicesFromApi} total)`);
|
|
124
|
+
}
|
|
125
|
+
else {
|
|
126
|
+
this.logger?.info(`Successfully fetched ${validDevices} devices`);
|
|
127
|
+
}
|
|
85
128
|
return devices;
|
|
86
129
|
}
|
|
87
130
|
catch (error) {
|
|
@@ -89,19 +132,27 @@ export class GoveeDeviceRepository {
|
|
|
89
132
|
throw error;
|
|
90
133
|
}
|
|
91
134
|
}
|
|
92
|
-
async findState(deviceId,
|
|
93
|
-
this.validateDeviceParams(deviceId,
|
|
94
|
-
this.logger?.info({ deviceId,
|
|
135
|
+
async findState(deviceId, sku) {
|
|
136
|
+
this.validateDeviceParams(deviceId, sku);
|
|
137
|
+
this.logger?.info({ deviceId, sku }, 'Fetching device state');
|
|
95
138
|
try {
|
|
96
|
-
const
|
|
139
|
+
const requestBody = {
|
|
140
|
+
requestId: this.generateRequestId(),
|
|
141
|
+
payload: {
|
|
142
|
+
sku: sku,
|
|
143
|
+
device: deviceId,
|
|
144
|
+
},
|
|
145
|
+
};
|
|
146
|
+
const response = await this.httpClient.post('/router/api/v1/device/state', requestBody);
|
|
97
147
|
const apiResponse = response.data;
|
|
98
148
|
if (apiResponse.code !== 200) {
|
|
99
149
|
throw new GoveeApiError(`API returned error code ${apiResponse.code}: ${apiResponse.message}`, response.status, apiResponse.code, apiResponse.message);
|
|
100
150
|
}
|
|
101
|
-
|
|
102
|
-
const
|
|
103
|
-
const deviceState = new DeviceState(deviceId,
|
|
104
|
-
|
|
151
|
+
// Parse capabilities into state properties
|
|
152
|
+
const stateProperties = this.mapCapabilitiesToStateProperties(apiResponse.data.capabilities);
|
|
153
|
+
const deviceState = new DeviceState(deviceId, sku, true, // Assume online if we get a response
|
|
154
|
+
stateProperties);
|
|
155
|
+
this.logger?.info({ deviceId, sku }, 'Successfully fetched device state');
|
|
105
156
|
return deviceState;
|
|
106
157
|
}
|
|
107
158
|
catch (error) {
|
|
@@ -109,60 +160,75 @@ export class GoveeDeviceRepository {
|
|
|
109
160
|
throw error;
|
|
110
161
|
}
|
|
111
162
|
}
|
|
112
|
-
async sendCommand(deviceId,
|
|
113
|
-
this.validateDeviceParams(deviceId,
|
|
114
|
-
this.logger?.info({ deviceId,
|
|
163
|
+
async sendCommand(deviceId, sku, command) {
|
|
164
|
+
this.validateDeviceParams(deviceId, sku);
|
|
165
|
+
this.logger?.info({ deviceId, sku, command: command.toObject() }, 'Sending command to device');
|
|
115
166
|
const requestBody = {
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
167
|
+
requestId: this.generateRequestId(),
|
|
168
|
+
payload: {
|
|
169
|
+
sku: sku,
|
|
170
|
+
device: deviceId,
|
|
171
|
+
capability: this.convertCommandToCapability(command),
|
|
172
|
+
},
|
|
119
173
|
};
|
|
120
174
|
try {
|
|
121
|
-
const response = await this.httpClient.
|
|
175
|
+
const response = await this.httpClient.post('/router/api/v1/device/control', requestBody);
|
|
122
176
|
const apiResponse = response.data;
|
|
123
177
|
if (apiResponse.code !== 200) {
|
|
124
178
|
throw new GoveeApiError(`API returned error code ${apiResponse.code}: ${apiResponse.message}`, response.status, apiResponse.code, apiResponse.message);
|
|
125
179
|
}
|
|
126
|
-
this.logger?.info({ deviceId,
|
|
180
|
+
this.logger?.info({ deviceId, sku }, 'Successfully sent command to device');
|
|
127
181
|
}
|
|
128
182
|
catch (error) {
|
|
129
183
|
this.logger?.error(error, 'Failed to send command to device');
|
|
130
184
|
throw error;
|
|
131
185
|
}
|
|
132
186
|
}
|
|
133
|
-
validateDeviceParams(deviceId,
|
|
187
|
+
validateDeviceParams(deviceId, sku) {
|
|
134
188
|
if (!deviceId || typeof deviceId !== 'string' || deviceId.trim().length === 0) {
|
|
135
189
|
throw new Error('Device ID must be a non-empty string');
|
|
136
190
|
}
|
|
137
|
-
if (!
|
|
138
|
-
throw new Error('
|
|
191
|
+
if (!sku || typeof sku !== 'string' || sku.trim().length === 0) {
|
|
192
|
+
throw new Error('SKU must be a non-empty string');
|
|
139
193
|
}
|
|
140
194
|
}
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
//
|
|
144
|
-
|
|
195
|
+
convertCommandToCapability(command) {
|
|
196
|
+
const cmdObj = command.toObject();
|
|
197
|
+
// Map command names to capability types
|
|
198
|
+
const capabilityTypeMap = {
|
|
199
|
+
turn: 'devices.capabilities.on_off',
|
|
200
|
+
brightness: 'devices.capabilities.range',
|
|
201
|
+
color: 'devices.capabilities.color_setting',
|
|
202
|
+
colorTem: 'devices.capabilities.color_setting',
|
|
203
|
+
};
|
|
204
|
+
return {
|
|
205
|
+
type: capabilityTypeMap[cmdObj.name] || `devices.capabilities.${cmdObj.name}`,
|
|
206
|
+
instance: cmdObj.name === 'colorTem' ? 'colorTemperatureK' : cmdObj.name,
|
|
207
|
+
value: cmdObj.value,
|
|
208
|
+
};
|
|
145
209
|
}
|
|
146
|
-
|
|
210
|
+
mapCapabilitiesToStateProperties(capabilities) {
|
|
147
211
|
const result = {};
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
212
|
+
for (const capability of capabilities) {
|
|
213
|
+
if (capability.type.includes('on_off')) {
|
|
214
|
+
result.powerSwitch = { value: capability.state.value ? 'on' : 'off' };
|
|
215
|
+
}
|
|
216
|
+
else if (capability.type.includes('range') && capability.instance === 'brightness') {
|
|
217
|
+
result.brightness = { value: new Brightness(capability.state.value) };
|
|
218
|
+
}
|
|
219
|
+
else if (capability.type.includes('color_setting')) {
|
|
220
|
+
if (capability.instance === 'colorRgb') {
|
|
221
|
+
result.color = {
|
|
222
|
+
value: ColorRgb.fromObject(capability.state.value),
|
|
223
|
+
};
|
|
224
|
+
}
|
|
225
|
+
else if (capability.instance === 'colorTemperatureK') {
|
|
226
|
+
result.colorTem = { value: new ColorTemperature(capability.state.value) };
|
|
227
|
+
}
|
|
228
|
+
}
|
|
163
229
|
}
|
|
164
230
|
return result;
|
|
165
231
|
}
|
|
166
232
|
}
|
|
167
|
-
GoveeDeviceRepository.BASE_URL = 'https://
|
|
233
|
+
GoveeDeviceRepository.BASE_URL = 'https://openapi.api.govee.com';
|
|
168
234
|
//# sourceMappingURL=GoveeDeviceRepository.js.map
|
|
@@ -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;
|
|
1
|
+
{"version":3,"file":"GoveeDeviceRepository.js","sourceRoot":"","sources":["../../src/infrastructure/GoveeDeviceRepository.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED