@zwave-js/cc 15.1.1 → 15.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (558) hide show
  1. package/build/cjs/cc/AlarmSensorCC.d.ts +7 -7
  2. package/build/cjs/cc/AlarmSensorCC.js +22 -23
  3. package/build/cjs/cc/AlarmSensorCC.js.map +3 -3
  4. package/build/cjs/cc/AssociationCC.d.ts +8 -9
  5. package/build/cjs/cc/AssociationCC.js +29 -29
  6. package/build/cjs/cc/AssociationCC.js.map +3 -3
  7. package/build/cjs/cc/AssociationGroupInfoCC.d.ts +7 -7
  8. package/build/cjs/cc/AssociationGroupInfoCC.js +31 -32
  9. package/build/cjs/cc/AssociationGroupInfoCC.js.map +3 -3
  10. package/build/cjs/cc/BarrierOperatorCC.d.ts +8 -8
  11. package/build/cjs/cc/BarrierOperatorCC.js +35 -36
  12. package/build/cjs/cc/BarrierOperatorCC.js.map +3 -3
  13. package/build/cjs/cc/BasicCC.d.ts +4 -4
  14. package/build/cjs/cc/BasicCC.js +23 -24
  15. package/build/cjs/cc/BasicCC.js.map +3 -3
  16. package/build/cjs/cc/BasicWindowCoveringCC._validateArgs.d.ts +3 -0
  17. package/build/cjs/cc/BasicWindowCoveringCC._validateArgs.js +64 -0
  18. package/build/cjs/cc/BasicWindowCoveringCC._validateArgs.js.map +7 -0
  19. package/build/cjs/cc/BasicWindowCoveringCC.d.ts +90 -0
  20. package/build/cjs/cc/BasicWindowCoveringCC.js +273 -0
  21. package/build/cjs/cc/BasicWindowCoveringCC.js.map +7 -0
  22. package/build/cjs/cc/BatteryCC.d.ts +4 -7
  23. package/build/cjs/cc/BatteryCC.js +18 -20
  24. package/build/cjs/cc/BatteryCC.js.map +3 -3
  25. package/build/cjs/cc/BinarySensorCC.d.ts +5 -5
  26. package/build/cjs/cc/BinarySensorCC.js +20 -21
  27. package/build/cjs/cc/BinarySensorCC.js.map +3 -3
  28. package/build/cjs/cc/BinarySwitchCC._validateArgs.js +2 -2
  29. package/build/cjs/cc/BinarySwitchCC.d.ts +6 -6
  30. package/build/cjs/cc/BinarySwitchCC.js +26 -26
  31. package/build/cjs/cc/BinarySwitchCC.js.map +3 -3
  32. package/build/cjs/cc/CRC16CC.d.ts +3 -3
  33. package/build/cjs/cc/CRC16CC.js +15 -15
  34. package/build/cjs/cc/CRC16CC.js.map +3 -3
  35. package/build/cjs/cc/CentralSceneCC.d.ts +8 -8
  36. package/build/cjs/cc/CentralSceneCC.js +23 -24
  37. package/build/cjs/cc/CentralSceneCC.js.map +3 -3
  38. package/build/cjs/cc/ClimateControlScheduleCC.d.ts +6 -6
  39. package/build/cjs/cc/ClimateControlScheduleCC.js +19 -20
  40. package/build/cjs/cc/ClimateControlScheduleCC.js.map +3 -3
  41. package/build/cjs/cc/ClockCC.d.ts +3 -4
  42. package/build/cjs/cc/ClockCC.js +13 -14
  43. package/build/cjs/cc/ClockCC.js.map +3 -3
  44. package/build/cjs/cc/ColorSwitchCC.d.ts +3 -4
  45. package/build/cjs/cc/ColorSwitchCC.js +22 -24
  46. package/build/cjs/cc/ColorSwitchCC.js.map +3 -3
  47. package/build/cjs/cc/ConfigurationCC.d.ts +3 -3
  48. package/build/cjs/cc/ConfigurationCC.js +114 -115
  49. package/build/cjs/cc/ConfigurationCC.js.map +3 -3
  50. package/build/cjs/cc/DeviceResetLocallyCC.d.ts +2 -2
  51. package/build/cjs/cc/DeviceResetLocallyCC.js +5 -5
  52. package/build/cjs/cc/DeviceResetLocallyCC.js.map +1 -1
  53. package/build/cjs/cc/DoorLockCC.d.ts +29 -29
  54. package/build/cjs/cc/DoorLockCC.js +39 -40
  55. package/build/cjs/cc/DoorLockCC.js.map +3 -3
  56. package/build/cjs/cc/DoorLockLoggingCC.d.ts +4 -4
  57. package/build/cjs/cc/DoorLockLoggingCC.js +13 -14
  58. package/build/cjs/cc/DoorLockLoggingCC.js.map +3 -3
  59. package/build/cjs/cc/EnergyProductionCC.d.ts +2 -3
  60. package/build/cjs/cc/EnergyProductionCC.js.map +2 -2
  61. package/build/cjs/cc/EntryControlCC.d.ts +8 -8
  62. package/build/cjs/cc/EntryControlCC.js +41 -42
  63. package/build/cjs/cc/EntryControlCC.js.map +3 -3
  64. package/build/cjs/cc/FirmwareUpdateMetaDataCC.d.ts +9 -10
  65. package/build/cjs/cc/FirmwareUpdateMetaDataCC.js +52 -53
  66. package/build/cjs/cc/FirmwareUpdateMetaDataCC.js.map +3 -3
  67. package/build/cjs/cc/HailCC.js +2 -2
  68. package/build/cjs/cc/HailCC.js.map +1 -1
  69. package/build/cjs/cc/HumidityControlModeCC.d.ts +5 -5
  70. package/build/cjs/cc/HumidityControlModeCC.js +20 -21
  71. package/build/cjs/cc/HumidityControlModeCC.js.map +3 -3
  72. package/build/cjs/cc/HumidityControlOperatingStateCC.d.ts +3 -3
  73. package/build/cjs/cc/HumidityControlOperatingStateCC.js +9 -9
  74. package/build/cjs/cc/HumidityControlOperatingStateCC.js.map +3 -3
  75. package/build/cjs/cc/HumidityControlSetpointCC.d.ts +6 -6
  76. package/build/cjs/cc/HumidityControlSetpointCC.js +43 -44
  77. package/build/cjs/cc/HumidityControlSetpointCC.js.map +3 -3
  78. package/build/cjs/cc/InclusionControllerCC.d.ts +2 -3
  79. package/build/cjs/cc/InclusionControllerCC.js.map +2 -2
  80. package/build/cjs/cc/IndicatorCC.d.ts +3 -3
  81. package/build/cjs/cc/IndicatorCC.js +50 -52
  82. package/build/cjs/cc/IndicatorCC.js.map +3 -3
  83. package/build/cjs/cc/IrrigationCC.d.ts +3 -3
  84. package/build/cjs/cc/IrrigationCC.js +74 -75
  85. package/build/cjs/cc/IrrigationCC.js.map +3 -3
  86. package/build/cjs/cc/LanguageCC.d.ts +5 -6
  87. package/build/cjs/cc/LanguageCC.js +14 -15
  88. package/build/cjs/cc/LanguageCC.js.map +3 -3
  89. package/build/cjs/cc/LockCC.d.ts +4 -4
  90. package/build/cjs/cc/LockCC.js +10 -10
  91. package/build/cjs/cc/LockCC.js.map +3 -3
  92. package/build/cjs/cc/ManufacturerProprietaryCC.d.ts +3 -3
  93. package/build/cjs/cc/ManufacturerProprietaryCC.js +10 -10
  94. package/build/cjs/cc/ManufacturerProprietaryCC.js.map +3 -3
  95. package/build/cjs/cc/ManufacturerSpecificCC.d.ts +7 -8
  96. package/build/cjs/cc/ManufacturerSpecificCC.js +20 -21
  97. package/build/cjs/cc/ManufacturerSpecificCC.js.map +3 -3
  98. package/build/cjs/cc/MeterCC.d.ts +4 -6
  99. package/build/cjs/cc/MeterCC.js +52 -54
  100. package/build/cjs/cc/MeterCC.js.map +3 -3
  101. package/build/cjs/cc/MultiChannelAssociationCC.d.ts +7 -8
  102. package/build/cjs/cc/MultiChannelAssociationCC.js +34 -35
  103. package/build/cjs/cc/MultiChannelAssociationCC.js.map +3 -3
  104. package/build/cjs/cc/MultiChannelCC.d.ts +11 -11
  105. package/build/cjs/cc/MultiChannelCC.js +53 -53
  106. package/build/cjs/cc/MultiChannelCC.js.map +3 -3
  107. package/build/cjs/cc/MultiCommandCC.d.ts +3 -3
  108. package/build/cjs/cc/MultiCommandCC.js +13 -13
  109. package/build/cjs/cc/MultiCommandCC.js.map +3 -3
  110. package/build/cjs/cc/MultilevelSensorCC.d.ts +4 -7
  111. package/build/cjs/cc/MultilevelSensorCC.js +26 -28
  112. package/build/cjs/cc/MultilevelSensorCC.js.map +3 -3
  113. package/build/cjs/cc/MultilevelSwitchCC._validateArgs.js +3 -3
  114. package/build/cjs/cc/MultilevelSwitchCC.d.ts +13 -13
  115. package/build/cjs/cc/MultilevelSwitchCC.js +36 -37
  116. package/build/cjs/cc/MultilevelSwitchCC.js.map +3 -3
  117. package/build/cjs/cc/NoOperationCC.js +4 -4
  118. package/build/cjs/cc/NoOperationCC.js.map +1 -1
  119. package/build/cjs/cc/NodeNamingCC.d.ts +5 -5
  120. package/build/cjs/cc/NodeNamingCC.js +20 -20
  121. package/build/cjs/cc/NodeNamingCC.js.map +3 -3
  122. package/build/cjs/cc/NotificationCC.d.ts +4 -5
  123. package/build/cjs/cc/NotificationCC.js +66 -68
  124. package/build/cjs/cc/NotificationCC.js.map +3 -3
  125. package/build/cjs/cc/PowerlevelCC.d.ts +3 -3
  126. package/build/cjs/cc/PowerlevelCC.js +25 -26
  127. package/build/cjs/cc/PowerlevelCC.js.map +3 -3
  128. package/build/cjs/cc/ProtectionCC._validateArgs.js +2 -2
  129. package/build/cjs/cc/ProtectionCC.d.ts +11 -11
  130. package/build/cjs/cc/ProtectionCC.js +35 -36
  131. package/build/cjs/cc/ProtectionCC.js.map +3 -3
  132. package/build/cjs/cc/SceneActivationCC._validateArgs.js +2 -2
  133. package/build/cjs/cc/SceneActivationCC.d.ts +5 -6
  134. package/build/cjs/cc/SceneActivationCC.js +10 -10
  135. package/build/cjs/cc/SceneActivationCC.js.map +3 -3
  136. package/build/cjs/cc/SceneActuatorConfigurationCC._validateArgs.js +2 -2
  137. package/build/cjs/cc/SceneActuatorConfigurationCC.d.ts +5 -5
  138. package/build/cjs/cc/SceneActuatorConfigurationCC.js +19 -20
  139. package/build/cjs/cc/SceneActuatorConfigurationCC.js.map +3 -3
  140. package/build/cjs/cc/SceneControllerConfigurationCC._validateArgs.js +2 -2
  141. package/build/cjs/cc/SceneControllerConfigurationCC.d.ts +6 -6
  142. package/build/cjs/cc/SceneControllerConfigurationCC.js +25 -26
  143. package/build/cjs/cc/SceneControllerConfigurationCC.js.map +3 -3
  144. package/build/cjs/cc/ScheduleEntryLockCC.d.ts +2 -3
  145. package/build/cjs/cc/ScheduleEntryLockCC.js.map +2 -2
  146. package/build/cjs/cc/Security2CC.d.ts +3 -4
  147. package/build/cjs/cc/Security2CC.js +60 -62
  148. package/build/cjs/cc/Security2CC.js.map +3 -3
  149. package/build/cjs/cc/SecurityCC.d.ts +3 -4
  150. package/build/cjs/cc/SecurityCC.js +25 -26
  151. package/build/cjs/cc/SecurityCC.js.map +3 -3
  152. package/build/cjs/cc/SoundSwitchCC.d.ts +7 -7
  153. package/build/cjs/cc/SoundSwitchCC.js +28 -29
  154. package/build/cjs/cc/SoundSwitchCC.js.map +3 -3
  155. package/build/cjs/cc/SupervisionCC.d.ts +4 -4
  156. package/build/cjs/cc/SupervisionCC.js +28 -29
  157. package/build/cjs/cc/SupervisionCC.js.map +3 -3
  158. package/build/cjs/cc/ThermostatFanModeCC.d.ts +6 -6
  159. package/build/cjs/cc/ThermostatFanModeCC.js +21 -22
  160. package/build/cjs/cc/ThermostatFanModeCC.js.map +3 -3
  161. package/build/cjs/cc/ThermostatFanStateCC.d.ts +3 -3
  162. package/build/cjs/cc/ThermostatFanStateCC.js +9 -9
  163. package/build/cjs/cc/ThermostatFanStateCC.js.map +3 -3
  164. package/build/cjs/cc/ThermostatModeCC.d.ts +6 -6
  165. package/build/cjs/cc/ThermostatModeCC.js +30 -31
  166. package/build/cjs/cc/ThermostatModeCC.js.map +3 -3
  167. package/build/cjs/cc/ThermostatOperatingStateCC.d.ts +3 -4
  168. package/build/cjs/cc/ThermostatOperatingStateCC.js +9 -9
  169. package/build/cjs/cc/ThermostatOperatingStateCC.js.map +3 -3
  170. package/build/cjs/cc/ThermostatSetbackCC.d.ts +3 -3
  171. package/build/cjs/cc/ThermostatSetbackCC.js +14 -15
  172. package/build/cjs/cc/ThermostatSetbackCC.js.map +3 -3
  173. package/build/cjs/cc/ThermostatSetpointCC.d.ts +6 -6
  174. package/build/cjs/cc/ThermostatSetpointCC.js +48 -49
  175. package/build/cjs/cc/ThermostatSetpointCC.js.map +3 -3
  176. package/build/cjs/cc/TimeCC.d.ts +3 -4
  177. package/build/cjs/cc/TimeCC.js +9 -10
  178. package/build/cjs/cc/TimeCC.js.map +3 -3
  179. package/build/cjs/cc/TimeParametersCC.d.ts +3 -4
  180. package/build/cjs/cc/TimeParametersCC.js +2 -2
  181. package/build/cjs/cc/TimeParametersCC.js.map +2 -2
  182. package/build/cjs/cc/TransportServiceCC.d.ts +3 -3
  183. package/build/cjs/cc/TransportServiceCC.js +44 -45
  184. package/build/cjs/cc/TransportServiceCC.js.map +3 -3
  185. package/build/cjs/cc/UserCodeCC.d.ts +19 -19
  186. package/build/cjs/cc/UserCodeCC.js +102 -103
  187. package/build/cjs/cc/UserCodeCC.js.map +3 -3
  188. package/build/cjs/cc/VersionCC.d.ts +17 -17
  189. package/build/cjs/cc/VersionCC.js +46 -47
  190. package/build/cjs/cc/VersionCC.js.map +3 -3
  191. package/build/cjs/cc/WakeUpCC.d.ts +6 -6
  192. package/build/cjs/cc/WakeUpCC.js +16 -17
  193. package/build/cjs/cc/WakeUpCC.js.map +3 -3
  194. package/build/cjs/cc/WindowCoveringCC.d.ts +3 -4
  195. package/build/cjs/cc/WindowCoveringCC.js +17 -18
  196. package/build/cjs/cc/WindowCoveringCC.js.map +3 -3
  197. package/build/cjs/cc/ZWavePlusCC.d.ts +8 -8
  198. package/build/cjs/cc/ZWavePlusCC.js +15 -16
  199. package/build/cjs/cc/ZWavePlusCC.js.map +3 -3
  200. package/build/cjs/cc/ZWaveProtocolCC.d.ts +2 -2
  201. package/build/cjs/cc/ZWaveProtocolCC.js +35 -35
  202. package/build/cjs/cc/ZWaveProtocolCC.js.map +2 -2
  203. package/build/cjs/cc/_CCValues.generated.d.ts +124 -0
  204. package/build/cjs/cc/_CCValues.generated.js +93 -26
  205. package/build/cjs/cc/_CCValues.generated.js.map +3 -3
  206. package/build/cjs/cc/index.d.ts +2 -0
  207. package/build/cjs/cc/index.js +9 -0
  208. package/build/cjs/cc/index.js.map +2 -2
  209. package/build/cjs/cc/manufacturerProprietary/FibaroCC.d.ts +3 -3
  210. package/build/cjs/cc/manufacturerProprietary/FibaroCC.js +14 -14
  211. package/build/cjs/cc/manufacturerProprietary/FibaroCC.js.map +1 -1
  212. package/build/cjs/lib/API.d.ts +5 -3
  213. package/build/cjs/lib/API.js.map +2 -2
  214. package/build/cjs/lib/CommandClass.d.ts +5 -6
  215. package/build/cjs/lib/CommandClass.js +45 -45
  216. package/build/cjs/lib/CommandClass.js.map +3 -3
  217. package/build/cjs/lib/CommandClassDecorators.d.ts +2 -2
  218. package/build/cjs/lib/CommandClassDecorators.js +3 -3
  219. package/build/cjs/lib/CommandClassDecorators.js.map +2 -2
  220. package/build/cjs/lib/Security2/Extension.d.ts +2 -2
  221. package/build/cjs/lib/Security2/Extension.js +17 -17
  222. package/build/cjs/lib/Security2/Extension.js.map +3 -3
  223. package/build/cjs/lib/SetValueResult.d.ts +1 -1
  224. package/build/cjs/lib/SetValueResult.js.map +1 -1
  225. package/build/cjs/lib/Values.d.ts +3 -3
  226. package/build/cjs/lib/Values.js +6 -6
  227. package/build/cjs/lib/Values.js.map +2 -2
  228. package/build/cjs/lib/_Types.d.ts +6 -2
  229. package/build/cjs/lib/_Types.js +10 -3
  230. package/build/cjs/lib/_Types.js.map +3 -3
  231. package/build/cjs/lib/serializers.d.ts +1 -1
  232. package/build/cjs/lib/serializers.js +5 -5
  233. package/build/cjs/lib/serializers.js.map +2 -2
  234. package/build/cjs/lib/traits.d.ts +2 -2
  235. package/build/cjs/lib/utils.d.ts +2 -2
  236. package/build/cjs/lib/utils.js +60 -60
  237. package/build/cjs/lib/utils.js.map +3 -3
  238. package/build/esm/cc/AlarmSensorCC.d.ts +7 -7
  239. package/build/esm/cc/AlarmSensorCC.d.ts.map +1 -1
  240. package/build/esm/cc/AlarmSensorCC.js +2 -3
  241. package/build/esm/cc/AlarmSensorCC.js.map +1 -1
  242. package/build/esm/cc/AssociationCC.d.ts +8 -9
  243. package/build/esm/cc/AssociationCC.d.ts.map +1 -1
  244. package/build/esm/cc/AssociationCC.js +2 -2
  245. package/build/esm/cc/AssociationCC.js.map +1 -1
  246. package/build/esm/cc/AssociationGroupInfoCC.d.ts +7 -7
  247. package/build/esm/cc/AssociationGroupInfoCC.d.ts.map +1 -1
  248. package/build/esm/cc/AssociationGroupInfoCC.js +2 -3
  249. package/build/esm/cc/AssociationGroupInfoCC.js.map +1 -1
  250. package/build/esm/cc/BarrierOperatorCC.d.ts +8 -8
  251. package/build/esm/cc/BarrierOperatorCC.d.ts.map +1 -1
  252. package/build/esm/cc/BarrierOperatorCC.js +2 -3
  253. package/build/esm/cc/BarrierOperatorCC.js.map +1 -1
  254. package/build/esm/cc/BasicCC.d.ts +4 -4
  255. package/build/esm/cc/BasicCC.d.ts.map +1 -1
  256. package/build/esm/cc/BasicCC.js +2 -3
  257. package/build/esm/cc/BasicCC.js.map +1 -1
  258. package/build/esm/cc/BasicWindowCoveringCC._validateArgs.d.ts +3 -0
  259. package/build/esm/cc/BasicWindowCoveringCC._validateArgs.d.ts.map +1 -0
  260. package/build/esm/cc/BasicWindowCoveringCC._validateArgs.js +22 -0
  261. package/build/esm/cc/BasicWindowCoveringCC._validateArgs.js.map +1 -0
  262. package/build/esm/cc/BasicWindowCoveringCC.d.ts +90 -0
  263. package/build/esm/cc/BasicWindowCoveringCC.d.ts.map +1 -0
  264. package/build/esm/cc/BasicWindowCoveringCC.js +215 -0
  265. package/build/esm/cc/BasicWindowCoveringCC.js.map +1 -0
  266. package/build/esm/cc/BatteryCC.d.ts +4 -7
  267. package/build/esm/cc/BatteryCC.d.ts.map +1 -1
  268. package/build/esm/cc/BatteryCC.js +2 -4
  269. package/build/esm/cc/BatteryCC.js.map +1 -1
  270. package/build/esm/cc/BinarySensorCC.d.ts +5 -5
  271. package/build/esm/cc/BinarySensorCC.d.ts.map +1 -1
  272. package/build/esm/cc/BinarySensorCC.js +2 -3
  273. package/build/esm/cc/BinarySensorCC.js.map +1 -1
  274. package/build/esm/cc/BinarySwitchCC._validateArgs.js +1 -1
  275. package/build/esm/cc/BinarySwitchCC._validateArgs.js.map +1 -1
  276. package/build/esm/cc/BinarySwitchCC.d.ts +6 -6
  277. package/build/esm/cc/BinarySwitchCC.d.ts.map +1 -1
  278. package/build/esm/cc/BinarySwitchCC.js +2 -2
  279. package/build/esm/cc/BinarySwitchCC.js.map +1 -1
  280. package/build/esm/cc/CRC16CC.d.ts +3 -3
  281. package/build/esm/cc/CRC16CC.d.ts.map +1 -1
  282. package/build/esm/cc/CRC16CC.js +2 -2
  283. package/build/esm/cc/CRC16CC.js.map +1 -1
  284. package/build/esm/cc/CentralSceneCC.d.ts +8 -8
  285. package/build/esm/cc/CentralSceneCC.d.ts.map +1 -1
  286. package/build/esm/cc/CentralSceneCC.js +2 -3
  287. package/build/esm/cc/CentralSceneCC.js.map +1 -1
  288. package/build/esm/cc/ClimateControlScheduleCC.d.ts +6 -6
  289. package/build/esm/cc/ClimateControlScheduleCC.d.ts.map +1 -1
  290. package/build/esm/cc/ClimateControlScheduleCC.js +2 -3
  291. package/build/esm/cc/ClimateControlScheduleCC.js.map +1 -1
  292. package/build/esm/cc/ClockCC.d.ts +3 -4
  293. package/build/esm/cc/ClockCC.d.ts.map +1 -1
  294. package/build/esm/cc/ClockCC.js +2 -3
  295. package/build/esm/cc/ClockCC.js.map +1 -1
  296. package/build/esm/cc/ColorSwitchCC.d.ts +3 -4
  297. package/build/esm/cc/ColorSwitchCC.d.ts.map +1 -1
  298. package/build/esm/cc/ColorSwitchCC.js +2 -4
  299. package/build/esm/cc/ColorSwitchCC.js.map +1 -1
  300. package/build/esm/cc/ConfigurationCC.d.ts +3 -3
  301. package/build/esm/cc/ConfigurationCC.d.ts.map +1 -1
  302. package/build/esm/cc/ConfigurationCC.js +2 -3
  303. package/build/esm/cc/ConfigurationCC.js.map +1 -1
  304. package/build/esm/cc/DeviceResetLocallyCC.d.ts +2 -2
  305. package/build/esm/cc/DeviceResetLocallyCC.d.ts.map +1 -1
  306. package/build/esm/cc/DeviceResetLocallyCC.js +1 -1
  307. package/build/esm/cc/DeviceResetLocallyCC.js.map +1 -1
  308. package/build/esm/cc/DoorLockCC.d.ts +29 -29
  309. package/build/esm/cc/DoorLockCC.d.ts.map +1 -1
  310. package/build/esm/cc/DoorLockCC.js +2 -3
  311. package/build/esm/cc/DoorLockCC.js.map +1 -1
  312. package/build/esm/cc/DoorLockLoggingCC.d.ts +4 -4
  313. package/build/esm/cc/DoorLockLoggingCC.d.ts.map +1 -1
  314. package/build/esm/cc/DoorLockLoggingCC.js +2 -3
  315. package/build/esm/cc/DoorLockLoggingCC.js.map +1 -1
  316. package/build/esm/cc/EnergyProductionCC.d.ts +2 -3
  317. package/build/esm/cc/EnergyProductionCC.d.ts.map +1 -1
  318. package/build/esm/cc/EnergyProductionCC.js.map +1 -1
  319. package/build/esm/cc/EntryControlCC.d.ts +8 -8
  320. package/build/esm/cc/EntryControlCC.d.ts.map +1 -1
  321. package/build/esm/cc/EntryControlCC.js +2 -3
  322. package/build/esm/cc/EntryControlCC.js.map +1 -1
  323. package/build/esm/cc/FirmwareUpdateMetaDataCC.d.ts +9 -10
  324. package/build/esm/cc/FirmwareUpdateMetaDataCC.d.ts.map +1 -1
  325. package/build/esm/cc/FirmwareUpdateMetaDataCC.js +2 -3
  326. package/build/esm/cc/FirmwareUpdateMetaDataCC.js.map +1 -1
  327. package/build/esm/cc/HailCC.js +1 -1
  328. package/build/esm/cc/HailCC.js.map +1 -1
  329. package/build/esm/cc/HumidityControlModeCC.d.ts +5 -5
  330. package/build/esm/cc/HumidityControlModeCC.d.ts.map +1 -1
  331. package/build/esm/cc/HumidityControlModeCC.js +2 -3
  332. package/build/esm/cc/HumidityControlModeCC.js.map +1 -1
  333. package/build/esm/cc/HumidityControlOperatingStateCC.d.ts +3 -3
  334. package/build/esm/cc/HumidityControlOperatingStateCC.d.ts.map +1 -1
  335. package/build/esm/cc/HumidityControlOperatingStateCC.js +2 -2
  336. package/build/esm/cc/HumidityControlOperatingStateCC.js.map +1 -1
  337. package/build/esm/cc/HumidityControlSetpointCC.d.ts +6 -6
  338. package/build/esm/cc/HumidityControlSetpointCC.d.ts.map +1 -1
  339. package/build/esm/cc/HumidityControlSetpointCC.js +2 -3
  340. package/build/esm/cc/HumidityControlSetpointCC.js.map +1 -1
  341. package/build/esm/cc/InclusionControllerCC.d.ts +2 -3
  342. package/build/esm/cc/InclusionControllerCC.d.ts.map +1 -1
  343. package/build/esm/cc/InclusionControllerCC.js.map +1 -1
  344. package/build/esm/cc/IndicatorCC.d.ts +3 -3
  345. package/build/esm/cc/IndicatorCC.d.ts.map +1 -1
  346. package/build/esm/cc/IndicatorCC.js +2 -4
  347. package/build/esm/cc/IndicatorCC.js.map +1 -1
  348. package/build/esm/cc/IrrigationCC.d.ts +3 -3
  349. package/build/esm/cc/IrrigationCC.d.ts.map +1 -1
  350. package/build/esm/cc/IrrigationCC.js +2 -3
  351. package/build/esm/cc/IrrigationCC.js.map +1 -1
  352. package/build/esm/cc/LanguageCC.d.ts +5 -6
  353. package/build/esm/cc/LanguageCC.d.ts.map +1 -1
  354. package/build/esm/cc/LanguageCC.js +2 -3
  355. package/build/esm/cc/LanguageCC.js.map +1 -1
  356. package/build/esm/cc/LockCC.d.ts +4 -4
  357. package/build/esm/cc/LockCC.d.ts.map +1 -1
  358. package/build/esm/cc/LockCC.js +2 -2
  359. package/build/esm/cc/LockCC.js.map +1 -1
  360. package/build/esm/cc/ManufacturerProprietaryCC.d.ts +3 -3
  361. package/build/esm/cc/ManufacturerProprietaryCC.d.ts.map +1 -1
  362. package/build/esm/cc/ManufacturerProprietaryCC.js +2 -2
  363. package/build/esm/cc/ManufacturerProprietaryCC.js.map +1 -1
  364. package/build/esm/cc/ManufacturerSpecificCC.d.ts +7 -8
  365. package/build/esm/cc/ManufacturerSpecificCC.d.ts.map +1 -1
  366. package/build/esm/cc/ManufacturerSpecificCC.js +2 -3
  367. package/build/esm/cc/ManufacturerSpecificCC.js.map +1 -1
  368. package/build/esm/cc/MeterCC.d.ts +4 -6
  369. package/build/esm/cc/MeterCC.d.ts.map +1 -1
  370. package/build/esm/cc/MeterCC.js +2 -4
  371. package/build/esm/cc/MeterCC.js.map +1 -1
  372. package/build/esm/cc/MultiChannelAssociationCC.d.ts +7 -8
  373. package/build/esm/cc/MultiChannelAssociationCC.d.ts.map +1 -1
  374. package/build/esm/cc/MultiChannelAssociationCC.js +2 -3
  375. package/build/esm/cc/MultiChannelAssociationCC.js.map +1 -1
  376. package/build/esm/cc/MultiChannelCC.d.ts +11 -11
  377. package/build/esm/cc/MultiChannelCC.d.ts.map +1 -1
  378. package/build/esm/cc/MultiChannelCC.js +2 -2
  379. package/build/esm/cc/MultiChannelCC.js.map +1 -1
  380. package/build/esm/cc/MultiCommandCC.d.ts +3 -3
  381. package/build/esm/cc/MultiCommandCC.d.ts.map +1 -1
  382. package/build/esm/cc/MultiCommandCC.js +2 -2
  383. package/build/esm/cc/MultiCommandCC.js.map +1 -1
  384. package/build/esm/cc/MultilevelSensorCC.d.ts +4 -7
  385. package/build/esm/cc/MultilevelSensorCC.d.ts.map +1 -1
  386. package/build/esm/cc/MultilevelSensorCC.js +2 -4
  387. package/build/esm/cc/MultilevelSensorCC.js.map +1 -1
  388. package/build/esm/cc/MultilevelSwitchCC._validateArgs.js +1 -1
  389. package/build/esm/cc/MultilevelSwitchCC._validateArgs.js.map +1 -1
  390. package/build/esm/cc/MultilevelSwitchCC.d.ts +13 -13
  391. package/build/esm/cc/MultilevelSwitchCC.d.ts.map +1 -1
  392. package/build/esm/cc/MultilevelSwitchCC.js +2 -3
  393. package/build/esm/cc/MultilevelSwitchCC.js.map +1 -1
  394. package/build/esm/cc/NoOperationCC.js +1 -1
  395. package/build/esm/cc/NoOperationCC.js.map +1 -1
  396. package/build/esm/cc/NodeNamingCC.d.ts +5 -5
  397. package/build/esm/cc/NodeNamingCC.d.ts.map +1 -1
  398. package/build/esm/cc/NodeNamingCC.js +2 -2
  399. package/build/esm/cc/NodeNamingCC.js.map +1 -1
  400. package/build/esm/cc/NotificationCC.d.ts +4 -5
  401. package/build/esm/cc/NotificationCC.d.ts.map +1 -1
  402. package/build/esm/cc/NotificationCC.js +2 -4
  403. package/build/esm/cc/NotificationCC.js.map +1 -1
  404. package/build/esm/cc/PowerlevelCC.d.ts +3 -3
  405. package/build/esm/cc/PowerlevelCC.d.ts.map +1 -1
  406. package/build/esm/cc/PowerlevelCC.js +2 -3
  407. package/build/esm/cc/PowerlevelCC.js.map +1 -1
  408. package/build/esm/cc/ProtectionCC._validateArgs.js +1 -1
  409. package/build/esm/cc/ProtectionCC._validateArgs.js.map +1 -1
  410. package/build/esm/cc/ProtectionCC.d.ts +11 -11
  411. package/build/esm/cc/ProtectionCC.d.ts.map +1 -1
  412. package/build/esm/cc/ProtectionCC.js +2 -3
  413. package/build/esm/cc/ProtectionCC.js.map +1 -1
  414. package/build/esm/cc/SceneActivationCC._validateArgs.js +1 -1
  415. package/build/esm/cc/SceneActivationCC._validateArgs.js.map +1 -1
  416. package/build/esm/cc/SceneActivationCC.d.ts +5 -6
  417. package/build/esm/cc/SceneActivationCC.d.ts.map +1 -1
  418. package/build/esm/cc/SceneActivationCC.js +2 -2
  419. package/build/esm/cc/SceneActivationCC.js.map +1 -1
  420. package/build/esm/cc/SceneActuatorConfigurationCC._validateArgs.js +1 -1
  421. package/build/esm/cc/SceneActuatorConfigurationCC._validateArgs.js.map +1 -1
  422. package/build/esm/cc/SceneActuatorConfigurationCC.d.ts +5 -5
  423. package/build/esm/cc/SceneActuatorConfigurationCC.d.ts.map +1 -1
  424. package/build/esm/cc/SceneActuatorConfigurationCC.js +2 -3
  425. package/build/esm/cc/SceneActuatorConfigurationCC.js.map +1 -1
  426. package/build/esm/cc/SceneControllerConfigurationCC._validateArgs.js +1 -1
  427. package/build/esm/cc/SceneControllerConfigurationCC._validateArgs.js.map +1 -1
  428. package/build/esm/cc/SceneControllerConfigurationCC.d.ts +6 -6
  429. package/build/esm/cc/SceneControllerConfigurationCC.d.ts.map +1 -1
  430. package/build/esm/cc/SceneControllerConfigurationCC.js +2 -3
  431. package/build/esm/cc/SceneControllerConfigurationCC.js.map +1 -1
  432. package/build/esm/cc/ScheduleEntryLockCC.d.ts +2 -3
  433. package/build/esm/cc/ScheduleEntryLockCC.d.ts.map +1 -1
  434. package/build/esm/cc/ScheduleEntryLockCC.js.map +1 -1
  435. package/build/esm/cc/Security2CC.d.ts +3 -4
  436. package/build/esm/cc/Security2CC.d.ts.map +1 -1
  437. package/build/esm/cc/Security2CC.js +2 -4
  438. package/build/esm/cc/Security2CC.js.map +1 -1
  439. package/build/esm/cc/SecurityCC.d.ts +3 -4
  440. package/build/esm/cc/SecurityCC.d.ts.map +1 -1
  441. package/build/esm/cc/SecurityCC.js +1 -2
  442. package/build/esm/cc/SecurityCC.js.map +1 -1
  443. package/build/esm/cc/SoundSwitchCC.d.ts +7 -7
  444. package/build/esm/cc/SoundSwitchCC.d.ts.map +1 -1
  445. package/build/esm/cc/SoundSwitchCC.js +2 -3
  446. package/build/esm/cc/SoundSwitchCC.js.map +1 -1
  447. package/build/esm/cc/SupervisionCC.d.ts +4 -4
  448. package/build/esm/cc/SupervisionCC.d.ts.map +1 -1
  449. package/build/esm/cc/SupervisionCC.js +2 -3
  450. package/build/esm/cc/SupervisionCC.js.map +1 -1
  451. package/build/esm/cc/ThermostatFanModeCC.d.ts +6 -6
  452. package/build/esm/cc/ThermostatFanModeCC.d.ts.map +1 -1
  453. package/build/esm/cc/ThermostatFanModeCC.js +2 -3
  454. package/build/esm/cc/ThermostatFanModeCC.js.map +1 -1
  455. package/build/esm/cc/ThermostatFanStateCC.d.ts +3 -3
  456. package/build/esm/cc/ThermostatFanStateCC.d.ts.map +1 -1
  457. package/build/esm/cc/ThermostatFanStateCC.js +2 -2
  458. package/build/esm/cc/ThermostatFanStateCC.js.map +1 -1
  459. package/build/esm/cc/ThermostatModeCC.d.ts +6 -6
  460. package/build/esm/cc/ThermostatModeCC.d.ts.map +1 -1
  461. package/build/esm/cc/ThermostatModeCC.js +2 -3
  462. package/build/esm/cc/ThermostatModeCC.js.map +1 -1
  463. package/build/esm/cc/ThermostatOperatingStateCC.d.ts +3 -4
  464. package/build/esm/cc/ThermostatOperatingStateCC.d.ts.map +1 -1
  465. package/build/esm/cc/ThermostatOperatingStateCC.js +2 -2
  466. package/build/esm/cc/ThermostatOperatingStateCC.js.map +1 -1
  467. package/build/esm/cc/ThermostatSetbackCC.d.ts +3 -3
  468. package/build/esm/cc/ThermostatSetbackCC.d.ts.map +1 -1
  469. package/build/esm/cc/ThermostatSetbackCC.js +2 -3
  470. package/build/esm/cc/ThermostatSetbackCC.js.map +1 -1
  471. package/build/esm/cc/ThermostatSetpointCC.d.ts +6 -6
  472. package/build/esm/cc/ThermostatSetpointCC.d.ts.map +1 -1
  473. package/build/esm/cc/ThermostatSetpointCC.js +2 -3
  474. package/build/esm/cc/ThermostatSetpointCC.js.map +1 -1
  475. package/build/esm/cc/TimeCC.d.ts +3 -4
  476. package/build/esm/cc/TimeCC.d.ts.map +1 -1
  477. package/build/esm/cc/TimeCC.js +1 -2
  478. package/build/esm/cc/TimeCC.js.map +1 -1
  479. package/build/esm/cc/TimeParametersCC.d.ts +3 -4
  480. package/build/esm/cc/TimeParametersCC.d.ts.map +1 -1
  481. package/build/esm/cc/TimeParametersCC.js +1 -1
  482. package/build/esm/cc/TimeParametersCC.js.map +1 -1
  483. package/build/esm/cc/TransportServiceCC.d.ts +3 -3
  484. package/build/esm/cc/TransportServiceCC.d.ts.map +1 -1
  485. package/build/esm/cc/TransportServiceCC.js +2 -3
  486. package/build/esm/cc/TransportServiceCC.js.map +1 -1
  487. package/build/esm/cc/UserCodeCC.d.ts +19 -19
  488. package/build/esm/cc/UserCodeCC.d.ts.map +1 -1
  489. package/build/esm/cc/UserCodeCC.js +2 -3
  490. package/build/esm/cc/UserCodeCC.js.map +1 -1
  491. package/build/esm/cc/VersionCC.d.ts +17 -17
  492. package/build/esm/cc/VersionCC.d.ts.map +1 -1
  493. package/build/esm/cc/VersionCC.js +2 -3
  494. package/build/esm/cc/VersionCC.js.map +1 -1
  495. package/build/esm/cc/WakeUpCC.d.ts +6 -6
  496. package/build/esm/cc/WakeUpCC.d.ts.map +1 -1
  497. package/build/esm/cc/WakeUpCC.js +2 -3
  498. package/build/esm/cc/WakeUpCC.js.map +1 -1
  499. package/build/esm/cc/WindowCoveringCC.d.ts +3 -4
  500. package/build/esm/cc/WindowCoveringCC.d.ts.map +1 -1
  501. package/build/esm/cc/WindowCoveringCC.js +1 -2
  502. package/build/esm/cc/WindowCoveringCC.js.map +1 -1
  503. package/build/esm/cc/ZWavePlusCC.d.ts +8 -8
  504. package/build/esm/cc/ZWavePlusCC.d.ts.map +1 -1
  505. package/build/esm/cc/ZWavePlusCC.js +2 -3
  506. package/build/esm/cc/ZWavePlusCC.js.map +1 -1
  507. package/build/esm/cc/ZWaveProtocolCC.d.ts +2 -2
  508. package/build/esm/cc/ZWaveProtocolCC.d.ts.map +1 -1
  509. package/build/esm/cc/ZWaveProtocolCC.js +1 -1
  510. package/build/esm/cc/ZWaveProtocolCC.js.map +1 -1
  511. package/build/esm/cc/_CCValues.generated.d.ts +124 -0
  512. package/build/esm/cc/_CCValues.generated.d.ts.map +1 -1
  513. package/build/esm/cc/_CCValues.generated.js +75 -4
  514. package/build/esm/cc/_CCValues.generated.js.map +1 -1
  515. package/build/esm/cc/index.d.ts +2 -0
  516. package/build/esm/cc/index.d.ts.map +1 -1
  517. package/build/esm/cc/index.js +1 -0
  518. package/build/esm/cc/index.js.map +1 -1
  519. package/build/esm/cc/manufacturerProprietary/FibaroCC.d.ts +3 -3
  520. package/build/esm/cc/manufacturerProprietary/FibaroCC.d.ts.map +1 -1
  521. package/build/esm/cc/manufacturerProprietary/FibaroCC.js +1 -1
  522. package/build/esm/cc/manufacturerProprietary/FibaroCC.js.map +1 -1
  523. package/build/esm/lib/API.d.ts +5 -3
  524. package/build/esm/lib/API.d.ts.map +1 -1
  525. package/build/esm/lib/API.js.map +1 -1
  526. package/build/esm/lib/CommandClass.d.ts +5 -6
  527. package/build/esm/lib/CommandClass.d.ts.map +1 -1
  528. package/build/esm/lib/CommandClass.js +2 -2
  529. package/build/esm/lib/CommandClass.js.map +1 -1
  530. package/build/esm/lib/CommandClassDecorators.d.ts +2 -2
  531. package/build/esm/lib/CommandClassDecorators.d.ts.map +1 -1
  532. package/build/esm/lib/CommandClassDecorators.js +1 -1
  533. package/build/esm/lib/CommandClassDecorators.js.map +1 -1
  534. package/build/esm/lib/Security2/Extension.d.ts +2 -2
  535. package/build/esm/lib/Security2/Extension.d.ts.map +1 -1
  536. package/build/esm/lib/Security2/Extension.js +2 -2
  537. package/build/esm/lib/Security2/Extension.js.map +1 -1
  538. package/build/esm/lib/SetValueResult.d.ts +1 -1
  539. package/build/esm/lib/SetValueResult.d.ts.map +1 -1
  540. package/build/esm/lib/Values.d.ts +3 -3
  541. package/build/esm/lib/Values.d.ts.map +1 -1
  542. package/build/esm/lib/Values.js +1 -1
  543. package/build/esm/lib/Values.js.map +1 -1
  544. package/build/esm/lib/_Types.d.ts +6 -2
  545. package/build/esm/lib/_Types.d.ts.map +1 -1
  546. package/build/esm/lib/_Types.js +6 -1
  547. package/build/esm/lib/_Types.js.map +1 -1
  548. package/build/esm/lib/serializers.d.ts +1 -1
  549. package/build/esm/lib/serializers.d.ts.map +1 -1
  550. package/build/esm/lib/serializers.js +1 -1
  551. package/build/esm/lib/serializers.js.map +1 -1
  552. package/build/esm/lib/traits.d.ts +2 -2
  553. package/build/esm/lib/traits.d.ts.map +1 -1
  554. package/build/esm/lib/utils.d.ts +2 -2
  555. package/build/esm/lib/utils.d.ts.map +1 -1
  556. package/build/esm/lib/utils.js +2 -2
  557. package/build/esm/lib/utils.js.map +1 -1
  558. package/package.json +6 -6
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/cc/DoorLockCC.ts"],
4
- "sourcesContent": ["import { type CCEncodingContext, type CCParsingContext } from \"@zwave-js/cc\";\nimport {\n\tCommandClasses,\n\tDuration,\n\ttype EndpointId,\n\ttype GetValueDB,\n\ttype MaybeNotKnown,\n\ttype MessageOrCCLogEntry,\n\tMessagePriority,\n\ttype MessageRecord,\n\ttype SupervisionResult,\n\tValueMetadata,\n\ttype WithAddress,\n\tZWaveError,\n\tZWaveErrorCodes,\n\tenumValuesToMetadataStates,\n\tparseBitMask,\n\tsupervisedCommandSucceeded,\n\tvalidatePayload,\n} from \"@zwave-js/core/safe\";\nimport { Bytes } from \"@zwave-js/shared/safe\";\nimport { getEnumMemberName, pick } from \"@zwave-js/shared/safe\";\nimport { validateArgs } from \"@zwave-js/transformers\";\nimport { isArray } from \"alcalzone-shared/typeguards\";\nimport {\n\tCCAPI,\n\tPOLL_VALUE,\n\tPhysicalCCAPI,\n\ttype PollValueImplementation,\n\tSET_VALUE,\n\ttype SetValueImplementation,\n\tthrowUnsupportedProperty,\n\tthrowWrongValueType,\n} from \"../lib/API.js\";\nimport {\n\ttype CCRaw,\n\tCommandClass,\n\ttype InterviewContext,\n\ttype PersistValuesContext,\n\ttype RefreshValuesContext,\n} from \"../lib/CommandClass.js\";\nimport {\n\tAPI,\n\tCCCommand,\n\tccValueProperty,\n\tccValues,\n\tcommandClass,\n\texpectedCCResponse,\n\timplementedVersion,\n\tuseSupervision,\n} from \"../lib/CommandClassDecorators.js\";\nimport { V } from \"../lib/Values.js\";\nimport {\n\ttype DoorHandleStatus,\n\tDoorLockCommand,\n\tDoorLockMode,\n\tDoorLockOperationType,\n} from \"../lib/_Types.js\";\n\nexport const DoorLockCCValues = V.defineCCValues(CommandClasses[\"Door Lock\"], {\n\t...V.staticProperty(\n\t\t\"targetMode\",\n\t\t{\n\t\t\t...ValueMetadata.UInt8,\n\t\t\tlabel: \"Target lock mode\",\n\t\t\tstates: enumValuesToMetadataStates(DoorLockMode),\n\t\t} as const,\n\t),\n\t...V.staticProperty(\n\t\t\"currentMode\",\n\t\t{\n\t\t\t...ValueMetadata.ReadOnlyUInt8,\n\t\t\tlabel: \"Current lock mode\",\n\t\t\tstates: enumValuesToMetadataStates(DoorLockMode),\n\t\t} as const,\n\t),\n\t...V.staticProperty(\n\t\t\"duration\",\n\t\t{\n\t\t\t...ValueMetadata.ReadOnlyDuration,\n\t\t\tlabel: \"Remaining duration until target lock mode\",\n\t\t} as const,\n\t\t{ minVersion: 3 } as const,\n\t),\n\t...V.staticProperty(\"supportedOutsideHandles\", undefined, {\n\t\tinternal: true,\n\t\tminVersion: 4,\n\t}),\n\t...V.staticProperty(\n\t\t\"outsideHandlesCanOpenDoorConfiguration\",\n\t\t{\n\t\t\t...ValueMetadata.Any,\n\t\t\tlabel: \"Which outside handles can open the door (configuration)\",\n\t\t} as const,\n\t),\n\t...V.staticProperty(\n\t\t\"outsideHandlesCanOpenDoor\",\n\t\t{\n\t\t\t...ValueMetadata.ReadOnly,\n\t\t\tlabel: \"Which outside handles can open the door (actual status)\",\n\t\t} as const,\n\t),\n\t...V.staticProperty(\"supportedInsideHandles\", undefined, {\n\t\tinternal: true,\n\t\tminVersion: 4,\n\t}),\n\t...V.staticProperty(\n\t\t\"insideHandlesCanOpenDoorConfiguration\",\n\t\t{\n\t\t\t...ValueMetadata.Any,\n\t\t\tlabel: \"Which inside handles can open the door (configuration)\",\n\t\t} as const,\n\t),\n\t...V.staticProperty(\n\t\t\"insideHandlesCanOpenDoor\",\n\t\t{\n\t\t\t...ValueMetadata.ReadOnly,\n\t\t\tlabel: \"Which inside handles can open the door (actual status)\",\n\t\t} as const,\n\t),\n\t...V.staticProperty(\n\t\t\"operationType\",\n\t\t{\n\t\t\t...ValueMetadata.UInt8,\n\t\t\tlabel: \"Lock operation type\",\n\t\t\tstates: enumValuesToMetadataStates(DoorLockOperationType),\n\t\t} as const,\n\t),\n\t...V.staticProperty(\n\t\t\"lockTimeoutConfiguration\",\n\t\t{\n\t\t\t...ValueMetadata.UInt16,\n\t\t\tlabel: \"Duration of timed mode in seconds\",\n\t\t} as const,\n\t),\n\t...V.staticProperty(\n\t\t\"lockTimeout\",\n\t\t{\n\t\t\t...ValueMetadata.ReadOnlyUInt16,\n\t\t\tlabel: \"Seconds until lock mode times out\",\n\t\t} as const,\n\t),\n\t...V.staticProperty(\"autoRelockSupported\", undefined, {\n\t\tinternal: true,\n\t\tminVersion: 4,\n\t}),\n\t...V.staticProperty(\n\t\t\"autoRelockTime\",\n\t\t{\n\t\t\t...ValueMetadata.UInt16,\n\t\t\tlabel: \"Duration in seconds until lock returns to secure state\",\n\t\t} as const,\n\t\t{\n\t\t\tminVersion: 4,\n\t\t\tautoCreate: shouldAutoCreateAutoRelockConfigValue,\n\t\t} as const,\n\t),\n\t...V.staticProperty(\"holdAndReleaseSupported\", undefined, {\n\t\tinternal: true,\n\t\tminVersion: 4,\n\t}),\n\t...V.staticProperty(\n\t\t\"holdAndReleaseTime\",\n\t\t{\n\t\t\t...ValueMetadata.UInt16,\n\t\t\tlabel: \"Duration in seconds the latch stays retracted\",\n\t\t} as const,\n\t\t{\n\t\t\tminVersion: 4,\n\t\t\tautoCreate: shouldAutoCreateHoldAndReleaseConfigValue,\n\t\t} as const,\n\t),\n\t...V.staticProperty(\"twistAssistSupported\", undefined, {\n\t\tinternal: true,\n\t\tminVersion: 4,\n\t}),\n\t...V.staticProperty(\n\t\t\"twistAssist\",\n\t\t{\n\t\t\t...ValueMetadata.Boolean,\n\t\t\tlabel: \"Twist Assist enabled\",\n\t\t} as const,\n\t\t{\n\t\t\tminVersion: 4,\n\t\t\tautoCreate: shouldAutoCreateTwistAssistConfigValue,\n\t\t} as const,\n\t),\n\t...V.staticProperty(\"blockToBlockSupported\", undefined, {\n\t\tinternal: true,\n\t\tminVersion: 4,\n\t}),\n\t...V.staticProperty(\n\t\t\"blockToBlock\",\n\t\t{\n\t\t\t...ValueMetadata.Boolean,\n\t\t\tlabel: \"Block-to-block functionality enabled\",\n\t\t} as const,\n\t\t{\n\t\t\tminVersion: 4,\n\t\t\tautoCreate: shouldAutoCreateBlockToBlockConfigValue,\n\t\t} as const,\n\t),\n\t...V.staticProperty(\"latchSupported\", undefined, { internal: true }),\n\t...V.staticProperty(\n\t\t\"latchStatus\",\n\t\t{\n\t\t\t...ValueMetadata.ReadOnly,\n\t\t\tlabel: \"Current status of the latch\",\n\t\t} as const,\n\t\t{\n\t\t\tautoCreate: shouldAutoCreateLatchStatusValue,\n\t\t} as const,\n\t),\n\t...V.staticProperty(\"boltSupported\", undefined, { internal: true }),\n\t...V.staticProperty(\n\t\t\"boltStatus\",\n\t\t{\n\t\t\t...ValueMetadata.ReadOnly,\n\t\t\tlabel: \"Current status of the bolt\",\n\t\t} as const,\n\t\t{\n\t\t\tautoCreate: shouldAutoCreateBoltStatusValue,\n\t\t} as const,\n\t),\n\t...V.staticProperty(\"doorSupported\", undefined, { internal: true }),\n\t...V.staticProperty(\n\t\t\"doorStatus\",\n\t\t{\n\t\t\t...ValueMetadata.ReadOnly,\n\t\t\tlabel: \"Current status of the door\",\n\t\t} as const,\n\t\t{\n\t\t\tautoCreate: shouldAutoCreateDoorStatusValue,\n\t\t} as const,\n\t),\n});\n\nexport function shouldAutoCreateLatchStatusValue(\n\tctx: GetValueDB,\n\tendpoint: EndpointId,\n): boolean {\n\tconst valueDB = ctx.tryGetValueDB(endpoint.nodeId);\n\tif (!valueDB) return false;\n\treturn !!valueDB.getValue(\n\t\tDoorLockCCValues.latchSupported.endpoint(endpoint.index),\n\t);\n}\n\nexport function shouldAutoCreateBoltStatusValue(\n\tctx: GetValueDB,\n\tendpoint: EndpointId,\n): boolean {\n\tconst valueDB = ctx.tryGetValueDB(endpoint.nodeId);\n\tif (!valueDB) return false;\n\treturn !!valueDB.getValue(\n\t\tDoorLockCCValues.boltSupported.endpoint(endpoint.index),\n\t);\n}\n\nexport function shouldAutoCreateDoorStatusValue(\n\tctx: GetValueDB,\n\tendpoint: EndpointId,\n): boolean {\n\tconst valueDB = ctx.tryGetValueDB(endpoint.nodeId);\n\tif (!valueDB) return false;\n\treturn !!valueDB.getValue(\n\t\tDoorLockCCValues.doorSupported.endpoint(endpoint.index),\n\t);\n}\n\nexport function shouldAutoCreateTwistAssistConfigValue(\n\tctx: GetValueDB,\n\tendpoint: EndpointId,\n): boolean {\n\tconst valueDB = ctx.tryGetValueDB(endpoint.nodeId);\n\tif (!valueDB) return false;\n\treturn !!valueDB.getValue(\n\t\tDoorLockCCValues.twistAssistSupported.endpoint(endpoint.index),\n\t);\n}\n\nexport function shouldAutoCreateBlockToBlockConfigValue(\n\tctx: GetValueDB,\n\tendpoint: EndpointId,\n): boolean {\n\tconst valueDB = ctx.tryGetValueDB(endpoint.nodeId);\n\tif (!valueDB) return false;\n\treturn !!valueDB.getValue(\n\t\tDoorLockCCValues.blockToBlockSupported.endpoint(endpoint.index),\n\t);\n}\n\nexport function shouldAutoCreateAutoRelockConfigValue(\n\tctx: GetValueDB,\n\tendpoint: EndpointId,\n): boolean {\n\tconst valueDB = ctx.tryGetValueDB(endpoint.nodeId);\n\tif (!valueDB) return false;\n\treturn !!valueDB.getValue(\n\t\tDoorLockCCValues.autoRelockSupported.endpoint(endpoint.index),\n\t);\n}\n\nexport function shouldAutoCreateHoldAndReleaseConfigValue(\n\tctx: GetValueDB,\n\tendpoint: EndpointId,\n): boolean {\n\tconst valueDB = ctx.tryGetValueDB(endpoint.nodeId);\n\tif (!valueDB) return false;\n\treturn !!valueDB.getValue(\n\t\tDoorLockCCValues.holdAndReleaseSupported.endpoint(endpoint.index),\n\t);\n}\n\nconst configurationSetParameters = [\n\t\"operationType\",\n\t\"outsideHandlesCanOpenDoorConfiguration\",\n\t\"insideHandlesCanOpenDoorConfiguration\",\n\t\"lockTimeoutConfiguration\",\n\t\"autoRelockTime\",\n\t\"holdAndReleaseTime\",\n\t\"twistAssist\",\n\t\"blockToBlock\",\n] as const;\n\n@API(CommandClasses[\"Door Lock\"])\nexport class DoorLockCCAPI extends PhysicalCCAPI {\n\tpublic supportsCommand(cmd: DoorLockCommand): MaybeNotKnown<boolean> {\n\t\tswitch (cmd) {\n\t\t\tcase DoorLockCommand.OperationSet:\n\t\t\tcase DoorLockCommand.OperationGet:\n\t\t\tcase DoorLockCommand.ConfigurationSet:\n\t\t\tcase DoorLockCommand.ConfigurationGet:\n\t\t\t\treturn true; // This is mandatory\n\t\t\tcase DoorLockCommand.CapabilitiesGet:\n\t\t\t\treturn this.version >= 4;\n\t\t}\n\t\treturn super.supportsCommand(cmd);\n\t}\n\n\tprotected override get [SET_VALUE](): SetValueImplementation {\n\t\treturn async function(this: DoorLockCCAPI, { property }, value) {\n\t\t\tif (property === \"targetMode\") {\n\t\t\t\tif (typeof value !== \"number\") {\n\t\t\t\t\tthrowWrongValueType(\n\t\t\t\t\t\tthis.ccId,\n\t\t\t\t\t\tproperty,\n\t\t\t\t\t\t\"number\",\n\t\t\t\t\t\ttypeof value,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tconst result = await this.set(value);\n\n\t\t\t\t// Verify the current value after a delay, unless the command was supervised and successful\n\t\t\t\tif (supervisedCommandSucceeded(result)) {\n\t\t\t\t\tthis.getValueDB().setValue(\n\t\t\t\t\t\tDoorLockCCValues.currentMode.endpoint(\n\t\t\t\t\t\t\tthis.endpoint.index,\n\t\t\t\t\t\t),\n\t\t\t\t\t\tvalue,\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\tthis.schedulePoll({ property }, value);\n\t\t\t\t}\n\n\t\t\t\treturn result;\n\t\t\t} else if (\n\t\t\t\ttypeof property === \"string\"\n\t\t\t\t&& configurationSetParameters.includes(property as any)\n\t\t\t) {\n\t\t\t\t// checking every type here would create a LOT of duplicate code, so we don't\n\n\t\t\t\t// ConfigurationSet expects all parameters --> read the others from cache\n\t\t\t\tconst config = {\n\t\t\t\t\t[property]: value,\n\t\t\t\t} as DoorLockCCConfigurationSetOptions;\n\t\t\t\tfor (const param of configurationSetParameters) {\n\t\t\t\t\tif (param !== property) {\n\t\t\t\t\t\t(config as any)[param] = this.tryGetValueDB()?.getValue(\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tcommandClass: this.ccId,\n\t\t\t\t\t\t\t\tendpoint: this.endpoint.index,\n\t\t\t\t\t\t\t\tproperty: param,\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\n\t\t\t\t// Fix insideHandlesCanOpenDoorConfiguration is not iterable\n\t\t\t\tconst allTrue: DoorHandleStatus = [true, true, true, true];\n\t\t\t\tif (!config.insideHandlesCanOpenDoorConfiguration) {\n\t\t\t\t\tconfig.insideHandlesCanOpenDoorConfiguration = allTrue;\n\t\t\t\t}\n\t\t\t\tif (!config.outsideHandlesCanOpenDoorConfiguration) {\n\t\t\t\t\tconfig.outsideHandlesCanOpenDoorConfiguration = allTrue;\n\t\t\t\t}\n\n\t\t\t\tconst result = await this.setConfiguration(config);\n\n\t\t\t\t// Verify the current value after a delay, unless the command was supervised and successful\n\t\t\t\tif (!supervisedCommandSucceeded(result)) {\n\t\t\t\t\tthis.schedulePoll({ property }, value);\n\t\t\t\t}\n\n\t\t\t\treturn result;\n\t\t\t} else {\n\t\t\t\tthrowUnsupportedProperty(this.ccId, property);\n\t\t\t}\n\t\t};\n\t}\n\n\tprotected get [POLL_VALUE](): PollValueImplementation {\n\t\treturn async function(this: DoorLockCCAPI, { property }) {\n\t\t\tswitch (property) {\n\t\t\t\tcase \"currentMode\":\n\t\t\t\tcase \"targetMode\":\n\t\t\t\tcase \"duration\":\n\t\t\t\tcase \"outsideHandlesCanOpenDoor\":\n\t\t\t\tcase \"insideHandlesCanOpenDoor\":\n\t\t\t\tcase \"latchStatus\":\n\t\t\t\tcase \"boltStatus\":\n\t\t\t\tcase \"doorStatus\":\n\t\t\t\tcase \"lockTimeout\":\n\t\t\t\t\treturn (await this.get())?.[property];\n\n\t\t\t\tcase \"operationType\":\n\t\t\t\tcase \"outsideHandlesCanOpenDoorConfiguration\":\n\t\t\t\tcase \"insideHandlesCanOpenDoorConfiguration\":\n\t\t\t\tcase \"lockTimeoutConfiguration\":\n\t\t\t\tcase \"autoRelockTime\":\n\t\t\t\tcase \"holdAndReleaseTime\":\n\t\t\t\tcase \"twistAssist\":\n\t\t\t\tcase \"blockToBlock\":\n\t\t\t\t\treturn (await this.getConfiguration())?.[property];\n\n\t\t\t\tdefault:\n\t\t\t\t\tthrowUnsupportedProperty(this.ccId, property);\n\t\t\t}\n\t\t};\n\t}\n\n\t// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\n\tpublic async getCapabilities() {\n\t\tthis.assertSupportsCommand(\n\t\t\tDoorLockCommand,\n\t\t\tDoorLockCommand.CapabilitiesGet,\n\t\t);\n\n\t\tconst cc = new DoorLockCCCapabilitiesGet({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t});\n\t\tconst response = await this.host.sendCommand<\n\t\t\tDoorLockCCCapabilitiesReport\n\t\t>(\n\t\t\tcc,\n\t\t\tthis.commandOptions,\n\t\t);\n\t\tif (response) {\n\t\t\treturn pick(response, [\n\t\t\t\t\"autoRelockSupported\",\n\t\t\t\t\"blockToBlockSupported\",\n\t\t\t\t\"boltSupported\",\n\t\t\t\t\"doorSupported\",\n\t\t\t\t\"holdAndReleaseSupported\",\n\t\t\t\t\"latchSupported\",\n\t\t\t\t\"twistAssistSupported\",\n\t\t\t\t\"supportedDoorLockModes\",\n\t\t\t\t\"supportedInsideHandles\",\n\t\t\t\t\"supportedOperationTypes\",\n\t\t\t\t\"supportedOutsideHandles\",\n\t\t\t]);\n\t\t}\n\t}\n\n\t// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\n\tpublic async get() {\n\t\tthis.assertSupportsCommand(\n\t\t\tDoorLockCommand,\n\t\t\tDoorLockCommand.OperationGet,\n\t\t);\n\n\t\tconst cc = new DoorLockCCOperationGet({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t});\n\t\tconst response = await this.host.sendCommand<\n\t\t\tDoorLockCCOperationReport\n\t\t>(\n\t\t\tcc,\n\t\t\tthis.commandOptions,\n\t\t);\n\t\tif (response) {\n\t\t\treturn pick(response, [\n\t\t\t\t\"currentMode\",\n\t\t\t\t\"targetMode\",\n\t\t\t\t\"duration\",\n\t\t\t\t\"outsideHandlesCanOpenDoor\",\n\t\t\t\t\"insideHandlesCanOpenDoor\",\n\t\t\t\t\"latchStatus\",\n\t\t\t\t\"boltStatus\",\n\t\t\t\t\"doorStatus\",\n\t\t\t\t\"lockTimeout\",\n\t\t\t]);\n\t\t}\n\t}\n\n\t@validateArgs({ strictEnums: true })\n\tpublic async set(\n\t\tmode: DoorLockMode,\n\t): Promise<SupervisionResult | undefined> {\n\t\tthis.assertSupportsCommand(\n\t\t\tDoorLockCommand,\n\t\t\tDoorLockCommand.OperationSet,\n\t\t);\n\n\t\tconst cc = new DoorLockCCOperationSet({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t\tmode,\n\t\t});\n\t\treturn this.host.sendCommand(cc, this.commandOptions);\n\t}\n\n\t@validateArgs()\n\tpublic async setConfiguration(\n\t\tconfiguration: DoorLockCCConfigurationSetOptions,\n\t): Promise<SupervisionResult | undefined> {\n\t\tthis.assertSupportsCommand(\n\t\t\tDoorLockCommand,\n\t\t\tDoorLockCommand.ConfigurationSet,\n\t\t);\n\n\t\tconst cc = new DoorLockCCConfigurationSet({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t\t...configuration,\n\t\t});\n\t\treturn this.host.sendCommand(cc, this.commandOptions);\n\t}\n\n\t// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\n\tpublic async getConfiguration() {\n\t\tthis.assertSupportsCommand(\n\t\t\tDoorLockCommand,\n\t\t\tDoorLockCommand.ConfigurationGet,\n\t\t);\n\n\t\tconst cc = new DoorLockCCConfigurationGet({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t});\n\t\tconst response = await this.host.sendCommand<\n\t\t\tDoorLockCCConfigurationReport\n\t\t>(\n\t\t\tcc,\n\t\t\tthis.commandOptions,\n\t\t);\n\t\tif (response) {\n\t\t\treturn pick(response, [\n\t\t\t\t\"operationType\",\n\t\t\t\t\"outsideHandlesCanOpenDoorConfiguration\",\n\t\t\t\t\"insideHandlesCanOpenDoorConfiguration\",\n\t\t\t\t\"lockTimeoutConfiguration\",\n\t\t\t\t\"autoRelockTime\",\n\t\t\t\t\"holdAndReleaseTime\",\n\t\t\t\t\"twistAssist\",\n\t\t\t\t\"blockToBlock\",\n\t\t\t]);\n\t\t}\n\t}\n}\n\n@commandClass(CommandClasses[\"Door Lock\"])\n@implementedVersion(4)\n@ccValues(DoorLockCCValues)\nexport class DoorLockCC extends CommandClass {\n\tdeclare ccCommand: DoorLockCommand;\n\n\tpublic async interview(\n\t\tctx: InterviewContext,\n\t): Promise<void> {\n\t\tconst node = this.getNode(ctx)!;\n\t\tconst endpoint = this.getEndpoint(ctx)!;\n\t\tconst api = CCAPI.create(\n\t\t\tCommandClasses[\"Door Lock\"],\n\t\t\tctx,\n\t\t\tendpoint,\n\t\t).withOptions({\n\t\t\tpriority: MessagePriority.NodeQuery,\n\t\t});\n\n\t\tctx.logNode(node.id, {\n\t\t\tendpoint: this.endpointIndex,\n\t\t\tmessage: `Interviewing ${this.ccName}...`,\n\t\t\tdirection: \"none\",\n\t\t});\n\n\t\t// We need to do some queries after a potential timeout\n\t\t// In this case, do now mark this CC as interviewed completely\n\t\tlet hadCriticalTimeout = false;\n\n\t\t// By default, assume all status sensors to be supported\n\t\tlet doorSupported = true;\n\t\tlet boltSupported = true;\n\t\tlet latchSupported = true;\n\n\t\tif (api.version >= 4) {\n\t\t\tctx.logNode(node.id, {\n\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\tmessage: \"requesting lock capabilities...\",\n\t\t\t\tdirection: \"outbound\",\n\t\t\t});\n\t\t\tconst resp = await api.getCapabilities();\n\t\t\tif (resp) {\n\t\t\t\tconst logMessage = `received lock capabilities:\nsupported operation types: ${\n\t\t\t\t\tresp.supportedOperationTypes\n\t\t\t\t\t\t.map((t) => getEnumMemberName(DoorLockOperationType, t))\n\t\t\t\t\t\t.join(\", \")\n\t\t\t\t}\nsupported door lock modes: ${\n\t\t\t\t\tresp.supportedDoorLockModes\n\t\t\t\t\t\t.map((t) => getEnumMemberName(DoorLockMode, t))\n\t\t\t\t\t\t.map((str) => `\\n\u00B7 ${str}`)\n\t\t\t\t\t\t.join(\"\")\n\t\t\t\t}\nsupported outside handles: ${\n\t\t\t\t\tresp.supportedOutsideHandles\n\t\t\t\t\t\t.map(String)\n\t\t\t\t\t\t.join(\", \")\n\t\t\t\t}\nsupported inside handles: ${resp.supportedInsideHandles.map(String).join(\", \")}\nsupports door status: ${resp.doorSupported}\nsupports bolt status: ${resp.boltSupported}\nsupports latch status: ${resp.latchSupported}\nsupports auto-relock: ${resp.autoRelockSupported}\nsupports hold-and-release: ${resp.holdAndReleaseSupported}\nsupports twist assist: ${resp.twistAssistSupported}\nsupports block to block: ${resp.blockToBlockSupported}`;\n\t\t\t\tctx.logNode(node.id, {\n\t\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\t\tmessage: logMessage,\n\t\t\t\t\tdirection: \"inbound\",\n\t\t\t\t});\n\n\t\t\t\tdoorSupported = resp.doorSupported;\n\t\t\t\tboltSupported = resp.boltSupported;\n\t\t\t\tlatchSupported = resp.latchSupported;\n\n\t\t\t\t// Update metadata of settable states\n\t\t\t\tconst targetModeValue = DoorLockCCValues.targetMode;\n\t\t\t\tthis.setMetadata(ctx, targetModeValue, {\n\t\t\t\t\t...targetModeValue.meta,\n\t\t\t\t\tstates: enumValuesToMetadataStates(\n\t\t\t\t\t\tDoorLockMode,\n\t\t\t\t\t\tresp.supportedDoorLockModes,\n\t\t\t\t\t),\n\t\t\t\t});\n\n\t\t\t\tconst operationTypeValue = DoorLockCCValues.operationType;\n\t\t\t\tthis.setMetadata(ctx, operationTypeValue, {\n\t\t\t\t\t...operationTypeValue.meta,\n\t\t\t\t\tstates: enumValuesToMetadataStates(\n\t\t\t\t\t\tDoorLockOperationType,\n\t\t\t\t\t\tresp.supportedOperationTypes,\n\t\t\t\t\t),\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\thadCriticalTimeout = true;\n\t\t\t}\n\t\t}\n\n\t\tif (!hadCriticalTimeout) {\n\t\t\t// Save support information for the status values\n\t\t\tconst doorStatusValue = DoorLockCCValues.doorStatus;\n\t\t\tif (doorSupported) this.setMetadata(ctx, doorStatusValue);\n\t\t\tthis.setValue(\n\t\t\t\tctx,\n\t\t\t\tDoorLockCCValues.doorSupported,\n\t\t\t\tdoorSupported,\n\t\t\t);\n\n\t\t\tconst latchStatusValue = DoorLockCCValues.latchStatus;\n\t\t\tif (latchSupported) this.setMetadata(ctx, latchStatusValue);\n\t\t\tthis.setValue(\n\t\t\t\tctx,\n\t\t\t\tDoorLockCCValues.latchSupported,\n\t\t\t\tlatchSupported,\n\t\t\t);\n\n\t\t\tconst boltStatusValue = DoorLockCCValues.boltStatus;\n\t\t\tif (boltSupported) this.setMetadata(ctx, boltStatusValue);\n\t\t\tthis.setValue(\n\t\t\t\tctx,\n\t\t\t\tDoorLockCCValues.boltSupported,\n\t\t\t\tboltSupported,\n\t\t\t);\n\t\t}\n\n\t\tawait this.refreshValues(ctx);\n\n\t\t// Remember that the interview is complete\n\t\tif (!hadCriticalTimeout) this.setInterviewComplete(ctx, true);\n\t}\n\n\tpublic async refreshValues(\n\t\tctx: RefreshValuesContext,\n\t): Promise<void> {\n\t\tconst node = this.getNode(ctx)!;\n\t\tconst endpoint = this.getEndpoint(ctx)!;\n\t\tconst api = CCAPI.create(\n\t\t\tCommandClasses[\"Door Lock\"],\n\t\t\tctx,\n\t\t\tendpoint,\n\t\t).withOptions({\n\t\t\tpriority: MessagePriority.NodeQuery,\n\t\t});\n\n\t\tctx.logNode(node.id, {\n\t\t\tendpoint: this.endpointIndex,\n\t\t\tmessage: \"requesting lock configuration...\",\n\t\t\tdirection: \"outbound\",\n\t\t});\n\t\tconst config = await api.getConfiguration();\n\t\tif (config) {\n\t\t\tlet logMessage = `received lock configuration:\noperation type: ${\n\t\t\t\tgetEnumMemberName(\n\t\t\t\t\tDoorLockOperationType,\n\t\t\t\t\tconfig.operationType,\n\t\t\t\t)\n\t\t\t}`;\n\t\t\tif (config.operationType === DoorLockOperationType.Timed) {\n\t\t\t\tlogMessage += `\nlock timeout: ${config.lockTimeoutConfiguration} seconds\n`;\n\t\t\t}\n\t\t\tlogMessage += `\noutside handles can open door: ${\n\t\t\t\tconfig.outsideHandlesCanOpenDoorConfiguration\n\t\t\t\t\t.map(String)\n\t\t\t\t\t.join(\", \")\n\t\t\t}\ninside handles can open door: ${\n\t\t\t\tconfig.insideHandlesCanOpenDoorConfiguration\n\t\t\t\t\t.map(String)\n\t\t\t\t\t.join(\", \")\n\t\t\t}`;\n\t\t\tif (api.version >= 4) {\n\t\t\t\tlogMessage += `\nauto-relock time ${config.autoRelockTime ?? \"-\"} seconds\nhold-and-release time ${config.holdAndReleaseTime ?? \"-\"} seconds\ntwist assist ${!!config.twistAssist}\nblock to block ${!!config.blockToBlock}`;\n\t\t\t}\n\n\t\t\tctx.logNode(node.id, {\n\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\tmessage: logMessage,\n\t\t\t\tdirection: \"inbound\",\n\t\t\t});\n\t\t}\n\n\t\tctx.logNode(node.id, {\n\t\t\tendpoint: this.endpointIndex,\n\t\t\tmessage: \"requesting current lock status...\",\n\t\t\tdirection: \"outbound\",\n\t\t});\n\t\tconst status = await api.get();\n\t\tif (status) {\n\t\t\tlet logMessage = `received lock status:\ncurrent mode: ${getEnumMemberName(DoorLockMode, status.currentMode)}`;\n\t\t\tif (status.targetMode != undefined) {\n\t\t\t\tlogMessage += `\ntarget mode: ${getEnumMemberName(DoorLockMode, status.targetMode)}\nremaining duration: ${status.duration?.toString() ?? \"undefined\"}`;\n\t\t\t}\n\t\t\tif (status.lockTimeout != undefined) {\n\t\t\t\tlogMessage += `\nlock timeout: ${status.lockTimeout} seconds`;\n\t\t\t}\n\t\t\tif (status.doorStatus != undefined) {\n\t\t\t\tlogMessage += `\ndoor status: ${status.doorStatus}`;\n\t\t\t}\n\t\t\tif (status.boltStatus != undefined) {\n\t\t\t\tlogMessage += `\nbolt status: ${status.boltStatus}`;\n\t\t\t}\n\t\t\tif (status.latchStatus != undefined) {\n\t\t\t\tlogMessage += `\nlatch status: ${status.latchStatus}`;\n\t\t\t}\n\t\t\tctx.logNode(node.id, {\n\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\tmessage: logMessage,\n\t\t\t\tdirection: \"inbound\",\n\t\t\t});\n\t\t}\n\t}\n}\n\n// @publicAPI\nexport interface DoorLockCCOperationSetOptions {\n\tmode: DoorLockMode;\n}\n\n@CCCommand(DoorLockCommand.OperationSet)\n@useSupervision()\nexport class DoorLockCCOperationSet extends DoorLockCC {\n\tpublic constructor(\n\t\toptions: WithAddress<DoorLockCCOperationSetOptions>,\n\t) {\n\t\tsuper(options);\n\t\tif (options.mode === DoorLockMode.Unknown) {\n\t\t\tthrow new ZWaveError(\n\t\t\t\t`Unknown is not a valid door lock target state!`,\n\t\t\t\tZWaveErrorCodes.Argument_Invalid,\n\t\t\t);\n\t\t}\n\t\tthis.mode = options.mode;\n\t}\n\n\tpublic static from(\n\t\t_raw: CCRaw,\n\t\t_ctx: CCParsingContext,\n\t): DoorLockCCOperationSet {\n\t\t// TODO: Deserialize payload\n\t\tthrow new ZWaveError(\n\t\t\t`${this.name}: deserialization not implemented`,\n\t\t\tZWaveErrorCodes.Deserialization_NotImplemented,\n\t\t);\n\n\t\t// return new DoorLockCCOperationSet({\n\t\t// \tnodeId: ctx.sourceNodeId,\n\t\t// });\n\t}\n\n\tpublic mode: DoorLockMode;\n\n\tpublic serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\tthis.payload = Bytes.from([this.mode]);\n\t\treturn super.serialize(ctx);\n\t}\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage: {\n\t\t\t\t\"target mode\": getEnumMemberName(DoorLockMode, this.mode),\n\t\t\t},\n\t\t};\n\t}\n}\n\n// @publicAPI\nexport interface DoorLockCCOperationReportOptions {\n\tcurrentMode: DoorLockMode;\n\toutsideHandlesCanOpenDoor: DoorHandleStatus;\n\tinsideHandlesCanOpenDoor: DoorHandleStatus;\n\tdoorStatus?: \"closed\" | \"open\";\n\tboltStatus?: \"unlocked\" | \"locked\";\n\tlatchStatus?: \"closed\" | \"open\";\n\tlockTimeout?: number;\n\ttargetMode?: DoorLockMode;\n\tduration?: Duration;\n}\n\n@CCCommand(DoorLockCommand.OperationReport)\n@ccValueProperty(\"currentMode\", DoorLockCCValues.currentMode)\n@ccValueProperty(\"targetMode\", DoorLockCCValues.targetMode)\n@ccValueProperty(\"duration\", DoorLockCCValues.duration)\n@ccValueProperty(\n\t\"outsideHandlesCanOpenDoor\",\n\tDoorLockCCValues.outsideHandlesCanOpenDoor,\n)\n@ccValueProperty(\n\t\"insideHandlesCanOpenDoor\",\n\tDoorLockCCValues.insideHandlesCanOpenDoor,\n)\n@ccValueProperty(\"lockTimeout\", DoorLockCCValues.lockTimeout)\nexport class DoorLockCCOperationReport extends DoorLockCC {\n\tpublic constructor(\n\t\toptions: WithAddress<DoorLockCCOperationReportOptions>,\n\t) {\n\t\tsuper(options);\n\n\t\t// TODO: Check implementation:\n\t\tthis.currentMode = options.currentMode;\n\t\tthis.outsideHandlesCanOpenDoor = options.outsideHandlesCanOpenDoor;\n\t\tthis.insideHandlesCanOpenDoor = options.insideHandlesCanOpenDoor;\n\t\tthis.doorStatus = options.doorStatus;\n\t\tthis.boltStatus = options.boltStatus;\n\t\tthis.latchStatus = options.latchStatus;\n\t\tthis.lockTimeout = options.lockTimeout;\n\t\tthis.targetMode = options.targetMode;\n\t\tthis.duration = options.duration;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): DoorLockCCOperationReport {\n\t\tvalidatePayload(raw.payload.length >= 5);\n\t\tconst currentMode: DoorLockMode = raw.payload[0];\n\t\tconst outsideHandlesCanOpenDoor: DoorHandleStatus = [\n\t\t\t!!(raw.payload[1] & 0b0001_0000),\n\t\t\t!!(raw.payload[1] & 0b0010_0000),\n\t\t\t!!(raw.payload[1] & 0b0100_0000),\n\t\t\t!!(raw.payload[1] & 0b1000_0000),\n\t\t];\n\t\tconst insideHandlesCanOpenDoor: DoorHandleStatus = [\n\t\t\t!!(raw.payload[1] & 0b0001),\n\t\t\t!!(raw.payload[1] & 0b0010),\n\t\t\t!!(raw.payload[1] & 0b0100),\n\t\t\t!!(raw.payload[1] & 0b1000),\n\t\t];\n\t\tconst doorStatus: \"closed\" | \"open\" | undefined =\n\t\t\t!!(raw.payload[2] & 0b1)\n\t\t\t\t? \"closed\"\n\t\t\t\t: \"open\";\n\t\tconst boltStatus: \"unlocked\" | \"locked\" | undefined =\n\t\t\t!!(raw.payload[2] & 0b10) ? \"unlocked\" : \"locked\";\n\t\tconst latchStatus: \"closed\" | \"open\" | undefined =\n\t\t\t!!(raw.payload[2] & 0b100)\n\t\t\t\t? \"closed\"\n\t\t\t\t: \"open\";\n\t\t// Ignore invalid timeout values\n\t\tconst lockTimeoutMinutes = raw.payload[3];\n\t\tconst lockTimeoutSeconds = raw.payload[4];\n\t\tlet lockTimeout: number | undefined;\n\t\tif (lockTimeoutMinutes <= 253 && lockTimeoutSeconds <= 59) {\n\t\t\tlockTimeout = lockTimeoutSeconds + lockTimeoutMinutes * 60;\n\t\t}\n\n\t\tlet targetMode: DoorLockMode | undefined;\n\t\tlet duration: Duration | undefined;\n\t\tif (raw.payload.length >= 7) {\n\t\t\ttargetMode = raw.payload[5];\n\t\t\tduration = Duration.parseReport(raw.payload[6]);\n\t\t}\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tcurrentMode,\n\t\t\toutsideHandlesCanOpenDoor,\n\t\t\tinsideHandlesCanOpenDoor,\n\t\t\tdoorStatus,\n\t\t\tboltStatus,\n\t\t\tlatchStatus,\n\t\t\tlockTimeout,\n\t\t\ttargetMode,\n\t\t\tduration,\n\t\t});\n\t}\n\n\tpublic persistValues(ctx: PersistValuesContext): boolean {\n\t\tif (!super.persistValues(ctx)) return false;\n\n\t\t// Only store the door/bolt/latch status if the lock supports it\n\t\tconst supportsDoorStatus = !!this.getValue(\n\t\t\tctx,\n\t\t\tDoorLockCCValues.doorSupported,\n\t\t);\n\t\tif (supportsDoorStatus) {\n\t\t\tthis.setValue(\n\t\t\t\tctx,\n\t\t\t\tDoorLockCCValues.doorStatus,\n\t\t\t\tthis.doorStatus,\n\t\t\t);\n\t\t}\n\t\tconst supportsBoltStatus = !!this.getValue(\n\t\t\tctx,\n\t\t\tDoorLockCCValues.boltSupported,\n\t\t);\n\t\tif (supportsBoltStatus) {\n\t\t\tthis.setValue(\n\t\t\t\tctx,\n\t\t\t\tDoorLockCCValues.boltStatus,\n\t\t\t\tthis.boltStatus,\n\t\t\t);\n\t\t}\n\t\tconst supportsLatchStatus = !!this.getValue(\n\t\t\tctx,\n\t\t\tDoorLockCCValues.latchSupported,\n\t\t);\n\t\tif (supportsLatchStatus) {\n\t\t\tthis.setValue(\n\t\t\t\tctx,\n\t\t\t\tDoorLockCCValues.latchStatus,\n\t\t\t\tthis.latchStatus,\n\t\t\t);\n\t\t}\n\n\t\treturn true;\n\t}\n\n\tpublic readonly currentMode: DoorLockMode;\n\n\tpublic readonly targetMode?: DoorLockMode;\n\n\tpublic readonly duration?: Duration;\n\n\tpublic readonly outsideHandlesCanOpenDoor: DoorHandleStatus;\n\n\tpublic readonly insideHandlesCanOpenDoor: DoorHandleStatus;\n\n\tpublic readonly latchStatus?: \"open\" | \"closed\";\n\tpublic readonly boltStatus?: \"locked\" | \"unlocked\";\n\tpublic readonly doorStatus?: \"open\" | \"closed\";\n\n\tpublic readonly lockTimeout?: number; // in seconds\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\tconst message: MessageRecord = {\n\t\t\t\"current mode\": getEnumMemberName(DoorLockMode, this.currentMode),\n\t\t\t\"active outside handles\": this.outsideHandlesCanOpenDoor.join(\", \"),\n\t\t\t\"active inside handles\": this.insideHandlesCanOpenDoor.join(\", \"),\n\t\t};\n\n\t\tif (this.latchStatus != undefined) {\n\t\t\tmessage[\"latch status\"] = this.latchStatus;\n\t\t}\n\t\tif (this.boltStatus != undefined) {\n\t\t\tmessage[\"bolt status\"] = this.boltStatus;\n\t\t}\n\t\tif (this.doorStatus != undefined) {\n\t\t\tmessage[\"door status\"] = this.doorStatus;\n\t\t}\n\n\t\tif (this.targetMode != undefined) {\n\t\t\tmessage[\"target mode\"] = getEnumMemberName(\n\t\t\t\tDoorLockMode,\n\t\t\t\tthis.targetMode,\n\t\t\t);\n\t\t}\n\t\tif (this.duration != undefined) {\n\t\t\tmessage[\"remaining duration\"] = this.duration.toString();\n\t\t}\n\t\tif (this.lockTimeout != undefined) {\n\t\t\tmessage[\"lock timeout\"] = `${this.lockTimeout} seconds`;\n\t\t}\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage,\n\t\t};\n\t}\n}\n\n@CCCommand(DoorLockCommand.OperationGet)\n@expectedCCResponse(DoorLockCCOperationReport)\nexport class DoorLockCCOperationGet extends DoorLockCC {}\n\n// @publicAPI\nexport interface DoorLockCCConfigurationReportOptions {\n\toperationType: DoorLockOperationType;\n\toutsideHandlesCanOpenDoorConfiguration: DoorHandleStatus;\n\tinsideHandlesCanOpenDoorConfiguration: DoorHandleStatus;\n\tlockTimeoutConfiguration?: number;\n\tautoRelockTime?: number;\n\tholdAndReleaseTime?: number;\n\ttwistAssist?: boolean;\n\tblockToBlock?: boolean;\n}\n\n@CCCommand(DoorLockCommand.ConfigurationReport)\n@ccValueProperty(\"operationType\", DoorLockCCValues.operationType)\n@ccValueProperty(\n\t\"outsideHandlesCanOpenDoorConfiguration\",\n\tDoorLockCCValues.outsideHandlesCanOpenDoorConfiguration,\n)\n@ccValueProperty(\n\t\"insideHandlesCanOpenDoorConfiguration\",\n\tDoorLockCCValues.insideHandlesCanOpenDoorConfiguration,\n)\n@ccValueProperty(\n\t\"lockTimeoutConfiguration\",\n\tDoorLockCCValues.lockTimeoutConfiguration,\n)\nexport class DoorLockCCConfigurationReport extends DoorLockCC {\n\tpublic constructor(\n\t\toptions: WithAddress<DoorLockCCConfigurationReportOptions>,\n\t) {\n\t\tsuper(options);\n\n\t\t// TODO: Check implementation:\n\t\tthis.operationType = options.operationType;\n\t\tthis.outsideHandlesCanOpenDoorConfiguration =\n\t\t\toptions.outsideHandlesCanOpenDoorConfiguration;\n\t\tthis.insideHandlesCanOpenDoorConfiguration =\n\t\t\toptions.insideHandlesCanOpenDoorConfiguration;\n\t\tthis.lockTimeoutConfiguration = options.lockTimeoutConfiguration;\n\t\tthis.autoRelockTime = options.autoRelockTime;\n\t\tthis.holdAndReleaseTime = options.holdAndReleaseTime;\n\t\tthis.twistAssist = options.twistAssist;\n\t\tthis.blockToBlock = options.blockToBlock;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): DoorLockCCConfigurationReport {\n\t\tvalidatePayload(raw.payload.length >= 4);\n\t\tconst operationType: DoorLockOperationType = raw.payload[0];\n\t\tconst outsideHandlesCanOpenDoorConfiguration: DoorHandleStatus = [\n\t\t\t!!(raw.payload[1] & 0b0001_0000),\n\t\t\t!!(raw.payload[1] & 0b0010_0000),\n\t\t\t!!(raw.payload[1] & 0b0100_0000),\n\t\t\t!!(raw.payload[1] & 0b1000_0000),\n\t\t];\n\t\tconst insideHandlesCanOpenDoorConfiguration: DoorHandleStatus = [\n\t\t\t!!(raw.payload[1] & 0b0001),\n\t\t\t!!(raw.payload[1] & 0b0010),\n\t\t\t!!(raw.payload[1] & 0b0100),\n\t\t\t!!(raw.payload[1] & 0b1000),\n\t\t];\n\t\tlet lockTimeoutConfiguration: number | undefined;\n\t\tif (operationType === DoorLockOperationType.Timed) {\n\t\t\tconst lockTimeoutMinutes = raw.payload[2];\n\t\t\tconst lockTimeoutSeconds = raw.payload[3];\n\t\t\tif (lockTimeoutMinutes <= 0xfd && lockTimeoutSeconds <= 59) {\n\t\t\t\tlockTimeoutConfiguration = lockTimeoutSeconds\n\t\t\t\t\t+ lockTimeoutMinutes * 60;\n\t\t\t}\n\t\t}\n\n\t\tlet autoRelockTime: number | undefined;\n\t\tlet holdAndReleaseTime: number | undefined;\n\t\tlet twistAssist: boolean | undefined;\n\t\tlet blockToBlock: boolean | undefined;\n\t\tif (raw.payload.length >= 5) {\n\t\t\tautoRelockTime = raw.payload.readUInt16BE(4);\n\t\t\tholdAndReleaseTime = raw.payload.readUInt16BE(6);\n\n\t\t\tconst flags = raw.payload[8];\n\t\t\ttwistAssist = !!(flags & 0b1);\n\t\t\tblockToBlock = !!(flags & 0b10);\n\t\t}\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\toperationType,\n\t\t\toutsideHandlesCanOpenDoorConfiguration,\n\t\t\tinsideHandlesCanOpenDoorConfiguration,\n\t\t\tlockTimeoutConfiguration,\n\t\t\tautoRelockTime,\n\t\t\tholdAndReleaseTime,\n\t\t\ttwistAssist,\n\t\t\tblockToBlock,\n\t\t});\n\t}\n\n\tpublic readonly operationType: DoorLockOperationType;\n\n\tpublic readonly outsideHandlesCanOpenDoorConfiguration: DoorHandleStatus;\n\n\tpublic readonly insideHandlesCanOpenDoorConfiguration: DoorHandleStatus;\n\n\tpublic readonly lockTimeoutConfiguration?: number;\n\n\t// These are not always supported and have to be persisted manually\n\t// to avoid unsupported values being exposed to the user\n\tpublic readonly autoRelockTime?: number;\n\tpublic readonly holdAndReleaseTime?: number;\n\tpublic readonly twistAssist?: boolean;\n\tpublic readonly blockToBlock?: boolean;\n\n\tpublic persistValues(ctx: PersistValuesContext): boolean {\n\t\tif (!super.persistValues(ctx)) return false;\n\n\t\t// Only store the autoRelockTime etc. params if the lock supports it\n\t\tconst supportsAutoRelock = !!this.getValue(\n\t\t\tctx,\n\t\t\tDoorLockCCValues.autoRelockSupported,\n\t\t);\n\t\tif (supportsAutoRelock) {\n\t\t\tthis.setValue(\n\t\t\t\tctx,\n\t\t\t\tDoorLockCCValues.autoRelockTime,\n\t\t\t\tthis.autoRelockTime,\n\t\t\t);\n\t\t}\n\t\tconst supportsHoldAndRelease = !!this.getValue(\n\t\t\tctx,\n\t\t\tDoorLockCCValues.holdAndReleaseSupported,\n\t\t);\n\t\tif (supportsHoldAndRelease) {\n\t\t\tthis.setValue(\n\t\t\t\tctx,\n\t\t\t\tDoorLockCCValues.holdAndReleaseTime,\n\t\t\t\tthis.holdAndReleaseTime,\n\t\t\t);\n\t\t}\n\t\tconst supportsTwistAssist = !!this.getValue(\n\t\t\tctx,\n\t\t\tDoorLockCCValues.twistAssistSupported,\n\t\t);\n\t\tif (supportsTwistAssist) {\n\t\t\tthis.setValue(\n\t\t\t\tctx,\n\t\t\t\tDoorLockCCValues.twistAssist,\n\t\t\t\tthis.twistAssist,\n\t\t\t);\n\t\t}\n\t\tconst supportsBlockToBlock = !!this.getValue(\n\t\t\tctx,\n\t\t\tDoorLockCCValues.blockToBlockSupported,\n\t\t);\n\t\tif (supportsBlockToBlock) {\n\t\t\tthis.setValue(\n\t\t\t\tctx,\n\t\t\t\tDoorLockCCValues.blockToBlock,\n\t\t\t\tthis.blockToBlock,\n\t\t\t);\n\t\t}\n\n\t\treturn true;\n\t}\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\tconst message: MessageRecord = {\n\t\t\t\"operation type\": getEnumMemberName(\n\t\t\t\tDoorLockOperationType,\n\t\t\t\tthis.operationType,\n\t\t\t),\n\t\t\t\"outside handle configuration\": this\n\t\t\t\t.outsideHandlesCanOpenDoorConfiguration.join(\", \"),\n\t\t\t\"inside handle configuration\": this\n\t\t\t\t.insideHandlesCanOpenDoorConfiguration.join(\", \"),\n\t\t};\n\t\tif (this.lockTimeoutConfiguration != undefined) {\n\t\t\tmessage[\n\t\t\t\t\"timed mode duration\"\n\t\t\t] = `${this.lockTimeoutConfiguration} seconds`;\n\t\t}\n\t\tif (this.autoRelockTime != undefined) {\n\t\t\tmessage[\"auto-relock time\"] = `${this.autoRelockTime} seconds`;\n\t\t}\n\t\tif (this.holdAndReleaseTime != undefined) {\n\t\t\tmessage[\n\t\t\t\t\"hold-and-release time\"\n\t\t\t] = `${this.holdAndReleaseTime} seconds`;\n\t\t}\n\t\tif (this.twistAssist != undefined) {\n\t\t\tmessage[\"twist assist enabled\"] = this.twistAssist;\n\t\t}\n\t\tif (this.blockToBlock != undefined) {\n\t\t\tmessage[\"block-to-block enabled\"] = this.blockToBlock;\n\t\t}\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage,\n\t\t};\n\t}\n}\n\n@CCCommand(DoorLockCommand.ConfigurationGet)\n@expectedCCResponse(DoorLockCCConfigurationReport)\nexport class DoorLockCCConfigurationGet extends DoorLockCC {}\n\n// @publicAPI\nexport type DoorLockCCConfigurationSetOptions =\n\t& (\n\t\t| {\n\t\t\toperationType: DoorLockOperationType.Timed;\n\t\t\tlockTimeoutConfiguration: number;\n\t\t}\n\t\t| {\n\t\t\toperationType: DoorLockOperationType.Constant;\n\t\t\tlockTimeoutConfiguration?: undefined;\n\t\t}\n\t)\n\t& {\n\t\toutsideHandlesCanOpenDoorConfiguration: DoorHandleStatus;\n\t\tinsideHandlesCanOpenDoorConfiguration: DoorHandleStatus;\n\t\t// V4+\n\t\tautoRelockTime?: number;\n\t\tholdAndReleaseTime?: number;\n\t\ttwistAssist?: boolean;\n\t\tblockToBlock?: boolean;\n\t};\n\n@CCCommand(DoorLockCommand.ConfigurationSet)\n@useSupervision()\nexport class DoorLockCCConfigurationSet extends DoorLockCC {\n\tpublic constructor(\n\t\toptions: WithAddress<DoorLockCCConfigurationSetOptions>,\n\t) {\n\t\tsuper(options);\n\t\tthis.operationType = options.operationType;\n\t\tthis.outsideHandlesCanOpenDoorConfiguration =\n\t\t\toptions.outsideHandlesCanOpenDoorConfiguration;\n\t\tthis.insideHandlesCanOpenDoorConfiguration =\n\t\t\toptions.insideHandlesCanOpenDoorConfiguration;\n\t\tthis.lockTimeoutConfiguration = options.lockTimeoutConfiguration;\n\t\tthis.autoRelockTime = options.autoRelockTime;\n\t\tthis.holdAndReleaseTime = options.holdAndReleaseTime;\n\t\tthis.twistAssist = options.twistAssist;\n\t\tthis.blockToBlock = options.blockToBlock;\n\t}\n\n\tpublic static from(\n\t\t_raw: CCRaw,\n\t\t_ctx: CCParsingContext,\n\t): DoorLockCCConfigurationSet {\n\t\t// TODO: Deserialize payload\n\t\tthrow new ZWaveError(\n\t\t\t`${this.name}: deserialization not implemented`,\n\t\t\tZWaveErrorCodes.Deserialization_NotImplemented,\n\t\t);\n\n\t\t// return new DoorLockCCConfigurationSet({\n\t\t// \tnodeId: ctx.sourceNodeId,\n\t\t// });\n\t}\n\n\tpublic operationType: DoorLockOperationType;\n\tpublic outsideHandlesCanOpenDoorConfiguration: DoorHandleStatus;\n\tpublic insideHandlesCanOpenDoorConfiguration: DoorHandleStatus;\n\tpublic lockTimeoutConfiguration?: number;\n\tpublic autoRelockTime?: number;\n\tpublic holdAndReleaseTime?: number;\n\tpublic twistAssist?: boolean;\n\tpublic blockToBlock?: boolean;\n\n\tpublic serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\tconst insideHandles = isArray(\n\t\t\t\tthis.insideHandlesCanOpenDoorConfiguration,\n\t\t\t)\n\t\t\t? this.insideHandlesCanOpenDoorConfiguration\n\t\t\t: [];\n\t\tconst outsideHandles = isArray(\n\t\t\t\tthis.outsideHandlesCanOpenDoorConfiguration,\n\t\t\t)\n\t\t\t? this.outsideHandlesCanOpenDoorConfiguration\n\t\t\t: [];\n\n\t\tconst handles = [...insideHandles, ...outsideHandles]\n\t\t\t.map((val, i) => (val ? 1 << i : 0))\n\t\t\t.reduce((acc, cur) => acc | cur, 0);\n\n\t\tlet lockTimeoutMinutes: number;\n\t\tlet lockTimeoutSeconds: number;\n\t\tif (this.operationType === DoorLockOperationType.Constant) {\n\t\t\tlockTimeoutMinutes = lockTimeoutSeconds = 0xfe;\n\t\t} else {\n\t\t\tlockTimeoutMinutes = Math.floor(\n\t\t\t\tthis.lockTimeoutConfiguration! / 60,\n\t\t\t);\n\t\t\tlockTimeoutSeconds = this.lockTimeoutConfiguration! % 60;\n\t\t}\n\n\t\tconst flags = (this.twistAssist ? 0b1 : 0)\n\t\t\t| (this.blockToBlock ? 0b10 : 0);\n\n\t\tthis.payload = Bytes.from([\n\t\t\tthis.operationType,\n\t\t\thandles,\n\t\t\tlockTimeoutMinutes,\n\t\t\tlockTimeoutSeconds,\n\t\t\t// placeholder for auto relock time\n\t\t\t0,\n\t\t\t0,\n\t\t\t// placeholder for hold and release time\n\t\t\t0,\n\t\t\t0,\n\t\t\tflags,\n\t\t]);\n\n\t\tthis.payload.writeUInt16BE((this.autoRelockTime ?? 0) & 0xffff, 4);\n\t\tthis.payload.writeUInt16BE(\n\t\t\t(this.holdAndReleaseTime ?? 0) & 0xffff,\n\t\t\t6,\n\t\t);\n\n\t\treturn super.serialize(ctx);\n\t}\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\tconst insideHandles = isArray(\n\t\t\t\tthis.insideHandlesCanOpenDoorConfiguration,\n\t\t\t)\n\t\t\t? this.insideHandlesCanOpenDoorConfiguration\n\t\t\t: [];\n\t\tconst outsideHandles = isArray(\n\t\t\t\tthis.outsideHandlesCanOpenDoorConfiguration,\n\t\t\t)\n\t\t\t? this.outsideHandlesCanOpenDoorConfiguration\n\t\t\t: [];\n\t\tconst message: MessageRecord = {\n\t\t\t\"operation type\": getEnumMemberName(\n\t\t\t\tDoorLockOperationType,\n\t\t\t\tthis.operationType,\n\t\t\t),\n\t\t\t\"outside handle configuration\": outsideHandles.join(\", \"),\n\t\t\t\"inside handle configuration\": insideHandles.join(\", \"),\n\t\t};\n\t\tif (this.lockTimeoutConfiguration != undefined) {\n\t\t\tmessage[\n\t\t\t\t\"timed mode duration\"\n\t\t\t] = `${this.lockTimeoutConfiguration} seconds`;\n\t\t}\n\t\tif (this.autoRelockTime != undefined) {\n\t\t\tmessage[\"auto-relock time\"] = `${this.autoRelockTime} seconds`;\n\t\t}\n\t\tif (this.holdAndReleaseTime != undefined) {\n\t\t\tmessage[\n\t\t\t\t\"hold-and-release time\"\n\t\t\t] = `${this.holdAndReleaseTime} seconds`;\n\t\t}\n\t\tif (this.twistAssist != undefined) {\n\t\t\tmessage[\"enable twist assist\"] = this.twistAssist;\n\t\t}\n\t\tif (this.blockToBlock != undefined) {\n\t\t\tmessage[\"enable block-to-block\"] = this.blockToBlock;\n\t\t}\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage,\n\t\t};\n\t}\n}\n\n// @publicAPI\nexport interface DoorLockCCCapabilitiesReportOptions {\n\tsupportedOperationTypes: DoorLockOperationType[];\n\tsupportedDoorLockModes: DoorLockMode[];\n\tsupportedOutsideHandles: DoorHandleStatus;\n\tsupportedInsideHandles: DoorHandleStatus;\n\tdoorSupported: boolean;\n\tboltSupported: boolean;\n\tlatchSupported: boolean;\n\tblockToBlockSupported: boolean;\n\ttwistAssistSupported: boolean;\n\tholdAndReleaseSupported: boolean;\n\tautoRelockSupported: boolean;\n}\n\n@CCCommand(DoorLockCommand.CapabilitiesReport)\n@ccValueProperty(\n\t\"supportedOutsideHandles\",\n\tDoorLockCCValues.supportedOutsideHandles,\n)\n@ccValueProperty(\n\t\"supportedInsideHandles\",\n\tDoorLockCCValues.supportedInsideHandles,\n)\n@ccValueProperty(\"autoRelockSupported\", DoorLockCCValues.autoRelockSupported)\n@ccValueProperty(\n\t\"holdAndReleaseSupported\",\n\tDoorLockCCValues.holdAndReleaseSupported,\n)\n@ccValueProperty(\"twistAssistSupported\", DoorLockCCValues.twistAssistSupported)\n@ccValueProperty(\n\t\"blockToBlockSupported\",\n\tDoorLockCCValues.blockToBlockSupported,\n)\nexport class DoorLockCCCapabilitiesReport extends DoorLockCC {\n\tpublic constructor(\n\t\toptions: WithAddress<DoorLockCCCapabilitiesReportOptions>,\n\t) {\n\t\tsuper(options);\n\n\t\t// TODO: Check implementation:\n\t\tthis.supportedOperationTypes = options.supportedOperationTypes;\n\t\tthis.supportedDoorLockModes = options.supportedDoorLockModes;\n\t\tthis.supportedOutsideHandles = options.supportedOutsideHandles;\n\t\tthis.supportedInsideHandles = options.supportedInsideHandles;\n\t\tthis.doorSupported = options.doorSupported;\n\t\tthis.boltSupported = options.boltSupported;\n\t\tthis.latchSupported = options.latchSupported;\n\t\tthis.blockToBlockSupported = options.blockToBlockSupported;\n\t\tthis.twistAssistSupported = options.twistAssistSupported;\n\t\tthis.holdAndReleaseSupported = options.holdAndReleaseSupported;\n\t\tthis.autoRelockSupported = options.autoRelockSupported;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): DoorLockCCCapabilitiesReport {\n\t\t// parse variable length operation type bit mask\n\t\tvalidatePayload(raw.payload.length >= 1);\n\t\tconst bitMaskLength = raw.payload[0] & 0b11111;\n\t\tlet offset = 1;\n\t\tvalidatePayload(raw.payload.length >= offset + bitMaskLength + 1);\n\t\tconst supportedOperationTypes: DoorLockOperationType[] = parseBitMask(\n\t\t\traw.payload.subarray(offset, offset + bitMaskLength),\n\t\t\t// bit 0 is reserved, bitmask starts at 1\n\t\t\t0,\n\t\t);\n\t\toffset += bitMaskLength;\n\t\t// parse variable length door lock mode list\n\t\tconst listLength = raw.payload[offset];\n\t\toffset += 1;\n\t\tvalidatePayload(raw.payload.length >= offset + listLength + 3);\n\t\tconst supportedDoorLockModes: DoorLockMode[] = [\n\t\t\t...raw.payload.subarray(offset, offset + listLength),\n\t\t];\n\t\toffset += listLength;\n\t\tconst supportedOutsideHandles: DoorHandleStatus = [\n\t\t\t!!(raw.payload[offset] & 0b0001_0000),\n\t\t\t!!(raw.payload[offset] & 0b0010_0000),\n\t\t\t!!(raw.payload[offset] & 0b0100_0000),\n\t\t\t!!(raw.payload[offset] & 0b1000_0000),\n\t\t];\n\t\tconst supportedInsideHandles: DoorHandleStatus = [\n\t\t\t!!(raw.payload[offset] & 0b0001),\n\t\t\t!!(raw.payload[offset] & 0b0010),\n\t\t\t!!(raw.payload[offset] & 0b0100),\n\t\t\t!!(raw.payload[offset] & 0b1000),\n\t\t];\n\t\tconst doorSupported = !!(raw.payload[offset + 1] & 0b1);\n\t\tconst boltSupported = !!(raw.payload[offset + 1] & 0b10);\n\t\tconst latchSupported = !!(raw.payload[offset + 1] & 0b100);\n\t\tconst blockToBlockSupported = !!(raw.payload[offset + 2] & 0b1);\n\t\tconst twistAssistSupported = !!(raw.payload[offset + 2] & 0b10);\n\t\tconst holdAndReleaseSupported = !!(raw.payload[offset + 2] & 0b100);\n\t\tconst autoRelockSupported = !!(raw.payload[offset + 2] & 0b1000);\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tsupportedOperationTypes,\n\t\t\tsupportedDoorLockModes,\n\t\t\tsupportedOutsideHandles,\n\t\t\tsupportedInsideHandles,\n\t\t\tdoorSupported,\n\t\t\tboltSupported,\n\t\t\tlatchSupported,\n\t\t\tblockToBlockSupported,\n\t\t\ttwistAssistSupported,\n\t\t\tholdAndReleaseSupported,\n\t\t\tautoRelockSupported,\n\t\t});\n\t}\n\n\tpublic readonly supportedOperationTypes: readonly DoorLockOperationType[];\n\tpublic readonly supportedDoorLockModes: readonly DoorLockMode[];\n\n\tpublic readonly supportedOutsideHandles: DoorHandleStatus;\n\n\tpublic readonly supportedInsideHandles: DoorHandleStatus;\n\n\t// These 3 are not automatically persisted because in CC version 3\n\t// we have to assume them to be supported. In v4 we can query this.\n\tpublic readonly latchSupported: boolean;\n\tpublic readonly boltSupported: boolean;\n\tpublic readonly doorSupported: boolean;\n\n\tpublic readonly autoRelockSupported: boolean;\n\n\tpublic readonly holdAndReleaseSupported: boolean;\n\n\tpublic readonly twistAssistSupported: boolean;\n\n\tpublic readonly blockToBlockSupported: boolean;\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage: {\n\t\t\t\tdoor: this.doorSupported,\n\t\t\t\tbolt: this.boltSupported,\n\t\t\t\tlatch: this.latchSupported,\n\t\t\t\t\"block-to-block feature\": this.blockToBlockSupported,\n\t\t\t\t\"twist assist feature\": this.twistAssistSupported,\n\t\t\t\t\"hold-and-release feature\": this.holdAndReleaseSupported,\n\t\t\t\t\"auto-relock feature\": this.autoRelockSupported,\n\t\t\t\t\"operation types\": this.supportedOperationTypes\n\t\t\t\t\t.map(\n\t\t\t\t\t\t(t) =>\n\t\t\t\t\t\t\t`\\n\u00B7 ${\n\t\t\t\t\t\t\t\tgetEnumMemberName(\n\t\t\t\t\t\t\t\t\tDoorLockOperationType,\n\t\t\t\t\t\t\t\t\tt,\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t}`,\n\t\t\t\t\t)\n\t\t\t\t\t.join(\"\"),\n\t\t\t\t\"door lock modes\": this.supportedDoorLockModes\n\t\t\t\t\t.map((t) => `\\n\u00B7 ${getEnumMemberName(DoorLockMode, t)}`)\n\t\t\t\t\t.join(\"\"),\n\t\t\t\t\"outside handles\": this.supportedOutsideHandles.join(\", \"),\n\t\t\t\t\"inside handles\": this.supportedInsideHandles.join(\", \"),\n\t\t\t},\n\t\t};\n\t}\n}\n\n@CCCommand(DoorLockCommand.CapabilitiesGet)\n@expectedCCResponse(DoorLockCCCapabilitiesReport)\nexport class DoorLockCCCapabilitiesGet extends DoorLockCC {}\n"],
5
- "mappings": "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",
6
- "names": ["import_safe"]
4
+ "sourcesContent": ["import type { CCEncodingContext, CCParsingContext } from \"@zwave-js/cc\";\nimport {\n\tCommandClasses,\n\tDuration,\n\ttype EndpointId,\n\ttype GetValueDB,\n\ttype MaybeNotKnown,\n\ttype MessageOrCCLogEntry,\n\tMessagePriority,\n\ttype MessageRecord,\n\ttype SupervisionResult,\n\tValueMetadata,\n\ttype WithAddress,\n\tZWaveError,\n\tZWaveErrorCodes,\n\tenumValuesToMetadataStates,\n\tparseBitMask,\n\tsupervisedCommandSucceeded,\n\tvalidatePayload,\n} from \"@zwave-js/core\";\nimport { Bytes, getEnumMemberName, pick } from \"@zwave-js/shared\";\nimport { validateArgs } from \"@zwave-js/transformers\";\nimport { isArray } from \"alcalzone-shared/typeguards\";\nimport {\n\tCCAPI,\n\tPOLL_VALUE,\n\tPhysicalCCAPI,\n\ttype PollValueImplementation,\n\tSET_VALUE,\n\ttype SetValueImplementation,\n\tthrowUnsupportedProperty,\n\tthrowWrongValueType,\n} from \"../lib/API.js\";\nimport {\n\ttype CCRaw,\n\tCommandClass,\n\ttype InterviewContext,\n\ttype PersistValuesContext,\n\ttype RefreshValuesContext,\n} from \"../lib/CommandClass.js\";\nimport {\n\tAPI,\n\tCCCommand,\n\tccValueProperty,\n\tccValues,\n\tcommandClass,\n\texpectedCCResponse,\n\timplementedVersion,\n\tuseSupervision,\n} from \"../lib/CommandClassDecorators.js\";\nimport { V } from \"../lib/Values.js\";\nimport {\n\ttype DoorHandleStatus,\n\tDoorLockCommand,\n\tDoorLockMode,\n\tDoorLockOperationType,\n} from \"../lib/_Types.js\";\n\nexport const DoorLockCCValues = V.defineCCValues(CommandClasses[\"Door Lock\"], {\n\t...V.staticProperty(\n\t\t\"targetMode\",\n\t\t{\n\t\t\t...ValueMetadata.UInt8,\n\t\t\tlabel: \"Target lock mode\",\n\t\t\tstates: enumValuesToMetadataStates(DoorLockMode),\n\t\t} as const,\n\t),\n\t...V.staticProperty(\n\t\t\"currentMode\",\n\t\t{\n\t\t\t...ValueMetadata.ReadOnlyUInt8,\n\t\t\tlabel: \"Current lock mode\",\n\t\t\tstates: enumValuesToMetadataStates(DoorLockMode),\n\t\t} as const,\n\t),\n\t...V.staticProperty(\n\t\t\"duration\",\n\t\t{\n\t\t\t...ValueMetadata.ReadOnlyDuration,\n\t\t\tlabel: \"Remaining duration until target lock mode\",\n\t\t} as const,\n\t\t{ minVersion: 3 } as const,\n\t),\n\t...V.staticProperty(\"supportedOutsideHandles\", undefined, {\n\t\tinternal: true,\n\t\tminVersion: 4,\n\t}),\n\t...V.staticProperty(\n\t\t\"outsideHandlesCanOpenDoorConfiguration\",\n\t\t{\n\t\t\t...ValueMetadata.Any,\n\t\t\tlabel: \"Which outside handles can open the door (configuration)\",\n\t\t} as const,\n\t),\n\t...V.staticProperty(\n\t\t\"outsideHandlesCanOpenDoor\",\n\t\t{\n\t\t\t...ValueMetadata.ReadOnly,\n\t\t\tlabel: \"Which outside handles can open the door (actual status)\",\n\t\t} as const,\n\t),\n\t...V.staticProperty(\"supportedInsideHandles\", undefined, {\n\t\tinternal: true,\n\t\tminVersion: 4,\n\t}),\n\t...V.staticProperty(\n\t\t\"insideHandlesCanOpenDoorConfiguration\",\n\t\t{\n\t\t\t...ValueMetadata.Any,\n\t\t\tlabel: \"Which inside handles can open the door (configuration)\",\n\t\t} as const,\n\t),\n\t...V.staticProperty(\n\t\t\"insideHandlesCanOpenDoor\",\n\t\t{\n\t\t\t...ValueMetadata.ReadOnly,\n\t\t\tlabel: \"Which inside handles can open the door (actual status)\",\n\t\t} as const,\n\t),\n\t...V.staticProperty(\n\t\t\"operationType\",\n\t\t{\n\t\t\t...ValueMetadata.UInt8,\n\t\t\tlabel: \"Lock operation type\",\n\t\t\tstates: enumValuesToMetadataStates(DoorLockOperationType),\n\t\t} as const,\n\t),\n\t...V.staticProperty(\n\t\t\"lockTimeoutConfiguration\",\n\t\t{\n\t\t\t...ValueMetadata.UInt16,\n\t\t\tlabel: \"Duration of timed mode in seconds\",\n\t\t} as const,\n\t),\n\t...V.staticProperty(\n\t\t\"lockTimeout\",\n\t\t{\n\t\t\t...ValueMetadata.ReadOnlyUInt16,\n\t\t\tlabel: \"Seconds until lock mode times out\",\n\t\t} as const,\n\t),\n\t...V.staticProperty(\"autoRelockSupported\", undefined, {\n\t\tinternal: true,\n\t\tminVersion: 4,\n\t}),\n\t...V.staticProperty(\n\t\t\"autoRelockTime\",\n\t\t{\n\t\t\t...ValueMetadata.UInt16,\n\t\t\tlabel: \"Duration in seconds until lock returns to secure state\",\n\t\t} as const,\n\t\t{\n\t\t\tminVersion: 4,\n\t\t\tautoCreate: shouldAutoCreateAutoRelockConfigValue,\n\t\t} as const,\n\t),\n\t...V.staticProperty(\"holdAndReleaseSupported\", undefined, {\n\t\tinternal: true,\n\t\tminVersion: 4,\n\t}),\n\t...V.staticProperty(\n\t\t\"holdAndReleaseTime\",\n\t\t{\n\t\t\t...ValueMetadata.UInt16,\n\t\t\tlabel: \"Duration in seconds the latch stays retracted\",\n\t\t} as const,\n\t\t{\n\t\t\tminVersion: 4,\n\t\t\tautoCreate: shouldAutoCreateHoldAndReleaseConfigValue,\n\t\t} as const,\n\t),\n\t...V.staticProperty(\"twistAssistSupported\", undefined, {\n\t\tinternal: true,\n\t\tminVersion: 4,\n\t}),\n\t...V.staticProperty(\n\t\t\"twistAssist\",\n\t\t{\n\t\t\t...ValueMetadata.Boolean,\n\t\t\tlabel: \"Twist Assist enabled\",\n\t\t} as const,\n\t\t{\n\t\t\tminVersion: 4,\n\t\t\tautoCreate: shouldAutoCreateTwistAssistConfigValue,\n\t\t} as const,\n\t),\n\t...V.staticProperty(\"blockToBlockSupported\", undefined, {\n\t\tinternal: true,\n\t\tminVersion: 4,\n\t}),\n\t...V.staticProperty(\n\t\t\"blockToBlock\",\n\t\t{\n\t\t\t...ValueMetadata.Boolean,\n\t\t\tlabel: \"Block-to-block functionality enabled\",\n\t\t} as const,\n\t\t{\n\t\t\tminVersion: 4,\n\t\t\tautoCreate: shouldAutoCreateBlockToBlockConfigValue,\n\t\t} as const,\n\t),\n\t...V.staticProperty(\"latchSupported\", undefined, { internal: true }),\n\t...V.staticProperty(\n\t\t\"latchStatus\",\n\t\t{\n\t\t\t...ValueMetadata.ReadOnly,\n\t\t\tlabel: \"Current status of the latch\",\n\t\t} as const,\n\t\t{\n\t\t\tautoCreate: shouldAutoCreateLatchStatusValue,\n\t\t} as const,\n\t),\n\t...V.staticProperty(\"boltSupported\", undefined, { internal: true }),\n\t...V.staticProperty(\n\t\t\"boltStatus\",\n\t\t{\n\t\t\t...ValueMetadata.ReadOnly,\n\t\t\tlabel: \"Current status of the bolt\",\n\t\t} as const,\n\t\t{\n\t\t\tautoCreate: shouldAutoCreateBoltStatusValue,\n\t\t} as const,\n\t),\n\t...V.staticProperty(\"doorSupported\", undefined, { internal: true }),\n\t...V.staticProperty(\n\t\t\"doorStatus\",\n\t\t{\n\t\t\t...ValueMetadata.ReadOnly,\n\t\t\tlabel: \"Current status of the door\",\n\t\t} as const,\n\t\t{\n\t\t\tautoCreate: shouldAutoCreateDoorStatusValue,\n\t\t} as const,\n\t),\n});\n\nexport function shouldAutoCreateLatchStatusValue(\n\tctx: GetValueDB,\n\tendpoint: EndpointId,\n): boolean {\n\tconst valueDB = ctx.tryGetValueDB(endpoint.nodeId);\n\tif (!valueDB) return false;\n\treturn !!valueDB.getValue(\n\t\tDoorLockCCValues.latchSupported.endpoint(endpoint.index),\n\t);\n}\n\nexport function shouldAutoCreateBoltStatusValue(\n\tctx: GetValueDB,\n\tendpoint: EndpointId,\n): boolean {\n\tconst valueDB = ctx.tryGetValueDB(endpoint.nodeId);\n\tif (!valueDB) return false;\n\treturn !!valueDB.getValue(\n\t\tDoorLockCCValues.boltSupported.endpoint(endpoint.index),\n\t);\n}\n\nexport function shouldAutoCreateDoorStatusValue(\n\tctx: GetValueDB,\n\tendpoint: EndpointId,\n): boolean {\n\tconst valueDB = ctx.tryGetValueDB(endpoint.nodeId);\n\tif (!valueDB) return false;\n\treturn !!valueDB.getValue(\n\t\tDoorLockCCValues.doorSupported.endpoint(endpoint.index),\n\t);\n}\n\nexport function shouldAutoCreateTwistAssistConfigValue(\n\tctx: GetValueDB,\n\tendpoint: EndpointId,\n): boolean {\n\tconst valueDB = ctx.tryGetValueDB(endpoint.nodeId);\n\tif (!valueDB) return false;\n\treturn !!valueDB.getValue(\n\t\tDoorLockCCValues.twistAssistSupported.endpoint(endpoint.index),\n\t);\n}\n\nexport function shouldAutoCreateBlockToBlockConfigValue(\n\tctx: GetValueDB,\n\tendpoint: EndpointId,\n): boolean {\n\tconst valueDB = ctx.tryGetValueDB(endpoint.nodeId);\n\tif (!valueDB) return false;\n\treturn !!valueDB.getValue(\n\t\tDoorLockCCValues.blockToBlockSupported.endpoint(endpoint.index),\n\t);\n}\n\nexport function shouldAutoCreateAutoRelockConfigValue(\n\tctx: GetValueDB,\n\tendpoint: EndpointId,\n): boolean {\n\tconst valueDB = ctx.tryGetValueDB(endpoint.nodeId);\n\tif (!valueDB) return false;\n\treturn !!valueDB.getValue(\n\t\tDoorLockCCValues.autoRelockSupported.endpoint(endpoint.index),\n\t);\n}\n\nexport function shouldAutoCreateHoldAndReleaseConfigValue(\n\tctx: GetValueDB,\n\tendpoint: EndpointId,\n): boolean {\n\tconst valueDB = ctx.tryGetValueDB(endpoint.nodeId);\n\tif (!valueDB) return false;\n\treturn !!valueDB.getValue(\n\t\tDoorLockCCValues.holdAndReleaseSupported.endpoint(endpoint.index),\n\t);\n}\n\nconst configurationSetParameters = [\n\t\"operationType\",\n\t\"outsideHandlesCanOpenDoorConfiguration\",\n\t\"insideHandlesCanOpenDoorConfiguration\",\n\t\"lockTimeoutConfiguration\",\n\t\"autoRelockTime\",\n\t\"holdAndReleaseTime\",\n\t\"twistAssist\",\n\t\"blockToBlock\",\n] as const;\n\n@API(CommandClasses[\"Door Lock\"])\nexport class DoorLockCCAPI extends PhysicalCCAPI {\n\tpublic supportsCommand(cmd: DoorLockCommand): MaybeNotKnown<boolean> {\n\t\tswitch (cmd) {\n\t\t\tcase DoorLockCommand.OperationSet:\n\t\t\tcase DoorLockCommand.OperationGet:\n\t\t\tcase DoorLockCommand.ConfigurationSet:\n\t\t\tcase DoorLockCommand.ConfigurationGet:\n\t\t\t\treturn true; // This is mandatory\n\t\t\tcase DoorLockCommand.CapabilitiesGet:\n\t\t\t\treturn this.version >= 4;\n\t\t}\n\t\treturn super.supportsCommand(cmd);\n\t}\n\n\tprotected override get [SET_VALUE](): SetValueImplementation {\n\t\treturn async function(this: DoorLockCCAPI, { property }, value) {\n\t\t\tif (property === \"targetMode\") {\n\t\t\t\tif (typeof value !== \"number\") {\n\t\t\t\t\tthrowWrongValueType(\n\t\t\t\t\t\tthis.ccId,\n\t\t\t\t\t\tproperty,\n\t\t\t\t\t\t\"number\",\n\t\t\t\t\t\ttypeof value,\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tconst result = await this.set(value);\n\n\t\t\t\t// Verify the current value after a delay, unless the command was supervised and successful\n\t\t\t\tif (supervisedCommandSucceeded(result)) {\n\t\t\t\t\tthis.getValueDB().setValue(\n\t\t\t\t\t\tDoorLockCCValues.currentMode.endpoint(\n\t\t\t\t\t\t\tthis.endpoint.index,\n\t\t\t\t\t\t),\n\t\t\t\t\t\tvalue,\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\tthis.schedulePoll({ property }, value);\n\t\t\t\t}\n\n\t\t\t\treturn result;\n\t\t\t} else if (\n\t\t\t\ttypeof property === \"string\"\n\t\t\t\t&& configurationSetParameters.includes(property as any)\n\t\t\t) {\n\t\t\t\t// checking every type here would create a LOT of duplicate code, so we don't\n\n\t\t\t\t// ConfigurationSet expects all parameters --> read the others from cache\n\t\t\t\tconst config = {\n\t\t\t\t\t[property]: value,\n\t\t\t\t} as DoorLockCCConfigurationSetOptions;\n\t\t\t\tfor (const param of configurationSetParameters) {\n\t\t\t\t\tif (param !== property) {\n\t\t\t\t\t\t(config as any)[param] = this.tryGetValueDB()?.getValue(\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tcommandClass: this.ccId,\n\t\t\t\t\t\t\t\tendpoint: this.endpoint.index,\n\t\t\t\t\t\t\t\tproperty: param,\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\n\t\t\t\t// Fix insideHandlesCanOpenDoorConfiguration is not iterable\n\t\t\t\tconst allTrue: DoorHandleStatus = [true, true, true, true];\n\t\t\t\tif (!config.insideHandlesCanOpenDoorConfiguration) {\n\t\t\t\t\tconfig.insideHandlesCanOpenDoorConfiguration = allTrue;\n\t\t\t\t}\n\t\t\t\tif (!config.outsideHandlesCanOpenDoorConfiguration) {\n\t\t\t\t\tconfig.outsideHandlesCanOpenDoorConfiguration = allTrue;\n\t\t\t\t}\n\n\t\t\t\tconst result = await this.setConfiguration(config);\n\n\t\t\t\t// Verify the current value after a delay, unless the command was supervised and successful\n\t\t\t\tif (!supervisedCommandSucceeded(result)) {\n\t\t\t\t\tthis.schedulePoll({ property }, value);\n\t\t\t\t}\n\n\t\t\t\treturn result;\n\t\t\t} else {\n\t\t\t\tthrowUnsupportedProperty(this.ccId, property);\n\t\t\t}\n\t\t};\n\t}\n\n\tprotected get [POLL_VALUE](): PollValueImplementation {\n\t\treturn async function(this: DoorLockCCAPI, { property }) {\n\t\t\tswitch (property) {\n\t\t\t\tcase \"currentMode\":\n\t\t\t\tcase \"targetMode\":\n\t\t\t\tcase \"duration\":\n\t\t\t\tcase \"outsideHandlesCanOpenDoor\":\n\t\t\t\tcase \"insideHandlesCanOpenDoor\":\n\t\t\t\tcase \"latchStatus\":\n\t\t\t\tcase \"boltStatus\":\n\t\t\t\tcase \"doorStatus\":\n\t\t\t\tcase \"lockTimeout\":\n\t\t\t\t\treturn (await this.get())?.[property];\n\n\t\t\t\tcase \"operationType\":\n\t\t\t\tcase \"outsideHandlesCanOpenDoorConfiguration\":\n\t\t\t\tcase \"insideHandlesCanOpenDoorConfiguration\":\n\t\t\t\tcase \"lockTimeoutConfiguration\":\n\t\t\t\tcase \"autoRelockTime\":\n\t\t\t\tcase \"holdAndReleaseTime\":\n\t\t\t\tcase \"twistAssist\":\n\t\t\t\tcase \"blockToBlock\":\n\t\t\t\t\treturn (await this.getConfiguration())?.[property];\n\n\t\t\t\tdefault:\n\t\t\t\t\tthrowUnsupportedProperty(this.ccId, property);\n\t\t\t}\n\t\t};\n\t}\n\n\t// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\n\tpublic async getCapabilities() {\n\t\tthis.assertSupportsCommand(\n\t\t\tDoorLockCommand,\n\t\t\tDoorLockCommand.CapabilitiesGet,\n\t\t);\n\n\t\tconst cc = new DoorLockCCCapabilitiesGet({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t});\n\t\tconst response = await this.host.sendCommand<\n\t\t\tDoorLockCCCapabilitiesReport\n\t\t>(\n\t\t\tcc,\n\t\t\tthis.commandOptions,\n\t\t);\n\t\tif (response) {\n\t\t\treturn pick(response, [\n\t\t\t\t\"autoRelockSupported\",\n\t\t\t\t\"blockToBlockSupported\",\n\t\t\t\t\"boltSupported\",\n\t\t\t\t\"doorSupported\",\n\t\t\t\t\"holdAndReleaseSupported\",\n\t\t\t\t\"latchSupported\",\n\t\t\t\t\"twistAssistSupported\",\n\t\t\t\t\"supportedDoorLockModes\",\n\t\t\t\t\"supportedInsideHandles\",\n\t\t\t\t\"supportedOperationTypes\",\n\t\t\t\t\"supportedOutsideHandles\",\n\t\t\t]);\n\t\t}\n\t}\n\n\t// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\n\tpublic async get() {\n\t\tthis.assertSupportsCommand(\n\t\t\tDoorLockCommand,\n\t\t\tDoorLockCommand.OperationGet,\n\t\t);\n\n\t\tconst cc = new DoorLockCCOperationGet({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t});\n\t\tconst response = await this.host.sendCommand<\n\t\t\tDoorLockCCOperationReport\n\t\t>(\n\t\t\tcc,\n\t\t\tthis.commandOptions,\n\t\t);\n\t\tif (response) {\n\t\t\treturn pick(response, [\n\t\t\t\t\"currentMode\",\n\t\t\t\t\"targetMode\",\n\t\t\t\t\"duration\",\n\t\t\t\t\"outsideHandlesCanOpenDoor\",\n\t\t\t\t\"insideHandlesCanOpenDoor\",\n\t\t\t\t\"latchStatus\",\n\t\t\t\t\"boltStatus\",\n\t\t\t\t\"doorStatus\",\n\t\t\t\t\"lockTimeout\",\n\t\t\t]);\n\t\t}\n\t}\n\n\t@validateArgs({ strictEnums: true })\n\tpublic async set(\n\t\tmode: DoorLockMode,\n\t): Promise<SupervisionResult | undefined> {\n\t\tthis.assertSupportsCommand(\n\t\t\tDoorLockCommand,\n\t\t\tDoorLockCommand.OperationSet,\n\t\t);\n\n\t\tconst cc = new DoorLockCCOperationSet({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t\tmode,\n\t\t});\n\t\treturn this.host.sendCommand(cc, this.commandOptions);\n\t}\n\n\t@validateArgs()\n\tpublic async setConfiguration(\n\t\tconfiguration: DoorLockCCConfigurationSetOptions,\n\t): Promise<SupervisionResult | undefined> {\n\t\tthis.assertSupportsCommand(\n\t\t\tDoorLockCommand,\n\t\t\tDoorLockCommand.ConfigurationSet,\n\t\t);\n\n\t\tconst cc = new DoorLockCCConfigurationSet({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t\t...configuration,\n\t\t});\n\t\treturn this.host.sendCommand(cc, this.commandOptions);\n\t}\n\n\t// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\n\tpublic async getConfiguration() {\n\t\tthis.assertSupportsCommand(\n\t\t\tDoorLockCommand,\n\t\t\tDoorLockCommand.ConfigurationGet,\n\t\t);\n\n\t\tconst cc = new DoorLockCCConfigurationGet({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t});\n\t\tconst response = await this.host.sendCommand<\n\t\t\tDoorLockCCConfigurationReport\n\t\t>(\n\t\t\tcc,\n\t\t\tthis.commandOptions,\n\t\t);\n\t\tif (response) {\n\t\t\treturn pick(response, [\n\t\t\t\t\"operationType\",\n\t\t\t\t\"outsideHandlesCanOpenDoorConfiguration\",\n\t\t\t\t\"insideHandlesCanOpenDoorConfiguration\",\n\t\t\t\t\"lockTimeoutConfiguration\",\n\t\t\t\t\"autoRelockTime\",\n\t\t\t\t\"holdAndReleaseTime\",\n\t\t\t\t\"twistAssist\",\n\t\t\t\t\"blockToBlock\",\n\t\t\t]);\n\t\t}\n\t}\n}\n\n@commandClass(CommandClasses[\"Door Lock\"])\n@implementedVersion(4)\n@ccValues(DoorLockCCValues)\nexport class DoorLockCC extends CommandClass {\n\tdeclare ccCommand: DoorLockCommand;\n\n\tpublic async interview(\n\t\tctx: InterviewContext,\n\t): Promise<void> {\n\t\tconst node = this.getNode(ctx)!;\n\t\tconst endpoint = this.getEndpoint(ctx)!;\n\t\tconst api = CCAPI.create(\n\t\t\tCommandClasses[\"Door Lock\"],\n\t\t\tctx,\n\t\t\tendpoint,\n\t\t).withOptions({\n\t\t\tpriority: MessagePriority.NodeQuery,\n\t\t});\n\n\t\tctx.logNode(node.id, {\n\t\t\tendpoint: this.endpointIndex,\n\t\t\tmessage: `Interviewing ${this.ccName}...`,\n\t\t\tdirection: \"none\",\n\t\t});\n\n\t\t// We need to do some queries after a potential timeout\n\t\t// In this case, do now mark this CC as interviewed completely\n\t\tlet hadCriticalTimeout = false;\n\n\t\t// By default, assume all status sensors to be supported\n\t\tlet doorSupported = true;\n\t\tlet boltSupported = true;\n\t\tlet latchSupported = true;\n\n\t\tif (api.version >= 4) {\n\t\t\tctx.logNode(node.id, {\n\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\tmessage: \"requesting lock capabilities...\",\n\t\t\t\tdirection: \"outbound\",\n\t\t\t});\n\t\t\tconst resp = await api.getCapabilities();\n\t\t\tif (resp) {\n\t\t\t\tconst logMessage = `received lock capabilities:\nsupported operation types: ${\n\t\t\t\t\tresp.supportedOperationTypes\n\t\t\t\t\t\t.map((t) => getEnumMemberName(DoorLockOperationType, t))\n\t\t\t\t\t\t.join(\", \")\n\t\t\t\t}\nsupported door lock modes: ${\n\t\t\t\t\tresp.supportedDoorLockModes\n\t\t\t\t\t\t.map((t) => getEnumMemberName(DoorLockMode, t))\n\t\t\t\t\t\t.map((str) => `\\n\u00B7 ${str}`)\n\t\t\t\t\t\t.join(\"\")\n\t\t\t\t}\nsupported outside handles: ${\n\t\t\t\t\tresp.supportedOutsideHandles\n\t\t\t\t\t\t.map(String)\n\t\t\t\t\t\t.join(\", \")\n\t\t\t\t}\nsupported inside handles: ${resp.supportedInsideHandles.map(String).join(\", \")}\nsupports door status: ${resp.doorSupported}\nsupports bolt status: ${resp.boltSupported}\nsupports latch status: ${resp.latchSupported}\nsupports auto-relock: ${resp.autoRelockSupported}\nsupports hold-and-release: ${resp.holdAndReleaseSupported}\nsupports twist assist: ${resp.twistAssistSupported}\nsupports block to block: ${resp.blockToBlockSupported}`;\n\t\t\t\tctx.logNode(node.id, {\n\t\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\t\tmessage: logMessage,\n\t\t\t\t\tdirection: \"inbound\",\n\t\t\t\t});\n\n\t\t\t\tdoorSupported = resp.doorSupported;\n\t\t\t\tboltSupported = resp.boltSupported;\n\t\t\t\tlatchSupported = resp.latchSupported;\n\n\t\t\t\t// Update metadata of settable states\n\t\t\t\tconst targetModeValue = DoorLockCCValues.targetMode;\n\t\t\t\tthis.setMetadata(ctx, targetModeValue, {\n\t\t\t\t\t...targetModeValue.meta,\n\t\t\t\t\tstates: enumValuesToMetadataStates(\n\t\t\t\t\t\tDoorLockMode,\n\t\t\t\t\t\tresp.supportedDoorLockModes,\n\t\t\t\t\t),\n\t\t\t\t});\n\n\t\t\t\tconst operationTypeValue = DoorLockCCValues.operationType;\n\t\t\t\tthis.setMetadata(ctx, operationTypeValue, {\n\t\t\t\t\t...operationTypeValue.meta,\n\t\t\t\t\tstates: enumValuesToMetadataStates(\n\t\t\t\t\t\tDoorLockOperationType,\n\t\t\t\t\t\tresp.supportedOperationTypes,\n\t\t\t\t\t),\n\t\t\t\t});\n\t\t\t} else {\n\t\t\t\thadCriticalTimeout = true;\n\t\t\t}\n\t\t}\n\n\t\tif (!hadCriticalTimeout) {\n\t\t\t// Save support information for the status values\n\t\t\tconst doorStatusValue = DoorLockCCValues.doorStatus;\n\t\t\tif (doorSupported) this.setMetadata(ctx, doorStatusValue);\n\t\t\tthis.setValue(\n\t\t\t\tctx,\n\t\t\t\tDoorLockCCValues.doorSupported,\n\t\t\t\tdoorSupported,\n\t\t\t);\n\n\t\t\tconst latchStatusValue = DoorLockCCValues.latchStatus;\n\t\t\tif (latchSupported) this.setMetadata(ctx, latchStatusValue);\n\t\t\tthis.setValue(\n\t\t\t\tctx,\n\t\t\t\tDoorLockCCValues.latchSupported,\n\t\t\t\tlatchSupported,\n\t\t\t);\n\n\t\t\tconst boltStatusValue = DoorLockCCValues.boltStatus;\n\t\t\tif (boltSupported) this.setMetadata(ctx, boltStatusValue);\n\t\t\tthis.setValue(\n\t\t\t\tctx,\n\t\t\t\tDoorLockCCValues.boltSupported,\n\t\t\t\tboltSupported,\n\t\t\t);\n\t\t}\n\n\t\tawait this.refreshValues(ctx);\n\n\t\t// Remember that the interview is complete\n\t\tif (!hadCriticalTimeout) this.setInterviewComplete(ctx, true);\n\t}\n\n\tpublic async refreshValues(\n\t\tctx: RefreshValuesContext,\n\t): Promise<void> {\n\t\tconst node = this.getNode(ctx)!;\n\t\tconst endpoint = this.getEndpoint(ctx)!;\n\t\tconst api = CCAPI.create(\n\t\t\tCommandClasses[\"Door Lock\"],\n\t\t\tctx,\n\t\t\tendpoint,\n\t\t).withOptions({\n\t\t\tpriority: MessagePriority.NodeQuery,\n\t\t});\n\n\t\tctx.logNode(node.id, {\n\t\t\tendpoint: this.endpointIndex,\n\t\t\tmessage: \"requesting lock configuration...\",\n\t\t\tdirection: \"outbound\",\n\t\t});\n\t\tconst config = await api.getConfiguration();\n\t\tif (config) {\n\t\t\tlet logMessage = `received lock configuration:\noperation type: ${\n\t\t\t\tgetEnumMemberName(\n\t\t\t\t\tDoorLockOperationType,\n\t\t\t\t\tconfig.operationType,\n\t\t\t\t)\n\t\t\t}`;\n\t\t\tif (config.operationType === DoorLockOperationType.Timed) {\n\t\t\t\tlogMessage += `\nlock timeout: ${config.lockTimeoutConfiguration} seconds\n`;\n\t\t\t}\n\t\t\tlogMessage += `\noutside handles can open door: ${\n\t\t\t\tconfig.outsideHandlesCanOpenDoorConfiguration\n\t\t\t\t\t.map(String)\n\t\t\t\t\t.join(\", \")\n\t\t\t}\ninside handles can open door: ${\n\t\t\t\tconfig.insideHandlesCanOpenDoorConfiguration\n\t\t\t\t\t.map(String)\n\t\t\t\t\t.join(\", \")\n\t\t\t}`;\n\t\t\tif (api.version >= 4) {\n\t\t\t\tlogMessage += `\nauto-relock time ${config.autoRelockTime ?? \"-\"} seconds\nhold-and-release time ${config.holdAndReleaseTime ?? \"-\"} seconds\ntwist assist ${!!config.twistAssist}\nblock to block ${!!config.blockToBlock}`;\n\t\t\t}\n\n\t\t\tctx.logNode(node.id, {\n\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\tmessage: logMessage,\n\t\t\t\tdirection: \"inbound\",\n\t\t\t});\n\t\t}\n\n\t\tctx.logNode(node.id, {\n\t\t\tendpoint: this.endpointIndex,\n\t\t\tmessage: \"requesting current lock status...\",\n\t\t\tdirection: \"outbound\",\n\t\t});\n\t\tconst status = await api.get();\n\t\tif (status) {\n\t\t\tlet logMessage = `received lock status:\ncurrent mode: ${getEnumMemberName(DoorLockMode, status.currentMode)}`;\n\t\t\tif (status.targetMode != undefined) {\n\t\t\t\tlogMessage += `\ntarget mode: ${getEnumMemberName(DoorLockMode, status.targetMode)}\nremaining duration: ${status.duration?.toString() ?? \"undefined\"}`;\n\t\t\t}\n\t\t\tif (status.lockTimeout != undefined) {\n\t\t\t\tlogMessage += `\nlock timeout: ${status.lockTimeout} seconds`;\n\t\t\t}\n\t\t\tif (status.doorStatus != undefined) {\n\t\t\t\tlogMessage += `\ndoor status: ${status.doorStatus}`;\n\t\t\t}\n\t\t\tif (status.boltStatus != undefined) {\n\t\t\t\tlogMessage += `\nbolt status: ${status.boltStatus}`;\n\t\t\t}\n\t\t\tif (status.latchStatus != undefined) {\n\t\t\t\tlogMessage += `\nlatch status: ${status.latchStatus}`;\n\t\t\t}\n\t\t\tctx.logNode(node.id, {\n\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\tmessage: logMessage,\n\t\t\t\tdirection: \"inbound\",\n\t\t\t});\n\t\t}\n\t}\n}\n\n// @publicAPI\nexport interface DoorLockCCOperationSetOptions {\n\tmode: DoorLockMode;\n}\n\n@CCCommand(DoorLockCommand.OperationSet)\n@useSupervision()\nexport class DoorLockCCOperationSet extends DoorLockCC {\n\tpublic constructor(\n\t\toptions: WithAddress<DoorLockCCOperationSetOptions>,\n\t) {\n\t\tsuper(options);\n\t\tif (options.mode === DoorLockMode.Unknown) {\n\t\t\tthrow new ZWaveError(\n\t\t\t\t`Unknown is not a valid door lock target state!`,\n\t\t\t\tZWaveErrorCodes.Argument_Invalid,\n\t\t\t);\n\t\t}\n\t\tthis.mode = options.mode;\n\t}\n\n\tpublic static from(\n\t\t_raw: CCRaw,\n\t\t_ctx: CCParsingContext,\n\t): DoorLockCCOperationSet {\n\t\t// TODO: Deserialize payload\n\t\tthrow new ZWaveError(\n\t\t\t`${this.name}: deserialization not implemented`,\n\t\t\tZWaveErrorCodes.Deserialization_NotImplemented,\n\t\t);\n\n\t\t// return new DoorLockCCOperationSet({\n\t\t// \tnodeId: ctx.sourceNodeId,\n\t\t// });\n\t}\n\n\tpublic mode: DoorLockMode;\n\n\tpublic serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\tthis.payload = Bytes.from([this.mode]);\n\t\treturn super.serialize(ctx);\n\t}\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage: {\n\t\t\t\t\"target mode\": getEnumMemberName(DoorLockMode, this.mode),\n\t\t\t},\n\t\t};\n\t}\n}\n\n// @publicAPI\nexport interface DoorLockCCOperationReportOptions {\n\tcurrentMode: DoorLockMode;\n\toutsideHandlesCanOpenDoor: DoorHandleStatus;\n\tinsideHandlesCanOpenDoor: DoorHandleStatus;\n\tdoorStatus?: \"closed\" | \"open\";\n\tboltStatus?: \"unlocked\" | \"locked\";\n\tlatchStatus?: \"closed\" | \"open\";\n\tlockTimeout?: number;\n\ttargetMode?: DoorLockMode;\n\tduration?: Duration;\n}\n\n@CCCommand(DoorLockCommand.OperationReport)\n@ccValueProperty(\"currentMode\", DoorLockCCValues.currentMode)\n@ccValueProperty(\"targetMode\", DoorLockCCValues.targetMode)\n@ccValueProperty(\"duration\", DoorLockCCValues.duration)\n@ccValueProperty(\n\t\"outsideHandlesCanOpenDoor\",\n\tDoorLockCCValues.outsideHandlesCanOpenDoor,\n)\n@ccValueProperty(\n\t\"insideHandlesCanOpenDoor\",\n\tDoorLockCCValues.insideHandlesCanOpenDoor,\n)\n@ccValueProperty(\"lockTimeout\", DoorLockCCValues.lockTimeout)\nexport class DoorLockCCOperationReport extends DoorLockCC {\n\tpublic constructor(\n\t\toptions: WithAddress<DoorLockCCOperationReportOptions>,\n\t) {\n\t\tsuper(options);\n\n\t\t// TODO: Check implementation:\n\t\tthis.currentMode = options.currentMode;\n\t\tthis.outsideHandlesCanOpenDoor = options.outsideHandlesCanOpenDoor;\n\t\tthis.insideHandlesCanOpenDoor = options.insideHandlesCanOpenDoor;\n\t\tthis.doorStatus = options.doorStatus;\n\t\tthis.boltStatus = options.boltStatus;\n\t\tthis.latchStatus = options.latchStatus;\n\t\tthis.lockTimeout = options.lockTimeout;\n\t\tthis.targetMode = options.targetMode;\n\t\tthis.duration = options.duration;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): DoorLockCCOperationReport {\n\t\tvalidatePayload(raw.payload.length >= 5);\n\t\tconst currentMode: DoorLockMode = raw.payload[0];\n\t\tconst outsideHandlesCanOpenDoor: DoorHandleStatus = [\n\t\t\t!!(raw.payload[1] & 0b0001_0000),\n\t\t\t!!(raw.payload[1] & 0b0010_0000),\n\t\t\t!!(raw.payload[1] & 0b0100_0000),\n\t\t\t!!(raw.payload[1] & 0b1000_0000),\n\t\t];\n\t\tconst insideHandlesCanOpenDoor: DoorHandleStatus = [\n\t\t\t!!(raw.payload[1] & 0b0001),\n\t\t\t!!(raw.payload[1] & 0b0010),\n\t\t\t!!(raw.payload[1] & 0b0100),\n\t\t\t!!(raw.payload[1] & 0b1000),\n\t\t];\n\t\tconst doorStatus: \"closed\" | \"open\" | undefined =\n\t\t\t!!(raw.payload[2] & 0b1)\n\t\t\t\t? \"closed\"\n\t\t\t\t: \"open\";\n\t\tconst boltStatus: \"unlocked\" | \"locked\" | undefined =\n\t\t\t!!(raw.payload[2] & 0b10) ? \"unlocked\" : \"locked\";\n\t\tconst latchStatus: \"closed\" | \"open\" | undefined =\n\t\t\t!!(raw.payload[2] & 0b100)\n\t\t\t\t? \"closed\"\n\t\t\t\t: \"open\";\n\t\t// Ignore invalid timeout values\n\t\tconst lockTimeoutMinutes = raw.payload[3];\n\t\tconst lockTimeoutSeconds = raw.payload[4];\n\t\tlet lockTimeout: number | undefined;\n\t\tif (lockTimeoutMinutes <= 253 && lockTimeoutSeconds <= 59) {\n\t\t\tlockTimeout = lockTimeoutSeconds + lockTimeoutMinutes * 60;\n\t\t}\n\n\t\tlet targetMode: DoorLockMode | undefined;\n\t\tlet duration: Duration | undefined;\n\t\tif (raw.payload.length >= 7) {\n\t\t\ttargetMode = raw.payload[5];\n\t\t\tduration = Duration.parseReport(raw.payload[6]);\n\t\t}\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tcurrentMode,\n\t\t\toutsideHandlesCanOpenDoor,\n\t\t\tinsideHandlesCanOpenDoor,\n\t\t\tdoorStatus,\n\t\t\tboltStatus,\n\t\t\tlatchStatus,\n\t\t\tlockTimeout,\n\t\t\ttargetMode,\n\t\t\tduration,\n\t\t});\n\t}\n\n\tpublic persistValues(ctx: PersistValuesContext): boolean {\n\t\tif (!super.persistValues(ctx)) return false;\n\n\t\t// Only store the door/bolt/latch status if the lock supports it\n\t\tconst supportsDoorStatus = !!this.getValue(\n\t\t\tctx,\n\t\t\tDoorLockCCValues.doorSupported,\n\t\t);\n\t\tif (supportsDoorStatus) {\n\t\t\tthis.setValue(\n\t\t\t\tctx,\n\t\t\t\tDoorLockCCValues.doorStatus,\n\t\t\t\tthis.doorStatus,\n\t\t\t);\n\t\t}\n\t\tconst supportsBoltStatus = !!this.getValue(\n\t\t\tctx,\n\t\t\tDoorLockCCValues.boltSupported,\n\t\t);\n\t\tif (supportsBoltStatus) {\n\t\t\tthis.setValue(\n\t\t\t\tctx,\n\t\t\t\tDoorLockCCValues.boltStatus,\n\t\t\t\tthis.boltStatus,\n\t\t\t);\n\t\t}\n\t\tconst supportsLatchStatus = !!this.getValue(\n\t\t\tctx,\n\t\t\tDoorLockCCValues.latchSupported,\n\t\t);\n\t\tif (supportsLatchStatus) {\n\t\t\tthis.setValue(\n\t\t\t\tctx,\n\t\t\t\tDoorLockCCValues.latchStatus,\n\t\t\t\tthis.latchStatus,\n\t\t\t);\n\t\t}\n\n\t\treturn true;\n\t}\n\n\tpublic readonly currentMode: DoorLockMode;\n\n\tpublic readonly targetMode?: DoorLockMode;\n\n\tpublic readonly duration?: Duration;\n\n\tpublic readonly outsideHandlesCanOpenDoor: DoorHandleStatus;\n\n\tpublic readonly insideHandlesCanOpenDoor: DoorHandleStatus;\n\n\tpublic readonly latchStatus?: \"open\" | \"closed\";\n\tpublic readonly boltStatus?: \"locked\" | \"unlocked\";\n\tpublic readonly doorStatus?: \"open\" | \"closed\";\n\n\tpublic readonly lockTimeout?: number; // in seconds\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\tconst message: MessageRecord = {\n\t\t\t\"current mode\": getEnumMemberName(DoorLockMode, this.currentMode),\n\t\t\t\"active outside handles\": this.outsideHandlesCanOpenDoor.join(\", \"),\n\t\t\t\"active inside handles\": this.insideHandlesCanOpenDoor.join(\", \"),\n\t\t};\n\n\t\tif (this.latchStatus != undefined) {\n\t\t\tmessage[\"latch status\"] = this.latchStatus;\n\t\t}\n\t\tif (this.boltStatus != undefined) {\n\t\t\tmessage[\"bolt status\"] = this.boltStatus;\n\t\t}\n\t\tif (this.doorStatus != undefined) {\n\t\t\tmessage[\"door status\"] = this.doorStatus;\n\t\t}\n\n\t\tif (this.targetMode != undefined) {\n\t\t\tmessage[\"target mode\"] = getEnumMemberName(\n\t\t\t\tDoorLockMode,\n\t\t\t\tthis.targetMode,\n\t\t\t);\n\t\t}\n\t\tif (this.duration != undefined) {\n\t\t\tmessage[\"remaining duration\"] = this.duration.toString();\n\t\t}\n\t\tif (this.lockTimeout != undefined) {\n\t\t\tmessage[\"lock timeout\"] = `${this.lockTimeout} seconds`;\n\t\t}\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage,\n\t\t};\n\t}\n}\n\n@CCCommand(DoorLockCommand.OperationGet)\n@expectedCCResponse(DoorLockCCOperationReport)\nexport class DoorLockCCOperationGet extends DoorLockCC {}\n\n// @publicAPI\nexport interface DoorLockCCConfigurationReportOptions {\n\toperationType: DoorLockOperationType;\n\toutsideHandlesCanOpenDoorConfiguration: DoorHandleStatus;\n\tinsideHandlesCanOpenDoorConfiguration: DoorHandleStatus;\n\tlockTimeoutConfiguration?: number;\n\tautoRelockTime?: number;\n\tholdAndReleaseTime?: number;\n\ttwistAssist?: boolean;\n\tblockToBlock?: boolean;\n}\n\n@CCCommand(DoorLockCommand.ConfigurationReport)\n@ccValueProperty(\"operationType\", DoorLockCCValues.operationType)\n@ccValueProperty(\n\t\"outsideHandlesCanOpenDoorConfiguration\",\n\tDoorLockCCValues.outsideHandlesCanOpenDoorConfiguration,\n)\n@ccValueProperty(\n\t\"insideHandlesCanOpenDoorConfiguration\",\n\tDoorLockCCValues.insideHandlesCanOpenDoorConfiguration,\n)\n@ccValueProperty(\n\t\"lockTimeoutConfiguration\",\n\tDoorLockCCValues.lockTimeoutConfiguration,\n)\nexport class DoorLockCCConfigurationReport extends DoorLockCC {\n\tpublic constructor(\n\t\toptions: WithAddress<DoorLockCCConfigurationReportOptions>,\n\t) {\n\t\tsuper(options);\n\n\t\t// TODO: Check implementation:\n\t\tthis.operationType = options.operationType;\n\t\tthis.outsideHandlesCanOpenDoorConfiguration =\n\t\t\toptions.outsideHandlesCanOpenDoorConfiguration;\n\t\tthis.insideHandlesCanOpenDoorConfiguration =\n\t\t\toptions.insideHandlesCanOpenDoorConfiguration;\n\t\tthis.lockTimeoutConfiguration = options.lockTimeoutConfiguration;\n\t\tthis.autoRelockTime = options.autoRelockTime;\n\t\tthis.holdAndReleaseTime = options.holdAndReleaseTime;\n\t\tthis.twistAssist = options.twistAssist;\n\t\tthis.blockToBlock = options.blockToBlock;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): DoorLockCCConfigurationReport {\n\t\tvalidatePayload(raw.payload.length >= 4);\n\t\tconst operationType: DoorLockOperationType = raw.payload[0];\n\t\tconst outsideHandlesCanOpenDoorConfiguration: DoorHandleStatus = [\n\t\t\t!!(raw.payload[1] & 0b0001_0000),\n\t\t\t!!(raw.payload[1] & 0b0010_0000),\n\t\t\t!!(raw.payload[1] & 0b0100_0000),\n\t\t\t!!(raw.payload[1] & 0b1000_0000),\n\t\t];\n\t\tconst insideHandlesCanOpenDoorConfiguration: DoorHandleStatus = [\n\t\t\t!!(raw.payload[1] & 0b0001),\n\t\t\t!!(raw.payload[1] & 0b0010),\n\t\t\t!!(raw.payload[1] & 0b0100),\n\t\t\t!!(raw.payload[1] & 0b1000),\n\t\t];\n\t\tlet lockTimeoutConfiguration: number | undefined;\n\t\tif (operationType === DoorLockOperationType.Timed) {\n\t\t\tconst lockTimeoutMinutes = raw.payload[2];\n\t\t\tconst lockTimeoutSeconds = raw.payload[3];\n\t\t\tif (lockTimeoutMinutes <= 0xfd && lockTimeoutSeconds <= 59) {\n\t\t\t\tlockTimeoutConfiguration = lockTimeoutSeconds\n\t\t\t\t\t+ lockTimeoutMinutes * 60;\n\t\t\t}\n\t\t}\n\n\t\tlet autoRelockTime: number | undefined;\n\t\tlet holdAndReleaseTime: number | undefined;\n\t\tlet twistAssist: boolean | undefined;\n\t\tlet blockToBlock: boolean | undefined;\n\t\tif (raw.payload.length >= 5) {\n\t\t\tautoRelockTime = raw.payload.readUInt16BE(4);\n\t\t\tholdAndReleaseTime = raw.payload.readUInt16BE(6);\n\n\t\t\tconst flags = raw.payload[8];\n\t\t\ttwistAssist = !!(flags & 0b1);\n\t\t\tblockToBlock = !!(flags & 0b10);\n\t\t}\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\toperationType,\n\t\t\toutsideHandlesCanOpenDoorConfiguration,\n\t\t\tinsideHandlesCanOpenDoorConfiguration,\n\t\t\tlockTimeoutConfiguration,\n\t\t\tautoRelockTime,\n\t\t\tholdAndReleaseTime,\n\t\t\ttwistAssist,\n\t\t\tblockToBlock,\n\t\t});\n\t}\n\n\tpublic readonly operationType: DoorLockOperationType;\n\n\tpublic readonly outsideHandlesCanOpenDoorConfiguration: DoorHandleStatus;\n\n\tpublic readonly insideHandlesCanOpenDoorConfiguration: DoorHandleStatus;\n\n\tpublic readonly lockTimeoutConfiguration?: number;\n\n\t// These are not always supported and have to be persisted manually\n\t// to avoid unsupported values being exposed to the user\n\tpublic readonly autoRelockTime?: number;\n\tpublic readonly holdAndReleaseTime?: number;\n\tpublic readonly twistAssist?: boolean;\n\tpublic readonly blockToBlock?: boolean;\n\n\tpublic persistValues(ctx: PersistValuesContext): boolean {\n\t\tif (!super.persistValues(ctx)) return false;\n\n\t\t// Only store the autoRelockTime etc. params if the lock supports it\n\t\tconst supportsAutoRelock = !!this.getValue(\n\t\t\tctx,\n\t\t\tDoorLockCCValues.autoRelockSupported,\n\t\t);\n\t\tif (supportsAutoRelock) {\n\t\t\tthis.setValue(\n\t\t\t\tctx,\n\t\t\t\tDoorLockCCValues.autoRelockTime,\n\t\t\t\tthis.autoRelockTime,\n\t\t\t);\n\t\t}\n\t\tconst supportsHoldAndRelease = !!this.getValue(\n\t\t\tctx,\n\t\t\tDoorLockCCValues.holdAndReleaseSupported,\n\t\t);\n\t\tif (supportsHoldAndRelease) {\n\t\t\tthis.setValue(\n\t\t\t\tctx,\n\t\t\t\tDoorLockCCValues.holdAndReleaseTime,\n\t\t\t\tthis.holdAndReleaseTime,\n\t\t\t);\n\t\t}\n\t\tconst supportsTwistAssist = !!this.getValue(\n\t\t\tctx,\n\t\t\tDoorLockCCValues.twistAssistSupported,\n\t\t);\n\t\tif (supportsTwistAssist) {\n\t\t\tthis.setValue(\n\t\t\t\tctx,\n\t\t\t\tDoorLockCCValues.twistAssist,\n\t\t\t\tthis.twistAssist,\n\t\t\t);\n\t\t}\n\t\tconst supportsBlockToBlock = !!this.getValue(\n\t\t\tctx,\n\t\t\tDoorLockCCValues.blockToBlockSupported,\n\t\t);\n\t\tif (supportsBlockToBlock) {\n\t\t\tthis.setValue(\n\t\t\t\tctx,\n\t\t\t\tDoorLockCCValues.blockToBlock,\n\t\t\t\tthis.blockToBlock,\n\t\t\t);\n\t\t}\n\n\t\treturn true;\n\t}\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\tconst message: MessageRecord = {\n\t\t\t\"operation type\": getEnumMemberName(\n\t\t\t\tDoorLockOperationType,\n\t\t\t\tthis.operationType,\n\t\t\t),\n\t\t\t\"outside handle configuration\": this\n\t\t\t\t.outsideHandlesCanOpenDoorConfiguration.join(\", \"),\n\t\t\t\"inside handle configuration\": this\n\t\t\t\t.insideHandlesCanOpenDoorConfiguration.join(\", \"),\n\t\t};\n\t\tif (this.lockTimeoutConfiguration != undefined) {\n\t\t\tmessage[\n\t\t\t\t\"timed mode duration\"\n\t\t\t] = `${this.lockTimeoutConfiguration} seconds`;\n\t\t}\n\t\tif (this.autoRelockTime != undefined) {\n\t\t\tmessage[\"auto-relock time\"] = `${this.autoRelockTime} seconds`;\n\t\t}\n\t\tif (this.holdAndReleaseTime != undefined) {\n\t\t\tmessage[\n\t\t\t\t\"hold-and-release time\"\n\t\t\t] = `${this.holdAndReleaseTime} seconds`;\n\t\t}\n\t\tif (this.twistAssist != undefined) {\n\t\t\tmessage[\"twist assist enabled\"] = this.twistAssist;\n\t\t}\n\t\tif (this.blockToBlock != undefined) {\n\t\t\tmessage[\"block-to-block enabled\"] = this.blockToBlock;\n\t\t}\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage,\n\t\t};\n\t}\n}\n\n@CCCommand(DoorLockCommand.ConfigurationGet)\n@expectedCCResponse(DoorLockCCConfigurationReport)\nexport class DoorLockCCConfigurationGet extends DoorLockCC {}\n\n// @publicAPI\nexport type DoorLockCCConfigurationSetOptions =\n\t& (\n\t\t| {\n\t\t\toperationType: DoorLockOperationType.Timed;\n\t\t\tlockTimeoutConfiguration: number;\n\t\t}\n\t\t| {\n\t\t\toperationType: DoorLockOperationType.Constant;\n\t\t\tlockTimeoutConfiguration?: undefined;\n\t\t}\n\t)\n\t& {\n\t\toutsideHandlesCanOpenDoorConfiguration: DoorHandleStatus;\n\t\tinsideHandlesCanOpenDoorConfiguration: DoorHandleStatus;\n\t\t// V4+\n\t\tautoRelockTime?: number;\n\t\tholdAndReleaseTime?: number;\n\t\ttwistAssist?: boolean;\n\t\tblockToBlock?: boolean;\n\t};\n\n@CCCommand(DoorLockCommand.ConfigurationSet)\n@useSupervision()\nexport class DoorLockCCConfigurationSet extends DoorLockCC {\n\tpublic constructor(\n\t\toptions: WithAddress<DoorLockCCConfigurationSetOptions>,\n\t) {\n\t\tsuper(options);\n\t\tthis.operationType = options.operationType;\n\t\tthis.outsideHandlesCanOpenDoorConfiguration =\n\t\t\toptions.outsideHandlesCanOpenDoorConfiguration;\n\t\tthis.insideHandlesCanOpenDoorConfiguration =\n\t\t\toptions.insideHandlesCanOpenDoorConfiguration;\n\t\tthis.lockTimeoutConfiguration = options.lockTimeoutConfiguration;\n\t\tthis.autoRelockTime = options.autoRelockTime;\n\t\tthis.holdAndReleaseTime = options.holdAndReleaseTime;\n\t\tthis.twistAssist = options.twistAssist;\n\t\tthis.blockToBlock = options.blockToBlock;\n\t}\n\n\tpublic static from(\n\t\t_raw: CCRaw,\n\t\t_ctx: CCParsingContext,\n\t): DoorLockCCConfigurationSet {\n\t\t// TODO: Deserialize payload\n\t\tthrow new ZWaveError(\n\t\t\t`${this.name}: deserialization not implemented`,\n\t\t\tZWaveErrorCodes.Deserialization_NotImplemented,\n\t\t);\n\n\t\t// return new DoorLockCCConfigurationSet({\n\t\t// \tnodeId: ctx.sourceNodeId,\n\t\t// });\n\t}\n\n\tpublic operationType: DoorLockOperationType;\n\tpublic outsideHandlesCanOpenDoorConfiguration: DoorHandleStatus;\n\tpublic insideHandlesCanOpenDoorConfiguration: DoorHandleStatus;\n\tpublic lockTimeoutConfiguration?: number;\n\tpublic autoRelockTime?: number;\n\tpublic holdAndReleaseTime?: number;\n\tpublic twistAssist?: boolean;\n\tpublic blockToBlock?: boolean;\n\n\tpublic serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\tconst insideHandles = isArray(\n\t\t\t\tthis.insideHandlesCanOpenDoorConfiguration,\n\t\t\t)\n\t\t\t? this.insideHandlesCanOpenDoorConfiguration\n\t\t\t: [];\n\t\tconst outsideHandles = isArray(\n\t\t\t\tthis.outsideHandlesCanOpenDoorConfiguration,\n\t\t\t)\n\t\t\t? this.outsideHandlesCanOpenDoorConfiguration\n\t\t\t: [];\n\n\t\tconst handles = [...insideHandles, ...outsideHandles]\n\t\t\t.map((val, i) => (val ? 1 << i : 0))\n\t\t\t.reduce((acc, cur) => acc | cur, 0);\n\n\t\tlet lockTimeoutMinutes: number;\n\t\tlet lockTimeoutSeconds: number;\n\t\tif (this.operationType === DoorLockOperationType.Constant) {\n\t\t\tlockTimeoutMinutes = lockTimeoutSeconds = 0xfe;\n\t\t} else {\n\t\t\tlockTimeoutMinutes = Math.floor(\n\t\t\t\tthis.lockTimeoutConfiguration! / 60,\n\t\t\t);\n\t\t\tlockTimeoutSeconds = this.lockTimeoutConfiguration! % 60;\n\t\t}\n\n\t\tconst flags = (this.twistAssist ? 0b1 : 0)\n\t\t\t| (this.blockToBlock ? 0b10 : 0);\n\n\t\tthis.payload = Bytes.from([\n\t\t\tthis.operationType,\n\t\t\thandles,\n\t\t\tlockTimeoutMinutes,\n\t\t\tlockTimeoutSeconds,\n\t\t\t// placeholder for auto relock time\n\t\t\t0,\n\t\t\t0,\n\t\t\t// placeholder for hold and release time\n\t\t\t0,\n\t\t\t0,\n\t\t\tflags,\n\t\t]);\n\n\t\tthis.payload.writeUInt16BE((this.autoRelockTime ?? 0) & 0xffff, 4);\n\t\tthis.payload.writeUInt16BE(\n\t\t\t(this.holdAndReleaseTime ?? 0) & 0xffff,\n\t\t\t6,\n\t\t);\n\n\t\treturn super.serialize(ctx);\n\t}\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\tconst insideHandles = isArray(\n\t\t\t\tthis.insideHandlesCanOpenDoorConfiguration,\n\t\t\t)\n\t\t\t? this.insideHandlesCanOpenDoorConfiguration\n\t\t\t: [];\n\t\tconst outsideHandles = isArray(\n\t\t\t\tthis.outsideHandlesCanOpenDoorConfiguration,\n\t\t\t)\n\t\t\t? this.outsideHandlesCanOpenDoorConfiguration\n\t\t\t: [];\n\t\tconst message: MessageRecord = {\n\t\t\t\"operation type\": getEnumMemberName(\n\t\t\t\tDoorLockOperationType,\n\t\t\t\tthis.operationType,\n\t\t\t),\n\t\t\t\"outside handle configuration\": outsideHandles.join(\", \"),\n\t\t\t\"inside handle configuration\": insideHandles.join(\", \"),\n\t\t};\n\t\tif (this.lockTimeoutConfiguration != undefined) {\n\t\t\tmessage[\n\t\t\t\t\"timed mode duration\"\n\t\t\t] = `${this.lockTimeoutConfiguration} seconds`;\n\t\t}\n\t\tif (this.autoRelockTime != undefined) {\n\t\t\tmessage[\"auto-relock time\"] = `${this.autoRelockTime} seconds`;\n\t\t}\n\t\tif (this.holdAndReleaseTime != undefined) {\n\t\t\tmessage[\n\t\t\t\t\"hold-and-release time\"\n\t\t\t] = `${this.holdAndReleaseTime} seconds`;\n\t\t}\n\t\tif (this.twistAssist != undefined) {\n\t\t\tmessage[\"enable twist assist\"] = this.twistAssist;\n\t\t}\n\t\tif (this.blockToBlock != undefined) {\n\t\t\tmessage[\"enable block-to-block\"] = this.blockToBlock;\n\t\t}\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage,\n\t\t};\n\t}\n}\n\n// @publicAPI\nexport interface DoorLockCCCapabilitiesReportOptions {\n\tsupportedOperationTypes: DoorLockOperationType[];\n\tsupportedDoorLockModes: DoorLockMode[];\n\tsupportedOutsideHandles: DoorHandleStatus;\n\tsupportedInsideHandles: DoorHandleStatus;\n\tdoorSupported: boolean;\n\tboltSupported: boolean;\n\tlatchSupported: boolean;\n\tblockToBlockSupported: boolean;\n\ttwistAssistSupported: boolean;\n\tholdAndReleaseSupported: boolean;\n\tautoRelockSupported: boolean;\n}\n\n@CCCommand(DoorLockCommand.CapabilitiesReport)\n@ccValueProperty(\n\t\"supportedOutsideHandles\",\n\tDoorLockCCValues.supportedOutsideHandles,\n)\n@ccValueProperty(\n\t\"supportedInsideHandles\",\n\tDoorLockCCValues.supportedInsideHandles,\n)\n@ccValueProperty(\"autoRelockSupported\", DoorLockCCValues.autoRelockSupported)\n@ccValueProperty(\n\t\"holdAndReleaseSupported\",\n\tDoorLockCCValues.holdAndReleaseSupported,\n)\n@ccValueProperty(\"twistAssistSupported\", DoorLockCCValues.twistAssistSupported)\n@ccValueProperty(\n\t\"blockToBlockSupported\",\n\tDoorLockCCValues.blockToBlockSupported,\n)\nexport class DoorLockCCCapabilitiesReport extends DoorLockCC {\n\tpublic constructor(\n\t\toptions: WithAddress<DoorLockCCCapabilitiesReportOptions>,\n\t) {\n\t\tsuper(options);\n\n\t\t// TODO: Check implementation:\n\t\tthis.supportedOperationTypes = options.supportedOperationTypes;\n\t\tthis.supportedDoorLockModes = options.supportedDoorLockModes;\n\t\tthis.supportedOutsideHandles = options.supportedOutsideHandles;\n\t\tthis.supportedInsideHandles = options.supportedInsideHandles;\n\t\tthis.doorSupported = options.doorSupported;\n\t\tthis.boltSupported = options.boltSupported;\n\t\tthis.latchSupported = options.latchSupported;\n\t\tthis.blockToBlockSupported = options.blockToBlockSupported;\n\t\tthis.twistAssistSupported = options.twistAssistSupported;\n\t\tthis.holdAndReleaseSupported = options.holdAndReleaseSupported;\n\t\tthis.autoRelockSupported = options.autoRelockSupported;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): DoorLockCCCapabilitiesReport {\n\t\t// parse variable length operation type bit mask\n\t\tvalidatePayload(raw.payload.length >= 1);\n\t\tconst bitMaskLength = raw.payload[0] & 0b11111;\n\t\tlet offset = 1;\n\t\tvalidatePayload(raw.payload.length >= offset + bitMaskLength + 1);\n\t\tconst supportedOperationTypes: DoorLockOperationType[] = parseBitMask(\n\t\t\traw.payload.subarray(offset, offset + bitMaskLength),\n\t\t\t// bit 0 is reserved, bitmask starts at 1\n\t\t\t0,\n\t\t);\n\t\toffset += bitMaskLength;\n\t\t// parse variable length door lock mode list\n\t\tconst listLength = raw.payload[offset];\n\t\toffset += 1;\n\t\tvalidatePayload(raw.payload.length >= offset + listLength + 3);\n\t\tconst supportedDoorLockModes: DoorLockMode[] = [\n\t\t\t...raw.payload.subarray(offset, offset + listLength),\n\t\t];\n\t\toffset += listLength;\n\t\tconst supportedOutsideHandles: DoorHandleStatus = [\n\t\t\t!!(raw.payload[offset] & 0b0001_0000),\n\t\t\t!!(raw.payload[offset] & 0b0010_0000),\n\t\t\t!!(raw.payload[offset] & 0b0100_0000),\n\t\t\t!!(raw.payload[offset] & 0b1000_0000),\n\t\t];\n\t\tconst supportedInsideHandles: DoorHandleStatus = [\n\t\t\t!!(raw.payload[offset] & 0b0001),\n\t\t\t!!(raw.payload[offset] & 0b0010),\n\t\t\t!!(raw.payload[offset] & 0b0100),\n\t\t\t!!(raw.payload[offset] & 0b1000),\n\t\t];\n\t\tconst doorSupported = !!(raw.payload[offset + 1] & 0b1);\n\t\tconst boltSupported = !!(raw.payload[offset + 1] & 0b10);\n\t\tconst latchSupported = !!(raw.payload[offset + 1] & 0b100);\n\t\tconst blockToBlockSupported = !!(raw.payload[offset + 2] & 0b1);\n\t\tconst twistAssistSupported = !!(raw.payload[offset + 2] & 0b10);\n\t\tconst holdAndReleaseSupported = !!(raw.payload[offset + 2] & 0b100);\n\t\tconst autoRelockSupported = !!(raw.payload[offset + 2] & 0b1000);\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\tsupportedOperationTypes,\n\t\t\tsupportedDoorLockModes,\n\t\t\tsupportedOutsideHandles,\n\t\t\tsupportedInsideHandles,\n\t\t\tdoorSupported,\n\t\t\tboltSupported,\n\t\t\tlatchSupported,\n\t\t\tblockToBlockSupported,\n\t\t\ttwistAssistSupported,\n\t\t\tholdAndReleaseSupported,\n\t\t\tautoRelockSupported,\n\t\t});\n\t}\n\n\tpublic readonly supportedOperationTypes: readonly DoorLockOperationType[];\n\tpublic readonly supportedDoorLockModes: readonly DoorLockMode[];\n\n\tpublic readonly supportedOutsideHandles: DoorHandleStatus;\n\n\tpublic readonly supportedInsideHandles: DoorHandleStatus;\n\n\t// These 3 are not automatically persisted because in CC version 3\n\t// we have to assume them to be supported. In v4 we can query this.\n\tpublic readonly latchSupported: boolean;\n\tpublic readonly boltSupported: boolean;\n\tpublic readonly doorSupported: boolean;\n\n\tpublic readonly autoRelockSupported: boolean;\n\n\tpublic readonly holdAndReleaseSupported: boolean;\n\n\tpublic readonly twistAssistSupported: boolean;\n\n\tpublic readonly blockToBlockSupported: boolean;\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage: {\n\t\t\t\tdoor: this.doorSupported,\n\t\t\t\tbolt: this.boltSupported,\n\t\t\t\tlatch: this.latchSupported,\n\t\t\t\t\"block-to-block feature\": this.blockToBlockSupported,\n\t\t\t\t\"twist assist feature\": this.twistAssistSupported,\n\t\t\t\t\"hold-and-release feature\": this.holdAndReleaseSupported,\n\t\t\t\t\"auto-relock feature\": this.autoRelockSupported,\n\t\t\t\t\"operation types\": this.supportedOperationTypes\n\t\t\t\t\t.map(\n\t\t\t\t\t\t(t) =>\n\t\t\t\t\t\t\t`\\n\u00B7 ${\n\t\t\t\t\t\t\t\tgetEnumMemberName(\n\t\t\t\t\t\t\t\t\tDoorLockOperationType,\n\t\t\t\t\t\t\t\t\tt,\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t}`,\n\t\t\t\t\t)\n\t\t\t\t\t.join(\"\"),\n\t\t\t\t\"door lock modes\": this.supportedDoorLockModes\n\t\t\t\t\t.map((t) => `\\n\u00B7 ${getEnumMemberName(DoorLockMode, t)}`)\n\t\t\t\t\t.join(\"\"),\n\t\t\t\t\"outside handles\": this.supportedOutsideHandles.join(\", \"),\n\t\t\t\t\"inside handles\": this.supportedInsideHandles.join(\", \"),\n\t\t\t},\n\t\t};\n\t}\n}\n\n@CCCommand(DoorLockCommand.CapabilitiesGet)\n@expectedCCResponse(DoorLockCCCapabilitiesReport)\nexport class DoorLockCCCapabilitiesGet extends DoorLockCC {}\n"],
5
+ "mappings": "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",
6
+ "names": []
7
7
  }
@@ -1,6 +1,6 @@
1
- import { type CCEncodingContext, type CCParsingContext } from "@zwave-js/cc";
2
- import { CommandClasses, type GetValueDB, type MaybeNotKnown, type MessageOrCCLogEntry, type WithAddress } from "@zwave-js/core/safe";
3
- import { Bytes } from "@zwave-js/shared/safe";
1
+ import type { CCEncodingContext, CCParsingContext } from "@zwave-js/cc";
2
+ import { CommandClasses, type GetValueDB, type MaybeNotKnown, type MessageOrCCLogEntry, type WithAddress } from "@zwave-js/core";
3
+ import { Bytes } from "@zwave-js/shared";
4
4
  import { PhysicalCCAPI } from "../lib/API.js";
5
5
  import { type CCRaw, CommandClass, type InterviewContext, type RefreshValuesContext } from "../lib/CommandClass.js";
6
6
  import { DoorLockLoggingCommand, type DoorLockLoggingRecord } from "../lib/_Types.js";
@@ -15,7 +15,7 @@ export declare const DoorLockLoggingCCValues: Readonly<{
15
15
  readonly endpoint: number;
16
16
  readonly property: "recordsCount";
17
17
  };
18
- is: (valueId: import("@zwave-js/core/safe").ValueID) => boolean;
18
+ is: (valueId: import("@zwave-js/core").ValueID) => boolean;
19
19
  readonly meta: Readonly<{
20
20
  readonly type: "any";
21
21
  readonly readable: true;
@@ -39,9 +39,8 @@ __export(DoorLockLoggingCC_exports, {
39
39
  });
40
40
  module.exports = __toCommonJS(DoorLockLoggingCC_exports);
41
41
  var __validateArgs = __toESM(require("./DoorLockLoggingCC._validateArgs.js"), 1);
42
- var import_safe = require("@zwave-js/core/safe");
43
- var import_safe2 = require("@zwave-js/shared/safe");
44
- var import_safe3 = require("@zwave-js/shared/safe");
42
+ var import_core = require("@zwave-js/core");
43
+ var import_shared = require("@zwave-js/shared");
45
44
  var import_API = require("../lib/API.js");
46
45
  var import_CommandClass = require("../lib/CommandClass.js");
47
46
  var import_CommandClassDecorators = require("../lib/CommandClassDecorators.js");
@@ -138,7 +137,7 @@ const eventTypeLabel = {
138
137
  };
139
138
  const LATEST_RECORD_NUMBER_KEY = 0;
140
139
  let DoorLockLoggingCCAPI = (() => {
141
- let _classDecorators = [(0, import_CommandClassDecorators.API)(import_safe.CommandClasses["Door Lock Logging"])];
140
+ let _classDecorators = [(0, import_CommandClassDecorators.API)(import_core.CommandClasses["Door Lock Logging"])];
142
141
  let _classDescriptor;
143
142
  let _classExtraInitializers = [];
144
143
  let _classThis;
@@ -199,7 +198,7 @@ let DoorLockLoggingCCAPI = (() => {
199
198
  return DoorLockLoggingCCAPI2 = _classThis;
200
199
  })();
201
200
  let DoorLockLoggingCC = (() => {
202
- let _classDecorators = [(0, import_CommandClassDecorators.commandClass)(import_safe.CommandClasses["Door Lock Logging"]), (0, import_CommandClassDecorators.implementedVersion)(1), (0, import_CommandClassDecorators.ccValues)(import_CCValues_generated.DoorLockLoggingCCValues)];
201
+ let _classDecorators = [(0, import_CommandClassDecorators.commandClass)(import_core.CommandClasses["Door Lock Logging"]), (0, import_CommandClassDecorators.implementedVersion)(1), (0, import_CommandClassDecorators.ccValues)(import_CCValues_generated.DoorLockLoggingCCValues)];
203
202
  let _classDescriptor;
204
203
  let _classExtraInitializers = [];
205
204
  let _classThis;
@@ -231,8 +230,8 @@ let DoorLockLoggingCC = (() => {
231
230
  async refreshValues(ctx) {
232
231
  const node = this.getNode(ctx);
233
232
  const endpoint = this.getEndpoint(ctx);
234
- const api = import_API.CCAPI.create(import_safe.CommandClasses["Door Lock Logging"], ctx, endpoint).withOptions({
235
- priority: import_safe.MessagePriority.NodeQuery
233
+ const api = import_API.CCAPI.create(import_core.CommandClasses["Door Lock Logging"], ctx, endpoint).withOptions({
234
+ priority: import_core.MessagePriority.NodeQuery
236
235
  });
237
236
  ctx.logNode(node.id, {
238
237
  endpoint: this.endpointIndex,
@@ -283,7 +282,7 @@ let DoorLockLoggingCCRecordsSupportedReport = (() => {
283
282
  this.recordsCount = options.recordsCount;
284
283
  }
285
284
  static from(raw, ctx) {
286
- (0, import_safe.validatePayload)(raw.payload.length >= 1);
285
+ (0, import_core.validatePayload)(raw.payload.length >= 1);
287
286
  const recordsCount = raw.payload[0];
288
287
  return new this({
289
288
  nodeId: ctx.sourceNodeId,
@@ -303,7 +302,7 @@ let DoorLockLoggingCCRecordsSupportedReport = (() => {
303
302
  return DoorLockLoggingCCRecordsSupportedReport2 = _classThis;
304
303
  })();
305
304
  function eventTypeToLabel(eventType) {
306
- return eventTypeLabel[import_Types.DoorLockLoggingEventType[eventType]] ?? `Unknown ${(0, import_safe3.num2hex)(eventType)}`;
305
+ return eventTypeLabel[import_Types.DoorLockLoggingEventType[eventType]] ?? `Unknown ${(0, import_shared.num2hex)(eventType)}`;
307
306
  }
308
307
  __name(eventTypeToLabel, "eventTypeToLabel");
309
308
  let DoorLockLoggingCCRecordsSupportedGet = (() => {
@@ -355,7 +354,7 @@ let DoorLockLoggingCCRecordReport = (() => {
355
354
  this.record = options.record;
356
355
  }
357
356
  static from(raw, ctx) {
358
- (0, import_safe.validatePayload)(raw.payload.length >= 11);
357
+ (0, import_core.validatePayload)(raw.payload.length >= 11);
359
358
  const recordNumber = raw.payload[0];
360
359
  const recordStatus = raw.payload[5] >>> 5;
361
360
  let record;
@@ -371,10 +370,10 @@ let DoorLockLoggingCCRecordReport = (() => {
371
370
  const eventType = raw.payload[8];
372
371
  const recordUserID = raw.payload[9];
373
372
  const userCodeLength = raw.payload[10];
374
- (0, import_safe.validatePayload)(userCodeLength <= 10, raw.payload.length >= 11 + userCodeLength);
373
+ (0, import_core.validatePayload)(userCodeLength <= 10, raw.payload.length >= 11 + userCodeLength);
375
374
  const userCodeBuffer = raw.payload.subarray(11, 11 + userCodeLength);
376
375
  const userCodeString = userCodeBuffer.toString("utf8");
377
- const userCode = (0, import_safe3.isPrintableASCII)(userCodeString) ? userCodeString : userCodeBuffer;
376
+ const userCode = (0, import_shared.isPrintableASCII)(userCodeString) ? userCodeString : userCodeBuffer;
378
377
  record = {
379
378
  eventType,
380
379
  label: eventTypeToLabel(eventType),
@@ -447,11 +446,11 @@ let DoorLockLoggingCCRecordGet = (() => {
447
446
  this.recordNumber = options.recordNumber;
448
447
  }
449
448
  static from(_raw, _ctx) {
450
- throw new import_safe.ZWaveError(`${this.name}: deserialization not implemented`, import_safe.ZWaveErrorCodes.Deserialization_NotImplemented);
449
+ throw new import_core.ZWaveError(`${this.name}: deserialization not implemented`, import_core.ZWaveErrorCodes.Deserialization_NotImplemented);
451
450
  }
452
451
  recordNumber;
453
452
  serialize(ctx) {
454
- this.payload = import_safe2.Bytes.from([this.recordNumber]);
453
+ this.payload = import_shared.Bytes.from([this.recordNumber]);
455
454
  return super.serialize(ctx);
456
455
  }
457
456
  toLogEntry(ctx) {
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/cc/DoorLockLoggingCC.ts"],
4
- "sourcesContent": ["import { type CCEncodingContext, type CCParsingContext } from \"@zwave-js/cc\";\nimport {\n\tCommandClasses,\n\ttype GetValueDB,\n\ttype MaybeNotKnown,\n\ttype MessageOrCCLogEntry,\n\tMessagePriority,\n\ttype MessageRecord,\n\ttype WithAddress,\n\tZWaveError,\n\tZWaveErrorCodes,\n\tvalidatePayload,\n} from \"@zwave-js/core/safe\";\nimport { Bytes } from \"@zwave-js/shared/safe\";\nimport { isPrintableASCII, num2hex } from \"@zwave-js/shared/safe\";\nimport { validateArgs } from \"@zwave-js/transformers\";\nimport { CCAPI, PhysicalCCAPI } from \"../lib/API.js\";\nimport {\n\ttype CCRaw,\n\tCommandClass,\n\ttype InterviewContext,\n\ttype RefreshValuesContext,\n} from \"../lib/CommandClass.js\";\nimport {\n\tAPI,\n\tCCCommand,\n\tccValueProperty,\n\tccValues,\n\tcommandClass,\n\texpectedCCResponse,\n\timplementedVersion,\n} from \"../lib/CommandClassDecorators.js\";\nimport { V } from \"../lib/Values.js\";\nimport {\n\tDoorLockLoggingCommand,\n\tDoorLockLoggingEventType,\n\ttype DoorLockLoggingRecord,\n\tDoorLockLoggingRecordStatus,\n} from \"../lib/_Types.js\";\nimport { userCodeToLogString } from \"./UserCodeCC.js\";\n\ninterface DateSegments {\n\tyear: number;\n\tmonth: number;\n\tday: number;\n\thour: number;\n\tminute: number;\n\tsecond: number;\n}\n\nfunction segmentsToDate(segments: DateSegments): Date {\n\treturn new Date(\n\t\tsegments.year,\n\t\tsegments.month - 1, // JS months are 0-based.\n\t\tsegments.day,\n\t\tsegments.hour,\n\t\tsegments.minute,\n\t\tsegments.second,\n\t);\n}\n\nconst eventTypeLabel = {\n\tLockCode: \"Locked via Access Code\",\n\tUnlockCode: \"Unlocked via Access Code\",\n\tLockButton: \"Locked via Lock Button\",\n\tUnlockButton: \"Unlocked via Unlock Button\",\n\tLockCodeOutOfSchedule: \"Out of Schedule Lock Attempt via Access Code\",\n\tUnlockCodeOutOfSchedule: \"Out of Schedule Unlock Attempt via Access Code\",\n\tIllegalCode: \"Illegal Access Code Entered\",\n\tLockManual: \"Manually Locked\",\n\tUnlockManual: \"Manually Unlocked\",\n\tLockAuto: \"Auto Locked\",\n\tUnlockAuto: \"Auto Unlocked\",\n\tLockRemoteCode: \"Locked via Remote Access Code\",\n\tUnlockRemoteCode: \"Unlocked via Remote Access Code\",\n\tLockRemote: \"Locked via Remote\",\n\tUnlockRemote: \"Unlocked via Remote\",\n\tLockRemoteCodeOutOfSchedule:\n\t\t\"Out of Schedule Lock Attempt via Remote Access Code\",\n\tUnlockRemoteCodeOutOfSchedule:\n\t\t\"Out of Schedule Unlock Attempt via Remote Access Code\",\n\tRemoteIllegalCode: \"Illegal Remote Access Code\",\n\tLockManual2: \"Manually Locked (2)\",\n\tUnlockManual2: \"Manually Unlocked (2)\",\n\tLockSecured: \"Lock Secured\",\n\tLockUnsecured: \"Lock Unsecured\",\n\tUserCodeAdded: \"User Code Added\",\n\tUserCodeDeleted: \"User Code Deleted\",\n\tAllUserCodesDeleted: \"All User Codes Deleted\",\n\tAdminCodeChanged: \"Admin Code Changed\",\n\tUserCodeChanged: \"User Code Changed\",\n\tLockReset: \"Lock Reset\",\n\tConfigurationChanged: \"Configuration Changed\",\n\tLowBattery: \"Low Battery\",\n\tNewBattery: \"New Battery Installed\",\n\tUnknown: \"Unknown\",\n} as const;\n\nconst LATEST_RECORD_NUMBER_KEY = 0;\n\nexport const DoorLockLoggingCCValues = V.defineCCValues(\n\tCommandClasses[\"Door Lock Logging\"],\n\t{\n\t\t...V.staticProperty(\"recordsCount\", undefined, { internal: true }),\n\t},\n);\n\n@API(CommandClasses[\"Door Lock Logging\"])\nexport class DoorLockLoggingCCAPI extends PhysicalCCAPI {\n\tpublic supportsCommand(\n\t\tcmd: DoorLockLoggingCommand,\n\t): MaybeNotKnown<boolean> {\n\t\tswitch (cmd) {\n\t\t\tcase DoorLockLoggingCommand.RecordsSupportedGet:\n\t\t\tcase DoorLockLoggingCommand.RecordsSupportedReport:\n\t\t\tcase DoorLockLoggingCommand.RecordGet:\n\t\t\tcase DoorLockLoggingCommand.RecordReport:\n\t\t\t\treturn true;\n\t\t}\n\t\treturn super.supportsCommand(cmd);\n\t}\n\n\tpublic async getRecordsCount(): Promise<MaybeNotKnown<number>> {\n\t\tthis.assertSupportsCommand(\n\t\t\tDoorLockLoggingCommand,\n\t\t\tDoorLockLoggingCommand.RecordsSupportedGet,\n\t\t);\n\n\t\tconst cc = new DoorLockLoggingCCRecordsSupportedGet({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t});\n\t\tconst response = await this.host.sendCommand<\n\t\t\tDoorLockLoggingCCRecordsSupportedReport\n\t\t>(\n\t\t\tcc,\n\t\t\tthis.commandOptions,\n\t\t);\n\t\treturn response?.recordsCount;\n\t}\n\n\t/** Retrieves the specified audit record. Defaults to the latest one. */\n\t@validateArgs()\n\tpublic async getRecord(\n\t\trecordNumber: number = LATEST_RECORD_NUMBER_KEY,\n\t): Promise<MaybeNotKnown<DoorLockLoggingRecord>> {\n\t\tthis.assertSupportsCommand(\n\t\t\tDoorLockLoggingCommand,\n\t\t\tDoorLockLoggingCommand.RecordGet,\n\t\t);\n\n\t\tconst cc = new DoorLockLoggingCCRecordGet({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t\trecordNumber,\n\t\t});\n\t\tconst response = await this.host.sendCommand<\n\t\t\tDoorLockLoggingCCRecordReport\n\t\t>(\n\t\t\tcc,\n\t\t\tthis.commandOptions,\n\t\t);\n\t\treturn response?.record;\n\t}\n}\n\n@commandClass(CommandClasses[\"Door Lock Logging\"])\n@implementedVersion(1)\n@ccValues(DoorLockLoggingCCValues)\nexport class DoorLockLoggingCC extends CommandClass {\n\tdeclare ccCommand: DoorLockLoggingCommand;\n\n\tpublic async interview(\n\t\tctx: InterviewContext,\n\t): Promise<void> {\n\t\tconst node = this.getNode(ctx)!;\n\n\t\tctx.logNode(node.id, {\n\t\t\tendpoint: this.endpointIndex,\n\t\t\tmessage: `Interviewing ${this.ccName}...`,\n\t\t\tdirection: \"none\",\n\t\t});\n\n\t\tawait this.refreshValues(ctx);\n\n\t\t// Remember that the interview is complete\n\t\tthis.setInterviewComplete(ctx, true);\n\t}\n\n\tpublic async refreshValues(\n\t\tctx: RefreshValuesContext,\n\t): Promise<void> {\n\t\tconst node = this.getNode(ctx)!;\n\t\tconst endpoint = this.getEndpoint(ctx)!;\n\t\tconst api = CCAPI.create(\n\t\t\tCommandClasses[\"Door Lock Logging\"],\n\t\t\tctx,\n\t\t\tendpoint,\n\t\t).withOptions({\n\t\t\tpriority: MessagePriority.NodeQuery,\n\t\t});\n\n\t\tctx.logNode(node.id, {\n\t\t\tendpoint: this.endpointIndex,\n\t\t\tmessage: \"querying supported number of records...\",\n\t\t\tdirection: \"outbound\",\n\t\t});\n\t\tconst recordsCount = await api.getRecordsCount();\n\n\t\tif (!recordsCount) {\n\t\t\tctx.logNode(node.id, {\n\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\tmessage:\n\t\t\t\t\t\"Door Lock Logging records count query timed out, skipping interview...\",\n\t\t\t\tlevel: \"warn\",\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\n\t\tconst recordsCountLogMessage = `supports ${recordsCount} record${\n\t\t\trecordsCount === 1 ? \"\" : \"s\"\n\t\t}`;\n\t\tctx.logNode(node.id, {\n\t\t\tendpoint: this.endpointIndex,\n\t\t\tmessage: recordsCountLogMessage,\n\t\t\tdirection: \"inbound\",\n\t\t});\n\t}\n}\n\n// @publicAPI\nexport interface DoorLockLoggingCCRecordsSupportedReportOptions {\n\trecordsCount: number;\n}\n\n@CCCommand(DoorLockLoggingCommand.RecordsSupportedReport)\n@ccValueProperty(\"recordsCount\", DoorLockLoggingCCValues.recordsCount)\nexport class DoorLockLoggingCCRecordsSupportedReport extends DoorLockLoggingCC {\n\tpublic constructor(\n\t\toptions: WithAddress<DoorLockLoggingCCRecordsSupportedReportOptions>,\n\t) {\n\t\tsuper(options);\n\n\t\t// TODO: Check implementation:\n\t\tthis.recordsCount = options.recordsCount;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): DoorLockLoggingCCRecordsSupportedReport {\n\t\tvalidatePayload(raw.payload.length >= 1);\n\t\tconst recordsCount = raw.payload[0];\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\trecordsCount,\n\t\t});\n\t}\n\n\tpublic readonly recordsCount: number;\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage: {\n\t\t\t\t\"supported no. of records\": this.recordsCount,\n\t\t\t},\n\t\t};\n\t}\n}\n\nfunction eventTypeToLabel(eventType: DoorLockLoggingEventType): string {\n\treturn (\n\t\t(eventTypeLabel as any)[DoorLockLoggingEventType[eventType]]\n\t\t\t?? `Unknown ${num2hex(eventType)}`\n\t);\n}\n\n@CCCommand(DoorLockLoggingCommand.RecordsSupportedGet)\n@expectedCCResponse(DoorLockLoggingCCRecordsSupportedReport)\nexport class DoorLockLoggingCCRecordsSupportedGet extends DoorLockLoggingCC {}\n\n// @publicAPI\nexport interface DoorLockLoggingCCRecordReportOptions {\n\trecordNumber: number;\n\trecord?: DoorLockLoggingRecord;\n}\n\n@CCCommand(DoorLockLoggingCommand.RecordReport)\nexport class DoorLockLoggingCCRecordReport extends DoorLockLoggingCC {\n\tpublic constructor(\n\t\toptions: WithAddress<DoorLockLoggingCCRecordReportOptions>,\n\t) {\n\t\tsuper(options);\n\n\t\t// TODO: Check implementation:\n\t\tthis.recordNumber = options.recordNumber;\n\t\tthis.record = options.record;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): DoorLockLoggingCCRecordReport {\n\t\tvalidatePayload(raw.payload.length >= 11);\n\t\tconst recordNumber = raw.payload[0];\n\t\tconst recordStatus = raw.payload[5] >>> 5;\n\t\tlet record: DoorLockLoggingRecord | undefined;\n\t\tif (recordStatus !== DoorLockLoggingRecordStatus.Empty) {\n\t\t\tconst dateSegments = {\n\t\t\t\tyear: raw.payload.readUInt16BE(1),\n\t\t\t\tmonth: raw.payload[3],\n\t\t\t\tday: raw.payload[4],\n\t\t\t\thour: raw.payload[5] & 0b11111,\n\t\t\t\tminute: raw.payload[6],\n\t\t\t\tsecond: raw.payload[7],\n\t\t\t};\n\n\t\t\tconst eventType = raw.payload[8];\n\t\t\tconst recordUserID = raw.payload[9];\n\t\t\tconst userCodeLength = raw.payload[10];\n\t\t\tvalidatePayload(\n\t\t\t\tuserCodeLength <= 10,\n\t\t\t\traw.payload.length >= 11 + userCodeLength,\n\t\t\t);\n\n\t\t\tconst userCodeBuffer = raw.payload.subarray(\n\t\t\t\t11,\n\t\t\t\t11 + userCodeLength,\n\t\t\t);\n\t\t\t// See User Code CC for a detailed description. We try to parse the code as ASCII if possible\n\t\t\t// and fall back to a buffer otherwise.\n\t\t\tconst userCodeString = userCodeBuffer.toString(\"utf8\");\n\t\t\tconst userCode = isPrintableASCII(userCodeString)\n\t\t\t\t? userCodeString\n\t\t\t\t: userCodeBuffer;\n\n\t\t\trecord = {\n\t\t\t\teventType: eventType,\n\t\t\t\tlabel: eventTypeToLabel(eventType),\n\t\t\t\ttimestamp: segmentsToDate(dateSegments).toISOString(),\n\t\t\t\tuserId: recordUserID,\n\t\t\t\tuserCode,\n\t\t\t};\n\t\t}\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\trecordNumber,\n\t\t\trecord,\n\t\t});\n\t}\n\n\tpublic readonly recordNumber: number;\n\tpublic readonly record?: DoorLockLoggingRecord;\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\tlet message: MessageRecord;\n\n\t\tif (!this.record) {\n\t\t\tmessage = {\n\t\t\t\t\"record #\": `${this.recordNumber} (empty)`,\n\t\t\t};\n\t\t} else {\n\t\t\tmessage = {\n\t\t\t\t\"record #\": `${this.recordNumber}`,\n\t\t\t\t\"event type\": this.record.label,\n\t\t\t\ttimestamp: this.record.timestamp,\n\t\t\t};\n\t\t\tif (this.record.userId) {\n\t\t\t\tmessage[\"user ID\"] = this.record.userId;\n\t\t\t}\n\t\t\tif (this.record.userCode) {\n\t\t\t\tmessage[\"user code\"] = userCodeToLogString(\n\t\t\t\t\tthis.record.userCode,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage,\n\t\t};\n\t}\n}\n\n// @publicAPI\nexport interface DoorLockLoggingCCRecordGetOptions {\n\trecordNumber: number;\n}\n\nfunction testResponseForDoorLockLoggingRecordGet(\n\tsent: DoorLockLoggingCCRecordGet,\n\treceived: DoorLockLoggingCCRecordReport,\n) {\n\treturn (\n\t\tsent.recordNumber === LATEST_RECORD_NUMBER_KEY\n\t\t|| sent.recordNumber === received.recordNumber\n\t);\n}\n\n@CCCommand(DoorLockLoggingCommand.RecordGet)\n@expectedCCResponse(\n\tDoorLockLoggingCCRecordReport,\n\ttestResponseForDoorLockLoggingRecordGet,\n)\nexport class DoorLockLoggingCCRecordGet extends DoorLockLoggingCC {\n\tpublic constructor(\n\t\toptions: WithAddress<DoorLockLoggingCCRecordGetOptions>,\n\t) {\n\t\tsuper(options);\n\t\tthis.recordNumber = options.recordNumber;\n\t}\n\n\tpublic static from(\n\t\t_raw: CCRaw,\n\t\t_ctx: CCParsingContext,\n\t): DoorLockLoggingCCRecordGet {\n\t\tthrow new ZWaveError(\n\t\t\t`${this.name}: deserialization not implemented`,\n\t\t\tZWaveErrorCodes.Deserialization_NotImplemented,\n\t\t);\n\n\t\t// return new DoorLockLoggingCCRecordGet({\n\t\t// \tnodeId: ctx.sourceNodeId,\n\t\t// });\n\t}\n\n\tpublic recordNumber: number;\n\n\tpublic serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\tthis.payload = Bytes.from([this.recordNumber]);\n\t\treturn super.serialize(ctx);\n\t}\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage: { \"record number\": this.recordNumber },\n\t\t};\n\t}\n}\n"],
5
- "mappings": "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",
6
- "names": ["import_safe"]
4
+ "sourcesContent": ["import type { CCEncodingContext, CCParsingContext } from \"@zwave-js/cc\";\nimport {\n\tCommandClasses,\n\ttype GetValueDB,\n\ttype MaybeNotKnown,\n\ttype MessageOrCCLogEntry,\n\tMessagePriority,\n\ttype MessageRecord,\n\ttype WithAddress,\n\tZWaveError,\n\tZWaveErrorCodes,\n\tvalidatePayload,\n} from \"@zwave-js/core\";\nimport { Bytes, isPrintableASCII, num2hex } from \"@zwave-js/shared\";\nimport { validateArgs } from \"@zwave-js/transformers\";\nimport { CCAPI, PhysicalCCAPI } from \"../lib/API.js\";\nimport {\n\ttype CCRaw,\n\tCommandClass,\n\ttype InterviewContext,\n\ttype RefreshValuesContext,\n} from \"../lib/CommandClass.js\";\nimport {\n\tAPI,\n\tCCCommand,\n\tccValueProperty,\n\tccValues,\n\tcommandClass,\n\texpectedCCResponse,\n\timplementedVersion,\n} from \"../lib/CommandClassDecorators.js\";\nimport { V } from \"../lib/Values.js\";\nimport {\n\tDoorLockLoggingCommand,\n\tDoorLockLoggingEventType,\n\ttype DoorLockLoggingRecord,\n\tDoorLockLoggingRecordStatus,\n} from \"../lib/_Types.js\";\nimport { userCodeToLogString } from \"./UserCodeCC.js\";\n\ninterface DateSegments {\n\tyear: number;\n\tmonth: number;\n\tday: number;\n\thour: number;\n\tminute: number;\n\tsecond: number;\n}\n\nfunction segmentsToDate(segments: DateSegments): Date {\n\treturn new Date(\n\t\tsegments.year,\n\t\tsegments.month - 1, // JS months are 0-based.\n\t\tsegments.day,\n\t\tsegments.hour,\n\t\tsegments.minute,\n\t\tsegments.second,\n\t);\n}\n\nconst eventTypeLabel = {\n\tLockCode: \"Locked via Access Code\",\n\tUnlockCode: \"Unlocked via Access Code\",\n\tLockButton: \"Locked via Lock Button\",\n\tUnlockButton: \"Unlocked via Unlock Button\",\n\tLockCodeOutOfSchedule: \"Out of Schedule Lock Attempt via Access Code\",\n\tUnlockCodeOutOfSchedule: \"Out of Schedule Unlock Attempt via Access Code\",\n\tIllegalCode: \"Illegal Access Code Entered\",\n\tLockManual: \"Manually Locked\",\n\tUnlockManual: \"Manually Unlocked\",\n\tLockAuto: \"Auto Locked\",\n\tUnlockAuto: \"Auto Unlocked\",\n\tLockRemoteCode: \"Locked via Remote Access Code\",\n\tUnlockRemoteCode: \"Unlocked via Remote Access Code\",\n\tLockRemote: \"Locked via Remote\",\n\tUnlockRemote: \"Unlocked via Remote\",\n\tLockRemoteCodeOutOfSchedule:\n\t\t\"Out of Schedule Lock Attempt via Remote Access Code\",\n\tUnlockRemoteCodeOutOfSchedule:\n\t\t\"Out of Schedule Unlock Attempt via Remote Access Code\",\n\tRemoteIllegalCode: \"Illegal Remote Access Code\",\n\tLockManual2: \"Manually Locked (2)\",\n\tUnlockManual2: \"Manually Unlocked (2)\",\n\tLockSecured: \"Lock Secured\",\n\tLockUnsecured: \"Lock Unsecured\",\n\tUserCodeAdded: \"User Code Added\",\n\tUserCodeDeleted: \"User Code Deleted\",\n\tAllUserCodesDeleted: \"All User Codes Deleted\",\n\tAdminCodeChanged: \"Admin Code Changed\",\n\tUserCodeChanged: \"User Code Changed\",\n\tLockReset: \"Lock Reset\",\n\tConfigurationChanged: \"Configuration Changed\",\n\tLowBattery: \"Low Battery\",\n\tNewBattery: \"New Battery Installed\",\n\tUnknown: \"Unknown\",\n} as const;\n\nconst LATEST_RECORD_NUMBER_KEY = 0;\n\nexport const DoorLockLoggingCCValues = V.defineCCValues(\n\tCommandClasses[\"Door Lock Logging\"],\n\t{\n\t\t...V.staticProperty(\"recordsCount\", undefined, { internal: true }),\n\t},\n);\n\n@API(CommandClasses[\"Door Lock Logging\"])\nexport class DoorLockLoggingCCAPI extends PhysicalCCAPI {\n\tpublic supportsCommand(\n\t\tcmd: DoorLockLoggingCommand,\n\t): MaybeNotKnown<boolean> {\n\t\tswitch (cmd) {\n\t\t\tcase DoorLockLoggingCommand.RecordsSupportedGet:\n\t\t\tcase DoorLockLoggingCommand.RecordsSupportedReport:\n\t\t\tcase DoorLockLoggingCommand.RecordGet:\n\t\t\tcase DoorLockLoggingCommand.RecordReport:\n\t\t\t\treturn true;\n\t\t}\n\t\treturn super.supportsCommand(cmd);\n\t}\n\n\tpublic async getRecordsCount(): Promise<MaybeNotKnown<number>> {\n\t\tthis.assertSupportsCommand(\n\t\t\tDoorLockLoggingCommand,\n\t\t\tDoorLockLoggingCommand.RecordsSupportedGet,\n\t\t);\n\n\t\tconst cc = new DoorLockLoggingCCRecordsSupportedGet({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t});\n\t\tconst response = await this.host.sendCommand<\n\t\t\tDoorLockLoggingCCRecordsSupportedReport\n\t\t>(\n\t\t\tcc,\n\t\t\tthis.commandOptions,\n\t\t);\n\t\treturn response?.recordsCount;\n\t}\n\n\t/** Retrieves the specified audit record. Defaults to the latest one. */\n\t@validateArgs()\n\tpublic async getRecord(\n\t\trecordNumber: number = LATEST_RECORD_NUMBER_KEY,\n\t): Promise<MaybeNotKnown<DoorLockLoggingRecord>> {\n\t\tthis.assertSupportsCommand(\n\t\t\tDoorLockLoggingCommand,\n\t\t\tDoorLockLoggingCommand.RecordGet,\n\t\t);\n\n\t\tconst cc = new DoorLockLoggingCCRecordGet({\n\t\t\tnodeId: this.endpoint.nodeId,\n\t\t\tendpointIndex: this.endpoint.index,\n\t\t\trecordNumber,\n\t\t});\n\t\tconst response = await this.host.sendCommand<\n\t\t\tDoorLockLoggingCCRecordReport\n\t\t>(\n\t\t\tcc,\n\t\t\tthis.commandOptions,\n\t\t);\n\t\treturn response?.record;\n\t}\n}\n\n@commandClass(CommandClasses[\"Door Lock Logging\"])\n@implementedVersion(1)\n@ccValues(DoorLockLoggingCCValues)\nexport class DoorLockLoggingCC extends CommandClass {\n\tdeclare ccCommand: DoorLockLoggingCommand;\n\n\tpublic async interview(\n\t\tctx: InterviewContext,\n\t): Promise<void> {\n\t\tconst node = this.getNode(ctx)!;\n\n\t\tctx.logNode(node.id, {\n\t\t\tendpoint: this.endpointIndex,\n\t\t\tmessage: `Interviewing ${this.ccName}...`,\n\t\t\tdirection: \"none\",\n\t\t});\n\n\t\tawait this.refreshValues(ctx);\n\n\t\t// Remember that the interview is complete\n\t\tthis.setInterviewComplete(ctx, true);\n\t}\n\n\tpublic async refreshValues(\n\t\tctx: RefreshValuesContext,\n\t): Promise<void> {\n\t\tconst node = this.getNode(ctx)!;\n\t\tconst endpoint = this.getEndpoint(ctx)!;\n\t\tconst api = CCAPI.create(\n\t\t\tCommandClasses[\"Door Lock Logging\"],\n\t\t\tctx,\n\t\t\tendpoint,\n\t\t).withOptions({\n\t\t\tpriority: MessagePriority.NodeQuery,\n\t\t});\n\n\t\tctx.logNode(node.id, {\n\t\t\tendpoint: this.endpointIndex,\n\t\t\tmessage: \"querying supported number of records...\",\n\t\t\tdirection: \"outbound\",\n\t\t});\n\t\tconst recordsCount = await api.getRecordsCount();\n\n\t\tif (!recordsCount) {\n\t\t\tctx.logNode(node.id, {\n\t\t\t\tendpoint: this.endpointIndex,\n\t\t\t\tmessage:\n\t\t\t\t\t\"Door Lock Logging records count query timed out, skipping interview...\",\n\t\t\t\tlevel: \"warn\",\n\t\t\t});\n\t\t\treturn;\n\t\t}\n\n\t\tconst recordsCountLogMessage = `supports ${recordsCount} record${\n\t\t\trecordsCount === 1 ? \"\" : \"s\"\n\t\t}`;\n\t\tctx.logNode(node.id, {\n\t\t\tendpoint: this.endpointIndex,\n\t\t\tmessage: recordsCountLogMessage,\n\t\t\tdirection: \"inbound\",\n\t\t});\n\t}\n}\n\n// @publicAPI\nexport interface DoorLockLoggingCCRecordsSupportedReportOptions {\n\trecordsCount: number;\n}\n\n@CCCommand(DoorLockLoggingCommand.RecordsSupportedReport)\n@ccValueProperty(\"recordsCount\", DoorLockLoggingCCValues.recordsCount)\nexport class DoorLockLoggingCCRecordsSupportedReport extends DoorLockLoggingCC {\n\tpublic constructor(\n\t\toptions: WithAddress<DoorLockLoggingCCRecordsSupportedReportOptions>,\n\t) {\n\t\tsuper(options);\n\n\t\t// TODO: Check implementation:\n\t\tthis.recordsCount = options.recordsCount;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): DoorLockLoggingCCRecordsSupportedReport {\n\t\tvalidatePayload(raw.payload.length >= 1);\n\t\tconst recordsCount = raw.payload[0];\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\trecordsCount,\n\t\t});\n\t}\n\n\tpublic readonly recordsCount: number;\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage: {\n\t\t\t\t\"supported no. of records\": this.recordsCount,\n\t\t\t},\n\t\t};\n\t}\n}\n\nfunction eventTypeToLabel(eventType: DoorLockLoggingEventType): string {\n\treturn (\n\t\t(eventTypeLabel as any)[DoorLockLoggingEventType[eventType]]\n\t\t\t?? `Unknown ${num2hex(eventType)}`\n\t);\n}\n\n@CCCommand(DoorLockLoggingCommand.RecordsSupportedGet)\n@expectedCCResponse(DoorLockLoggingCCRecordsSupportedReport)\nexport class DoorLockLoggingCCRecordsSupportedGet extends DoorLockLoggingCC {}\n\n// @publicAPI\nexport interface DoorLockLoggingCCRecordReportOptions {\n\trecordNumber: number;\n\trecord?: DoorLockLoggingRecord;\n}\n\n@CCCommand(DoorLockLoggingCommand.RecordReport)\nexport class DoorLockLoggingCCRecordReport extends DoorLockLoggingCC {\n\tpublic constructor(\n\t\toptions: WithAddress<DoorLockLoggingCCRecordReportOptions>,\n\t) {\n\t\tsuper(options);\n\n\t\t// TODO: Check implementation:\n\t\tthis.recordNumber = options.recordNumber;\n\t\tthis.record = options.record;\n\t}\n\n\tpublic static from(\n\t\traw: CCRaw,\n\t\tctx: CCParsingContext,\n\t): DoorLockLoggingCCRecordReport {\n\t\tvalidatePayload(raw.payload.length >= 11);\n\t\tconst recordNumber = raw.payload[0];\n\t\tconst recordStatus = raw.payload[5] >>> 5;\n\t\tlet record: DoorLockLoggingRecord | undefined;\n\t\tif (recordStatus !== DoorLockLoggingRecordStatus.Empty) {\n\t\t\tconst dateSegments = {\n\t\t\t\tyear: raw.payload.readUInt16BE(1),\n\t\t\t\tmonth: raw.payload[3],\n\t\t\t\tday: raw.payload[4],\n\t\t\t\thour: raw.payload[5] & 0b11111,\n\t\t\t\tminute: raw.payload[6],\n\t\t\t\tsecond: raw.payload[7],\n\t\t\t};\n\n\t\t\tconst eventType = raw.payload[8];\n\t\t\tconst recordUserID = raw.payload[9];\n\t\t\tconst userCodeLength = raw.payload[10];\n\t\t\tvalidatePayload(\n\t\t\t\tuserCodeLength <= 10,\n\t\t\t\traw.payload.length >= 11 + userCodeLength,\n\t\t\t);\n\n\t\t\tconst userCodeBuffer = raw.payload.subarray(\n\t\t\t\t11,\n\t\t\t\t11 + userCodeLength,\n\t\t\t);\n\t\t\t// See User Code CC for a detailed description. We try to parse the code as ASCII if possible\n\t\t\t// and fall back to a buffer otherwise.\n\t\t\tconst userCodeString = userCodeBuffer.toString(\"utf8\");\n\t\t\tconst userCode = isPrintableASCII(userCodeString)\n\t\t\t\t? userCodeString\n\t\t\t\t: userCodeBuffer;\n\n\t\t\trecord = {\n\t\t\t\teventType: eventType,\n\t\t\t\tlabel: eventTypeToLabel(eventType),\n\t\t\t\ttimestamp: segmentsToDate(dateSegments).toISOString(),\n\t\t\t\tuserId: recordUserID,\n\t\t\t\tuserCode,\n\t\t\t};\n\t\t}\n\n\t\treturn new this({\n\t\t\tnodeId: ctx.sourceNodeId,\n\t\t\trecordNumber,\n\t\t\trecord,\n\t\t});\n\t}\n\n\tpublic readonly recordNumber: number;\n\tpublic readonly record?: DoorLockLoggingRecord;\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\tlet message: MessageRecord;\n\n\t\tif (!this.record) {\n\t\t\tmessage = {\n\t\t\t\t\"record #\": `${this.recordNumber} (empty)`,\n\t\t\t};\n\t\t} else {\n\t\t\tmessage = {\n\t\t\t\t\"record #\": `${this.recordNumber}`,\n\t\t\t\t\"event type\": this.record.label,\n\t\t\t\ttimestamp: this.record.timestamp,\n\t\t\t};\n\t\t\tif (this.record.userId) {\n\t\t\t\tmessage[\"user ID\"] = this.record.userId;\n\t\t\t}\n\t\t\tif (this.record.userCode) {\n\t\t\t\tmessage[\"user code\"] = userCodeToLogString(\n\t\t\t\t\tthis.record.userCode,\n\t\t\t\t);\n\t\t\t}\n\t\t}\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage,\n\t\t};\n\t}\n}\n\n// @publicAPI\nexport interface DoorLockLoggingCCRecordGetOptions {\n\trecordNumber: number;\n}\n\nfunction testResponseForDoorLockLoggingRecordGet(\n\tsent: DoorLockLoggingCCRecordGet,\n\treceived: DoorLockLoggingCCRecordReport,\n) {\n\treturn (\n\t\tsent.recordNumber === LATEST_RECORD_NUMBER_KEY\n\t\t|| sent.recordNumber === received.recordNumber\n\t);\n}\n\n@CCCommand(DoorLockLoggingCommand.RecordGet)\n@expectedCCResponse(\n\tDoorLockLoggingCCRecordReport,\n\ttestResponseForDoorLockLoggingRecordGet,\n)\nexport class DoorLockLoggingCCRecordGet extends DoorLockLoggingCC {\n\tpublic constructor(\n\t\toptions: WithAddress<DoorLockLoggingCCRecordGetOptions>,\n\t) {\n\t\tsuper(options);\n\t\tthis.recordNumber = options.recordNumber;\n\t}\n\n\tpublic static from(\n\t\t_raw: CCRaw,\n\t\t_ctx: CCParsingContext,\n\t): DoorLockLoggingCCRecordGet {\n\t\tthrow new ZWaveError(\n\t\t\t`${this.name}: deserialization not implemented`,\n\t\t\tZWaveErrorCodes.Deserialization_NotImplemented,\n\t\t);\n\n\t\t// return new DoorLockLoggingCCRecordGet({\n\t\t// \tnodeId: ctx.sourceNodeId,\n\t\t// });\n\t}\n\n\tpublic recordNumber: number;\n\n\tpublic serialize(ctx: CCEncodingContext): Promise<Bytes> {\n\t\tthis.payload = Bytes.from([this.recordNumber]);\n\t\treturn super.serialize(ctx);\n\t}\n\n\tpublic toLogEntry(ctx?: GetValueDB): MessageOrCCLogEntry {\n\t\treturn {\n\t\t\t...super.toLogEntry(ctx),\n\t\t\tmessage: { \"record number\": this.recordNumber },\n\t\t};\n\t}\n}\n"],
5
+ "mappings": "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",
6
+ "names": []
7
7
  }
@@ -1,6 +1,5 @@
1
- import { type CCEncodingContext, type CCParsingContext } from "@zwave-js/cc";
2
- import { CommandClasses, type GetValueDB, type MessageOrCCLogEntry, type WithAddress } from "@zwave-js/core";
3
- import { type MaybeNotKnown } from "@zwave-js/core/safe";
1
+ import type { CCEncodingContext, CCParsingContext } from "@zwave-js/cc";
2
+ import { CommandClasses, type GetValueDB, type MaybeNotKnown, type MessageOrCCLogEntry, type WithAddress } from "@zwave-js/core";
4
3
  import { Bytes } from "@zwave-js/shared";
5
4
  import { CCAPI, POLL_VALUE, type PollValueImplementation } from "../lib/API.js";
6
5
  import { type CCRaw, CommandClass, type InterviewContext, type PersistValuesContext, type RefreshValuesContext } from "../lib/CommandClass.js";