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.
Files changed (122) hide show
  1. package/build/cjs/lib/_version.d.ts +1 -1
  2. package/build/cjs/lib/_version.js +1 -1
  3. package/build/cjs/lib/_version.js.map +1 -1
  4. package/build/cjs/lib/controller/Controller.js +66 -60
  5. package/build/cjs/lib/controller/Controller.js.map +1 -1
  6. package/build/cjs/lib/controller/ControllerStatistics.js +4 -0
  7. package/build/cjs/lib/controller/ControllerStatistics.js.map +1 -1
  8. package/build/cjs/lib/controller/FirmwareUpdateService.js +8 -0
  9. package/build/cjs/lib/controller/FirmwareUpdateService.js.map +1 -1
  10. package/build/cjs/lib/controller/MockControllerBehaviors.js +3 -0
  11. package/build/cjs/lib/controller/MockControllerBehaviors.js.map +1 -1
  12. package/build/cjs/lib/controller/NVMIO.js +7 -0
  13. package/build/cjs/lib/controller/NVMIO.js.map +1 -1
  14. package/build/cjs/lib/controller/NodeInformationFrame.js +2 -0
  15. package/build/cjs/lib/controller/NodeInformationFrame.js.map +1 -1
  16. package/build/cjs/lib/controller/ZWaveSDKVersions.js +3 -0
  17. package/build/cjs/lib/controller/ZWaveSDKVersions.js.map +1 -1
  18. package/build/cjs/lib/controller/utils.js +4 -0
  19. package/build/cjs/lib/controller/utils.js.map +1 -1
  20. package/build/cjs/lib/driver/Bootloader.js +4 -0
  21. package/build/cjs/lib/driver/Bootloader.js.map +1 -1
  22. package/build/cjs/lib/driver/Driver.js +63 -56
  23. package/build/cjs/lib/driver/Driver.js.map +1 -1
  24. package/build/cjs/lib/driver/DriverMock.js +6 -3
  25. package/build/cjs/lib/driver/DriverMock.js.map +1 -1
  26. package/build/cjs/lib/driver/MessageGenerators.js +26 -18
  27. package/build/cjs/lib/driver/MessageGenerators.js.map +1 -1
  28. package/build/cjs/lib/driver/NetworkCache.js +43 -23
  29. package/build/cjs/lib/driver/NetworkCache.js.map +1 -1
  30. package/build/cjs/lib/driver/Queue.js +6 -2
  31. package/build/cjs/lib/driver/Queue.js.map +1 -1
  32. package/build/cjs/lib/driver/SerialAPICommandMachine.js +45 -40
  33. package/build/cjs/lib/driver/SerialAPICommandMachine.js.map +1 -1
  34. package/build/cjs/lib/driver/StateMachineShared.js +5 -0
  35. package/build/cjs/lib/driver/StateMachineShared.js.map +1 -1
  36. package/build/cjs/lib/driver/Statistics.js +4 -0
  37. package/build/cjs/lib/driver/Statistics.js.map +1 -1
  38. package/build/cjs/lib/driver/Task.js +9 -2
  39. package/build/cjs/lib/driver/Task.js.map +1 -1
  40. package/build/cjs/lib/driver/Transaction.js +8 -4
  41. package/build/cjs/lib/driver/Transaction.js.map +1 -1
  42. package/build/cjs/lib/driver/TransportServiceMachine.js +9 -7
  43. package/build/cjs/lib/driver/TransportServiceMachine.js.map +1 -1
  44. package/build/cjs/lib/driver/UpdateConfig.js +8 -4
  45. package/build/cjs/lib/driver/UpdateConfig.js.map +1 -1
  46. package/build/cjs/lib/driver/UserAgent.js +4 -0
  47. package/build/cjs/lib/driver/UserAgent.js.map +1 -1
  48. package/build/cjs/lib/driver/mDNSDiscovery.js +2 -0
  49. package/build/cjs/lib/driver/mDNSDiscovery.js.map +1 -1
  50. package/build/cjs/lib/log/Driver.js +6 -2
  51. package/build/cjs/lib/log/Driver.js.map +1 -1
  52. package/build/cjs/lib/log/Zniffer.js +6 -2
  53. package/build/cjs/lib/log/Zniffer.js.map +1 -1
  54. package/build/cjs/lib/node/DeviceClass.js +4 -0
  55. package/build/cjs/lib/node/DeviceClass.js.map +1 -1
  56. package/build/cjs/lib/node/Endpoint.js +9 -5
  57. package/build/cjs/lib/node/Endpoint.js.map +1 -1
  58. package/build/cjs/lib/node/HealthCheck.js +6 -0
  59. package/build/cjs/lib/node/HealthCheck.js.map +1 -1
  60. package/build/cjs/lib/node/MockNodeBehaviors.js +2 -0
  61. package/build/cjs/lib/node/MockNodeBehaviors.js.map +1 -1
  62. package/build/cjs/lib/node/MultiCCAPIWrapper.js +10 -8
  63. package/build/cjs/lib/node/MultiCCAPIWrapper.js.map +1 -1
  64. package/build/cjs/lib/node/Node.js +51 -46
  65. package/build/cjs/lib/node/Node.js.map +1 -1
  66. package/build/cjs/lib/node/NodeReadyMachine.js +3 -1
  67. package/build/cjs/lib/node/NodeReadyMachine.js.map +1 -1
  68. package/build/cjs/lib/node/NodeStatistics.js +5 -0
  69. package/build/cjs/lib/node/NodeStatistics.js.map +1 -1
  70. package/build/cjs/lib/node/NodeStatusMachine.js +5 -2
  71. package/build/cjs/lib/node/NodeStatusMachine.js.map +1 -1
  72. package/build/cjs/lib/node/VirtualEndpoint.js +8 -4
  73. package/build/cjs/lib/node/VirtualEndpoint.js.map +1 -1
  74. package/build/cjs/lib/node/VirtualNode.js +7 -2
  75. package/build/cjs/lib/node/VirtualNode.js.map +1 -1
  76. package/build/cjs/lib/node/mixins/00_Base.js +4 -0
  77. package/build/cjs/lib/node/mixins/00_Base.js.map +1 -1
  78. package/build/cjs/lib/node/mixins/01_NetworkRole.js +4 -0
  79. package/build/cjs/lib/node/mixins/01_NetworkRole.js.map +1 -1
  80. package/build/cjs/lib/node/mixins/05_Security.js +7 -3
  81. package/build/cjs/lib/node/mixins/05_Security.js.map +1 -1
  82. package/build/cjs/lib/node/mixins/10_Events.js +4 -0
  83. package/build/cjs/lib/node/mixins/10_Events.js.map +1 -1
  84. package/build/cjs/lib/node/mixins/20_Status.js +4 -0
  85. package/build/cjs/lib/node/mixins/20_Status.js.map +1 -1
  86. package/build/cjs/lib/node/mixins/30_Wakeup.js +4 -0
  87. package/build/cjs/lib/node/mixins/30_Wakeup.js.map +1 -1
  88. package/build/cjs/lib/node/mixins/40_Values.js +4 -0
  89. package/build/cjs/lib/node/mixins/40_Values.js.map +1 -1
  90. package/build/cjs/lib/node/mixins/50_Endpoints.js +4 -0
  91. package/build/cjs/lib/node/mixins/50_Endpoints.js.map +1 -1
  92. package/build/cjs/lib/node/mixins/60_ScheduledPoll.js +4 -0
  93. package/build/cjs/lib/node/mixins/60_ScheduledPoll.js.map +1 -1
  94. package/build/cjs/lib/node/mixins/70_FirmwareUpdate.js +8 -3
  95. package/build/cjs/lib/node/mixins/70_FirmwareUpdate.js.map +1 -1
  96. package/build/cjs/lib/node/mixins/index.js +4 -0
  97. package/build/cjs/lib/node/mixins/index.js.map +1 -1
  98. package/build/cjs/lib/node/mockCCBehaviors/ColorSwitch.js +2 -1
  99. package/build/cjs/lib/node/mockCCBehaviors/ColorSwitch.js.map +1 -1
  100. package/build/cjs/lib/node/mockCCBehaviors/Configuration.js +2 -1
  101. package/build/cjs/lib/node/mockCCBehaviors/Configuration.js.map +1 -1
  102. package/build/cjs/lib/node/mockCCBehaviors/ScheduleEntryLock.js +2 -1
  103. package/build/cjs/lib/node/mockCCBehaviors/ScheduleEntryLock.js.map +1 -1
  104. package/build/cjs/lib/node/mockCCBehaviors/ThermostatSetpoint.js +3 -2
  105. package/build/cjs/lib/node/mockCCBehaviors/ThermostatSetpoint.js.map +1 -1
  106. package/build/cjs/lib/node/mockCCBehaviors/UserCode.js +3 -2
  107. package/build/cjs/lib/node/mockCCBehaviors/UserCode.js.map +1 -1
  108. package/build/cjs/lib/node/utils.js +22 -2
  109. package/build/cjs/lib/node/utils.js.map +1 -1
  110. package/build/cjs/lib/telemetry/deviceConfig.js +2 -0
  111. package/build/cjs/lib/telemetry/deviceConfig.js.map +1 -1
  112. package/build/cjs/lib/telemetry/statistics.js +3 -0
  113. package/build/cjs/lib/telemetry/statistics.js.map +1 -1
  114. package/build/cjs/lib/zniffer/MPDU.js +57 -0
  115. package/build/cjs/lib/zniffer/MPDU.js.map +1 -1
  116. package/build/cjs/lib/zniffer/Zniffer.js +10 -3
  117. package/build/cjs/lib/zniffer/Zniffer.js.map +1 -1
  118. package/build/cjs/mockServer.js +14 -0
  119. package/build/cjs/mockServer.js.map +1 -1
  120. package/build/esm/lib/_version.d.ts +1 -1
  121. package/build/esm/lib/_version.js +1 -1
  122. package/package.json +12 -12
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/lib/zniffer/MPDU.ts"],
4
4
  "sourcesContent": ["import { type CommandClass } from \"@zwave-js/cc\";\nimport {\n\ttype BeamingInfo,\n\tMPDUHeaderType,\n\ttype MessageOrCCLogEntry,\n\ttype MessageRecord,\n\tNODE_ID_BROADCAST,\n\tNODE_ID_BROADCAST_LR,\n\tProtocols,\n\ttype RSSI,\n\tZWaveError,\n\tZWaveErrorCodes,\n\ttype ZnifferProtocolDataRate,\n\tZnifferRegion,\n\tparseNodeBitMask,\n\trssiToString,\n\tvalidatePayload,\n\tznifferProtocolDataRateToString,\n} from \"@zwave-js/core\";\nimport {\n\ttype ZnifferDataMessage,\n\ttype ZnifferFrameInfo,\n\tZnifferFrameType,\n} from \"@zwave-js/serial\";\nimport { parseRSSI } from \"@zwave-js/serial/serialapi\";\nimport {\n\ttype AllOrNone,\n\tBytes,\n\tbuffer2hex,\n\tpick,\n\tstaticExtends,\n} from \"@zwave-js/shared\";\nimport {\n\tExplorerFrameCommand,\n\tLongRangeFrameType,\n\tZWaveFrameType,\n} from \"./_Types.js\";\n\nfunction getChannelConfiguration(region: ZnifferRegion): \"1/2\" | \"3\" | \"4\" {\n\tswitch (region) {\n\t\tcase ZnifferRegion.Japan:\n\t\tcase ZnifferRegion.Korea:\n\t\t\treturn \"3\";\n\t\tcase ZnifferRegion[\"USA (Long Range)\"]:\n\t\tcase ZnifferRegion[\"USA (Long Range, backup)\"]:\n\t\tcase ZnifferRegion[\"USA (Long Range, end device)\"]:\n\t\t\treturn \"4\";\n\t\tdefault:\n\t\t\treturn \"1/2\";\n\t}\n}\n\nfunction longRangeBeamPowerToDBm(power: number): number {\n\treturn [\n\t\t-6,\n\t\t-2,\n\t\t2,\n\t\t6,\n\t\t10,\n\t\t13,\n\t\t16,\n\t\t19,\n\t\t21,\n\t\t23,\n\t\t25,\n\t\t26,\n\t\t27,\n\t\t28,\n\t\t29,\n\t\t30,\n\t][power];\n}\n\nfunction formatNodeId(nodeId: number): string {\n\treturn nodeId.toString().padStart(3, \"0\");\n}\n\nfunction formatRoute(\n\tsource: number,\n\trepeaters: readonly number[],\n\tdestination: number,\n\tdirection: \"outbound\" | \"inbound\",\n\tcurrentHop: number,\n\tfailedHop?: number,\n): string {\n\treturn [\n\t\tdirection === \"outbound\"\n\t\t\t? formatNodeId(source)\n\t\t\t: formatNodeId(destination),\n\t\t...repeaters.map(formatNodeId),\n\t\tdirection === \"outbound\"\n\t\t\t? formatNodeId(destination)\n\t\t\t: formatNodeId(source),\n\t].map((id, i) => {\n\t\tif (i === 0) return id;\n\t\tif (i - 1 === failedHop) return \" \u00D7 \" + id;\n\t\tif (i - 1 === currentHop) {\n\t\t\treturn (direction === \"outbound\" ? \" \u00BB \" : \" \u00AB \") + id;\n\t\t}\n\t\treturn (direction === \"outbound\" ? \" \u203A \" : \" \u2039 \") + id;\n\t})\n\t\t.join(\"\");\n}\n\nexport interface MPDUOptions {\n\tdata: Bytes;\n\tframeInfo: ZnifferFrameInfo;\n}\n\nexport interface MPDU {\n\tframeInfo: ZnifferFrameInfo;\n\thomeId: number;\n\tsourceNodeId: number;\n\tackRequested: boolean;\n\theaderType: MPDUHeaderType;\n\tsequenceNumber: number;\n\tpayload: Bytes;\n}\n\nexport function parseMPDU(\n\tframe: ZnifferDataMessage,\n): ZWaveMPDU | LongRangeMPDU {\n\tswitch (frame.channel) {\n\t\tcase 0:\n\t\tcase 1:\n\t\tcase 2:\n\t\t\treturn ZWaveMPDU.from(frame);\n\t\tcase 3:\n\t\t\treturn LongRangeMPDU.from(frame);\n\t\tdefault:\n\t\t\tvalidatePayload.fail(\n\t\t\t\t`Unsupported channel ${frame.channel}. MPDU payload: ${\n\t\t\t\t\tbuffer2hex(frame.payload)\n\t\t\t\t}`,\n\t\t\t);\n\t}\n}\n\nexport class LongRangeMPDU implements MPDU {\n\tpublic constructor(options: MPDUOptions) {\n\t\tconst data = options.data;\n\t\tthis.frameInfo = options.frameInfo;\n\n\t\tif (options.frameInfo.channel !== 3) {\n\t\t\tvalidatePayload.fail(\n\t\t\t\t`Unsupported channel ${options.frameInfo.channel} for LongRangeMPDU`,\n\t\t\t);\n\t\t}\n\n\t\tthis.homeId = data.readUInt32BE(0);\n\t\tconst nodeIds = data.readUIntBE(4, 3);\n\t\tthis.sourceNodeId = nodeIds >>> 12;\n\t\tthis.destinationNodeId = nodeIds & 0xfff;\n\n\t\t// skip length byte\n\n\t\tconst frameControl = data[8];\n\t\tthis.ackRequested = !!(frameControl & 0b1000_0000);\n\t\tconst hasExtendedHeader = !!(frameControl & 0b0100_0000);\n\t\tthis.headerType = frameControl & 0b0000_0111;\n\n\t\tthis.sequenceNumber = data[9];\n\t\tthis.noiseFloor = parseRSSI(data, 10);\n\t\tthis.txPower = data.readInt8(11);\n\n\t\tlet offset = 12;\n\t\tif (hasExtendedHeader) {\n\t\t\tconst extensionControl = data[offset++];\n\t\t\tconst extensionLength = extensionControl & 0b111;\n\t\t\t// const discardUnknown = extensionControl & 0b0000_1000;\n\t\t\t// const extensionType = (extensionControl & 0b0111_0000) >>> 4;\n\t\t\t// TODO: Parse extension (once there is a definition)\n\t\t\toffset += extensionLength;\n\t\t}\n\n\t\tconst Constructor = this.headerType === MPDUHeaderType.Acknowledgement\n\t\t\t? AckLongRangeMPDU\n\t\t\t: this.headerType === MPDUHeaderType.Singlecast\n\t\t\t? SinglecastLongRangeMPDU\n\t\t\t: undefined;\n\t\tif (!Constructor) {\n\t\t\tvalidatePayload.fail(\n\t\t\t\t`Unsupported Long Range MPDU header type ${this.headerType}`,\n\t\t\t);\n\t\t} else if (\n\t\t\tnew.target !== Constructor\n\t\t\t&& !staticExtends(new.target, Constructor)\n\t\t) {\n\t\t\treturn new Constructor(options);\n\t\t}\n\n\t\tthis.payload = data.subarray(offset);\n\t}\n\n\tpublic readonly frameInfo: ZnifferFrameInfo;\n\tpublic readonly homeId: number;\n\tpublic readonly sourceNodeId: number;\n\tpublic readonly destinationNodeId: number;\n\tpublic readonly ackRequested: boolean;\n\tpublic readonly headerType: MPDUHeaderType;\n\tpublic readonly sequenceNumber: number;\n\tpublic readonly noiseFloor: RSSI;\n\tpublic readonly txPower: number;\n\tpublic payload!: Bytes;\n\n\tpublic static from(msg: ZnifferDataMessage): LongRangeMPDU {\n\t\treturn new LongRangeMPDU({\n\t\t\tdata: msg.payload,\n\t\t\tframeInfo: pick(msg, [\n\t\t\t\t\"channel\",\n\t\t\t\t\"frameType\",\n\t\t\t\t\"region\",\n\t\t\t\t\"protocolDataRate\",\n\t\t\t\t\"rssiRaw\",\n\t\t\t]),\n\t\t});\n\t}\n\n\tpublic toLogEntry(): MessageOrCCLogEntry {\n\t\tconst tags = [\n\t\t\tformatRoute(\n\t\t\t\tthis.sourceNodeId,\n\t\t\t\t[],\n\t\t\t\tthis.destinationNodeId,\n\t\t\t\t// Singlecast frames do not contain a bit for this, we consider them all \"outbound\"\n\t\t\t\t\"outbound\",\n\t\t\t\t0,\n\t\t\t),\n\t\t];\n\t\tif (this.headerType === MPDUHeaderType.Acknowledgement) {\n\t\t\ttags.unshift(\"ACK\");\n\t\t}\n\n\t\tconst message: MessageRecord = {\n\t\t\t\"sequence no.\": this.sequenceNumber,\n\t\t\tchannel: this.frameInfo.channel,\n\t\t\t\"protocol/data rate\": znifferProtocolDataRateToString(\n\t\t\t\tthis.frameInfo.protocolDataRate,\n\t\t\t),\n\t\t\t\"TX power\": `${this.txPower} dBm`,\n\t\t\tRSSI: this.frameInfo.rssi != undefined\n\t\t\t\t? rssiToString(this.frameInfo.rssi)\n\t\t\t\t: this.frameInfo.rssiRaw.toString(),\n\t\t\t\"noise floor\": rssiToString(this.noiseFloor),\n\t\t};\n\t\tif (this.headerType !== MPDUHeaderType.Acknowledgement) {\n\t\t\tmessage[\"ack requested\"] = this.ackRequested;\n\t\t}\n\t\tif (this.payload.length > 0) {\n\t\t\tmessage.payload = buffer2hex(this.payload);\n\t\t}\n\t\treturn {\n\t\t\ttags,\n\t\t\tmessage,\n\t\t};\n\t}\n}\n\nexport class SinglecastLongRangeMPDU extends LongRangeMPDU {\n\tpublic toLogEntry(): MessageOrCCLogEntry {\n\t\tconst { tags, message: original } = super.toLogEntry();\n\n\t\tconst message: MessageRecord = {\n\t\t\t...original,\n\t\t\tpayload: buffer2hex(this.payload),\n\t\t};\n\t\treturn {\n\t\t\ttags,\n\t\t\tmessage,\n\t\t};\n\t}\n}\n\nexport class AckLongRangeMPDU extends LongRangeMPDU {\n\tpublic constructor(options: MPDUOptions) {\n\t\tsuper(options);\n\n\t\tthis.incomingRSSI = parseRSSI(this.payload, 0);\n\t\tthis.payload = this.payload.subarray(1);\n\t}\n\n\tpublic readonly incomingRSSI: RSSI;\n\n\tpublic toLogEntry(): MessageOrCCLogEntry {\n\t\tconst { tags, message: original } = super.toLogEntry();\n\n\t\tconst message: MessageRecord = {\n\t\t\t...original,\n\t\t\t\"incoming RSSI\": rssiToString(this.incomingRSSI),\n\t\t};\n\t\tif (this.payload.length > 0) {\n\t\t\tmessage.payload = buffer2hex(this.payload);\n\t\t}\n\n\t\treturn {\n\t\t\ttags,\n\t\t\tmessage,\n\t\t};\n\t}\n}\n\nexport class ZWaveMPDU implements MPDU {\n\tpublic constructor(options: MPDUOptions) {\n\t\tconst data = options.data;\n\t\tthis.frameInfo = options.frameInfo;\n\n\t\tlet destinationOffset = 8;\n\t\tconst frameControl = data.subarray(5, 7);\n\t\tswitch (options.frameInfo.channel) {\n\t\t\tcase 0:\n\t\t\tcase 1: {\n\t\t\t\tthis.routed = !!(frameControl[0] & 0b1000_0000);\n\t\t\t\tthis.ackRequested = !!(frameControl[0] & 0b0100_0000);\n\t\t\t\tthis.lowPower = !!(frameControl[0] & 0b0010_0000);\n\t\t\t\tthis.speedModified = !!(frameControl[0] & 0b0001_0000);\n\t\t\t\tthis.headerType = frameControl[0] & 0b0000_1111;\n\t\t\t\tthis.beamingInfo = frameControl[1] & 0b0110_0000;\n\t\t\t\tthis.sequenceNumber = frameControl[1] & 0b0000_1111;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 2: {\n\t\t\t\tthis.routed = false;\n\t\t\t\tthis.ackRequested = !!(frameControl[0] & 0b1000_0000);\n\t\t\t\tthis.lowPower = !!(frameControl[0] & 0b0100_0000);\n\t\t\t\tthis.speedModified = false;\n\t\t\t\tthis.headerType = frameControl[0] & 0b0000_1111;\n\t\t\t\tthis.beamingInfo = frameControl[1] & 0b0111_0000;\n\t\t\t\tthis.sequenceNumber = data[destinationOffset];\n\t\t\t\tdestinationOffset++;\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tcase 3: {\n\t\t\t\tvalidatePayload.fail(\n\t\t\t\t\t`Channel 3 (ZWLR) must be parsed as a LongRangeMPDU!`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tdefault: {\n\t\t\t\tvalidatePayload.fail(\n\t\t\t\t\t`Unsupported channel ${options.frameInfo.channel}. MPDU payload: ${\n\t\t\t\t\t\tbuffer2hex(data)\n\t\t\t\t\t}`,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tconst Constructor = this.headerType === MPDUHeaderType.Acknowledgement\n\t\t\t? AckZWaveMPDU\n\t\t\t: (this.headerType === MPDUHeaderType.Routed\n\t\t\t\t\t|| (this.headerType === MPDUHeaderType.Singlecast\n\t\t\t\t\t\t&& this.routed))\n\t\t\t? RoutedZWaveMPDU\n\t\t\t: this.headerType === MPDUHeaderType.Singlecast\n\t\t\t? SinglecastZWaveMPDU\n\t\t\t: this.headerType === MPDUHeaderType.Multicast\n\t\t\t? MulticastZWaveMPDU\n\t\t\t: this.headerType === MPDUHeaderType.Explorer\n\t\t\t? ExplorerZWaveMPDU\n\t\t\t: undefined;\n\t\tif (!Constructor) {\n\t\t\tvalidatePayload.fail(\n\t\t\t\t`Unsupported MPDU header type ${this.headerType}`,\n\t\t\t);\n\t\t} else if (\n\t\t\tnew.target !== Constructor\n\t\t\t&& !staticExtends(new.target, Constructor)\n\t\t) {\n\t\t\treturn new Constructor(options);\n\t\t}\n\n\t\t// FIXME: Parse Beams\n\n\t\tthis.homeId = data.readUInt32BE(0);\n\t\tthis.sourceNodeId = data[4];\n\n\t\t// byte 7 is another length byte\n\t\t// FIXME: This should consider the multicast control byte\n\t\tconst destinationLength = this.headerType === MPDUHeaderType.Multicast\n\t\t\t? 30\n\t\t\t: 1;\n\t\tthis.destinationBuffer = data.subarray(\n\t\t\tdestinationOffset,\n\t\t\tdestinationOffset + destinationLength,\n\t\t);\n\t\tthis.payload = data.subarray(destinationOffset + destinationLength);\n\t}\n\n\tpublic readonly frameInfo: ZnifferFrameInfo;\n\n\tpublic readonly homeId!: number;\n\tpublic readonly sourceNodeId!: number;\n\n\tpublic readonly routed: boolean;\n\tpublic readonly ackRequested: boolean;\n\tpublic readonly lowPower: boolean;\n\tpublic readonly speedModified: boolean;\n\tpublic readonly headerType: MPDUHeaderType;\n\tpublic readonly beamingInfo: BeamingInfo;\n\tpublic readonly sequenceNumber: number;\n\n\tprotected readonly destinationBuffer!: Bytes;\n\tpublic payload!: Bytes;\n\n\tpublic static from(msg: ZnifferDataMessage): ZWaveMPDU {\n\t\treturn new ZWaveMPDU({\n\t\t\tdata: msg.payload,\n\t\t\tframeInfo: pick(msg, [\n\t\t\t\t\"channel\",\n\t\t\t\t\"frameType\",\n\t\t\t\t\"region\",\n\t\t\t\t\"protocolDataRate\",\n\t\t\t\t\"rssiRaw\",\n\t\t\t]),\n\t\t});\n\t}\n\n\tpublic toLogEntry(): MessageOrCCLogEntry {\n\t\tconst tags = [formatNodeId(this.sourceNodeId)];\n\n\t\tconst message: MessageRecord = {\n\t\t\t\"sequence no.\": this.sequenceNumber,\n\t\t\tchannel: this.frameInfo.channel,\n\t\t\t\"protocol/data rate\":\n\t\t\t\tznifferProtocolDataRateToString(this.frameInfo.protocolDataRate)\n\t\t\t\t+ (this.speedModified ? \" (reduced)\" : \"\"),\n\t\t\tRSSI: this.frameInfo.rssi != undefined\n\t\t\t\t? rssiToString(this.frameInfo.rssi)\n\t\t\t\t: this.frameInfo.rssiRaw.toString(),\n\t\t};\n\t\treturn {\n\t\t\ttags,\n\t\t\tmessage,\n\t\t};\n\t}\n}\n\nexport class SinglecastZWaveMPDU extends ZWaveMPDU {\n\tpublic constructor(options: MPDUOptions) {\n\t\tsuper(options);\n\n\t\tthis.destinationNodeId = this.destinationBuffer[0];\n\t}\n\n\tpublic readonly destinationNodeId: number;\n\n\tpublic toLogEntry(): MessageOrCCLogEntry {\n\t\tconst { tags, message: original } = super.toLogEntry();\n\t\ttags[0] = formatRoute(\n\t\t\tthis.sourceNodeId,\n\t\t\t[],\n\t\t\tthis.destinationNodeId,\n\t\t\t// Singlecast frames do not contain a bit for this, we consider them all \"outbound\"\n\t\t\t\"outbound\",\n\t\t\t0,\n\t\t);\n\n\t\tconst message: MessageRecord = {\n\t\t\t...original,\n\t\t\t\"ack requested\": this.ackRequested,\n\t\t\tpayload: buffer2hex(this.payload),\n\t\t};\n\t\treturn {\n\t\t\ttags,\n\t\t\tmessage,\n\t\t};\n\t}\n}\n\nexport class AckZWaveMPDU extends ZWaveMPDU {\n\tpublic constructor(options: MPDUOptions) {\n\t\tsuper(options);\n\n\t\tthis.destinationNodeId = this.destinationBuffer[0];\n\t}\n\n\tpublic readonly destinationNodeId: number;\n\n\tpublic toLogEntry(): MessageOrCCLogEntry {\n\t\tconst { tags, message } = super.toLogEntry();\n\t\ttags[0] = formatRoute(\n\t\t\tthis.sourceNodeId,\n\t\t\t[],\n\t\t\tthis.destinationNodeId,\n\t\t\t// ACK frames do not contain a bit for this, we consider them all \"inbound\"\n\t\t\t\"inbound\",\n\t\t\t0,\n\t\t);\n\t\ttags.unshift(\"ACK\");\n\n\t\treturn {\n\t\t\ttags,\n\t\t\tmessage,\n\t\t};\n\t}\n}\n\nexport class RoutedZWaveMPDU extends ZWaveMPDU {\n\tpublic constructor(options: MPDUOptions) {\n\t\tsuper(options);\n\n\t\tconst channelConfig = getChannelConfiguration(this.frameInfo.region);\n\n\t\tthis.direction = (this.payload[0] & 0b1) ? \"inbound\" : \"outbound\";\n\t\tthis.routedAck = !!(this.payload[0] & 0b10);\n\t\tthis.routedError = !!(this.payload[0] & 0b100);\n\t\tconst hasExtendedHeader = !!(this.payload[0] & 0b1000);\n\t\tif (this.routedError) {\n\t\t\tthis.failedHop = this.payload[0] >>> 4;\n\t\t} else if (channelConfig === \"1/2\") {\n\t\t\t// @ts-expect-error speedModified is readonly\n\t\t\tthis.speedModified = !!(this.payload[0] & 0b10000);\n\t\t}\n\n\t\tthis.hop = this.payload[1] & 0b1111;\n\t\t// The hop field in the MPDU indicates which repeater should handle the frame next.\n\t\t// This means that for an inbound frame between repeater 0 and 1, the value is one\n\t\t// less (0) than for an outbound frame (1). This also means that the field overflows\n\t\t// to 0x0f when the frame returns to the source node.\n\t\t//\n\t\t// We normalize this, so hop = 0 always means the frame is transmitted between the source node and repeater 0.\n\t\tif (this.direction === \"inbound\") {\n\t\t\tthis.hop = (this.hop + 1) % 16;\n\t\t}\n\n\t\tconst numRepeaters = this.payload[1] >>> 4;\n\t\tthis.repeaters = [...this.payload.subarray(2, 2 + numRepeaters)];\n\n\t\tlet offset = 2 + numRepeaters;\n\t\tif (channelConfig === \"3\") {\n\t\t\tthis.destinationWakeup = this.payload[offset++] === 0x02;\n\t\t}\n\n\t\tif (hasExtendedHeader) {\n\t\t\tconst headerPreamble = this.payload[offset++];\n\t\t\tconst headerLength = headerPreamble >>> 4;\n\t\t\tconst headerType = headerPreamble & 0b1111;\n\t\t\tconst header = this.payload.subarray(offset, offset + headerLength);\n\t\t\toffset += headerLength;\n\n\t\t\tif (headerType === 0x00) {\n\t\t\t\tthis.destinationWakeupType = header[0] & 0b0100_0000\n\t\t\t\t\t? \"1000ms\"\n\t\t\t\t\t: header[0] & 0b0010_0000\n\t\t\t\t\t? \"250ms\"\n\t\t\t\t\t: undefined;\n\t\t\t} else if (headerType === 0x01) {\n\t\t\t\tconst repeaterRSSI = [];\n\t\t\t\tfor (let i = 0; i < numRepeaters; i++) {\n\t\t\t\t\trepeaterRSSI.push(parseRSSI(header, i));\n\t\t\t\t}\n\t\t\t\tthis.repeaterRSSI = repeaterRSSI;\n\t\t\t}\n\t\t}\n\n\t\tthis.payload = this.payload.subarray(offset);\n\n\t\tthis.destinationNodeId = this.destinationBuffer[0];\n\t}\n\n\tpublic readonly destinationNodeId: number;\n\tpublic readonly direction: \"outbound\" | \"inbound\";\n\tpublic readonly routedAck: boolean;\n\tpublic readonly routedError: boolean;\n\tpublic readonly failedHop?: number;\n\tpublic readonly hop: number;\n\tpublic readonly repeaters: readonly number[];\n\tpublic readonly destinationWakeup?: boolean;\n\tpublic readonly destinationWakeupType?: \"250ms\" | \"1000ms\";\n\tpublic readonly repeaterRSSI?: readonly RSSI[];\n\n\tpublic toLogEntry(): MessageOrCCLogEntry {\n\t\tconst { tags, message: original } = super.toLogEntry();\n\t\ttags[0] = formatRoute(\n\t\t\tthis.sourceNodeId,\n\t\t\tthis.repeaters,\n\t\t\tthis.destinationNodeId,\n\t\t\tthis.direction,\n\t\t\tthis.hop,\n\t\t\tthis.failedHop,\n\t\t);\n\n\t\tconst message: MessageRecord = {\n\t\t\t...original,\n\t\t\t\"ack requested\": this.ackRequested,\n\t\t\tpayload: buffer2hex(this.payload),\n\t\t};\n\n\t\treturn {\n\t\t\ttags,\n\t\t\tmessage,\n\t\t};\n\t}\n}\n\nexport class MulticastZWaveMPDU extends ZWaveMPDU {\n\tpublic constructor(options: MPDUOptions) {\n\t\tsuper(options);\n\n\t\tconst control = this.destinationBuffer[0]; // 3 bits offset, 5 bits mask length, but this MUST be set to 29\n\t\tvalidatePayload.withReason(\"Invalid multicast control byte\")(\n\t\t\tcontrol === 29,\n\t\t);\n\t\tthis.destinationNodeIds = parseNodeBitMask(\n\t\t\tthis.destinationBuffer.subarray(1),\n\t\t);\n\t}\n\n\tpublic readonly destinationNodeIds: readonly number[];\n\n\tpublic toLogEntry(): MessageOrCCLogEntry {\n\t\tconst { tags, message: original } = super.toLogEntry();\n\t\ttags.push(\"MULTICAST\");\n\n\t\tconst message: MessageRecord = {\n\t\t\tdestinations: this.destinationNodeIds.join(\", \"),\n\t\t\t...original,\n\t\t\tpayload: buffer2hex(this.payload),\n\t\t};\n\t\treturn {\n\t\t\ttags,\n\t\t\tmessage,\n\t\t};\n\t}\n}\n\nexport class ExplorerZWaveMPDU extends ZWaveMPDU {\n\tpublic constructor(options: MPDUOptions) {\n\t\tsuper(options);\n\t\tthis.version = this.payload[0] >>> 5;\n\t\tthis.command = this.payload[0] & 0b0001_1111;\n\t\tthis.stop = !!(this.payload[1] & 0b100);\n\t\tthis.direction = this.payload[1] & 0b010 ? \"inbound\" : \"outbound\";\n\t\tthis.sourceRouted = !!(this.payload[1] & 0b001);\n\t\tthis.randomTXInterval = this.payload[2];\n\t\tthis.ttl = this.payload[3] >>> 4;\n\t\tconst numRepeaters = this.payload[3] & 0b1111;\n\t\tthis.repeaters = [...this.payload.subarray(4, 4 + numRepeaters)];\n\n\t\t// Make sure the correct constructor gets called\n\t\tconst Constructor = this.command === ExplorerFrameCommand.Normal\n\t\t\t? NormalExplorerZWaveMPDU\n\t\t\t: this.command === ExplorerFrameCommand.InclusionRequest\n\t\t\t? InclusionRequestExplorerZWaveMPDU\n\t\t\t: this.command === ExplorerFrameCommand.SearchResult\n\t\t\t? SearchResultExplorerZWaveMPDU\n\t\t\t: undefined;\n\n\t\tif (!Constructor) {\n\t\t\tvalidatePayload.fail(\n\t\t\t\t`Unsupported Explorer MPDU command ${this.command}`,\n\t\t\t);\n\t\t} else if (\n\t\t\tnew.target !== Constructor\n\t\t\t&& !staticExtends(new.target, Constructor)\n\t\t) {\n\t\t\treturn new Constructor(options);\n\t\t}\n\n\t\tthis.destinationNodeId = this.destinationBuffer[0];\n\t\tthis.payload = this.payload.subarray(8);\n\t}\n\n\tpublic readonly destinationNodeId!: number;\n\n\tpublic readonly version: number;\n\tpublic readonly command: ExplorerFrameCommand;\n\tpublic readonly stop: boolean;\n\tpublic readonly sourceRouted: boolean;\n\tpublic readonly direction: \"outbound\" | \"inbound\";\n\tpublic readonly randomTXInterval: number;\n\tpublic readonly ttl: number;\n\tpublic readonly repeaters: readonly number[];\n}\n\nexport class NormalExplorerZWaveMPDU extends ExplorerZWaveMPDU {\n\tpublic constructor(options: MPDUOptions) {\n\t\tsuper(options);\n\t}\n\n\tpublic toLogEntry(): MessageOrCCLogEntry {\n\t\tconst { tags, message: original } = super.toLogEntry();\n\t\ttags[0] = formatRoute(\n\t\t\tthis.sourceNodeId,\n\t\t\tthis.repeaters,\n\t\t\tthis.destinationNodeId,\n\t\t\t// Explorer frames do not contain a bit for the direction, we consider them all \"outbound\"\n\t\t\t\"outbound\",\n\t\t\t4 - this.ttl,\n\t\t);\n\t\ttags.unshift(\"EXPLORER\");\n\n\t\tconst message: MessageRecord = {\n\t\t\t...original,\n\t\t\t\"ack requested\": this.ackRequested,\n\t\t\tpayload: buffer2hex(this.payload),\n\t\t};\n\t\treturn {\n\t\t\ttags,\n\t\t\tmessage,\n\t\t};\n\t}\n}\n\nexport class InclusionRequestExplorerZWaveMPDU extends ExplorerZWaveMPDU {\n\tpublic constructor(options: MPDUOptions) {\n\t\tsuper(options);\n\n\t\tthis.networkHomeId = this.payload.readUInt32BE(0);\n\t\tthis.payload = this.payload.subarray(4);\n\t}\n\n\t/** The home ID of the repeating node */\n\tpublic readonly networkHomeId: number;\n\n\tpublic toLogEntry(): MessageOrCCLogEntry {\n\t\tconst { tags, message: original } = super.toLogEntry();\n\t\ttags[0] = formatRoute(\n\t\t\tthis.sourceNodeId,\n\t\t\tthis.repeaters,\n\t\t\tthis.destinationNodeId,\n\t\t\t// Explorer frames do not contain a bit for the direction, we consider them all \"outbound\"\n\t\t\t\"outbound\",\n\t\t\t4 - this.ttl,\n\t\t);\n\t\ttags.unshift(\"INCL REQUEST\");\n\n\t\tconst message: MessageRecord = {\n\t\t\t...original,\n\t\t\t\"network home ID\": this.networkHomeId.toString(16).padStart(\n\t\t\t\t8,\n\t\t\t\t\"0\",\n\t\t\t),\n\t\t\tpayload: buffer2hex(this.payload),\n\t\t};\n\t\treturn {\n\t\t\ttags,\n\t\t\tmessage,\n\t\t};\n\t}\n}\n\nexport class SearchResultExplorerZWaveMPDU extends ExplorerZWaveMPDU {\n\tpublic constructor(options: MPDUOptions) {\n\t\tsuper(options);\n\n\t\tthis.searchingNodeId = this.payload[0];\n\t\tthis.frameHandle = this.payload[1];\n\t\tthis.resultTTL = this.payload[2] >>> 4;\n\t\tconst numRepeaters = this.payload[2] & 0b1111;\n\t\tthis.resultRepeaters = [\n\t\t\t...this.payload.subarray(3, 3 + numRepeaters),\n\t\t];\n\n\t\t// This frame contains no payload\n\t\tthis.payload = new Bytes();\n\t}\n\n\t/** The node ID that sent the explorer frame that's being answered here */\n\tpublic readonly searchingNodeId: number;\n\t/** The sequence number of the original explorer frame */\n\tpublic readonly frameHandle: number;\n\tpublic readonly resultTTL: number;\n\tpublic readonly resultRepeaters: readonly number[];\n\n\tpublic toLogEntry(): MessageOrCCLogEntry {\n\t\tconst { tags, message: original } = super.toLogEntry();\n\t\ttags[0] = formatRoute(\n\t\t\tthis.sourceNodeId,\n\t\t\tthis.repeaters,\n\t\t\tthis.destinationNodeId,\n\t\t\t// Explorer frames do not contain a bit for the direction, we consider their responses \"inbound\"\n\t\t\t\"inbound\",\n\t\t\t4 - this.ttl,\n\t\t);\n\t\ttags.unshift(\"EXPLORER RESULT\");\n\n\t\tconst message: MessageRecord = {\n\t\t\t...original,\n\t\t\t\"frame handle\": this.frameHandle,\n\t\t\t\"result TTL\": this.resultTTL,\n\t\t\t\"result repeaters\": this.resultRepeaters.join(\", \"),\n\t\t};\n\t\treturn {\n\t\t\ttags,\n\t\t\tmessage,\n\t\t};\n\t}\n}\n\nexport function parseBeamFrame(\n\tframe: ZnifferDataMessage,\n): ZWaveBeamStart | LongRangeBeamStart | BeamStop {\n\tif (frame.frameType === ZnifferFrameType.BeamStop) {\n\t\treturn new BeamStop({\n\t\t\tdata: frame.payload,\n\t\t\tframeInfo: frame,\n\t\t});\n\t}\n\n\tconst channelConfig = getChannelConfiguration(frame.region);\n\tswitch (channelConfig) {\n\t\tcase \"1/2\":\n\t\tcase \"3\": {\n\t\t\treturn new ZWaveBeamStart({\n\t\t\t\tdata: frame.payload,\n\t\t\t\tframeInfo: frame,\n\t\t\t});\n\t\t}\n\t\tcase \"4\": {\n\t\t\treturn new LongRangeBeamStart({\n\t\t\t\tdata: frame.payload,\n\t\t\t\tframeInfo: frame,\n\t\t\t});\n\t\t}\n\t\tdefault:\n\t\t\tvalidatePayload.fail(\n\t\t\t\t// eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n\t\t\t\t`Unsupported channel configuration ${channelConfig}. MPDU payload: ${\n\t\t\t\t\tbuffer2hex(frame.payload)\n\t\t\t\t}`,\n\t\t\t);\n\t}\n}\n\nexport class ZWaveBeamStart {\n\tpublic constructor(options: MPDUOptions) {\n\t\tconst data = options.data;\n\t\tthis.frameInfo = options.frameInfo;\n\n\t\tconst channelConfig = getChannelConfiguration(this.frameInfo.region);\n\t\tswitch (channelConfig) {\n\t\t\tcase \"1/2\":\n\t\t\tcase \"3\":\n\t\t\t\t// OK\n\t\t\t\tbreak;\n\t\t\tcase \"4\": {\n\t\t\t\tvalidatePayload.fail(\n\t\t\t\t\t`Channel configuration 4 (ZWLR) must be parsed as a LongRangeMPDU!`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tdefault: {\n\t\t\t\tvalidatePayload.fail(\n\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n\t\t\t\t\t`Unsupported channel configuration ${channelConfig}. MPDU payload: ${\n\t\t\t\t\t\tbuffer2hex(data)\n\t\t\t\t\t}`,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tthis.destinationNodeId = data[1];\n\t\tif (data[2] === 0x01) {\n\t\t\tthis.homeIdHash = data[3];\n\t\t}\n\t}\n\n\tpublic readonly frameInfo: ZnifferFrameInfo;\n\tpublic readonly homeIdHash?: number;\n\tpublic readonly destinationNodeId: number;\n\n\tpublic toLogEntry(): MessageOrCCLogEntry {\n\t\tconst tags = [\n\t\t\t`BEAM \u00BB ${formatNodeId(this.destinationNodeId)}`,\n\t\t];\n\n\t\tconst message: MessageRecord = {\n\t\t\tchannel: this.frameInfo.channel,\n\t\t\t\"protocol/data rate\": znifferProtocolDataRateToString(\n\t\t\t\tthis.frameInfo.protocolDataRate,\n\t\t\t),\n\t\t\tRSSI: this.frameInfo.rssi != undefined\n\t\t\t\t? rssiToString(this.frameInfo.rssi)\n\t\t\t\t: this.frameInfo.rssiRaw.toString(),\n\t\t};\n\t\treturn {\n\t\t\ttags,\n\t\t\tmessage,\n\t\t};\n\t}\n}\n\nexport class LongRangeBeamStart {\n\tpublic constructor(options: MPDUOptions) {\n\t\tconst data = options.data;\n\t\tthis.frameInfo = options.frameInfo;\n\n\t\tconst channelConfig = getChannelConfiguration(this.frameInfo.region);\n\t\tswitch (channelConfig) {\n\t\t\tcase \"1/2\":\n\t\t\tcase \"3\":\n\t\t\t\t// OK\n\t\t\t\tbreak;\n\t\t\tcase \"4\": {\n\t\t\t\tvalidatePayload.fail(\n\t\t\t\t\t`Channel configuration 4 (ZWLR) must be parsed as a LongRangeMPDU!`,\n\t\t\t\t);\n\t\t\t}\n\t\t\tdefault: {\n\t\t\t\tvalidatePayload.fail(\n\t\t\t\t\t// eslint-disable-next-line @typescript-eslint/restrict-template-expressions\n\t\t\t\t\t`Unsupported channel configuration ${channelConfig}. MPDU payload: ${\n\t\t\t\t\t\tbuffer2hex(data)\n\t\t\t\t\t}`,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tconst txPower = data[1] >>> 4;\n\t\tthis.txPower = longRangeBeamPowerToDBm(txPower);\n\t\tthis.destinationNodeId = data.readUInt16BE(1) & 0x0fff;\n\t\tthis.homeIdHash = data[3];\n\t}\n\n\tpublic readonly frameInfo: ZnifferFrameInfo;\n\tpublic readonly homeIdHash: number;\n\tpublic readonly destinationNodeId: number;\n\tpublic readonly txPower: number;\n\n\tpublic toLogEntry(): MessageOrCCLogEntry {\n\t\tconst tags = [\n\t\t\t`BEAM \u00BB ${formatNodeId(this.destinationNodeId)}`,\n\t\t];\n\n\t\tconst message: MessageRecord = {\n\t\t\tchannel: this.frameInfo.channel,\n\t\t\t\"protocol/data rate\": znifferProtocolDataRateToString(\n\t\t\t\tthis.frameInfo.protocolDataRate,\n\t\t\t),\n\t\t\t\"TX power\": `${this.txPower} dBm`,\n\t\t\tRSSI: this.frameInfo.rssi != undefined\n\t\t\t\t? rssiToString(this.frameInfo.rssi)\n\t\t\t\t: this.frameInfo.rssiRaw.toString(),\n\t\t};\n\t\treturn {\n\t\t\ttags,\n\t\t\tmessage,\n\t\t};\n\t}\n}\n\nexport class BeamStop {\n\tpublic constructor(options: MPDUOptions) {\n\t\tthis.frameInfo = options.frameInfo;\n\t}\n\n\tpublic readonly frameInfo: ZnifferFrameInfo;\n\n\tpublic toLogEntry(): MessageOrCCLogEntry {\n\t\tconst tags = [\n\t\t\t\"BEAM STOP\",\n\t\t];\n\n\t\tconst message: MessageRecord = {\n\t\t\tchannel: this.frameInfo.channel,\n\t\t};\n\t\treturn {\n\t\t\ttags,\n\t\t\tmessage,\n\t\t};\n\t}\n}\n\n/** An application-oriented representation of a Z-Wave frame that was captured by the Zniffer */\nexport type ZWaveFrame =\n\t// Common fields for all Z-Wave frames\n\t& {\n\t\tprotocol: Protocols.ZWave;\n\n\t\tchannel: number;\n\t\tregion: number;\n\t\trssiRaw: number;\n\t\trssi?: RSSI;\n\n\t\tprotocolDataRate: ZnifferProtocolDataRate;\n\t\tspeedModified: boolean;\n\n\t\tsequenceNumber: number;\n\n\t\thomeId: number;\n\t\tsourceNodeId: number;\n\t}\n\t// Different kinds of Z-Wave frames:\n\t& (\n\t\t| (\n\t\t\t// Singlecast frame, either routed or not\n\t\t\t& {\n\t\t\t\ttype: ZWaveFrameType.Singlecast;\n\t\t\t\tdestinationNodeId: number;\n\t\t\t\tackRequested: boolean;\n\t\t\t\tpayload: Uint8Array | CommandClass;\n\t\t\t}\n\t\t\t// Only present in routed frames:\n\t\t\t& AllOrNone<\n\t\t\t\t& {\n\t\t\t\t\tdirection: \"outbound\" | \"inbound\";\n\t\t\t\t\thop: number;\n\t\t\t\t\trepeaters: number[];\n\t\t\t\t\trepeaterRSSI?: RSSI[];\n\t\t\t\t}\n\t\t\t\t// Different kinds of routed frames:\n\t\t\t\t& (\n\t\t\t\t\t// Normal frame\n\t\t\t\t\t| {\n\t\t\t\t\t\troutedAck: false;\n\t\t\t\t\t\troutedError: false;\n\t\t\t\t\t\tfailedHop?: undefined;\n\t\t\t\t\t}\n\t\t\t\t\t// Routed acknowledgement\n\t\t\t\t\t| {\n\t\t\t\t\t\troutedAck: true;\n\t\t\t\t\t\troutedError: false;\n\t\t\t\t\t\tfailedHop?: undefined;\n\t\t\t\t\t}\n\t\t\t\t\t// Routed error\n\t\t\t\t\t| {\n\t\t\t\t\t\troutedAck: false;\n\t\t\t\t\t\troutedError: true;\n\t\t\t\t\t\tfailedHop: number;\n\t\t\t\t\t}\n\t\t\t\t)\n\t\t\t>\n\t\t)\n\t\t// Broadcast frame. This is technically a singlecast frame,\n\t\t// but the destination node ID is always 255 and it is not routed\n\t\t| {\n\t\t\ttype: ZWaveFrameType.Broadcast;\n\t\t\tdestinationNodeId: typeof NODE_ID_BROADCAST;\n\t\t\tackRequested: boolean;\n\t\t\tpayload: Uint8Array | CommandClass;\n\t\t}\n\t\t| {\n\t\t\t// Multicast frame, not routed\n\t\t\ttype: ZWaveFrameType.Multicast;\n\t\t\tdestinationNodeIds: number[];\n\t\t\tpayload: Uint8Array | CommandClass;\n\t\t}\n\t\t| {\n\t\t\t// Ack frame, not routed\n\t\t\ttype: ZWaveFrameType.AckDirect;\n\t\t\tdestinationNodeId: number;\n\t\t}\n\t\t| (\n\t\t\t// Different kind of explorer frames\n\t\t\t& ({\n\t\t\t\ttype: ZWaveFrameType.ExplorerNormal;\n\t\t\t\tpayload: Uint8Array | CommandClass;\n\t\t\t} | {\n\t\t\t\ttype: ZWaveFrameType.ExplorerSearchResult;\n\t\t\t\tsearchingNodeId: number;\n\t\t\t\tframeHandle: number;\n\t\t\t\tresultTTL: number;\n\t\t\t\tresultRepeaters: readonly number[];\n\t\t\t} | {\n\t\t\t\ttype: ZWaveFrameType.ExplorerInclusionRequest;\n\t\t\t\tnetworkHomeId: number;\n\t\t\t\tpayload: Uint8Array | CommandClass;\n\t\t\t})\n\t\t\t// Common fields for all explorer frames\n\t\t\t& {\n\t\t\t\tdestinationNodeId: number;\n\t\t\t\tackRequested: boolean;\n\t\t\t\tdirection: \"outbound\" | \"inbound\";\n\t\t\t\trepeaters: number[];\n\t\t\t\tttl: number;\n\t\t\t}\n\t\t)\n\t);\n\nexport type LongRangeFrame =\n\t// Common fields for all Long Range frames\n\t& {\n\t\tprotocol: Protocols.ZWaveLongRange;\n\n\t\tchannel: number;\n\t\tregion: ZnifferRegion;\n\t\tprotocolDataRate: ZnifferProtocolDataRate;\n\n\t\trssiRaw: number;\n\t\trssi?: RSSI;\n\t\tnoiseFloor: RSSI;\n\t\ttxPower: number;\n\n\t\tsequenceNumber: number;\n\n\t\thomeId: number;\n\t\tsourceNodeId: number;\n\t\tdestinationNodeId: number;\n\t}\n\t// Different kinds of Long Range frames:\n\t& (\n\t\t| {\n\t\t\t// Singlecast frame\n\t\t\ttype: LongRangeFrameType.Singlecast;\n\t\t\tackRequested: boolean;\n\t\t\tpayload: Uint8Array | CommandClass;\n\t\t}\n\t\t| {\n\t\t\t// Broadcast frame. This is technically a singlecast frame,\n\t\t\t// but the destination node ID is always 4095\n\t\t\ttype: LongRangeFrameType.Broadcast;\n\t\t\tdestinationNodeId: typeof NODE_ID_BROADCAST_LR;\n\t\t\tackRequested: boolean;\n\t\t\tpayload: Uint8Array | CommandClass;\n\t\t}\n\t\t| {\n\t\t\t// Acknowledgement frame\n\t\t\ttype: LongRangeFrameType.Ack;\n\t\t\tincomingRSSI: RSSI;\n\t\t\tpayload: Uint8Array;\n\t\t}\n\t);\n\nexport type BeamFrame =\n\t// Common fields for all Beam frames\n\t& {\n\t\tchannel: number;\n\t}\n\t// Different types of beam frames:\n\t& (\n\t\t| {\n\t\t\t// Z-Wave Classic\n\t\t\tprotocol: Protocols.ZWave;\n\t\t\ttype: ZWaveFrameType.BeamStart;\n\n\t\t\tprotocolDataRate: ZnifferProtocolDataRate;\n\t\t\trssiRaw: number;\n\t\t\trssi?: RSSI;\n\t\t\tregion: ZnifferRegion;\n\n\t\t\thomeIdHash?: number;\n\t\t\tdestinationNodeId: number;\n\t\t}\n\t\t| {\n\t\t\t// Z-Wave Long Range\n\t\t\tprotocol: Protocols.ZWaveLongRange;\n\t\t\ttype: LongRangeFrameType.BeamStart;\n\n\t\t\tprotocolDataRate: ZnifferProtocolDataRate;\n\t\t\trssiRaw: number;\n\t\t\trssi?: RSSI;\n\t\t\tregion: ZnifferRegion;\n\n\t\t\ttxPower: number;\n\t\t\thomeIdHash: number;\n\t\t\tdestinationNodeId: number;\n\t\t}\n\t\t// The Zniffer sends the same command for the beam ending for both\n\t\t// Z-Wave Classic and Long Range. To make testing the frame type more\n\t\t// consistent with the other frames, two different values are used\n\t\t| {\n\t\t\tprotocol: Protocols.ZWave;\n\t\t\ttype: ZWaveFrameType.BeamStop;\n\t\t}\n\t\t| {\n\t\t\tprotocol: Protocols.ZWaveLongRange;\n\t\t\ttype: LongRangeFrameType.BeamStop;\n\t\t}\n\t);\n\nexport type Frame =\n\t| ZWaveFrame\n\t| LongRangeFrame\n\t| BeamFrame;\n\nexport type CorruptedFrame = {\n\tchannel: number;\n\tregion: number;\n\trssiRaw: number;\n\trssi?: RSSI;\n\n\tprotocolDataRate: ZnifferProtocolDataRate;\n\n\tpayload: Uint8Array;\n};\n\nexport function mpduToFrame(mpdu: MPDU, payloadCC?: CommandClass): Frame {\n\tif (mpdu instanceof ZWaveMPDU) {\n\t\treturn mpduToZWaveFrame(mpdu, payloadCC);\n\t} else if (mpdu instanceof LongRangeMPDU) {\n\t\treturn mpduToLongRangeFrame(mpdu, payloadCC);\n\t}\n\n\tthrow new ZWaveError(\n\t\t`mpduToFrame not supported for ${mpdu.constructor.name}`,\n\t\tZWaveErrorCodes.Argument_Invalid,\n\t);\n}\n\nexport function mpduToZWaveFrame(\n\tmpdu: ZWaveMPDU,\n\tpayloadCC?: CommandClass,\n): ZWaveFrame {\n\tconst retBase = {\n\t\tprotocol: Protocols.ZWave as const,\n\n\t\tchannel: mpdu.frameInfo.channel,\n\t\tregion: mpdu.frameInfo.region,\n\t\trssiRaw: mpdu.frameInfo.rssiRaw,\n\t\trssi: mpdu.frameInfo.rssi,\n\n\t\tprotocolDataRate: mpdu.frameInfo.protocolDataRate,\n\t\tspeedModified: mpdu.speedModified,\n\n\t\tsequenceNumber: mpdu.sequenceNumber,\n\n\t\thomeId: mpdu.homeId,\n\t\tsourceNodeId: mpdu.sourceNodeId,\n\t};\n\n\tif (mpdu instanceof SinglecastZWaveMPDU) {\n\t\tconst ret = {\n\t\t\t...retBase,\n\t\t\tackRequested: mpdu.ackRequested,\n\t\t\tpayload: payloadCC ?? mpdu.payload,\n\t\t};\n\t\tif (mpdu.destinationNodeId === NODE_ID_BROADCAST) {\n\t\t\treturn {\n\t\t\t\ttype: ZWaveFrameType.Broadcast,\n\t\t\t\tdestinationNodeId: mpdu.destinationNodeId,\n\t\t\t\t...ret,\n\t\t\t};\n\t\t} else {\n\t\t\treturn {\n\t\t\t\ttype: ZWaveFrameType.Singlecast,\n\t\t\t\tdestinationNodeId: mpdu.destinationNodeId,\n\t\t\t\t...ret,\n\t\t\t};\n\t\t}\n\t} else if (mpdu instanceof AckZWaveMPDU) {\n\t\treturn {\n\t\t\ttype: ZWaveFrameType.AckDirect,\n\t\t\t...retBase,\n\t\t\tdestinationNodeId: mpdu.destinationNodeId,\n\t\t};\n\t} else if (mpdu instanceof MulticastZWaveMPDU) {\n\t\treturn {\n\t\t\ttype: ZWaveFrameType.Multicast,\n\t\t\t...retBase,\n\t\t\tdestinationNodeIds: [...mpdu.destinationNodeIds],\n\t\t\tpayload: payloadCC ?? mpdu.payload,\n\t\t};\n\t} else if (mpdu instanceof RoutedZWaveMPDU) {\n\t\treturn {\n\t\t\ttype: ZWaveFrameType.Singlecast,\n\t\t\t...retBase,\n\t\t\tdestinationNodeId: mpdu.destinationNodeId,\n\t\t\tackRequested: mpdu.ackRequested,\n\t\t\tpayload: payloadCC ?? mpdu.payload,\n\t\t\tdirection: mpdu.direction,\n\t\t\thop: mpdu.hop,\n\t\t\trepeaters: [...mpdu.repeaters],\n\t\t\trepeaterRSSI: mpdu.repeaterRSSI && [...mpdu.repeaterRSSI],\n\t\t\troutedAck: mpdu.routedAck as any,\n\t\t\troutedError: mpdu.routedError as any,\n\t\t\tfailedHop: mpdu.failedHop,\n\t\t};\n\t} else if (mpdu instanceof ExplorerZWaveMPDU) {\n\t\tconst explorerBase = {\n\t\t\t...retBase,\n\t\t\tdestinationNodeId: mpdu.destinationNodeId,\n\t\t\tackRequested: mpdu.ackRequested,\n\t\t\tdirection: mpdu.direction,\n\t\t\trepeaters: [...mpdu.repeaters],\n\t\t\tttl: mpdu.ttl,\n\t\t};\n\t\tif (mpdu instanceof NormalExplorerZWaveMPDU) {\n\t\t\treturn {\n\t\t\t\ttype: ZWaveFrameType.ExplorerNormal,\n\t\t\t\tpayload: payloadCC ?? mpdu.payload,\n\t\t\t\t...explorerBase,\n\t\t\t};\n\t\t} else if (mpdu instanceof SearchResultExplorerZWaveMPDU) {\n\t\t\treturn {\n\t\t\t\ttype: ZWaveFrameType.ExplorerSearchResult,\n\t\t\t\t...explorerBase,\n\t\t\t\tsearchingNodeId: mpdu.searchingNodeId,\n\t\t\t\tframeHandle: mpdu.frameHandle,\n\t\t\t\tresultTTL: mpdu.resultTTL,\n\t\t\t\tresultRepeaters: [...mpdu.resultRepeaters],\n\t\t\t};\n\t\t} else if (mpdu instanceof InclusionRequestExplorerZWaveMPDU) {\n\t\t\treturn {\n\t\t\t\ttype: ZWaveFrameType.ExplorerInclusionRequest,\n\t\t\t\tpayload: payloadCC ?? mpdu.payload,\n\t\t\t\t...explorerBase,\n\t\t\t\tnetworkHomeId: mpdu.networkHomeId,\n\t\t\t};\n\t\t}\n\t}\n\n\tthrow new ZWaveError(\n\t\t`mpduToZWaveFrame not supported for ${mpdu.constructor.name}`,\n\t\tZWaveErrorCodes.Argument_Invalid,\n\t);\n}\n\nexport function mpduToLongRangeFrame(\n\tmpdu: LongRangeMPDU,\n\tpayloadCC?: CommandClass,\n): LongRangeFrame {\n\tconst retBase = {\n\t\tprotocol: Protocols.ZWaveLongRange as const,\n\n\t\tchannel: mpdu.frameInfo.channel,\n\t\tregion: mpdu.frameInfo.region,\n\t\tprotocolDataRate: mpdu.frameInfo.protocolDataRate,\n\n\t\trssiRaw: mpdu.frameInfo.rssiRaw,\n\t\trssi: mpdu.frameInfo.rssi,\n\t\tnoiseFloor: mpdu.noiseFloor,\n\t\ttxPower: mpdu.txPower,\n\n\t\tsequenceNumber: mpdu.sequenceNumber,\n\n\t\thomeId: mpdu.homeId,\n\t\tsourceNodeId: mpdu.sourceNodeId,\n\t\tdestinationNodeId: mpdu.destinationNodeId,\n\t};\n\n\tif (mpdu instanceof SinglecastLongRangeMPDU) {\n\t\tconst ret = {\n\t\t\t...retBase,\n\t\t\tackRequested: mpdu.ackRequested,\n\t\t\tpayload: payloadCC ?? mpdu.payload,\n\t\t};\n\t\tif (mpdu.destinationNodeId === NODE_ID_BROADCAST_LR) {\n\t\t\treturn {\n\t\t\t\ttype: LongRangeFrameType.Broadcast,\n\t\t\t\t...ret,\n\t\t\t\tdestinationNodeId: mpdu.destinationNodeId, // Make TS happy\n\t\t\t};\n\t\t} else {\n\t\t\treturn {\n\t\t\t\ttype: LongRangeFrameType.Singlecast,\n\t\t\t\t...ret,\n\t\t\t};\n\t\t}\n\t} else if (mpdu instanceof AckLongRangeMPDU) {\n\t\treturn {\n\t\t\ttype: LongRangeFrameType.Ack,\n\t\t\t...retBase,\n\t\t\tincomingRSSI: mpdu.incomingRSSI,\n\t\t\tpayload: mpdu.payload,\n\t\t};\n\t}\n\n\tthrow new ZWaveError(\n\t\t`mpduToLongRangeFrame not supported for ${mpdu.constructor.name}`,\n\t\tZWaveErrorCodes.Argument_Invalid,\n\t);\n}\n\nexport function beamToFrame(\n\tbeam: ZWaveBeamStart | LongRangeBeamStart | BeamStop,\n): Frame {\n\tconst retBase = {\n\t\tchannel: beam.frameInfo.channel,\n\t\tregion: beam.frameInfo.region,\n\t\trssiRaw: beam.frameInfo.rssiRaw,\n\t\trssi: beam.frameInfo.rssi,\n\n\t\tprotocolDataRate: beam.frameInfo.protocolDataRate,\n\t};\n\n\tif (beam instanceof ZWaveBeamStart) {\n\t\treturn {\n\t\t\tprotocol: Protocols.ZWave,\n\t\t\ttype: ZWaveFrameType.BeamStart,\n\t\t\t...retBase,\n\t\t\tdestinationNodeId: beam.destinationNodeId,\n\t\t\thomeIdHash: beam.homeIdHash,\n\t\t};\n\t} else if (beam instanceof LongRangeBeamStart) {\n\t\treturn {\n\t\t\tprotocol: Protocols.ZWaveLongRange,\n\t\t\ttype: LongRangeFrameType.BeamStart,\n\t\t\t...retBase,\n\t\t\tdestinationNodeId: beam.destinationNodeId,\n\t\t\thomeIdHash: beam.homeIdHash,\n\t\t\ttxPower: beam.txPower,\n\t\t};\n\t} else {\n\t\t// Beam Stop - contains only the channel, the other fields are garbage\n\t\tconst isLR = beam.frameInfo.channel === 4;\n\t\tif (isLR) {\n\t\t\treturn {\n\t\t\t\tprotocol: Protocols.ZWaveLongRange,\n\t\t\t\ttype: LongRangeFrameType.BeamStop,\n\t\t\t\tchannel: beam.frameInfo.channel,\n\t\t\t};\n\t\t} else {\n\t\t\treturn {\n\t\t\t\tprotocol: Protocols.ZWave,\n\t\t\t\ttype: ZWaveFrameType.BeamStop,\n\t\t\t\tchannel: beam.frameInfo.channel,\n\t\t\t};\n\t\t}\n\t}\n}\n\nexport function znifferDataMessageToCorruptedFrame(\n\tmsg: ZnifferDataMessage,\n\trssi?: RSSI,\n): CorruptedFrame {\n\tif (msg.checksumOK) {\n\t\tthrow new ZWaveError(\n\t\t\t`znifferDataMessageToCorruptedFrame expects the checksum to be incorrect`,\n\t\t\tZWaveErrorCodes.Argument_Invalid,\n\t\t);\n\t}\n\n\treturn {\n\t\tchannel: msg.channel,\n\t\tregion: msg.region,\n\t\trssiRaw: msg.rssiRaw,\n\t\trssi,\n\t\tprotocolDataRate: msg.protocolDataRate,\n\t\tpayload: msg.payload,\n\t};\n}\n"],
5
- "mappings": "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",
5
+ "mappings": "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",
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 });
@@ -59,6 +60,7 @@ function is700PlusSeries(chipType) {
59
60
  }
60
61
  return false;
61
62
  }
63
+ __name(is700PlusSeries, "is700PlusSeries");
62
64
  function tryConvertRSSI(rssi, chipType) {
63
65
  if (is700PlusSeries(chipType)) {
64
66
  return rssi * 4 - 256;
@@ -66,7 +68,11 @@ function tryConvertRSSI(rssi, chipType) {
66
68
  return rssi * 1.5 - 153.5;
67
69
  }
68
70
  }
71
+ __name(tryConvertRSSI, "tryConvertRSSI");
69
72
  class Zniffer extends import_shared.TypedEventEmitter {
73
+ static {
74
+ __name(this, "Zniffer");
75
+ }
70
76
  port;
71
77
  constructor(port, options = {}) {
72
78
  super();
@@ -373,17 +379,17 @@ supported frequencies: ${[...this._supportedFrequencies].map(([region, name]) =>
373
379
  const promise = (0, import_deferred_promise.createDeferredPromise)();
374
380
  const entry = {
375
381
  predicate,
376
- handler: (msg) => promise.resolve(msg),
382
+ handler: /* @__PURE__ */ __name((msg) => promise.resolve(msg), "handler"),
377
383
  timeout: void 0
378
384
  };
379
385
  this.awaitedMessages.push(entry);
380
- const removeEntry = () => {
386
+ const removeEntry = /* @__PURE__ */ __name(() => {
381
387
  if (entry.timeout)
382
388
  clearTimeout(entry.timeout);
383
389
  const index = this.awaitedMessages.indexOf(entry);
384
390
  if (index !== -1)
385
391
  this.awaitedMessages.splice(index, 1);
386
- };
392
+ }, "removeEntry");
387
393
  entry.timeout = setTimeout(() => {
388
394
  removeEntry();
389
395
  reject(new import_core.ZWaveError(`Received no matching message within the provided timeout!`, import_core.ZWaveErrorCodes.Controller_Timeout));
@@ -568,6 +574,7 @@ function captureToZLFEntry(capture) {
568
574
  buffer[buffer.length - 1] = 254;
569
575
  return buffer;
570
576
  }
577
+ __name(captureToZLFEntry, "captureToZLFEntry");
571
578
  // Annotate the CommonJS export names for ESM import in node:
572
579
  0 && (module.exports = {
573
580
  Zniffer
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../../../src/lib/zniffer/Zniffer.ts"],
4
4
  "sourcesContent": ["import {\n\tCommandClass,\n\tSecurity2CCMessageEncapsulation,\n\tSecurity2CCNonceGet,\n\tSecurity2CCNonceReport,\n\tSecurityCCNonceReport,\n} from \"@zwave-js/cc\";\nimport { DeviceConfig } from \"@zwave-js/config\";\nimport {\n\tCommandClasses,\n\ttype FrameType,\n\ttype LogConfig,\n\tMPDUHeaderType,\n\ttype MaybeNotKnown,\n\tNODE_ID_BROADCAST,\n\tNODE_ID_BROADCAST_LR,\n\ttype RSSI,\n\tSPANState,\n\tSecurityClass,\n\tSecurityManager,\n\tSecurityManager2,\n\ttype SecurityManagers,\n\ttype UnknownZWaveChipType,\n\tZWaveError,\n\tZWaveErrorCodes,\n\tZWaveLogContainer,\n\tZnifferRegion,\n\tZnifferRegionLegacy,\n\tgetChipTypeAndVersion,\n\tisLongRangeNodeId,\n\tsecurityClassIsS2,\n} from \"@zwave-js/core\";\nimport { sdkVersionGte } from \"@zwave-js/core\";\nimport { type CCParsingContext, type HostIDs } from \"@zwave-js/host\";\nimport {\n\ttype ZWaveSerialPortImplementation,\n\ttype ZnifferDataMessage,\n\tZnifferFrameType,\n\tZnifferGetFrequenciesRequest,\n\tZnifferGetFrequenciesResponse,\n\tZnifferGetFrequencyInfoRequest,\n\tZnifferGetFrequencyInfoResponse,\n\tZnifferGetVersionRequest,\n\tZnifferGetVersionResponse,\n\tZnifferMessage,\n\tZnifferMessageType,\n\tZnifferSerialPort,\n\tZnifferSerialPortBase,\n\tZnifferSetBaudRateRequest,\n\tZnifferSetBaudRateResponse,\n\tZnifferSetFrequencyRequest,\n\tZnifferSetFrequencyResponse,\n\tZnifferSocket,\n\tZnifferStartRequest,\n\tZnifferStartResponse,\n\tZnifferStopRequest,\n\tZnifferStopResponse,\n\tisZWaveSerialPortImplementation,\n} from \"@zwave-js/serial\";\nimport {\n\tBytes,\n\tTypedEventEmitter,\n\tgetEnumMemberName,\n\tisEnumMember,\n\tnoop,\n\tnum2hex,\n\tpick,\n} from \"@zwave-js/shared\";\nimport {\n\ttype DeferredPromise,\n\tcreateDeferredPromise,\n} from \"alcalzone-shared/deferred-promise\";\nimport fs from \"node:fs/promises\";\nimport { type ZWaveOptions } from \"../driver/ZWaveOptions.js\";\nimport { ZnifferLogger } from \"../log/Zniffer.js\";\nimport {\n\ttype CorruptedFrame,\n\ttype Frame,\n\tbeamToFrame,\n\tmpduToFrame,\n\tparseBeamFrame,\n\tparseMPDU,\n\tznifferDataMessageToCorruptedFrame,\n} from \"./MPDU.js\";\n\nconst logo: string = `\n\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2557 \u2588\u2588\u2557 \u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\n\u255A\u2550\u2550\u2588\u2588\u2588\u2554\u255D \u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2554\u2550\u2550\u2550\u255D \u2588\u2588\u2554\u2550\u2550\u2550\u255D \u2588\u2588\u2554\u2550\u2550\u2550\u2550\u255D \u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557 \u2588\u2588\u2551 \u2588\u2588\u2554\u2550\u2550\u2550\u2550\u255D\n \u2588\u2588\u2588\u2554\u255D \u2588\u2588\u2554\u2588\u2588\u2557 \u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2554\u255D \u2588\u2588\u2551 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\n \u2588\u2588\u2588\u2554\u255D \u2588\u2588\u2551\u255A\u2588\u2588\u2557\u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2554\u2550\u255D \u2588\u2588\u2554\u2550\u255D \u2588\u2588\u2554\u2550\u2550\u255D \u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557 \u2588\u2588 \u2588\u2588\u2551 \u255A\u2550\u2550\u2550\u2550\u2588\u2588\u2551\n\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2551 \u255A\u2588\u2588\u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2551 \u2588\u2588\u2551 \u255A\u2588\u2588\u2588\u2588\u2588\u2554\u255D \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2551\n\u255A\u2550\u2550\u2550\u2550\u2550\u2550\u255D \u255A\u2550\u255D \u255A\u2550\u2550\u2550\u255D \u255A\u2550\u255D \u255A\u2550\u255D \u255A\u2550\u255D \u255A\u2550\u2550\u2550\u2550\u2550\u2550\u255D \u255A\u2550\u255D \u255A\u2550\u255D \u255A\u2550\u2550\u2550\u2550\u255D \u255A\u2550\u2550\u2550\u2550\u2550\u2550\u255D\n`.trim();\n\nexport interface ZnifferEventCallbacks {\n\tready: () => void;\n\terror: (err: Error) => void;\n\tframe: (frame: Frame, rawData: Uint8Array) => void;\n\t\"corrupted frame\": (err: CorruptedFrame, rawData: Uint8Array) => void;\n}\n\nexport type ZnifferEvents = Extract<keyof ZnifferEventCallbacks, string>;\n\ninterface AwaitedThing<T> {\n\thandler: (thing: T) => void;\n\ttimeout?: NodeJS.Timeout;\n\tpredicate: (msg: T) => boolean;\n}\n\ntype AwaitedMessageEntry = AwaitedThing<ZnifferMessage>;\n\nexport interface ZnifferOptions {\n\t/**\n\t * Optional log configuration\n\t */\n\tlogConfig?: Partial<LogConfig>;\n\n\t/** Security keys for decrypting Z-Wave traffic */\n\tsecurityKeys?: ZWaveOptions[\"securityKeys\"];\n\t/** Security keys for decrypting Z-Wave Long Range traffic */\n\tsecurityKeysLongRange?: ZWaveOptions[\"securityKeysLongRange\"];\n\n\t/**\n\t * The RSSI values reported by the Zniffer are not actual RSSI values.\n\t * They can be converted to dBm, but the conversion is chip dependent and not documented for 700/800 series Zniffers.\n\t *\n\t * Set this option to `true` enable the conversion. Otherwise the raw values from the Zniffer will be used.\n\t */\n\tconvertRSSI?: boolean;\n\n\t/**\n\t * The frequency to initialize the Zniffer with. If not specified, the current setting will be kept.\n\t *\n\t * On 700/800 series Zniffers, this value matches the {@link ZnifferRegion}.\n\t *\n\t * On 400/500 series Zniffers, the value is firmware-specific.\n\t * Supported regions and their names have to be queried using the `getFrequencies` and `getFrequencyInfo(frequency)` commands.\n\t */\n\tdefaultFrequency?: number;\n\n\t/** Limit the number of frames that are kept in memory. */\n\tmaxCapturedFrames?: number;\n}\n\nfunction is700PlusSeries(\n\tchipType: string | UnknownZWaveChipType,\n): boolean {\n\tif (typeof chipType !== \"string\") {\n\t\treturn chipType.type >= 0x07;\n\t}\n\n\tconst chipTypeNumeric = getChipTypeAndVersion(chipType);\n\tif (chipTypeNumeric) {\n\t\treturn chipTypeNumeric.type >= 0x07;\n\t}\n\n\treturn false;\n}\n\nfunction tryConvertRSSI(\n\trssi: number,\n\tchipType: string | UnknownZWaveChipType,\n): number {\n\t// For 400/500 series, the conversion is documented in the Zniffer user guide.\n\t// The conversion for 700/800 series was reverse-engineered from the Zniffer firmware.\n\t// Here, we assume that only these two representations exist:\n\tif (is700PlusSeries(chipType)) {\n\t\treturn rssi * 4 - 256;\n\t} else {\n\t\treturn rssi * 1.5 - 153.5;\n\t}\n}\n\ninterface CapturedData {\n\ttimestamp: Date;\n\trawData: Uint8Array;\n\tframeData: Uint8Array;\n\tparsedFrame?: Frame | CorruptedFrame;\n}\n\nexport interface CapturedFrame {\n\ttimestamp: Date;\n\tframeData: Uint8Array;\n\tparsedFrame: Frame | CorruptedFrame;\n}\n\nexport class Zniffer extends TypedEventEmitter<ZnifferEventCallbacks> {\n\tpublic constructor(\n\t\tprivate port: string | ZWaveSerialPortImplementation,\n\t\toptions: ZnifferOptions = {},\n\t) {\n\t\tsuper();\n\n\t\t// Ensure the given serial port is valid\n\t\tif (\n\t\t\ttypeof port !== \"string\"\n\t\t\t&& !isZWaveSerialPortImplementation(port)\n\t\t) {\n\t\t\tthrow new ZWaveError(\n\t\t\t\t`The port must be a string or a valid custom serial port implementation!`,\n\t\t\t\tZWaveErrorCodes.Driver_InvalidOptions,\n\t\t\t);\n\t\t}\n\n\t\t// Initialize logging\n\t\tthis._logContainer = new ZWaveLogContainer(options.logConfig);\n\t\tthis.znifferLog = new ZnifferLogger(this, this._logContainer);\n\n\t\tthis._options = options;\n\n\t\tthis._active = false;\n\n\t\tthis.parsingContext = {\n\t\t\tgetHighestSecurityClass(\n\t\t\t\t_nodeId: number,\n\t\t\t): MaybeNotKnown<SecurityClass> {\n\t\t\t\treturn SecurityClass.S2_AccessControl;\n\t\t\t},\n\n\t\t\thasSecurityClass(\n\t\t\t\t_nodeId: number,\n\t\t\t\t_securityClass: SecurityClass,\n\t\t\t): MaybeNotKnown<boolean> {\n\t\t\t\t// We don't actually know. Attempt parsing with all security classes\n\t\t\t\treturn true;\n\t\t\t},\n\n\t\t\tsetSecurityClass(\n\t\t\t\t_nodeId: number,\n\t\t\t\t_securityClass: SecurityClass,\n\t\t\t\t_granted: boolean,\n\t\t\t): void {\n\t\t\t\t// Do nothing\n\t\t\t},\n\n\t\t\tgetDeviceConfig(_nodeId: number): DeviceConfig | undefined {\n\t\t\t\t// Disable strict validation while parsing certain CCs\n\t\t\t\t// Most of this stuff isn't actually needed, only the compat flags...\n\t\t\t\treturn new DeviceConfig(\n\t\t\t\t\t\"unknown.json\",\n\t\t\t\t\tfalse,\n\t\t\t\t\t\"UNKNOWN_MANUFACTURER\",\n\t\t\t\t\t0x0000,\n\t\t\t\t\t\"UNKNOWN_PRODUCT\",\n\t\t\t\t\t\"UNKNOWN_DESCRIPTION\",\n\t\t\t\t\t[],\n\t\t\t\t\t{\n\t\t\t\t\t\tmin: \"0.0\",\n\t\t\t\t\t\tmax: \"255.255\",\n\t\t\t\t\t},\n\t\t\t\t\ttrue,\n\t\t\t\t\tundefined,\n\t\t\t\t\tundefined,\n\t\t\t\t\tundefined,\n\t\t\t\t\tundefined,\n\t\t\t\t\t// ...down here:\n\t\t\t\t\t{\n\t\t\t\t\t\tdisableStrictEntryControlDataValidation: true,\n\t\t\t\t\t\tdisableStrictMeasurementValidation: true,\n\t\t\t\t\t},\n\t\t\t\t);\n\t\t\t},\n\t\t};\n\t}\n\n\tprivate _options: ZnifferOptions;\n\n\t/** The serial port instance */\n\tprivate serial: ZnifferSerialPortBase | undefined;\n\tprivate parsingContext: Omit<\n\t\tCCParsingContext,\n\t\tkeyof HostIDs | \"sourceNodeId\" | \"frameType\" | keyof SecurityManagers\n\t>;\n\n\tprivate _destroyPromise: DeferredPromise<void> | undefined;\n\tprivate get wasDestroyed(): boolean {\n\t\treturn !!this._destroyPromise;\n\t}\n\n\tprivate _chipType: string | UnknownZWaveChipType | undefined;\n\n\tprivate _currentFrequency: number | undefined;\n\t/** The currently configured frequency */\n\tpublic get currentFrequency(): number | undefined {\n\t\treturn this._currentFrequency;\n\t}\n\n\tprivate _supportedFrequencies: Map<number, string> = new Map();\n\t/** A map of supported frequency identifiers and their names */\n\tpublic get supportedFrequencies(): ReadonlyMap<number, string> {\n\t\treturn this._supportedFrequencies;\n\t}\n\n\tprivate _logContainer: ZWaveLogContainer;\n\tprivate znifferLog: ZnifferLogger;\n\n\t/** The security managers for each node */\n\tprivate securityManagers: Map<number, {\n\t\tsecurityManager: SecurityManager | undefined;\n\t\tsecurityManager2: SecurityManager2 | undefined;\n\t\tsecurityManagerLR: SecurityManager2 | undefined;\n\t}> = new Map();\n\n\t/** A list of awaited messages */\n\tprivate awaitedMessages: AwaitedMessageEntry[] = [];\n\n\tprivate _active: boolean;\n\t/** Whether the Zniffer instance is currently capturing */\n\tpublic get active(): boolean {\n\t\treturn this._active;\n\t}\n\n\tprivate _capturedFrames: CapturedData[] = [];\n\n\t/** A list of raw captured frames that can be saved to a .zlf file later */\n\tpublic get capturedFrames(): Readonly<CapturedFrame>[] {\n\t\treturn this._capturedFrames.filter((f) => f.parsedFrame !== undefined)\n\t\t\t.map((f) => ({\n\t\t\t\ttimestamp: f.timestamp,\n\t\t\t\tframeData: f.frameData,\n\t\t\t\tparsedFrame: f.parsedFrame!,\n\t\t\t}));\n\t}\n\n\tpublic async init(): Promise<void> {\n\t\tif (this.wasDestroyed) {\n\t\t\tthrow new ZWaveError(\n\t\t\t\t\"The Zniffer was destroyed. Create a new instance and initialize that one.\",\n\t\t\t\tZWaveErrorCodes.Driver_Destroyed,\n\t\t\t);\n\t\t}\n\n\t\t// Open the serial port\n\t\tif (typeof this.port === \"string\") {\n\t\t\tif (this.port.startsWith(\"tcp://\")) {\n\t\t\t\tconst url = new URL(this.port);\n\t\t\t\t// this.znifferLog.print(`opening serial port ${this.port}`);\n\t\t\t\tthis.serial = new ZnifferSocket(\n\t\t\t\t\t{\n\t\t\t\t\t\thost: url.hostname,\n\t\t\t\t\t\tport: parseInt(url.port),\n\t\t\t\t\t},\n\t\t\t\t\tthis._logContainer,\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\t// this.znifferLog.print(`opening serial port ${this.port}`);\n\t\t\t\tthis.serial = new ZnifferSerialPort(\n\t\t\t\t\tthis.port,\n\t\t\t\t\tthis._logContainer,\n\t\t\t\t);\n\t\t\t}\n\t\t} else {\n\t\t\t// this.znifferLog.print(\n\t\t\t// \t\"opening serial port using the provided custom implementation\",\n\t\t\t// );\n\t\t\tthis.serial = new ZnifferSerialPortBase(\n\t\t\t\tthis.port,\n\t\t\t\tthis._logContainer,\n\t\t\t);\n\t\t}\n\t\tthis.serial\n\t\t\t.on(\"data\", this.serialport_onData.bind(this))\n\t\t\t.on(\"error\", (err) => {\n\t\t\t\tthis.emit(\"error\", err);\n\t\t\t});\n\n\t\tawait this.serial.open();\n\n\t\tthis.znifferLog.print(logo, \"info\");\n\n\t\tawait this.stop();\n\n\t\tconst versionInfo = await this.getVersion();\n\t\tthis._chipType = versionInfo.chipType;\n\t\tthis.znifferLog.print(\n\t\t\t`received Zniffer info:\n Chip type: ${\n\t\t\t\ttypeof versionInfo.chipType === \"string\"\n\t\t\t\t\t? versionInfo.chipType\n\t\t\t\t\t: `unknown (${num2hex(versionInfo.chipType.type)}, ${\n\t\t\t\t\t\tnum2hex(versionInfo.chipType.version)\n\t\t\t\t\t})`\n\t\t\t}\n Zniffer version: ${versionInfo.majorVersion}.${versionInfo.minorVersion}`,\n\t\t\t\"info\",\n\t\t);\n\n\t\tawait this.setBaudrate(0);\n\n\t\tconst freqs = await this.getFrequencies();\n\t\tthis._currentFrequency = freqs.currentFrequency;\n\t\tif (is700PlusSeries(this._chipType)) {\n\t\t\t// The frequencies match the ZnifferRegion enum\n\t\t\tfor (const freq of freqs.supportedFrequencies) {\n\t\t\t\tthis._supportedFrequencies.set(\n\t\t\t\t\tfreq,\n\t\t\t\t\tgetEnumMemberName(ZnifferRegion, freq),\n\t\t\t\t);\n\t\t\t}\n\t\t\t// ... but there might be unknown regions. Query those from the Zniffer\n\t\t\tconst unknownRegions = freqs.supportedFrequencies.filter((f) =>\n\t\t\t\t!isEnumMember(ZnifferRegion, f)\n\t\t\t);\n\t\t\tfor (const freq of unknownRegions) {\n\t\t\t\tconst freqInfo = await this.getFrequencyInfo(freq);\n\t\t\t\tthis._supportedFrequencies.set(freq, freqInfo.frequencyName);\n\t\t\t}\n\t\t} else if (\n\t\t\t// Version 2.55+ supports querying the frequency names\n\t\t\tsdkVersionGte(\n\t\t\t\t`${versionInfo.majorVersion}.${versionInfo.minorVersion}`,\n\t\t\t\t\"2.55\",\n\t\t\t)\n\t\t) {\n\t\t\t// The frequencies are firmware-specific. Query them from the Zniffer\n\t\t\tfor (const freq of freqs.supportedFrequencies) {\n\t\t\t\tconst freqInfo = await this.getFrequencyInfo(freq);\n\t\t\t\tthis._supportedFrequencies.set(freq, freqInfo.frequencyName);\n\t\t\t}\n\t\t} else {\n\t\t\t// The frequencies match the ZnifferRegionLegacy enum, and their info cannot be queried\n\t\t\tfor (const freq of freqs.supportedFrequencies) {\n\t\t\t\tthis._supportedFrequencies.set(\n\t\t\t\t\tfreq,\n\t\t\t\t\tgetEnumMemberName(ZnifferRegionLegacy, freq),\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\n\t\tthis.znifferLog.print(\n\t\t\t`received frequency info:\ncurrent frequency: ${\n\t\t\t\tthis._supportedFrequencies.get(freqs.currentFrequency)\n\t\t\t\t\t?? `unknown (${num2hex(freqs.currentFrequency)})`\n\t\t\t}\nsupported frequencies: ${\n\t\t\t\t[...this._supportedFrequencies].map(([region, name]) =>\n\t\t\t\t\t`\\n \u00B7 ${region.toString().padStart(2, \" \")}: ${name}`\n\t\t\t\t).join(\"\")\n\t\t\t}`,\n\t\t\t\"info\",\n\t\t);\n\n\t\tif (\n\t\t\ttypeof this._options.defaultFrequency === \"number\"\n\t\t\t&& freqs.currentFrequency !== this._options.defaultFrequency\n\t\t\t&& this._supportedFrequencies.has(this._options.defaultFrequency)\n\t\t) {\n\t\t\tawait this.setFrequency(this._options.defaultFrequency);\n\t\t}\n\n\t\tthis.emit(\"ready\");\n\t}\n\n\t/**\n\t * Is called when the serial port has received a Zniffer frame\n\t */\n\tprivate async serialport_onData(\n\t\tdata: Uint8Array,\n\t): Promise<void> {\n\t\tlet msg: ZnifferMessage | undefined;\n\t\ttry {\n\t\t\tmsg = ZnifferMessage.parse(data);\n\t\t} catch (e: any) {\n\t\t\tconsole.error(e);\n\t\t\treturn;\n\t\t}\n\n\t\tif (msg.type === ZnifferMessageType.Command) {\n\t\t\tthis.handleResponse(msg);\n\t\t} else {\n\t\t\tconst dataMsg = msg as ZnifferDataMessage;\n\t\t\tconst capture: CapturedData = {\n\t\t\t\ttimestamp: new Date(),\n\t\t\t\trawData: data,\n\t\t\t\tframeData: dataMsg.payload,\n\t\t\t};\n\t\t\tthis._capturedFrames.push(capture);\n\t\t\tif (\n\t\t\t\tthis._options.maxCapturedFrames != undefined\n\t\t\t\t&& this._capturedFrames.length > this._options.maxCapturedFrames\n\t\t\t) {\n\t\t\t\tthis._capturedFrames.shift();\n\t\t\t}\n\t\t\tawait this.handleDataMessage(dataMsg, capture);\n\t\t}\n\t}\n\n\t/**\n\t * Is called when a Request-type message was received\n\t */\n\tprivate handleResponse(msg: ZnifferMessage): void {\n\t\t// Check if we have a dynamic handler waiting for this message\n\t\tfor (const entry of this.awaitedMessages) {\n\t\t\tif (entry.predicate(msg)) {\n\t\t\t\t// We do\n\t\t\t\tentry.handler(msg);\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t}\n\n\t/**\n\t * Is called when a Request-type message was received\n\t */\n\tprivate async handleDataMessage(\n\t\tmsg: ZnifferDataMessage,\n\t\tcapture: CapturedData,\n\t): Promise<void> {\n\t\ttry {\n\t\t\tlet convertedRSSI: RSSI | undefined;\n\t\t\tif (this._options.convertRSSI && this._chipType) {\n\t\t\t\tconvertedRSSI = tryConvertRSSI(\n\t\t\t\t\tmsg.rssiRaw,\n\t\t\t\t\tthis._chipType,\n\t\t\t\t);\n\t\t\t}\n\n\t\t\t// Short-circuit if we're dealing with beam frames\n\t\t\tif (\n\t\t\t\tmsg.frameType === ZnifferFrameType.BeamStart\n\t\t\t\t|| msg.frameType === ZnifferFrameType.BeamStop\n\t\t\t) {\n\t\t\t\tconst beam = parseBeamFrame(msg);\n\t\t\t\tbeam.frameInfo.rssi = convertedRSSI;\n\n\t\t\t\t// Emit the captured frame in a format that's easier to work with for applications.\n\t\t\t\tthis.znifferLog.beam(beam);\n\t\t\t\tconst frame = beamToFrame(beam);\n\t\t\t\tcapture.parsedFrame = frame;\n\t\t\t\tthis.emit(\"frame\", frame, capture.frameData);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t// Only handle messages with a valid checksum, expose the others as CRC errors\n\t\t\tif (!msg.checksumOK) {\n\t\t\t\tthis.znifferLog.crcError(msg);\n\t\t\t\tconst frame = znifferDataMessageToCorruptedFrame(msg);\n\t\t\t\tcapture.parsedFrame = frame;\n\t\t\t\tthis.emit(\"corrupted frame\", frame, capture.frameData);\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconst mpdu = parseMPDU(msg);\n\t\t\tmpdu.frameInfo.rssi = convertedRSSI;\n\n\t\t\t// Try to decode the CC while assuming the role of the receiver\n\t\t\tlet destSecurityManager: SecurityManager | undefined;\n\t\t\tlet destSecurityManager2: SecurityManager2 | undefined;\n\t\t\tlet destSecurityManagerLR: SecurityManager2 | undefined;\n\t\t\t// Only frames with a destination node id contains something that requires access to the own node ID\n\t\t\tlet destNodeId = 0xff;\n\n\t\t\tlet cc: CommandClass | undefined;\n\n\t\t\t// FIXME: Cache data => parsed CC, so we can understand re-transmitted S2 frames\n\n\t\t\tif (\n\t\t\t\tmpdu.payload.length > 0\n\t\t\t\t&& mpdu.headerType !== MPDUHeaderType.Acknowledgement\n\t\t\t) {\n\t\t\t\tif (\"destinationNodeId\" in mpdu) {\n\t\t\t\t\tdestNodeId = mpdu.destinationNodeId;\n\t\t\t\t\t({\n\t\t\t\t\t\tsecurityManager: destSecurityManager,\n\t\t\t\t\t\tsecurityManager2: destSecurityManager2,\n\t\t\t\t\t\tsecurityManagerLR: destSecurityManagerLR,\n\t\t\t\t\t} = await this.getSecurityManagers(mpdu.destinationNodeId));\n\t\t\t\t}\n\n\t\t\t\t// TODO: Support parsing multicast S2 frames\n\t\t\t\tconst frameType: FrameType =\n\t\t\t\t\tmpdu.headerType === MPDUHeaderType.Multicast\n\t\t\t\t\t\t? \"multicast\"\n\t\t\t\t\t\t: (destNodeId === NODE_ID_BROADCAST\n\t\t\t\t\t\t\t\t|| destNodeId === NODE_ID_BROADCAST_LR)\n\t\t\t\t\t\t? \"broadcast\"\n\t\t\t\t\t\t: \"singlecast\";\n\t\t\t\ttry {\n\t\t\t\t\tcc = await CommandClass.parseAsync(\n\t\t\t\t\t\tmpdu.payload,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\thomeId: mpdu.homeId,\n\t\t\t\t\t\t\townNodeId: destNodeId,\n\t\t\t\t\t\t\tsourceNodeId: mpdu.sourceNodeId,\n\t\t\t\t\t\t\tframeType,\n\t\t\t\t\t\t\tsecurityManager: destSecurityManager,\n\t\t\t\t\t\t\tsecurityManager2: destSecurityManager2,\n\t\t\t\t\t\t\tsecurityManagerLR: destSecurityManagerLR,\n\t\t\t\t\t\t\t...this.parsingContext,\n\t\t\t\t\t\t},\n\t\t\t\t\t);\n\t\t\t\t} catch (e: any) {\n\t\t\t\t\t// Ignore\n\t\t\t\t\tconsole.error(e.stack);\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.znifferLog.mpdu(mpdu, cc);\n\n\t\t\t// Emit the captured frame in a format that's easier to work with for applications.\n\t\t\tconst frame = mpduToFrame(mpdu, cc);\n\t\t\tcapture.parsedFrame = frame;\n\t\t\tthis.emit(\"frame\", frame, capture.frameData);\n\n\t\t\t// Update the security managers when nonces are exchanged, so we can\n\t\t\t// decrypt the communication\n\t\t\tif (cc?.ccId === CommandClasses[\"Security 2\"]) {\n\t\t\t\tconst securityManagers = await this.getSecurityManagers(\n\t\t\t\t\tmpdu.sourceNodeId,\n\t\t\t\t);\n\t\t\t\tconst isLR = isLongRangeNodeId(mpdu.sourceNodeId)\n\t\t\t\t\t|| isLongRangeNodeId(destNodeId);\n\t\t\t\tconst senderSecurityManager = isLR\n\t\t\t\t\t? securityManagers.securityManagerLR\n\t\t\t\t\t: securityManagers.securityManager2;\n\t\t\t\tconst destSecurityManager = isLR\n\t\t\t\t\t? destSecurityManagerLR\n\t\t\t\t\t: destSecurityManager2;\n\n\t\t\t\tif (senderSecurityManager && destSecurityManager) {\n\t\t\t\t\tif (cc instanceof Security2CCNonceGet) {\n\t\t\t\t\t\t// Nonce Get -> all nonces are now invalid\n\t\t\t\t\t\tsenderSecurityManager.deleteNonce(destNodeId);\n\t\t\t\t\t\tdestSecurityManager.deleteNonce(mpdu.sourceNodeId);\n\t\t\t\t\t} else if (cc instanceof Security2CCNonceReport && cc.SOS) {\n\t\t\t\t\t\t// Nonce Report (SOS) -> We only know the receiver's nonce\n\t\t\t\t\t\tsenderSecurityManager.setSPANState(destNodeId, {\n\t\t\t\t\t\t\ttype: SPANState.LocalEI,\n\t\t\t\t\t\t\treceiverEI: cc.receiverEI!,\n\t\t\t\t\t\t});\n\t\t\t\t\t\tdestSecurityManager.storeRemoteEI(\n\t\t\t\t\t\t\tmpdu.sourceNodeId,\n\t\t\t\t\t\t\tcc.receiverEI!,\n\t\t\t\t\t\t);\n\t\t\t\t\t} else if (cc instanceof Security2CCMessageEncapsulation) {\n\t\t\t\t\t\tconst senderEI = cc.getSenderEI();\n\t\t\t\t\t\tif (senderEI) {\n\t\t\t\t\t\t\t// The receiver should now have a valid SPAN state, since decoding the S2 CC updates it.\n\t\t\t\t\t\t\t// The security manager for the sender however, does not. Therefore, update it manually,\n\t\t\t\t\t\t\t// if the receiver SPAN is indeed valid.\n\n\t\t\t\t\t\t\tconst receiverSPANState = destSecurityManager\n\t\t\t\t\t\t\t\t.getSPANState(mpdu.sourceNodeId);\n\t\t\t\t\t\t\tif (receiverSPANState.type === SPANState.SPAN) {\n\t\t\t\t\t\t\t\tsenderSecurityManager.setSPANState(\n\t\t\t\t\t\t\t\t\tdestNodeId,\n\t\t\t\t\t\t\t\t\treceiverSPANState,\n\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (\n\t\t\t\tcc?.ccId === CommandClasses.Security\n\t\t\t\t&& cc instanceof SecurityCCNonceReport\n\t\t\t) {\n\t\t\t\tconst senderSecurityManager =\n\t\t\t\t\t(await this.getSecurityManagers(mpdu.sourceNodeId))\n\t\t\t\t\t\t.securityManager;\n\t\t\t\tconst destSecurityManager =\n\t\t\t\t\t(await this.getSecurityManagers(destNodeId))\n\t\t\t\t\t\t.securityManager;\n\n\t\t\t\tif (senderSecurityManager && destSecurityManager) {\n\t\t\t\t\t// Both nodes have a shared nonce now\n\t\t\t\t\tsenderSecurityManager.setNonce(\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tissuer: mpdu.sourceNodeId,\n\t\t\t\t\t\t\tnonceId: senderSecurityManager.getNonceId(\n\t\t\t\t\t\t\t\tcc.nonce,\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tnonce: cc.nonce,\n\t\t\t\t\t\t\treceiver: destNodeId,\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{ free: true },\n\t\t\t\t\t);\n\n\t\t\t\t\tdestSecurityManager.setNonce(\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tissuer: mpdu.sourceNodeId,\n\t\t\t\t\t\t\tnonceId: senderSecurityManager.getNonceId(\n\t\t\t\t\t\t\t\tcc.nonce,\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tnonce: cc.nonce,\n\t\t\t\t\t\t\treceiver: destNodeId,\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{ free: true },\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t} catch (e: any) {\n\t\t\tconsole.error(e);\n\t\t}\n\t}\n\n\t/**\n\t * Waits until a certain serial message is received or a timeout has elapsed. Returns the received message.\n\t * @param timeout The number of milliseconds to wait. If the timeout elapses, the returned promise will be rejected\n\t * @param predicate A predicate function to test all incoming messages.\n\t */\n\tprivate waitForMessage<T extends ZnifferMessage>(\n\t\tpredicate: (msg: ZnifferMessage) => boolean,\n\t\ttimeout: number,\n\t): Promise<T> {\n\t\treturn new Promise<T>((resolve, reject) => {\n\t\t\tconst promise = createDeferredPromise<ZnifferMessage>();\n\t\t\tconst entry: AwaitedMessageEntry = {\n\t\t\t\tpredicate,\n\t\t\t\thandler: (msg) => promise.resolve(msg),\n\t\t\t\ttimeout: undefined,\n\t\t\t};\n\t\t\tthis.awaitedMessages.push(entry);\n\t\t\tconst removeEntry = () => {\n\t\t\t\tif (entry.timeout) clearTimeout(entry.timeout);\n\t\t\t\tconst index = this.awaitedMessages.indexOf(entry);\n\t\t\t\tif (index !== -1) this.awaitedMessages.splice(index, 1);\n\t\t\t};\n\t\t\t// When the timeout elapses, remove the wait entry and reject the returned Promise\n\t\t\tentry.timeout = setTimeout(() => {\n\t\t\t\tremoveEntry();\n\t\t\t\treject(\n\t\t\t\t\tnew ZWaveError(\n\t\t\t\t\t\t`Received no matching message within the provided timeout!`,\n\t\t\t\t\t\tZWaveErrorCodes.Controller_Timeout,\n\t\t\t\t\t),\n\t\t\t\t);\n\t\t\t}, timeout);\n\t\t\t// When the promise is resolved, remove the wait entry and resolve the returned Promise\n\t\t\tvoid promise.then((cc) => {\n\t\t\t\tremoveEntry();\n\t\t\t\tresolve(cc as T);\n\t\t\t});\n\t\t});\n\t}\n\n\tprivate async getVersion() {\n\t\tconst req = new ZnifferGetVersionRequest();\n\t\tawait this.serial?.writeAsync(req.serialize());\n\t\tconst res = await this.waitForMessage<ZnifferGetVersionResponse>(\n\t\t\t(msg) => msg instanceof ZnifferGetVersionResponse,\n\t\t\t1000,\n\t\t);\n\n\t\treturn pick(res, [\"chipType\", \"majorVersion\", \"minorVersion\"]);\n\t}\n\n\tprivate async getFrequencies() {\n\t\tconst req = new ZnifferGetFrequenciesRequest();\n\t\tawait this.serial?.writeAsync(req.serialize());\n\t\tconst res = await this.waitForMessage<ZnifferGetFrequenciesResponse>(\n\t\t\t(msg) => msg instanceof ZnifferGetFrequenciesResponse,\n\t\t\t1000,\n\t\t);\n\n\t\treturn pick(res, [\n\t\t\t\"currentFrequency\",\n\t\t\t\"supportedFrequencies\",\n\t\t]);\n\t}\n\n\tpublic async setFrequency(frequency: number): Promise<void> {\n\t\tconst req = new ZnifferSetFrequencyRequest({ frequency });\n\t\tawait this.serial?.writeAsync(req.serialize());\n\t\tawait this.waitForMessage<ZnifferSetFrequencyResponse>(\n\t\t\t(msg) => msg instanceof ZnifferSetFrequencyResponse,\n\t\t\t1000,\n\t\t);\n\t\tthis._currentFrequency = frequency;\n\t}\n\n\tprivate async getFrequencyInfo(frequency: number) {\n\t\tconst req = new ZnifferGetFrequencyInfoRequest({ frequency });\n\t\tawait this.serial?.writeAsync(req.serialize());\n\t\tconst res = await this.waitForMessage<ZnifferGetFrequencyInfoResponse>(\n\t\t\t(msg) =>\n\t\t\t\tmsg instanceof ZnifferGetFrequencyInfoResponse\n\t\t\t\t&& msg.frequency === frequency,\n\t\t\t1000,\n\t\t);\n\n\t\treturn pick(res, [\"numChannels\", \"frequencyName\"]);\n\t}\n\n\t/** Starts the capture and discards all previously captured frames */\n\tpublic async start(): Promise<void> {\n\t\tif (this.wasDestroyed) {\n\t\t\tthrow new ZWaveError(\n\t\t\t\t\"The Zniffer is not ready or has been destroyed\",\n\t\t\t\tZWaveErrorCodes.Driver_NotReady,\n\t\t\t);\n\t\t}\n\n\t\tif (this._active) return;\n\t\tthis._capturedFrames = [];\n\t\tthis._active = true;\n\n\t\tconst req = new ZnifferStartRequest();\n\t\tawait this.serial?.writeAsync(req.serialize());\n\t\tawait this.waitForMessage<ZnifferStartResponse>(\n\t\t\t(msg) => msg instanceof ZnifferStartResponse,\n\t\t\t1000,\n\t\t);\n\t}\n\n\tpublic async stop(): Promise<void> {\n\t\tif (!this._active) return;\n\t\tthis._active = false;\n\n\t\tif (!this.serial) return;\n\n\t\tconst req = new ZnifferStopRequest();\n\t\tawait this.serial?.writeAsync(req.serialize());\n\t\tawait this.waitForMessage<ZnifferStopResponse>(\n\t\t\t(msg) => msg instanceof ZnifferStopResponse,\n\t\t\t1000,\n\t\t);\n\t}\n\n\tprivate async setBaudrate(baudrate: 0): Promise<void> {\n\t\tconst req = new ZnifferSetBaudRateRequest({ baudrate });\n\t\tawait this.serial?.writeAsync(req.serialize());\n\t\tawait this.waitForMessage<ZnifferSetBaudRateResponse>(\n\t\t\t(msg) => msg instanceof ZnifferSetBaudRateResponse,\n\t\t\t1000,\n\t\t);\n\t}\n\n\tprivate async getSecurityManagers(\n\t\tsourceNodeId: number,\n\t) {\n\t\tif (this.securityManagers.has(sourceNodeId)) {\n\t\t\treturn this.securityManagers.get(sourceNodeId)!;\n\t\t}\n\t\t// Initialize security\n\t\t// Set up the S0 security manager. We can only do that after the controller\n\t\t// interview because we need to know the controller node id.\n\t\tconst S0Key = this._options.securityKeys?.S0_Legacy;\n\t\tlet securityManager: SecurityManager | undefined;\n\t\tif (S0Key) {\n\t\t\t// this.znifferLog.print(\n\t\t\t// \t\"Network key for S0 configured, enabling S0 security manager...\",\n\t\t\t// );\n\t\t\tsecurityManager = new SecurityManager({\n\t\t\t\tnetworkKey: S0Key,\n\t\t\t\t// FIXME: Track nonces separately for each destination node\n\t\t\t\townNodeId: sourceNodeId,\n\t\t\t\tnonceTimeout: Number.POSITIVE_INFINITY,\n\t\t\t});\n\t\t\t// } else {\n\t\t\t// \tthis.znifferLog.print(\n\t\t\t// \t\t\"No network key for S0 configured, cannot decrypt communication from secure (S0) devices!\",\n\t\t\t// \t\t\"warn\",\n\t\t\t// \t);\n\t\t}\n\n\t\tlet securityManager2: SecurityManager2 | undefined;\n\t\tif (\n\t\t\tthis._options.securityKeys\n\t\t\t// Only set it up if we have security keys for at least one S2 security class\n\t\t\t&& Object.keys(this._options.securityKeys).some(\n\t\t\t\t(key) =>\n\t\t\t\t\tkey.startsWith(\"S2_\")\n\t\t\t\t\t&& key in SecurityClass\n\t\t\t\t\t&& securityClassIsS2((SecurityClass as any)[key]),\n\t\t\t)\n\t\t) {\n\t\t\t// this.znifferLog.print(\n\t\t\t// \t\"At least one network key for S2 configured, enabling S2 security manager...\",\n\t\t\t// );\n\t\t\tsecurityManager2 = await SecurityManager2.create();\n\t\t\t// Small hack: Zniffer does not care about S2 duplicates\n\t\t\tsecurityManager2.isDuplicateSinglecast = () => false;\n\n\t\t\t// Set up all keys\n\t\t\tfor (\n\t\t\t\tconst secClass of [\n\t\t\t\t\t\"S2_Unauthenticated\",\n\t\t\t\t\t\"S2_Authenticated\",\n\t\t\t\t\t\"S2_AccessControl\",\n\t\t\t\t\t\"S0_Legacy\",\n\t\t\t\t] as const\n\t\t\t) {\n\t\t\t\tconst key = this._options.securityKeys[secClass];\n\t\t\t\tif (key) {\n\t\t\t\t\tawait securityManager2.setKeyAsync(\n\t\t\t\t\t\tSecurityClass[secClass],\n\t\t\t\t\t\tkey,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t}\n\t\t\t// } else {\n\t\t\t// \tthis.znifferLog.print(\n\t\t\t// \t\t\"No network key for S2 configured, cannot decrypt communication from secure (S2) devices!\",\n\t\t\t// \t\t\"warn\",\n\t\t\t// \t);\n\t\t}\n\n\t\tlet securityManagerLR: SecurityManager2 | undefined;\n\t\tif (\n\t\t\tthis._options.securityKeysLongRange?.S2_AccessControl\n\t\t\t|| this._options.securityKeysLongRange?.S2_Authenticated\n\t\t) {\n\t\t\t// this.znifferLog.print(\n\t\t\t// \t\"At least one network key for Z-Wave Long Range configured, enabling security manager...\",\n\t\t\t// );\n\t\t\tsecurityManagerLR = await SecurityManager2.create();\n\t\t\t// Small hack: Zniffer does not care about S2 duplicates\n\t\t\tsecurityManagerLR.isDuplicateSinglecast = () => false;\n\n\t\t\t// Set up all keys\n\t\t\tif (this._options.securityKeysLongRange?.S2_AccessControl) {\n\t\t\t\tawait securityManagerLR.setKeyAsync(\n\t\t\t\t\tSecurityClass.S2_AccessControl,\n\t\t\t\t\tthis._options.securityKeysLongRange.S2_AccessControl,\n\t\t\t\t);\n\t\t\t}\n\t\t\tif (this._options.securityKeysLongRange?.S2_Authenticated) {\n\t\t\t\tawait securityManagerLR.setKeyAsync(\n\t\t\t\t\tSecurityClass.S2_Authenticated,\n\t\t\t\t\tthis._options.securityKeysLongRange.S2_Authenticated,\n\t\t\t\t);\n\t\t\t}\n\t\t\t// } else {\n\t\t\t// \tthis.znifferLog.print(\n\t\t\t// \t\t\"No network key for Z-Wave Long Range configured, cannot decrypt Long Range communication!\",\n\t\t\t// \t\t\"warn\",\n\t\t\t// \t);\n\t\t}\n\n\t\tconst ret = {\n\t\t\tsecurityManager,\n\t\t\tsecurityManager2,\n\t\t\tsecurityManagerLR,\n\t\t};\n\t\tthis.securityManagers.set(sourceNodeId, ret);\n\t\treturn ret;\n\t}\n\n\t/** Clears the list of captured frames */\n\tpublic clearCapturedFrames(): void {\n\t\tthis._capturedFrames = [];\n\t}\n\n\t/**\n\t * Get the captured frames in the official Zniffer application format.\n\t * @param frameFilter Optional predicate function to filter the frames included in the capture\n\t */\n\tpublic getCaptureAsZLFBuffer(\n\t\tframeFilter?: (frame: CapturedFrame) => boolean,\n\t): Uint8Array {\n\t\t// Mimics the current Zniffer software, without using features like sessions and comments\n\t\tconst header = new Bytes(2048).fill(0);\n\t\theader[0] = 0x68; // zniffer version\n\t\theader.writeUInt16BE(0x2312, 0x07fe); // checksum\n\t\tlet filteredFrames = this._capturedFrames;\n\t\tif (frameFilter) {\n\t\t\tfilteredFrames = filteredFrames.filter((f) =>\n\t\t\t\t// Always include Zniffer-protocol frames\n\t\t\t\tf.parsedFrame == undefined\n\t\t\t\t// Apply the filter to all other frames\n\t\t\t\t|| frameFilter({\n\t\t\t\t\tframeData: f.frameData,\n\t\t\t\t\tparsedFrame: f.parsedFrame,\n\t\t\t\t\ttimestamp: f.timestamp,\n\t\t\t\t})\n\t\t\t);\n\t\t}\n\t\treturn Bytes.concat([\n\t\t\theader,\n\t\t\t...filteredFrames.map(captureToZLFEntry),\n\t\t]);\n\t}\n\n\t/**\n\t * Saves the captured frames in a `.zlf` file that can be read by the official Zniffer application.\n\t * @param frameFilter Optional predicate function to filter the frames included in the capture\n\t */\n\tpublic async saveCaptureToFile(\n\t\tfilePath: string,\n\t\tframeFilter?: (frame: CapturedFrame) => boolean,\n\t): Promise<void> {\n\t\tawait fs.writeFile(filePath, this.getCaptureAsZLFBuffer(frameFilter));\n\t}\n\n\t/**\n\t * Terminates the Zniffer instance and closes the underlying serial connection.\n\t * Must be called under any circumstances.\n\t */\n\tpublic async destroy(): Promise<void> {\n\t\t// Ensure this is only called once and all subsequent calls block\n\t\tif (this._destroyPromise) return this._destroyPromise;\n\t\tthis._destroyPromise = createDeferredPromise();\n\n\t\tthis.znifferLog.print(\"Destroying Zniffer instance...\");\n\n\t\tif (this._active) {\n\t\t\tawait this.stop().catch(noop);\n\t\t}\n\n\t\tif (this.serial != undefined) {\n\t\t\t// Avoid spewing errors if the port was in the middle of receiving something\n\t\t\tthis.serial.removeAllListeners();\n\t\t\tif (this.serial.isOpen) await this.serial.close();\n\t\t\tthis.serial = undefined;\n\t\t}\n\n\t\tthis.znifferLog.print(\"Zniffer instance destroyed\");\n\n\t\t// destroy loggers as the very last thing\n\t\tthis._logContainer.destroy();\n\n\t\tthis._destroyPromise.resolve();\n\t}\n}\n\nfunction captureToZLFEntry(\n\tcapture: CapturedData,\n): Uint8Array {\n\tconst buffer = new Bytes(14 + capture.rawData.length).fill(0);\n\t// Convert the date to a .NET datetime\n\tlet ticks = BigInt(capture.timestamp.getTime()) * 10000n\n\t\t+ 621355968000000000n;\n\tticks = ticks | 4000000000000000n; // marks the time as .NET DateTimeKind.Local\n\n\tbuffer.writeBigUInt64LE(ticks, 0);\n\tconst direction = 0b0000_0000; // inbound, outbound would be 0b1000_0000\n\n\tbuffer[8] = direction | 0x01; // dir + session ID\n\tbuffer[9] = capture.rawData.length;\n\t// bytes 10-12 are empty\n\tbuffer.set(capture.rawData, 13);\n\tbuffer[buffer.length - 1] = 0xfe; // end of frame\n\treturn buffer;\n}\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;;;AAAA,gBAMO;AACP,oBAA6B;AAC7B,kBAuBO;AACP,IAAAA,eAA8B;AAE9B,oBAwBO;AACP,oBAQO;AACP,8BAGO;AACP,sBAAe;AAEf,qBAA8B;AAC9B,kBAQO;AAEP,MAAM,OAAe;;;;;;;EAOnB,KAAI;AAoDN,SAAS,gBACR,UAAuC;AAEvC,MAAI,OAAO,aAAa,UAAU;AACjC,WAAO,SAAS,QAAQ;EACzB;AAEA,QAAM,sBAAkB,mCAAsB,QAAQ;AACtD,MAAI,iBAAiB;AACpB,WAAO,gBAAgB,QAAQ;EAChC;AAEA,SAAO;AACR;AAEA,SAAS,eACR,MACA,UAAuC;AAKvC,MAAI,gBAAgB,QAAQ,GAAG;AAC9B,WAAO,OAAO,IAAI;EACnB,OAAO;AACN,WAAO,OAAO,MAAM;EACrB;AACD;AAeM,MAAO,gBAAgB,gCAAwC;EAE3D;EADT,YACS,MACR,UAA0B,CAAA,GAAE;AAE5B,UAAK;AAHG,SAAA,OAAA;AAMR,QACC,OAAO,SAAS,YACb,KAAC,+CAAgC,IAAI,GACvC;AACD,YAAM,IAAI,uBACT,2EACA,4BAAgB,qBAAqB;IAEvC;AAGA,SAAK,gBAAgB,IAAI,8BAAkB,QAAQ,SAAS;AAC5D,SAAK,aAAa,IAAI,6BAAc,MAAM,KAAK,aAAa;AAE5D,SAAK,WAAW;AAEhB,SAAK,UAAU;AAEf,SAAK,iBAAiB;MACrB,wBACC,SAAe;AAEf,eAAO,0BAAc;MACtB;MAEA,iBACC,SACA,gBAA6B;AAG7B,eAAO;MACR;MAEA,iBACC,SACA,gBACA,UAAiB;MAGlB;MAEA,gBAAgB,SAAe;AAG9B,eAAO,IAAI;UACV;UACA;UACA;UACA;UACA;UACA;UACA,CAAA;UACA;YACC,KAAK;YACL,KAAK;;UAEN;UACA;UACA;UACA;UACA;;UAEA;YACC,yCAAyC;YACzC,oCAAoC;;QACpC;MAEH;;EAEF;EAEQ;;EAGA;EACA;EAKA;EACR,IAAY,eAAY;AACvB,WAAO,CAAC,CAAC,KAAK;EACf;EAEQ;EAEA;;EAER,IAAW,mBAAgB;AAC1B,WAAO,KAAK;EACb;EAEQ,wBAA6C,oBAAI,IAAG;;EAE5D,IAAW,uBAAoB;AAC9B,WAAO,KAAK;EACb;EAEQ;EACA;;EAGA,mBAIH,oBAAI,IAAG;;EAGJ,kBAAyC,CAAA;EAEzC;;EAER,IAAW,SAAM;AAChB,WAAO,KAAK;EACb;EAEQ,kBAAkC,CAAA;;EAG1C,IAAW,iBAAc;AACxB,WAAO,KAAK,gBAAgB,OAAO,CAAC,MAAM,EAAE,gBAAgB,MAAS,EACnE,IAAI,CAAC,OAAO;MACZ,WAAW,EAAE;MACb,WAAW,EAAE;MACb,aAAa,EAAE;MACd;EACJ;EAEO,MAAM,OAAI;AAChB,QAAI,KAAK,cAAc;AACtB,YAAM,IAAI,uBACT,6EACA,4BAAgB,gBAAgB;IAElC;AAGA,QAAI,OAAO,KAAK,SAAS,UAAU;AAClC,UAAI,KAAK,KAAK,WAAW,QAAQ,GAAG;AACnC,cAAM,MAAM,IAAI,IAAI,KAAK,IAAI;AAE7B,aAAK,SAAS,IAAI,4BACjB;UACC,MAAM,IAAI;UACV,MAAM,SAAS,IAAI,IAAI;WAExB,KAAK,aAAa;MAEpB,OAAO;AAEN,aAAK,SAAS,IAAI,gCACjB,KAAK,MACL,KAAK,aAAa;MAEpB;IACD,OAAO;AAIN,WAAK,SAAS,IAAI,oCACjB,KAAK,MACL,KAAK,aAAa;IAEpB;AACA,SAAK,OACH,GAAG,QAAQ,KAAK,kBAAkB,KAAK,IAAI,CAAC,EAC5C,GAAG,SAAS,CAAC,QAAO;AACpB,WAAK,KAAK,SAAS,GAAG;IACvB,CAAC;AAEF,UAAM,KAAK,OAAO,KAAI;AAEtB,SAAK,WAAW,MAAM,MAAM,MAAM;AAElC,UAAM,KAAK,KAAI;AAEf,UAAM,cAAc,MAAM,KAAK,WAAU;AACzC,SAAK,YAAY,YAAY;AAC7B,SAAK,WAAW,MACf;qBAEC,OAAO,YAAY,aAAa,WAC7B,YAAY,WACZ,gBAAY,uBAAQ,YAAY,SAAS,IAAI,CAAC,SAC/C,uBAAQ,YAAY,SAAS,OAAO,CACrC,GACF;qBACkB,YAAY,YAAY,IAAI,YAAY,YAAY,IACtE,MAAM;AAGP,UAAM,KAAK,YAAY,CAAC;AAExB,UAAM,QAAQ,MAAM,KAAK,eAAc;AACvC,SAAK,oBAAoB,MAAM;AAC/B,QAAI,gBAAgB,KAAK,SAAS,GAAG;AAEpC,iBAAW,QAAQ,MAAM,sBAAsB;AAC9C,aAAK,sBAAsB,IAC1B,UACA,iCAAkB,2BAAe,IAAI,CAAC;MAExC;AAEA,YAAM,iBAAiB,MAAM,qBAAqB,OAAO,CAAC,MACzD,KAAC,4BAAa,2BAAe,CAAC,CAAC;AAEhC,iBAAW,QAAQ,gBAAgB;AAClC,cAAM,WAAW,MAAM,KAAK,iBAAiB,IAAI;AACjD,aAAK,sBAAsB,IAAI,MAAM,SAAS,aAAa;MAC5D;IACD;;UAEC,4BACC,GAAG,YAAY,YAAY,IAAI,YAAY,YAAY,IACvD,MAAM;MAEN;AAED,iBAAW,QAAQ,MAAM,sBAAsB;AAC9C,cAAM,WAAW,MAAM,KAAK,iBAAiB,IAAI;AACjD,aAAK,sBAAsB,IAAI,MAAM,SAAS,aAAa;MAC5D;IACD,OAAO;AAEN,iBAAW,QAAQ,MAAM,sBAAsB;AAC9C,aAAK,sBAAsB,IAC1B,UACA,iCAAkB,iCAAqB,IAAI,CAAC;MAE9C;IACD;AAEA,SAAK,WAAW,MACf;yBAEC,KAAK,sBAAsB,IAAI,MAAM,gBAAgB,KACjD,gBAAY,uBAAQ,MAAM,gBAAgB,CAAC,GAChD;yBAEC,CAAC,GAAG,KAAK,qBAAqB,EAAE,IAAI,CAAC,CAAC,QAAQ,IAAI,MACjD;SAAS,OAAO,SAAQ,EAAG,SAAS,GAAG,GAAG,CAAC,KAAK,IAAI,EAAE,EACrD,KAAK,EAAE,CACV,IACA,MAAM;AAGP,QACC,OAAO,KAAK,SAAS,qBAAqB,YACvC,MAAM,qBAAqB,KAAK,SAAS,oBACzC,KAAK,sBAAsB,IAAI,KAAK,SAAS,gBAAgB,GAC/D;AACD,YAAM,KAAK,aAAa,KAAK,SAAS,gBAAgB;IACvD;AAEA,SAAK,KAAK,OAAO;EAClB;;;;EAKQ,MAAM,kBACb,MAAgB;AAEhB,QAAI;AACJ,QAAI;AACH,YAAM,6BAAe,MAAM,IAAI;IAChC,SAAS,GAAQ;AAChB,cAAQ,MAAM,CAAC;AACf;IACD;AAEA,QAAI,IAAI,SAAS,iCAAmB,SAAS;AAC5C,WAAK,eAAe,GAAG;IACxB,OAAO;AACN,YAAM,UAAU;AAChB,YAAM,UAAwB;QAC7B,WAAW,oBAAI,KAAI;QACnB,SAAS;QACT,WAAW,QAAQ;;AAEpB,WAAK,gBAAgB,KAAK,OAAO;AACjC,UACC,KAAK,SAAS,qBAAqB,UAChC,KAAK,gBAAgB,SAAS,KAAK,SAAS,mBAC9C;AACD,aAAK,gBAAgB,MAAK;MAC3B;AACA,YAAM,KAAK,kBAAkB,SAAS,OAAO;IAC9C;EACD;;;;EAKQ,eAAe,KAAmB;AAEzC,eAAW,SAAS,KAAK,iBAAiB;AACzC,UAAI,MAAM,UAAU,GAAG,GAAG;AAEzB,cAAM,QAAQ,GAAG;AACjB;MACD;IACD;EACD;;;;EAKQ,MAAM,kBACb,KACA,SAAqB;AAErB,QAAI;AACH,UAAI;AACJ,UAAI,KAAK,SAAS,eAAe,KAAK,WAAW;AAChD,wBAAgB,eACf,IAAI,SACJ,KAAK,SAAS;MAEhB;AAGA,UACC,IAAI,cAAc,+BAAiB,aAChC,IAAI,cAAc,+BAAiB,UACrC;AACD,cAAM,WAAO,4BAAe,GAAG;AAC/B,aAAK,UAAU,OAAO;AAGtB,aAAK,WAAW,KAAK,IAAI;AACzB,cAAMC,aAAQ,yBAAY,IAAI;AAC9B,gBAAQ,cAAcA;AACtB,aAAK,KAAK,SAASA,QAAO,QAAQ,SAAS;AAC3C;MACD;AAGA,UAAI,CAAC,IAAI,YAAY;AACpB,aAAK,WAAW,SAAS,GAAG;AAC5B,cAAMA,aAAQ,gDAAmC,GAAG;AACpD,gBAAQ,cAAcA;AACtB,aAAK,KAAK,mBAAmBA,QAAO,QAAQ,SAAS;AACrD;MACD;AAEA,YAAM,WAAO,uBAAU,GAAG;AAC1B,WAAK,UAAU,OAAO;AAGtB,UAAI;AACJ,UAAI;AACJ,UAAI;AAEJ,UAAI,aAAa;AAEjB,UAAI;AAIJ,UACC,KAAK,QAAQ,SAAS,KACnB,KAAK,eAAe,2BAAe,iBACrC;AACD,YAAI,uBAAuB,MAAM;AAChC,uBAAa,KAAK;AAClB,WAAC;YACA,iBAAiB;YACjB,kBAAkB;YAClB,mBAAmB;cAChB,MAAM,KAAK,oBAAoB,KAAK,iBAAiB;QAC1D;AAGA,cAAM,YACL,KAAK,eAAe,2BAAe,YAChC,cACC,eAAe,iCACb,eAAe,mCAClB,cACA;AACJ,YAAI;AACH,eAAK,MAAM,uBAAa,WACvB,KAAK,SACL;YACC,QAAQ,KAAK;YACb,WAAW;YACX,cAAc,KAAK;YACnB;YACA,iBAAiB;YACjB,kBAAkB;YAClB,mBAAmB;YACnB,GAAG,KAAK;WACR;QAEH,SAAS,GAAQ;AAEhB,kBAAQ,MAAM,EAAE,KAAK;QACtB;MACD;AAEA,WAAK,WAAW,KAAK,MAAM,EAAE;AAG7B,YAAM,YAAQ,yBAAY,MAAM,EAAE;AAClC,cAAQ,cAAc;AACtB,WAAK,KAAK,SAAS,OAAO,QAAQ,SAAS;AAI3C,UAAI,IAAI,SAAS,2BAAe,YAAY,GAAG;AAC9C,cAAM,mBAAmB,MAAM,KAAK,oBACnC,KAAK,YAAY;AAElB,cAAM,WAAO,+BAAkB,KAAK,YAAY,SAC5C,+BAAkB,UAAU;AAChC,cAAM,wBAAwB,OAC3B,iBAAiB,oBACjB,iBAAiB;AACpB,cAAMC,uBAAsB,OACzB,wBACA;AAEH,YAAI,yBAAyBA,sBAAqB;AACjD,cAAI,cAAc,+BAAqB;AAEtC,kCAAsB,YAAY,UAAU;AAC5C,YAAAA,qBAAoB,YAAY,KAAK,YAAY;UAClD,WAAW,cAAc,oCAA0B,GAAG,KAAK;AAE1D,kCAAsB,aAAa,YAAY;cAC9C,MAAM,sBAAU;cAChB,YAAY,GAAG;aACf;AACD,YAAAA,qBAAoB,cACnB,KAAK,cACL,GAAG,UAAW;UAEhB,WAAW,cAAc,2CAAiC;AACzD,kBAAM,WAAW,GAAG,YAAW;AAC/B,gBAAI,UAAU;AAKb,oBAAM,oBAAoBA,qBACxB,aAAa,KAAK,YAAY;AAChC,kBAAI,kBAAkB,SAAS,sBAAU,MAAM;AAC9C,sCAAsB,aACrB,YACA,iBAAiB;cAEnB;YACD;UACD;QACD;MACD,WACC,IAAI,SAAS,2BAAe,YACzB,cAAc,iCAChB;AACD,cAAM,yBACJ,MAAM,KAAK,oBAAoB,KAAK,YAAY,GAC/C;AACH,cAAMA,wBACJ,MAAM,KAAK,oBAAoB,UAAU,GACxC;AAEH,YAAI,yBAAyBA,sBAAqB;AAEjD,gCAAsB,SACrB;YACC,QAAQ,KAAK;YACb,SAAS,sBAAsB,WAC9B,GAAG,KAAK;aAGV;YACC,OAAO,GAAG;YACV,UAAU;aAEX,EAAE,MAAM,KAAI,CAAE;AAGf,UAAAA,qBAAoB,SACnB;YACC,QAAQ,KAAK;YACb,SAAS,sBAAsB,WAC9B,GAAG,KAAK;aAGV;YACC,OAAO,GAAG;YACV,UAAU;aAEX,EAAE,MAAM,KAAI,CAAE;QAEhB;MACD;IACD,SAAS,GAAQ;AAChB,cAAQ,MAAM,CAAC;IAChB;EACD;;;;;;EAOQ,eACP,WACA,SAAe;AAEf,WAAO,IAAI,QAAW,CAAC,SAAS,WAAU;AACzC,YAAM,cAAU,+CAAqB;AACrC,YAAM,QAA6B;QAClC;QACA,SAAS,CAAC,QAAQ,QAAQ,QAAQ,GAAG;QACrC,SAAS;;AAEV,WAAK,gBAAgB,KAAK,KAAK;AAC/B,YAAM,cAAc,MAAK;AACxB,YAAI,MAAM;AAAS,uBAAa,MAAM,OAAO;AAC7C,cAAM,QAAQ,KAAK,gBAAgB,QAAQ,KAAK;AAChD,YAAI,UAAU;AAAI,eAAK,gBAAgB,OAAO,OAAO,CAAC;MACvD;AAEA,YAAM,UAAU,WAAW,MAAK;AAC/B,oBAAW;AACX,eACC,IAAI,uBACH,6DACA,4BAAgB,kBAAkB,CAClC;MAEH,GAAG,OAAO;AAEV,WAAK,QAAQ,KAAK,CAAC,OAAM;AACxB,oBAAW;AACX,gBAAQ,EAAO;MAChB,CAAC;IACF,CAAC;EACF;EAEQ,MAAM,aAAU;AACvB,UAAM,MAAM,IAAI,uCAAwB;AACxC,UAAM,KAAK,QAAQ,WAAW,IAAI,UAAS,CAAE;AAC7C,UAAM,MAAM,MAAM,KAAK,eACtB,CAAC,QAAQ,eAAe,yCACxB,GAAI;AAGL,eAAO,oBAAK,KAAK,CAAC,YAAY,gBAAgB,cAAc,CAAC;EAC9D;EAEQ,MAAM,iBAAc;AAC3B,UAAM,MAAM,IAAI,2CAA4B;AAC5C,UAAM,KAAK,QAAQ,WAAW,IAAI,UAAS,CAAE;AAC7C,UAAM,MAAM,MAAM,KAAK,eACtB,CAAC,QAAQ,eAAe,6CACxB,GAAI;AAGL,eAAO,oBAAK,KAAK;MAChB;MACA;KACA;EACF;EAEO,MAAM,aAAa,WAAiB;AAC1C,UAAM,MAAM,IAAI,yCAA2B,EAAE,UAAS,CAAE;AACxD,UAAM,KAAK,QAAQ,WAAW,IAAI,UAAS,CAAE;AAC7C,UAAM,KAAK,eACV,CAAC,QAAQ,eAAe,2CACxB,GAAI;AAEL,SAAK,oBAAoB;EAC1B;EAEQ,MAAM,iBAAiB,WAAiB;AAC/C,UAAM,MAAM,IAAI,6CAA+B,EAAE,UAAS,CAAE;AAC5D,UAAM,KAAK,QAAQ,WAAW,IAAI,UAAS,CAAE;AAC7C,UAAM,MAAM,MAAM,KAAK,eACtB,CAAC,QACA,eAAe,iDACZ,IAAI,cAAc,WACtB,GAAI;AAGL,eAAO,oBAAK,KAAK,CAAC,eAAe,eAAe,CAAC;EAClD;;EAGO,MAAM,QAAK;AACjB,QAAI,KAAK,cAAc;AACtB,YAAM,IAAI,uBACT,kDACA,4BAAgB,eAAe;IAEjC;AAEA,QAAI,KAAK;AAAS;AAClB,SAAK,kBAAkB,CAAA;AACvB,SAAK,UAAU;AAEf,UAAM,MAAM,IAAI,kCAAmB;AACnC,UAAM,KAAK,QAAQ,WAAW,IAAI,UAAS,CAAE;AAC7C,UAAM,KAAK,eACV,CAAC,QAAQ,eAAe,oCACxB,GAAI;EAEN;EAEO,MAAM,OAAI;AAChB,QAAI,CAAC,KAAK;AAAS;AACnB,SAAK,UAAU;AAEf,QAAI,CAAC,KAAK;AAAQ;AAElB,UAAM,MAAM,IAAI,iCAAkB;AAClC,UAAM,KAAK,QAAQ,WAAW,IAAI,UAAS,CAAE;AAC7C,UAAM,KAAK,eACV,CAAC,QAAQ,eAAe,mCACxB,GAAI;EAEN;EAEQ,MAAM,YAAY,UAAW;AACpC,UAAM,MAAM,IAAI,wCAA0B,EAAE,SAAQ,CAAE;AACtD,UAAM,KAAK,QAAQ,WAAW,IAAI,UAAS,CAAE;AAC7C,UAAM,KAAK,eACV,CAAC,QAAQ,eAAe,0CACxB,GAAI;EAEN;EAEQ,MAAM,oBACb,cAAoB;AAEpB,QAAI,KAAK,iBAAiB,IAAI,YAAY,GAAG;AAC5C,aAAO,KAAK,iBAAiB,IAAI,YAAY;IAC9C;AAIA,UAAM,QAAQ,KAAK,SAAS,cAAc;AAC1C,QAAI;AACJ,QAAI,OAAO;AAIV,wBAAkB,IAAI,4BAAgB;QACrC,YAAY;;QAEZ,WAAW;QACX,cAAc,OAAO;OACrB;IAMF;AAEA,QAAI;AACJ,QACC,KAAK,SAAS,gBAEX,OAAO,KAAK,KAAK,SAAS,YAAY,EAAE,KAC1C,CAAC,QACA,IAAI,WAAW,KAAK,KACjB,OAAO,iCACP,+BAAmB,0BAAsB,GAAG,CAAC,CAAC,GAElD;AAID,yBAAmB,MAAM,6BAAiB,OAAM;AAEhD,uBAAiB,wBAAwB,MAAM;AAG/C,iBACO,YAAY;QACjB;QACA;QACA;QACA;SAEA;AACD,cAAM,MAAM,KAAK,SAAS,aAAa,QAAQ;AAC/C,YAAI,KAAK;AACR,gBAAM,iBAAiB,YACtB,0BAAc,QAAQ,GACtB,GAAG;QAEL;MACD;IAMD;AAEA,QAAI;AACJ,QACC,KAAK,SAAS,uBAAuB,oBAClC,KAAK,SAAS,uBAAuB,kBACvC;AAID,0BAAoB,MAAM,6BAAiB,OAAM;AAEjD,wBAAkB,wBAAwB,MAAM;AAGhD,UAAI,KAAK,SAAS,uBAAuB,kBAAkB;AAC1D,cAAM,kBAAkB,YACvB,0BAAc,kBACd,KAAK,SAAS,sBAAsB,gBAAgB;MAEtD;AACA,UAAI,KAAK,SAAS,uBAAuB,kBAAkB;AAC1D,cAAM,kBAAkB,YACvB,0BAAc,kBACd,KAAK,SAAS,sBAAsB,gBAAgB;MAEtD;IAMD;AAEA,UAAM,MAAM;MACX;MACA;MACA;;AAED,SAAK,iBAAiB,IAAI,cAAc,GAAG;AAC3C,WAAO;EACR;;EAGO,sBAAmB;AACzB,SAAK,kBAAkB,CAAA;EACxB;;;;;EAMO,sBACN,aAA+C;AAG/C,UAAM,SAAS,IAAI,oBAAM,IAAI,EAAE,KAAK,CAAC;AACrC,WAAO,CAAC,IAAI;AACZ,WAAO,cAAc,MAAQ,IAAM;AACnC,QAAI,iBAAiB,KAAK;AAC1B,QAAI,aAAa;AAChB,uBAAiB,eAAe,OAAO,CAAC;;QAEvC,EAAE,eAAe,UAEd,YAAY;UACd,WAAW,EAAE;UACb,aAAa,EAAE;UACf,WAAW,EAAE;SACb;OAAC;IAEJ;AACA,WAAO,oBAAM,OAAO;MACnB;MACA,GAAG,eAAe,IAAI,iBAAiB;KACvC;EACF;;;;;EAMO,MAAM,kBACZ,UACA,aAA+C;AAE/C,UAAM,gBAAAC,QAAG,UAAU,UAAU,KAAK,sBAAsB,WAAW,CAAC;EACrE;;;;;EAMO,MAAM,UAAO;AAEnB,QAAI,KAAK;AAAiB,aAAO,KAAK;AACtC,SAAK,sBAAkB,+CAAqB;AAE5C,SAAK,WAAW,MAAM,gCAAgC;AAEtD,QAAI,KAAK,SAAS;AACjB,YAAM,KAAK,KAAI,EAAG,MAAM,kBAAI;IAC7B;AAEA,QAAI,KAAK,UAAU,QAAW;AAE7B,WAAK,OAAO,mBAAkB;AAC9B,UAAI,KAAK,OAAO;AAAQ,cAAM,KAAK,OAAO,MAAK;AAC/C,WAAK,SAAS;IACf;AAEA,SAAK,WAAW,MAAM,4BAA4B;AAGlD,SAAK,cAAc,QAAO;AAE1B,SAAK,gBAAgB,QAAO;EAC7B;;AAGD,SAAS,kBACR,SAAqB;AAErB,QAAM,SAAS,IAAI,oBAAM,KAAK,QAAQ,QAAQ,MAAM,EAAE,KAAK,CAAC;AAE5D,MAAI,QAAQ,OAAO,QAAQ,UAAU,QAAO,CAAE,IAAI,SAC/C;AACH,UAAQ,QAAQ;AAEhB,SAAO,iBAAiB,OAAO,CAAC;AAChC,QAAM,YAAY;AAElB,SAAO,CAAC,IAAI,YAAY;AACxB,SAAO,CAAC,IAAI,QAAQ,QAAQ;AAE5B,SAAO,IAAI,QAAQ,SAAS,EAAE;AAC9B,SAAO,OAAO,SAAS,CAAC,IAAI;AAC5B,SAAO;AACR;",
5
+ "mappings": "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",
6
6
  "names": ["import_core", "frame", "destSecurityManager", "fs"]
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 });
@@ -32,6 +33,9 @@ var import_deferred_promise = require("alcalzone-shared/deferred-promise");
32
33
  var import_node_net = require("node:net");
33
34
  var import_Utils = require("./Utils.js");
34
35
  class MockServer {
36
+ static {
37
+ __name(this, "MockServer");
38
+ }
35
39
  options;
36
40
  constructor(options = {}) {
37
41
  this.options = options;
@@ -149,6 +153,7 @@ function prepareMocks(mockPort, controller = {}, nodes = []) {
149
153
  mockNodes
150
154
  };
151
155
  }
156
+ __name(prepareMocks, "prepareMocks");
152
157
  function createMockNodeOptionsFromDump(dump) {
153
158
  const ret = {
154
159
  id: dump.id
@@ -230,6 +235,7 @@ function createMockNodeOptionsFromDump(dump) {
230
235
  }
231
236
  return ret;
232
237
  }
238
+ __name(createMockNodeOptionsFromDump, "createMockNodeOptionsFromDump");
233
239
  function createCCCapabilitiesFromDump(ccId, dump) {
234
240
  const ret = {
235
241
  ccId,
@@ -251,6 +257,7 @@ function createCCCapabilitiesFromDump(ccId, dump) {
251
257
  }
252
258
  return ret;
253
259
  }
260
+ __name(createCCCapabilitiesFromDump, "createCCCapabilitiesFromDump");
254
261
  function createConfigurationCCCapabilitiesFromDump(dump) {
255
262
  const ret = {
256
263
  bulkSupport: false,
@@ -278,6 +285,7 @@ function createConfigurationCCCapabilitiesFromDump(dump) {
278
285
  }
279
286
  return ret;
280
287
  }
288
+ __name(createConfigurationCCCapabilitiesFromDump, "createConfigurationCCCapabilitiesFromDump");
281
289
  function createNotificationCCCapabilitiesFromDump(dump) {
282
290
  const supportsV1Alarm = findDumpedValue(dump, import_core.CommandClasses.Notification, import_cc.NotificationCCValues.supportsV1Alarm.id, false);
283
291
  const ret = {
@@ -291,12 +299,14 @@ function createNotificationCCCapabilitiesFromDump(dump) {
291
299
  }
292
300
  return ret;
293
301
  }
302
+ __name(createNotificationCCCapabilitiesFromDump, "createNotificationCCCapabilitiesFromDump");
294
303
  function createBinarySwitchCCCapabilitiesFromDump(dump) {
295
304
  const defaultValue = findDumpedValue(dump, import_core.CommandClasses["Binary Switch"], import_cc.BinarySwitchCCValues.currentValue.id, void 0);
296
305
  return {
297
306
  defaultValue
298
307
  };
299
308
  }
309
+ __name(createBinarySwitchCCCapabilitiesFromDump, "createBinarySwitchCCCapabilitiesFromDump");
300
310
  function createMultilevelSwitchCCCapabilitiesFromDump(dump) {
301
311
  const defaultValue = findDumpedValue(dump, import_core.CommandClasses["Multilevel Switch"], import_cc.MultilevelSwitchCCValues.currentValue.id, void 0);
302
312
  const switchType = findDumpedValue(dump, import_core.CommandClasses["Multilevel Switch"], import_cc.MultilevelSwitchCCValues.switchType.id, import_cc.SwitchType["Down/Up"]);
@@ -305,6 +315,7 @@ function createMultilevelSwitchCCCapabilitiesFromDump(dump) {
305
315
  primarySwitchType: switchType
306
316
  };
307
317
  }
318
+ __name(createMultilevelSwitchCCCapabilitiesFromDump, "createMultilevelSwitchCCCapabilitiesFromDump");
308
319
  function createSoundSwitchCCCapabilitiesFromDump(dump) {
309
320
  const defaultToneId = findDumpedValue(dump, import_core.CommandClasses["Sound Switch"], import_cc.SoundSwitchCCValues.defaultToneId.id, 1);
310
321
  const defaultVolume = findDumpedValue(dump, import_core.CommandClasses["Sound Switch"], import_cc.SoundSwitchCCValues.defaultVolume.id, 50);
@@ -331,12 +342,15 @@ function createSoundSwitchCCCapabilitiesFromDump(dump) {
331
342
  }
332
343
  return ret;
333
344
  }
345
+ __name(createSoundSwitchCCCapabilitiesFromDump, "createSoundSwitchCCCapabilitiesFromDump");
334
346
  function findDumpedValue(dump, commandClass, valueId, defaultValue) {
335
347
  return dump.values.find((id) => id.property === valueId.property && id.propertyKey === valueId.propertyKey)?.value ?? defaultValue;
336
348
  }
349
+ __name(findDumpedValue, "findDumpedValue");
337
350
  function findDumpedMetadata(dump, commandClass, valueId) {
338
351
  return dump.values.find((id) => id.property === valueId.property && id.propertyKey === valueId.propertyKey)?.metadata;
339
352
  }
353
+ __name(findDumpedMetadata, "findDumpedMetadata");
340
354
  // Annotate the CommonJS export names for ESM import in node:
341
355
  0 && (module.exports = {
342
356
  MockServer,
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../src/mockServer.ts"],
4
4
  "sourcesContent": ["import {\n\ttype CiaoService,\n\tProtocol,\n\ttype Responder as MdnsResponder,\n\tgetResponder as getMdnsResponder,\n} from \"@homebridge/ciao\";\nimport {\n\tBinarySwitchCCValues,\n\tMultilevelSwitchCCValues,\n\tNotificationCCValues,\n\tSoundSwitchCCValues,\n\tSwitchType,\n} from \"@zwave-js/cc\";\nimport {\n\tCommandClasses,\n\ttype ConfigurationMetadata,\n\ttype ValueID,\n\ttype ValueMetadata,\n\ttype ValueMetadataNumeric,\n} from \"@zwave-js/core\";\nimport type { ZWaveSerialPort } from \"@zwave-js/serial\";\nimport {\n\ttype MockPortBinding,\n\tcreateAndOpenMockedZWaveSerialPort,\n} from \"@zwave-js/serial/mock\";\nimport { getErrorMessage } from \"@zwave-js/shared\";\nimport {\n\ttype BinarySwitchCCCapabilities,\n\ttype ConfigurationCCCapabilities,\n\tMockController,\n\ttype MockControllerBehavior,\n\ttype MockControllerOptions,\n\tMockNode,\n\ttype MockNodeBehavior,\n\ttype MockNodeOptions,\n\ttype MultilevelSwitchCCCapabilities,\n\ttype NotificationCCCapabilities,\n\ttype PartialCCCapabilities,\n\ttype SoundSwitchCCCapabilities,\n\tgetDefaultMockEndpointCapabilities,\n\tgetDefaultMockNodeCapabilities,\n} from \"@zwave-js/testing\";\nimport { createDeferredPromise } from \"alcalzone-shared/deferred-promise\";\nimport { type AddressInfo, type Server, createServer } from \"node:net\";\nimport {\n\tProtocolVersion,\n\tcreateDefaultMockControllerBehaviors,\n\tcreateDefaultMockNodeBehaviors,\n} from \"./Utils.js\";\nimport { type CommandClassDump, type NodeDump } from \"./lib/node/Dump.js\";\n\nexport type MockServerControllerOptions =\n\t& Pick<\n\t\tMockControllerOptions,\n\t\t\"ownNodeId\" | \"homeId\" | \"capabilities\"\n\t>\n\t& {\n\t\tbehaviors?: MockControllerBehavior[];\n\t};\n\nexport type MockServerNodeOptions =\n\t& Pick<\n\t\tMockNodeOptions,\n\t\t\"id\" | \"capabilities\"\n\t>\n\t& {\n\t\tbehaviors?: MockNodeBehavior[];\n\t};\n\nexport type MockServerInitHook = (\n\tcontroller: MockController,\n\tnodes: MockNode[],\n) => void;\n\nexport interface MockServerOptions {\n\tinterface?: string;\n\tport?: number;\n\tconfig?: {\n\t\tcontroller?: MockServerControllerOptions;\n\t\tnodes?: MockServerNodeOptions[];\n\t\tonInit?: MockServerInitHook;\n\t};\n}\n\nexport class MockServer {\n\tpublic constructor(private options: MockServerOptions = {}) {}\n\n\tprivate serialport: ZWaveSerialPort | undefined;\n\tprivate binding: MockPortBinding | undefined;\n\tprivate server: Server | undefined;\n\tprivate responder: MdnsResponder | undefined;\n\tprivate service: CiaoService | undefined;\n\tprivate mockController: MockController | undefined;\n\tprivate mockNodes: MockNode[] | undefined;\n\n\tpublic async start(): Promise<void> {\n\t\tconst { port: serialport, binding } =\n\t\t\tawait createAndOpenMockedZWaveSerialPort(\"/tty/FAKE\");\n\n\t\tthis.serialport = serialport;\n\t\tthis.binding = binding;\n\n\t\tconsole.log(\"Mock serial port opened\");\n\n\t\t// Hook up a fake controller and nodes\n\t\t({ mockController: this.mockController, mockNodes: this.mockNodes } =\n\t\t\tprepareMocks(\n\t\t\t\tbinding,\n\t\t\t\tthis.options.config?.controller,\n\t\t\t\tthis.options.config?.nodes,\n\t\t\t));\n\n\t\t// Call the init hook if it is defined\n\t\tif (typeof this.options.config?.onInit === \"function\") {\n\t\t\tthis.options.config.onInit(this.mockController, this.mockNodes);\n\t\t}\n\n\t\t// Start a TCP server, listen for connections, and forward them to the serial port\n\t\tthis.server = createServer((socket) => {\n\t\t\tif (!this.serialport) {\n\t\t\t\tconsole.error(\"Serial port not initialized\");\n\t\t\t\tsocket.destroy();\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tconsole.log(\"Client connected\");\n\n\t\t\tsocket.pipe(this.serialport);\n\t\t\tthis.serialport.on(\"data\", (chunk) => {\n\t\t\t\tif (typeof chunk === \"number\") {\n\t\t\t\t\tsocket.write(Uint8Array.from([chunk]));\n\t\t\t\t} else {\n\t\t\t\t\tsocket.write(chunk);\n\t\t\t\t}\n\t\t\t});\n\n\t\t\t// when the connection is closed, unpipe the streams\n\t\t\tsocket.on(\"close\", () => {\n\t\t\t\tconsole.log(\"Client disconnected\");\n\n\t\t\t\tsocket.unpipe(this.serialport);\n\t\t\t\tthis.serialport?.removeAllListeners(\"data\");\n\t\t\t});\n\t\t});\n\n\t\tconst port = this.options.port ?? 5555;\n\t\tthis.responder = getMdnsResponder();\n\t\tthis.service = this.responder.createService({\n\t\t\tname: \"zwave-mock-server\",\n\t\t\ttype: \"zwave\",\n\t\t\tprotocol: Protocol.TCP,\n\t\t\tport,\n\t\t\ttxt: {\n\t\t\t\tmanufacturer: \"Z-Wave JS\",\n\t\t\t\tmodel: \"Mock Server\",\n\t\t\t},\n\t\t});\n\n\t\t// Do not allow more than one client to connect\n\t\tthis.server.maxConnections = 1;\n\n\t\tconst promise = createDeferredPromise();\n\t\tthis.server.on(\"error\", (err) => {\n\t\t\tif ((err as any).code === \"EADDRINUSE\") {\n\t\t\t\tpromise.reject(err);\n\t\t\t}\n\t\t});\n\t\tthis.server.listen(\n\t\t\t{\n\t\t\t\thost: this.options.interface,\n\t\t\t\tport,\n\t\t\t},\n\t\t\tasync () => {\n\t\t\t\tconst address: AddressInfo = this.server!.address() as any;\n\t\t\t\tconsole.log(\n\t\t\t\t\t`Server listening on tcp://${address.address}:${address.port}`,\n\t\t\t\t);\n\n\t\t\t\tpromise.resolve();\n\n\t\t\t\t// Advertise the service via mDNS\n\t\t\t\ttry {\n\t\t\t\t\tawait this.service!.advertise();\n\t\t\t\t\tconsole.log(\n\t\t\t\t\t\t`Enabled mDNS service discovery.`,\n\t\t\t\t\t);\n\t\t\t\t} catch (e) {\n\t\t\t\t\tconsole.error(\n\t\t\t\t\t\t`Failed to enable mDNS service discovery: ${\n\t\t\t\t\t\t\tgetErrorMessage(e)\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\tpublic async stop(): Promise<void> {\n\t\tconsole.log(\"Shutting down mock server...\");\n\t\tawait this.service?.end();\n\t\tawait this.service?.destroy();\n\t\tawait this.responder?.shutdown();\n\t\tthis.mockController?.destroy();\n\t\tthis.server?.close();\n\t\tawait this.serialport?.close();\n\t\tif (this.binding?.isOpen) await this.binding?.close();\n\t\tconsole.log(\"Mock server shut down\");\n\t}\n}\n\nfunction prepareMocks(\n\tmockPort: MockPortBinding,\n\tcontroller: MockServerControllerOptions = {},\n\tnodes: MockServerNodeOptions[] = [],\n): { mockController: MockController; mockNodes: MockNode[] } {\n\tconst mockController = new MockController({\n\t\thomeId: 0x7e570001,\n\t\townNodeId: 1,\n\t\t...controller,\n\t\tserial: mockPort,\n\t});\n\t// Apply default behaviors that are required for interacting with the driver correctly\n\tmockController.defineBehavior(...createDefaultMockControllerBehaviors());\n\t// Apply custom behaviors\n\tif (controller.behaviors) {\n\t\tmockController.defineBehavior(...controller.behaviors);\n\t}\n\n\tconst mockNodes: MockNode[] = [];\n\tfor (const node of nodes) {\n\t\tconst mockNode = new MockNode({\n\t\t\t...node,\n\t\t\tcontroller: mockController,\n\t\t});\n\t\tmockController.addNode(mockNode);\n\t\tmockNodes.push(mockNode);\n\n\t\t// Apply default behaviors that are required for interacting with the driver correctly\n\t\tmockNode.defineBehavior(...createDefaultMockNodeBehaviors());\n\t\t// Apply custom behaviors\n\t\tif (node.behaviors) {\n\t\t\tmockNode.defineBehavior(...node.behaviors);\n\t\t}\n\t}\n\n\treturn {\n\t\tmockController,\n\t\tmockNodes,\n\t};\n}\n\nexport function createMockNodeOptionsFromDump(\n\tdump: NodeDump,\n): MockServerNodeOptions {\n\tconst ret: MockServerNodeOptions = {\n\t\tid: dump.id,\n\t};\n\n\tret.capabilities = getDefaultMockNodeCapabilities();\n\n\tif (typeof dump.isListening === \"boolean\") {\n\t\tret.capabilities.isListening = dump.isListening;\n\t}\n\tif (dump.isFrequentListening !== \"unknown\") {\n\t\tret.capabilities.isFrequentListening = dump.isFrequentListening;\n\t}\n\tif (typeof dump.isRouting === \"boolean\") {\n\t\tret.capabilities.isRouting = dump.isRouting;\n\t}\n\tif (typeof dump.supportsBeaming === \"boolean\") {\n\t\tret.capabilities.supportsBeaming = dump.supportsBeaming;\n\t}\n\tif (typeof dump.supportsSecurity === \"boolean\") {\n\t\tret.capabilities.supportsSecurity = dump.supportsSecurity;\n\t}\n\tif (typeof dump.supportedDataRates === \"boolean\") {\n\t\tret.capabilities.supportedDataRates = dump.supportedDataRates;\n\t}\n\tif ((ProtocolVersion as any)[dump.protocol] !== undefined) {\n\t\tret.capabilities.protocolVersion =\n\t\t\t(ProtocolVersion as any)[dump.protocol];\n\t}\n\n\tif (dump.deviceClass !== \"unknown\") {\n\t\tret.capabilities.basicDeviceClass = dump.deviceClass.basic.key;\n\t\tret.capabilities.genericDeviceClass = dump.deviceClass.generic.key;\n\t\tret.capabilities.specificDeviceClass = dump.deviceClass.specific.key;\n\t}\n\n\tret.capabilities.firmwareVersion = dump.fingerprint.firmwareVersion;\n\tret.capabilities.manufacturerId = parseInt(\n\t\tdump.fingerprint.manufacturerId,\n\t\t16,\n\t);\n\tret.capabilities.productType = parseInt(dump.fingerprint.productType, 16);\n\tret.capabilities.productId = parseInt(dump.fingerprint.productId, 16);\n\n\tfor (const [ccName, ccDump] of Object.entries(dump.commandClasses)) {\n\t\tconst ccId = (CommandClasses as any)[ccName];\n\t\tif (ccId == undefined) continue;\n\t\t// FIXME: Security encapsulation is not supported yet in mocks\n\t\tif (\n\t\t\tccId === CommandClasses.Security\n\t\t\t|| ccId === CommandClasses[\"Security 2\"]\n\t\t) {\n\t\t\tcontinue;\n\t\t}\n\t\t// FIXME: Supervision encapsulation is not supported yet in mocks\n\t\tif (ccId === CommandClasses.Supervision) {\n\t\t\tcontinue;\n\t\t}\n\t\t// FIXME: Transport Service encapsulation is not supported yet in mocks\n\t\tif (ccId === CommandClasses[\"Transport Service\"]) {\n\t\t\tcontinue;\n\t\t}\n\n\t\tret.capabilities.commandClasses ??= [];\n\t\tret.capabilities.commandClasses.push(\n\t\t\tcreateCCCapabilitiesFromDump(ccId, ccDump),\n\t\t);\n\t}\n\n\tif (dump.endpoints) {\n\t\t// eslint-disable-next-line @typescript-eslint/no-unused-vars\n\t\tfor (const [indexStr, endpointDump] of Object.entries(dump.endpoints)) {\n\t\t\t// FIXME: The mocks expect endpoints to be consecutive\n\t\t\t// const index = parseInt(indexStr);\n\n\t\t\tconst epCaps = getDefaultMockEndpointCapabilities(\n\t\t\t\t// @ts-expect-error We are initializing the device classes above\n\t\t\t\tret.capabilities,\n\t\t\t);\n\t\t\tlet epCCs: PartialCCCapabilities[] | undefined;\n\t\t\tif (endpointDump.deviceClass !== \"unknown\") {\n\t\t\t\tepCaps.genericDeviceClass =\n\t\t\t\t\tendpointDump.deviceClass.generic.key;\n\t\t\t\tepCaps.specificDeviceClass =\n\t\t\t\t\tendpointDump.deviceClass.specific.key;\n\t\t\t}\n\n\t\t\tfor (\n\t\t\t\tconst [ccName, ccDump] of Object.entries(\n\t\t\t\t\tendpointDump.commandClasses,\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\tconst ccId = (CommandClasses as any)[ccName];\n\t\t\t\tif (ccId == undefined) continue;\n\t\t\t\t// FIXME: Security encapsulation is not supported yet in mocks\n\t\t\t\tif (\n\t\t\t\t\tccId === CommandClasses.Security\n\t\t\t\t\t|| ccId === CommandClasses[\"Security 2\"]\n\t\t\t\t) {\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tepCCs ??= [];\n\t\t\t\tepCCs.push(\n\t\t\t\t\tcreateCCCapabilitiesFromDump(ccId, ccDump),\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tret.capabilities.endpoints ??= [];\n\t\t\tret.capabilities.endpoints.push({\n\t\t\t\t...epCaps,\n\t\t\t\tcommandClasses: epCCs,\n\t\t\t});\n\t\t}\n\t}\n\n\treturn ret;\n}\n\nfunction createCCCapabilitiesFromDump(\n\tccId: CommandClasses,\n\tdump: CommandClassDump,\n): PartialCCCapabilities {\n\tconst ret: PartialCCCapabilities = {\n\t\tccId,\n\t\tisSupported: dump.isSupported,\n\t\tisControlled: dump.isControlled,\n\t\tsecure: dump.secure,\n\t\tversion: dump.version,\n\t};\n\n\t// Parse CC specific info from values\n\tif (ccId === CommandClasses.Configuration) {\n\t\tObject.assign(ret, createConfigurationCCCapabilitiesFromDump(dump));\n\t} else if (ccId === CommandClasses.Notification) {\n\t\tObject.assign(ret, createNotificationCCCapabilitiesFromDump(dump));\n\t} else if (ccId === CommandClasses[\"Binary Switch\"]) {\n\t\tObject.assign(ret, createBinarySwitchCCCapabilitiesFromDump(dump));\n\t} else if (ccId === CommandClasses[\"Multilevel Switch\"]) {\n\t\tObject.assign(ret, createMultilevelSwitchCCCapabilitiesFromDump(dump));\n\t} else if (ccId === CommandClasses[\"Sound Switch\"]) {\n\t\tObject.assign(ret, createSoundSwitchCCCapabilitiesFromDump(dump));\n\t}\n\n\treturn ret;\n}\n\nfunction createConfigurationCCCapabilitiesFromDump(\n\tdump: CommandClassDump,\n): ConfigurationCCCapabilities {\n\tconst ret: ConfigurationCCCapabilities = {\n\t\tbulkSupport: false,\n\t\tparameters: [],\n\t};\n\n\tfor (const val of dump.values) {\n\t\tif (typeof val.property !== \"number\") continue;\n\t\t// Mocks don't support partial parameters\n\t\tif (val.propertyKey != undefined) continue;\n\t\t// Metadata contains the param information\n\t\tif (!val.metadata) continue;\n\t\tconst meta = val.metadata as ConfigurationMetadata;\n\n\t\tret.parameters.push({\n\t\t\t\"#\": val.property,\n\t\t\tvalueSize: meta.valueSize ?? 1,\n\t\t\tname: meta.label,\n\t\t\tinfo: meta.description,\n\t\t\tformat: meta.format,\n\t\t\tminValue: meta.min,\n\t\t\tmaxValue: meta.max,\n\t\t\tdefaultValue: meta.default,\n\t\t\treadonly: !meta.writeable,\n\t\t});\n\t}\n\n\treturn ret;\n}\n\nfunction createNotificationCCCapabilitiesFromDump(\n\tdump: CommandClassDump,\n): NotificationCCCapabilities {\n\tconst supportsV1Alarm = findDumpedValue(\n\t\tdump,\n\t\tCommandClasses.Notification,\n\t\tNotificationCCValues.supportsV1Alarm.id,\n\t\tfalse,\n\t);\n\tconst ret: NotificationCCCapabilities = {\n\t\tsupportsV1Alarm,\n\t\tnotificationTypesAndEvents: {},\n\t};\n\n\tconst supportedNotificationTypes: number[] = findDumpedValue(\n\t\tdump,\n\t\tCommandClasses.Notification,\n\t\tNotificationCCValues.supportedNotificationTypes.id,\n\t\t[],\n\t);\n\n\tfor (const type of supportedNotificationTypes) {\n\t\tconst supportedEvents: number[] = findDumpedValue(\n\t\t\tdump,\n\t\t\tCommandClasses.Notification,\n\t\t\tNotificationCCValues.supportedNotificationEvents(type).id,\n\t\t\t[],\n\t\t);\n\t\tret.notificationTypesAndEvents[type] = supportedEvents;\n\t}\n\n\treturn ret;\n}\n\nfunction createBinarySwitchCCCapabilitiesFromDump(\n\tdump: CommandClassDump,\n): BinarySwitchCCCapabilities {\n\tconst defaultValue = findDumpedValue(\n\t\tdump,\n\t\tCommandClasses[\"Binary Switch\"],\n\t\tBinarySwitchCCValues.currentValue.id,\n\t\tundefined,\n\t);\n\treturn {\n\t\tdefaultValue,\n\t};\n}\n\nfunction createMultilevelSwitchCCCapabilitiesFromDump(\n\tdump: CommandClassDump,\n): MultilevelSwitchCCCapabilities {\n\tconst defaultValue = findDumpedValue(\n\t\tdump,\n\t\tCommandClasses[\"Multilevel Switch\"],\n\t\tMultilevelSwitchCCValues.currentValue.id,\n\t\tundefined,\n\t);\n\n\tconst switchType = findDumpedValue(\n\t\tdump,\n\t\tCommandClasses[\"Multilevel Switch\"],\n\t\tMultilevelSwitchCCValues.switchType.id,\n\t\tSwitchType[\"Down/Up\"],\n\t);\n\n\treturn {\n\t\tdefaultValue,\n\t\tprimarySwitchType: switchType,\n\t};\n}\n\nfunction createSoundSwitchCCCapabilitiesFromDump(\n\tdump: CommandClassDump,\n): SoundSwitchCCCapabilities {\n\tconst defaultToneId = findDumpedValue(\n\t\tdump,\n\t\tCommandClasses[\"Sound Switch\"],\n\t\tSoundSwitchCCValues.defaultToneId.id,\n\t\t1,\n\t);\n\tconst defaultVolume = findDumpedValue(\n\t\tdump,\n\t\tCommandClasses[\"Sound Switch\"],\n\t\tSoundSwitchCCValues.defaultVolume.id,\n\t\t50,\n\t);\n\n\tconst ret: SoundSwitchCCCapabilities = {\n\t\tdefaultToneId,\n\t\tdefaultVolume,\n\t\ttones: [],\n\t};\n\n\tconst tonesMetadata = findDumpedMetadata<ValueMetadataNumeric>(\n\t\tdump,\n\t\tCommandClasses[\"Sound Switch\"],\n\t\tSoundSwitchCCValues.toneId.id,\n\t);\n\n\tif (tonesMetadata?.states) {\n\t\tfor (\n\t\t\tconst [toneIdStr, nameAndDuration] of Object.entries(\n\t\t\t\ttonesMetadata.states,\n\t\t\t)\n\t\t) {\n\t\t\tconst toneId = parseInt(toneIdStr);\n\t\t\tif (Number.isNaN(toneId) || toneId < 1 || toneId > 0xfe) continue;\n\n\t\t\tconst durationIndex = nameAndDuration.lastIndexOf(\"(\");\n\t\t\tif (durationIndex === -1) continue;\n\n\t\t\tconst name = nameAndDuration.slice(0, durationIndex).trim();\n\t\t\tconst duration = parseInt(\n\t\t\t\tnameAndDuration.slice(durationIndex + 1, -1),\n\t\t\t\t10,\n\t\t\t);\n\t\t\tif (Number.isNaN(duration)) continue;\n\n\t\t\tret.tones.push({ name, duration });\n\t\t}\n\t}\n\n\treturn ret;\n}\n\nfunction findDumpedValue<T>(\n\tdump: CommandClassDump,\n\tcommandClass: CommandClasses,\n\tvalueId: ValueID,\n\tdefaultValue: T,\n): T {\n\treturn (\n\t\tdump.values.find((id) =>\n\t\t\tid.property === valueId.property\n\t\t\t&& id.propertyKey === valueId.propertyKey\n\t\t)?.value\n\t) as (T | undefined) ?? defaultValue;\n}\n\nfunction findDumpedMetadata<T extends ValueMetadata>(\n\tdump: CommandClassDump,\n\tcommandClass: CommandClasses,\n\tvalueId: ValueID,\n): T | undefined {\n\treturn (\n\t\tdump.values.find((id) =>\n\t\t\tid.property === valueId.property\n\t\t\t&& id.propertyKey === valueId.propertyKey\n\t\t)?.metadata as (T | undefined)\n\t);\n}\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;AAAA;;;;;;AAAA,kBAKO;AACP,gBAMO;AACP,kBAMO;AAEP,kBAGO;AACP,oBAAgC;AAChC,qBAeO;AACP,8BAAsC;AACtC,sBAA4D;AAC5D,mBAIO;AAoCD,MAAO,WAAU;EACK;EAA3B,YAA2B,UAA6B,CAAA,GAAE;AAA/B,SAAA,UAAA;EAAkC;EAErD;EACA;EACA;EACA;EACA;EACA;EACA;EAED,MAAM,QAAK;AACjB,UAAM,EAAE,MAAM,YAAY,QAAO,IAChC,UAAM,gDAAmC,WAAW;AAErD,SAAK,aAAa;AAClB,SAAK,UAAU;AAEf,YAAQ,IAAI,yBAAyB;AAGrC,KAAC,EAAE,gBAAgB,KAAK,gBAAgB,WAAW,KAAK,UAAS,IAChE,aACC,SACA,KAAK,QAAQ,QAAQ,YACrB,KAAK,QAAQ,QAAQ,KAAK;AAI5B,QAAI,OAAO,KAAK,QAAQ,QAAQ,WAAW,YAAY;AACtD,WAAK,QAAQ,OAAO,OAAO,KAAK,gBAAgB,KAAK,SAAS;IAC/D;AAGA,SAAK,aAAS,8BAAa,CAAC,WAAU;AACrC,UAAI,CAAC,KAAK,YAAY;AACrB,gBAAQ,MAAM,6BAA6B;AAC3C,eAAO,QAAO;AACd;MACD;AAEA,cAAQ,IAAI,kBAAkB;AAE9B,aAAO,KAAK,KAAK,UAAU;AAC3B,WAAK,WAAW,GAAG,QAAQ,CAAC,UAAS;AACpC,YAAI,OAAO,UAAU,UAAU;AAC9B,iBAAO,MAAM,WAAW,KAAK,CAAC,KAAK,CAAC,CAAC;QACtC,OAAO;AACN,iBAAO,MAAM,KAAK;QACnB;MACD,CAAC;AAGD,aAAO,GAAG,SAAS,MAAK;AACvB,gBAAQ,IAAI,qBAAqB;AAEjC,eAAO,OAAO,KAAK,UAAU;AAC7B,aAAK,YAAY,mBAAmB,MAAM;MAC3C,CAAC;IACF,CAAC;AAED,UAAM,OAAO,KAAK,QAAQ,QAAQ;AAClC,SAAK,gBAAY,YAAAA,cAAgB;AACjC,SAAK,UAAU,KAAK,UAAU,cAAc;MAC3C,MAAM;MACN,MAAM;MACN,UAAQ;MACR;MACA,KAAK;QACJ,cAAc;QACd,OAAO;;KAER;AAGD,SAAK,OAAO,iBAAiB;AAE7B,UAAM,cAAU,+CAAqB;AACrC,SAAK,OAAO,GAAG,SAAS,CAAC,QAAO;AAC/B,UAAK,IAAY,SAAS,cAAc;AACvC,gBAAQ,OAAO,GAAG;MACnB;IACD,CAAC;AACD,SAAK,OAAO,OACX;MACC,MAAM,KAAK,QAAQ;MACnB;OAED,YAAW;AACV,YAAM,UAAuB,KAAK,OAAQ,QAAO;AACjD,cAAQ,IACP,6BAA6B,QAAQ,OAAO,IAAI,QAAQ,IAAI,EAAE;AAG/D,cAAQ,QAAO;AAGf,UAAI;AACH,cAAM,KAAK,QAAS,UAAS;AAC7B,gBAAQ,IACP,iCAAiC;MAEnC,SAAS,GAAG;AACX,gBAAQ,MACP,gDACC,+BAAgB,CAAC,CAClB,EAAE;MAEJ;IACD,CAAC;EAEH;EAEO,MAAM,OAAI;AAChB,YAAQ,IAAI,8BAA8B;AAC1C,UAAM,KAAK,SAAS,IAAG;AACvB,UAAM,KAAK,SAAS,QAAO;AAC3B,UAAM,KAAK,WAAW,SAAQ;AAC9B,SAAK,gBAAgB,QAAO;AAC5B,SAAK,QAAQ,MAAK;AAClB,UAAM,KAAK,YAAY,MAAK;AAC5B,QAAI,KAAK,SAAS;AAAQ,YAAM,KAAK,SAAS,MAAK;AACnD,YAAQ,IAAI,uBAAuB;EACpC;;AAGD,SAAS,aACR,UACA,aAA0C,CAAA,GAC1C,QAAiC,CAAA,GAAE;AAEnC,QAAM,iBAAiB,IAAI,8BAAe;IACzC,QAAQ;IACR,WAAW;IACX,GAAG;IACH,QAAQ;GACR;AAED,iBAAe,eAAe,OAAG,mDAAoC,CAAE;AAEvE,MAAI,WAAW,WAAW;AACzB,mBAAe,eAAe,GAAG,WAAW,SAAS;EACtD;AAEA,QAAM,YAAwB,CAAA;AAC9B,aAAW,QAAQ,OAAO;AACzB,UAAM,WAAW,IAAI,wBAAS;MAC7B,GAAG;MACH,YAAY;KACZ;AACD,mBAAe,QAAQ,QAAQ;AAC/B,cAAU,KAAK,QAAQ;AAGvB,aAAS,eAAe,OAAG,6CAA8B,CAAE;AAE3D,QAAI,KAAK,WAAW;AACnB,eAAS,eAAe,GAAG,KAAK,SAAS;IAC1C;EACD;AAEA,SAAO;IACN;IACA;;AAEF;AAEM,SAAU,8BACf,MAAc;AAEd,QAAM,MAA6B;IAClC,IAAI,KAAK;;AAGV,MAAI,mBAAe,+CAA8B;AAEjD,MAAI,OAAO,KAAK,gBAAgB,WAAW;AAC1C,QAAI,aAAa,cAAc,KAAK;EACrC;AACA,MAAI,KAAK,wBAAwB,WAAW;AAC3C,QAAI,aAAa,sBAAsB,KAAK;EAC7C;AACA,MAAI,OAAO,KAAK,cAAc,WAAW;AACxC,QAAI,aAAa,YAAY,KAAK;EACnC;AACA,MAAI,OAAO,KAAK,oBAAoB,WAAW;AAC9C,QAAI,aAAa,kBAAkB,KAAK;EACzC;AACA,MAAI,OAAO,KAAK,qBAAqB,WAAW;AAC/C,QAAI,aAAa,mBAAmB,KAAK;EAC1C;AACA,MAAI,OAAO,KAAK,uBAAuB,WAAW;AACjD,QAAI,aAAa,qBAAqB,KAAK;EAC5C;AACA,MAAK,6BAAwB,KAAK,QAAQ,MAAM,QAAW;AAC1D,QAAI,aAAa,kBACf,6BAAwB,KAAK,QAAQ;EACxC;AAEA,MAAI,KAAK,gBAAgB,WAAW;AACnC,QAAI,aAAa,mBAAmB,KAAK,YAAY,MAAM;AAC3D,QAAI,aAAa,qBAAqB,KAAK,YAAY,QAAQ;AAC/D,QAAI,aAAa,sBAAsB,KAAK,YAAY,SAAS;EAClE;AAEA,MAAI,aAAa,kBAAkB,KAAK,YAAY;AACpD,MAAI,aAAa,iBAAiB,SACjC,KAAK,YAAY,gBACjB,EAAE;AAEH,MAAI,aAAa,cAAc,SAAS,KAAK,YAAY,aAAa,EAAE;AACxE,MAAI,aAAa,YAAY,SAAS,KAAK,YAAY,WAAW,EAAE;AAEpE,aAAW,CAAC,QAAQ,MAAM,KAAK,OAAO,QAAQ,KAAK,cAAc,GAAG;AACnE,UAAM,OAAQ,2BAAuB,MAAM;AAC3C,QAAI,QAAQ;AAAW;AAEvB,QACC,SAAS,2BAAe,YACrB,SAAS,2BAAe,YAAY,GACtC;AACD;IACD;AAEA,QAAI,SAAS,2BAAe,aAAa;AACxC;IACD;AAEA,QAAI,SAAS,2BAAe,mBAAmB,GAAG;AACjD;IACD;AAEA,QAAI,aAAa,mBAAmB,CAAA;AACpC,QAAI,aAAa,eAAe,KAC/B,6BAA6B,MAAM,MAAM,CAAC;EAE5C;AAEA,MAAI,KAAK,WAAW;AAEnB,eAAW,CAAC,UAAU,YAAY,KAAK,OAAO,QAAQ,KAAK,SAAS,GAAG;AAItE,YAAM,aAAS;;QAEd,IAAI;MAAY;AAEjB,UAAI;AACJ,UAAI,aAAa,gBAAgB,WAAW;AAC3C,eAAO,qBACN,aAAa,YAAY,QAAQ;AAClC,eAAO,sBACN,aAAa,YAAY,SAAS;MACpC;AAEA,iBACO,CAAC,QAAQ,MAAM,KAAK,OAAO,QAChC,aAAa,cAAc,GAE3B;AACD,cAAM,OAAQ,2BAAuB,MAAM;AAC3C,YAAI,QAAQ;AAAW;AAEvB,YACC,SAAS,2BAAe,YACrB,SAAS,2BAAe,YAAY,GACtC;AACD;QACD;AAEA,kBAAU,CAAA;AACV,cAAM,KACL,6BAA6B,MAAM,MAAM,CAAC;MAE5C;AAEA,UAAI,aAAa,cAAc,CAAA;AAC/B,UAAI,aAAa,UAAU,KAAK;QAC/B,GAAG;QACH,gBAAgB;OAChB;IACF;EACD;AAEA,SAAO;AACR;AAEA,SAAS,6BACR,MACA,MAAsB;AAEtB,QAAM,MAA6B;IAClC;IACA,aAAa,KAAK;IAClB,cAAc,KAAK;IACnB,QAAQ,KAAK;IACb,SAAS,KAAK;;AAIf,MAAI,SAAS,2BAAe,eAAe;AAC1C,WAAO,OAAO,KAAK,0CAA0C,IAAI,CAAC;EACnE,WAAW,SAAS,2BAAe,cAAc;AAChD,WAAO,OAAO,KAAK,yCAAyC,IAAI,CAAC;EAClE,WAAW,SAAS,2BAAe,eAAe,GAAG;AACpD,WAAO,OAAO,KAAK,yCAAyC,IAAI,CAAC;EAClE,WAAW,SAAS,2BAAe,mBAAmB,GAAG;AACxD,WAAO,OAAO,KAAK,6CAA6C,IAAI,CAAC;EACtE,WAAW,SAAS,2BAAe,cAAc,GAAG;AACnD,WAAO,OAAO,KAAK,wCAAwC,IAAI,CAAC;EACjE;AAEA,SAAO;AACR;AAEA,SAAS,0CACR,MAAsB;AAEtB,QAAM,MAAmC;IACxC,aAAa;IACb,YAAY,CAAA;;AAGb,aAAW,OAAO,KAAK,QAAQ;AAC9B,QAAI,OAAO,IAAI,aAAa;AAAU;AAEtC,QAAI,IAAI,eAAe;AAAW;AAElC,QAAI,CAAC,IAAI;AAAU;AACnB,UAAM,OAAO,IAAI;AAEjB,QAAI,WAAW,KAAK;MACnB,KAAK,IAAI;MACT,WAAW,KAAK,aAAa;MAC7B,MAAM,KAAK;MACX,MAAM,KAAK;MACX,QAAQ,KAAK;MACb,UAAU,KAAK;MACf,UAAU,KAAK;MACf,cAAc,KAAK;MACnB,UAAU,CAAC,KAAK;KAChB;EACF;AAEA,SAAO;AACR;AAEA,SAAS,yCACR,MAAsB;AAEtB,QAAM,kBAAkB,gBACvB,MACA,2BAAe,cACf,+BAAqB,gBAAgB,IACrC,KAAK;AAEN,QAAM,MAAkC;IACvC;IACA,4BAA4B,CAAA;;AAG7B,QAAM,6BAAuC,gBAC5C,MACA,2BAAe,cACf,+BAAqB,2BAA2B,IAChD,CAAA,CAAE;AAGH,aAAW,QAAQ,4BAA4B;AAC9C,UAAM,kBAA4B,gBACjC,MACA,2BAAe,cACf,+BAAqB,4BAA4B,IAAI,EAAE,IACvD,CAAA,CAAE;AAEH,QAAI,2BAA2B,IAAI,IAAI;EACxC;AAEA,SAAO;AACR;AAEA,SAAS,yCACR,MAAsB;AAEtB,QAAM,eAAe,gBACpB,MACA,2BAAe,eAAe,GAC9B,+BAAqB,aAAa,IAClC,MAAS;AAEV,SAAO;IACN;;AAEF;AAEA,SAAS,6CACR,MAAsB;AAEtB,QAAM,eAAe,gBACpB,MACA,2BAAe,mBAAmB,GAClC,mCAAyB,aAAa,IACtC,MAAS;AAGV,QAAM,aAAa,gBAClB,MACA,2BAAe,mBAAmB,GAClC,mCAAyB,WAAW,IACpC,qBAAW,SAAS,CAAC;AAGtB,SAAO;IACN;IACA,mBAAmB;;AAErB;AAEA,SAAS,wCACR,MAAsB;AAEtB,QAAM,gBAAgB,gBACrB,MACA,2BAAe,cAAc,GAC7B,8BAAoB,cAAc,IAClC,CAAC;AAEF,QAAM,gBAAgB,gBACrB,MACA,2BAAe,cAAc,GAC7B,8BAAoB,cAAc,IAClC,EAAE;AAGH,QAAM,MAAiC;IACtC;IACA;IACA,OAAO,CAAA;;AAGR,QAAM,gBAAgB,mBACrB,MACA,2BAAe,cAAc,GAC7B,8BAAoB,OAAO,EAAE;AAG9B,MAAI,eAAe,QAAQ;AAC1B,eACO,CAAC,WAAW,eAAe,KAAK,OAAO,QAC5C,cAAc,MAAM,GAEpB;AACD,YAAM,SAAS,SAAS,SAAS;AACjC,UAAI,OAAO,MAAM,MAAM,KAAK,SAAS,KAAK,SAAS;AAAM;AAEzD,YAAM,gBAAgB,gBAAgB,YAAY,GAAG;AACrD,UAAI,kBAAkB;AAAI;AAE1B,YAAM,OAAO,gBAAgB,MAAM,GAAG,aAAa,EAAE,KAAI;AACzD,YAAM,WAAW,SAChB,gBAAgB,MAAM,gBAAgB,GAAG,EAAE,GAC3C,EAAE;AAEH,UAAI,OAAO,MAAM,QAAQ;AAAG;AAE5B,UAAI,MAAM,KAAK,EAAE,MAAM,SAAQ,CAAE;IAClC;EACD;AAEA,SAAO;AACR;AAEA,SAAS,gBACR,MACA,cACA,SACA,cAAe;AAEf,SACC,KAAK,OAAO,KAAK,CAAC,OACjB,GAAG,aAAa,QAAQ,YACrB,GAAG,gBAAgB,QAAQ,WAAW,GACvC,SACoB;AACzB;AAEA,SAAS,mBACR,MACA,cACA,SAAgB;AAEhB,SACC,KAAK,OAAO,KAAK,CAAC,OACjB,GAAG,aAAa,QAAQ,YACrB,GAAG,gBAAgB,QAAQ,WAAW,GACvC;AAEL;",
5
+ "mappings": "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",
6
6
  "names": ["getMdnsResponder"]
7
7
  }
@@ -1,3 +1,3 @@
1
- export declare const PACKAGE_VERSION = "14.3.3";
1
+ export declare const PACKAGE_VERSION = "14.3.4";
2
2
  export declare const PACKAGE_NAME = "zwave-js";
3
3
  //# sourceMappingURL=_version.d.ts.map
@@ -1,4 +1,4 @@
1
1
  // This file is auto-generated by the codegen maintenance script
2
- export const PACKAGE_VERSION = "14.3.3";
2
+ export const PACKAGE_VERSION = "14.3.4";
3
3
  export const PACKAGE_NAME = "zwave-js";
4
4
  //# sourceMappingURL=_version.js.map
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "zwave-js",
3
- "version": "14.3.3",
3
+ "version": "14.3.4",
4
4
  "description": "Z-Wave driver written entirely in JavaScript/TypeScript",
5
5
  "keywords": [],
6
6
  "type": "module",
@@ -99,14 +99,14 @@
99
99
  "dependencies": {
100
100
  "@alcalzone/jsonl-db": "^3.1.1",
101
101
  "@homebridge/ciao": "^1.3.1",
102
- "@zwave-js/cc": "14.3.3",
103
- "@zwave-js/config": "14.3.3",
104
- "@zwave-js/core": "14.3.3",
105
- "@zwave-js/host": "14.3.3",
106
- "@zwave-js/nvmedit": "14.3.3",
107
- "@zwave-js/serial": "14.3.3",
108
- "@zwave-js/shared": "14.3.2",
109
- "@zwave-js/testing": "14.3.3",
102
+ "@zwave-js/cc": "14.3.4",
103
+ "@zwave-js/config": "14.3.4",
104
+ "@zwave-js/core": "14.3.4",
105
+ "@zwave-js/host": "14.3.4",
106
+ "@zwave-js/nvmedit": "14.3.4",
107
+ "@zwave-js/serial": "14.3.4",
108
+ "@zwave-js/shared": "14.3.4",
109
+ "@zwave-js/testing": "14.3.4",
110
110
  "alcalzone-shared": "^5.0.0",
111
111
  "ansi-colors": "^4.1.3",
112
112
  "execa": "^5.1.1",
@@ -122,7 +122,7 @@
122
122
  "xstate": "4.38.3"
123
123
  },
124
124
  "devDependencies": {
125
- "@alcalzone/esm2cjs": "^1.4.0",
125
+ "@alcalzone/esm2cjs": "^1.4.1",
126
126
  "@microsoft/api-extractor": "^7.47.9",
127
127
  "@types/node": "^18.19.63",
128
128
  "@types/proper-lockfile": "^4.1.4",
@@ -131,8 +131,8 @@
131
131
  "@types/sinon": "^17.0.3",
132
132
  "@types/source-map-support": "^0.5.10",
133
133
  "@xstate/test": "^0.5.1",
134
- "@zwave-js/maintenance": "14.3.3",
135
- "@zwave-js/transformers": "14.3.3",
134
+ "@zwave-js/maintenance": "14.3.4",
135
+ "@zwave-js/transformers": "14.3.4",
136
136
  "del-cli": "^6.0.0",
137
137
  "mockdate": "^3.0.5",
138
138
  "proxyquire": "^2.1.3",