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
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../../src/lib/node/mockCCBehaviors/UserCode.ts"],
|
|
4
4
|
"sourcesContent": ["import { KeypadMode, UserIDStatus } from \"@zwave-js/cc\";\nimport {\n\tUserCodeCCAdminCodeGet,\n\tUserCodeCCAdminCodeReport,\n\tUserCodeCCAdminCodeSet,\n\tUserCodeCCCapabilitiesGet,\n\tUserCodeCCCapabilitiesReport,\n\tUserCodeCCGet,\n\tUserCodeCCKeypadModeGet,\n\tUserCodeCCKeypadModeReport,\n\tUserCodeCCKeypadModeSet,\n\tUserCodeCCReport,\n\tUserCodeCCSet,\n\tUserCodeCCUserCodeChecksumGet,\n\tUserCodeCCUserCodeChecksumReport,\n\tUserCodeCCUsersNumberGet,\n\tUserCodeCCUsersNumberReport,\n} from \"@zwave-js/cc/UserCodeCC\";\nimport { CRC16_CCITT, CommandClasses } from \"@zwave-js/core/safe\";\nimport { Bytes } from \"@zwave-js/shared\";\nimport {\n\ttype MockNodeBehavior,\n\ttype UserCodeCCCapabilities,\n} from \"@zwave-js/testing\";\n\nexport const defaultCapabilities: UserCodeCCCapabilities = {\n\tnumUsers: 1,\n\tsupportedASCIIChars: \"0123456789\",\n\tsupportsAdminCode: true,\n\tsupportsAdminCodeDeactivation: true,\n\tsupportsUserCodeChecksum: true,\n\tsupportedKeypadModes: [KeypadMode.Normal],\n\tsupportedUserIDStatuses: [\n\t\tUserIDStatus.Available,\n\t\tUserIDStatus.Enabled,\n\t\tUserIDStatus.Disabled,\n\t],\n};\n\nconst STATE_KEY_PREFIX = \"UserCode_\";\nconst StateKeys = {\n\tuserCode: (userId: number) => `${STATE_KEY_PREFIX}userCode_${userId}`,\n\tuserIdStatus: (userId: number) =>\n\t\t`${STATE_KEY_PREFIX}userIdStatus_${userId}`,\n\tadminCode: `${STATE_KEY_PREFIX}adminCode`,\n\tkeypadMode: `${STATE_KEY_PREFIX}keypadMode`,\n} as const;\n\nconst respondToUsersNumberGet: MockNodeBehavior = {\n\thandleCC(controller, self, receivedCC) {\n\t\tif (receivedCC instanceof UserCodeCCUsersNumberGet) {\n\t\t\tconst capabilities = {\n\t\t\t\t...defaultCapabilities,\n\t\t\t\t...self.getCCCapabilities(\n\t\t\t\t\tCommandClasses[\"User Code\"],\n\t\t\t\t\treceivedCC.endpointIndex,\n\t\t\t\t),\n\t\t\t};\n\t\t\tconst cc = new UserCodeCCUsersNumberReport({\n\t\t\t\tnodeId: controller.ownNodeId,\n\t\t\t\tsupportedUsers: capabilities.numUsers ?? 1,\n\t\t\t});\n\t\t\treturn { action: \"sendCC\", cc };\n\t\t}\n\t},\n};\n\nconst respondToUserGet: MockNodeBehavior = {\n\thandleCC(controller, self, receivedCC) {\n\t\tif (receivedCC instanceof UserCodeCCGet) {\n\t\t\tconst capabilities = {\n\t\t\t\t...defaultCapabilities,\n\t\t\t\t...self.getCCCapabilities(\n\t\t\t\t\tCommandClasses[\"User Code\"],\n\t\t\t\t\treceivedCC.endpointIndex,\n\t\t\t\t),\n\t\t\t};\n\t\t\tconst userId = receivedCC.userId;\n\t\t\tlet cc: UserCodeCCReport;\n\t\t\tif (capabilities.numUsers >= userId) {\n\t\t\t\tcc = new UserCodeCCReport({\n\t\t\t\t\tnodeId: controller.ownNodeId,\n\t\t\t\t\tuserId,\n\t\t\t\t\tuserIdStatus: (self.state.get(\n\t\t\t\t\t\tStateKeys.userIdStatus(userId),\n\t\t\t\t\t) ?? UserIDStatus.Available) as UserIDStatus,\n\t\t\t\t\tuserCode: self.state.get(\n\t\t\t\t\t\tStateKeys.userCode(userId),\n\t\t\t\t\t) as string,\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\tcc = new UserCodeCCReport({\n\t\t\t\t\tnodeId: controller.ownNodeId,\n\t\t\t\t\tuserId,\n\t\t\t\t\tuserIdStatus: UserIDStatus.StatusNotAvailable,\n\t\t\t\t});\n\t\t\t}\n\t\t\treturn { action: \"sendCC\", cc };\n\t\t}\n\t},\n};\n\nconst respondToUserCodeSet: MockNodeBehavior = {\n\thandleCC(controller, self, receivedCC) {\n\t\tif (receivedCC instanceof UserCodeCCSet) {\n\t\t\tconst capabilities = {\n\t\t\t\t...defaultCapabilities,\n\t\t\t\t...self.getCCCapabilities(\n\t\t\t\t\tCommandClasses[\"User Code\"],\n\t\t\t\t\treceivedCC.endpointIndex,\n\t\t\t\t),\n\t\t\t};\n\t\t\tconst userId = receivedCC.userId;\n\t\t\tconst userIdStatus = receivedCC.userIdStatus;\n\t\t\tif (capabilities.numUsers >= userId) {\n\t\t\t\tself.state.set(StateKeys.userIdStatus(userId), userIdStatus);\n\n\t\t\t\tconst code = userIdStatus !== UserIDStatus.Available\n\t\t\t\t\t\t&& userIdStatus !== UserIDStatus.StatusNotAvailable\n\t\t\t\t\t? receivedCC.userCode\n\t\t\t\t\t: undefined;\n\n\t\t\t\tself.state.set(StateKeys.userCode(userId), code);\n\t\t\t\treturn { action: \"ok\" };\n\t\t\t}\n\t\t\treturn { action: \"fail\" };\n\t\t}\n\t},\n};\n\nconst respondToUserCodeCapabilitiesGet: MockNodeBehavior = {\n\thandleCC(controller, self, receivedCC) {\n\t\tif (receivedCC instanceof UserCodeCCCapabilitiesGet) {\n\t\t\tconst capabilities = {\n\t\t\t\t...defaultCapabilities,\n\t\t\t\t...self.getCCCapabilities(\n\t\t\t\t\tCommandClasses[\"User Code\"],\n\t\t\t\t\treceivedCC.endpointIndex,\n\t\t\t\t),\n\t\t\t};\n\t\t\tconst cc = new UserCodeCCCapabilitiesReport({\n\t\t\t\tnodeId: controller.ownNodeId,\n\t\t\t\tsupportsAdminCode: capabilities.supportsAdminCode!,\n\t\t\t\tsupportsAdminCodeDeactivation: capabilities\n\t\t\t\t\t.supportsAdminCodeDeactivation!,\n\t\t\t\tsupportsUserCodeChecksum: capabilities\n\t\t\t\t\t.supportsUserCodeChecksum!,\n\t\t\t\tsupportsMultipleUserCodeReport: false,\n\t\t\t\tsupportsMultipleUserCodeSet: false,\n\t\t\t\tsupportedUserIDStatuses: capabilities.supportedUserIDStatuses!,\n\t\t\t\tsupportedKeypadModes: capabilities.supportedKeypadModes!,\n\t\t\t\tsupportedASCIIChars: capabilities.supportedASCIIChars!,\n\t\t\t});\n\t\t\treturn { action: \"sendCC\", cc };\n\t\t}\n\t},\n};\n\nconst respondToUserCodeKeypadModeGet: MockNodeBehavior = {\n\thandleCC(controller, self, receivedCC) {\n\t\tif (receivedCC instanceof UserCodeCCKeypadModeGet) {\n\t\t\tconst capabilities = {\n\t\t\t\t...defaultCapabilities,\n\t\t\t\t...self.getCCCapabilities(\n\t\t\t\t\tCommandClasses[\"User Code\"],\n\t\t\t\t\treceivedCC.endpointIndex,\n\t\t\t\t),\n\t\t\t};\n\t\t\tconst cc = new UserCodeCCKeypadModeReport({\n\t\t\t\tnodeId: controller.ownNodeId,\n\t\t\t\tkeypadMode: (self.state.get(StateKeys.keypadMode)\n\t\t\t\t\t?? capabilities.supportedKeypadModes?.[0]\n\t\t\t\t\t?? KeypadMode.Normal) as KeypadMode,\n\t\t\t});\n\t\t\treturn { action: \"sendCC\", cc };\n\t\t}\n\t},\n};\n\nconst respondToUserCodeKeypadModeSet: MockNodeBehavior = {\n\thandleCC(controller, self, receivedCC) {\n\t\tif (receivedCC instanceof UserCodeCCKeypadModeSet) {\n\t\t\tconst capabilities = {\n\t\t\t\t...defaultCapabilities,\n\t\t\t\t...self.getCCCapabilities(\n\t\t\t\t\tCommandClasses[\"User Code\"],\n\t\t\t\t\treceivedCC.endpointIndex,\n\t\t\t\t),\n\t\t\t};\n\t\t\tif (\n\t\t\t\tcapabilities.supportedKeypadModes?.includes(\n\t\t\t\t\treceivedCC.keypadMode,\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\tself.state.set(StateKeys.keypadMode, receivedCC.keypadMode);\n\t\t\t\treturn { action: \"ok\" };\n\t\t\t}\n\t\t\treturn { action: \"fail\" };\n\t\t}\n\t},\n};\n\nconst respondToUserCodeAdminCodeSet: MockNodeBehavior = {\n\thandleCC(controller, self, receivedCC) {\n\t\tif (receivedCC instanceof UserCodeCCAdminCodeSet) {\n\t\t\tconst capabilities = {\n\t\t\t\t...defaultCapabilities,\n\t\t\t\t...self.getCCCapabilities(\n\t\t\t\t\tCommandClasses[\"User Code\"],\n\t\t\t\t\treceivedCC.endpointIndex,\n\t\t\t\t),\n\t\t\t};\n\t\t\tconst adminCode = receivedCC.adminCode;\n\t\t\tif (capabilities.supportsAdminCode) {\n\t\t\t\tif (\n\t\t\t\t\tadminCode.length > 0\n\t\t\t\t\t|| capabilities.supportsAdminCodeDeactivation\n\t\t\t\t) {\n\t\t\t\t\tself.state.set(\n\t\t\t\t\t\tStateKeys.adminCode,\n\t\t\t\t\t\treceivedCC.adminCode,\n\t\t\t\t\t);\n\t\t\t\t\treturn { action: \"ok\" };\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn { action: \"fail\" };\n\t\t}\n\t},\n};\n\nconst respondToUserCodeAdminCodeGet: MockNodeBehavior = {\n\thandleCC(controller, self, receivedCC) {\n\t\tif (receivedCC instanceof UserCodeCCAdminCodeGet) {\n\t\t\tconst capabilities = {\n\t\t\t\t...defaultCapabilities,\n\t\t\t\t...self.getCCCapabilities(\n\t\t\t\t\tCommandClasses[\"User Code\"],\n\t\t\t\t\treceivedCC.endpointIndex,\n\t\t\t\t),\n\t\t\t};\n\t\t\tlet adminCode: string | undefined;\n\t\t\tif (capabilities.supportsAdminCode) {\n\t\t\t\tadminCode = self.state.get(StateKeys.adminCode) as string;\n\t\t\t}\n\n\t\t\tconst cc = new UserCodeCCAdminCodeReport({\n\t\t\t\tnodeId: controller.ownNodeId,\n\t\t\t\tadminCode: adminCode ?? \"\",\n\t\t\t});\n\t\t\treturn { action: \"sendCC\", cc };\n\t\t}\n\t},\n};\n\nconst respondToUserCodeUserCodeChecksumGet: MockNodeBehavior = {\n\thandleCC(controller, self, receivedCC) {\n\t\tif (receivedCC instanceof UserCodeCCUserCodeChecksumGet) {\n\t\t\tconst capabilities = {\n\t\t\t\t...defaultCapabilities,\n\t\t\t\t...self.getCCCapabilities(\n\t\t\t\t\tCommandClasses[\"User Code\"],\n\t\t\t\t\treceivedCC.endpointIndex,\n\t\t\t\t),\n\t\t\t};\n\t\t\tif (capabilities.supportsUserCodeChecksum) {\n\t\t\t\tlet data = new Bytes();\n\t\t\t\tfor (let i = 1; i <= capabilities.numUsers; i++) {\n\t\t\t\t\tconst status = self.state.get(\n\t\t\t\t\t\tStateKeys.userIdStatus(i),\n\t\t\t\t\t) as UserIDStatus;\n\t\t\t\t\tlet code = (self.state.get(StateKeys.userCode(i)) ?? \"\") as\n\t\t\t\t\t\t| string\n\t\t\t\t\t\t| Bytes;\n\t\t\t\t\tif (\n\t\t\t\t\t\tstatus === undefined\n\t\t\t\t\t\t|| status === UserIDStatus.Available\n\t\t\t\t\t\t|| code.length === 0\n\t\t\t\t\t) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tconst tmp = new Bytes(3 + code.length);\n\t\t\t\t\ttmp.writeUInt16BE(i, 0);\n\t\t\t\t\ttmp[2] = status;\n\t\t\t\t\tif (typeof code === \"string\") {\n\t\t\t\t\t\tcode = Bytes.from(code, \"ascii\");\n\t\t\t\t\t}\n\t\t\t\t\ttmp.set(code, 3);\n\t\t\t\t\tdata = Bytes.concat([data, tmp]);\n\t\t\t\t}\n\n\t\t\t\tconst checksum = data.length > 0 ? CRC16_CCITT(data) : 0x0000;\n\n\t\t\t\tconst cc = new UserCodeCCUserCodeChecksumReport({\n\t\t\t\t\tnodeId: controller.ownNodeId,\n\t\t\t\t\tuserCodeChecksum: checksum,\n\t\t\t\t});\n\t\t\t\treturn { action: \"sendCC\", cc };\n\t\t\t}\n\t\t\treturn { action: \"stop\" };\n\t\t}\n\t},\n};\n\nexport const UserCodeCCBehaviors = [\n\trespondToUsersNumberGet,\n\trespondToUserGet,\n\trespondToUserCodeSet,\n\trespondToUserCodeCapabilitiesGet,\n\trespondToUserCodeKeypadModeGet,\n\trespondToUserCodeKeypadModeSet,\n\trespondToUserCodeAdminCodeGet,\n\trespondToUserCodeAdminCodeSet,\n\trespondToUserCodeUserCodeChecksumGet,\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 });
|
|
@@ -43,30 +44,39 @@ var import_core = require("@zwave-js/core");
|
|
|
43
44
|
function getValue(ctx, nodeId, valueId) {
|
|
44
45
|
return ctx.getValueDB(nodeId).getValue(valueId);
|
|
45
46
|
}
|
|
47
|
+
__name(getValue, "getValue");
|
|
46
48
|
function setValue(ctx, nodeId, valueId, value, options) {
|
|
47
49
|
return ctx.getValueDB(nodeId).setValue(valueId, value, options);
|
|
48
50
|
}
|
|
51
|
+
__name(setValue, "setValue");
|
|
49
52
|
function endpointCountIsDynamic(ctx, nodeId) {
|
|
50
53
|
return getValue(ctx, nodeId, import_MultiChannelCC.MultiChannelCCValues.endpointCountIsDynamic.id);
|
|
51
54
|
}
|
|
55
|
+
__name(endpointCountIsDynamic, "endpointCountIsDynamic");
|
|
52
56
|
function endpointsHaveIdenticalCapabilities(ctx, nodeId) {
|
|
53
57
|
return getValue(ctx, nodeId, import_MultiChannelCC.MultiChannelCCValues.endpointsHaveIdenticalCapabilities.id);
|
|
54
58
|
}
|
|
59
|
+
__name(endpointsHaveIdenticalCapabilities, "endpointsHaveIdenticalCapabilities");
|
|
55
60
|
function getIndividualEndpointCount(ctx, nodeId) {
|
|
56
61
|
return getValue(ctx, nodeId, import_MultiChannelCC.MultiChannelCCValues.individualEndpointCount.id);
|
|
57
62
|
}
|
|
63
|
+
__name(getIndividualEndpointCount, "getIndividualEndpointCount");
|
|
58
64
|
function getAggregatedEndpointCount(ctx, nodeId) {
|
|
59
65
|
return getValue(ctx, nodeId, import_MultiChannelCC.MultiChannelCCValues.aggregatedEndpointCount.id);
|
|
60
66
|
}
|
|
67
|
+
__name(getAggregatedEndpointCount, "getAggregatedEndpointCount");
|
|
61
68
|
function getEndpointCount(ctx, nodeId) {
|
|
62
69
|
return (getIndividualEndpointCount(ctx, nodeId) || 0) + (getAggregatedEndpointCount(ctx, nodeId) || 0);
|
|
63
70
|
}
|
|
71
|
+
__name(getEndpointCount, "getEndpointCount");
|
|
64
72
|
function setIndividualEndpointCount(ctx, nodeId, count) {
|
|
65
73
|
setValue(ctx, nodeId, import_MultiChannelCC.MultiChannelCCValues.individualEndpointCount.id, count);
|
|
66
74
|
}
|
|
75
|
+
__name(setIndividualEndpointCount, "setIndividualEndpointCount");
|
|
67
76
|
function setAggregatedEndpointCount(ctx, nodeId, count) {
|
|
68
77
|
setValue(ctx, nodeId, import_MultiChannelCC.MultiChannelCCValues.aggregatedEndpointCount.id, count);
|
|
69
78
|
}
|
|
79
|
+
__name(setAggregatedEndpointCount, "setAggregatedEndpointCount");
|
|
70
80
|
function getEndpointIndizes(ctx, nodeId) {
|
|
71
81
|
let ret = getValue(ctx, nodeId, import_MultiChannelCC.MultiChannelCCValues.endpointIndizes.id);
|
|
72
82
|
if (!ret) {
|
|
@@ -77,9 +87,11 @@ function getEndpointIndizes(ctx, nodeId) {
|
|
|
77
87
|
}
|
|
78
88
|
return ret;
|
|
79
89
|
}
|
|
90
|
+
__name(getEndpointIndizes, "getEndpointIndizes");
|
|
80
91
|
function setEndpointIndizes(ctx, nodeId, indizes) {
|
|
81
92
|
setValue(ctx, nodeId, import_MultiChannelCC.MultiChannelCCValues.endpointIndizes.id, indizes);
|
|
82
93
|
}
|
|
94
|
+
__name(setEndpointIndizes, "setEndpointIndizes");
|
|
83
95
|
function isMultiChannelInterviewComplete(ctx, nodeId) {
|
|
84
96
|
return !!getValue(ctx, nodeId, {
|
|
85
97
|
commandClass: import_core.CommandClasses["Multi Channel"],
|
|
@@ -87,6 +99,7 @@ function isMultiChannelInterviewComplete(ctx, nodeId) {
|
|
|
87
99
|
property: "interviewComplete"
|
|
88
100
|
});
|
|
89
101
|
}
|
|
102
|
+
__name(isMultiChannelInterviewComplete, "isMultiChannelInterviewComplete");
|
|
90
103
|
function setMultiChannelInterviewComplete(ctx, nodeId, complete) {
|
|
91
104
|
setValue(ctx, nodeId, {
|
|
92
105
|
commandClass: import_core.CommandClasses["Multi Channel"],
|
|
@@ -94,6 +107,7 @@ function setMultiChannelInterviewComplete(ctx, nodeId, complete) {
|
|
|
94
107
|
property: "interviewComplete"
|
|
95
108
|
}, complete);
|
|
96
109
|
}
|
|
110
|
+
__name(setMultiChannelInterviewComplete, "setMultiChannelInterviewComplete");
|
|
97
111
|
function getAllEndpoints(ctx, node) {
|
|
98
112
|
const ret = [node];
|
|
99
113
|
if (isMultiChannelInterviewComplete(ctx, node.nodeId)) {
|
|
@@ -105,6 +119,7 @@ function getAllEndpoints(ctx, node) {
|
|
|
105
119
|
}
|
|
106
120
|
return ret;
|
|
107
121
|
}
|
|
122
|
+
__name(getAllEndpoints, "getAllEndpoints");
|
|
108
123
|
function shouldHideRootApplicationCCValues(ctx, nodeId) {
|
|
109
124
|
const compatConfig = ctx.getDeviceConfig?.(nodeId)?.compat;
|
|
110
125
|
if (compatConfig?.preserveRootApplicationCCValueIDs)
|
|
@@ -118,6 +133,7 @@ function shouldHideRootApplicationCCValues(ctx, nodeId) {
|
|
|
118
133
|
}
|
|
119
134
|
return true;
|
|
120
135
|
}
|
|
136
|
+
__name(shouldHideRootApplicationCCValues, "shouldHideRootApplicationCCValues");
|
|
121
137
|
function translateValueID(ctx, endpoint, valueId) {
|
|
122
138
|
const commandClassName = (0, import_core.getCCName)(valueId.commandClass);
|
|
123
139
|
const ret = {
|
|
@@ -135,8 +151,9 @@ function translateValueID(ctx, endpoint, valueId) {
|
|
|
135
151
|
}
|
|
136
152
|
return ret;
|
|
137
153
|
}
|
|
154
|
+
__name(translateValueID, "translateValueID");
|
|
138
155
|
function filterRootApplicationCCValueIDs(allValueIds) {
|
|
139
|
-
const shouldHideRootValueID = (valueId, allValueIds2) => {
|
|
156
|
+
const shouldHideRootValueID = /* @__PURE__ */ __name((valueId, allValueIds2) => {
|
|
140
157
|
if (!!valueId.endpoint)
|
|
141
158
|
return false;
|
|
142
159
|
if (!import_core.applicationCCs.includes(valueId.commandClass))
|
|
@@ -146,12 +163,14 @@ function filterRootApplicationCCValueIDs(allValueIds) {
|
|
|
146
163
|
other.commandClass === valueId.commandClass && !!other.endpoint && other.property === valueId.property && other.propertyKey === valueId.propertyKey
|
|
147
164
|
));
|
|
148
165
|
return valueExistsOnAnotherEndpoint;
|
|
149
|
-
};
|
|
166
|
+
}, "shouldHideRootValueID");
|
|
150
167
|
return allValueIds.filter((vid) => !shouldHideRootValueID(vid, allValueIds));
|
|
151
168
|
}
|
|
169
|
+
__name(filterRootApplicationCCValueIDs, "filterRootApplicationCCValueIDs");
|
|
152
170
|
function getDefinedValueIDs(ctx, node) {
|
|
153
171
|
return getDefinedValueIDsInternal(ctx, node, false);
|
|
154
172
|
}
|
|
173
|
+
__name(getDefinedValueIDs, "getDefinedValueIDs");
|
|
155
174
|
function getDefinedValueIDsInternal(ctx, node, includeInternal = false) {
|
|
156
175
|
if (node.id === ctx.ownNodeId)
|
|
157
176
|
return [];
|
|
@@ -177,6 +196,7 @@ function getDefinedValueIDsInternal(ctx, node, includeInternal = false) {
|
|
|
177
196
|
}
|
|
178
197
|
return ret.map((id) => translateValueID(ctx, node, id));
|
|
179
198
|
}
|
|
199
|
+
__name(getDefinedValueIDsInternal, "getDefinedValueIDsInternal");
|
|
180
200
|
// Annotate the CommonJS export names for ESM import in node:
|
|
181
201
|
0 && (module.exports = {
|
|
182
202
|
endpointCountIsDynamic,
|
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/lib/node/utils.ts"],
|
|
4
4
|
"sourcesContent": ["import { CommandClass } from \"@zwave-js/cc\";\nimport { MultiChannelCCValues } from \"@zwave-js/cc/MultiChannelCC\";\nimport {\n\tCommandClasses,\n\ttype ControlsCC,\n\ttype EndpointId,\n\ttype GetEndpoint,\n\ttype MaybeNotKnown,\n\ttype NodeId,\n\ttype SetValueOptions,\n\ttype SupportsCC,\n\ttype TranslatedValueID,\n\ttype ValueID,\n\tZWaveError,\n\tZWaveErrorCodes,\n\tallCCs,\n\tapplicationCCs,\n\tgetCCName,\n} from \"@zwave-js/core\";\nimport type {\n\tGetDeviceConfig,\n\tGetNode,\n\tGetSupportedCCVersion,\n\tGetValueDB,\n\tHostIDs,\n} from \"@zwave-js/host\";\n\nfunction getValue<T>(\n\tctx: GetValueDB,\n\tnodeId: number,\n\tvalueId: ValueID,\n): T | undefined {\n\treturn ctx.getValueDB(nodeId).getValue(valueId);\n}\n\nfunction setValue(\n\tctx: GetValueDB,\n\tnodeId: number,\n\tvalueId: ValueID,\n\tvalue: unknown,\n\toptions?: SetValueOptions,\n): void {\n\treturn ctx.getValueDB(nodeId).setValue(valueId, value, options);\n}\n\nexport function endpointCountIsDynamic(\n\tctx: GetValueDB,\n\tnodeId: number,\n): MaybeNotKnown<boolean> {\n\treturn getValue(\n\t\tctx,\n\t\tnodeId,\n\t\tMultiChannelCCValues.endpointCountIsDynamic.id,\n\t);\n}\n\nexport function endpointsHaveIdenticalCapabilities(\n\tctx: GetValueDB,\n\tnodeId: number,\n): MaybeNotKnown<boolean> {\n\treturn getValue(\n\t\tctx,\n\t\tnodeId,\n\t\tMultiChannelCCValues.endpointsHaveIdenticalCapabilities.id,\n\t);\n}\n\nexport function getIndividualEndpointCount(\n\tctx: GetValueDB,\n\tnodeId: number,\n): MaybeNotKnown<number> {\n\treturn getValue(\n\t\tctx,\n\t\tnodeId,\n\t\tMultiChannelCCValues.individualEndpointCount.id,\n\t);\n}\n\nexport function getAggregatedEndpointCount(\n\tctx: GetValueDB,\n\tnodeId: number,\n): MaybeNotKnown<number> {\n\treturn getValue(\n\t\tctx,\n\t\tnodeId,\n\t\tMultiChannelCCValues.aggregatedEndpointCount.id,\n\t);\n}\n\nexport function getEndpointCount(\n\tctx: GetValueDB,\n\tnodeId: number,\n): number {\n\treturn (\n\t\t(getIndividualEndpointCount(ctx, nodeId) || 0)\n\t\t+ (getAggregatedEndpointCount(ctx, nodeId) || 0)\n\t);\n}\n\nexport function setIndividualEndpointCount(\n\tctx: GetValueDB,\n\tnodeId: number,\n\tcount: number,\n): void {\n\tsetValue(\n\t\tctx,\n\t\tnodeId,\n\t\tMultiChannelCCValues.individualEndpointCount.id,\n\t\tcount,\n\t);\n}\n\nexport function setAggregatedEndpointCount(\n\tctx: GetValueDB,\n\tnodeId: number,\n\tcount: number,\n): void {\n\tsetValue(\n\t\tctx,\n\t\tnodeId,\n\t\tMultiChannelCCValues.aggregatedEndpointCount.id,\n\t\tcount,\n\t);\n}\n\nexport function getEndpointIndizes(\n\tctx: GetValueDB,\n\tnodeId: number,\n): number[] {\n\tlet ret = getValue<number[]>(\n\t\tctx,\n\t\tnodeId,\n\t\tMultiChannelCCValues.endpointIndizes.id,\n\t);\n\tif (!ret) {\n\t\t// Endpoint indizes not stored, assume sequential endpoints\n\t\tret = [];\n\t\tfor (let i = 1; i <= getEndpointCount(ctx, nodeId); i++) {\n\t\t\tret.push(i);\n\t\t}\n\t}\n\treturn ret;\n}\n\nexport function setEndpointIndizes(\n\tctx: GetValueDB,\n\tnodeId: number,\n\tindizes: number[],\n): void {\n\tsetValue(\n\t\tctx,\n\t\tnodeId,\n\t\tMultiChannelCCValues.endpointIndizes.id,\n\t\tindizes,\n\t);\n}\n\nexport function isMultiChannelInterviewComplete(\n\tctx: GetValueDB,\n\tnodeId: number,\n): boolean {\n\treturn !!getValue(ctx, nodeId, {\n\t\tcommandClass: CommandClasses[\"Multi Channel\"],\n\t\tendpoint: 0,\n\t\tproperty: \"interviewComplete\",\n\t});\n}\n\nexport function setMultiChannelInterviewComplete(\n\tctx: GetValueDB,\n\tnodeId: number,\n\tcomplete: boolean,\n): void {\n\tsetValue(\n\t\tctx,\n\t\tnodeId,\n\t\t{\n\t\t\tcommandClass: CommandClasses[\"Multi Channel\"],\n\t\t\tendpoint: 0,\n\t\t\tproperty: \"interviewComplete\",\n\t\t},\n\t\tcomplete,\n\t);\n}\n\nexport function getAllEndpoints<T extends EndpointId>(\n\tctx: GetValueDB,\n\tnode: T & GetEndpoint<EndpointId & T>,\n): T[] {\n\tconst ret: T[] = [node];\n\t// Check if the Multi Channel CC interview for this node is completed,\n\t// because we don't have all the endpoint information before that\n\tif (isMultiChannelInterviewComplete(ctx, node.nodeId)) {\n\t\tfor (const i of getEndpointIndizes(ctx, node.nodeId)) {\n\t\t\tconst endpoint = node.getEndpoint(i);\n\t\t\tif (endpoint) ret.push(endpoint);\n\t\t}\n\t}\n\treturn ret;\n}\n\n/** Determines whether the root application CC values should be hidden in favor of endpoint values */\nexport function shouldHideRootApplicationCCValues(\n\tctx: GetValueDB & GetDeviceConfig,\n\tnodeId: number,\n): boolean {\n\t// This is not the case when the root values should explicitly be preserved\n\tconst compatConfig = ctx.getDeviceConfig?.(nodeId)?.compat;\n\tif (compatConfig?.preserveRootApplicationCCValueIDs) return false;\n\n\t// This is not the case when there are no endpoints\n\tconst endpointIndizes = getEndpointIndizes(ctx, nodeId);\n\tif (endpointIndizes.length === 0) return false;\n\n\t// This is not the case when only individual endpoints should be preserved in addition to the root\n\tconst preserveEndpoints = compatConfig?.preserveEndpoints;\n\tif (\n\t\tpreserveEndpoints != undefined\n\t\t&& preserveEndpoints !== \"*\"\n\t\t&& preserveEndpoints.length !== endpointIndizes.length\n\t) {\n\t\treturn false;\n\t}\n\n\t// Otherwise they should be hidden\n\treturn true;\n}\n\n/**\n * Enhances a value id so it can be consumed better by applications\n */\nexport function translateValueID<T extends ValueID>(\n\tctx: GetValueDB,\n\tendpoint: EndpointId,\n\tvalueId: T,\n): T & TranslatedValueID {\n\t// Try to retrieve the speaking CC name\n\tconst commandClassName = getCCName(valueId.commandClass);\n\tconst ret: T & TranslatedValueID = {\n\t\tcommandClassName,\n\t\t...valueId,\n\t};\n\tconst ccInstance = CommandClass.createInstanceUnchecked(\n\t\tendpoint,\n\t\tvalueId.commandClass,\n\t);\n\tif (!ccInstance) {\n\t\tthrow new ZWaveError(\n\t\t\t`Cannot translate a value ID for the non-implemented CC ${\n\t\t\t\tgetCCName(\n\t\t\t\t\tvalueId.commandClass,\n\t\t\t\t)\n\t\t\t}`,\n\t\t\tZWaveErrorCodes.CC_NotImplemented,\n\t\t);\n\t}\n\n\t// Retrieve the speaking property name\n\tret.propertyName = ccInstance.translateProperty(\n\t\tctx,\n\t\tvalueId.property,\n\t\tvalueId.propertyKey,\n\t);\n\t// Try to retrieve the speaking property key\n\tif (valueId.propertyKey != undefined) {\n\t\tconst propertyKey = ccInstance.translatePropertyKey(\n\t\t\tctx,\n\t\t\tvalueId.property,\n\t\t\tvalueId.propertyKey,\n\t\t);\n\t\tret.propertyKeyName = propertyKey;\n\t}\n\treturn ret;\n}\n\n/**\n * Removes all Value IDs from an array that belong to a root endpoint and have a corresponding\n * Value ID on a non-root endpoint\n */\nexport function filterRootApplicationCCValueIDs<T extends ValueID>(\n\tallValueIds: T[],\n): T[] {\n\tconst shouldHideRootValueID = (\n\t\tvalueId: ValueID,\n\t\tallValueIds: ValueID[],\n\t): boolean => {\n\t\t// Non-root endpoint values don't need to be filtered\n\t\tif (!!valueId.endpoint) return false;\n\t\t// Non-application CCs don't need to be filtered\n\t\tif (!applicationCCs.includes(valueId.commandClass)) return false;\n\t\t// Filter out root values if an identical value ID exists for another endpoint\n\t\tconst valueExistsOnAnotherEndpoint = allValueIds.some(\n\t\t\t(other) =>\n\t\t\t\t// same CC\n\t\t\t\tother.commandClass === valueId.commandClass\n\t\t\t\t// non-root endpoint\n\t\t\t\t&& !!other.endpoint\n\t\t\t\t// same property and key\n\t\t\t\t&& other.property === valueId.property\n\t\t\t\t&& other.propertyKey === valueId.propertyKey,\n\t\t);\n\t\treturn valueExistsOnAnotherEndpoint;\n\t};\n\n\treturn allValueIds.filter(\n\t\t(vid) => !shouldHideRootValueID(vid, allValueIds),\n\t);\n}\n\n/** Returns a list of all value names that are defined on all endpoints of this node */\nexport function getDefinedValueIDs(\n\tctx:\n\t\t& HostIDs\n\t\t& GetValueDB\n\t\t& GetDeviceConfig\n\t\t& GetSupportedCCVersion\n\t\t& GetNode<\n\t\t\tNodeId & GetEndpoint<EndpointId & SupportsCC & ControlsCC>\n\t\t>,\n\tnode:\n\t\t& NodeId\n\t\t& SupportsCC\n\t\t& ControlsCC\n\t\t& GetEndpoint<EndpointId & SupportsCC & ControlsCC>,\n): TranslatedValueID[] {\n\treturn getDefinedValueIDsInternal(ctx, node, false);\n}\n\n/**\n * @internal\n * Returns a list of all value names that are defined on all endpoints of this node\n */\nexport function getDefinedValueIDsInternal(\n\tctx:\n\t\t& HostIDs\n\t\t& GetValueDB\n\t\t& GetDeviceConfig\n\t\t& GetSupportedCCVersion\n\t\t& GetNode<\n\t\t\tNodeId & GetEndpoint<EndpointId & SupportsCC & ControlsCC>\n\t\t>,\n\tnode:\n\t\t& NodeId\n\t\t& SupportsCC\n\t\t& ControlsCC\n\t\t& GetEndpoint<EndpointId & SupportsCC & ControlsCC>,\n\tincludeInternal: boolean = false,\n): TranslatedValueID[] {\n\t// The controller has no values. Even if some ended up in the cache somehow, do not return any.\n\tif (node.id === ctx.ownNodeId) return [];\n\n\tlet ret: ValueID[] = [];\n\tconst allowControlled: CommandClasses[] = [\n\t\tCommandClasses[\"Scene Activation\"],\n\t];\n\tfor (\n\t\tconst endpoint of getAllEndpoints<EndpointId & SupportsCC & ControlsCC>(\n\t\t\tctx,\n\t\t\tnode,\n\t\t)\n\t) {\n\t\tfor (const cc of allCCs) {\n\t\t\tif (\n\t\t\t\t// Create values only for supported CCs\n\t\t\t\tendpoint.supportsCC(cc)\n\t\t\t\t// ...and some controlled CCs\n\t\t\t\t|| (endpoint.controlsCC(cc) && allowControlled.includes(cc))\n\t\t\t\t// ...and possibly Basic CC, which has some extra checks to know\n\t\t\t\t// whether values should be exposed\n\t\t\t\t|| cc === CommandClasses.Basic\n\t\t\t) {\n\t\t\t\tconst ccInstance = CommandClass.createInstanceUnchecked(\n\t\t\t\t\tendpoint,\n\t\t\t\t\tcc,\n\t\t\t\t);\n\t\t\t\tif (ccInstance) {\n\t\t\t\t\tret.push(\n\t\t\t\t\t\t...ccInstance.getDefinedValueIDs(\n\t\t\t\t\t\t\tctx,\n\t\t\t\t\t\t\tincludeInternal,\n\t\t\t\t\t\t),\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\t// Application command classes of the Root Device capabilities that are also advertised by at\n\t// least one End Point SHOULD be filtered out by controlling nodes before presenting the functionalities\n\t// via service discovery mechanisms like mDNS or to users in a GUI.\n\n\t// We do this when there are endpoints that were explicitly preserved\n\tif (shouldHideRootApplicationCCValues(ctx, node.id)) {\n\t\tret = filterRootApplicationCCValueIDs(ret);\n\t}\n\n\t// Translate the remaining value IDs before exposing them to applications\n\treturn ret.map((id) => translateValueID(ctx, node, id));\n}\n"],
|
|
5
|
-
"mappings": "
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["allValueIds"]
|
|
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 });
|
|
@@ -23,6 +24,7 @@ __export(deviceConfig_exports, {
|
|
|
23
24
|
module.exports = __toCommonJS(deviceConfig_exports);
|
|
24
25
|
async function reportMissingDeviceConfig(_ctx, _node) {
|
|
25
26
|
}
|
|
27
|
+
__name(reportMissingDeviceConfig, "reportMissingDeviceConfig");
|
|
26
28
|
// Annotate the CommonJS export names for ESM import in node:
|
|
27
29
|
0 && (module.exports = {
|
|
28
30
|
reportMissingDeviceConfig
|
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/lib/telemetry/deviceConfig.ts"],
|
|
4
4
|
"sourcesContent": ["// import got from \"@esm2cjs/got\";\n// import { AssociationGroupInfoCC, ConfigurationCC } from \"@zwave-js/cc\";\n// import { CommandClasses } from \"@zwave-js/core\";\n// import { formatId } from \"@zwave-js/shared\";\n// import { isObject } from \"alcalzone-shared/typeguards\";\nimport type { ZWaveNode } from \"../node/Node.js\";\n\n// const missingDeviceConfigCache = new Set<string>();\n\nexport async function reportMissingDeviceConfig(\n\t_ctx: any,\n\t_node: ZWaveNode & {\n\t\tmanufacturerId: number;\n\t\tproductType: number;\n\t\tproductId: number;\n\t\tfirmwareVersion: string;\n\t},\n): Promise<void> {\n\t// TODO: Actually do something\n\t// We removed Sentry as it wasn't really useful\n\n\t// const configFingerprint = `${formatId(node.manufacturerId)}:${\n\t// \tformatId(\n\t// \t\tnode.productType,\n\t// \t)\n\t// }:${formatId(node.productId)}:${node.firmwareVersion}`;\n\n\t// // We used to get a LOT of false positives, so we should check with our device\n\t// // database whether this config file is actually unknown\n\n\t// // If we tried to report this file earlier, we can skip the report\n\t// if (missingDeviceConfigCache.has(configFingerprint)) return;\n\t// // Otherwise ask our device DB if it exists\n\t// const { got } = await import(\"got\");\n\t// try {\n\t// \tconst data = await got\n\t// \t\t.get(\n\t// \t\t\t`https://devices.zwave-js.io/public_api/getdeviceinfo/${configFingerprint.replace(\n\t// \t\t\t\t/:/g,\n\t// \t\t\t\t\"/\",\n\t// \t\t\t)}`,\n\t// \t\t)\n\t// \t\t.json();\n\n\t// \tif (\n\t// \t\tisObject(data)\n\t// \t\t&& typeof data.deviceFound === \"boolean\"\n\t// \t\t&& data.deviceFound\n\t// \t) {\n\t// \t\t// This is a false positive - remember it\n\t// \t\tmissingDeviceConfigCache.add(configFingerprint);\n\t// \t\treturn;\n\t// \t}\n\t// } catch (e) {\n\t// \t// didn't work, try again next time\n\t// \treturn;\n\t// }\n\n\t// const message = `Missing device config: ${configFingerprint}`;\n\n\t// const deviceInfo: Record<string, any> = {\n\t// \tsupportsConfigCCV3:\n\t// \t\tnode.getCCVersion(CommandClasses.Configuration) >= 3,\n\t// \tsupportsAGI: node.supportsCC(\n\t// \t\tCommandClasses[\"Association Group Information\"],\n\t// \t),\n\t// \tsupportsZWavePlus: node.supportsCC(CommandClasses[\"Z-Wave Plus Info\"]),\n\t// };\n\t// try {\n\t// \tif (deviceInfo.supportsConfigCCV3) {\n\t// \t\t// Try to collect all info about config params we can get\n\t// \t\tconst instance = node.createCCInstanceUnsafe(ConfigurationCC)!;\n\t// \t\tdeviceInfo.parameters = instance.getQueriedParamInfos(applHost);\n\t// \t}\n\t// \tif (deviceInfo.supportsAGI) {\n\t// \t\t// Try to collect all info about association groups we can get\n\t// \t\tconst associationGroupCount = AssociationGroupInfoCC[\n\t// \t\t\t\"getAssociationGroupCountCached\"\n\t// \t\t](applHost, node);\n\t// \t\tconst names: string[] = [];\n\t// \t\tfor (let group = 1; group <= associationGroupCount; group++) {\n\t// \t\t\tnames.push(\n\t// \t\t\t\tAssociationGroupInfoCC.getGroupNameCached(\n\t// \t\t\t\t\tapplHost,\n\t// \t\t\t\t\tnode,\n\t// \t\t\t\t\tgroup,\n\t// \t\t\t\t) ?? \"\",\n\t// \t\t\t);\n\t// \t\t}\n\t// \t\tdeviceInfo.associationGroups = names;\n\t// \t}\n\t// \tif (deviceInfo.supportsZWavePlus) {\n\t// \t\tdeviceInfo.zWavePlusVersion = node.zwavePlusVersion;\n\t// \t}\n\t// } catch {\n\t// \t// Don't fail on the last meters :)\n\t// }\n\n\t// // TODO: Actually report somewhere\n\n\t// // Remember that we reported the config\n\t// missingDeviceConfigCache.add(configFingerprint);\n}\n"],
|
|
5
|
-
"mappings": "
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;AAOA;;;;;AAEA,eAAsB,0BACrB,MACA,OAKC;AAsFF;AA7FsB;",
|
|
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 });
|
|
@@ -52,6 +53,7 @@ async function compileStatistics(driver, appInfo) {
|
|
|
52
53
|
}))
|
|
53
54
|
};
|
|
54
55
|
}
|
|
56
|
+
__name(compileStatistics, "compileStatistics");
|
|
55
57
|
async function sendStatistics(statistics) {
|
|
56
58
|
const { got } = await import("got");
|
|
57
59
|
try {
|
|
@@ -74,6 +76,7 @@ async function sendStatistics(statistics) {
|
|
|
74
76
|
return false;
|
|
75
77
|
}
|
|
76
78
|
}
|
|
79
|
+
__name(sendStatistics, "sendStatistics");
|
|
77
80
|
// Annotate the CommonJS export names for ESM import in node:
|
|
78
81
|
0 && (module.exports = {
|
|
79
82
|
compileStatistics,
|
|
@@ -2,6 +2,6 @@
|
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../../../../src/lib/telemetry/statistics.ts"],
|
|
4
4
|
"sourcesContent": ["import { digest } from \"@zwave-js/core\";\nimport { Bytes, formatId } from \"@zwave-js/shared\";\nimport { isObject } from \"alcalzone-shared/typeguards\";\nimport type { Driver } from \"../driver/Driver.js\";\n\nconst apiToken = \"ef58278d935ccb26307800279458484d\";\nconst statisticsUrl = `https://stats.zwave-js.io/statistics`;\n\nexport interface AppInfo {\n\tdriverVersion: string;\n\tapplicationName: string;\n\tapplicationVersion: string;\n\tnodeVersion: string;\n\tos: NodeJS.Platform;\n\tarch: string;\n}\n\nexport async function compileStatistics(\n\tdriver: Driver,\n\tappInfo: AppInfo,\n): Promise<Record<string, any>> {\n\t// Salt and hash the homeId, so it cannot easily be tracked\n\t// It is no state secret, but since we're collecting it, make sure it is anonymous\n\tconst salt = await driver.getUUID();\n\tconst hashInput = Bytes.from(driver.controller.homeId!.toString(16) + salt);\n\tconst hash = Bytes.view(await digest(\"sha-256\", hashInput)).toString(\"hex\");\n\n\treturn {\n\t\tid: hash,\n\t\t...appInfo,\n\t\tdevices: [...driver.controller.nodes.values()].map((node) => ({\n\t\t\tmanufacturerId: node.manufacturerId != undefined\n\t\t\t\t? formatId(node.manufacturerId)\n\t\t\t\t: \"\",\n\t\t\tproductType: node.productType != undefined\n\t\t\t\t? formatId(node.productType)\n\t\t\t\t: \"\",\n\t\t\tproductId: node.productId != undefined\n\t\t\t\t? formatId(node.productId)\n\t\t\t\t: \"\",\n\t\t\tfirmwareVersion: node.firmwareVersion ?? \"\",\n\t\t})),\n\t};\n}\n\n/**\n * Sends the statistics to the statistics backend. Returns:\n * - `true` when sending succeeded\n * - The number of seconds to wait before trying again when hitting the rate limiter\n * - `false` for any other errors\n */\nexport async function sendStatistics(\n\tstatistics: Record<string, any>,\n): Promise<boolean | number> {\n\tconst { got } = await import(\"got\");\n\n\ttry {\n\t\tconst data = await got\n\t\t\t.post(statisticsUrl, {\n\t\t\t\tjson: { data: [statistics] },\n\t\t\t\theaders: { \"x-api-token\": apiToken },\n\t\t\t})\n\t\t\t.json();\n\t\tif (isObject(data) && typeof data.success === \"boolean\") {\n\t\t\treturn data.success;\n\t\t}\n\t\treturn false;\n\t} catch (e: any) {\n\t\tif (isObject(e.response) && e.response.status === 429) {\n\t\t\t// We've hit the rate limiter. Figure out when we may try again.\n\t\t\tif (\n\t\t\t\tisObject(e.response.headers)\n\t\t\t\t&& \"retry-after\" in e.response.headers\n\t\t\t) {\n\t\t\t\tconst retryAfter = parseInt(e.response.headers[\"retry-after\"]);\n\t\t\t\tif (Number.isInteger(retryAfter)) return retryAfter;\n\t\t\t}\n\t\t}\n\t\t// didn't work, try again later\n\t\treturn false;\n\t}\n}\n"],
|
|
5
|
-
"mappings": "
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;;;;AAAA,kBAAuB;AACvB,oBAAgC;AAChC,wBAAyB;AAGzB,MAAM,WAAW;AACjB,MAAM,gBAAgB;AAWtB,eAAsB,kBACrB,QACA,SAAgB;AAIhB,QAAM,OAAO,MAAM,OAAO,QAAO;AACjC,QAAM,YAAY,oBAAM,KAAK,OAAO,WAAW,OAAQ,SAAS,EAAE,IAAI,IAAI;AAC1E,QAAM,OAAO,oBAAM,KAAK,UAAM,oBAAO,WAAW,SAAS,CAAC,EAAE,SAAS,KAAK;AAE1E,SAAO;IACN,IAAI;IACJ,GAAG;IACH,SAAS,CAAC,GAAG,OAAO,WAAW,MAAM,OAAM,CAAE,EAAE,IAAI,CAAC,UAAU;MAC7D,gBAAgB,KAAK,kBAAkB,aACpC,wBAAS,KAAK,cAAc,IAC5B;MACH,aAAa,KAAK,eAAe,aAC9B,wBAAS,KAAK,WAAW,IACzB;MACH,WAAW,KAAK,aAAa,aAC1B,wBAAS,KAAK,SAAS,IACvB;MACH,iBAAiB,KAAK,mBAAmB;MACxC;;AAEJ;AA1BsB;AAkCtB,eAAsB,eACrB,YAA+B;AAE/B,QAAM,EAAE,IAAG,IAAK,MAAM,OAAO,KAAK;AAElC,MAAI;AACH,UAAM,OAAO,MAAM,IACjB,KAAK,eAAe;MACpB,MAAM,EAAE,MAAM,CAAC,UAAU,EAAC;MAC1B,SAAS,EAAE,eAAe,SAAQ;KAClC,EACA,KAAI;AACN,YAAI,4BAAS,IAAI,KAAK,OAAO,KAAK,YAAY,WAAW;AACxD,aAAO,KAAK;IACb;AACA,WAAO;EACR,SAAS,GAAQ;AAChB,YAAI,4BAAS,EAAE,QAAQ,KAAK,EAAE,SAAS,WAAW,KAAK;AAEtD,cACC,4BAAS,EAAE,SAAS,OAAO,KACxB,iBAAiB,EAAE,SAAS,SAC9B;AACD,cAAM,aAAa,SAAS,EAAE,SAAS,QAAQ,aAAa,CAAC;AAC7D,YAAI,OAAO,UAAU,UAAU;AAAG,iBAAO;MAC1C;IACD;AAEA,WAAO;EACR;AACD;AA9BsB;",
|
|
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 });
|
|
@@ -60,6 +61,7 @@ function getChannelConfiguration(region) {
|
|
|
60
61
|
return "1/2";
|
|
61
62
|
}
|
|
62
63
|
}
|
|
64
|
+
__name(getChannelConfiguration, "getChannelConfiguration");
|
|
63
65
|
function longRangeBeamPowerToDBm(power) {
|
|
64
66
|
return [
|
|
65
67
|
-6,
|
|
@@ -80,9 +82,11 @@ function longRangeBeamPowerToDBm(power) {
|
|
|
80
82
|
30
|
|
81
83
|
][power];
|
|
82
84
|
}
|
|
85
|
+
__name(longRangeBeamPowerToDBm, "longRangeBeamPowerToDBm");
|
|
83
86
|
function formatNodeId(nodeId) {
|
|
84
87
|
return nodeId.toString().padStart(3, "0");
|
|
85
88
|
}
|
|
89
|
+
__name(formatNodeId, "formatNodeId");
|
|
86
90
|
function formatRoute(source, repeaters, destination, direction, currentHop, failedHop) {
|
|
87
91
|
return [
|
|
88
92
|
direction === "outbound" ? formatNodeId(source) : formatNodeId(destination),
|
|
@@ -99,6 +103,7 @@ function formatRoute(source, repeaters, destination, direction, currentHop, fail
|
|
|
99
103
|
return (direction === "outbound" ? " \u203A " : " \u2039 ") + id;
|
|
100
104
|
}).join("");
|
|
101
105
|
}
|
|
106
|
+
__name(formatRoute, "formatRoute");
|
|
102
107
|
function parseMPDU(frame) {
|
|
103
108
|
switch (frame.channel) {
|
|
104
109
|
case 0:
|
|
@@ -111,7 +116,11 @@ function parseMPDU(frame) {
|
|
|
111
116
|
import_core.validatePayload.fail(`Unsupported channel ${frame.channel}. MPDU payload: ${(0, import_shared.buffer2hex)(frame.payload)}`);
|
|
112
117
|
}
|
|
113
118
|
}
|
|
119
|
+
__name(parseMPDU, "parseMPDU");
|
|
114
120
|
class LongRangeMPDU {
|
|
121
|
+
static {
|
|
122
|
+
__name(this, "LongRangeMPDU");
|
|
123
|
+
}
|
|
115
124
|
constructor(options) {
|
|
116
125
|
const data = options.data;
|
|
117
126
|
this.frameInfo = options.frameInfo;
|
|
@@ -200,6 +209,9 @@ class LongRangeMPDU {
|
|
|
200
209
|
}
|
|
201
210
|
}
|
|
202
211
|
class SinglecastLongRangeMPDU extends LongRangeMPDU {
|
|
212
|
+
static {
|
|
213
|
+
__name(this, "SinglecastLongRangeMPDU");
|
|
214
|
+
}
|
|
203
215
|
toLogEntry() {
|
|
204
216
|
const { tags, message: original } = super.toLogEntry();
|
|
205
217
|
const message = {
|
|
@@ -213,6 +225,9 @@ class SinglecastLongRangeMPDU extends LongRangeMPDU {
|
|
|
213
225
|
}
|
|
214
226
|
}
|
|
215
227
|
class AckLongRangeMPDU extends LongRangeMPDU {
|
|
228
|
+
static {
|
|
229
|
+
__name(this, "AckLongRangeMPDU");
|
|
230
|
+
}
|
|
216
231
|
constructor(options) {
|
|
217
232
|
super(options);
|
|
218
233
|
this.incomingRSSI = (0, import_serialapi.parseRSSI)(this.payload, 0);
|
|
@@ -235,6 +250,9 @@ class AckLongRangeMPDU extends LongRangeMPDU {
|
|
|
235
250
|
}
|
|
236
251
|
}
|
|
237
252
|
class ZWaveMPDU {
|
|
253
|
+
static {
|
|
254
|
+
__name(this, "ZWaveMPDU");
|
|
255
|
+
}
|
|
238
256
|
constructor(options) {
|
|
239
257
|
const data = options.data;
|
|
240
258
|
this.frameInfo = options.frameInfo;
|
|
@@ -321,6 +339,9 @@ class ZWaveMPDU {
|
|
|
321
339
|
}
|
|
322
340
|
}
|
|
323
341
|
class SinglecastZWaveMPDU extends ZWaveMPDU {
|
|
342
|
+
static {
|
|
343
|
+
__name(this, "SinglecastZWaveMPDU");
|
|
344
|
+
}
|
|
324
345
|
constructor(options) {
|
|
325
346
|
super(options);
|
|
326
347
|
this.destinationNodeId = this.destinationBuffer[0];
|
|
@@ -348,6 +369,9 @@ class SinglecastZWaveMPDU extends ZWaveMPDU {
|
|
|
348
369
|
}
|
|
349
370
|
}
|
|
350
371
|
class AckZWaveMPDU extends ZWaveMPDU {
|
|
372
|
+
static {
|
|
373
|
+
__name(this, "AckZWaveMPDU");
|
|
374
|
+
}
|
|
351
375
|
constructor(options) {
|
|
352
376
|
super(options);
|
|
353
377
|
this.destinationNodeId = this.destinationBuffer[0];
|
|
@@ -371,6 +395,9 @@ class AckZWaveMPDU extends ZWaveMPDU {
|
|
|
371
395
|
}
|
|
372
396
|
}
|
|
373
397
|
class RoutedZWaveMPDU extends ZWaveMPDU {
|
|
398
|
+
static {
|
|
399
|
+
__name(this, "RoutedZWaveMPDU");
|
|
400
|
+
}
|
|
374
401
|
constructor(options) {
|
|
375
402
|
super(options);
|
|
376
403
|
const channelConfig = getChannelConfiguration(this.frameInfo.region);
|
|
@@ -437,6 +464,9 @@ class RoutedZWaveMPDU extends ZWaveMPDU {
|
|
|
437
464
|
}
|
|
438
465
|
}
|
|
439
466
|
class MulticastZWaveMPDU extends ZWaveMPDU {
|
|
467
|
+
static {
|
|
468
|
+
__name(this, "MulticastZWaveMPDU");
|
|
469
|
+
}
|
|
440
470
|
constructor(options) {
|
|
441
471
|
super(options);
|
|
442
472
|
const control = this.destinationBuffer[0];
|
|
@@ -459,6 +489,9 @@ class MulticastZWaveMPDU extends ZWaveMPDU {
|
|
|
459
489
|
}
|
|
460
490
|
}
|
|
461
491
|
class ExplorerZWaveMPDU extends ZWaveMPDU {
|
|
492
|
+
static {
|
|
493
|
+
__name(this, "ExplorerZWaveMPDU");
|
|
494
|
+
}
|
|
462
495
|
constructor(options) {
|
|
463
496
|
super(options);
|
|
464
497
|
this.version = this.payload[0] >>> 5;
|
|
@@ -490,6 +523,9 @@ class ExplorerZWaveMPDU extends ZWaveMPDU {
|
|
|
490
523
|
repeaters;
|
|
491
524
|
}
|
|
492
525
|
class NormalExplorerZWaveMPDU extends ExplorerZWaveMPDU {
|
|
526
|
+
static {
|
|
527
|
+
__name(this, "NormalExplorerZWaveMPDU");
|
|
528
|
+
}
|
|
493
529
|
constructor(options) {
|
|
494
530
|
super(options);
|
|
495
531
|
}
|
|
@@ -516,6 +552,9 @@ class NormalExplorerZWaveMPDU extends ExplorerZWaveMPDU {
|
|
|
516
552
|
}
|
|
517
553
|
}
|
|
518
554
|
class InclusionRequestExplorerZWaveMPDU extends ExplorerZWaveMPDU {
|
|
555
|
+
static {
|
|
556
|
+
__name(this, "InclusionRequestExplorerZWaveMPDU");
|
|
557
|
+
}
|
|
519
558
|
constructor(options) {
|
|
520
559
|
super(options);
|
|
521
560
|
this.networkHomeId = this.payload.readUInt32BE(0);
|
|
@@ -546,6 +585,9 @@ class InclusionRequestExplorerZWaveMPDU extends ExplorerZWaveMPDU {
|
|
|
546
585
|
}
|
|
547
586
|
}
|
|
548
587
|
class SearchResultExplorerZWaveMPDU extends ExplorerZWaveMPDU {
|
|
588
|
+
static {
|
|
589
|
+
__name(this, "SearchResultExplorerZWaveMPDU");
|
|
590
|
+
}
|
|
549
591
|
constructor(options) {
|
|
550
592
|
super(options);
|
|
551
593
|
this.searchingNodeId = this.payload[0];
|
|
@@ -615,7 +657,11 @@ function parseBeamFrame(frame) {
|
|
|
615
657
|
);
|
|
616
658
|
}
|
|
617
659
|
}
|
|
660
|
+
__name(parseBeamFrame, "parseBeamFrame");
|
|
618
661
|
class ZWaveBeamStart {
|
|
662
|
+
static {
|
|
663
|
+
__name(this, "ZWaveBeamStart");
|
|
664
|
+
}
|
|
619
665
|
constructor(options) {
|
|
620
666
|
const data = options.data;
|
|
621
667
|
this.frameInfo = options.frameInfo;
|
|
@@ -658,6 +704,9 @@ class ZWaveBeamStart {
|
|
|
658
704
|
}
|
|
659
705
|
}
|
|
660
706
|
class LongRangeBeamStart {
|
|
707
|
+
static {
|
|
708
|
+
__name(this, "LongRangeBeamStart");
|
|
709
|
+
}
|
|
661
710
|
constructor(options) {
|
|
662
711
|
const data = options.data;
|
|
663
712
|
this.frameInfo = options.frameInfo;
|
|
@@ -702,6 +751,9 @@ class LongRangeBeamStart {
|
|
|
702
751
|
}
|
|
703
752
|
}
|
|
704
753
|
class BeamStop {
|
|
754
|
+
static {
|
|
755
|
+
__name(this, "BeamStop");
|
|
756
|
+
}
|
|
705
757
|
constructor(options) {
|
|
706
758
|
this.frameInfo = options.frameInfo;
|
|
707
759
|
}
|
|
@@ -727,6 +779,7 @@ function mpduToFrame(mpdu, payloadCC) {
|
|
|
727
779
|
}
|
|
728
780
|
throw new import_core.ZWaveError(`mpduToFrame not supported for ${mpdu.constructor.name}`, import_core.ZWaveErrorCodes.Argument_Invalid);
|
|
729
781
|
}
|
|
782
|
+
__name(mpduToFrame, "mpduToFrame");
|
|
730
783
|
function mpduToZWaveFrame(mpdu, payloadCC) {
|
|
731
784
|
const retBase = {
|
|
732
785
|
protocol: import_core.Protocols.ZWave,
|
|
@@ -822,6 +875,7 @@ function mpduToZWaveFrame(mpdu, payloadCC) {
|
|
|
822
875
|
}
|
|
823
876
|
throw new import_core.ZWaveError(`mpduToZWaveFrame not supported for ${mpdu.constructor.name}`, import_core.ZWaveErrorCodes.Argument_Invalid);
|
|
824
877
|
}
|
|
878
|
+
__name(mpduToZWaveFrame, "mpduToZWaveFrame");
|
|
825
879
|
function mpduToLongRangeFrame(mpdu, payloadCC) {
|
|
826
880
|
const retBase = {
|
|
827
881
|
protocol: import_core.Protocols.ZWaveLongRange,
|
|
@@ -866,6 +920,7 @@ function mpduToLongRangeFrame(mpdu, payloadCC) {
|
|
|
866
920
|
}
|
|
867
921
|
throw new import_core.ZWaveError(`mpduToLongRangeFrame not supported for ${mpdu.constructor.name}`, import_core.ZWaveErrorCodes.Argument_Invalid);
|
|
868
922
|
}
|
|
923
|
+
__name(mpduToLongRangeFrame, "mpduToLongRangeFrame");
|
|
869
924
|
function beamToFrame(beam) {
|
|
870
925
|
const retBase = {
|
|
871
926
|
channel: beam.frameInfo.channel,
|
|
@@ -908,6 +963,7 @@ function beamToFrame(beam) {
|
|
|
908
963
|
}
|
|
909
964
|
}
|
|
910
965
|
}
|
|
966
|
+
__name(beamToFrame, "beamToFrame");
|
|
911
967
|
function znifferDataMessageToCorruptedFrame(msg, rssi) {
|
|
912
968
|
if (msg.checksumOK) {
|
|
913
969
|
throw new import_core.ZWaveError(`znifferDataMessageToCorruptedFrame expects the checksum to be incorrect`, import_core.ZWaveErrorCodes.Argument_Invalid);
|
|
@@ -921,6 +977,7 @@ function znifferDataMessageToCorruptedFrame(msg, rssi) {
|
|
|
921
977
|
payload: msg.payload
|
|
922
978
|
};
|
|
923
979
|
}
|
|
980
|
+
__name(znifferDataMessageToCorruptedFrame, "znifferDataMessageToCorruptedFrame");
|
|
924
981
|
// Annotate the CommonJS export names for ESM import in node:
|
|
925
982
|
0 && (module.exports = {
|
|
926
983
|
AckLongRangeMPDU,
|