zwave-js 14.3.3 → 14.3.4
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/build/cjs/lib/_version.d.ts +1 -1
- package/build/cjs/lib/_version.js +1 -1
- package/build/cjs/lib/_version.js.map +1 -1
- package/build/cjs/lib/controller/Controller.js +66 -60
- package/build/cjs/lib/controller/Controller.js.map +1 -1
- package/build/cjs/lib/controller/ControllerStatistics.js +4 -0
- package/build/cjs/lib/controller/ControllerStatistics.js.map +1 -1
- package/build/cjs/lib/controller/FirmwareUpdateService.js +8 -0
- package/build/cjs/lib/controller/FirmwareUpdateService.js.map +1 -1
- package/build/cjs/lib/controller/MockControllerBehaviors.js +3 -0
- package/build/cjs/lib/controller/MockControllerBehaviors.js.map +1 -1
- package/build/cjs/lib/controller/NVMIO.js +7 -0
- package/build/cjs/lib/controller/NVMIO.js.map +1 -1
- package/build/cjs/lib/controller/NodeInformationFrame.js +2 -0
- package/build/cjs/lib/controller/NodeInformationFrame.js.map +1 -1
- package/build/cjs/lib/controller/ZWaveSDKVersions.js +3 -0
- package/build/cjs/lib/controller/ZWaveSDKVersions.js.map +1 -1
- package/build/cjs/lib/controller/utils.js +4 -0
- package/build/cjs/lib/controller/utils.js.map +1 -1
- package/build/cjs/lib/driver/Bootloader.js +4 -0
- package/build/cjs/lib/driver/Bootloader.js.map +1 -1
- package/build/cjs/lib/driver/Driver.js +63 -56
- package/build/cjs/lib/driver/Driver.js.map +1 -1
- package/build/cjs/lib/driver/DriverMock.js +6 -3
- package/build/cjs/lib/driver/DriverMock.js.map +1 -1
- package/build/cjs/lib/driver/MessageGenerators.js +26 -18
- package/build/cjs/lib/driver/MessageGenerators.js.map +1 -1
- package/build/cjs/lib/driver/NetworkCache.js +43 -23
- package/build/cjs/lib/driver/NetworkCache.js.map +1 -1
- package/build/cjs/lib/driver/Queue.js +6 -2
- package/build/cjs/lib/driver/Queue.js.map +1 -1
- package/build/cjs/lib/driver/SerialAPICommandMachine.js +45 -40
- package/build/cjs/lib/driver/SerialAPICommandMachine.js.map +1 -1
- package/build/cjs/lib/driver/StateMachineShared.js +5 -0
- package/build/cjs/lib/driver/StateMachineShared.js.map +1 -1
- package/build/cjs/lib/driver/Statistics.js +4 -0
- package/build/cjs/lib/driver/Statistics.js.map +1 -1
- package/build/cjs/lib/driver/Task.js +9 -2
- package/build/cjs/lib/driver/Task.js.map +1 -1
- package/build/cjs/lib/driver/Transaction.js +8 -4
- package/build/cjs/lib/driver/Transaction.js.map +1 -1
- package/build/cjs/lib/driver/TransportServiceMachine.js +9 -7
- package/build/cjs/lib/driver/TransportServiceMachine.js.map +1 -1
- package/build/cjs/lib/driver/UpdateConfig.js +8 -4
- package/build/cjs/lib/driver/UpdateConfig.js.map +1 -1
- package/build/cjs/lib/driver/UserAgent.js +4 -0
- package/build/cjs/lib/driver/UserAgent.js.map +1 -1
- package/build/cjs/lib/driver/mDNSDiscovery.js +2 -0
- package/build/cjs/lib/driver/mDNSDiscovery.js.map +1 -1
- package/build/cjs/lib/log/Driver.js +6 -2
- package/build/cjs/lib/log/Driver.js.map +1 -1
- package/build/cjs/lib/log/Zniffer.js +6 -2
- package/build/cjs/lib/log/Zniffer.js.map +1 -1
- package/build/cjs/lib/node/DeviceClass.js +4 -0
- package/build/cjs/lib/node/DeviceClass.js.map +1 -1
- package/build/cjs/lib/node/Endpoint.js +9 -5
- package/build/cjs/lib/node/Endpoint.js.map +1 -1
- package/build/cjs/lib/node/HealthCheck.js +6 -0
- package/build/cjs/lib/node/HealthCheck.js.map +1 -1
- package/build/cjs/lib/node/MockNodeBehaviors.js +2 -0
- package/build/cjs/lib/node/MockNodeBehaviors.js.map +1 -1
- package/build/cjs/lib/node/MultiCCAPIWrapper.js +10 -8
- package/build/cjs/lib/node/MultiCCAPIWrapper.js.map +1 -1
- package/build/cjs/lib/node/Node.js +51 -46
- package/build/cjs/lib/node/Node.js.map +1 -1
- package/build/cjs/lib/node/NodeReadyMachine.js +3 -1
- package/build/cjs/lib/node/NodeReadyMachine.js.map +1 -1
- package/build/cjs/lib/node/NodeStatistics.js +5 -0
- package/build/cjs/lib/node/NodeStatistics.js.map +1 -1
- package/build/cjs/lib/node/NodeStatusMachine.js +5 -2
- package/build/cjs/lib/node/NodeStatusMachine.js.map +1 -1
- package/build/cjs/lib/node/VirtualEndpoint.js +8 -4
- package/build/cjs/lib/node/VirtualEndpoint.js.map +1 -1
- package/build/cjs/lib/node/VirtualNode.js +7 -2
- package/build/cjs/lib/node/VirtualNode.js.map +1 -1
- package/build/cjs/lib/node/mixins/00_Base.js +4 -0
- package/build/cjs/lib/node/mixins/00_Base.js.map +1 -1
- package/build/cjs/lib/node/mixins/01_NetworkRole.js +4 -0
- package/build/cjs/lib/node/mixins/01_NetworkRole.js.map +1 -1
- package/build/cjs/lib/node/mixins/05_Security.js +7 -3
- package/build/cjs/lib/node/mixins/05_Security.js.map +1 -1
- package/build/cjs/lib/node/mixins/10_Events.js +4 -0
- package/build/cjs/lib/node/mixins/10_Events.js.map +1 -1
- package/build/cjs/lib/node/mixins/20_Status.js +4 -0
- package/build/cjs/lib/node/mixins/20_Status.js.map +1 -1
- package/build/cjs/lib/node/mixins/30_Wakeup.js +4 -0
- package/build/cjs/lib/node/mixins/30_Wakeup.js.map +1 -1
- package/build/cjs/lib/node/mixins/40_Values.js +4 -0
- package/build/cjs/lib/node/mixins/40_Values.js.map +1 -1
- package/build/cjs/lib/node/mixins/50_Endpoints.js +4 -0
- package/build/cjs/lib/node/mixins/50_Endpoints.js.map +1 -1
- package/build/cjs/lib/node/mixins/60_ScheduledPoll.js +4 -0
- package/build/cjs/lib/node/mixins/60_ScheduledPoll.js.map +1 -1
- package/build/cjs/lib/node/mixins/70_FirmwareUpdate.js +8 -3
- package/build/cjs/lib/node/mixins/70_FirmwareUpdate.js.map +1 -1
- package/build/cjs/lib/node/mixins/index.js +4 -0
- package/build/cjs/lib/node/mixins/index.js.map +1 -1
- package/build/cjs/lib/node/mockCCBehaviors/ColorSwitch.js +2 -1
- package/build/cjs/lib/node/mockCCBehaviors/ColorSwitch.js.map +1 -1
- package/build/cjs/lib/node/mockCCBehaviors/Configuration.js +2 -1
- package/build/cjs/lib/node/mockCCBehaviors/Configuration.js.map +1 -1
- package/build/cjs/lib/node/mockCCBehaviors/ScheduleEntryLock.js +2 -1
- package/build/cjs/lib/node/mockCCBehaviors/ScheduleEntryLock.js.map +1 -1
- package/build/cjs/lib/node/mockCCBehaviors/ThermostatSetpoint.js +3 -2
- package/build/cjs/lib/node/mockCCBehaviors/ThermostatSetpoint.js.map +1 -1
- package/build/cjs/lib/node/mockCCBehaviors/UserCode.js +3 -2
- package/build/cjs/lib/node/mockCCBehaviors/UserCode.js.map +1 -1
- package/build/cjs/lib/node/utils.js +22 -2
- package/build/cjs/lib/node/utils.js.map +1 -1
- package/build/cjs/lib/telemetry/deviceConfig.js +2 -0
- package/build/cjs/lib/telemetry/deviceConfig.js.map +1 -1
- package/build/cjs/lib/telemetry/statistics.js +3 -0
- package/build/cjs/lib/telemetry/statistics.js.map +1 -1
- package/build/cjs/lib/zniffer/MPDU.js +57 -0
- package/build/cjs/lib/zniffer/MPDU.js.map +1 -1
- package/build/cjs/lib/zniffer/Zniffer.js +10 -3
- package/build/cjs/lib/zniffer/Zniffer.js.map +1 -1
- package/build/cjs/mockServer.js +14 -0
- package/build/cjs/mockServer.js.map +1 -1
- package/build/esm/lib/_version.d.ts +1 -1
- package/build/esm/lib/_version.js +1 -1
- package/package.json +12 -12
|
@@ -3,6 +3,7 @@ var __defProp = Object.defineProperty;
|
|
|
3
3
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
4
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
5
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
6
7
|
var __export = (target, all) => {
|
|
7
8
|
for (var name in all)
|
|
8
9
|
__defProp(target, name, { get: all[name], enumerable: true });
|
|
@@ -23,6 +24,9 @@ __export(ControllerStatistics_exports, {
|
|
|
23
24
|
module.exports = __toCommonJS(ControllerStatistics_exports);
|
|
24
25
|
var import_Statistics = require("../driver/Statistics.js");
|
|
25
26
|
class ControllerStatisticsHost extends import_Statistics.StatisticsHost {
|
|
27
|
+
static {
|
|
28
|
+
__name(this, "ControllerStatisticsHost");
|
|
29
|
+
}
|
|
26
30
|
createEmpty() {
|
|
27
31
|
return {
|
|
28
32
|
messagesTX: 0,
|
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/lib/controller/ControllerStatistics.ts"],
|
|
4
4
|
"sourcesContent": ["import { StatisticsHost } from \"../driver/Statistics.js\";\n\nexport class ControllerStatisticsHost\n\textends StatisticsHost<ControllerStatistics>\n{\n\tcreateEmpty(): ControllerStatistics {\n\t\treturn {\n\t\t\tmessagesTX: 0,\n\t\t\tmessagesRX: 0,\n\t\t\tmessagesDroppedRX: 0,\n\t\t\tNAK: 0,\n\t\t\tCAN: 0,\n\t\t\ttimeoutACK: 0,\n\t\t\ttimeoutResponse: 0,\n\t\t\ttimeoutCallback: 0,\n\t\t\tmessagesDroppedTX: 0,\n\t\t};\n\t}\n}\n\n/** Statistics about the communication with the controller stick since the last reset or driver startup */\nexport interface ControllerStatistics {\n\t/** No. of messages successfully sent to the controller */\n\tmessagesTX: number;\n\t/** No. of messages received by the controller */\n\tmessagesRX: number;\n\t/** No. of messages from the controller that were dropped by the host */\n\tmessagesDroppedRX: number;\n\t/** No. of messages that the controller did not accept */\n\tNAK: number;\n\t/** No. of collisions while sending a message to the controller */\n\tCAN: number;\n\t/** No. of transmission attempts where an ACK was missing from the controller */\n\ttimeoutACK: number;\n\t/** No. of transmission attempts where the controller response did not come in time */\n\ttimeoutResponse: number;\n\t/** No. of transmission attempts where the controller callback did not come in time */\n\ttimeoutCallback: number;\n\t/** No. of outgoing messages that were dropped because they could not be sent */\n\tmessagesDroppedTX: number;\n\n\t/**\n\t * Background RSSI of the network in dBm. These values are typically between -100 and -30, but can be even smaller (down to -128 dBm) in quiet environments.\n\t *\n\t * The `average` values are calculated using an exponential moving average.\n\t * The `current` values are the most recent measurements, which can be compared to the average to detect interference/jamming.\n\t * The `timestamp` is the time of the most recent update of these measurements, and can be used to draw graphs.\n\t */\n\tbackgroundRSSI?: {\n\t\ttimestamp: number;\n\t\tchannel0: {\n\t\t\taverage: number;\n\t\t\tcurrent: number;\n\t\t};\n\t\tchannel1: {\n\t\t\taverage: number;\n\t\t\tcurrent: number;\n\t\t};\n\t\tchannel2?: {\n\t\t\taverage: number;\n\t\t\tcurrent: number;\n\t\t};\n\t\tchannel3?: {\n\t\t\taverage: number;\n\t\t\tcurrent: number;\n\t\t};\n\t};\n}\n"],
|
|
5
|
-
"mappings": "
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;AAAA;;;;;AAAA,wBAA+B;AAEzB,MAAO,iCACJ,iCAAoC;EAH7C,OAG6C;;;EAE5C,cAAW;AACV,WAAO;MACN,YAAY;MACZ,YAAY;MACZ,mBAAmB;MACnB,KAAK;MACL,KAAK;MACL,YAAY;MACZ,iBAAiB;MACjB,iBAAiB;MACjB,mBAAmB;;EAErB;;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -5,6 +5,7 @@ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
|
5
5
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
6
6
|
var __getProtoOf = Object.getPrototypeOf;
|
|
7
7
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
8
9
|
var __export = (target, all) => {
|
|
9
10
|
for (var name in all)
|
|
10
11
|
__defProp(target, name, { get: all[name], enumerable: true });
|
|
@@ -37,6 +38,7 @@ var import_shared = require("@zwave-js/shared");
|
|
|
37
38
|
function serviceURL() {
|
|
38
39
|
return process.env.ZWAVEJS_FW_SERVICE_URL || "https://firmware.zwave-js.io";
|
|
39
40
|
}
|
|
41
|
+
__name(serviceURL, "serviceURL");
|
|
40
42
|
const DOWNLOAD_TIMEOUT = 6e4;
|
|
41
43
|
const MAX_CACHE_SECONDS = 60 * 60 * 24;
|
|
42
44
|
const CLEAN_CACHE_INTERVAL_MS = 60 * 60 * 1e3;
|
|
@@ -58,6 +60,7 @@ function cleanCache() {
|
|
|
58
60
|
cleanCacheTimeout = setTimeout(cleanCache, CLEAN_CACHE_INTERVAL_MS).unref();
|
|
59
61
|
}
|
|
60
62
|
}
|
|
63
|
+
__name(cleanCache, "cleanCache");
|
|
61
64
|
async function cachedGot(config) {
|
|
62
65
|
const hash = import_shared.Bytes.view(await (0, import_core.digest)("sha-256", import_shared.Bytes.from(JSON.stringify(config.json)))).toString("hex");
|
|
63
66
|
const cacheKey = `${config.method}:${config.url.toString()}:${hash}`;
|
|
@@ -100,9 +103,11 @@ async function cachedGot(config) {
|
|
|
100
103
|
}
|
|
101
104
|
return responseJson;
|
|
102
105
|
}
|
|
106
|
+
__name(cachedGot, "cachedGot");
|
|
103
107
|
function hasExtension(pathname) {
|
|
104
108
|
return /\.[a-z0-9_]+$/i.test(pathname);
|
|
105
109
|
}
|
|
110
|
+
__name(hasExtension, "hasExtension");
|
|
106
111
|
function rfRegionToUpdateServiceRegion(rfRegion) {
|
|
107
112
|
switch (rfRegion) {
|
|
108
113
|
case import_core.RFRegion["Default (EU)"]:
|
|
@@ -129,6 +134,7 @@ function rfRegionToUpdateServiceRegion(rfRegion) {
|
|
|
129
134
|
return "korea";
|
|
130
135
|
}
|
|
131
136
|
}
|
|
137
|
+
__name(rfRegionToUpdateServiceRegion, "rfRegionToUpdateServiceRegion");
|
|
132
138
|
async function getAvailableFirmwareUpdates(deviceId, options) {
|
|
133
139
|
const headers = {
|
|
134
140
|
"User-Agent": options.userAgent,
|
|
@@ -172,6 +178,7 @@ async function getAvailableFirmwareUpdates(deviceId, options) {
|
|
|
172
178
|
channel: update.channel ?? "stable"
|
|
173
179
|
}));
|
|
174
180
|
}
|
|
181
|
+
__name(getAvailableFirmwareUpdates, "getAvailableFirmwareUpdates");
|
|
175
182
|
async function downloadFirmwareUpdate(file) {
|
|
176
183
|
const [hashAlgorithm, expectedHash] = file.integrity.split(":", 2);
|
|
177
184
|
if (hashAlgorithm !== "sha256") {
|
|
@@ -210,6 +217,7 @@ async function downloadFirmwareUpdate(file) {
|
|
|
210
217
|
firmwareTarget: file.target
|
|
211
218
|
};
|
|
212
219
|
}
|
|
220
|
+
__name(downloadFirmwareUpdate, "downloadFirmwareUpdate");
|
|
213
221
|
// Annotate the CommonJS export names for ESM import in node:
|
|
214
222
|
0 && (module.exports = {
|
|
215
223
|
downloadFirmwareUpdate,
|
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/lib/controller/FirmwareUpdateService.ts"],
|
|
4
4
|
"sourcesContent": ["import {\n\ttype Firmware,\n\tRFRegion,\n\tZWaveError,\n\tZWaveErrorCodes,\n\tdigest,\n\textractFirmwareAsync,\n\tguessFirmwareFileFormat,\n} from \"@zwave-js/core\";\nimport { Bytes, formatId } from \"@zwave-js/shared\";\nimport type { Headers, OptionsOfTextResponseBody } from \"got\";\nimport type PQueue from \"p-queue\";\nimport type {\n\tFirmwareUpdateDeviceID,\n\tFirmwareUpdateFileInfo,\n\tFirmwareUpdateInfo,\n\tFirmwareUpdateServiceResponse,\n} from \"./_Types.js\";\n\nfunction serviceURL(): string {\n\treturn process.env.ZWAVEJS_FW_SERVICE_URL || \"https://firmware.zwave-js.io\";\n}\nconst DOWNLOAD_TIMEOUT = 60000;\n// const MAX_FIRMWARE_SIZE = 10 * 1024 * 1024; // 10MB should be enough for any conceivable Z-Wave chip\n\nconst MAX_CACHE_SECONDS = 60 * 60 * 24; // Cache for a day at max\nconst CLEAN_CACHE_INTERVAL_MS = 60 * 60 * 1000; // Remove stale entries from the cache every hour\n\nconst requestCache = new Map<string, CachedRequest<unknown>>();\ninterface CachedRequest<T> {\n\tresponse: T;\n\tstaleDate: number;\n}\n\n// Queue requests to the firmware update service. Only allow few parallel requests so we can make some use of the cache.\nlet requestQueue: PQueue | undefined;\n\nlet cleanCacheTimeout: NodeJS.Timeout | undefined;\nfunction cleanCache() {\n\tif (cleanCacheTimeout) {\n\t\tclearTimeout(cleanCacheTimeout);\n\t\tcleanCacheTimeout = undefined;\n\t}\n\n\tconst now = Date.now();\n\tfor (const [key, cached] of requestCache) {\n\t\tif (cached.staleDate < now) {\n\t\t\trequestCache.delete(key);\n\t\t}\n\t}\n\n\tif (requestCache.size > 0) {\n\t\tcleanCacheTimeout = setTimeout(\n\t\t\tcleanCache,\n\t\t\tCLEAN_CACHE_INTERVAL_MS,\n\t\t).unref();\n\t}\n}\n\nasync function cachedGot<T>(config: OptionsOfTextResponseBody): Promise<T> {\n\t// Replaces got's built-in cache functionality because it uses Keyv internally\n\t// which apparently has some issues: https://github.com/zwave-js/node-zwave-js/issues/5404\n\n\tconst hash = Bytes.view(\n\t\tawait digest(\n\t\t\t\"sha-256\",\n\t\t\tBytes.from(JSON.stringify(config.json)),\n\t\t),\n\t).toString(\"hex\");\n\tconst cacheKey = `${config.method}:${config.url!.toString()}:${hash}`;\n\n\t// Return cached requests if they are not stale yet\n\tif (requestCache.has(cacheKey)) {\n\t\tconst cached = requestCache.get(cacheKey)!;\n\t\tif (cached.staleDate > Date.now()) {\n\t\t\treturn cached.response as T;\n\t\t}\n\t}\n\n\tconst { got } = await import(\"got\");\n\tconst response = await got(config);\n\tconst responseJson = JSON.parse(response.body) as T;\n\n\t// Check if we can cache the response\n\tif (response.statusCode === 200 && response.headers[\"cache-control\"]) {\n\t\tconst cacheControl = response.headers[\"cache-control\"];\n\n\t\tlet maxAge: number | undefined;\n\t\tconst maxAgeMatch = cacheControl.match(/max-age=(\\d+)/);\n\t\tif (maxAgeMatch) {\n\t\t\tmaxAge = Math.max(0, parseInt(maxAgeMatch[1], 10));\n\t\t}\n\n\t\tif (maxAge) {\n\t\t\tlet currentAge: number;\n\t\t\tif (response.headers.age) {\n\t\t\t\tcurrentAge = parseInt(response.headers.age, 10);\n\t\t\t} else if (response.headers.date) {\n\t\t\t\tcurrentAge = (Date.now() - Date.parse(response.headers.date))\n\t\t\t\t\t/ 1000;\n\t\t\t} else {\n\t\t\t\tcurrentAge = 0;\n\t\t\t}\n\t\t\tcurrentAge = Math.max(0, currentAge);\n\n\t\t\tif (maxAge > currentAge) {\n\t\t\t\trequestCache.set(cacheKey, {\n\t\t\t\t\tresponse: responseJson,\n\t\t\t\t\tstaleDate: Date.now()\n\t\t\t\t\t\t+ Math.min(MAX_CACHE_SECONDS, maxAge - currentAge)\n\t\t\t\t\t\t\t* 1000,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\n\t// Regularly clean the cache\n\tif (!cleanCacheTimeout) {\n\t\tcleanCacheTimeout = setTimeout(\n\t\t\tcleanCache,\n\t\t\tCLEAN_CACHE_INTERVAL_MS,\n\t\t).unref();\n\t}\n\n\treturn responseJson;\n}\n\nfunction hasExtension(pathname: string): boolean {\n\treturn /\\.[a-z0-9_]+$/i.test(pathname);\n}\n\nexport interface GetAvailableFirmwareUpdateOptions {\n\tuserAgent: string;\n\tapiKey?: string;\n\tincludePrereleases?: boolean;\n}\n\n/** Converts the RF region to a format the update service understands */\nfunction rfRegionToUpdateServiceRegion(\n\trfRegion?: RFRegion,\n): string | undefined {\n\tswitch (rfRegion) {\n\t\tcase RFRegion[\"Default (EU)\"]:\n\t\tcase RFRegion.Europe:\n\t\t\treturn \"europe\";\n\t\tcase RFRegion.USA:\n\t\tcase RFRegion[\"USA (Long Range)\"]:\n\t\t\treturn \"usa\";\n\t\tcase RFRegion[\"Australia/New Zealand\"]:\n\t\t\treturn \"australia/new zealand\";\n\t\tcase RFRegion[\"Hong Kong\"]:\n\t\t\treturn \"hong kong\";\n\t\tcase RFRegion.India:\n\t\t\treturn \"india\";\n\t\tcase RFRegion.Israel:\n\t\t\treturn \"israel\";\n\t\tcase RFRegion.Russia:\n\t\t\treturn \"russia\";\n\t\tcase RFRegion.China:\n\t\t\treturn \"china\";\n\t\tcase RFRegion.Japan:\n\t\t\treturn \"japan\";\n\t\tcase RFRegion.Korea:\n\t\t\treturn \"korea\";\n\t}\n}\n\n/**\n * Retrieves the available firmware updates for the node with the given fingerprint.\n * Returns the service response or `undefined` in case of an error.\n */\nexport async function getAvailableFirmwareUpdates(\n\tdeviceId: FirmwareUpdateDeviceID,\n\toptions: GetAvailableFirmwareUpdateOptions,\n): Promise<FirmwareUpdateInfo[]> {\n\tconst headers: Headers = {\n\t\t\"User-Agent\": options.userAgent,\n\t\t\"Content-Type\": \"application/json\",\n\t};\n\tif (options.apiKey) {\n\t\theaders[\"X-API-Key\"] = options.apiKey;\n\t}\n\n\tconst body: Record<string, string> = {\n\t\tmanufacturerId: formatId(deviceId.manufacturerId),\n\t\tproductType: formatId(deviceId.productType),\n\t\tproductId: formatId(deviceId.productId),\n\t\tfirmwareVersion: deviceId.firmwareVersion,\n\t};\n\tconst rfRegion = rfRegionToUpdateServiceRegion(deviceId.rfRegion);\n\tif (rfRegion) {\n\t\tbody.region = rfRegion;\n\t}\n\n\t// Prereleases and/or RF region-specific updates are only available in v3\n\tconst apiVersion = options.includePrereleases || !!rfRegion ? \"v3\" : \"v1\";\n\n\tconst config: OptionsOfTextResponseBody = {\n\t\tmethod: \"POST\",\n\t\turl: `${serviceURL()}/api/${apiVersion}/updates`,\n\t\tjson: body,\n\t\t// Consider re-enabling this instead of using cachedGot()\n\t\t// At the moment, the built-in caching has some issues though, so we stick\n\t\t// with our own implementation\n\t\t// cache: requestCache,\n\t\t// cacheOptions: {\n\t\t// \tshared: false,\n\t\t// },\n\t\theaders,\n\t};\n\n\tif (!requestQueue) {\n\t\t// I just love ESM\n\t\tconst PQueue = (await import(\"p-queue\")).default;\n\t\trequestQueue = new PQueue({ concurrency: 2 });\n\t}\n\t// Weird types...\n\tconst result = (\n\t\tawait requestQueue.add(() => cachedGot(config))\n\t) as FirmwareUpdateServiceResponse[];\n\n\t// Remember the device ID in the response, so we can use it later\n\t// to ensure the update is for the correct device\n\treturn result.map((update) => ({\n\t\tdevice: deviceId,\n\t\t...update,\n\t\tchannel: update.channel ?? \"stable\",\n\t}));\n}\n\nexport async function downloadFirmwareUpdate(\n\tfile: FirmwareUpdateFileInfo,\n): Promise<Firmware> {\n\tconst [hashAlgorithm, expectedHash] = file.integrity.split(\":\", 2);\n\n\tif (hashAlgorithm !== \"sha256\") {\n\t\tthrow new ZWaveError(\n\t\t\t`Unsupported hash algorithm ${hashAlgorithm} for integrity check`,\n\t\t\tZWaveErrorCodes.Argument_Invalid,\n\t\t);\n\t}\n\t// TODO: Make request abort-able (requires AbortController, Node 14.17+ / Node 16)\n\n\t// Download the firmware file\n\tconst { got } = await import(\"got\");\n\tconst downloadResponse = await got.get(file.url, {\n\t\ttimeout: { request: DOWNLOAD_TIMEOUT },\n\t\tresponseType: \"buffer\",\n\t\t// TODO: figure out how to do maxContentLength: MAX_FIRMWARE_SIZE,\n\t});\n\n\tconst rawData = downloadResponse.body;\n\n\tconst requestedPathname = new URL(file.url).pathname;\n\t// The response may be redirected, so the filename information may be different\n\t// from the requested URL\n\tlet actualPathname: string | undefined;\n\ttry {\n\t\tactualPathname = new URL(downloadResponse.url).pathname;\n\t} catch {\n\t\t// ignore\n\t}\n\n\t// Infer the file type from the content-disposition header or the filename\n\tlet filename: string;\n\tif (\n\t\tdownloadResponse.headers[\"content-disposition\"]?.startsWith(\n\t\t\t\"attachment; filename=\",\n\t\t)\n\t) {\n\t\tfilename = downloadResponse.headers[\"content-disposition\"]\n\t\t\t.split(\"filename=\")[1]\n\t\t\t.replace(/^\"/, \"\")\n\t\t\t.replace(/[\";]$/, \"\");\n\t} else if (actualPathname && hasExtension(actualPathname)) {\n\t\tfilename = actualPathname;\n\t} else {\n\t\tfilename = requestedPathname;\n\t}\n\n\t// Extract the raw data\n\tconst format = guessFirmwareFileFormat(filename, rawData);\n\tconst firmware = await extractFirmwareAsync(rawData, format);\n\n\t// Ensure the hash matches\n\tconst actualHash = Bytes.view(\n\t\tawait digest(\"sha-256\", firmware.data),\n\t).toString(\"hex\");\n\n\tif (actualHash !== expectedHash) {\n\t\tthrow new ZWaveError(\n\t\t\t`Integrity check failed. Expected hash ${expectedHash}, got ${actualHash}`,\n\t\t\tZWaveErrorCodes.FWUpdateService_IntegrityCheckFailed,\n\t\t);\n\t}\n\n\treturn {\n\t\tdata: firmware.data,\n\t\t// Don't trust the guessed firmware target, use the one from the provided info\n\t\tfirmwareTarget: file.target,\n\t};\n}\n"],
|
|
5
|
-
"mappings": "
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -3,6 +3,7 @@ var __defProp = Object.defineProperty;
|
|
|
3
3
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
4
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
5
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
6
7
|
var __export = (target, all) => {
|
|
7
8
|
for (var name in all)
|
|
8
9
|
__defProp(target, name, { get: all[name], enumerable: true });
|
|
@@ -82,6 +83,7 @@ function createLazySendDataPayload(controller, node, msg) {
|
|
|
82
83
|
}
|
|
83
84
|
};
|
|
84
85
|
}
|
|
86
|
+
__name(createLazySendDataPayload, "createLazySendDataPayload");
|
|
85
87
|
const respondToGetControllerId = {
|
|
86
88
|
async onHostMessage(controller, msg) {
|
|
87
89
|
if (msg instanceof import_serialapi8.GetControllerIdRequest) {
|
|
@@ -597,6 +599,7 @@ function createDefaultBehaviors() {
|
|
|
597
599
|
forwardUnsolicitedNIF
|
|
598
600
|
];
|
|
599
601
|
}
|
|
602
|
+
__name(createDefaultBehaviors, "createDefaultBehaviors");
|
|
600
603
|
// Annotate the CommonJS export names for ESM import in node:
|
|
601
604
|
0 && (module.exports = {
|
|
602
605
|
createDefaultBehaviors
|
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/lib/controller/MockControllerBehaviors.ts"],
|
|
4
4
|
"sourcesContent": ["import { CommandClass, WakeUpTime } from \"@zwave-js/cc\";\nimport {\n\tZWaveProtocolCC,\n\tZWaveProtocolCCAssignSUCReturnRoute,\n\tZWaveProtocolCCNodeInformationFrame,\n\tZWaveProtocolCCRequestNodeInformationFrame,\n} from \"@zwave-js/cc/ZWaveProtocolCC\";\nimport {\n\tNodeType,\n\tTransmitOptions,\n\tTransmitStatus,\n\tZWaveDataRate,\n\tZWaveErrorCodes,\n\tisZWaveError,\n} from \"@zwave-js/core\";\nimport {\n\tApplicationCommandRequest,\n\tSendDataBridgeRequest,\n\tSendDataBridgeRequestTransmitReport,\n\tSendDataBridgeResponse,\n\ttype SendDataMessage,\n\tSendDataMulticastBridgeRequest,\n\tSendDataMulticastBridgeRequestTransmitReport,\n\tSendDataMulticastBridgeResponse,\n} from \"@zwave-js/serial/serialapi\";\nimport {\n\ttype ApplicationUpdateRequest,\n\tApplicationUpdateRequestNodeInfoReceived,\n\tApplicationUpdateRequestNodeInfoRequestFailed,\n} from \"@zwave-js/serial/serialapi\";\nimport {\n\tSerialAPIStartedRequest,\n\tSerialAPIWakeUpReason,\n} from \"@zwave-js/serial/serialapi\";\nimport {\n\tGetControllerCapabilitiesRequest,\n\tGetControllerCapabilitiesResponse,\n} from \"@zwave-js/serial/serialapi\";\nimport {\n\tGetControllerVersionRequest,\n\tGetControllerVersionResponse,\n} from \"@zwave-js/serial/serialapi\";\nimport {\n\tGetSerialApiCapabilitiesRequest,\n\tGetSerialApiCapabilitiesResponse,\n} from \"@zwave-js/serial/serialapi\";\nimport {\n\tGetSerialApiInitDataRequest,\n\tGetSerialApiInitDataResponse,\n} from \"@zwave-js/serial/serialapi\";\nimport {\n\tGetControllerIdRequest,\n\tGetControllerIdResponse,\n} from \"@zwave-js/serial/serialapi\";\nimport { SoftResetRequest } from \"@zwave-js/serial/serialapi\";\nimport {\n\tAddNodeStatus,\n\tAddNodeToNetworkRequest,\n\tAddNodeToNetworkRequestStatusReport,\n\tAddNodeType,\n} from \"@zwave-js/serial/serialapi\";\nimport {\n\tAssignSUCReturnRouteRequest,\n\tAssignSUCReturnRouteRequestTransmitReport,\n\tAssignSUCReturnRouteResponse,\n} from \"@zwave-js/serial/serialapi\";\nimport {\n\tGetNodeProtocolInfoRequest,\n\tGetNodeProtocolInfoResponse,\n} from \"@zwave-js/serial/serialapi\";\nimport {\n\tGetSUCNodeIdRequest,\n\tGetSUCNodeIdResponse,\n} from \"@zwave-js/serial/serialapi\";\nimport {\n\tRemoveNodeFromNetworkRequest,\n\tRemoveNodeFromNetworkRequestStatusReport,\n\tRemoveNodeStatus,\n\tRemoveNodeType,\n} from \"@zwave-js/serial/serialapi\";\nimport {\n\tRequestNodeInfoRequest,\n\tRequestNodeInfoResponse,\n} from \"@zwave-js/serial/serialapi\";\nimport {\n\tSendDataMulticastRequest,\n\tSendDataMulticastRequestTransmitReport,\n\tSendDataMulticastResponse,\n\tSendDataRequest,\n\tSendDataRequestTransmitReport,\n\tSendDataResponse,\n} from \"@zwave-js/serial/serialapi\";\nimport {\n\tMOCK_FRAME_ACK_TIMEOUT,\n\ttype MockController,\n\ttype MockControllerBehavior,\n\ttype MockNode,\n\tMockZWaveFrameType,\n\tcreateMockZWaveRequestFrame,\n} from \"@zwave-js/testing\";\nimport {\n\tMockControllerCommunicationState,\n\tMockControllerInclusionState,\n\tMockControllerStateKeys,\n} from \"./MockControllerState.js\";\nimport { determineNIF } from \"./NodeInformationFrame.js\";\n\nfunction createLazySendDataPayload(\n\tcontroller: MockController,\n\tnode: MockNode,\n\tmsg: SendDataMessage,\n): () => Promise<CommandClass> {\n\treturn async () => {\n\t\ttry {\n\t\t\tconst cmd = await CommandClass.parseAsync(msg.serializedCC!, {\n\t\t\t\tsourceNodeId: controller.ownNodeId,\n\t\t\t\t__internalIsMockNode: true,\n\t\t\t\t...node.encodingContext,\n\t\t\t\t...node.securityManagers,\n\t\t\t\t// The frame type is always singlecast because the controller sends it to the node\n\t\t\t\tframeType: \"singlecast\",\n\t\t\t});\n\t\t\t// Store the command because assertReceivedHostMessage needs it\n\t\t\t// @ts-expect-error\n\t\t\tmsg.command = cmd;\n\t\t\treturn cmd;\n\t\t} catch (e) {\n\t\t\tif (isZWaveError(e)) {\n\t\t\t\tif (e.code === ZWaveErrorCodes.CC_NotImplemented) {\n\t\t\t\t\t// The whole CC is not implemented yet. If this happens in tests, it is because we sent a raw CC.\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst cmd = new CommandClass({\n\t\t\t\t\t\t\tnodeId: controller.ownNodeId,\n\t\t\t\t\t\t\tccId: msg.payload[0],\n\t\t\t\t\t\t\tccCommand: msg.payload[1],\n\t\t\t\t\t\t\tpayload: msg.payload.subarray(2),\n\t\t\t\t\t\t});\n\t\t\t\t\t\t// Store the command because assertReceivedHostMessage needs it\n\t\t\t\t\t\t// @ts-expect-error\n\t\t\t\t\t\tmsg.command = cmd;\n\t\t\t\t\t\treturn cmd;\n\t\t\t\t\t} catch (e: any) {\n\t\t\t\t\t\tconsole.error(e.message);\n\t\t\t\t\t\tthrow e;\n\t\t\t\t\t}\n\t\t\t\t} else if (\n\t\t\t\t\te.code === ZWaveErrorCodes.Deserialization_NotImplemented\n\t\t\t\t) {\n\t\t\t\t\t// We want to know when we're using a command in tests that cannot be decoded yet\n\t\t\t\t\tconsole.error(e.message);\n\t\t\t\t\tthrow e;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconsole.error(e);\n\t\t\tthrow e;\n\t\t}\n\t};\n}\n\nconst respondToGetControllerId: MockControllerBehavior = {\n\tasync onHostMessage(controller, msg) {\n\t\tif (msg instanceof GetControllerIdRequest) {\n\t\t\tconst ret = new GetControllerIdResponse({\n\t\t\t\thomeId: controller.homeId,\n\t\t\t\townNodeId: controller.ownNodeId,\n\t\t\t});\n\t\t\tawait controller.sendMessageToHost(ret);\n\t\t\treturn true;\n\t\t}\n\t},\n};\n\nconst respondToGetSerialApiCapabilities: MockControllerBehavior = {\n\tasync onHostMessage(controller, msg) {\n\t\tif (msg instanceof GetSerialApiCapabilitiesRequest) {\n\t\t\tconst ret = new GetSerialApiCapabilitiesResponse({\n\t\t\t\t...controller.capabilities,\n\t\t\t});\n\t\t\tawait controller.sendMessageToHost(ret);\n\t\t\treturn true;\n\t\t}\n\t},\n};\n\nconst respondToGetControllerVersion: MockControllerBehavior = {\n\tasync onHostMessage(controller, msg) {\n\t\tif (msg instanceof GetControllerVersionRequest) {\n\t\t\tconst ret = new GetControllerVersionResponse({\n\t\t\t\t...controller.capabilities,\n\t\t\t});\n\t\t\tawait controller.sendMessageToHost(ret);\n\t\t\treturn true;\n\t\t}\n\t},\n};\n\nconst respondToGetControllerCapabilities: MockControllerBehavior = {\n\tasync onHostMessage(controller, msg) {\n\t\tif (msg instanceof GetControllerCapabilitiesRequest) {\n\t\t\tconst ret = new GetControllerCapabilitiesResponse({\n\t\t\t\t...controller.capabilities,\n\t\t\t});\n\t\t\tawait controller.sendMessageToHost(ret);\n\t\t\treturn true;\n\t\t}\n\t},\n};\n\nconst respondToGetSUCNodeId: MockControllerBehavior = {\n\tasync onHostMessage(controller, msg) {\n\t\tif (msg instanceof GetSUCNodeIdRequest) {\n\t\t\tconst sucNodeId = controller.capabilities.isStaticUpdateController\n\t\t\t\t? controller.ownNodeId\n\t\t\t\t: controller.capabilities.sucNodeId;\n\t\t\tconst ret = new GetSUCNodeIdResponse({\n\t\t\t\tsucNodeId,\n\t\t\t});\n\t\t\tawait controller.sendMessageToHost(ret);\n\t\t\treturn true;\n\t\t}\n\t},\n};\n\nconst respondToGetSerialApiInitData: MockControllerBehavior = {\n\tasync onHostMessage(controller, msg) {\n\t\tif (msg instanceof GetSerialApiInitDataRequest) {\n\t\t\tconst nodeIds = new Set(controller.nodes.keys());\n\t\t\tnodeIds.add(controller.ownNodeId);\n\n\t\t\tconst ret = new GetSerialApiInitDataResponse({\n\t\t\t\tzwaveApiVersion: controller.capabilities.zwaveApiVersion,\n\t\t\t\tisPrimary: !controller.capabilities.isSecondary,\n\t\t\t\tnodeType: NodeType.Controller,\n\t\t\t\tsupportsTimers: controller.capabilities.supportsTimers,\n\t\t\t\tisSIS: controller.capabilities.isSISPresent\n\t\t\t\t\t&& controller.capabilities.isStaticUpdateController,\n\t\t\t\tnodeIds: [...nodeIds],\n\t\t\t\tzwaveChipType: controller.capabilities.zwaveChipType,\n\t\t\t});\n\t\t\tawait controller.sendMessageToHost(ret);\n\t\t\treturn true;\n\t\t}\n\t},\n};\n\nconst respondToSoftReset: MockControllerBehavior = {\n\tonHostMessage(controller, msg) {\n\t\tif (msg instanceof SoftResetRequest) {\n\t\t\tconst ret = new SerialAPIStartedRequest({\n\t\t\t\twakeUpReason: SerialAPIWakeUpReason.SoftwareReset,\n\t\t\t\twatchdogEnabled: controller.capabilities.watchdogEnabled,\n\t\t\t\tisListening: true,\n\t\t\t\t...determineNIF(),\n\t\t\t\tsupportsLongRange: controller.capabilities.supportsLongRange,\n\t\t\t});\n\t\t\tsetImmediate(async () => {\n\t\t\t\tawait controller.sendMessageToHost(ret);\n\t\t\t});\n\t\t\treturn true;\n\t\t}\n\t},\n};\n\nconst respondToGetNodeProtocolInfo: MockControllerBehavior = {\n\tasync onHostMessage(controller, msg) {\n\t\tif (msg instanceof GetNodeProtocolInfoRequest) {\n\t\t\tif (msg.requestedNodeId === controller.ownNodeId) {\n\t\t\t\tconst ret = new GetNodeProtocolInfoResponse({\n\t\t\t\t\t...determineNIF(),\n\t\t\t\t\tnodeType: NodeType.Controller,\n\t\t\t\t\tisListening: true,\n\t\t\t\t\tisFrequentListening: false,\n\t\t\t\t\tisRouting: true,\n\t\t\t\t\tsupportsSecurity: false,\n\t\t\t\t\tsupportsBeaming: true,\n\t\t\t\t\tsupportedDataRates: [9600, 40000, 100000],\n\t\t\t\t\toptionalFunctionality: true,\n\t\t\t\t\tprotocolVersion: 3,\n\t\t\t\t});\n\t\t\t\tawait controller.sendMessageToHost(ret);\n\t\t\t\treturn true;\n\t\t\t} else if (controller.nodes.has(msg.requestedNodeId)) {\n\t\t\t\tconst nodeCaps = controller.nodes.get(\n\t\t\t\t\tmsg.requestedNodeId,\n\t\t\t\t)!.capabilities;\n\t\t\t\tconst ret = new GetNodeProtocolInfoResponse({\n\t\t\t\t\t...nodeCaps,\n\t\t\t\t});\n\t\t\t\tawait controller.sendMessageToHost(ret);\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t},\n};\n\nconst handleSendData: MockControllerBehavior = {\n\tasync onHostMessage(controller, msg) {\n\t\tif (msg instanceof SendDataRequest) {\n\t\t\t// Check if this command is legal right now\n\t\t\tconst state = controller.state.get(\n\t\t\t\tMockControllerStateKeys.CommunicationState,\n\t\t\t) as MockControllerCommunicationState | undefined;\n\t\t\tif (\n\t\t\t\tstate != undefined\n\t\t\t\t&& state !== MockControllerCommunicationState.Idle\n\t\t\t) {\n\t\t\t\tthrow new Error(\"Received SendDataRequest while not idle\");\n\t\t\t}\n\n\t\t\t// Put the controller into sending state\n\t\t\tcontroller.state.set(\n\t\t\t\tMockControllerStateKeys.CommunicationState,\n\t\t\t\tMockControllerCommunicationState.Sending,\n\t\t\t);\n\n\t\t\t// Notify the host that the message was sent\n\t\t\tconst res = new SendDataResponse({\n\t\t\t\twasSent: true,\n\t\t\t});\n\t\t\tawait controller.sendMessageToHost(res);\n\n\t\t\t// We deferred parsing of the CC because it requires the node's host to do so.\n\t\t\t// Now we can do that. Also set the CC node ID to the controller's own node ID,\n\t\t\t// so CC knows it came from the controller's node ID.\n\t\t\tconst node = controller.nodes.get(msg.getNodeId()!)!;\n\t\t\t// Create a lazy frame, so it can be deserialized on the node after a short delay to simulate radio transmission\n\t\t\tconst lazyPayload = createLazySendDataPayload(\n\t\t\t\tcontroller,\n\t\t\t\tnode,\n\t\t\t\tmsg,\n\t\t\t);\n\t\t\tconst lazyFrame = createMockZWaveRequestFrame(lazyPayload, {\n\t\t\t\tackRequested: !!(msg.transmitOptions & TransmitOptions.ACK),\n\t\t\t});\n\t\t\tconst ackPromise = controller.sendToNode(node, lazyFrame);\n\n\t\t\tif (msg.callbackId !== 0) {\n\t\t\t\t// Put the controller into waiting state\n\t\t\t\tcontroller.state.set(\n\t\t\t\t\tMockControllerStateKeys.CommunicationState,\n\t\t\t\t\tMockControllerCommunicationState.WaitingForNode,\n\t\t\t\t);\n\n\t\t\t\t// Wait for the ACK and notify the host\n\t\t\t\tlet ack = false;\n\t\t\t\ttry {\n\t\t\t\t\tconst ackResult = await ackPromise;\n\t\t\t\t\tack = !!ackResult?.ack;\n\t\t\t\t} catch (e) {\n\t\t\t\t\t// We want to know when we're using a command in tests that cannot be decoded yet\n\t\t\t\t\tif (\n\t\t\t\t\t\tisZWaveError(e)\n\t\t\t\t\t\t&& e.code\n\t\t\t\t\t\t\t=== ZWaveErrorCodes.Deserialization_NotImplemented\n\t\t\t\t\t) {\n\t\t\t\t\t\tconsole.error(e.message);\n\t\t\t\t\t\tthrow e;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Treat all other errors as no response\n\t\t\t\t}\n\t\t\t\tcontroller.state.set(\n\t\t\t\t\tMockControllerStateKeys.CommunicationState,\n\t\t\t\t\tMockControllerCommunicationState.Idle,\n\t\t\t\t);\n\n\t\t\t\tconst cb = new SendDataRequestTransmitReport({\n\t\t\t\t\tcallbackId: msg.callbackId,\n\t\t\t\t\ttransmitStatus: ack\n\t\t\t\t\t\t? TransmitStatus.OK\n\t\t\t\t\t\t: TransmitStatus.NoAck,\n\t\t\t\t});\n\n\t\t\t\tawait controller.sendMessageToHost(cb);\n\t\t\t} else {\n\t\t\t\t// No callback was requested, we're done\n\t\t\t\tcontroller.state.set(\n\t\t\t\t\tMockControllerStateKeys.CommunicationState,\n\t\t\t\t\tMockControllerCommunicationState.Idle,\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\t},\n};\n\nconst handleSendDataMulticast: MockControllerBehavior = {\n\tasync onHostMessage(controller, msg) {\n\t\tif (msg instanceof SendDataMulticastRequest) {\n\t\t\t// Check if this command is legal right now\n\t\t\tconst state = controller.state.get(\n\t\t\t\tMockControllerStateKeys.CommunicationState,\n\t\t\t) as MockControllerCommunicationState | undefined;\n\t\t\tif (\n\t\t\t\tstate != undefined\n\t\t\t\t&& state !== MockControllerCommunicationState.Idle\n\t\t\t) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t\"Received SendDataMulticastRequest while not idle\",\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// Put the controller into sending state\n\t\t\tcontroller.state.set(\n\t\t\t\tMockControllerStateKeys.CommunicationState,\n\t\t\t\tMockControllerCommunicationState.Sending,\n\t\t\t);\n\n\t\t\t// Notify the host that the message was sent\n\t\t\tconst res = new SendDataMulticastResponse({\n\t\t\t\twasSent: true,\n\t\t\t});\n\t\t\tawait controller.sendMessageToHost(res);\n\n\t\t\t// We deferred parsing of the CC because it requires the node's host to do so.\n\t\t\t// Now we can do that. Also set the CC node ID to the controller's own node ID,\n\t\t\t// so CC knows it came from the controller's node ID.\n\t\t\tconst nodeIds = msg.nodeIds;\n\n\t\t\tconst ackPromises = nodeIds.map((nodeId) => {\n\t\t\t\tconst node = controller.nodes.get(nodeId)!;\n\t\t\t\t// Create a lazy frame, so it can be deserialized on the node after a short delay to simulate radio transmission\n\t\t\t\tconst lazyPayload = createLazySendDataPayload(\n\t\t\t\t\tcontroller,\n\t\t\t\t\tnode,\n\t\t\t\t\tmsg,\n\t\t\t\t);\n\t\t\t\tconst lazyFrame = createMockZWaveRequestFrame(lazyPayload, {\n\t\t\t\t\tackRequested: !!(msg.transmitOptions & TransmitOptions.ACK),\n\t\t\t\t});\n\t\t\t\tconst ackPromise = controller.sendToNode(node, lazyFrame);\n\t\t\t\treturn ackPromise;\n\t\t\t});\n\n\t\t\tif (msg.callbackId !== 0) {\n\t\t\t\t// Put the controller into waiting state\n\t\t\t\tcontroller.state.set(\n\t\t\t\t\tMockControllerStateKeys.CommunicationState,\n\t\t\t\t\tMockControllerCommunicationState.WaitingForNode,\n\t\t\t\t);\n\n\t\t\t\t// Wait for the ACKs and notify the host\n\t\t\t\tlet ack = false;\n\t\t\t\ttry {\n\t\t\t\t\tconst ackResults = await Promise.all(ackPromises);\n\t\t\t\t\tack = ackResults.every((result) => !!result?.ack);\n\t\t\t\t} catch (e) {\n\t\t\t\t\t// We want to know when we're using a command in tests that cannot be decoded yet\n\t\t\t\t\tif (\n\t\t\t\t\t\tisZWaveError(e)\n\t\t\t\t\t\t&& e.code\n\t\t\t\t\t\t\t=== ZWaveErrorCodes.Deserialization_NotImplemented\n\t\t\t\t\t) {\n\t\t\t\t\t\tconsole.error(e.message);\n\t\t\t\t\t\tthrow e;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Treat all other errors as no response\n\t\t\t\t}\n\t\t\t\tcontroller.state.set(\n\t\t\t\t\tMockControllerStateKeys.CommunicationState,\n\t\t\t\t\tMockControllerCommunicationState.Idle,\n\t\t\t\t);\n\n\t\t\t\tconst cb = new SendDataMulticastRequestTransmitReport({\n\t\t\t\t\tcallbackId: msg.callbackId,\n\t\t\t\t\ttransmitStatus: ack\n\t\t\t\t\t\t? TransmitStatus.OK\n\t\t\t\t\t\t: TransmitStatus.NoAck,\n\t\t\t\t});\n\n\t\t\t\tawait controller.sendMessageToHost(cb);\n\t\t\t} else {\n\t\t\t\t// No callback was requested, we're done\n\t\t\t\tcontroller.state.set(\n\t\t\t\t\tMockControllerStateKeys.CommunicationState,\n\t\t\t\t\tMockControllerCommunicationState.Idle,\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\t},\n};\n\nconst handleSendDataBridge: MockControllerBehavior = {\n\tasync onHostMessage(controller, msg) {\n\t\tif (msg instanceof SendDataBridgeRequest) {\n\t\t\t// Check if this command is legal right now\n\t\t\tconst state = controller.state.get(\n\t\t\t\tMockControllerStateKeys.CommunicationState,\n\t\t\t) as MockControllerCommunicationState | undefined;\n\t\t\tif (\n\t\t\t\tstate != undefined\n\t\t\t\t&& state !== MockControllerCommunicationState.Idle\n\t\t\t) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t\"Received SendDataBridgeRequest while not idle\",\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// Put the controller into sending state\n\t\t\tcontroller.state.set(\n\t\t\t\tMockControllerStateKeys.CommunicationState,\n\t\t\t\tMockControllerCommunicationState.Sending,\n\t\t\t);\n\n\t\t\t// Notify the host that the message was sent\n\t\t\tconst res = new SendDataBridgeResponse({\n\t\t\t\twasSent: true,\n\t\t\t});\n\t\t\tawait controller.sendMessageToHost(res);\n\n\t\t\t// We deferred parsing of the CC because it requires the node's host to do so.\n\t\t\t// Now we can do that. Also set the CC node ID to the controller's own node ID,\n\t\t\t// so CC knows it came from the controller's node ID.\n\t\t\tconst node = controller.nodes.get(msg.getNodeId()!)!;\n\t\t\t// Create a lazy frame, so it can be deserialized on the node after a short delay to simulate radio transmission\n\t\t\tconst lazyPayload = createLazySendDataPayload(\n\t\t\t\tcontroller,\n\t\t\t\tnode,\n\t\t\t\tmsg,\n\t\t\t);\n\t\t\tconst lazyFrame = createMockZWaveRequestFrame(lazyPayload, {\n\t\t\t\tackRequested: !!(msg.transmitOptions & TransmitOptions.ACK),\n\t\t\t});\n\t\t\tconst ackPromise = controller.sendToNode(node, lazyFrame);\n\n\t\t\tif (msg.callbackId !== 0) {\n\t\t\t\t// Put the controller into waiting state\n\t\t\t\tcontroller.state.set(\n\t\t\t\t\tMockControllerStateKeys.CommunicationState,\n\t\t\t\t\tMockControllerCommunicationState.WaitingForNode,\n\t\t\t\t);\n\n\t\t\t\t// Wait for the ACK and notify the host\n\t\t\t\tlet ack = false;\n\t\t\t\ttry {\n\t\t\t\t\tconst ackResult = await ackPromise;\n\t\t\t\t\tack = !!ackResult?.ack;\n\t\t\t\t} catch (e) {\n\t\t\t\t\t// We want to know when we're using a command in tests that cannot be decoded yet\n\t\t\t\t\tif (\n\t\t\t\t\t\tisZWaveError(e)\n\t\t\t\t\t\t&& e.code\n\t\t\t\t\t\t\t=== ZWaveErrorCodes.Deserialization_NotImplemented\n\t\t\t\t\t) {\n\t\t\t\t\t\tconsole.error(e.message);\n\t\t\t\t\t\tthrow e;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Treat all other errors as no response\n\t\t\t\t}\n\t\t\t\tcontroller.state.set(\n\t\t\t\t\tMockControllerStateKeys.CommunicationState,\n\t\t\t\t\tMockControllerCommunicationState.Idle,\n\t\t\t\t);\n\n\t\t\t\tconst cb = new SendDataBridgeRequestTransmitReport({\n\t\t\t\t\tcallbackId: msg.callbackId,\n\t\t\t\t\ttransmitStatus: ack\n\t\t\t\t\t\t? TransmitStatus.OK\n\t\t\t\t\t\t: TransmitStatus.NoAck,\n\t\t\t\t});\n\n\t\t\t\tawait controller.sendMessageToHost(cb);\n\t\t\t} else {\n\t\t\t\t// No callback was requested, we're done\n\t\t\t\tcontroller.state.set(\n\t\t\t\t\tMockControllerStateKeys.CommunicationState,\n\t\t\t\t\tMockControllerCommunicationState.Idle,\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\t},\n};\n\nconst handleSendDataMulticastBridge: MockControllerBehavior = {\n\tasync onHostMessage(controller, msg) {\n\t\tif (msg instanceof SendDataMulticastBridgeRequest) {\n\t\t\t// Check if this command is legal right now\n\t\t\tconst state = controller.state.get(\n\t\t\t\tMockControllerStateKeys.CommunicationState,\n\t\t\t) as MockControllerCommunicationState | undefined;\n\t\t\tif (\n\t\t\t\tstate != undefined\n\t\t\t\t&& state !== MockControllerCommunicationState.Idle\n\t\t\t) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t\"Received SendDataMulticastBridgeRequest while not idle\",\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// Put the controller into sending state\n\t\t\tcontroller.state.set(\n\t\t\t\tMockControllerStateKeys.CommunicationState,\n\t\t\t\tMockControllerCommunicationState.Sending,\n\t\t\t);\n\n\t\t\t// Notify the host that the message was sent\n\t\t\tconst res = new SendDataMulticastBridgeResponse({\n\t\t\t\twasSent: true,\n\t\t\t});\n\t\t\tawait controller.sendMessageToHost(res);\n\n\t\t\t// We deferred parsing of the CC because it requires the node's host to do so.\n\t\t\t// Now we can do that. Also set the CC node ID to the controller's own node ID,\n\t\t\t// so CC knows it came from the controller's node ID.\n\t\t\tconst nodeIds = msg.nodeIds;\n\n\t\t\tconst ackPromises = nodeIds.map((nodeId) => {\n\t\t\t\tconst node = controller.nodes.get(nodeId)!;\n\t\t\t\t// Create a lazy frame, so it can be deserialized on the node after a short delay to simulate radio transmission\n\t\t\t\tconst lazyPayload = createLazySendDataPayload(\n\t\t\t\t\tcontroller,\n\t\t\t\t\tnode,\n\t\t\t\t\tmsg,\n\t\t\t\t);\n\t\t\t\tconst lazyFrame = createMockZWaveRequestFrame(lazyPayload, {\n\t\t\t\t\tackRequested: !!(msg.transmitOptions & TransmitOptions.ACK),\n\t\t\t\t});\n\t\t\t\tconst ackPromise = controller.sendToNode(node, lazyFrame);\n\t\t\t\treturn ackPromise;\n\t\t\t});\n\n\t\t\tif (msg.callbackId !== 0) {\n\t\t\t\t// Put the controller into waiting state\n\t\t\t\tcontroller.state.set(\n\t\t\t\t\tMockControllerStateKeys.CommunicationState,\n\t\t\t\t\tMockControllerCommunicationState.WaitingForNode,\n\t\t\t\t);\n\n\t\t\t\t// Wait for the ACKs and notify the host\n\t\t\t\tlet ack = false;\n\t\t\t\ttry {\n\t\t\t\t\tconst ackResults = await Promise.all(ackPromises);\n\t\t\t\t\tack = ackResults.every((result) => !!result?.ack);\n\t\t\t\t} catch (e) {\n\t\t\t\t\t// We want to know when we're using a command in tests that cannot be decoded yet\n\t\t\t\t\tif (\n\t\t\t\t\t\tisZWaveError(e)\n\t\t\t\t\t\t&& e.code\n\t\t\t\t\t\t\t=== ZWaveErrorCodes.Deserialization_NotImplemented\n\t\t\t\t\t) {\n\t\t\t\t\t\tconsole.error(e.message);\n\t\t\t\t\t\tthrow e;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Treat all other errors as no response\n\t\t\t\t}\n\t\t\t\tcontroller.state.set(\n\t\t\t\t\tMockControllerStateKeys.CommunicationState,\n\t\t\t\t\tMockControllerCommunicationState.Idle,\n\t\t\t\t);\n\n\t\t\t\tconst cb = new SendDataMulticastBridgeRequestTransmitReport({\n\t\t\t\t\tcallbackId: msg.callbackId,\n\t\t\t\t\ttransmitStatus: ack\n\t\t\t\t\t\t? TransmitStatus.OK\n\t\t\t\t\t\t: TransmitStatus.NoAck,\n\t\t\t\t});\n\n\t\t\t\tawait controller.sendMessageToHost(cb);\n\t\t\t} else {\n\t\t\t\t// No callback was requested, we're done\n\t\t\t\tcontroller.state.set(\n\t\t\t\t\tMockControllerStateKeys.CommunicationState,\n\t\t\t\t\tMockControllerCommunicationState.Idle,\n\t\t\t\t);\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\t},\n};\n\nconst handleRequestNodeInfo: MockControllerBehavior = {\n\tasync onHostMessage(controller, msg) {\n\t\tif (msg instanceof RequestNodeInfoRequest) {\n\t\t\t// Check if this command is legal right now\n\t\t\tconst state = controller.state.get(\n\t\t\t\tMockControllerStateKeys.CommunicationState,\n\t\t\t) as MockControllerCommunicationState | undefined;\n\t\t\tif (\n\t\t\t\tstate != undefined\n\t\t\t\t&& state !== MockControllerCommunicationState.Idle\n\t\t\t) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t\"Received RequestNodeInfoRequest while not idle\",\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// Put the controller into sending state\n\t\t\tcontroller.state.set(\n\t\t\t\tMockControllerStateKeys.CommunicationState,\n\t\t\t\tMockControllerCommunicationState.Sending,\n\t\t\t);\n\n\t\t\t// Send the data to the node\n\t\t\tconst node = controller.nodes.get(msg.getNodeId()!)!;\n\t\t\tconst command = new ZWaveProtocolCCRequestNodeInformationFrame({\n\t\t\t\tnodeId: controller.ownNodeId,\n\t\t\t});\n\t\t\tconst frame = createMockZWaveRequestFrame(command, {\n\t\t\t\tackRequested: false,\n\t\t\t});\n\t\t\tvoid controller.sendToNode(node, frame);\n\t\t\tconst nodeInfoPromise = controller.expectNodeCC(\n\t\t\t\tnode,\n\t\t\t\tMOCK_FRAME_ACK_TIMEOUT,\n\t\t\t\t(cc) => cc instanceof ZWaveProtocolCCNodeInformationFrame,\n\t\t\t);\n\n\t\t\t// Notify the host that the message was sent\n\t\t\tconst res = new RequestNodeInfoResponse({\n\t\t\t\twasSent: true,\n\t\t\t});\n\t\t\tawait controller.sendMessageToHost(res);\n\n\t\t\t// Put the controller into waiting state\n\t\t\tcontroller.state.set(\n\t\t\t\tMockControllerStateKeys.CommunicationState,\n\t\t\t\tMockControllerCommunicationState.WaitingForNode,\n\t\t\t);\n\n\t\t\t// Wait for node information and notify the host\n\t\t\tlet cb: ApplicationUpdateRequest;\n\t\t\ttry {\n\t\t\t\tconst nodeInfo = await nodeInfoPromise;\n\t\t\t\tcb = new ApplicationUpdateRequestNodeInfoReceived({\n\t\t\t\t\tnodeInformation: {\n\t\t\t\t\t\t...nodeInfo,\n\t\t\t\t\t\tnodeId: nodeInfo.nodeId as number,\n\t\t\t\t\t},\n\t\t\t\t});\n\t\t\t} catch {\n\t\t\t\tcb = new ApplicationUpdateRequestNodeInfoRequestFailed();\n\t\t\t}\n\t\t\tcontroller.state.set(\n\t\t\t\tMockControllerStateKeys.CommunicationState,\n\t\t\t\tMockControllerCommunicationState.Idle,\n\t\t\t);\n\n\t\t\tawait controller.sendMessageToHost(cb);\n\t\t\treturn true;\n\t\t}\n\t},\n};\n\nconst handleAssignSUCReturnRoute: MockControllerBehavior = {\n\tasync onHostMessage(controller, msg) {\n\t\tif (msg instanceof AssignSUCReturnRouteRequest) {\n\t\t\t// Check if this command is legal right now\n\t\t\tconst state = controller.state.get(\n\t\t\t\tMockControllerStateKeys.CommunicationState,\n\t\t\t) as MockControllerCommunicationState | undefined;\n\t\t\tif (\n\t\t\t\tstate != undefined\n\t\t\t\t&& state !== MockControllerCommunicationState.Idle\n\t\t\t) {\n\t\t\t\tthrow new Error(\n\t\t\t\t\t\"Received AssignSUCReturnRouteRequest while not idle\",\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// Put the controller into sending state\n\t\t\tcontroller.state.set(\n\t\t\t\tMockControllerStateKeys.CommunicationState,\n\t\t\t\tMockControllerCommunicationState.Sending,\n\t\t\t);\n\n\t\t\tconst expectCallback = msg.callbackId !== 0;\n\n\t\t\t// Send the command to the node\n\t\t\tconst node = controller.nodes.get(msg.getNodeId()!)!;\n\t\t\tconst command = new ZWaveProtocolCCAssignSUCReturnRoute({\n\t\t\t\tnodeId: node.id,\n\t\t\t\tdestinationNodeId: controller.ownNodeId,\n\t\t\t\trepeaters: [], // don't care\n\t\t\t\trouteIndex: 0, // don't care\n\t\t\t\tdestinationSpeed: ZWaveDataRate[\"100k\"],\n\t\t\t\tdestinationWakeUp: WakeUpTime.None,\n\t\t\t});\n\t\t\tconst frame = createMockZWaveRequestFrame(command, {\n\t\t\t\tackRequested: expectCallback,\n\t\t\t});\n\t\t\tconst ackPromise = controller.sendToNode(node, frame);\n\n\t\t\t// Notify the host that the message was sent\n\t\t\tconst res = new AssignSUCReturnRouteResponse({\n\t\t\t\twasExecuted: true,\n\t\t\t});\n\t\t\tawait controller.sendMessageToHost(res);\n\n\t\t\tlet ack = false;\n\t\t\tif (expectCallback) {\n\t\t\t\t// Put the controller into waiting state\n\t\t\t\tcontroller.state.set(\n\t\t\t\t\tMockControllerStateKeys.CommunicationState,\n\t\t\t\t\tMockControllerCommunicationState.WaitingForNode,\n\t\t\t\t);\n\n\t\t\t\t// Wait for the ACK and notify the host\n\t\t\t\ttry {\n\t\t\t\t\tconst ackResult = await ackPromise;\n\t\t\t\t\tack = !!ackResult?.ack;\n\t\t\t\t} catch {\n\t\t\t\t\t// No response\n\t\t\t\t}\n\t\t\t}\n\t\t\tcontroller.state.set(\n\t\t\t\tMockControllerStateKeys.CommunicationState,\n\t\t\t\tMockControllerCommunicationState.Idle,\n\t\t\t);\n\n\t\t\tif (expectCallback) {\n\t\t\t\tconst cb = new AssignSUCReturnRouteRequestTransmitReport({\n\t\t\t\t\tcallbackId: msg.callbackId,\n\t\t\t\t\ttransmitStatus: ack\n\t\t\t\t\t\t? TransmitStatus.OK\n\t\t\t\t\t\t: TransmitStatus.NoAck,\n\t\t\t\t});\n\n\t\t\t\tawait controller.sendMessageToHost(cb);\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\t},\n};\n\nconst handleAddNode: MockControllerBehavior = {\n\tasync onHostMessage(controller, msg) {\n\t\tif (msg instanceof AddNodeToNetworkRequest) {\n\t\t\t// Check if this command is legal right now\n\t\t\tconst state = controller.state.get(\n\t\t\t\tMockControllerStateKeys.InclusionState,\n\t\t\t) as MockControllerInclusionState | undefined;\n\n\t\t\tconst expectCallback = msg.callbackId !== 0;\n\t\t\tlet cb: AddNodeToNetworkRequestStatusReport | undefined;\n\t\t\tif (\n\t\t\t\tstate === MockControllerInclusionState.AddingNode\n\t\t\t) {\n\t\t\t\t// While adding, only accept stop commands\n\t\t\t\tif (msg.addNodeType === AddNodeType.Stop) {\n\t\t\t\t\tcontroller.state.set(\n\t\t\t\t\t\tMockControllerStateKeys.InclusionState,\n\t\t\t\t\t\tMockControllerInclusionState.Idle,\n\t\t\t\t\t);\n\t\t\t\t\tcb = new AddNodeToNetworkRequestStatusReport({\n\t\t\t\t\t\tcallbackId: msg.callbackId,\n\t\t\t\t\t\tstatus: AddNodeStatus.Failed,\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tcb = new AddNodeToNetworkRequestStatusReport({\n\t\t\t\t\t\tcallbackId: msg.callbackId,\n\t\t\t\t\t\tstatus: AddNodeStatus.Failed,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t} else if (state === MockControllerInclusionState.RemovingNode) {\n\t\t\t\t// Cannot start adding nodes while removing one\n\t\t\t\tcb = new AddNodeToNetworkRequestStatusReport({\n\t\t\t\t\tcallbackId: msg.callbackId,\n\t\t\t\t\tstatus: AddNodeStatus.Failed,\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\t// Idle\n\n\t\t\t\t// Set the controller into \"adding node\" state\n\t\t\t\t// For now we don't actually do anything in that state\n\t\t\t\tcontroller.state.set(\n\t\t\t\t\tMockControllerStateKeys.InclusionState,\n\t\t\t\t\tMockControllerInclusionState.AddingNode,\n\t\t\t\t);\n\n\t\t\t\tcb = new AddNodeToNetworkRequestStatusReport({\n\t\t\t\t\tcallbackId: msg.callbackId,\n\t\t\t\t\tstatus: AddNodeStatus.Ready,\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (expectCallback && cb) {\n\t\t\t\tawait controller.sendMessageToHost(cb);\n\t\t\t}\n\n\t\t\treturn true;\n\t\t}\n\t},\n};\n\nconst handleRemoveNode: MockControllerBehavior = {\n\tasync onHostMessage(controller, msg) {\n\t\tif (msg instanceof RemoveNodeFromNetworkRequest) {\n\t\t\t// Check if this command is legal right now\n\t\t\tconst state = controller.state.get(\n\t\t\t\tMockControllerStateKeys.InclusionState,\n\t\t\t) as MockControllerInclusionState | undefined;\n\n\t\t\tconst expectCallback = msg.callbackId !== 0;\n\t\t\tlet cb: RemoveNodeFromNetworkRequestStatusReport | undefined;\n\t\t\tif (\n\t\t\t\tstate === MockControllerInclusionState.RemovingNode\n\t\t\t) {\n\t\t\t\t// While removing, only accept stop commands\n\t\t\t\tif (msg.removeNodeType === RemoveNodeType.Stop) {\n\t\t\t\t\tcontroller.state.set(\n\t\t\t\t\t\tMockControllerStateKeys.InclusionState,\n\t\t\t\t\t\tMockControllerInclusionState.Idle,\n\t\t\t\t\t);\n\t\t\t\t\tcb = new RemoveNodeFromNetworkRequestStatusReport({\n\t\t\t\t\t\tcallbackId: msg.callbackId,\n\t\t\t\t\t\tstatus: RemoveNodeStatus.Failed,\n\t\t\t\t\t});\n\t\t\t\t} else {\n\t\t\t\t\tcb = new RemoveNodeFromNetworkRequestStatusReport({\n\t\t\t\t\t\tcallbackId: msg.callbackId,\n\t\t\t\t\t\tstatus: RemoveNodeStatus.Failed,\n\t\t\t\t\t});\n\t\t\t\t}\n\t\t\t} else if (state === MockControllerInclusionState.AddingNode) {\n\t\t\t\t// Cannot start removing nodes while adding one\n\t\t\t\tcb = new RemoveNodeFromNetworkRequestStatusReport({\n\t\t\t\t\tcallbackId: msg.callbackId,\n\t\t\t\t\tstatus: RemoveNodeStatus.Failed,\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\t// Idle\n\n\t\t\t\t// Set the controller into \"removing node\" state\n\t\t\t\t// For now we don't actually do anything in that state\n\t\t\t\tcontroller.state.set(\n\t\t\t\t\tMockControllerStateKeys.InclusionState,\n\t\t\t\t\tMockControllerInclusionState.RemovingNode,\n\t\t\t\t);\n\n\t\t\t\tcb = new RemoveNodeFromNetworkRequestStatusReport({\n\t\t\t\t\tcallbackId: msg.callbackId,\n\t\t\t\t\tstatus: RemoveNodeStatus.Ready,\n\t\t\t\t});\n\t\t\t}\n\n\t\t\tif (expectCallback && cb) {\n\t\t\t\tawait controller.sendMessageToHost(cb);\n\t\t\t}\n\n\t\t\treturn true;\n\t\t}\n\t},\n};\n\nconst forwardCommandClassesToHost: MockControllerBehavior = {\n\tasync onNodeFrame(controller, node, frame) {\n\t\tif (\n\t\t\tframe.type === MockZWaveFrameType.Request\n\t\t\t&& frame.payload instanceof CommandClass\n\t\t\t&& !(frame.payload instanceof ZWaveProtocolCC)\n\t\t) {\n\t\t\t// This is a CC that is meant for the host application\n\t\t\tconst msg = new ApplicationCommandRequest({\n\t\t\t\tcommand: frame.payload,\n\t\t\t});\n\t\t\t// Nodes send commands TO the controller, so we need to fix the node ID before forwarding\n\t\t\tmsg.getNodeId = () => node.id;\n\t\t\t// Simulate a serialized frame being transmitted via radio before receiving it\n\t\t\tawait controller.sendMessageToHost(msg, node);\n\t\t\treturn true;\n\t\t}\n\t},\n};\n\nconst forwardUnsolicitedNIF: MockControllerBehavior = {\n\tasync onNodeFrame(controller, node, frame) {\n\t\tif (\n\t\t\tframe.type === MockZWaveFrameType.Request\n\t\t\t&& frame.payload instanceof ZWaveProtocolCCNodeInformationFrame\n\t\t) {\n\t\t\tconst updateRequest = new ApplicationUpdateRequestNodeInfoReceived({\n\t\t\t\tnodeInformation: {\n\t\t\t\t\t...frame.payload,\n\t\t\t\t\tnodeId: frame.payload.nodeId as number,\n\t\t\t\t},\n\t\t\t});\n\t\t\t// Simulate a serialized frame being transmitted via radio before receiving it\n\t\t\tawait controller.sendMessageToHost(\n\t\t\t\tupdateRequest,\n\t\t\t\tnode,\n\t\t\t);\n\t\t\treturn true;\n\t\t}\n\t},\n};\n\n/** Predefined default behaviors that are required for interacting with the driver correctly */\nexport function createDefaultBehaviors(): MockControllerBehavior[] {\n\treturn [\n\t\trespondToGetControllerId,\n\t\trespondToGetSerialApiCapabilities,\n\t\trespondToGetControllerVersion,\n\t\trespondToGetControllerCapabilities,\n\t\trespondToGetSUCNodeId,\n\t\trespondToGetSerialApiInitData,\n\t\trespondToSoftReset,\n\t\trespondToGetNodeProtocolInfo,\n\t\thandleSendData,\n\t\thandleSendDataMulticast,\n\t\thandleSendDataBridge,\n\t\thandleSendDataMulticastBridge,\n\t\thandleRequestNodeInfo,\n\t\thandleAssignSUCReturnRoute,\n\t\thandleAddNode,\n\t\thandleRemoveNode,\n\t\tforwardCommandClassesToHost,\n\t\tforwardUnsolicitedNIF,\n\t];\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["import_serialapi", "e"]
|
|
7
7
|
}
|
|
@@ -3,6 +3,7 @@ var __defProp = Object.defineProperty;
|
|
|
3
3
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
4
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
5
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
6
7
|
var __export = (target, all) => {
|
|
7
8
|
for (var name in all)
|
|
8
9
|
__defProp(target, name, { get: all[name], enumerable: true });
|
|
@@ -27,6 +28,9 @@ var import_nvmedit = require("@zwave-js/nvmedit");
|
|
|
27
28
|
var import_serial = require("@zwave-js/serial");
|
|
28
29
|
var import_serialapi = require("@zwave-js/serial/serialapi");
|
|
29
30
|
class SerialNVMIO500 {
|
|
31
|
+
static {
|
|
32
|
+
__name(this, "SerialNVMIO500");
|
|
33
|
+
}
|
|
30
34
|
constructor(controller) {
|
|
31
35
|
this._controller = controller;
|
|
32
36
|
}
|
|
@@ -96,6 +100,9 @@ class SerialNVMIO500 {
|
|
|
96
100
|
}
|
|
97
101
|
}
|
|
98
102
|
class SerialNVMIO700 {
|
|
103
|
+
static {
|
|
104
|
+
__name(this, "SerialNVMIO700");
|
|
105
|
+
}
|
|
99
106
|
constructor(controller) {
|
|
100
107
|
this._controller = controller;
|
|
101
108
|
if (controller.isFunctionSupported(import_serial.FunctionType.ExtendedNVMOperations)) {
|
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/lib/controller/NVMIO.ts"],
|
|
4
4
|
"sourcesContent": ["import { ZWaveError, ZWaveErrorCodes } from \"@zwave-js/core\";\nimport { NVMAccess, type NVMIO } from \"@zwave-js/nvmedit\";\nimport { FunctionType } from \"@zwave-js/serial\";\nimport { nvmSizeToBufferSize } from \"@zwave-js/serial/serialapi\";\nimport { type ZWaveController } from \"./Controller.js\";\n\n/** NVM IO over serial for 500 series controllers */\nexport class SerialNVMIO500 implements NVMIO {\n\tpublic constructor(controller: ZWaveController) {\n\t\tthis._controller = controller;\n\t}\n\n\tprivate _controller: ZWaveController;\n\tprivate _size: number | undefined;\n\tprivate _chunkSize: number | undefined;\n\n\tpublic async open(_access: NVMAccess): Promise<NVMAccess> {\n\t\tthis._size = nvmSizeToBufferSize(\n\t\t\t(await this._controller.getNVMId()).memorySize,\n\t\t);\n\t\tif (!this._size) {\n\t\t\tthrow new ZWaveError(\n\t\t\t\t\"Unknown NVM size - cannot backup!\",\n\t\t\t\tZWaveErrorCodes.Controller_NotSupported,\n\t\t\t);\n\t\t}\n\t\treturn NVMAccess.ReadWrite;\n\t}\n\n\tget size(): number {\n\t\tif (this._size == undefined) {\n\t\t\tthrow new ZWaveError(\n\t\t\t\t\"The NVM is not open\",\n\t\t\t\tZWaveErrorCodes.NVM_NotOpen,\n\t\t\t);\n\t\t}\n\t\treturn this._size;\n\t}\n\n\tget accessMode(): NVMAccess {\n\t\tif (this._size == undefined) {\n\t\t\treturn NVMAccess.None;\n\t\t} else {\n\t\t\treturn NVMAccess.ReadWrite;\n\t\t}\n\t}\n\n\tasync determineChunkSize(): Promise<number> {\n\t\tif (this._size == undefined) {\n\t\t\tthrow new ZWaveError(\n\t\t\t\t\"The NVM is not open\",\n\t\t\t\tZWaveErrorCodes.NVM_NotOpen,\n\t\t\t);\n\t\t}\n\n\t\tif (!this._chunkSize) {\n\t\t\t// Try reading the maximum size at first, the Serial API should return chunks in a size it supports\n\t\t\t// For some reason, there is no documentation and no official command for this\n\t\t\tconst chunk = await this._controller.externalNVMReadBuffer(\n\t\t\t\t0,\n\t\t\t\t0xffff,\n\t\t\t);\n\t\t\t// Some SDK versions return an empty buffer when trying to read a buffer that is too long\n\t\t\t// Fallback to a sane (but maybe slow) size\n\t\t\tthis._chunkSize = chunk.length || 48;\n\t\t}\n\t\treturn this._chunkSize;\n\t}\n\n\tasync read(\n\t\toffset: number,\n\t\tlength: number,\n\t): Promise<{ buffer: Uint8Array; endOfFile: boolean }> {\n\t\t// Ensure we're not reading out of bounds\n\t\tconst size = this.size;\n\t\tif (offset < 0 || offset >= size) {\n\t\t\tthrow new ZWaveError(\n\t\t\t\t\"Cannot read outside of the NVM\",\n\t\t\t\tZWaveErrorCodes.Argument_Invalid,\n\t\t\t);\n\t\t}\n\n\t\tconst chunkSize = await this.determineChunkSize();\n\t\tconst readSize = Math.min(length, chunkSize, size - offset);\n\n\t\tconst buffer = await this._controller.externalNVMReadBuffer(\n\t\t\toffset,\n\t\t\treadSize,\n\t\t);\n\t\tconst endOfFile = offset + readSize >= size;\n\t\treturn {\n\t\t\tbuffer,\n\t\t\tendOfFile,\n\t\t};\n\t}\n\n\tasync write(\n\t\toffset: number,\n\t\tdata: Uint8Array,\n\t): Promise<{ bytesWritten: number; endOfFile: boolean }> {\n\t\t// Ensure we're not writing out of bounds\n\t\tconst size = this.size;\n\t\tif (offset < 0 || offset >= size) {\n\t\t\tthrow new ZWaveError(\n\t\t\t\t\"Cannot read outside of the NVM\",\n\t\t\t\tZWaveErrorCodes.Argument_Invalid,\n\t\t\t);\n\t\t}\n\n\t\t// Write requests need 5 bytes more than read requests, which limits our chunk size\n\t\tconst chunkSize = await this.determineChunkSize() - 5;\n\t\tconst writeSize = Math.min(data.length, chunkSize, size - offset);\n\n\t\tawait this._controller.externalNVMWriteBuffer(\n\t\t\toffset,\n\t\t\tdata.subarray(0, writeSize),\n\t\t);\n\t\tconst endOfFile = offset + writeSize >= size;\n\t\treturn {\n\t\t\tbytesWritten: writeSize,\n\t\t\tendOfFile,\n\t\t};\n\t}\n\n\tclose(): Promise<void> {\n\t\t// Nothing to do really\n\t\treturn Promise.resolve();\n\t}\n}\n\n/** NVM IO over serial for 700+ series controllers */\nexport class SerialNVMIO700 implements NVMIO {\n\tpublic constructor(controller: ZWaveController) {\n\t\tthis._controller = controller;\n\t\tif (\n\t\t\tcontroller.isFunctionSupported(\n\t\t\t\tFunctionType.ExtendedNVMOperations,\n\t\t\t)\n\t\t) {\n\t\t\tthis._open = async () => {\n\t\t\t\tconst { size } = await controller.externalNVMOpenExt();\n\t\t\t\treturn size;\n\t\t\t};\n\t\t\tthis._read = (offset, length) =>\n\t\t\t\tcontroller.externalNVMReadBufferExt(offset, length);\n\t\t\tthis._write = (offset, buffer) =>\n\t\t\t\tcontroller.externalNVMWriteBufferExt(offset, buffer);\n\t\t\tthis._close = () => controller.externalNVMCloseExt();\n\t\t} else {\n\t\t\tthis._open = () => controller.externalNVMOpen();\n\t\t\tthis._read = (offset, length) =>\n\t\t\t\tcontroller.externalNVMReadBuffer700(offset, length);\n\t\t\tthis._write = (offset, buffer) =>\n\t\t\t\tcontroller.externalNVMWriteBuffer700(offset, buffer);\n\t\t\tthis._close = () => controller.externalNVMClose();\n\t\t}\n\t}\n\n\tprivate _controller: ZWaveController;\n\n\tprivate _open: () => Promise<number>;\n\tprivate _read: (\n\t\toffset: number,\n\t\tlength: number,\n\t) => Promise<{ buffer: Uint8Array; endOfFile: boolean }>;\n\tprivate _write: (\n\t\toffset: number,\n\t\tbuffer: Uint8Array,\n\t) => Promise<{ endOfFile: boolean }>;\n\tprivate _close: () => Promise<void>;\n\n\tprivate _size: number | undefined;\n\tprivate _chunkSize: number | undefined;\n\tprivate _accessMode: NVMAccess = NVMAccess.None;\n\n\tpublic async open(\n\t\taccess: NVMAccess.Read | NVMAccess.Write,\n\t): Promise<NVMAccess> {\n\t\tthis._size = await this._open();\n\t\t// We only support reading or writing, not both\n\t\tthis._accessMode = access;\n\t\treturn access;\n\t}\n\n\tget size(): number {\n\t\tif (this._size == undefined) {\n\t\t\tthrow new ZWaveError(\n\t\t\t\t\"The NVM is not open\",\n\t\t\t\tZWaveErrorCodes.NVM_NotOpen,\n\t\t\t);\n\t\t}\n\t\treturn this._size;\n\t}\n\n\tget accessMode(): NVMAccess {\n\t\treturn this._accessMode;\n\t}\n\n\tasync determineChunkSize(): Promise<number> {\n\t\tif (!this._chunkSize) {\n\t\t\t// The write requests have the same size as the read response - if this yields no\n\t\t\t// data, default to a sane (but maybe slow) size\n\t\t\tthis._chunkSize = (await this._read(0, 0xff)).buffer.length || 48;\n\t\t}\n\n\t\treturn this._chunkSize;\n\t}\n\n\tasync read(\n\t\toffset: number,\n\t\tlength: number,\n\t): Promise<{ buffer: Uint8Array; endOfFile: boolean }> {\n\t\t// Ensure we're not reading out of bounds\n\t\tconst size = this.size;\n\t\tif (offset < 0 || offset >= size) {\n\t\t\tthrow new ZWaveError(\n\t\t\t\t\"Cannot read outside of the NVM\",\n\t\t\t\tZWaveErrorCodes.Argument_Invalid,\n\t\t\t);\n\t\t}\n\n\t\tconst chunkSize = await this.determineChunkSize();\n\n\t\treturn this._read(\n\t\t\toffset,\n\t\t\tMath.min(length, chunkSize, size - offset),\n\t\t);\n\t}\n\n\tasync write(\n\t\toffset: number,\n\t\tdata: Uint8Array,\n\t): Promise<{ bytesWritten: number; endOfFile: boolean }> {\n\t\t// Ensure we're not writing out of bounds\n\t\tconst size = this.size;\n\t\tif (offset < 0 || offset >= size) {\n\t\t\tthrow new ZWaveError(\n\t\t\t\t\"Cannot read outside of the NVM\",\n\t\t\t\tZWaveErrorCodes.Argument_Invalid,\n\t\t\t);\n\t\t}\n\n\t\tconst chunkSize = await this.determineChunkSize();\n\t\tconst writeSize = Math.min(data.length, chunkSize, size - offset);\n\n\t\tconst { endOfFile } = await this._write(\n\t\t\toffset,\n\t\t\tdata.subarray(0, writeSize),\n\t\t);\n\t\treturn {\n\t\t\tbytesWritten: writeSize,\n\t\t\tendOfFile,\n\t\t};\n\t}\n\n\tclose(): Promise<void> {\n\t\tthis._accessMode = NVMAccess.None;\n\t\treturn this._close();\n\t}\n}\n"],
|
|
5
|
-
"mappings": "
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -3,6 +3,7 @@ var __defProp = Object.defineProperty;
|
|
|
3
3
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
4
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
5
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
6
7
|
var __export = (target, all) => {
|
|
7
8
|
for (var name in all)
|
|
8
9
|
__defProp(target, name, { get: all[name], enumerable: true });
|
|
@@ -44,6 +45,7 @@ function determineNIF() {
|
|
|
44
45
|
controlledCCs: []
|
|
45
46
|
};
|
|
46
47
|
}
|
|
48
|
+
__name(determineNIF, "determineNIF");
|
|
47
49
|
// Annotate the CommonJS export names for ESM import in node:
|
|
48
50
|
0 && (module.exports = {
|
|
49
51
|
determineNIF
|
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/lib/controller/NodeInformationFrame.ts"],
|
|
4
4
|
"sourcesContent": ["import { BasicDeviceClass, CommandClasses } from \"@zwave-js/core/safe\";\n\nexport function determineNIF(): {\n\tbasicDeviceClass: BasicDeviceClass;\n\tgenericDeviceClass: number;\n\tspecificDeviceClass: number;\n\tsupportedCCs: CommandClasses[];\n\tcontrolledCCs: CommandClasses[];\n} {\n\tconst basicDeviceClass = BasicDeviceClass[\"Static Controller\"];\n\tconst genericDeviceClass = 0x01; // Generic Controller\n\tconst specificDeviceClass = 0x00; // Not used\n\n\t// When included securely, the NIF must only contain CCs that must ALWAYS be supported\n\t// Since we have no way to change it without factory reset, just advertise the minimum.\n\treturn {\n\t\tbasicDeviceClass,\n\t\tgenericDeviceClass,\n\t\tspecificDeviceClass,\n\t\tsupportedCCs: [\n\t\t\tCommandClasses[\"Z-Wave Plus Info\"],\n\t\t\tCommandClasses.Security,\n\t\t\tCommandClasses[\"Security 2\"],\n\t\t\tCommandClasses[\"Transport Service\"],\n\t\t\tCommandClasses.Supervision,\n\t\t\tCommandClasses[\"CRC-16 Encapsulation\"],\n\t\t\tCommandClasses[\"Multi Command\"],\n\t\t\tCommandClasses[\"Inclusion Controller\"],\n\t\t],\n\t\t// CC:0000.00.00.12.004: It is NOT RECOMMENDED to advertise controlled Command Classes.\n\t\tcontrolledCCs: [],\n\t};\n}\n"],
|
|
5
|
-
"mappings": "
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;AAAA;;;;;AAAA,kBAAiD;AAE3C,SAAU,eAAY;AAO3B,QAAM,mBAAmB,6BAAiB,mBAAmB;AAC7D,QAAM,qBAAqB;AAC3B,QAAM,sBAAsB;AAI5B,SAAO;IACN;IACA;IACA;IACA,cAAc;MACb,2BAAe,kBAAkB;MACjC,2BAAe;MACf,2BAAe,YAAY;MAC3B,2BAAe,mBAAmB;MAClC,2BAAe;MACf,2BAAe,sBAAsB;MACrC,2BAAe,eAAe;MAC9B,2BAAe,sBAAsB;;;IAGtC,eAAe,CAAA;;AAEjB;AA9BgB;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -3,6 +3,7 @@ var __defProp = Object.defineProperty;
|
|
|
3
3
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
4
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
5
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
6
7
|
var __export = (target, all) => {
|
|
7
8
|
for (var name in all)
|
|
8
9
|
__defProp(target, name, { get: all[name], enumerable: true });
|
|
@@ -356,6 +357,7 @@ function semverToLegacy(version) {
|
|
|
356
357
|
const [major, minor, _patch] = version.split(".", 3);
|
|
357
358
|
return `${major}.${minor.toString().padStart(2, "0")}`;
|
|
358
359
|
}
|
|
360
|
+
__name(semverToLegacy, "semverToLegacy");
|
|
359
361
|
function protocolVersionToSDKVersion(protocolVersion) {
|
|
360
362
|
if (protocolVersion.startsWith("Z-Wave ")) {
|
|
361
363
|
protocolVersion = protocolVersion.slice(7);
|
|
@@ -367,6 +369,7 @@ function protocolVersionToSDKVersion(protocolVersion) {
|
|
|
367
369
|
}
|
|
368
370
|
return ret;
|
|
369
371
|
}
|
|
372
|
+
__name(protocolVersionToSDKVersion, "protocolVersionToSDKVersion");
|
|
370
373
|
// Annotate the CommonJS export names for ESM import in node:
|
|
371
374
|
0 && (module.exports = {
|
|
372
375
|
protocolVersionToSDKVersion
|
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/lib/controller/ZWaveSDKVersions.ts"],
|
|
4
4
|
"sourcesContent": ["// Based on INS13954-13, chapter 7\nconst versions = Object.freeze([\n\t// Z-Wave 700 uses 7.x SDK versions but also a different NVM format,\n\t// so they don't appear here. The entries below this line are for the 500 series\n\n\t// sdkVersion is formatted in a way that it is parsable by semver\n\t// protocolVersion comes from the Z-Wave SDK and must not be reformatted\n\n\t{\n\t\tsdkVersion: \"6.84.0\",\n\t\tprotocolVersion: \"6.10\",\n\t\tserialAPIVersion: \"8\",\n\t},\n\t{\n\t\tsdkVersion: \"6.82.1\",\n\t\tprotocolVersion: \"6.09\",\n\t\tserialAPIVersion: \"8\",\n\t},\n\t{\n\t\tsdkVersion: \"6.82.0\",\n\t\tprotocolVersion: \"6.08\",\n\t\tserialAPIVersion: \"8\",\n\t},\n\t{\n\t\tsdkVersion: \"6.81.6\",\n\t\tprotocolVersion: \"6.07\",\n\t\tserialAPIVersion: \"8\",\n\t},\n\t{\n\t\tsdkVersion: \"6.81.5\",\n\t\tprotocolVersion: \"6.06\",\n\t\tserialAPIVersion: \"8\",\n\t},\n\t{\n\t\tsdkVersion: \"6.81.4\",\n\t\tprotocolVersion: \"6.05\",\n\t\tserialAPIVersion: \"8\",\n\t},\n\t{\n\t\tsdkVersion: \"6.81.3\",\n\t\tprotocolVersion: \"6.04\",\n\t\tserialAPIVersion: \"8\",\n\t},\n\t{\n\t\tsdkVersion: \"6.81.2\",\n\t\tprotocolVersion: \"6.03\",\n\t\tserialAPIVersion: \"8\",\n\t},\n\t{\n\t\tsdkVersion: \"6.81.1\",\n\t\tprotocolVersion: \"6.02\",\n\t\tserialAPIVersion: \"8\",\n\t},\n\t{\n\t\tsdkVersion: \"6.81.0\",\n\t\tprotocolVersion: \"6.01\",\n\t\tserialAPIVersion: \"8\",\n\t},\n\t{\n\t\tsdkVersion: \"6.80.0-beta\",\n\t\tprotocolVersion: \"6.01\",\n\t\tserialAPIVersion: \"8\",\n\t},\n\t{\n\t\tsdkVersion: \"6.71.3\",\n\t\tprotocolVersion: \"5.03\",\n\t\tserialAPIVersion: \"7\",\n\t},\n\t{\n\t\tsdkVersion: \"6.71.2\",\n\t\tprotocolVersion: \"5.02\",\n\t\tserialAPIVersion: \"7\",\n\t},\n\t{\n\t\tsdkVersion: \"6.71.1\",\n\t\tprotocolVersion: \"4.61\",\n\t\tserialAPIVersion: \"7\",\n\t},\n\t{\n\t\tsdkVersion: \"6.71.0\",\n\t\tprotocolVersion: \"4.60\",\n\t\tserialAPIVersion: \"7\",\n\t},\n\t{\n\t\tsdkVersion: \"6.70.1-beta\",\n\t\tprotocolVersion: \"4.45\",\n\t\tserialAPIVersion: \"6\",\n\t},\n\t{\n\t\tsdkVersion: \"6.70.0-beta\",\n\t\tprotocolVersion: \"4.28\",\n\t\tserialAPIVersion: \"6\",\n\t},\n\t{\n\t\tsdkVersion: \"6.61.1\",\n\t\tprotocolVersion: \"4.62\",\n\t\tserialAPIVersion: \"6\",\n\t},\n\t{\n\t\tsdkVersion: \"6.61.0\",\n\t\tprotocolVersion: \"4.33\",\n\t\tserialAPIVersion: \"6\",\n\t},\n\t{\n\t\tsdkVersion: \"6.60.0-beta\",\n\t\tprotocolVersion: \"4.12\",\n\t\tserialAPIVersion: \"6\",\n\t},\n\t{\n\t\tsdkVersion: \"6.51.10\",\n\t\tprotocolVersion: \"4.54\",\n\t\tserialAPIVersion: \"5\",\n\t},\n\t{\n\t\tsdkVersion: \"6.51.9\",\n\t\tprotocolVersion: \"4.38\",\n\t\tserialAPIVersion: \"5\",\n\t},\n\t{\n\t\tsdkVersion: \"6.51.8\",\n\t\tprotocolVersion: \"4.34\",\n\t\tserialAPIVersion: \"5\",\n\t},\n\t{\n\t\tsdkVersion: \"6.51.7\",\n\t\tprotocolVersion: \"4.24\",\n\t\tserialAPIVersion: \"5\",\n\t},\n\t{\n\t\tsdkVersion: \"6.51.6\",\n\t\tprotocolVersion: \"4.05\",\n\t\tserialAPIVersion: \"5\",\n\t},\n\t{\n\t\tsdkVersion: \"6.51.4\",\n\t\tprotocolVersion: \"4.01\",\n\t\tserialAPIVersion: \"5\",\n\t},\n\t{\n\t\tsdkVersion: \"6.51.3\",\n\t\tprotocolVersion: \"3.99\",\n\t\tserialAPIVersion: \"5\",\n\t},\n\t{\n\t\tsdkVersion: \"6.51.2\",\n\t\tprotocolVersion: \"3.95\",\n\t\tserialAPIVersion: \"5\",\n\t},\n\t{\n\t\tsdkVersion: \"6.51.1\",\n\t\tprotocolVersion: \"3.92\",\n\t\tserialAPIVersion: \"5\",\n\t},\n\t{\n\t\tsdkVersion: \"6.51.0\",\n\t\tprotocolVersion: \"3.83\",\n\t\tserialAPIVersion: \"5\",\n\t},\n\t{\n\t\tsdkVersion: \"6.50.1\",\n\t\tprotocolVersion: \"3.79\",\n\t\tserialAPIVersion: \"5\",\n\t},\n\t{\n\t\tsdkVersion: \"6.50.0\",\n\t\tprotocolVersion: \"3.71\",\n\t\tserialAPIVersion: \"5\",\n\t},\n\t// The entries below this line are for the 300 or 400 series\n\t{\n\t\tsdkVersion: \"6.11.1\", // JP only\n\t\tprotocolVersion: \"3.53\",\n\t\tserialAPIVersion: \"5\",\n\t},\n\t{\n\t\tsdkVersion: \"6.11.0\", // JP only\n\t\tprotocolVersion: \"3.45\",\n\t\tserialAPIVersion: \"5\",\n\t},\n\t{\n\t\tsdkVersion: \"6.10.1\", // JP only\n\t\tprotocolVersion: \"3.38\",\n\t\tserialAPIVersion: \"5\",\n\t},\n\t{\n\t\tsdkVersion: \"6.10.0\",\n\t\tprotocolVersion: \"3.35\",\n\t\tserialAPIVersion: \"5\",\n\t},\n\t{\n\t\tsdkVersion: \"6.2.0\",\n\t\tprotocolVersion: \"3.41\",\n\t\tserialAPIVersion: \"5\",\n\t},\n\t{\n\t\tsdkVersion: \"6.1.3\",\n\t\tprotocolVersion: \"3.37\",\n\t\tserialAPIVersion: \"5\",\n\t},\n\t{\n\t\tsdkVersion: \"6.1.2\",\n\t\tprotocolVersion: \"3.33\",\n\t\tserialAPIVersion: \"5\",\n\t},\n\t{\n\t\tsdkVersion: \"6.1.1\", // 2-ch\n\t\tprotocolVersion: \"3.26\",\n\t\tserialAPIVersion: \"5\",\n\t},\n\t{\n\t\tsdkVersion: \"6.1.0\",\n\t\tprotocolVersion: \"3.10\",\n\t\tserialAPIVersion: \"5\",\n\t},\n\t{\n\t\tsdkVersion: \"6.0.5-beta\",\n\t\tprotocolVersion: \"3.07\",\n\t\tserialAPIVersion: \"5\",\n\t},\n\t{\n\t\tsdkVersion: \"6.0.4-beta\",\n\t\tprotocolVersion: \"3.06\",\n\t\tserialAPIVersion: \"5\",\n\t},\n\t{\n\t\tsdkVersion: \"6.0.3-beta\",\n\t\tprotocolVersion: \"3.04\",\n\t\tserialAPIVersion: \"5\",\n\t},\n\t{\n\t\tsdkVersion: \"6.0.2-beta\",\n\t\tprotocolVersion: \"3.03\",\n\t\tserialAPIVersion: \"5\",\n\t},\n\t{\n\t\tsdkVersion: \"6.0.1-beta\",\n\t\tprotocolVersion: \"2.99\",\n\t\tserialAPIVersion: \"5\",\n\t},\n\t{\n\t\tsdkVersion: \"6.0.0-beta\",\n\t\tprotocolVersion: \"2.96\",\n\t\tserialAPIVersion: \"5\",\n\t},\n\t{\n\t\tsdkVersion: \"5.3.0\",\n\t\tprotocolVersion: \"3.28\",\n\t\tserialAPIVersion: \"5\",\n\t},\n\t{\n\t\tsdkVersion: \"5.2.3\",\n\t\tprotocolVersion: \"2.78\",\n\t\tserialAPIVersion: \"5\",\n\t},\n\t{\n\t\tsdkVersion: \"5.2.2\",\n\t\tprotocolVersion: \"2.64\",\n\t\tserialAPIVersion: \"5\",\n\t},\n\t{\n\t\tsdkVersion: \"5.2.1\",\n\t\tprotocolVersion: \"2.51\",\n\t\tserialAPIVersion: \"5\",\n\t},\n\t{\n\t\tsdkVersion: \"5.2.0\",\n\t\tprotocolVersion: \"2.48\",\n\t\tserialAPIVersion: \"5\",\n\t},\n\t{\n\t\tsdkVersion: \"5.1.0\",\n\t\tprotocolVersion: \"2.36\",\n\t\tserialAPIVersion: \"5\",\n\t},\n\t{\n\t\tsdkVersion: \"5.0.1-beta\",\n\t\tprotocolVersion: \"2.22\",\n\t\tserialAPIVersion: \"5\",\n\t},\n\t{\n\t\tsdkVersion: \"5.0.0-beta\",\n\t\tprotocolVersion: \"2.16\",\n\t\tserialAPIVersion: \"5\",\n\t},\n\t{\n\t\tsdkVersion: \"4.55.0\",\n\t\tprotocolVersion: \"3.67\",\n\t\tserialAPIVersion: \"5\",\n\t},\n\t{\n\t\tsdkVersion: \"4.54.2\",\n\t\tprotocolVersion: \"3.52\",\n\t\tserialAPIVersion: \"5\",\n\t},\n\t{\n\t\tsdkVersion: \"4.54.1\",\n\t\tprotocolVersion: \"3.42\",\n\t\tserialAPIVersion: \"5\",\n\t},\n\t{\n\t\tsdkVersion: \"4.54.0\",\n\t\tprotocolVersion: \"3.40\",\n\t\tserialAPIVersion: \"5\",\n\t},\n\t{\n\t\tsdkVersion: \"4.53.1\",\n\t\tprotocolVersion: \"3.36\",\n\t\tserialAPIVersion: \"5\",\n\t},\n\t{\n\t\tsdkVersion: \"4.53.0\",\n\t\tprotocolVersion: \"3.34\",\n\t\tserialAPIVersion: \"5\",\n\t},\n\t{\n\t\tsdkVersion: \"4.52.1\",\n\t\tprotocolVersion: \"3.22\",\n\t\tserialAPIVersion: \"5\",\n\t},\n\t{\n\t\tsdkVersion: \"4.52.0\",\n\t\tprotocolVersion: \"3.20\",\n\t\tserialAPIVersion: \"5\",\n\t},\n\t{\n\t\tsdkVersion: \"4.51.0\",\n\t\tprotocolVersion: \"2.97\",\n\t\tserialAPIVersion: \"5\",\n\t},\n]);\n\n/**\n * Converts versions determined using GetProtocolVersion (x.y.z) into the legacy format\n * so they can be used to look up the SDK version.\n */\nfunction semverToLegacy(version: string): string {\n\t// eslint-disable-next-line @typescript-eslint/no-unused-vars\n\tconst [major, minor, _patch] = version.split(\".\", 3);\n\treturn `${major}.${minor.toString().padStart(2, \"0\")}`;\n}\n\n/**\n * Looks up which SDK version is being used for a given protocol version.\n * Defaults to the protocol version itself, which is the case for v7+\n */\nexport function protocolVersionToSDKVersion(protocolVersion: string): string {\n\tif (protocolVersion.startsWith(\"Z-Wave \")) {\n\t\tprotocolVersion = protocolVersion.slice(7);\n\t}\n\n\tconst normalizedVersion = semverToLegacy(protocolVersion);\n\tlet ret = versions.find(\n\t\t(v) => v.protocolVersion === normalizedVersion,\n\t)?.sdkVersion;\n\n\tif (!ret) {\n\t\t// Remove leading zeroes and stuff\n\t\tret = protocolVersion\n\t\t\t.split(\".\")\n\t\t\t.map((part) => parseInt(part))\n\t\t\t.join(\".\");\n\t}\n\treturn ret;\n}\n"],
|
|
5
|
-
"mappings": "
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;AAAA;;;;;AACA,MAAM,WAAW,OAAO,OAAO;;;;;EAO9B;IACC,YAAY;IACZ,iBAAiB;IACjB,kBAAkB;;EAEnB;IACC,YAAY;IACZ,iBAAiB;IACjB,kBAAkB;;EAEnB;IACC,YAAY;IACZ,iBAAiB;IACjB,kBAAkB;;EAEnB;IACC,YAAY;IACZ,iBAAiB;IACjB,kBAAkB;;EAEnB;IACC,YAAY;IACZ,iBAAiB;IACjB,kBAAkB;;EAEnB;IACC,YAAY;IACZ,iBAAiB;IACjB,kBAAkB;;EAEnB;IACC,YAAY;IACZ,iBAAiB;IACjB,kBAAkB;;EAEnB;IACC,YAAY;IACZ,iBAAiB;IACjB,kBAAkB;;EAEnB;IACC,YAAY;IACZ,iBAAiB;IACjB,kBAAkB;;EAEnB;IACC,YAAY;IACZ,iBAAiB;IACjB,kBAAkB;;EAEnB;IACC,YAAY;IACZ,iBAAiB;IACjB,kBAAkB;;EAEnB;IACC,YAAY;IACZ,iBAAiB;IACjB,kBAAkB;;EAEnB;IACC,YAAY;IACZ,iBAAiB;IACjB,kBAAkB;;EAEnB;IACC,YAAY;IACZ,iBAAiB;IACjB,kBAAkB;;EAEnB;IACC,YAAY;IACZ,iBAAiB;IACjB,kBAAkB;;EAEnB;IACC,YAAY;IACZ,iBAAiB;IACjB,kBAAkB;;EAEnB;IACC,YAAY;IACZ,iBAAiB;IACjB,kBAAkB;;EAEnB;IACC,YAAY;IACZ,iBAAiB;IACjB,kBAAkB;;EAEnB;IACC,YAAY;IACZ,iBAAiB;IACjB,kBAAkB;;EAEnB;IACC,YAAY;IACZ,iBAAiB;IACjB,kBAAkB;;EAEnB;IACC,YAAY;IACZ,iBAAiB;IACjB,kBAAkB;;EAEnB;IACC,YAAY;IACZ,iBAAiB;IACjB,kBAAkB;;EAEnB;IACC,YAAY;IACZ,iBAAiB;IACjB,kBAAkB;;EAEnB;IACC,YAAY;IACZ,iBAAiB;IACjB,kBAAkB;;EAEnB;IACC,YAAY;IACZ,iBAAiB;IACjB,kBAAkB;;EAEnB;IACC,YAAY;IACZ,iBAAiB;IACjB,kBAAkB;;EAEnB;IACC,YAAY;IACZ,iBAAiB;IACjB,kBAAkB;;EAEnB;IACC,YAAY;IACZ,iBAAiB;IACjB,kBAAkB;;EAEnB;IACC,YAAY;IACZ,iBAAiB;IACjB,kBAAkB;;EAEnB;IACC,YAAY;IACZ,iBAAiB;IACjB,kBAAkB;;EAEnB;IACC,YAAY;IACZ,iBAAiB;IACjB,kBAAkB;;EAEnB;IACC,YAAY;IACZ,iBAAiB;IACjB,kBAAkB;;;EAGnB;IACC,YAAY;;IACZ,iBAAiB;IACjB,kBAAkB;;EAEnB;IACC,YAAY;;IACZ,iBAAiB;IACjB,kBAAkB;;EAEnB;IACC,YAAY;;IACZ,iBAAiB;IACjB,kBAAkB;;EAEnB;IACC,YAAY;IACZ,iBAAiB;IACjB,kBAAkB;;EAEnB;IACC,YAAY;IACZ,iBAAiB;IACjB,kBAAkB;;EAEnB;IACC,YAAY;IACZ,iBAAiB;IACjB,kBAAkB;;EAEnB;IACC,YAAY;IACZ,iBAAiB;IACjB,kBAAkB;;EAEnB;IACC,YAAY;;IACZ,iBAAiB;IACjB,kBAAkB;;EAEnB;IACC,YAAY;IACZ,iBAAiB;IACjB,kBAAkB;;EAEnB;IACC,YAAY;IACZ,iBAAiB;IACjB,kBAAkB;;EAEnB;IACC,YAAY;IACZ,iBAAiB;IACjB,kBAAkB;;EAEnB;IACC,YAAY;IACZ,iBAAiB;IACjB,kBAAkB;;EAEnB;IACC,YAAY;IACZ,iBAAiB;IACjB,kBAAkB;;EAEnB;IACC,YAAY;IACZ,iBAAiB;IACjB,kBAAkB;;EAEnB;IACC,YAAY;IACZ,iBAAiB;IACjB,kBAAkB;;EAEnB;IACC,YAAY;IACZ,iBAAiB;IACjB,kBAAkB;;EAEnB;IACC,YAAY;IACZ,iBAAiB;IACjB,kBAAkB;;EAEnB;IACC,YAAY;IACZ,iBAAiB;IACjB,kBAAkB;;EAEnB;IACC,YAAY;IACZ,iBAAiB;IACjB,kBAAkB;;EAEnB;IACC,YAAY;IACZ,iBAAiB;IACjB,kBAAkB;;EAEnB;IACC,YAAY;IACZ,iBAAiB;IACjB,kBAAkB;;EAEnB;IACC,YAAY;IACZ,iBAAiB;IACjB,kBAAkB;;EAEnB;IACC,YAAY;IACZ,iBAAiB;IACjB,kBAAkB;;EAEnB;IACC,YAAY;IACZ,iBAAiB;IACjB,kBAAkB;;EAEnB;IACC,YAAY;IACZ,iBAAiB;IACjB,kBAAkB;;EAEnB;IACC,YAAY;IACZ,iBAAiB;IACjB,kBAAkB;;EAEnB;IACC,YAAY;IACZ,iBAAiB;IACjB,kBAAkB;;EAEnB;IACC,YAAY;IACZ,iBAAiB;IACjB,kBAAkB;;EAEnB;IACC,YAAY;IACZ,iBAAiB;IACjB,kBAAkB;;EAEnB;IACC,YAAY;IACZ,iBAAiB;IACjB,kBAAkB;;EAEnB;IACC,YAAY;IACZ,iBAAiB;IACjB,kBAAkB;;EAEnB;IACC,YAAY;IACZ,iBAAiB;IACjB,kBAAkB;;CAEnB;AAMD,SAAS,eAAe,SAAe;AAEtC,QAAM,CAAC,OAAO,OAAO,MAAM,IAAI,QAAQ,MAAM,KAAK,CAAC;AACnD,SAAO,GAAG,KAAK,IAAI,MAAM,SAAQ,EAAG,SAAS,GAAG,GAAG,CAAC;AACrD;AAJS;AAUH,SAAU,4BAA4B,iBAAuB;AAClE,MAAI,gBAAgB,WAAW,SAAS,GAAG;AAC1C,sBAAkB,gBAAgB,MAAM,CAAC;EAC1C;AAEA,QAAM,oBAAoB,eAAe,eAAe;AACxD,MAAI,MAAM,SAAS,KAClB,CAAC,MAAM,EAAE,oBAAoB,iBAAiB,GAC5C;AAEH,MAAI,CAAC,KAAK;AAET,UAAM,gBACJ,MAAM,GAAG,EACT,IAAI,CAAC,SAAS,SAAS,IAAI,CAAC,EAC5B,KAAK,GAAG;EACX;AACA,SAAO;AACR;AAlBgB;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -3,6 +3,7 @@ var __defProp = Object.defineProperty;
|
|
|
3
3
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
4
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
5
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
6
7
|
var __export = (target, all) => {
|
|
7
8
|
for (var name in all)
|
|
8
9
|
__defProp(target, name, { get: all[name], enumerable: true });
|
|
@@ -29,6 +30,7 @@ function assertProvisioningEntry(arg) {
|
|
|
29
30
|
function fail(why) {
|
|
30
31
|
throw new import_safe.ZWaveError(`Invalid provisioning entry: ${why}`, import_safe.ZWaveErrorCodes.Argument_Invalid);
|
|
31
32
|
}
|
|
33
|
+
__name(fail, "fail");
|
|
32
34
|
if (!(0, import_typeguards.isObject)(arg))
|
|
33
35
|
fail("not an object");
|
|
34
36
|
if (typeof arg.dsk !== "string")
|
|
@@ -64,9 +66,11 @@ function assertProvisioningEntry(arg) {
|
|
|
64
66
|
}
|
|
65
67
|
}
|
|
66
68
|
}
|
|
69
|
+
__name(assertProvisioningEntry, "assertProvisioningEntry");
|
|
67
70
|
function isRebuildRoutesTask(t) {
|
|
68
71
|
return t.tag?.id === "rebuild-routes" || t.tag?.id === "rebuild-node-routes";
|
|
69
72
|
}
|
|
73
|
+
__name(isRebuildRoutesTask, "isRebuildRoutesTask");
|
|
70
74
|
// Annotate the CommonJS export names for ESM import in node:
|
|
71
75
|
0 && (module.exports = {
|
|
72
76
|
assertProvisioningEntry,
|
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/lib/controller/utils.ts"],
|
|
4
4
|
"sourcesContent": ["import {\n\tProtocols,\n\tSecurityClass,\n\tZWaveError,\n\tZWaveErrorCodes,\n\tisValidDSK,\n} from \"@zwave-js/core/safe\";\nimport { isArray, isObject } from \"alcalzone-shared/typeguards\";\nimport { type Task } from \"../driver/Task.js\";\nimport {\n\ttype PlannedProvisioningEntry,\n\tProvisioningEntryStatus,\n} from \"./Inclusion.js\";\n\nexport function assertProvisioningEntry(\n\targ: any,\n): asserts arg is PlannedProvisioningEntry {\n\tfunction fail(why: string): never {\n\t\tthrow new ZWaveError(\n\t\t\t`Invalid provisioning entry: ${why}`,\n\t\t\tZWaveErrorCodes.Argument_Invalid,\n\t\t);\n\t}\n\n\tif (!isObject(arg)) fail(\"not an object\");\n\n\tif (typeof arg.dsk !== \"string\") fail(\"dsk must be a string\");\n\telse if (!isValidDSK(arg.dsk)) {\n\t\tfail(\"dsk does not have the correct format\");\n\t}\n\n\tif (\n\t\targ.status != undefined\n\t\t&& (typeof arg.status !== \"number\"\n\t\t\t|| !(arg.status in ProvisioningEntryStatus))\n\t) {\n\t\tfail(\"status is not a ProvisioningEntryStatus\");\n\t}\n\n\tif (!isArray(arg.securityClasses)) {\n\t\tfail(\"securityClasses must be an array\");\n\t} else if (\n\t\t!arg.securityClasses.every(\n\t\t\t(sc: any) => typeof sc === \"number\" && sc in SecurityClass,\n\t\t)\n\t) {\n\t\tfail(\"securityClasses contains invalid entries\");\n\t}\n\n\tif (arg.requestedSecurityClasses != undefined) {\n\t\tif (!isArray(arg.requestedSecurityClasses)) {\n\t\t\tfail(\"requestedSecurityClasses must be an array\");\n\t\t} else if (\n\t\t\t!arg.requestedSecurityClasses.every(\n\t\t\t\t(sc: any) => typeof sc === \"number\" && sc in SecurityClass,\n\t\t\t)\n\t\t) {\n\t\t\t{\n\t\t\t\tfail(\"requestedSecurityClasses contains invalid entries\");\n\t\t\t}\n\t\t}\n\t}\n\n\tif (\n\t\targ.protocol != undefined\n\t\t&& (typeof arg.protocol !== \"number\" || !(arg.protocol in Protocols))\n\t) {\n\t\tfail(\"protocol is not a valid\");\n\t}\n\n\tif (arg.supportedProtocols != undefined) {\n\t\tif (!isArray(arg.supportedProtocols)) {\n\t\t\tfail(\"supportedProtocols must be an array\");\n\t\t} else if (\n\t\t\t!arg.supportedProtocols.every(\n\t\t\t\t(p: any) => typeof p === \"number\" && p in Protocols,\n\t\t\t)\n\t\t) {\n\t\t\tfail(\"supportedProtocols contains invalid entries\");\n\t\t}\n\t}\n}\n\n/** Checks if a task belongs to a route rebuilding process */\nexport function isRebuildRoutesTask(t: Task<unknown>): boolean {\n\treturn t.tag?.id === \"rebuild-routes\"\n\t\t|| t.tag?.id === \"rebuild-node-routes\";\n}\n"],
|
|
5
|
-
"mappings": "
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;AAAA;;;;;;AAAA,kBAMO;AACP,wBAAkC;AAElC,uBAGO;AAED,SAAU,wBACf,KAAQ;AAER,WAAS,KAAK,KAAW;AACxB,UAAM,IAAI,uBACT,+BAA+B,GAAG,IAClC,4BAAgB,gBAAgB;EAElC;AALS;AAOT,MAAI,KAAC,4BAAS,GAAG;AAAG,SAAK,eAAe;AAExC,MAAI,OAAO,IAAI,QAAQ;AAAU,SAAK,sBAAsB;WACnD,KAAC,wBAAW,IAAI,GAAG,GAAG;AAC9B,SAAK,sCAAsC;EAC5C;AAEA,MACC,IAAI,UAAU,WACV,OAAO,IAAI,WAAW,YACtB,EAAE,IAAI,UAAU,4CACnB;AACD,SAAK,yCAAyC;EAC/C;AAEA,MAAI,KAAC,2BAAQ,IAAI,eAAe,GAAG;AAClC,SAAK,kCAAkC;EACxC,WACC,CAAC,IAAI,gBAAgB,MACpB,CAAC,OAAY,OAAO,OAAO,YAAY,MAAM,yBAAa,GAE1D;AACD,SAAK,0CAA0C;EAChD;AAEA,MAAI,IAAI,4BAA4B,QAAW;AAC9C,QAAI,KAAC,2BAAQ,IAAI,wBAAwB,GAAG;AAC3C,WAAK,2CAA2C;IACjD,WACC,CAAC,IAAI,yBAAyB,MAC7B,CAAC,OAAY,OAAO,OAAO,YAAY,MAAM,yBAAa,GAE1D;AACD;AACC,aAAK,mDAAmD;MACzD;IACD;EACD;AAEA,MACC,IAAI,YAAY,WACZ,OAAO,IAAI,aAAa,YAAY,EAAE,IAAI,YAAY,yBACzD;AACD,SAAK,yBAAyB;EAC/B;AAEA,MAAI,IAAI,sBAAsB,QAAW;AACxC,QAAI,KAAC,2BAAQ,IAAI,kBAAkB,GAAG;AACrC,WAAK,qCAAqC;IAC3C,WACC,CAAC,IAAI,mBAAmB,MACvB,CAAC,MAAW,OAAO,MAAM,YAAY,KAAK,qBAAS,GAEnD;AACD,WAAK,6CAA6C;IACnD;EACD;AACD;AAnEgB;AAsEV,SAAU,oBAAoB,GAAgB;AACnD,SAAO,EAAE,KAAK,OAAO,oBACjB,EAAE,KAAK,OAAO;AACnB;AAHgB;",
|
|
6
6
|
"names": []
|
|
7
7
|
}
|
|
@@ -3,6 +3,7 @@ var __defProp = Object.defineProperty;
|
|
|
3
3
|
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
4
4
|
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
5
5
|
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
6
|
+
var __name = (target, value) => __defProp(target, "name", { value, configurable: true });
|
|
6
7
|
var __export = (target, all) => {
|
|
7
8
|
for (var name in all)
|
|
8
9
|
__defProp(target, name, { get: all[name], enumerable: true });
|
|
@@ -31,6 +32,9 @@ var BootloaderState;
|
|
|
31
32
|
BootloaderState2[BootloaderState2["UploadingFirmware"] = 1] = "UploadingFirmware";
|
|
32
33
|
})(BootloaderState || (BootloaderState = {}));
|
|
33
34
|
class Bootloader {
|
|
35
|
+
static {
|
|
36
|
+
__name(this, "Bootloader");
|
|
37
|
+
}
|
|
34
38
|
writeSerial;
|
|
35
39
|
version;
|
|
36
40
|
constructor(writeSerial, version, options) {
|
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/lib/driver/Bootloader.ts"],
|
|
4
4
|
"sourcesContent": ["import { CRC16_CCITT, ZWaveError, ZWaveErrorCodes } from \"@zwave-js/core\";\nimport { XModemMessageHeaders } from \"@zwave-js/serial\";\nimport { Bytes } from \"@zwave-js/shared/safe\";\n\nexport enum BootloaderState {\n\tMenu,\n\tUploadingFirmware,\n}\n\n/** Encapsulates information about the currently active bootloader */\nexport class Bootloader {\n\tpublic constructor(\n\t\tprivate writeSerial: (data: Uint8Array) => Promise<void>,\n\t\tpublic readonly version: string,\n\t\toptions: { num: number; option: string }[],\n\t) {\n\t\tconst uploadOption = options.find(\n\t\t\t(o) => o.option === \"upload gbl\",\n\t\t)?.num;\n\t\tif (!uploadOption) {\n\t\t\tthrow new ZWaveError(\n\t\t\t\t\"The bootloader does not support uploading a GBL file!\",\n\t\t\t\tZWaveErrorCodes.Driver_NotSupported,\n\t\t\t);\n\t\t}\n\t\tthis.uploadOption = uploadOption;\n\n\t\tconst runOption = options.find((o) => o.option === \"run\")?.num;\n\t\tif (!runOption) {\n\t\t\tthrow new ZWaveError(\n\t\t\t\t\"Could not find run option in bootloader menu!\",\n\t\t\t\tZWaveErrorCodes.Driver_NotSupported,\n\t\t\t);\n\t\t}\n\t\tthis.runOption = runOption;\n\t}\n\n\tpublic readonly uploadOption: number;\n\tpublic readonly runOption: number;\n\tpublic state: BootloaderState = BootloaderState.Menu;\n\n\tpublic async beginUpload(): Promise<void> {\n\t\tawait this.writeSerial(\n\t\t\tBytes.from(this.uploadOption.toString(), \"ascii\"),\n\t\t);\n\t}\n\n\tpublic async runApplication(): Promise<void> {\n\t\tawait this.writeSerial(Bytes.from(this.runOption.toString(), \"ascii\"));\n\t}\n\n\tpublic async uploadFragment(\n\t\tfragmentNumber: number,\n\t\tdata: Uint8Array,\n\t): Promise<void> {\n\t\tconst command = Bytes.concat([\n\t\t\tBytes.from([\n\t\t\t\tXModemMessageHeaders.SOF,\n\t\t\t\tfragmentNumber & 0xff,\n\t\t\t\t0xff - (fragmentNumber & 0xff),\n\t\t\t]),\n\t\t\tdata,\n\t\t\tnew Bytes(2),\n\t\t]);\n\t\tcommand.writeUInt16BE(CRC16_CCITT(data, 0x0000), command.length - 2);\n\n\t\tawait this.writeSerial(command);\n\t}\n\n\tpublic async finishUpload(): Promise<void> {\n\t\tawait this.writeSerial(Bytes.from([XModemMessageHeaders.EOT]));\n\t}\n}\n"],
|
|
5
|
-
"mappings": "
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;AAAA;;;;;;AAAA,kBAAyD;AACzD,oBAAqC;AACrC,kBAAsB;AAEtB,IAAY;CAAZ,SAAYA,kBAAe;AAC1B,EAAAA,iBAAAA,iBAAA,MAAA,IAAA,CAAA,IAAA;AACA,EAAAA,iBAAAA,iBAAA,mBAAA,IAAA,CAAA,IAAA;AACD,GAHY,oBAAA,kBAAe,CAAA,EAAA;AAMrB,MAAO,WAAU;EAVvB,OAUuB;;;EAEb;EACQ;EAFjB,YACS,aACQ,SAChB,SAA0C;AAFlC,SAAA,cAAA;AACQ,SAAA,UAAA;AAGhB,UAAM,eAAe,QAAQ,KAC5B,CAAC,MAAM,EAAE,WAAW,YAAY,GAC9B;AACH,QAAI,CAAC,cAAc;AAClB,YAAM,IAAI,uBACT,yDACA,4BAAgB,mBAAmB;IAErC;AACA,SAAK,eAAe;AAEpB,UAAM,YAAY,QAAQ,KAAK,CAAC,MAAM,EAAE,WAAW,KAAK,GAAG;AAC3D,QAAI,CAAC,WAAW;AACf,YAAM,IAAI,uBACT,iDACA,4BAAgB,mBAAmB;IAErC;AACA,SAAK,YAAY;EAClB;EAEgB;EACA;EACT,QAAyB,gBAAgB;EAEzC,MAAM,cAAW;AACvB,UAAM,KAAK,YACV,kBAAM,KAAK,KAAK,aAAa,SAAQ,GAAI,OAAO,CAAC;EAEnD;EAEO,MAAM,iBAAc;AAC1B,UAAM,KAAK,YAAY,kBAAM,KAAK,KAAK,UAAU,SAAQ,GAAI,OAAO,CAAC;EACtE;EAEO,MAAM,eACZ,gBACA,MAAgB;AAEhB,UAAM,UAAU,kBAAM,OAAO;MAC5B,kBAAM,KAAK;QACV,mCAAqB;QACrB,iBAAiB;QACjB,OAAQ,iBAAiB;OACzB;MACD;MACA,IAAI,kBAAM,CAAC;KACX;AACD,YAAQ,kBAAc,yBAAY,MAAM,CAAM,GAAG,QAAQ,SAAS,CAAC;AAEnE,UAAM,KAAK,YAAY,OAAO;EAC/B;EAEO,MAAM,eAAY;AACxB,UAAM,KAAK,YAAY,kBAAM,KAAK,CAAC,mCAAqB,GAAG,CAAC,CAAC;EAC9D;;",
|
|
6
6
|
"names": ["BootloaderState"]
|
|
7
7
|
}
|