homey-lib 2.49.2 → 2.50.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.
@@ -248,7 +248,7 @@ export interface App {
248
248
  [k: string]: unknown;
249
249
  }[];
250
250
  settings?: DriverSettings;
251
- firmwareUpdates?: ZigbeeFirmwareUpdates;
251
+ firmwareUpdates?: ZigbeeFirmwareUpdates | ZwaveFirmwareUpdates;
252
252
  gtin?: string | string[];
253
253
  matter?: MatterDevice;
254
254
  zwave?: ZwaveDevice;
@@ -413,6 +413,41 @@ export interface ZigbeeFirmwareUpdateFile {
413
413
  name: string;
414
414
  integrity: Integrity;
415
415
  }
416
+ export interface ZwaveFirmwareUpdates {
417
+ wakeInstruction?: I18NObject;
418
+ reportTimeout?: number;
419
+ minWaitTime?: number;
420
+ verifyPostUpdateWithNop?: false;
421
+ nopRetryInterval?: number;
422
+ nopMaxRetries?: number;
423
+ /**
424
+ * @minItems 1
425
+ */
426
+ updates: [ZwaveFirmwareUpdate, ...ZwaveFirmwareUpdate[]];
427
+ }
428
+ export interface ZwaveFirmwareUpdate {
429
+ version: string;
430
+ changelog: I18NObject;
431
+ applicableTo?: string;
432
+ device: ZwaveFirmwareUpdateDevice;
433
+ /**
434
+ * @minItems 1
435
+ */
436
+ files: [ZwaveFirmwareUpdateFile, ...ZwaveFirmwareUpdateFile[]];
437
+ }
438
+ export interface ZwaveFirmwareUpdateDevice {
439
+ manufacturerId: number | number[];
440
+ productId: number | number[];
441
+ productTypeId: number | number[];
442
+ hardwareVersion?: number | number[];
443
+ }
444
+ export interface ZwaveFirmwareUpdateFile {
445
+ region?: string;
446
+ targetId: number;
447
+ name: string;
448
+ size: number;
449
+ integrity: Integrity;
450
+ }
416
451
  export interface MatterDevice {
417
452
  vendorId: number | number[];
418
453
  productId: number | number[];
@@ -164,6 +164,146 @@
164
164
  }
165
165
  }
166
166
  },
167
+ "zwave-firmware-update-device": {
168
+ "type": "object",
169
+ "required": ["manufacturerId", "productTypeId", "productId"],
170
+ "additionalProperties": false,
171
+ "properties": {
172
+ "manufacturerId": {
173
+ "oneOf": [
174
+ {
175
+ "type": "number"
176
+ },
177
+ {
178
+ "type": "array",
179
+ "items": {
180
+ "type": "number"
181
+ }
182
+ }
183
+ ]
184
+ },
185
+ "productId": {
186
+ "oneOf": [
187
+ {
188
+ "type": "number"
189
+ },
190
+ {
191
+ "type": "array",
192
+ "items": {
193
+ "type": "number"
194
+ }
195
+ }
196
+ ]
197
+ },
198
+ "productTypeId": {
199
+ "oneOf": [
200
+ {
201
+ "type": "number"
202
+ },
203
+ {
204
+ "type": "array",
205
+ "items": {
206
+ "type": "number"
207
+ }
208
+ }
209
+ ]
210
+ },
211
+ "hardwareVersion": {
212
+ "oneOf": [
213
+ {
214
+ "type": "number"
215
+ },
216
+ {
217
+ "type": "array",
218
+ "items": {
219
+ "type": "number"
220
+ }
221
+ }
222
+ ]
223
+ }
224
+ }
225
+ },
226
+ "zwave-firmware-update-file": {
227
+ "type": "object",
228
+ "required": ["targetId", "name", "size", "integrity"],
229
+ "additionalProperties": false,
230
+ "properties": {
231
+ "region": {
232
+ "type": "string"
233
+ },
234
+ "targetId": {
235
+ "type": "number"
236
+ },
237
+ "name": {
238
+ "type": "string"
239
+ },
240
+ "size": {
241
+ "type": "number"
242
+ },
243
+ "integrity": {
244
+ "$ref": "#/definitions/integrity"
245
+ }
246
+ }
247
+ },
248
+ "zwave-firmware-update": {
249
+ "type": "object",
250
+ "required": ["version", "changelog", "device", "files"],
251
+ "additionalProperties": false,
252
+ "properties": {
253
+ "version": {
254
+ "type": "string"
255
+ },
256
+ "changelog": {
257
+ "$ref": "#/definitions/i18nObject"
258
+ },
259
+ "applicableTo": {
260
+ "type": "string"
261
+ },
262
+ "device": {
263
+ "$ref": "#/definitions/zwave-firmware-update-device"
264
+ },
265
+ "files": {
266
+ "type": "array",
267
+ "minItems": 1,
268
+ "items": {
269
+ "$ref": "#/definitions/zwave-firmware-update-file"
270
+ }
271
+ }
272
+ }
273
+ },
274
+ "zwave-firmware-updates": {
275
+ "type": "object",
276
+ "additionalProperties": false,
277
+ "required": ["updates"],
278
+ "properties": {
279
+ "wakeInstruction": {
280
+ "$ref": "#/definitions/i18nObject"
281
+ },
282
+ "reportTimeout": {
283
+ "type": "number"
284
+ },
285
+ "minWaitTime": {
286
+ "type": "number"
287
+ },
288
+ "verifyPostUpdateWithNop": {
289
+ "type": "boolean",
290
+ "enum": [false]
291
+ },
292
+ "nopRetryInterval": {
293
+ "type": "number"
294
+ },
295
+ "nopMaxRetries": {
296
+ "type": "number"
297
+ },
298
+ "updates": {
299
+ "type": "array",
300
+ "minItems": 1,
301
+ "items": {
302
+ "$ref": "#/definitions/zwave-firmware-update"
303
+ }
304
+ }
305
+ }
306
+ },
167
307
  "author": {
168
308
  "required": ["name"],
169
309
  "properties": {
@@ -1460,6 +1600,9 @@
1460
1600
  "oneOf": [
1461
1601
  {
1462
1602
  "$ref": "#/definitions/zigbee-firmware-updates"
1603
+ },
1604
+ {
1605
+ "$ref": "#/definitions/zwave-firmware-updates"
1463
1606
  }
1464
1607
  ]
1465
1608
  },
package/helpers/index.js CHANGED
@@ -40,11 +40,11 @@ try {
40
40
  }
41
41
 
42
42
  function toArray(value) {
43
- if (value) {
43
+ if (value !== undefined && value !== null) {
44
44
  return Array.isArray(value) ? value : [value];
45
45
  }
46
46
 
47
47
  return [];
48
48
  }
49
49
 
50
- module.exports.toArray = toArray;
50
+ module.exports.toArray = toArray;
package/index.js CHANGED
@@ -48,3 +48,4 @@ module.exports.getBatteries = Energy.getBatteries.bind(Energy);
48
48
  /** @typedef {import('./assets/app/schema').App} AppManifest */
49
49
  /** @typedef {import('./assets/capability/schema').Capability} CapabilityDefinition */
50
50
  /** @typedef {import('./assets/app/schema').ZigbeeFirmwareUpdates} ZigbeeFirmwareUpdates */
51
+ /** @typedef {import('./assets/app/schema').ZwaveFirmwareUpdates} ZwaveFirmwareUpdates */
package/lib/App/index.js CHANGED
@@ -642,15 +642,11 @@ class App {
642
642
 
643
643
  // Validate driver.firmwareUpdates
644
644
  if (driver.firmwareUpdates && Array.isArray(driver.firmwareUpdates.updates)) {
645
- // TODO: Remove when we want to roll out firmware updates.
646
- if (level !== 'debug') {
647
- throw new Error(`drivers.${driver.id} firmwareUpdates can only be included in debug mode validation.`);
648
- }
649
-
650
645
  const isZigbeeDriver = typeof driver.zigbee === 'object' && driver.zigbee !== null;
646
+ const isZwaveDriver = typeof driver.zwave === 'object' && driver.zwave !== null;
651
647
 
652
- if (!isZigbeeDriver) {
653
- throw new Error(`drivers.${driver.id} firmwareUpdates are only supported for Zigbee drivers (missing driver.zigbee)`);
648
+ if (!isZigbeeDriver && !isZwaveDriver) {
649
+ throw new Error(`drivers.${driver.id} firmwareUpdates are only supported for Zigbee and Zwave drivers (missing driver.zigbee or driver.zwave)`);
654
650
  }
655
651
 
656
652
  for (const [updateIndex, update] of Object.entries(driver.firmwareUpdates.updates)) {
@@ -688,6 +684,44 @@ class App {
688
684
  }
689
685
  }
690
686
 
687
+ if (isZwaveDriver) {
688
+ if (!semver.valid(update.version)) {
689
+ throw new Error(`drivers.${driver.id}.firmwareUpdates.updates[${updateIndex}].version is not a valid semver version`);
690
+ }
691
+
692
+ if (update.applicableTo !== undefined && !semver.validRange(update.applicableTo)) {
693
+ throw new Error(`drivers.${driver.id}.firmwareUpdates.updates[${updateIndex}].applicableTo is not a valid semver range`);
694
+ }
695
+
696
+ const driverManufacturerIds = toArray(driver.zwave.manufacturerId);
697
+ const driverProductTypeIds = toArray(driver.zwave.productTypeId);
698
+ const driverProductIds = toArray(driver.zwave.productId);
699
+
700
+ const updateManufacturerIds = toArray(update.device.manufacturerId);
701
+ const updateProductTypeIds = toArray(update.device.productTypeId);
702
+ const updateProductIds = toArray(update.device.productId);
703
+
704
+ if (updateManufacturerIds.length === 0 || updateProductTypeIds.length === 0 || updateProductIds.length === 0) {
705
+ throw new Error(`drivers.${driver.id}.firmwareUpdates.updates[${updateIndex}] must include at least one manufacturerId, productTypeId and productId`);
706
+ }
707
+
708
+ const hasMismatchedManufacturerId = updateManufacturerIds.some(id => !driverManufacturerIds.includes(id));
709
+ const hasMismatchedProductTypeId = updateProductTypeIds.some(id => !driverProductTypeIds.includes(id));
710
+ const hasMismatchedProductId = updateProductIds.some(id => !driverProductIds.includes(id));
711
+
712
+ if (hasMismatchedManufacturerId) {
713
+ throw new Error(`drivers.${driver.id}.firmwareUpdates.updates[${updateIndex}] has a manufacturerId that does not match the driver zwave.manufacturerId`);
714
+ }
715
+
716
+ if (hasMismatchedProductTypeId) {
717
+ throw new Error(`drivers.${driver.id}.firmwareUpdates.updates[${updateIndex}] has a productTypeId that does not match the driver zwave.productTypeId`);
718
+ }
719
+
720
+ if (hasMismatchedProductId) {
721
+ throw new Error(`drivers.${driver.id}.firmwareUpdates.updates[${updateIndex}] has a productId that does not match the driver zwave.productId`);
722
+ }
723
+ }
724
+
691
725
  const seenFiles = new Set();
692
726
 
693
727
  for (const [fileIndex, file] of Object.entries(update.files)) {
@@ -717,9 +751,31 @@ class App {
717
751
  }
718
752
  }
719
753
 
720
- const fileId = `${file.manufacturerCode}-${file.imageType}-${file.fileVersion}`;
754
+ // Note: Util.validateZigbeeOTAHeader already checks the file size for zigbee firmware files.
755
+ // Note: Z-Wave doesn't have a standard header or file type, so nothing we validate about the file itself.
756
+ if (isZwaveDriver) {
757
+ const { size: actualSize } = await statAsync(filePath);
758
+ if (actualSize !== file.size) {
759
+ throw new Error(`drivers.${driver.id}.firmwareUpdates.updates[${updateIndex}].files[${fileIndex}] size mismatch: expected ${file.size}, got ${actualSize}`);
760
+ }
761
+ }
762
+
763
+ let fileId = null;
764
+
765
+ if (Util.isZigbeeFirmwareUpdateFile(file)) {
766
+ fileId = `${file.manufacturerCode}-${file.imageType}-${file.fileVersion}`;
767
+ } else if (Util.isZwaveFirmwareUpdateFile(file)) {
768
+ fileId = `${file.targetId}-${file.region ? file.region : 'global'}`;
769
+ } else {
770
+ throw new Error(`drivers.${driver.id}.firmwareUpdates.updates[${updateIndex}].files[${fileIndex}] invalid file schema`);
771
+ }
772
+
721
773
  if (seenFiles.has(fileId)) {
722
- throw new Error(`drivers.${driver.id}.firmwareUpdates.updates[${updateIndex}] has multiple files with the same manufacturerCode, imageType and fileVersion`);
774
+ if (isZigbeeDriver) {
775
+ throw new Error(`drivers.${driver.id}.firmwareUpdates.updates[${updateIndex}] has multiple files with the same manufacturerCode, imageType and fileVersion`);
776
+ } else {
777
+ throw new Error(`drivers.${driver.id}.firmwareUpdates.updates[${updateIndex}] has multiple files with the same targetId and region`);
778
+ }
723
779
  }
724
780
  seenFiles.add(fileId);
725
781
  }
package/lib/Util/index.js CHANGED
@@ -3,6 +3,11 @@
3
3
  const fileUtils = require('./file');
4
4
  const zigbeeUtils = require('./zigbee');
5
5
 
6
+ /** @typedef {import('../../assets/app/schema').ZigbeeFirmwareUpdates} ZigbeeFirmwareUpdates */
7
+ /** @typedef {import('../../assets/app/schema').ZwaveFirmwareUpdates} ZwaveFirmwareUpdates */
8
+ /** @typedef {import('../../assets/app/schema').ZigbeeFirmwareUpdateFile} ZigbeeFirmwareUpdateFile */
9
+ /** @typedef {import('../../assets/app/schema').ZwaveFirmwareUpdateFile} ZwaveFirmwareUpdateFile */
10
+
6
11
  class Util {
7
12
 
8
13
  /**
@@ -82,6 +87,60 @@ class Util {
82
87
  return fileUtils.getOTAFilePath({ appPath, driverId, fileName });
83
88
  }
84
89
 
90
+ /**
91
+ * @param {ZigbeeFirmwareUpdateFile | ZwaveFirmwareUpdateFile} firmwareFile
92
+ * @return {firmwareFile is ZigbeeFirmwareUpdateFile}
93
+ */
94
+ static isZigbeeFirmwareUpdateFile(firmwareFile) {
95
+ return 'manufacturerCode' in firmwareFile;
96
+ }
97
+
98
+ /**
99
+ * @param {ZigbeeFirmwareUpdateFile | ZwaveFirmwareUpdateFile} firmwareFile
100
+ * @return {firmwareFile is ZwaveFirmwareUpdateFile}
101
+ */
102
+ static isZwaveFirmwareUpdateFile(firmwareFile) {
103
+ return 'targetId' in firmwareFile;
104
+ }
105
+
106
+ /**
107
+ * @param {ZigbeeFirmwareUpdates['updates'][number] | ZwaveFirmwareUpdates['updates'][number]} driverFirmwareUpdatesUpdate
108
+ * @return {driverFirmwareUpdatesUpdate is ZigbeeFirmwareUpdates['updates'][number]}
109
+ */
110
+ static isZigbeeFirmwareUpdate(driverFirmwareUpdatesUpdate) {
111
+ if (!Array.isArray(driverFirmwareUpdatesUpdate.files) || driverFirmwareUpdatesUpdate.files.length === 0) return false;
112
+ return Util.isZigbeeFirmwareUpdateFile(driverFirmwareUpdatesUpdate.files[0]);
113
+ }
114
+
115
+ /**
116
+ * @param {ZigbeeFirmwareUpdates['updates'][number] | ZwaveFirmwareUpdates['updates'][number]} driverFirmwareUpdatesUpdate
117
+ * @return {driverFirmwareUpdatesUpdate is ZwaveFirmwareUpdates['updates'][number]}
118
+ */
119
+ static isZwaveFirmwareUpdate(driverFirmwareUpdatesUpdate) {
120
+ if (!Array.isArray(driverFirmwareUpdatesUpdate.files) || driverFirmwareUpdatesUpdate.files.length === 0) return false;
121
+ return Util.isZwaveFirmwareUpdateFile(driverFirmwareUpdatesUpdate.files[0]);
122
+ }
123
+
124
+ /**
125
+ * @param {ZigbeeFirmwareUpdates | ZwaveFirmwareUpdates} driverFirmwareUpdates
126
+ * @returns {driverFirmwareUpdates is ZigbeeFirmwareUpdates}
127
+ */
128
+ static isZigbeeFirmwareUpdates(driverFirmwareUpdates) {
129
+ if (!driverFirmwareUpdates) return false;
130
+ if (!Array.isArray(driverFirmwareUpdates.updates) || driverFirmwareUpdates.updates.length === 0) return false;
131
+ return Util.isZigbeeFirmwareUpdate(driverFirmwareUpdates.updates[0]);
132
+ }
133
+
134
+ /**
135
+ * @param {ZigbeeFirmwareUpdates | ZwaveFirmwareUpdates} driverFirmwareUpdates
136
+ * @returns {driverFirmwareUpdates is ZwaveFirmwareUpdates}
137
+ */
138
+ static isZwaveFirmwareUpdates(driverFirmwareUpdates) {
139
+ if (!driverFirmwareUpdates) return false;
140
+ if (!Array.isArray(driverFirmwareUpdates.updates) || driverFirmwareUpdates.updates.length === 0) return false;
141
+ return Util.isZwaveFirmwareUpdate(driverFirmwareUpdates.updates[0]);
142
+ }
143
+
85
144
  }
86
145
 
87
146
  Util.FEATURE_SPEAKER = 'speaker';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "homey-lib",
3
- "version": "2.49.2",
3
+ "version": "2.50.0",
4
4
  "description": "Shared Library for Homey",
5
5
  "types": "types/index.d.ts",
6
6
  "main": "index.js",
@@ -248,7 +248,7 @@ export interface App {
248
248
  [k: string]: unknown;
249
249
  }[];
250
250
  settings?: DriverSettings;
251
- firmwareUpdates?: ZigbeeFirmwareUpdates;
251
+ firmwareUpdates?: ZigbeeFirmwareUpdates | ZwaveFirmwareUpdates;
252
252
  gtin?: string | string[];
253
253
  matter?: MatterDevice;
254
254
  zwave?: ZwaveDevice;
@@ -413,6 +413,41 @@ export interface ZigbeeFirmwareUpdateFile {
413
413
  name: string;
414
414
  integrity: Integrity;
415
415
  }
416
+ export interface ZwaveFirmwareUpdates {
417
+ wakeInstruction?: I18NObject;
418
+ reportTimeout?: number;
419
+ minWaitTime?: number;
420
+ verifyPostUpdateWithNop?: false;
421
+ nopRetryInterval?: number;
422
+ nopMaxRetries?: number;
423
+ /**
424
+ * @minItems 1
425
+ */
426
+ updates: [ZwaveFirmwareUpdate, ...ZwaveFirmwareUpdate[]];
427
+ }
428
+ export interface ZwaveFirmwareUpdate {
429
+ version: string;
430
+ changelog: I18NObject;
431
+ applicableTo?: string;
432
+ device: ZwaveFirmwareUpdateDevice;
433
+ /**
434
+ * @minItems 1
435
+ */
436
+ files: [ZwaveFirmwareUpdateFile, ...ZwaveFirmwareUpdateFile[]];
437
+ }
438
+ export interface ZwaveFirmwareUpdateDevice {
439
+ manufacturerId: number | number[];
440
+ productId: number | number[];
441
+ productTypeId: number | number[];
442
+ hardwareVersion?: number | number[];
443
+ }
444
+ export interface ZwaveFirmwareUpdateFile {
445
+ region?: string;
446
+ targetId: number;
447
+ name: string;
448
+ size: number;
449
+ integrity: Integrity;
450
+ }
416
451
  export interface MatterDevice {
417
452
  vendorId: number | number[];
418
453
  productId: number | number[];
package/types/index.d.ts CHANGED
@@ -13,6 +13,7 @@ export const getBatteries: typeof Energy.getBatteries;
13
13
  export type AppManifest = import("./assets/app/schema").App;
14
14
  export type CapabilityDefinition = import("./assets/capability/schema").Capability;
15
15
  export type ZigbeeFirmwareUpdates = import("./assets/app/schema").ZigbeeFirmwareUpdates;
16
+ export type ZwaveFirmwareUpdates = import("./assets/app/schema").ZwaveFirmwareUpdates;
16
17
  import App = require("./lib/App");
17
18
  import Capability = require("./lib/Capability");
18
19
  import Device = require("./lib/Device");
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.js"],"names":[],"mappings":"+BAkBW,OAAO,MAAM,CAAC,UAAU;6BAExB,OAAO,MAAM,CAAC,QAAQ;8BAGtB,OAAO,UAAU,CAAC,eAAe;4BAEjC,OAAO,UAAU,CAAC,aAAa;4BAE/B,OAAO,UAAU,CAAC,aAAa;4BAG/B,OAAO,GAAG,CAAC,UAAU;+BAErB,OAAO,GAAG,CAAC,aAAa;gCAExB,OAAO,GAAG,CAAC,cAAc;+BAEzB,OAAO,GAAG,CAAC,aAAa;6BAGxB,OAAO,KAAK,CAAC,SAAS;4BAGtB,OAAO,MAAM,CAAC,aAAa;2BAE3B,OAAO,MAAM,CAAC,YAAY;0BAGvB,OAAO,qBAAqB,EAAE,GAAG;mCACjC,OAAO,4BAA4B,EAAE,UAAU;oCAC/C,OAAO,qBAAqB,EAAE,qBAAqB"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../index.js"],"names":[],"mappings":"+BAkBW,OAAO,MAAM,CAAC,UAAU;6BAExB,OAAO,MAAM,CAAC,QAAQ;8BAGtB,OAAO,UAAU,CAAC,eAAe;4BAEjC,OAAO,UAAU,CAAC,aAAa;4BAE/B,OAAO,UAAU,CAAC,aAAa;4BAG/B,OAAO,GAAG,CAAC,UAAU;+BAErB,OAAO,GAAG,CAAC,aAAa;gCAExB,OAAO,GAAG,CAAC,cAAc;+BAEzB,OAAO,GAAG,CAAC,aAAa;6BAGxB,OAAO,KAAK,CAAC,SAAS;4BAGtB,OAAO,MAAM,CAAC,aAAa;2BAE3B,OAAO,MAAM,CAAC,YAAY;0BAGvB,OAAO,qBAAqB,EAAE,GAAG;mCACjC,OAAO,4BAA4B,EAAE,UAAU;oCAC/C,OAAO,qBAAqB,EAAE,qBAAqB;mCACnD,OAAO,qBAAqB,EAAE,oBAAoB"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../lib/App/index.js"],"names":[],"mappings":";AA8EA;IACE,2CAAqD;IACrD,2CAAmD;IAmyBnD;;;OAGG;IACH,sCAHW,WAAW,GACT,IAAI,CAOhB;IA4PD;;;;;OAKG;IACH,4CALW,MAAM,QACN;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,aAClB,MAAM,GACJ,IAAI,CAkChB;IAiBD;;;OAGG;IACH,wBAHW,MAAM,GACJ,OAAO,CAQnB;IAED;;;OAGG;IACH,gCAHW,MAAM,GACJ,OAAO,CAInB;IAED;;OAEG;IACH,wBAFa,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAMnC;IAED;;OAEG;IACH,yBAFa,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAcnD;IAED;;OAEG;IACH,wBAFa,MAAM,EAAE,CAIpB;IAED;;OAEG;IACH,qBAFa,MAAM,EAAE,CAKpB;IAED;;;OAGG;IACH,4BAHW,MAAM,GACJ,MAAM,CAuBlB;IAED;;;;OAIG;IACH,0BAJW,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,SAAS,WAC1C,WAAW,GACT,MAAM,GAAG,IAAI,CAyDzB;IAjvCD;;OAEG;IACH,kBAFW,MAAM,EAQhB;IALC,cAAiB;IAOnB;;;OAGG;IACH,eAHc,OAAO,EAAA,GACR,IAAI,CAKhB;IAED;;;OAGG;IACH,6BAHW;QAAE,KAAK,CAAC,EAAE,OAAO,GAAG,SAAS,GAAG,UAAU,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,GAC3D,OAAO,CAAC,IAAI,CAAC,CAywBzB;IAnwBC,gBAAmB;IAgxBrB;;;;OAIG;IACH,uCAJW,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,UACvB;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,GACZ,IAAI,CAwBhB;IAED;;;;OAIG;IACH,8BAJW,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,GAAG,SAAS,WAC1C,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,GAAG,SAAS,GACxC,IAAI,CAuBhB;IAED;;;OAGG;IACH,gCAHW,MAAM,GACJ,OAAO,CAAC,MAAM,EAAE,CAAC,CAY7B;IAED;;;OAGG;IACH,yCAHW,MAAM,GACJ,OAAO,CAAC,IAAI,CAAC,CAOzB;IAED;;;OAGG;IACH,mCAHW,MAAM,GACJ,OAAO,CAAC,OAAO,CAAC,CAe5B;IAED;;;;;OAKG;IACH,2BALW;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,QAChC,KAAK,GAAG,QAAQ,cAChB,MAAM,GACJ,OAAO,CAAC,IAAI,CAAC,CA6BzB;IAED;;OAEG;IACH,oBAFa,OAAO,CAAC,IAAI,CAAC,CAuBzB;IAED;;;;;;OAMG;IACH,wBANW,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,aACvB,MAAM,WACN,WAAW,mCACX;QAAE,YAAY,EAAE,OAAO,CAAC;QAAC,aAAa,EAAE,OAAO,CAAA;KAAE,GAC/C,IAAI,CA+EhB;IA0CD;;;;OAIG;IACH,qBAJW,MAAM,YACN,MAAM,GACJ,OAAO,CAAC,MAAM,CAAC,CAU3B;CAwJF;;;;mBAnyCa,OAAO,yBAAyB,EAAE,GAAG"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../lib/App/index.js"],"names":[],"mappings":";AA8EA;IACE,2CAAqD;IACrD,2CAAmD;IA21BnD;;;OAGG;IACH,sCAHW,WAAW,GACT,IAAI,CAOhB;IA4PD;;;;;OAKG;IACH,4CALW,MAAM,QACN;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,EAAE,aAClB,MAAM,GACJ,IAAI,CAkChB;IAiBD;;;OAGG;IACH,wBAHW,MAAM,GACJ,OAAO,CAQnB;IAED;;;OAGG;IACH,gCAHW,MAAM,GACJ,OAAO,CAInB;IAED;;OAEG;IACH,wBAFa,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAMnC;IAED;;OAEG;IACH,yBAFa,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAcnD;IAED;;OAEG;IACH,wBAFa,MAAM,EAAE,CAIpB;IAED;;OAEG;IACH,qBAFa,MAAM,EAAE,CAKpB;IAED;;;OAGG;IACH,4BAHW,MAAM,GACJ,MAAM,CAuBlB;IAED;;;;OAIG;IACH,0BAJW,KAAK,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,GAAG,SAAS,WAC1C,WAAW,GACT,MAAM,GAAG,IAAI,CAyDzB;IAzyCD;;OAEG;IACH,kBAFW,MAAM,EAQhB;IALC,cAAiB;IAOnB;;;OAGG;IACH,eAHc,OAAO,EAAA,GACR,IAAI,CAKhB;IAED;;;OAGG;IACH,6BAHW;QAAE,KAAK,CAAC,EAAE,OAAO,GAAG,SAAS,GAAG,UAAU,CAAC;QAAC,KAAK,CAAC,EAAE,OAAO,CAAA;KAAE,GAC3D,OAAO,CAAC,IAAI,CAAC,CAi0BzB;IA3zBC,gBAAmB;IAw0BrB;;;;OAIG;IACH,uCAJW,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,UACvB;QAAE,EAAE,EAAE,MAAM,CAAA;KAAE,GACZ,IAAI,CAwBhB;IAED;;;;OAIG;IACH,8BAJW,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,GAAG,SAAS,WAC1C,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,GAAG,SAAS,GACxC,IAAI,CAuBhB;IAED;;;OAGG;IACH,gCAHW,MAAM,GACJ,OAAO,CAAC,MAAM,EAAE,CAAC,CAY7B;IAED;;;OAGG;IACH,yCAHW,MAAM,GACJ,OAAO,CAAC,IAAI,CAAC,CAOzB;IAED;;;OAGG;IACH,mCAHW,MAAM,GACJ,OAAO,CAAC,OAAO,CAAC,CAe5B;IAED;;;;;OAKG;IACH,2BALW;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,KAAK,EAAE,MAAM,CAAA;KAAE,QAChC,KAAK,GAAG,QAAQ,cAChB,MAAM,GACJ,OAAO,CAAC,IAAI,CAAC,CA6BzB;IAED;;OAEG;IACH,oBAFa,OAAO,CAAC,IAAI,CAAC,CAuBzB;IAED;;;;;;OAMG;IACH,wBANW,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,aACvB,MAAM,WACN,WAAW,mCACX;QAAE,YAAY,EAAE,OAAO,CAAC;QAAC,aAAa,EAAE,OAAO,CAAA;KAAE,GAC/C,IAAI,CA+EhB;IA0CD;;;;OAIG;IACH,qBAJW,MAAM,YACN,MAAM,GACJ,OAAO,CAAC,MAAM,CAAC,CAU3B;CAwJF;;;;mBA31Ca,OAAO,yBAAyB,EAAE,GAAG"}
@@ -1,4 +1,8 @@
1
1
  export = Util;
2
+ /** @typedef {import('../../assets/app/schema').ZigbeeFirmwareUpdates} ZigbeeFirmwareUpdates */
3
+ /** @typedef {import('../../assets/app/schema').ZwaveFirmwareUpdates} ZwaveFirmwareUpdates */
4
+ /** @typedef {import('../../assets/app/schema').ZigbeeFirmwareUpdateFile} ZigbeeFirmwareUpdateFile */
5
+ /** @typedef {import('../../assets/app/schema').ZwaveFirmwareUpdateFile} ZwaveFirmwareUpdateFile */
2
6
  declare class Util {
3
7
  /**
4
8
  * @param {string} modelId
@@ -64,13 +68,48 @@ declare class Util {
64
68
  driverId: string;
65
69
  fileName: string;
66
70
  }): string;
71
+ /**
72
+ * @param {ZigbeeFirmwareUpdateFile | ZwaveFirmwareUpdateFile} firmwareFile
73
+ * @return {firmwareFile is ZigbeeFirmwareUpdateFile}
74
+ */
75
+ static isZigbeeFirmwareUpdateFile(firmwareFile: ZigbeeFirmwareUpdateFile | ZwaveFirmwareUpdateFile): firmwareFile is ZigbeeFirmwareUpdateFile;
76
+ /**
77
+ * @param {ZigbeeFirmwareUpdateFile | ZwaveFirmwareUpdateFile} firmwareFile
78
+ * @return {firmwareFile is ZwaveFirmwareUpdateFile}
79
+ */
80
+ static isZwaveFirmwareUpdateFile(firmwareFile: ZigbeeFirmwareUpdateFile | ZwaveFirmwareUpdateFile): firmwareFile is ZwaveFirmwareUpdateFile;
81
+ /**
82
+ * @param {ZigbeeFirmwareUpdates['updates'][number] | ZwaveFirmwareUpdates['updates'][number]} driverFirmwareUpdatesUpdate
83
+ * @return {driverFirmwareUpdatesUpdate is ZigbeeFirmwareUpdates['updates'][number]}
84
+ */
85
+ static isZigbeeFirmwareUpdate(driverFirmwareUpdatesUpdate: ZigbeeFirmwareUpdates["updates"][number] | ZwaveFirmwareUpdates["updates"][number]): driverFirmwareUpdatesUpdate is ZigbeeFirmwareUpdates["updates"][number];
86
+ /**
87
+ * @param {ZigbeeFirmwareUpdates['updates'][number] | ZwaveFirmwareUpdates['updates'][number]} driverFirmwareUpdatesUpdate
88
+ * @return {driverFirmwareUpdatesUpdate is ZwaveFirmwareUpdates['updates'][number]}
89
+ */
90
+ static isZwaveFirmwareUpdate(driverFirmwareUpdatesUpdate: ZigbeeFirmwareUpdates["updates"][number] | ZwaveFirmwareUpdates["updates"][number]): driverFirmwareUpdatesUpdate is ZwaveFirmwareUpdates["updates"][number];
91
+ /**
92
+ * @param {ZigbeeFirmwareUpdates | ZwaveFirmwareUpdates} driverFirmwareUpdates
93
+ * @returns {driverFirmwareUpdates is ZigbeeFirmwareUpdates}
94
+ */
95
+ static isZigbeeFirmwareUpdates(driverFirmwareUpdates: ZigbeeFirmwareUpdates | ZwaveFirmwareUpdates): driverFirmwareUpdates is ZigbeeFirmwareUpdates;
96
+ /**
97
+ * @param {ZigbeeFirmwareUpdates | ZwaveFirmwareUpdates} driverFirmwareUpdates
98
+ * @returns {driverFirmwareUpdates is ZwaveFirmwareUpdates}
99
+ */
100
+ static isZwaveFirmwareUpdates(driverFirmwareUpdates: ZigbeeFirmwareUpdates | ZwaveFirmwareUpdates): driverFirmwareUpdates is ZwaveFirmwareUpdates;
67
101
  }
68
102
  declare namespace Util {
69
- let FEATURE_SPEAKER: string;
70
- let FEATURE_LED_RING: string;
71
- let FEATURE_NFC: string;
72
- let FEATURE_MATTER: string;
73
- let FEATURE_CAMERA_STREAMING: string;
74
- let _platformLocalFeatures: Record<string, string[]>;
103
+ export { FEATURE_SPEAKER, FEATURE_LED_RING, FEATURE_NFC, FEATURE_MATTER, FEATURE_CAMERA_STREAMING, _platformLocalFeatures, ZigbeeFirmwareUpdates, ZwaveFirmwareUpdates, ZigbeeFirmwareUpdateFile, ZwaveFirmwareUpdateFile };
75
104
  }
105
+ declare var FEATURE_SPEAKER: string;
106
+ declare var FEATURE_LED_RING: string;
107
+ declare var FEATURE_NFC: string;
108
+ declare var FEATURE_MATTER: string;
109
+ declare var FEATURE_CAMERA_STREAMING: string;
110
+ declare var _platformLocalFeatures: Record<string, string[]>;
111
+ type ZigbeeFirmwareUpdates = import("../../assets/app/schema").ZigbeeFirmwareUpdates;
112
+ type ZwaveFirmwareUpdates = import("../../assets/app/schema").ZwaveFirmwareUpdates;
113
+ type ZigbeeFirmwareUpdateFile = import("../../assets/app/schema").ZigbeeFirmwareUpdateFile;
114
+ type ZwaveFirmwareUpdateFile = import("../../assets/app/schema").ZwaveFirmwareUpdateFile;
76
115
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../lib/Util/index.js"],"names":[],"mappings":";AAKA;IAEE;;;OAGG;IACH,yCAHW,MAAM,GACJ,MAAM,EAAE,CAIpB;IAED;;;;OAIG;IACH,gDAJW,MAAM,kBACN,MAAM,EAAE,GACN,MAAM,EAAE,CAKpB;IAED;;;;;;OAMG;IACH,8BAJW,MAAM,YACN,MAAM,GACJ,OAAO,CAAC,MAAM,CAAC,CAI3B;IAED;;;;;;OAMG;IACH,mCAJW,MAAM,aACN,MAAM,GACJ,OAAO,CAAC,OAAO,CAAC,CAI5B;IAED;;;;;OAKG;IACH,sCAHW,MAAM,GACJ,OAAO,CAAC,OAAO,UAAU,EAAE,eAAe,CAAC,CAIvD;IAED;;;;;;;;;OASG;IACH,wCANG;QAAwB,QAAQ,EAAxB,MAAM;QACW,gBAAgB,GAAjC,MAAM;QACW,WAAW,GAA5B,MAAM;QACW,SAAS,GAA1B,MAAM;KACd,GAAU,OAAO,CAAC,OAAO,UAAU,EAAE,eAAe,CAAC,CAIvD;IAED;;;;;;;;OAQG;IACH,uDALG;QAAyB,OAAO,GAAxB,MAAM;QACU,QAAQ,EAAxB,MAAM;QACU,QAAQ,EAAxB,MAAM;KACd,GAAU,MAAM,CAIlB;CAEF;;;;;;;gCAOU,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../lib/Util/index.js"],"names":[],"mappings":";AAKA,+FAA+F;AAC/F,6FAA6F;AAC7F,qGAAqG;AACrG,mGAAmG;AAEnG;IAEE;;;OAGG;IACH,yCAHW,MAAM,GACJ,MAAM,EAAE,CAIpB;IAED;;;;OAIG;IACH,gDAJW,MAAM,kBACN,MAAM,EAAE,GACN,MAAM,EAAE,CAKpB;IAED;;;;;;OAMG;IACH,8BAJW,MAAM,YACN,MAAM,GACJ,OAAO,CAAC,MAAM,CAAC,CAI3B;IAED;;;;;;OAMG;IACH,mCAJW,MAAM,aACN,MAAM,GACJ,OAAO,CAAC,OAAO,CAAC,CAI5B;IAED;;;;;OAKG;IACH,sCAHW,MAAM,GACJ,OAAO,CAAC,OAAO,UAAU,EAAE,eAAe,CAAC,CAIvD;IAED;;;;;;;;;OASG;IACH,wCANG;QAAwB,QAAQ,EAAxB,MAAM;QACW,gBAAgB,GAAjC,MAAM;QACW,WAAW,GAA5B,MAAM;QACW,SAAS,GAA1B,MAAM;KACd,GAAU,OAAO,CAAC,OAAO,UAAU,EAAE,eAAe,CAAC,CAIvD;IAED;;;;;;;;OAQG;IACH,uDALG;QAAyB,OAAO,GAAxB,MAAM;QACU,QAAQ,EAAxB,MAAM;QACU,QAAQ,EAAxB,MAAM;KACd,GAAU,MAAM,CAIlB;IAED;;;OAGG;IACH,gDAHW,wBAAwB,GAAG,uBAAuB,GACjD,YAAY,IAAI,wBAAwB,CAInD;IAED;;;OAGG;IACH,+CAHW,wBAAwB,GAAG,uBAAuB,GACjD,YAAY,IAAI,uBAAuB,CAIlD;IAED;;;OAGG;IACH,2DAHW,qBAAqB,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,GAAG,oBAAoB,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,GACjF,2BAA2B,IAAI,qBAAqB,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAKlF;IAED;;;OAGG;IACH,0DAHW,qBAAqB,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,GAAG,oBAAoB,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,GACjF,2BAA2B,IAAI,oBAAoB,CAAC,SAAS,CAAC,CAAC,MAAM,CAAC,CAKjF;IAED;;;OAGG;IACH,sDAHW,qBAAqB,GAAG,oBAAoB,GAC1C,qBAAqB,IAAI,qBAAqB,CAM1D;IAED;;;OAGG;IACH,qDAHW,qBAAqB,GAAG,oBAAoB,GAC1C,qBAAqB,IAAI,oBAAoB,CAMzD;CAEF;;;;;;;;;oCAOU,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;6BAjJrB,OAAO,yBAAyB,EAAE,qBAAqB;4BACvD,OAAO,yBAAyB,EAAE,oBAAoB;gCACtD,OAAO,yBAAyB,EAAE,wBAAwB;+BAC1D,OAAO,yBAAyB,EAAE,uBAAuB"}