@felixgeelhaar/govee-api-client 1.0.2 → 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 +83 -57
- 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":"AAYA,MAAM,OAAO,WAAW;IAStB,YAAY,QAAgB,EAAE,GAAW,EAAE,UAAkB,EAAE,YAA+B;QAC5F,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC,CAAC;QAChC,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QACtB,IAAI,CAAC,kBAAkB,CAAC,UAAU,CAAC,CAAC;QACpC,IAAI,CAAC,oBAAoB,CAAC,YAAY,CAAC,CAAC;QAExC,IAAI,CAAC,SAAS,GAAG,QAAQ,CAAC;QAC1B,IAAI,CAAC,IAAI,GAAG,GAAG,CAAC;QAChB,IAAI,CAAC,WAAW,GAAG,UAAU,CAAC;QAC9B,IAAI,CAAC,aAAa,GAAG,CAAC,GAAG,YAAY,CAAC,CAAC;QACvC,IAAI,CAAC,aAAa,GAAG,IAAI,CAAC,kBAAkB,CAAC,YAAY,CAAC,CAAC;QAC3D,IAAI,CAAC,YAAY,GAAG,IAAI,CAAC,iBAAiB,CAAC,YAAY,CAAC,CAAC;QACzD,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,uBAAuB,CAAC,YAAY,CAAC,CAAC;IACnE,CAAC;IAEO,gBAAgB,CAAC,QAAgB;QACvC,IAAI,CAAC,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC9E,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;QAC1D,CAAC;IACH,CAAC;IAEO,WAAW,CAAC,GAAW;QAC7B,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC/D,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;QACpD,CAAC;IACH,CAAC;IAEO,kBAAkB,CAAC,UAAkB;QAC3C,IAAI,CAAC,UAAU,IAAI,OAAO,UAAU,KAAK,QAAQ,IAAI,UAAU,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACpF,MAAM,IAAI,KAAK,CAAC,wCAAwC,CAAC,CAAC;QAC5D,CAAC;IACH,CAAC;IAEO,oBAAoB,CAAC,YAA+B;QAC1D,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,YAAY,CAAC,EAAE,CAAC;YACjC,MAAM,IAAI,KAAK,CAAC,+BAA+B,CAAC,CAAC;QACnD,CAAC;QACD,KAAK,MAAM,UAAU,IAAI,YAAY,EAAE,CAAC;YACtC,IACE,CAAC,UAAU,CAAC,IAAI;gBAChB,OAAO,UAAU,CAAC,IAAI,KAAK,QAAQ;gBACnC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EACnC,CAAC;gBACD,MAAM,IAAI,KAAK,CAAC,mDAAmD,CAAC,CAAC;YACvE,CAAC;QACH,CAAC;IACH,CAAC;IAEO,kBAAkB,CAAC,YAA+B;QACxD,4DAA4D;QAC5D,OAAO,YAAY,CAAC,IAAI,CACtB,GAAG,CAAC,EAAE,CACJ,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;YAC3B,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC;YAC1B,GAAG,CAAC,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,CACrC,CAAC;IACJ,CAAC;IAEO,iBAAiB,CAAC,YAA+B;QACvD,iDAAiD;QACjD,OAAO,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC;IACjC,CAAC;IAEO,uBAAuB,CAAC,YAA+B;QAC7D,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAC;QAEnC,KAAK,MAAM,UAAU,IAAI,YAAY,EAAE,CAAC;YACtC,IAAI,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC;gBAAE,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;YAC7D,IAAI,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,UAAU,CAAC,QAAQ,KAAK,YAAY;gBAC3E,QAAQ,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC;YAC7B,IAAI,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC;gBAC9C,IAAI,UAAU,CAAC,QAAQ,KAAK,UAAU;oBAAE,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;gBAC9D,IAAI,UAAU,CAAC,QAAQ,KAAK,mBAAmB;oBAAE,QAAQ,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;YAC5E,CAAC;QACH,CAAC;QAED,OAAO,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAC9B,CAAC;IAED,IAAI,QAAQ;QACV,OAAO,IAAI,CAAC,SAAS,CAAC;IACxB,CAAC;IAED,IAAI,KAAK;QACP,OAAO,IAAI,CAAC,IAAI,CAAC,CAAC,6BAA6B;IACjD,CAAC;IAED,IAAI,GAAG;QACL,OAAO,IAAI,CAAC,IAAI,CAAC;IACnB,CAAC;IAED,IAAI,YAAY;QACd,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC;IAChD,CAAC;IAED,IAAI,UAAU;QACZ,OAAO,IAAI,CAAC,WAAW,CAAC;IAC1B,CAAC;IAED,IAAI,YAAY;QACd,OAAO,IAAI,CAAC,aAAa,CAAC;IAC5B,CAAC;IAED,IAAI,WAAW;QACb,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;IAED,IAAI,aAAa;QACf,OAAO,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC;IACjD,CAAC;IAED,MAAM,CAAC,KAAkB;QACvB,OAAO,IAAI,CAAC,SAAS,KAAK,KAAK,CAAC,SAAS,IAAI,IAAI,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,CAAC;IACxE,CAAC;IAED,QAAQ;QACN,OAAO,eAAe,IAAI,CAAC,SAAS,KAAK,IAAI,CAAC,IAAI,MAAM,IAAI,CAAC,WAAW,IAAI,CAAC;IAC/E,CAAC;IAED,eAAe,CAAC,OAAe;QAC7B,OAAO,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;IAC/C,CAAC;IAED,UAAU;QACR,OAAO,IAAI,CAAC,aAAa,CAAC;IAC5B,CAAC;IAED,WAAW;QACT,OAAO,IAAI,CAAC,YAAY,CAAC;IAC3B,CAAC;IAED,QAAQ;QAQN,OAAO;YACL,QAAQ,EAAE,IAAI,CAAC,SAAS;YACxB,KAAK,EAAE,IAAI,CAAC,IAAI;YAChB,UAAU,EAAE,IAAI,CAAC,WAAW;YAC5B,YAAY,EAAE,IAAI,CAAC,aAAa;YAChC,WAAW,EAAE,IAAI,CAAC,YAAY;YAC9B,aAAa,EAAE,CAAC,GAAG,IAAI,CAAC,cAAc,CAAC;SACxC,CAAC;IACJ,CAAC;IAED,MAAM,CAAC,UAAU,CAAC,GAOjB;QACC,2EAA2E;QAC3E,MAAM,YAAY,GAAsB,EAAE,CAAC;QAE3C,IAAI,GAAG,CAAC,aAAa,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YACvC,YAAY,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,6BAA6B,EAAE,QAAQ,EAAE,aAAa,EAAE,CAAC,CAAC;QACtF,CAAC;QACD,IAAI,GAAG,CAAC,aAAa,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;YAC7C,YAAY,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,4BAA4B,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC,CAAC;QACpF,CAAC;QACD,IAAI,GAAG,CAAC,aAAa,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;YACxC,YAAY,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,oCAAoC,EAAE,QAAQ,EAAE,UAAU,EAAE,CAAC,CAAC;QAC1F,CAAC;QACD,IAAI,GAAG,CAAC,aAAa,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE,CAAC;YAC3C,YAAY,CAAC,IAAI,CAAC;gBAChB,IAAI,EAAE,oCAAoC;gBAC1C,QAAQ,EAAE,mBAAmB;aAC9B,CAAC,CAAC;QACL,CAAC;QAED,OAAO,IAAI,WAAW,CAAC,GAAG,CAAC,QAAQ,EAAE,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;IAChF,CAAC;CACF"}
|
|
@@ -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,23 +78,21 @@ 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
|
|
86
|
+
const devices = apiResponse.data
|
|
84
87
|
.filter(device => {
|
|
85
|
-
if (!device.
|
|
86
|
-
typeof device.
|
|
87
|
-
device.
|
|
88
|
-
this.logger?.warn({ device: { ...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');
|
|
89
92
|
return false;
|
|
90
93
|
}
|
|
91
|
-
if (!device.
|
|
92
|
-
|
|
93
|
-
device.model.trim().length === 0) {
|
|
94
|
-
this.logger?.warn({ device: { ...device, model: '[INVALID]' } }, 'Filtering out device with invalid model');
|
|
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');
|
|
95
96
|
return false;
|
|
96
97
|
}
|
|
97
98
|
if (!device.deviceName ||
|
|
@@ -100,20 +101,22 @@ export class GoveeDeviceRepository {
|
|
|
100
101
|
this.logger?.warn({ device: { ...device, deviceName: '[INVALID]' } }, 'Filtering out device with invalid device name');
|
|
101
102
|
return false;
|
|
102
103
|
}
|
|
103
|
-
if (!Array.isArray(device.
|
|
104
|
-
this.logger?.warn({ device: { ...device,
|
|
104
|
+
if (!Array.isArray(device.capabilities)) {
|
|
105
|
+
this.logger?.warn({ device: { ...device, capabilities: '[INVALID]' } }, 'Filtering out device with invalid capabilities');
|
|
105
106
|
return false;
|
|
106
107
|
}
|
|
107
|
-
for (const
|
|
108
|
-
if (
|
|
109
|
-
|
|
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');
|
|
110
113
|
return false;
|
|
111
114
|
}
|
|
112
115
|
}
|
|
113
116
|
return true;
|
|
114
117
|
})
|
|
115
|
-
.map(device => new GoveeDevice(device.
|
|
116
|
-
const totalDevicesFromApi = apiResponse.data.
|
|
118
|
+
.map(device => new GoveeDevice(device.device, device.sku, device.deviceName, device.capabilities));
|
|
119
|
+
const totalDevicesFromApi = apiResponse.data.length;
|
|
117
120
|
const validDevices = devices.length;
|
|
118
121
|
const filteredDevices = totalDevicesFromApi - validDevices;
|
|
119
122
|
if (filteredDevices > 0) {
|
|
@@ -129,19 +132,27 @@ export class GoveeDeviceRepository {
|
|
|
129
132
|
throw error;
|
|
130
133
|
}
|
|
131
134
|
}
|
|
132
|
-
async findState(deviceId,
|
|
133
|
-
this.validateDeviceParams(deviceId,
|
|
134
|
-
this.logger?.info({ deviceId,
|
|
135
|
+
async findState(deviceId, sku) {
|
|
136
|
+
this.validateDeviceParams(deviceId, sku);
|
|
137
|
+
this.logger?.info({ deviceId, sku }, 'Fetching device state');
|
|
135
138
|
try {
|
|
136
|
-
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);
|
|
137
147
|
const apiResponse = response.data;
|
|
138
148
|
if (apiResponse.code !== 200) {
|
|
139
149
|
throw new GoveeApiError(`API returned error code ${apiResponse.code}: ${apiResponse.message}`, response.status, apiResponse.code, apiResponse.message);
|
|
140
150
|
}
|
|
141
|
-
|
|
142
|
-
const
|
|
143
|
-
const deviceState = new DeviceState(deviceId,
|
|
144
|
-
|
|
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');
|
|
145
156
|
return deviceState;
|
|
146
157
|
}
|
|
147
158
|
catch (error) {
|
|
@@ -149,60 +160,75 @@ export class GoveeDeviceRepository {
|
|
|
149
160
|
throw error;
|
|
150
161
|
}
|
|
151
162
|
}
|
|
152
|
-
async sendCommand(deviceId,
|
|
153
|
-
this.validateDeviceParams(deviceId,
|
|
154
|
-
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');
|
|
155
166
|
const requestBody = {
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
167
|
+
requestId: this.generateRequestId(),
|
|
168
|
+
payload: {
|
|
169
|
+
sku: sku,
|
|
170
|
+
device: deviceId,
|
|
171
|
+
capability: this.convertCommandToCapability(command),
|
|
172
|
+
},
|
|
159
173
|
};
|
|
160
174
|
try {
|
|
161
|
-
const response = await this.httpClient.
|
|
175
|
+
const response = await this.httpClient.post('/router/api/v1/device/control', requestBody);
|
|
162
176
|
const apiResponse = response.data;
|
|
163
177
|
if (apiResponse.code !== 200) {
|
|
164
178
|
throw new GoveeApiError(`API returned error code ${apiResponse.code}: ${apiResponse.message}`, response.status, apiResponse.code, apiResponse.message);
|
|
165
179
|
}
|
|
166
|
-
this.logger?.info({ deviceId,
|
|
180
|
+
this.logger?.info({ deviceId, sku }, 'Successfully sent command to device');
|
|
167
181
|
}
|
|
168
182
|
catch (error) {
|
|
169
183
|
this.logger?.error(error, 'Failed to send command to device');
|
|
170
184
|
throw error;
|
|
171
185
|
}
|
|
172
186
|
}
|
|
173
|
-
validateDeviceParams(deviceId,
|
|
187
|
+
validateDeviceParams(deviceId, sku) {
|
|
174
188
|
if (!deviceId || typeof deviceId !== 'string' || deviceId.trim().length === 0) {
|
|
175
189
|
throw new Error('Device ID must be a non-empty string');
|
|
176
190
|
}
|
|
177
|
-
if (!
|
|
178
|
-
throw new Error('
|
|
191
|
+
if (!sku || typeof sku !== 'string' || sku.trim().length === 0) {
|
|
192
|
+
throw new Error('SKU must be a non-empty string');
|
|
179
193
|
}
|
|
180
194
|
}
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
//
|
|
184
|
-
|
|
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
|
+
};
|
|
185
209
|
}
|
|
186
|
-
|
|
210
|
+
mapCapabilitiesToStateProperties(capabilities) {
|
|
187
211
|
const result = {};
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
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
|
+
}
|
|
203
229
|
}
|
|
204
230
|
return result;
|
|
205
231
|
}
|
|
206
232
|
}
|
|
207
|
-
GoveeDeviceRepository.BASE_URL = 'https://
|
|
233
|
+
GoveeDeviceRepository.BASE_URL = 'https://openapi.api.govee.com';
|
|
208
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":"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,GAAG,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC;IACpE,CAAC;IAED,YAAY,MAAsB;QAChC,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;QAC5B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;QAE5B,IAAI,CAAC,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC;YAC7B,OAAO,EAAE,qBAAqB,CAAC,QAAQ;YACvC,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,KAAK;YAChC,OAAO,EAAE;gBACP,eAAe,EAAE,MAAM,CAAC,MAAM;gBAC9B,cAAc,EAAE,kBAAkB;aACnC;SACF,CAAC,CAAC;QAEH,IAAI,CAAC,iBAAiB,EAAE,CAAC;IAC3B,CAAC;IAEO,cAAc,CAAC,MAAsB;QAC3C,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC7F,MAAM,IAAI,KAAK,CAAC,oDAAoD,CAAC,CAAC;QACxE,CAAC;QACD,IACE,MAAM,CAAC,OAAO,KAAK,SAAS;YAC5B,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,MAAM,CAAC,OAAO,IAAI,CAAC,CAAC,EAC1D,CAAC;YACD,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAC;QACxD,CAAC;IACH,CAAC;IAEO,iBAAiB;QACvB,kCAAkC;QAClC,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,CACtC,MAAM,CAAC,EAAE;YACP,IAAI,CAAC,MAAM,EAAE,KAAK,CAChB;gBACE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,EAAE;gBACpC,GAAG,EAAE,MAAM,CAAC,GAAG;gBACf,OAAO,EAAE,EAAE,GAAG,MAAM,CAAC,OAAO,EAAE,eAAe,EAAE,YAAY,EAAE;aAC9D,EACD,8BAA8B,CAC/B,CAAC;YACF,OAAO,MAAM,CAAC;QAChB,CAAC,EACD,KAAK,CAAC,EAAE;YACN,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,EAAE,2BAA2B,CAAC,CAAC;YACvD,OAAO,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC/B,CAAC,CACF,CAAC;QAEF,sDAAsD;QACtD,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,CACvC,QAAQ,CAAC,EAAE;YACT,IAAI,CAAC,MAAM,EAAE,KAAK,CAChB;gBACE,MAAM,EAAE,QAAQ,CAAC,MAAM;gBACvB,GAAG,EAAE,QAAQ,CAAC,MAAM,CAAC,GAAG;gBACxB,IAAI,EAAE,QAAQ,CAAC,IAAI;aACpB,EACD,kCAAkC,CACnC,CAAC;YACF,OAAO,QAAQ,CAAC;QAClB,CAAC,EACD,KAAK,CAAC,EAAE,CAAC,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,CACrC,CAAC;IACJ,CAAC;IAEO,eAAe,CAAC,KAAiB;QACvC,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,EAAE,qBAAqB,CAAC,CAAC;QAEjD,IACE,KAAK,CAAC,IAAI;YACV,CAAC,KAAK,CAAC,IAAI,KAAK,cAAc;gBAC5B,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC;gBAC/B,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC;gBACjC,KAAK,CAAC,IAAI,KAAK,WAAW,CAAC,EAC7B,CAAC;YACD,MAAM,YAAY,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC;QAC3C,CAAC;QAED,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;YACpB,MAAM,IAAI,YAAY,CAAC,yCAAyC,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;QACtF,CAAC;QAED,MAAM,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,KAAK,CAAC,QAAQ,CAAC;QAEjD,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;YACnB,MAAM,YAAY,GAChB,OAAO,IAAI,KAAK,QAAQ,IAAI,IAAI,KAAK,IAAI,CAAC,CAAC,CAAE,IAA6B,CAAC,CAAC,CAAC,SAAS,CAAC;YACzF,MAAM,kBAAkB,CAAC,wBAAwB,CAAC,YAAY,CAAC,CAAC;QAClE,CAAC;QAED,IAAI,MAAM,KAAK,GAAG,EAAE,CAAC;YACnB,MAAM,cAAc,CAAC,qBAAqB,CAAC,OAAiC,CAAC,CAAC;QAChF,CAAC;QAED,MAAM,YAAY,GAChB,OAAO,IAAI,KAAK,QAAQ,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAE,IAA4C,CAAC;QAClF,MAAM,aAAa,CAAC,YAAY,CAAC,MAAM,EAAE,YAAY,CAAC,CAAC;IACzD,CAAC;IAED,KAAK,CAAC,OAAO;QACX,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,sBAAsB,CAAC,CAAC;QAE1C,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,GAAG,CACxC,6BAA6B,CAC9B,CAAC;YACF,MAAM,WAAW,GAAG,QAAQ,CAAC,IAAI,CAAC;YAElC,IAAI,WAAW,CAAC,IAAI,KAAK,GAAG,EAAE,CAAC;gBAC7B,MAAM,IAAI,aAAa,CACrB,2BAA2B,WAAW,CAAC,IAAI,KAAK,WAAW,CAAC,OAAO,EAAE,EACrE,QAAQ,CAAC,MAAM,EACf,WAAW,CAAC,IAAI,EAChB,WAAW,CAAC,OAAO,CACpB,CAAC;YACJ,CAAC;YAED,MAAM,OAAO,GAAG,WAAW,CAAC,IAAI;iBAC7B,MAAM,CAAC,MAAM,CAAC,EAAE;gBACf,IACE,CAAC,MAAM,CAAC,MAAM;oBACd,OAAO,MAAM,CAAC,MAAM,KAAK,QAAQ;oBACjC,MAAM,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EACjC,CAAC;oBACD,IAAI,CAAC,MAAM,EAAE,IAAI,CACf,EAAE,MAAM,EAAE,EAAE,GAAG,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,EAAE,EAC9C,6CAA6C,CAC9C,CAAC;oBACF,OAAO,KAAK,CAAC;gBACf,CAAC;gBACD,IAAI,CAAC,MAAM,CAAC,GAAG,IAAI,OAAO,MAAM,CAAC,GAAG,KAAK,QAAQ,IAAI,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;oBACpF,IAAI,CAAC,MAAM,EAAE,IAAI,CACf,EAAE,MAAM,EAAE,EAAE,GAAG,MAAM,EAAE,GAAG,EAAE,WAAW,EAAE,EAAE,EAC3C,uCAAuC,CACxC,CAAC;oBACF,OAAO,KAAK,CAAC;gBACf,CAAC;gBACD,IACE,CAAC,MAAM,CAAC,UAAU;oBAClB,OAAO,MAAM,CAAC,UAAU,KAAK,QAAQ;oBACrC,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EACrC,CAAC;oBACD,IAAI,CAAC,MAAM,EAAE,IAAI,CACf,EAAE,MAAM,EAAE,EAAE,GAAG,MAAM,EAAE,UAAU,EAAE,WAAW,EAAE,EAAE,EAClD,+CAA+C,CAChD,CAAC;oBACF,OAAO,KAAK,CAAC;gBACf,CAAC;gBACD,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,YAAY,CAAC,EAAE,CAAC;oBACxC,IAAI,CAAC,MAAM,EAAE,IAAI,CACf,EAAE,MAAM,EAAE,EAAE,GAAG,MAAM,EAAE,YAAY,EAAE,WAAW,EAAE,EAAE,EACpD,gDAAgD,CACjD,CAAC;oBACF,OAAO,KAAK,CAAC;gBACf,CAAC;gBACD,KAAK,MAAM,UAAU,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;oBAC7C,IACE,CAAC,UAAU,CAAC,IAAI;wBAChB,OAAO,UAAU,CAAC,IAAI,KAAK,QAAQ;wBACnC,UAAU,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EACnC,CAAC;wBACD,IAAI,CAAC,MAAM,EAAE,IAAI,CACf,EAAE,MAAM,EAAE,EAAE,GAAG,MAAM,EAAE,YAAY,EAAE,WAAW,EAAE,EAAE,EACpD,mDAAmD,CACpD,CAAC;wBACF,OAAO,KAAK,CAAC;oBACf,CAAC;gBACH,CAAC;gBACD,OAAO,IAAI,CAAC;YACd,CAAC,CAAC;iBACD,GAAG,CACF,MAAM,CAAC,EAAE,CACP,IAAI,WAAW,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,EAAE,MAAM,CAAC,UAAU,EAAE,MAAM,CAAC,YAAY,CAAC,CACrF,CAAC;YAEJ,MAAM,mBAAmB,GAAG,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC;YACpD,MAAM,YAAY,GAAG,OAAO,CAAC,MAAM,CAAC;YACpC,MAAM,eAAe,GAAG,mBAAmB,GAAG,YAAY,CAAC;YAE3D,IAAI,eAAe,GAAG,CAAC,EAAE,CAAC;gBACxB,IAAI,CAAC,MAAM,EAAE,IAAI,CACf,wBAAwB,YAAY,0BAA0B,eAAe,yBAAyB,mBAAmB,SAAS,CACnI,CAAC;YACJ,CAAC;iBAAM,CAAC;gBACN,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,wBAAwB,YAAY,UAAU,CAAC,CAAC;YACpE,CAAC;YAED,OAAO,OAAO,CAAC;QACjB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,EAAE,yBAAyB,CAAC,CAAC;YACrD,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,QAAgB,EAAE,GAAW;QAC3C,IAAI,CAAC,oBAAoB,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;QACzC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,EAAE,uBAAuB,CAAC,CAAC;QAE9D,IAAI,CAAC;YACH,MAAM,WAAW,GAAsB;gBACrC,SAAS,EAAE,IAAI,CAAC,iBAAiB,EAAE;gBACnC,OAAO,EAAE;oBACP,GAAG,EAAE,GAAG;oBACR,MAAM,EAAE,QAAQ;iBACjB;aACF,CAAC;YAEF,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CACzC,6BAA6B,EAC7B,WAAW,CACZ,CAAC;YACF,MAAM,WAAW,GAAG,QAAQ,CAAC,IAAI,CAAC;YAElC,IAAI,WAAW,CAAC,IAAI,KAAK,GAAG,EAAE,CAAC;gBAC7B,MAAM,IAAI,aAAa,CACrB,2BAA2B,WAAW,CAAC,IAAI,KAAK,WAAW,CAAC,OAAO,EAAE,EACrE,QAAQ,CAAC,MAAM,EACf,WAAW,CAAC,IAAI,EAChB,WAAW,CAAC,OAAO,CACpB,CAAC;YACJ,CAAC;YAED,2CAA2C;YAC3C,MAAM,eAAe,GAAG,IAAI,CAAC,gCAAgC,CAAC,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;YAE7F,MAAM,WAAW,GAAG,IAAI,WAAW,CACjC,QAAQ,EACR,GAAG,EACH,IAAI,EAAE,qCAAqC;YAC3C,eAAe,CAChB,CAAC;YAEF,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,EAAE,mCAAmC,CAAC,CAAC;YAC1E,OAAO,WAAW,CAAC;QACrB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,EAAE,8BAA8B,CAAC,CAAC;YAC1D,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAED,KAAK,CAAC,WAAW,CAAC,QAAgB,EAAE,GAAW,EAAE,OAAgB;QAC/D,IAAI,CAAC,oBAAoB,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC;QACzC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,CAAC,QAAQ,EAAE,EAAE,EAAE,2BAA2B,CAAC,CAAC;QAE/F,MAAM,WAAW,GAAwB;YACvC,SAAS,EAAE,IAAI,CAAC,iBAAiB,EAAE;YACnC,OAAO,EAAE;gBACP,GAAG,EAAE,GAAG;gBACR,MAAM,EAAE,QAAQ;gBAChB,UAAU,EAAE,IAAI,CAAC,0BAA0B,CAAC,OAAO,CAAC;aACrD;SACF,CAAC;QAEF,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,IAAI,CACzC,+BAA+B,EAC/B,WAAW,CACZ,CAAC;YACF,MAAM,WAAW,GAAG,QAAQ,CAAC,IAAI,CAAC;YAElC,IAAI,WAAW,CAAC,IAAI,KAAK,GAAG,EAAE,CAAC;gBAC7B,MAAM,IAAI,aAAa,CACrB,2BAA2B,WAAW,CAAC,IAAI,KAAK,WAAW,CAAC,OAAO,EAAE,EACrE,QAAQ,CAAC,MAAM,EACf,WAAW,CAAC,IAAI,EAChB,WAAW,CAAC,OAAO,CACpB,CAAC;YACJ,CAAC;YAED,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,QAAQ,EAAE,GAAG,EAAE,EAAE,qCAAqC,CAAC,CAAC;QAC9E,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,KAAK,EAAE,kCAAkC,CAAC,CAAC;YAC9D,MAAM,KAAK,CAAC;QACd,CAAC;IACH,CAAC;IAEO,oBAAoB,CAAC,QAAgB,EAAE,GAAW;QACxD,IAAI,CAAC,QAAQ,IAAI,OAAO,QAAQ,KAAK,QAAQ,IAAI,QAAQ,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC9E,MAAM,IAAI,KAAK,CAAC,sCAAsC,CAAC,CAAC;QAC1D,CAAC;QACD,IAAI,CAAC,GAAG,IAAI,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC/D,MAAM,IAAI,KAAK,CAAC,gCAAgC,CAAC,CAAC;QACpD,CAAC;IACH,CAAC;IAEO,0BAA0B,CAAC,OAAgB;QAKjD,MAAM,MAAM,GAAG,OAAO,CAAC,QAAQ,EAAE,CAAC;QAElC,wCAAwC;QACxC,MAAM,iBAAiB,GAA2B;YAChD,IAAI,EAAE,6BAA6B;YACnC,UAAU,EAAE,4BAA4B;YACxC,KAAK,EAAE,oCAAoC;YAC3C,QAAQ,EAAE,oCAAoC;SAC/C,CAAC;QAEF,OAAO;YACL,IAAI,EAAE,iBAAiB,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,wBAAwB,MAAM,CAAC,IAAI,EAAE;YAC7E,QAAQ,EAAE,MAAM,CAAC,IAAI,KAAK,UAAU,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI;YACxE,KAAK,EAAE,MAAM,CAAC,KAAK;SACpB,CAAC;IACJ,CAAC;IAEO,gCAAgC,CACtC,YAAkF;QAElF,MAAM,MAAM,GAGR,EAAE,CAAC;QAEP,KAAK,MAAM,UAAU,IAAI,YAAY,EAAE,CAAC;YACtC,IAAI,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACvC,MAAM,CAAC,WAAW,GAAG,EAAE,KAAK,EAAE,UAAU,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,KAAK,EAAE,CAAC;YACxE,CAAC;iBAAM,IAAI,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,IAAI,UAAU,CAAC,QAAQ,KAAK,YAAY,EAAE,CAAC;gBACrF,MAAM,CAAC,UAAU,GAAG,EAAE,KAAK,EAAE,IAAI,UAAU,CAAC,UAAU,CAAC,KAAK,CAAC,KAAe,CAAC,EAAE,CAAC;YAClF,CAAC;iBAAM,IAAI,UAAU,CAAC,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,EAAE,CAAC;gBACrD,IAAI,UAAU,CAAC,QAAQ,KAAK,UAAU,EAAE,CAAC;oBACvC,MAAM,CAAC,KAAK,GAAG;wBACb,KAAK,EAAE,QAAQ,CAAC,UAAU,CACxB,UAAU,CAAC,KAAK,CAAC,KAA4C,CAC9D;qBACF,CAAC;gBACJ,CAAC;qBAAM,IAAI,UAAU,CAAC,QAAQ,KAAK,mBAAmB,EAAE,CAAC;oBACvD,MAAM,CAAC,QAAQ,GAAG,EAAE,KAAK,EAAE,IAAI,gBAAgB,CAAC,UAAU,CAAC,KAAK,CAAC,KAAe,CAAC,EAAE,CAAC;gBACtF,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,MAAM,CAAC;IAChB,CAAC;;AApVuB,8BAAQ,GAAG,+BAA+B,CAAC"}
|
package/package.json
CHANGED