@zwave-js/cc 14.0.0-beta.4 → 14.0.0-beta.5

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 (331) hide show
  1. package/build/cjs/cc/AlarmSensorCC.js +381 -266
  2. package/build/cjs/cc/AlarmSensorCC.js.map +3 -3
  3. package/build/cjs/cc/AssociationCC.js +669 -503
  4. package/build/cjs/cc/AssociationCC.js.map +3 -3
  5. package/build/cjs/cc/AssociationGroupInfoCC.js +633 -492
  6. package/build/cjs/cc/AssociationGroupInfoCC.js.map +3 -3
  7. package/build/cjs/cc/BarrierOperatorCC.js +595 -429
  8. package/build/cjs/cc/BarrierOperatorCC.js.map +3 -3
  9. package/build/cjs/cc/BasicCC.js +354 -260
  10. package/build/cjs/cc/BasicCC.js.map +3 -3
  11. package/build/cjs/cc/BatteryCC.js +427 -345
  12. package/build/cjs/cc/BatteryCC.js.map +3 -3
  13. package/build/cjs/cc/BinarySensorCC.js +391 -276
  14. package/build/cjs/cc/BinarySensorCC.js.map +3 -3
  15. package/build/cjs/cc/BinarySwitchCC.js +347 -253
  16. package/build/cjs/cc/BinarySwitchCC.js.map +3 -3
  17. package/build/cjs/cc/CRC16CC.js +160 -85
  18. package/build/cjs/cc/CRC16CC.js.map +3 -3
  19. package/build/cjs/cc/CentralSceneCC.js +459 -324
  20. package/build/cjs/cc/CentralSceneCC.js.map +3 -3
  21. package/build/cjs/cc/ClimateControlScheduleCC.js +459 -293
  22. package/build/cjs/cc/ClimateControlScheduleCC.js.map +3 -3
  23. package/build/cjs/cc/ClockCC.js +254 -150
  24. package/build/cjs/cc/ClockCC.js.map +3 -3
  25. package/build/cjs/cc/ColorSwitchCC.js +758 -610
  26. package/build/cjs/cc/ColorSwitchCC.js.map +3 -3
  27. package/build/cjs/cc/ConfigurationCC.js +1700 -1453
  28. package/build/cjs/cc/ConfigurationCC.js.map +3 -3
  29. package/build/cjs/cc/DeviceResetLocallyCC.js +125 -49
  30. package/build/cjs/cc/DeviceResetLocallyCC.js.map +3 -3
  31. package/build/cjs/cc/DoorLockCC.js +904 -777
  32. package/build/cjs/cc/DoorLockCC.js.map +3 -3
  33. package/build/cjs/cc/DoorLockLoggingCC.js +321 -206
  34. package/build/cjs/cc/DoorLockLoggingCC.js.map +3 -3
  35. package/build/cjs/cc/EnergyProductionCC.js +249 -160
  36. package/build/cjs/cc/EnergyProductionCC.js.map +3 -3
  37. package/build/cjs/cc/EntryControlCC.js +619 -458
  38. package/build/cjs/cc/EntryControlCC.js.map +3 -3
  39. package/build/cjs/cc/FirmwareUpdateMetaDataCC.js +898 -698
  40. package/build/cjs/cc/FirmwareUpdateMetaDataCC.js.map +3 -3
  41. package/build/cjs/cc/HailCC.js +57 -11
  42. package/build/cjs/cc/HailCC.js.map +2 -2
  43. package/build/cjs/cc/HumidityControlModeCC.js +359 -233
  44. package/build/cjs/cc/HumidityControlModeCC.js.map +3 -3
  45. package/build/cjs/cc/HumidityControlOperatingStateCC.js +189 -103
  46. package/build/cjs/cc/HumidityControlOperatingStateCC.js.map +3 -3
  47. package/build/cjs/cc/HumidityControlSetpointCC.js +682 -495
  48. package/build/cjs/cc/HumidityControlSetpointCC.js.map +3 -3
  49. package/build/cjs/cc/InclusionControllerCC.js +205 -114
  50. package/build/cjs/cc/InclusionControllerCC.js.map +3 -3
  51. package/build/cjs/cc/IndicatorCC.js +897 -736
  52. package/build/cjs/cc/IndicatorCC.js.map +3 -3
  53. package/build/cjs/cc/IrrigationCC.js +1651 -1405
  54. package/build/cjs/cc/IrrigationCC.js.map +3 -3
  55. package/build/cjs/cc/LanguageCC.js +268 -171
  56. package/build/cjs/cc/LanguageCC.js.map +3 -3
  57. package/build/cjs/cc/LockCC.js +254 -154
  58. package/build/cjs/cc/LockCC.js.map +3 -3
  59. package/build/cjs/cc/ManufacturerProprietaryCC.js +189 -129
  60. package/build/cjs/cc/ManufacturerProprietaryCC.js.map +2 -2
  61. package/build/cjs/cc/ManufacturerSpecificCC.js +319 -213
  62. package/build/cjs/cc/ManufacturerSpecificCC.js.map +3 -3
  63. package/build/cjs/cc/MeterCC.js +827 -707
  64. package/build/cjs/cc/MeterCC.js.map +3 -3
  65. package/build/cjs/cc/MultiChannelAssociationCC.js +612 -478
  66. package/build/cjs/cc/MultiChannelAssociationCC.js.map +3 -3
  67. package/build/cjs/cc/MultiChannelCC.js +1037 -819
  68. package/build/cjs/cc/MultiChannelCC.js.map +3 -3
  69. package/build/cjs/cc/MultiCommandCC.js +172 -97
  70. package/build/cjs/cc/MultiCommandCC.js.map +3 -3
  71. package/build/cjs/cc/MultilevelSensorCC.js +589 -449
  72. package/build/cjs/cc/MultilevelSensorCC.js.map +3 -3
  73. package/build/cjs/cc/MultilevelSwitchCC.js +587 -439
  74. package/build/cjs/cc/MultilevelSwitchCC.js.map +3 -3
  75. package/build/cjs/cc/NoOperationCC.js +89 -27
  76. package/build/cjs/cc/NoOperationCC.js.map +2 -2
  77. package/build/cjs/cc/NodeNamingCC.js +417 -277
  78. package/build/cjs/cc/NodeNamingCC.js.map +3 -3
  79. package/build/cjs/cc/NotificationCC.js +972 -818
  80. package/build/cjs/cc/NotificationCC.js.map +3 -3
  81. package/build/cjs/cc/PowerlevelCC.js +450 -303
  82. package/build/cjs/cc/PowerlevelCC.js.map +3 -3
  83. package/build/cjs/cc/ProtectionCC.js +686 -494
  84. package/build/cjs/cc/ProtectionCC.js.map +3 -3
  85. package/build/cjs/cc/SceneActivationCC.js +165 -97
  86. package/build/cjs/cc/SceneActivationCC.js.map +3 -3
  87. package/build/cjs/cc/SceneActuatorConfigurationCC.js +346 -243
  88. package/build/cjs/cc/SceneActuatorConfigurationCC.js.map +3 -3
  89. package/build/cjs/cc/SceneControllerConfigurationCC.js +401 -298
  90. package/build/cjs/cc/SceneControllerConfigurationCC.js.map +3 -3
  91. package/build/cjs/cc/ScheduleEntryLockCC.js +1552 -1272
  92. package/build/cjs/cc/ScheduleEntryLockCC.js.map +3 -3
  93. package/build/cjs/cc/Security2CC.js +1483 -1219
  94. package/build/cjs/cc/Security2CC.js.map +3 -3
  95. package/build/cjs/cc/SecurityCC.js +839 -619
  96. package/build/cjs/cc/SecurityCC.js.map +3 -3
  97. package/build/cjs/cc/SoundSwitchCC.js +707 -515
  98. package/build/cjs/cc/SoundSwitchCC.js.map +3 -3
  99. package/build/cjs/cc/SupervisionCC.js +327 -237
  100. package/build/cjs/cc/SupervisionCC.js.map +3 -3
  101. package/build/cjs/cc/ThermostatFanModeCC.js +386 -263
  102. package/build/cjs/cc/ThermostatFanModeCC.js.map +3 -3
  103. package/build/cjs/cc/ThermostatFanStateCC.js +192 -106
  104. package/build/cjs/cc/ThermostatFanStateCC.js.map +3 -3
  105. package/build/cjs/cc/ThermostatModeCC.js +425 -302
  106. package/build/cjs/cc/ThermostatModeCC.js.map +3 -3
  107. package/build/cjs/cc/ThermostatOperatingStateCC.js +188 -102
  108. package/build/cjs/cc/ThermostatOperatingStateCC.js.map +3 -3
  109. package/build/cjs/cc/ThermostatSetbackCC.js +277 -173
  110. package/build/cjs/cc/ThermostatSetbackCC.js.map +3 -3
  111. package/build/cjs/cc/ThermostatSetpointCC.js +645 -491
  112. package/build/cjs/cc/ThermostatSetpointCC.js.map +3 -3
  113. package/build/cjs/cc/TimeCC.js +515 -353
  114. package/build/cjs/cc/TimeCC.js.map +3 -3
  115. package/build/cjs/cc/TimeParametersCC.js +302 -202
  116. package/build/cjs/cc/TimeParametersCC.js.map +3 -3
  117. package/build/cjs/cc/TransportServiceCC.js +433 -315
  118. package/build/cjs/cc/TransportServiceCC.js.map +3 -3
  119. package/build/cjs/cc/UserCodeCC.js +1385 -1102
  120. package/build/cjs/cc/UserCodeCC.js.map +3 -3
  121. package/build/cjs/cc/VersionCC.js +696 -562
  122. package/build/cjs/cc/VersionCC.js.map +3 -3
  123. package/build/cjs/cc/WakeUpCC.js +499 -346
  124. package/build/cjs/cc/WakeUpCC.js.map +3 -3
  125. package/build/cjs/cc/WindowCoveringCC.js +626 -478
  126. package/build/cjs/cc/WindowCoveringCC.js.map +3 -3
  127. package/build/cjs/cc/ZWaveLongRangeCC.js +57 -10
  128. package/build/cjs/cc/ZWaveLongRangeCC.js.map +2 -2
  129. package/build/cjs/cc/ZWavePlusCC.js +233 -159
  130. package/build/cjs/cc/ZWavePlusCC.js.map +3 -3
  131. package/build/cjs/cc/ZWaveProtocolCC.js +1515 -948
  132. package/build/cjs/cc/ZWaveProtocolCC.js.map +3 -3
  133. package/build/cjs/cc/manufacturerProprietary/Decorators.d.ts +4 -4
  134. package/build/cjs/cc/manufacturerProprietary/Decorators.js.map +1 -1
  135. package/build/cjs/cc/manufacturerProprietary/FibaroCC.js +395 -274
  136. package/build/cjs/cc/manufacturerProprietary/FibaroCC.js.map +3 -3
  137. package/build/cjs/lib/CommandClassDecorators.d.ts +11 -15
  138. package/build/cjs/lib/CommandClassDecorators.js +19 -20
  139. package/build/cjs/lib/CommandClassDecorators.js.map +2 -2
  140. package/build/cjs/lib/Security2/Extension.d.ts +1 -1
  141. package/build/cjs/lib/Security2/Extension.js +217 -126
  142. package/build/cjs/lib/Security2/Extension.js.map +3 -3
  143. package/build/esm/cc/AlarmSensorCC.d.ts.map +1 -1
  144. package/build/esm/cc/AlarmSensorCC.js +389 -291
  145. package/build/esm/cc/AlarmSensorCC.js.map +1 -1
  146. package/build/esm/cc/AssociationCC.d.ts.map +1 -1
  147. package/build/esm/cc/AssociationCC.js +678 -537
  148. package/build/esm/cc/AssociationCC.js.map +1 -1
  149. package/build/esm/cc/AssociationGroupInfoCC.d.ts.map +1 -1
  150. package/build/esm/cc/AssociationGroupInfoCC.js +659 -539
  151. package/build/esm/cc/AssociationGroupInfoCC.js.map +1 -1
  152. package/build/esm/cc/BarrierOperatorCC.d.ts.map +1 -1
  153. package/build/esm/cc/BarrierOperatorCC.js +634 -493
  154. package/build/esm/cc/BarrierOperatorCC.js.map +1 -1
  155. package/build/esm/cc/BasicCC.d.ts.map +1 -1
  156. package/build/esm/cc/BasicCC.js +380 -302
  157. package/build/esm/cc/BasicCC.js.map +1 -1
  158. package/build/esm/cc/BatteryCC.d.ts.map +1 -1
  159. package/build/esm/cc/BatteryCC.js +449 -384
  160. package/build/esm/cc/BatteryCC.js.map +1 -1
  161. package/build/esm/cc/BinarySensorCC.d.ts.map +1 -1
  162. package/build/esm/cc/BinarySensorCC.js +395 -297
  163. package/build/esm/cc/BinarySensorCC.js.map +1 -1
  164. package/build/esm/cc/BinarySwitchCC.d.ts.map +1 -1
  165. package/build/esm/cc/BinarySwitchCC.js +353 -274
  166. package/build/esm/cc/BinarySwitchCC.js.map +1 -1
  167. package/build/esm/cc/CRC16CC.js +162 -98
  168. package/build/esm/cc/CRC16CC.js.map +1 -1
  169. package/build/esm/cc/CentralSceneCC.d.ts.map +1 -1
  170. package/build/esm/cc/CentralSceneCC.js +465 -351
  171. package/build/esm/cc/CentralSceneCC.js.map +1 -1
  172. package/build/esm/cc/ClimateControlScheduleCC.d.ts.map +1 -1
  173. package/build/esm/cc/ClimateControlScheduleCC.js +454 -313
  174. package/build/esm/cc/ClimateControlScheduleCC.js.map +1 -1
  175. package/build/esm/cc/ClockCC.js +248 -159
  176. package/build/esm/cc/ClockCC.js.map +1 -1
  177. package/build/esm/cc/ColorSwitchCC.d.ts.map +1 -1
  178. package/build/esm/cc/ColorSwitchCC.js +802 -677
  179. package/build/esm/cc/ColorSwitchCC.js.map +1 -1
  180. package/build/esm/cc/ConfigurationCC.js +1899 -1687
  181. package/build/esm/cc/ConfigurationCC.js.map +1 -1
  182. package/build/esm/cc/DeviceResetLocallyCC.js +124 -59
  183. package/build/esm/cc/DeviceResetLocallyCC.js.map +1 -1
  184. package/build/esm/cc/DoorLockCC.d.ts.map +1 -1
  185. package/build/esm/cc/DoorLockCC.js +951 -849
  186. package/build/esm/cc/DoorLockCC.js.map +1 -1
  187. package/build/esm/cc/DoorLockLoggingCC.d.ts.map +1 -1
  188. package/build/esm/cc/DoorLockLoggingCC.js +316 -218
  189. package/build/esm/cc/DoorLockLoggingCC.js.map +1 -1
  190. package/build/esm/cc/EnergyProductionCC.js +240 -164
  191. package/build/esm/cc/EnergyProductionCC.js.map +1 -1
  192. package/build/esm/cc/EntryControlCC.d.ts.map +1 -1
  193. package/build/esm/cc/EntryControlCC.js +629 -493
  194. package/build/esm/cc/EntryControlCC.js.map +1 -1
  195. package/build/esm/cc/FirmwareUpdateMetaDataCC.d.ts.map +1 -1
  196. package/build/esm/cc/FirmwareUpdateMetaDataCC.js +938 -769
  197. package/build/esm/cc/FirmwareUpdateMetaDataCC.js.map +1 -1
  198. package/build/esm/cc/HailCC.js +51 -12
  199. package/build/esm/cc/HailCC.js.map +1 -1
  200. package/build/esm/cc/HumidityControlModeCC.d.ts.map +1 -1
  201. package/build/esm/cc/HumidityControlModeCC.js +357 -250
  202. package/build/esm/cc/HumidityControlModeCC.js.map +1 -1
  203. package/build/esm/cc/HumidityControlOperatingStateCC.d.ts.map +1 -1
  204. package/build/esm/cc/HumidityControlOperatingStateCC.js +182 -109
  205. package/build/esm/cc/HumidityControlOperatingStateCC.js.map +1 -1
  206. package/build/esm/cc/HumidityControlSetpointCC.d.ts.map +1 -1
  207. package/build/esm/cc/HumidityControlSetpointCC.js +706 -546
  208. package/build/esm/cc/HumidityControlSetpointCC.js.map +1 -1
  209. package/build/esm/cc/InclusionControllerCC.js +197 -119
  210. package/build/esm/cc/InclusionControllerCC.js.map +1 -1
  211. package/build/esm/cc/IndicatorCC.js +973 -835
  212. package/build/esm/cc/IndicatorCC.js.map +1 -1
  213. package/build/esm/cc/IrrigationCC.d.ts.map +1 -1
  214. package/build/esm/cc/IrrigationCC.js +1697 -1496
  215. package/build/esm/cc/IrrigationCC.js.map +1 -1
  216. package/build/esm/cc/LanguageCC.d.ts.map +1 -1
  217. package/build/esm/cc/LanguageCC.js +266 -184
  218. package/build/esm/cc/LanguageCC.js.map +1 -1
  219. package/build/esm/cc/LockCC.d.ts.map +1 -1
  220. package/build/esm/cc/LockCC.js +247 -162
  221. package/build/esm/cc/LockCC.js.map +1 -1
  222. package/build/esm/cc/ManufacturerProprietaryCC.js +192 -141
  223. package/build/esm/cc/ManufacturerProprietaryCC.js.map +1 -1
  224. package/build/esm/cc/ManufacturerSpecificCC.d.ts.map +1 -1
  225. package/build/esm/cc/ManufacturerSpecificCC.js +312 -223
  226. package/build/esm/cc/ManufacturerSpecificCC.js.map +1 -1
  227. package/build/esm/cc/MeterCC.d.ts.map +1 -1
  228. package/build/esm/cc/MeterCC.js +896 -795
  229. package/build/esm/cc/MeterCC.js.map +1 -1
  230. package/build/esm/cc/MultiChannelAssociationCC.d.ts.map +1 -1
  231. package/build/esm/cc/MultiChannelAssociationCC.js +631 -518
  232. package/build/esm/cc/MultiChannelAssociationCC.js.map +1 -1
  233. package/build/esm/cc/MultiChannelCC.d.ts.map +1 -1
  234. package/build/esm/cc/MultiChannelCC.js +1106 -921
  235. package/build/esm/cc/MultiChannelCC.js.map +1 -1
  236. package/build/esm/cc/MultiCommandCC.js +166 -102
  237. package/build/esm/cc/MultiCommandCC.js.map +1 -1
  238. package/build/esm/cc/MultilevelSensorCC.d.ts.map +1 -1
  239. package/build/esm/cc/MultilevelSensorCC.js +616 -497
  240. package/build/esm/cc/MultilevelSensorCC.js.map +1 -1
  241. package/build/esm/cc/MultilevelSwitchCC.d.ts.map +1 -1
  242. package/build/esm/cc/MultilevelSwitchCC.js +621 -496
  243. package/build/esm/cc/MultilevelSwitchCC.js.map +1 -1
  244. package/build/esm/cc/NoOperationCC.js +82 -29
  245. package/build/esm/cc/NoOperationCC.js.map +1 -1
  246. package/build/esm/cc/NodeNamingCC.d.ts.map +1 -1
  247. package/build/esm/cc/NodeNamingCC.js +413 -294
  248. package/build/esm/cc/NodeNamingCC.js.map +1 -1
  249. package/build/esm/cc/NotificationCC.d.ts.map +1 -1
  250. package/build/esm/cc/NotificationCC.js +1097 -966
  251. package/build/esm/cc/NotificationCC.js.map +1 -1
  252. package/build/esm/cc/PowerlevelCC.js +437 -311
  253. package/build/esm/cc/PowerlevelCC.js.map +1 -1
  254. package/build/esm/cc/ProtectionCC.d.ts.map +1 -1
  255. package/build/esm/cc/ProtectionCC.js +704 -543
  256. package/build/esm/cc/ProtectionCC.js.map +1 -1
  257. package/build/esm/cc/SceneActivationCC.d.ts.map +1 -1
  258. package/build/esm/cc/SceneActivationCC.js +157 -100
  259. package/build/esm/cc/SceneActivationCC.js.map +1 -1
  260. package/build/esm/cc/SceneActuatorConfigurationCC.js +357 -269
  261. package/build/esm/cc/SceneActuatorConfigurationCC.js.map +1 -1
  262. package/build/esm/cc/SceneControllerConfigurationCC.js +434 -346
  263. package/build/esm/cc/SceneControllerConfigurationCC.js.map +1 -1
  264. package/build/esm/cc/ScheduleEntryLockCC.d.ts.map +1 -1
  265. package/build/esm/cc/ScheduleEntryLockCC.js +1596 -1357
  266. package/build/esm/cc/ScheduleEntryLockCC.js.map +1 -1
  267. package/build/esm/cc/Security2CC.js +1633 -1406
  268. package/build/esm/cc/Security2CC.js.map +1 -1
  269. package/build/esm/cc/SecurityCC.js +876 -687
  270. package/build/esm/cc/SecurityCC.js.map +1 -1
  271. package/build/esm/cc/SoundSwitchCC.d.ts.map +1 -1
  272. package/build/esm/cc/SoundSwitchCC.js +689 -526
  273. package/build/esm/cc/SoundSwitchCC.js.map +1 -1
  274. package/build/esm/cc/SupervisionCC.js +349 -272
  275. package/build/esm/cc/SupervisionCC.js.map +1 -1
  276. package/build/esm/cc/ThermostatFanModeCC.d.ts.map +1 -1
  277. package/build/esm/cc/ThermostatFanModeCC.js +388 -284
  278. package/build/esm/cc/ThermostatFanModeCC.js.map +1 -1
  279. package/build/esm/cc/ThermostatFanStateCC.d.ts.map +1 -1
  280. package/build/esm/cc/ThermostatFanStateCC.js +184 -111
  281. package/build/esm/cc/ThermostatFanStateCC.js.map +1 -1
  282. package/build/esm/cc/ThermostatModeCC.d.ts.map +1 -1
  283. package/build/esm/cc/ThermostatModeCC.js +435 -331
  284. package/build/esm/cc/ThermostatModeCC.js.map +1 -1
  285. package/build/esm/cc/ThermostatOperatingStateCC.d.ts.map +1 -1
  286. package/build/esm/cc/ThermostatOperatingStateCC.js +180 -107
  287. package/build/esm/cc/ThermostatOperatingStateCC.js.map +1 -1
  288. package/build/esm/cc/ThermostatSetbackCC.js +274 -185
  289. package/build/esm/cc/ThermostatSetbackCC.js.map +1 -1
  290. package/build/esm/cc/ThermostatSetpointCC.d.ts.map +1 -1
  291. package/build/esm/cc/ThermostatSetpointCC.js +674 -543
  292. package/build/esm/cc/ThermostatSetpointCC.js.map +1 -1
  293. package/build/esm/cc/TimeCC.js +499 -360
  294. package/build/esm/cc/TimeCC.js.map +1 -1
  295. package/build/esm/cc/TimeParametersCC.d.ts.map +1 -1
  296. package/build/esm/cc/TimeParametersCC.js +296 -211
  297. package/build/esm/cc/TimeParametersCC.js.map +1 -1
  298. package/build/esm/cc/TransportServiceCC.js +464 -363
  299. package/build/esm/cc/TransportServiceCC.js.map +1 -1
  300. package/build/esm/cc/UserCodeCC.d.ts.map +1 -1
  301. package/build/esm/cc/UserCodeCC.js +1443 -1205
  302. package/build/esm/cc/UserCodeCC.js.map +1 -1
  303. package/build/esm/cc/VersionCC.d.ts.map +1 -1
  304. package/build/esm/cc/VersionCC.js +744 -635
  305. package/build/esm/cc/VersionCC.js.map +1 -1
  306. package/build/esm/cc/WakeUpCC.d.ts.map +1 -1
  307. package/build/esm/cc/WakeUpCC.js +494 -364
  308. package/build/esm/cc/WakeUpCC.js.map +1 -1
  309. package/build/esm/cc/WindowCoveringCC.d.ts.map +1 -1
  310. package/build/esm/cc/WindowCoveringCC.js +655 -530
  311. package/build/esm/cc/WindowCoveringCC.js.map +1 -1
  312. package/build/esm/cc/ZWaveLongRangeCC.js +51 -11
  313. package/build/esm/cc/ZWaveLongRangeCC.js.map +1 -1
  314. package/build/esm/cc/ZWavePlusCC.d.ts.map +1 -1
  315. package/build/esm/cc/ZWavePlusCC.js +223 -162
  316. package/build/esm/cc/ZWavePlusCC.js.map +1 -1
  317. package/build/esm/cc/ZWaveProtocolCC.js +1443 -953
  318. package/build/esm/cc/ZWaveProtocolCC.js.map +1 -1
  319. package/build/esm/cc/manufacturerProprietary/Decorators.d.ts +4 -4
  320. package/build/esm/cc/manufacturerProprietary/Decorators.d.ts.map +1 -1
  321. package/build/esm/cc/manufacturerProprietary/FibaroCC.js +390 -286
  322. package/build/esm/cc/manufacturerProprietary/FibaroCC.js.map +1 -1
  323. package/build/esm/lib/CommandClassDecorators.d.ts +11 -15
  324. package/build/esm/lib/CommandClassDecorators.d.ts.map +1 -1
  325. package/build/esm/lib/CommandClassDecorators.js +24 -24
  326. package/build/esm/lib/CommandClassDecorators.js.map +1 -1
  327. package/build/esm/lib/Security2/Extension.d.ts +1 -1
  328. package/build/esm/lib/Security2/Extension.d.ts.map +1 -1
  329. package/build/esm/lib/Security2/Extension.js +207 -123
  330. package/build/esm/lib/Security2/Extension.js.map +1 -1
  331. 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 {\n\tCommandClasses,\n\tDuration,\n\ttype EndpointId,\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 type {\n\tCCEncodingContext,\n\tCCParsingContext,\n\tGetValueDB,\n} from \"@zwave-js/host/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/index.js\";\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\tccValue,\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 = Object.freeze({\n\t...V.defineStaticCCValues(CommandClasses[\"Door Lock\"], {\n\t\t...V.staticProperty(\n\t\t\t\"targetMode\",\n\t\t\t{\n\t\t\t\t...ValueMetadata.UInt8,\n\t\t\t\tlabel: \"Target lock mode\",\n\t\t\t\tstates: enumValuesToMetadataStates(DoorLockMode),\n\t\t\t} as const,\n\t\t),\n\n\t\t...V.staticProperty(\n\t\t\t\"currentMode\",\n\t\t\t{\n\t\t\t\t...ValueMetadata.ReadOnlyUInt8,\n\t\t\t\tlabel: \"Current lock mode\",\n\t\t\t\tstates: enumValuesToMetadataStates(DoorLockMode),\n\t\t\t} as const,\n\t\t),\n\n\t\t...V.staticProperty(\n\t\t\t\"duration\",\n\t\t\t{\n\t\t\t\t...ValueMetadata.ReadOnlyDuration,\n\t\t\t\tlabel: \"Remaining duration until target lock mode\",\n\t\t\t} as const,\n\t\t\t{ minVersion: 3 } as const,\n\t\t),\n\n\t\t...V.staticProperty(\"supportedOutsideHandles\", undefined, {\n\t\t\tinternal: true,\n\t\t\tminVersion: 4,\n\t\t}),\n\t\t...V.staticProperty(\n\t\t\t\"outsideHandlesCanOpenDoorConfiguration\",\n\t\t\t{\n\t\t\t\t...ValueMetadata.Any,\n\t\t\t\tlabel:\n\t\t\t\t\t\"Which outside handles can open the door (configuration)\",\n\t\t\t} as const,\n\t\t),\n\t\t...V.staticProperty(\n\t\t\t\"outsideHandlesCanOpenDoor\",\n\t\t\t{\n\t\t\t\t...ValueMetadata.ReadOnly,\n\t\t\t\tlabel:\n\t\t\t\t\t\"Which outside handles can open the door (actual status)\",\n\t\t\t} as const,\n\t\t),\n\n\t\t...V.staticProperty(\"supportedInsideHandles\", undefined, {\n\t\t\tinternal: true,\n\t\t\tminVersion: 4,\n\t\t}),\n\t\t...V.staticProperty(\n\t\t\t\"insideHandlesCanOpenDoorConfiguration\",\n\t\t\t{\n\t\t\t\t...ValueMetadata.Any,\n\t\t\t\tlabel: \"Which inside handles can open the door (configuration)\",\n\t\t\t} as const,\n\t\t),\n\t\t...V.staticProperty(\n\t\t\t\"insideHandlesCanOpenDoor\",\n\t\t\t{\n\t\t\t\t...ValueMetadata.ReadOnly,\n\t\t\t\tlabel: \"Which inside handles can open the door (actual status)\",\n\t\t\t} as const,\n\t\t),\n\n\t\t...V.staticProperty(\n\t\t\t\"operationType\",\n\t\t\t{\n\t\t\t\t...ValueMetadata.UInt8,\n\t\t\t\tlabel: \"Lock operation type\",\n\t\t\t\tstates: enumValuesToMetadataStates(DoorLockOperationType),\n\t\t\t} as const,\n\t\t),\n\n\t\t...V.staticProperty(\n\t\t\t\"lockTimeoutConfiguration\",\n\t\t\t{\n\t\t\t\t...ValueMetadata.UInt16,\n\t\t\t\tlabel: \"Duration of timed mode in seconds\",\n\t\t\t} as const,\n\t\t),\n\t\t...V.staticProperty(\n\t\t\t\"lockTimeout\",\n\t\t\t{\n\t\t\t\t...ValueMetadata.ReadOnlyUInt16,\n\t\t\t\tlabel: \"Seconds until lock mode times out\",\n\t\t\t} as const,\n\t\t),\n\n\t\t...V.staticProperty(\"autoRelockSupported\", undefined, {\n\t\t\tinternal: true,\n\t\t\tminVersion: 4,\n\t\t}),\n\t\t...V.staticProperty(\n\t\t\t\"autoRelockTime\",\n\t\t\t{\n\t\t\t\t...ValueMetadata.UInt16,\n\t\t\t\tlabel: \"Duration in seconds until lock returns to secure state\",\n\t\t\t} as const,\n\t\t\t{\n\t\t\t\tminVersion: 4,\n\t\t\t\tautoCreate: shouldAutoCreateAutoRelockConfigValue,\n\t\t\t} as const,\n\t\t),\n\n\t\t...V.staticProperty(\"holdAndReleaseSupported\", undefined, {\n\t\t\tinternal: true,\n\t\t\tminVersion: 4,\n\t\t}),\n\t\t...V.staticProperty(\n\t\t\t\"holdAndReleaseTime\",\n\t\t\t{\n\t\t\t\t...ValueMetadata.UInt16,\n\t\t\t\tlabel: \"Duration in seconds the latch stays retracted\",\n\t\t\t} as const,\n\t\t\t{\n\t\t\t\tminVersion: 4,\n\t\t\t\tautoCreate: shouldAutoCreateHoldAndReleaseConfigValue,\n\t\t\t} as const,\n\t\t),\n\n\t\t...V.staticProperty(\"twistAssistSupported\", undefined, {\n\t\t\tinternal: true,\n\t\t\tminVersion: 4,\n\t\t}),\n\t\t...V.staticProperty(\n\t\t\t\"twistAssist\",\n\t\t\t{\n\t\t\t\t...ValueMetadata.Boolean,\n\t\t\t\tlabel: \"Twist Assist enabled\",\n\t\t\t} as const,\n\t\t\t{\n\t\t\t\tminVersion: 4,\n\t\t\t\tautoCreate: shouldAutoCreateTwistAssistConfigValue,\n\t\t\t} as const,\n\t\t),\n\n\t\t...V.staticProperty(\"blockToBlockSupported\", undefined, {\n\t\t\tinternal: true,\n\t\t\tminVersion: 4,\n\t\t}),\n\t\t...V.staticProperty(\n\t\t\t\"blockToBlock\",\n\t\t\t{\n\t\t\t\t...ValueMetadata.Boolean,\n\t\t\t\tlabel: \"Block-to-block functionality enabled\",\n\t\t\t} as const,\n\t\t\t{\n\t\t\t\tminVersion: 4,\n\t\t\t\tautoCreate: shouldAutoCreateBlockToBlockConfigValue,\n\t\t\t} as const,\n\t\t),\n\n\t\t...V.staticProperty(\"latchSupported\", undefined, { internal: true }),\n\t\t...V.staticProperty(\n\t\t\t\"latchStatus\",\n\t\t\t{\n\t\t\t\t...ValueMetadata.ReadOnly,\n\t\t\t\tlabel: \"Current status of the latch\",\n\t\t\t} as const,\n\t\t\t{\n\t\t\t\tautoCreate: shouldAutoCreateLatchStatusValue,\n\t\t\t} as const,\n\t\t),\n\n\t\t...V.staticProperty(\"boltSupported\", undefined, { internal: true }),\n\t\t...V.staticProperty(\n\t\t\t\"boltStatus\",\n\t\t\t{\n\t\t\t\t...ValueMetadata.ReadOnly,\n\t\t\t\tlabel: \"Current status of the bolt\",\n\t\t\t} as const,\n\t\t\t{\n\t\t\t\tautoCreate: shouldAutoCreateBoltStatusValue,\n\t\t\t} as const,\n\t\t),\n\n\t\t...V.staticProperty(\"doorSupported\", undefined, { internal: true }),\n\t\t...V.staticProperty(\n\t\t\t\"doorStatus\",\n\t\t\t{\n\t\t\t\t...ValueMetadata.ReadOnly,\n\t\t\t\tlabel: \"Current status of the door\",\n\t\t\t} as const,\n\t\t\t{\n\t\t\t\tautoCreate: shouldAutoCreateDoorStatusValue,\n\t\t\t} as const,\n\t\t),\n\t}),\n});\n\nfunction 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\nfunction 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\nfunction 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\nfunction 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\nfunction 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\nfunction 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\nfunction 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): 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)\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 DoorLockCCOperationReport({\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\t@ccValue(DoorLockCCValues.currentMode)\n\tpublic readonly currentMode: DoorLockMode;\n\n\t@ccValue(DoorLockCCValues.targetMode)\n\tpublic readonly targetMode?: DoorLockMode;\n\n\t@ccValue(DoorLockCCValues.duration)\n\tpublic readonly duration?: Duration;\n\n\t@ccValue(DoorLockCCValues.outsideHandlesCanOpenDoor)\n\tpublic readonly outsideHandlesCanOpenDoor: DoorHandleStatus;\n\n\t@ccValue(DoorLockCCValues.insideHandlesCanOpenDoor)\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\t@ccValue(DoorLockCCValues.lockTimeout)\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)\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 DoorLockCCConfigurationReport({\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\t@ccValue(DoorLockCCValues.operationType)\n\tpublic readonly operationType: DoorLockOperationType;\n\n\t@ccValue(DoorLockCCValues.outsideHandlesCanOpenDoorConfiguration)\n\tpublic readonly outsideHandlesCanOpenDoorConfiguration: DoorHandleStatus;\n\n\t@ccValue(DoorLockCCValues.insideHandlesCanOpenDoorConfiguration)\n\tpublic readonly insideHandlesCanOpenDoorConfiguration: DoorHandleStatus;\n\n\t@ccValue(DoorLockCCValues.lockTimeoutConfiguration)\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): 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)\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 DoorLockCCCapabilitiesReport({\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\t@ccValue(DoorLockCCValues.supportedOutsideHandles)\n\tpublic readonly supportedOutsideHandles: DoorHandleStatus;\n\n\t@ccValue(DoorLockCCValues.supportedInsideHandles)\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\t@ccValue(DoorLockCCValues.autoRelockSupported)\n\tpublic readonly autoRelockSupported: boolean;\n\n\t@ccValue(DoorLockCCValues.holdAndReleaseSupported)\n\tpublic readonly holdAndReleaseSupported: boolean;\n\n\t@ccValue(DoorLockCCValues.twistAssistSupported)\n\tpublic readonly twistAssistSupported: boolean;\n\n\t@ccValue(DoorLockCCValues.blockToBlockSupported)\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", "DoorLockCCAPI", "DoorLockCC", "DoorLockCCOperationSet", "DoorLockCCOperationReport", "DoorLockCCOperationGet", "DoorLockCCConfigurationReport", "DoorLockCCConfigurationGet", "DoorLockCCConfigurationSet", "DoorLockCCCapabilitiesReport", "DoorLockCCCapabilitiesGet"]
4
+ "sourcesContent": ["import {\n\tCommandClasses,\n\tDuration,\n\ttype EndpointId,\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 type {\n\tCCEncodingContext,\n\tCCParsingContext,\n\tGetValueDB,\n} from \"@zwave-js/host/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/index.js\";\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 = Object.freeze({\n\t...V.defineStaticCCValues(CommandClasses[\"Door Lock\"], {\n\t\t...V.staticProperty(\n\t\t\t\"targetMode\",\n\t\t\t{\n\t\t\t\t...ValueMetadata.UInt8,\n\t\t\t\tlabel: \"Target lock mode\",\n\t\t\t\tstates: enumValuesToMetadataStates(DoorLockMode),\n\t\t\t} as const,\n\t\t),\n\n\t\t...V.staticProperty(\n\t\t\t\"currentMode\",\n\t\t\t{\n\t\t\t\t...ValueMetadata.ReadOnlyUInt8,\n\t\t\t\tlabel: \"Current lock mode\",\n\t\t\t\tstates: enumValuesToMetadataStates(DoorLockMode),\n\t\t\t} as const,\n\t\t),\n\n\t\t...V.staticProperty(\n\t\t\t\"duration\",\n\t\t\t{\n\t\t\t\t...ValueMetadata.ReadOnlyDuration,\n\t\t\t\tlabel: \"Remaining duration until target lock mode\",\n\t\t\t} as const,\n\t\t\t{ minVersion: 3 } as const,\n\t\t),\n\n\t\t...V.staticProperty(\"supportedOutsideHandles\", undefined, {\n\t\t\tinternal: true,\n\t\t\tminVersion: 4,\n\t\t}),\n\t\t...V.staticProperty(\n\t\t\t\"outsideHandlesCanOpenDoorConfiguration\",\n\t\t\t{\n\t\t\t\t...ValueMetadata.Any,\n\t\t\t\tlabel:\n\t\t\t\t\t\"Which outside handles can open the door (configuration)\",\n\t\t\t} as const,\n\t\t),\n\t\t...V.staticProperty(\n\t\t\t\"outsideHandlesCanOpenDoor\",\n\t\t\t{\n\t\t\t\t...ValueMetadata.ReadOnly,\n\t\t\t\tlabel:\n\t\t\t\t\t\"Which outside handles can open the door (actual status)\",\n\t\t\t} as const,\n\t\t),\n\n\t\t...V.staticProperty(\"supportedInsideHandles\", undefined, {\n\t\t\tinternal: true,\n\t\t\tminVersion: 4,\n\t\t}),\n\t\t...V.staticProperty(\n\t\t\t\"insideHandlesCanOpenDoorConfiguration\",\n\t\t\t{\n\t\t\t\t...ValueMetadata.Any,\n\t\t\t\tlabel: \"Which inside handles can open the door (configuration)\",\n\t\t\t} as const,\n\t\t),\n\t\t...V.staticProperty(\n\t\t\t\"insideHandlesCanOpenDoor\",\n\t\t\t{\n\t\t\t\t...ValueMetadata.ReadOnly,\n\t\t\t\tlabel: \"Which inside handles can open the door (actual status)\",\n\t\t\t} as const,\n\t\t),\n\n\t\t...V.staticProperty(\n\t\t\t\"operationType\",\n\t\t\t{\n\t\t\t\t...ValueMetadata.UInt8,\n\t\t\t\tlabel: \"Lock operation type\",\n\t\t\t\tstates: enumValuesToMetadataStates(DoorLockOperationType),\n\t\t\t} as const,\n\t\t),\n\n\t\t...V.staticProperty(\n\t\t\t\"lockTimeoutConfiguration\",\n\t\t\t{\n\t\t\t\t...ValueMetadata.UInt16,\n\t\t\t\tlabel: \"Duration of timed mode in seconds\",\n\t\t\t} as const,\n\t\t),\n\t\t...V.staticProperty(\n\t\t\t\"lockTimeout\",\n\t\t\t{\n\t\t\t\t...ValueMetadata.ReadOnlyUInt16,\n\t\t\t\tlabel: \"Seconds until lock mode times out\",\n\t\t\t} as const,\n\t\t),\n\n\t\t...V.staticProperty(\"autoRelockSupported\", undefined, {\n\t\t\tinternal: true,\n\t\t\tminVersion: 4,\n\t\t}),\n\t\t...V.staticProperty(\n\t\t\t\"autoRelockTime\",\n\t\t\t{\n\t\t\t\t...ValueMetadata.UInt16,\n\t\t\t\tlabel: \"Duration in seconds until lock returns to secure state\",\n\t\t\t} as const,\n\t\t\t{\n\t\t\t\tminVersion: 4,\n\t\t\t\tautoCreate: shouldAutoCreateAutoRelockConfigValue,\n\t\t\t} as const,\n\t\t),\n\n\t\t...V.staticProperty(\"holdAndReleaseSupported\", undefined, {\n\t\t\tinternal: true,\n\t\t\tminVersion: 4,\n\t\t}),\n\t\t...V.staticProperty(\n\t\t\t\"holdAndReleaseTime\",\n\t\t\t{\n\t\t\t\t...ValueMetadata.UInt16,\n\t\t\t\tlabel: \"Duration in seconds the latch stays retracted\",\n\t\t\t} as const,\n\t\t\t{\n\t\t\t\tminVersion: 4,\n\t\t\t\tautoCreate: shouldAutoCreateHoldAndReleaseConfigValue,\n\t\t\t} as const,\n\t\t),\n\n\t\t...V.staticProperty(\"twistAssistSupported\", undefined, {\n\t\t\tinternal: true,\n\t\t\tminVersion: 4,\n\t\t}),\n\t\t...V.staticProperty(\n\t\t\t\"twistAssist\",\n\t\t\t{\n\t\t\t\t...ValueMetadata.Boolean,\n\t\t\t\tlabel: \"Twist Assist enabled\",\n\t\t\t} as const,\n\t\t\t{\n\t\t\t\tminVersion: 4,\n\t\t\t\tautoCreate: shouldAutoCreateTwistAssistConfigValue,\n\t\t\t} as const,\n\t\t),\n\n\t\t...V.staticProperty(\"blockToBlockSupported\", undefined, {\n\t\t\tinternal: true,\n\t\t\tminVersion: 4,\n\t\t}),\n\t\t...V.staticProperty(\n\t\t\t\"blockToBlock\",\n\t\t\t{\n\t\t\t\t...ValueMetadata.Boolean,\n\t\t\t\tlabel: \"Block-to-block functionality enabled\",\n\t\t\t} as const,\n\t\t\t{\n\t\t\t\tminVersion: 4,\n\t\t\t\tautoCreate: shouldAutoCreateBlockToBlockConfigValue,\n\t\t\t} as const,\n\t\t),\n\n\t\t...V.staticProperty(\"latchSupported\", undefined, { internal: true }),\n\t\t...V.staticProperty(\n\t\t\t\"latchStatus\",\n\t\t\t{\n\t\t\t\t...ValueMetadata.ReadOnly,\n\t\t\t\tlabel: \"Current status of the latch\",\n\t\t\t} as const,\n\t\t\t{\n\t\t\t\tautoCreate: shouldAutoCreateLatchStatusValue,\n\t\t\t} as const,\n\t\t),\n\n\t\t...V.staticProperty(\"boltSupported\", undefined, { internal: true }),\n\t\t...V.staticProperty(\n\t\t\t\"boltStatus\",\n\t\t\t{\n\t\t\t\t...ValueMetadata.ReadOnly,\n\t\t\t\tlabel: \"Current status of the bolt\",\n\t\t\t} as const,\n\t\t\t{\n\t\t\t\tautoCreate: shouldAutoCreateBoltStatusValue,\n\t\t\t} as const,\n\t\t),\n\n\t\t...V.staticProperty(\"doorSupported\", undefined, { internal: true }),\n\t\t...V.staticProperty(\n\t\t\t\"doorStatus\",\n\t\t\t{\n\t\t\t\t...ValueMetadata.ReadOnly,\n\t\t\t\tlabel: \"Current status of the door\",\n\t\t\t} as const,\n\t\t\t{\n\t\t\t\tautoCreate: shouldAutoCreateDoorStatusValue,\n\t\t\t} as const,\n\t\t),\n\t}),\n});\n\nfunction 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\nfunction 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\nfunction 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\nfunction 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\nfunction 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\nfunction 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\nfunction 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): 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): 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": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,kBAiBO;AAMP,IAAAA,eAAsB;AACtB,IAAAA,eAAwC;AAExC,wBAAwB;AACxB,iBASO;AACP,0BAMO;AACP,oCASO;AACP,oBAAkB;AAClB,mBAKO;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA,MAAM,mBAAmB,OAAO,OAAO;EAC7C,GAAG,gBAAE,qBAAqB,2BAAe,WAAW,GAAG;IACtD,GAAG,gBAAE,eACJ,cACA;MACC,GAAG,0BAAc;MACjB,OAAO;MACP,YAAQ,wCAA2B,yBAAY;KACtC;IAGX,GAAG,gBAAE,eACJ,eACA;MACC,GAAG,0BAAc;MACjB,OAAO;MACP,YAAQ,wCAA2B,yBAAY;KACtC;IAGX,GAAG,gBAAE,eACJ,YACA;MACC,GAAG,0BAAc;MACjB,OAAO;OAER,EAAE,YAAY,EAAC,CAAW;IAG3B,GAAG,gBAAE,eAAe,2BAA2B,QAAW;MACzD,UAAU;MACV,YAAY;KACZ;IACD,GAAG,gBAAE,eACJ,0CACA;MACC,GAAG,0BAAc;MACjB,OACC;KACQ;IAEX,GAAG,gBAAE,eACJ,6BACA;MACC,GAAG,0BAAc;MACjB,OACC;KACQ;IAGX,GAAG,gBAAE,eAAe,0BAA0B,QAAW;MACxD,UAAU;MACV,YAAY;KACZ;IACD,GAAG,gBAAE,eACJ,yCACA;MACC,GAAG,0BAAc;MACjB,OAAO;KACE;IAEX,GAAG,gBAAE,eACJ,4BACA;MACC,GAAG,0BAAc;MACjB,OAAO;KACE;IAGX,GAAG,gBAAE,eACJ,iBACA;MACC,GAAG,0BAAc;MACjB,OAAO;MACP,YAAQ,wCAA2B,kCAAqB;KAC/C;IAGX,GAAG,gBAAE,eACJ,4BACA;MACC,GAAG,0BAAc;MACjB,OAAO;KACE;IAEX,GAAG,gBAAE,eACJ,eACA;MACC,GAAG,0BAAc;MACjB,OAAO;KACE;IAGX,GAAG,gBAAE,eAAe,uBAAuB,QAAW;MACrD,UAAU;MACV,YAAY;KACZ;IACD,GAAG,gBAAE,eACJ,kBACA;MACC,GAAG,0BAAc;MACjB,OAAO;OAER;MACC,YAAY;MACZ,YAAY;KACH;IAGX,GAAG,gBAAE,eAAe,2BAA2B,QAAW;MACzD,UAAU;MACV,YAAY;KACZ;IACD,GAAG,gBAAE,eACJ,sBACA;MACC,GAAG,0BAAc;MACjB,OAAO;OAER;MACC,YAAY;MACZ,YAAY;KACH;IAGX,GAAG,gBAAE,eAAe,wBAAwB,QAAW;MACtD,UAAU;MACV,YAAY;KACZ;IACD,GAAG,gBAAE,eACJ,eACA;MACC,GAAG,0BAAc;MACjB,OAAO;OAER;MACC,YAAY;MACZ,YAAY;KACH;IAGX,GAAG,gBAAE,eAAe,yBAAyB,QAAW;MACvD,UAAU;MACV,YAAY;KACZ;IACD,GAAG,gBAAE,eACJ,gBACA;MACC,GAAG,0BAAc;MACjB,OAAO;OAER;MACC,YAAY;MACZ,YAAY;KACH;IAGX,GAAG,gBAAE,eAAe,kBAAkB,QAAW,EAAE,UAAU,KAAI,CAAE;IACnE,GAAG,gBAAE,eACJ,eACA;MACC,GAAG,0BAAc;MACjB,OAAO;OAER;MACC,YAAY;KACH;IAGX,GAAG,gBAAE,eAAe,iBAAiB,QAAW,EAAE,UAAU,KAAI,CAAE;IAClE,GAAG,gBAAE,eACJ,cACA;MACC,GAAG,0BAAc;MACjB,OAAO;OAER;MACC,YAAY;KACH;IAGX,GAAG,gBAAE,eAAe,iBAAiB,QAAW,EAAE,UAAU,KAAI,CAAE;IAClE,GAAG,gBAAE,eACJ,cACA;MACC,GAAG,0BAAc;MACjB,OAAO;OAER;MACC,YAAY;KACH;GAEX;CACD;AAED,SAAS,iCACR,KACA,UAAoB;AAEpB,QAAM,UAAU,IAAI,cAAc,SAAS,MAAM;AACjD,MAAI,CAAC;AAAS,WAAO;AACrB,SAAO,CAAC,CAAC,QAAQ,SAChB,iBAAiB,eAAe,SAAS,SAAS,KAAK,CAAC;AAE1D;AAEA,SAAS,gCACR,KACA,UAAoB;AAEpB,QAAM,UAAU,IAAI,cAAc,SAAS,MAAM;AACjD,MAAI,CAAC;AAAS,WAAO;AACrB,SAAO,CAAC,CAAC,QAAQ,SAChB,iBAAiB,cAAc,SAAS,SAAS,KAAK,CAAC;AAEzD;AAEA,SAAS,gCACR,KACA,UAAoB;AAEpB,QAAM,UAAU,IAAI,cAAc,SAAS,MAAM;AACjD,MAAI,CAAC;AAAS,WAAO;AACrB,SAAO,CAAC,CAAC,QAAQ,SAChB,iBAAiB,cAAc,SAAS,SAAS,KAAK,CAAC;AAEzD;AAEA,SAAS,uCACR,KACA,UAAoB;AAEpB,QAAM,UAAU,IAAI,cAAc,SAAS,MAAM;AACjD,MAAI,CAAC;AAAS,WAAO;AACrB,SAAO,CAAC,CAAC,QAAQ,SAChB,iBAAiB,qBAAqB,SAAS,SAAS,KAAK,CAAC;AAEhE;AAEA,SAAS,wCACR,KACA,UAAoB;AAEpB,QAAM,UAAU,IAAI,cAAc,SAAS,MAAM;AACjD,MAAI,CAAC;AAAS,WAAO;AACrB,SAAO,CAAC,CAAC,QAAQ,SAChB,iBAAiB,sBAAsB,SAAS,SAAS,KAAK,CAAC;AAEjE;AAEA,SAAS,sCACR,KACA,UAAoB;AAEpB,QAAM,UAAU,IAAI,cAAc,SAAS,MAAM;AACjD,MAAI,CAAC;AAAS,WAAO;AACrB,SAAO,CAAC,CAAC,QAAQ,SAChB,iBAAiB,oBAAoB,SAAS,SAAS,KAAK,CAAC;AAE/D;AAEA,SAAS,0CACR,KACA,UAAoB;AAEpB,QAAM,UAAU,IAAI,cAAc,SAAS,MAAM;AACjD,MAAI,CAAC;AAAS,WAAO;AACrB,SAAO,CAAC,CAAC,QAAQ,SAChB,iBAAiB,wBAAwB,SAAS,SAAS,KAAK,CAAC;AAEnE;AAEA,MAAM,6BAA6B;EAClC;EACA;EACA;EACA;EACA;EACA;EACA;EACA;;IAIY,iBAAa,MAAA;8BADzB,mCAAI,2BAAe,WAAW,CAAC,CAAC;;;;oBACE;qCAAA,YAAa;;;;;;AAAhD,mBAAA,MAAA,mBAAA,EAAA,OAAA,WAAA,GAAA,kBAAA,EAAA,MAAA,SAAA,MAAA,WAAA,MAAA,UAAA,UAAA,GAAA,MAAA,uBAAA;;;AAAa,wBAAA,YAAA,uBAAA;;IACL,gBAAgB,KAAoB;AAC1C,cAAQ,KAAK;QACZ,KAAK,6BAAgB;QACrB,KAAK,6BAAgB;QACrB,KAAK,6BAAgB;QACrB,KAAK,6BAAgB;AACpB,iBAAO;;QACR,KAAK,6BAAgB;AACpB,iBAAO,KAAK,WAAW;MACzB;AACA,aAAO,MAAM,gBAAgB,GAAG;IACjC;IAEA,KAAwB,oBAAS,IAAC;AACjC,aAAO,eAAoC,EAAE,SAAQ,GAAI,OAAK;AAC7D,YAAI,aAAa,cAAc;AAC9B,cAAI,OAAO,UAAU,UAAU;AAC9B,gDACC,KAAK,MACL,UACA,UACA,OAAO,KAAK;UAEd;AACA,gBAAM,SAAS,MAAM,KAAK,IAAI,KAAK;AAGnC,kBAAI,wCAA2B,MAAM,GAAG;AACvC,iBAAK,WAAU,EAAG,SACjB,iBAAiB,YAAY,SAC5B,KAAK,SAAS,KAAK,GAEpB,KAAK;UAEP,OAAO;AACN,iBAAK,aAAa,EAAE,SAAQ,GAAI,KAAK;UACtC;AAEA,iBAAO;QACR,WACC,OAAO,aAAa,YACjB,2BAA2B,SAAS,QAAe,GACrD;AAID,gBAAM,SAAS;YACd,CAAC,QAAQ,GAAG;;AAEb,qBAAW,SAAS,4BAA4B;AAC/C,gBAAI,UAAU,UAAU;AACtB,qBAAe,KAAK,IAAI,KAAK,cAAa,GAAI,SAC9C;gBACC,cAAc,KAAK;gBACnB,UAAU,KAAK,SAAS;gBACxB,UAAU;eACV;YAEH;UACD;AAGA,gBAAM,UAA4B,CAAC,MAAM,MAAM,MAAM,IAAI;AACzD,cAAI,CAAC,OAAO,uCAAuC;AAClD,mBAAO,wCAAwC;UAChD;AACA,cAAI,CAAC,OAAO,wCAAwC;AACnD,mBAAO,yCAAyC;UACjD;AAEA,gBAAM,SAAS,MAAM,KAAK,iBAAiB,MAAM;AAGjD,cAAI,KAAC,wCAA2B,MAAM,GAAG;AACxC,iBAAK,aAAa,EAAE,SAAQ,GAAI,KAAK;UACtC;AAEA,iBAAO;QACR,OAAO;AACN,mDAAyB,KAAK,MAAM,QAAQ;QAC7C;MACD;IACD;IAEA,KAAe,qBAAU,IAAC;AACzB,aAAO,eAAoC,EAAE,SAAQ,GAAE;AACtD,gBAAQ,UAAU;UACjB,KAAK;UACL,KAAK;UACL,KAAK;UACL,KAAK;UACL,KAAK;UACL,KAAK;UACL,KAAK;UACL,KAAK;UACL,KAAK;AACJ,oBAAQ,MAAM,KAAK,IAAG,KAAM,QAAQ;UAErC,KAAK;UACL,KAAK;UACL,KAAK;UACL,KAAK;UACL,KAAK;UACL,KAAK;UACL,KAAK;UACL,KAAK;AACJ,oBAAQ,MAAM,KAAK,iBAAgB,KAAM,QAAQ;UAElD;AACC,qDAAyB,KAAK,MAAM,QAAQ;QAC9C;MACD;IACD;;IAGO,MAAM,kBAAe;AAC3B,WAAK,sBACJ,8BACA,6BAAgB,eAAe;AAGhC,YAAM,KAAK,IAAI,0BAA0B;QACxC,QAAQ,KAAK,SAAS;QACtB,eAAe,KAAK,SAAS;OAC7B;AACD,YAAM,WAAW,MAAM,KAAK,KAAK,YAGhC,IACA,KAAK,cAAc;AAEpB,UAAI,UAAU;AACb,mBAAO,mBAAK,UAAU;UACrB;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;SACA;MACF;IACD;;IAGO,MAAM,MAAG;AACf,WAAK,sBACJ,8BACA,6BAAgB,YAAY;AAG7B,YAAM,KAAK,IAAI,uBAAuB;QACrC,QAAQ,KAAK,SAAS;QACtB,eAAe,KAAK,SAAS;OAC7B;AACD,YAAM,WAAW,MAAM,KAAK,KAAK,YAGhC,IACA,KAAK,cAAc;AAEpB,UAAI,UAAU;AACb,mBAAO,mBAAK,UAAU;UACrB;UACA;UACA;UACA;UACA;UACA;UACA;UACA;UACA;SACA;MACF;IACD;IAGO,MAAM,IACZ,MAAkB;;AAElB,WAAK,sBACJ,8BACA,6BAAgB,YAAY;AAG7B,YAAM,KAAK,IAAI,uBAAuB;QACrC,QAAQ,KAAK,SAAS;QACtB,eAAe,KAAK,SAAS;QAC7B;OACA;AACD,aAAO,KAAK,KAAK,YAAY,IAAI,KAAK,cAAc;;IAI9C,MAAM,iBACZ,eAAgD;;AAEhD,WAAK,sBACJ,8BACA,6BAAgB,gBAAgB;AAGjC,YAAM,KAAK,IAAI,2BAA2B;QACzC,QAAQ,KAAK,SAAS;QACtB,eAAe,KAAK,SAAS;QAC7B,GAAG;OACH;AACD,aAAO,KAAK,KAAK,YAAY,IAAI,KAAK,cAAc;;;IAI9C,MAAM,mBAAgB;AAC5B,WAAK,sBACJ,8BACA,6BAAgB,gBAAgB;AAGjC,YAAM,KAAK,IAAI,2BAA2B;QACzC,QAAQ,KAAK,SAAS;QACtB,eAAe,KAAK,SAAS;OAC7B;AACD,YAAM,WAAW,MAAM,KAAK,KAAK,YAGhC,IACA,KAAK,cAAc;AAEpB,UAAI,UAAU;AACb,mBAAO,mBAAK,UAAU;UACrB;UACA;UACA;UACA;UACA;UACA;UACA;UACA;SACA;MACF;IACD;;;;IAMY,cAAU,MAAA;8BAHtB,4CAAa,2BAAe,WAAW,CAAC,OACxC,kDAAmB,CAAC,OACpB,wCAAS,gBAAgB,CAAC;;;;oBACK;kCAAA,YAAY;;;;;;AAA5C,mBAAA,MAAA,mBAAA,EAAA,OAAA,WAAA,GAAA,kBAAA,EAAA,MAAA,SAAA,MAAA,WAAA,MAAA,UAAA,UAAA,GAAA,MAAA,uBAAA;;;AAAa,wBAAA,YAAA,uBAAA;;IAGL,MAAM,UACZ,KAAqB;AAErB,YAAM,OAAO,KAAK,QAAQ,GAAG;AAC7B,YAAM,WAAW,KAAK,YAAY,GAAG;AACrC,YAAM,MAAM,iBAAM,OACjB,2BAAe,WAAW,GAC1B,KACA,QAAQ,EACP,YAAY;QACb,UAAU,4BAAgB;OAC1B;AAED,UAAI,QAAQ,KAAK,IAAI;QACpB,UAAU,KAAK;QACf,SAAS,gBAAgB,KAAK,MAAM;QACpC,WAAW;OACX;AAID,UAAI,qBAAqB;AAGzB,UAAI,gBAAgB;AACpB,UAAI,gBAAgB;AACpB,UAAI,iBAAiB;AAErB,UAAI,IAAI,WAAW,GAAG;AACrB,YAAI,QAAQ,KAAK,IAAI;UACpB,UAAU,KAAK;UACf,SAAS;UACT,WAAW;SACX;AACD,cAAM,OAAO,MAAM,IAAI,gBAAe;AACtC,YAAI,MAAM;AACT,gBAAM,aAAa;6BAElB,KAAK,wBACH,IAAI,CAAC,UAAM,gCAAkB,oCAAuB,CAAC,CAAC,EACtD,KAAK,IAAI,CACZ;6BAEC,KAAK,uBACH,IAAI,CAAC,UAAM,gCAAkB,2BAAc,CAAC,CAAC,EAC7C,IAAI,CAAC,QAAQ;OAAO,GAAG,EAAE,EACzB,KAAK,EAAE,CACV;6BAEC,KAAK,wBACH,IAAI,MAAM,EACV,KAAK,IAAI,CACZ;6BACyB,KAAK,uBAAuB,IAAI,MAAM,EAAE,KAAK,IAAI,CAAC;6BAClD,KAAK,aAAa;6BAClB,KAAK,aAAa;6BAClB,KAAK,cAAc;6BACnB,KAAK,mBAAmB;6BACxB,KAAK,uBAAuB;6BAC5B,KAAK,oBAAoB;6BACzB,KAAK,qBAAqB;AACnD,cAAI,QAAQ,KAAK,IAAI;YACpB,UAAU,KAAK;YACf,SAAS;YACT,WAAW;WACX;AAED,0BAAgB,KAAK;AACrB,0BAAgB,KAAK;AACrB,2BAAiB,KAAK;AAGtB,gBAAM,kBAAkB,iBAAiB;AACzC,eAAK,YAAY,KAAK,iBAAiB;YACtC,GAAG,gBAAgB;YACnB,YAAQ,wCACP,2BACA,KAAK,sBAAsB;WAE5B;AAED,gBAAM,qBAAqB,iBAAiB;AAC5C,eAAK,YAAY,KAAK,oBAAoB;YACzC,GAAG,mBAAmB;YACtB,YAAQ,wCACP,oCACA,KAAK,uBAAuB;WAE7B;QACF,OAAO;AACN,+BAAqB;QACtB;MACD;AAEA,UAAI,CAAC,oBAAoB;AAExB,cAAM,kBAAkB,iBAAiB;AACzC,YAAI;AAAe,eAAK,YAAY,KAAK,eAAe;AACxD,aAAK,SACJ,KACA,iBAAiB,eACjB,aAAa;AAGd,cAAM,mBAAmB,iBAAiB;AAC1C,YAAI;AAAgB,eAAK,YAAY,KAAK,gBAAgB;AAC1D,aAAK,SACJ,KACA,iBAAiB,gBACjB,cAAc;AAGf,cAAM,kBAAkB,iBAAiB;AACzC,YAAI;AAAe,eAAK,YAAY,KAAK,eAAe;AACxD,aAAK,SACJ,KACA,iBAAiB,eACjB,aAAa;MAEf;AAEA,YAAM,KAAK,cAAc,GAAG;AAG5B,UAAI,CAAC;AAAoB,aAAK,qBAAqB,KAAK,IAAI;IAC7D;IAEO,MAAM,cACZ,KAAyB;AAEzB,YAAM,OAAO,KAAK,QAAQ,GAAG;AAC7B,YAAM,WAAW,KAAK,YAAY,GAAG;AACrC,YAAM,MAAM,iBAAM,OACjB,2BAAe,WAAW,GAC1B,KACA,QAAQ,EACP,YAAY;QACb,UAAU,4BAAgB;OAC1B;AAED,UAAI,QAAQ,KAAK,IAAI;QACpB,UAAU,KAAK;QACf,SAAS;QACT,WAAW;OACX;AACD,YAAM,SAAS,MAAM,IAAI,iBAAgB;AACzC,UAAI,QAAQ;AACX,YAAI,aAAa;qCAEhB,gCACC,oCACA,OAAO,aAAa,CAEtB;AACA,YAAI,OAAO,kBAAkB,mCAAsB,OAAO;AACzD,wBAAc;iCACe,OAAO,wBAAwB;;QAE7D;AACA,sBAAc;iCAEb,OAAO,uCACL,IAAI,MAAM,EACV,KAAK,IAAI,CACZ;iCAEC,OAAO,sCACL,IAAI,MAAM,EACV,KAAK,IAAI,CACZ;AACA,YAAI,IAAI,WAAW,GAAG;AACrB,wBAAc;iCACe,OAAO,kBAAkB,GAAG;iCAC5B,OAAO,sBAAsB,GAAG;iCAChC,CAAC,CAAC,OAAO,WAAW;iCACpB,CAAC,CAAC,OAAO,YAAY;QACnD;AAEA,YAAI,QAAQ,KAAK,IAAI;UACpB,UAAU,KAAK;UACf,SAAS;UACT,WAAW;SACX;MACF;AAEA,UAAI,QAAQ,KAAK,IAAI;QACpB,UAAU,KAAK;QACf,SAAS;QACT,WAAW;OACX;AACD,YAAM,SAAS,MAAM,IAAI,IAAG;AAC5B,UAAI,QAAQ;AACX,YAAI,aAAa;0BACE,gCAAkB,2BAAc,OAAO,WAAW,CAAC;AACtE,YAAI,OAAO,cAAc,QAAW;AACnC,wBAAc;0BACI,gCAAkB,2BAAc,OAAO,UAAU,CAAC;sBAClD,OAAO,UAAU,SAAQ,KAAM,WAAW;QAC7D;AACA,YAAI,OAAO,eAAe,QAAW;AACpC,wBAAc;sBACI,OAAO,WAAW;QACrC;AACA,YAAI,OAAO,cAAc,QAAW;AACnC,wBAAc;sBACI,OAAO,UAAU;QACpC;AACA,YAAI,OAAO,cAAc,QAAW;AACnC,wBAAc;sBACI,OAAO,UAAU;QACpC;AACA,YAAI,OAAO,eAAe,QAAW;AACpC,wBAAc;sBACI,OAAO,WAAW;QACrC;AACA,YAAI,QAAQ,KAAK,IAAI;UACpB,UAAU,KAAK;UACf,SAAS;UACT,WAAW;SACX;MACF;IACD;;;;IAUY,0BAAsB,MAAA;8BAFlC,yCAAU,6BAAgB,YAAY,OACtC,8CAAc,CAAE;;;;oBAC2B;8CAAA,YAAU;;;;;;AAAtD,mBAAA,MAAA,mBAAA,EAAA,OAAA,WAAA,GAAA,kBAAA,EAAA,MAAA,SAAA,MAAA,WAAA,MAAA,UAAA,UAAA,GAAA,MAAA,uBAAA;;;AAAa,wBAAA,YAAA,uBAAA;;IACZ,YACC,SAAmD;AAEnD,YAAM,OAAO;AACb,UAAI,QAAQ,SAAS,0BAAa,SAAS;AAC1C,cAAM,IAAI,uBACT,kDACA,4BAAgB,gBAAgB;MAElC;AACA,WAAK,OAAO,QAAQ;IACrB;IAEO,OAAO,KACb,MACA,MAAsB;AAGtB,YAAM,IAAI,uBACT,GAAG,KAAK,IAAI,qCACZ,4BAAgB,8BAA8B;IAMhD;IAEO;IAEA,UAAU,KAAsB;AACtC,WAAK,UAAU,mBAAM,KAAK,CAAC,KAAK,IAAI,CAAC;AACrC,aAAO,MAAM,UAAU,GAAG;IAC3B;IAEO,WAAW,KAAgB;AACjC,aAAO;QACN,GAAG,MAAM,WAAW,GAAG;QACvB,SAAS;UACR,mBAAe,gCAAkB,2BAAc,KAAK,IAAI;;;IAG3D;;;;IA6BY,6BAAyB,MAAA;8BAbrC,yCAAU,6BAAgB,eAAe,OACzC,+CAAgB,eAAe,iBAAiB,WAAW,OAC3D,+CAAgB,cAAc,iBAAiB,UAAU,OACzD,+CAAgB,YAAY,iBAAiB,QAAQ,OACrD,+CACA,6BACA,iBAAiB,yBAAyB,OAE1C,+CACA,4BACA,iBAAiB,wBAAwB,OAEzC,+CAAgB,eAAe,iBAAiB,WAAW,CAAC;;;;oBACd;iDAAA,YAAU;;;;;;AAAzD,mBAAA,MAAA,mBAAA,EAAA,OAAA,WAAA,GAAA,kBAAA,EAAA,MAAA,SAAA,MAAA,WAAA,MAAA,UAAA,UAAA,GAAA,MAAA,uBAAA;;;AAAa,wBAAA,YAAA,uBAAA;;IACZ,YACC,SAAsD;AAEtD,YAAM,OAAO;AAGb,WAAK,cAAc,QAAQ;AAC3B,WAAK,4BAA4B,QAAQ;AACzC,WAAK,2BAA2B,QAAQ;AACxC,WAAK,aAAa,QAAQ;AAC1B,WAAK,aAAa,QAAQ;AAC1B,WAAK,cAAc,QAAQ;AAC3B,WAAK,cAAc,QAAQ;AAC3B,WAAK,aAAa,QAAQ;AAC1B,WAAK,WAAW,QAAQ;IACzB;IAEO,OAAO,KACb,KACA,KAAqB;AAErB,uCAAgB,IAAI,QAAQ,UAAU,CAAC;AACvC,YAAM,cAA4B,IAAI,QAAQ,CAAC;AAC/C,YAAM,4BAA8C;QACnD,CAAC,EAAE,IAAI,QAAQ,CAAC,IAAI;QACpB,CAAC,EAAE,IAAI,QAAQ,CAAC,IAAI;QACpB,CAAC,EAAE,IAAI,QAAQ,CAAC,IAAI;QACpB,CAAC,EAAE,IAAI,QAAQ,CAAC,IAAI;;AAErB,YAAM,2BAA6C;QAClD,CAAC,EAAE,IAAI,QAAQ,CAAC,IAAI;QACpB,CAAC,EAAE,IAAI,QAAQ,CAAC,IAAI;QACpB,CAAC,EAAE,IAAI,QAAQ,CAAC,IAAI;QACpB,CAAC,EAAE,IAAI,QAAQ,CAAC,IAAI;;AAErB,YAAM,aACL,CAAC,EAAE,IAAI,QAAQ,CAAC,IAAI,KACjB,WACA;AACJ,YAAM,aACL,CAAC,EAAE,IAAI,QAAQ,CAAC,IAAI,KAAQ,aAAa;AAC1C,YAAM,cACL,CAAC,EAAE,IAAI,QAAQ,CAAC,IAAI,KACjB,WACA;AAEJ,YAAM,qBAAqB,IAAI,QAAQ,CAAC;AACxC,YAAM,qBAAqB,IAAI,QAAQ,CAAC;AACxC,UAAI;AACJ,UAAI,sBAAsB,OAAO,sBAAsB,IAAI;AAC1D,sBAAc,qBAAqB,qBAAqB;MACzD;AAEA,UAAI;AACJ,UAAI;AACJ,UAAI,IAAI,QAAQ,UAAU,GAAG;AAC5B,qBAAa,IAAI,QAAQ,CAAC;AAC1B,mBAAW,qBAAS,YAAY,IAAI,QAAQ,CAAC,CAAC;MAC/C;AAEA,aAAO,IAAI,KAAK;QACf,QAAQ,IAAI;QACZ;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;OACA;IACF;IAEO,cAAc,KAAyB;AAC7C,UAAI,CAAC,MAAM,cAAc,GAAG;AAAG,eAAO;AAGtC,YAAM,qBAAqB,CAAC,CAAC,KAAK,SACjC,KACA,iBAAiB,aAAa;AAE/B,UAAI,oBAAoB;AACvB,aAAK,SACJ,KACA,iBAAiB,YACjB,KAAK,UAAU;MAEjB;AACA,YAAM,qBAAqB,CAAC,CAAC,KAAK,SACjC,KACA,iBAAiB,aAAa;AAE/B,UAAI,oBAAoB;AACvB,aAAK,SACJ,KACA,iBAAiB,YACjB,KAAK,UAAU;MAEjB;AACA,YAAM,sBAAsB,CAAC,CAAC,KAAK,SAClC,KACA,iBAAiB,cAAc;AAEhC,UAAI,qBAAqB;AACxB,aAAK,SACJ,KACA,iBAAiB,aACjB,KAAK,WAAW;MAElB;AAEA,aAAO;IACR;IAEgB;IAEA;IAEA;IAEA;IAEA;IAEA;IACA;IACA;IAEA;;IAET,WAAW,KAAgB;AACjC,YAAM,UAAyB;QAC9B,oBAAgB,gCAAkB,2BAAc,KAAK,WAAW;QAChE,0BAA0B,KAAK,0BAA0B,KAAK,IAAI;QAClE,yBAAyB,KAAK,yBAAyB,KAAK,IAAI;;AAGjE,UAAI,KAAK,eAAe,QAAW;AAClC,gBAAQ,cAAc,IAAI,KAAK;MAChC;AACA,UAAI,KAAK,cAAc,QAAW;AACjC,gBAAQ,aAAa,IAAI,KAAK;MAC/B;AACA,UAAI,KAAK,cAAc,QAAW;AACjC,gBAAQ,aAAa,IAAI,KAAK;MAC/B;AAEA,UAAI,KAAK,cAAc,QAAW;AACjC,gBAAQ,aAAa,QAAI,gCACxB,2BACA,KAAK,UAAU;MAEjB;AACA,UAAI,KAAK,YAAY,QAAW;AAC/B,gBAAQ,oBAAoB,IAAI,KAAK,SAAS,SAAQ;MACvD;AACA,UAAI,KAAK,eAAe,QAAW;AAClC,gBAAQ,cAAc,IAAI,GAAG,KAAK,WAAW;MAC9C;AACA,aAAO;QACN,GAAG,MAAM,WAAW,GAAG;QACvB;;IAEF;;;;IAKY,0BAAsB,MAAA;8BAFlC,yCAAU,6BAAgB,YAAY,OACtC,kDAAmB,yBAAyB,CAAC;;;;oBACF;8CAAA,YAAU;;;;;;AAAtD,mBAAA,MAAA,mBAAA,EAAA,OAAA,WAAA,GAAA,kBAAA,EAAA,MAAA,SAAA,MAAA,WAAA,MAAA,UAAA,UAAA,GAAA,MAAA,uBAAA;;;AAAa,wBAAA,YAAA,uBAAA;;;;;IA4BA,iCAA6B,MAAA;8BAdzC,yCAAU,6BAAgB,mBAAmB,OAC7C,+CAAgB,iBAAiB,iBAAiB,aAAa,OAC/D,+CACA,0CACA,iBAAiB,sCAAsC,OAEvD,+CACA,yCACA,iBAAiB,qCAAqC,OAEtD,+CACA,4BACA,iBAAiB,wBAAwB,CACzC;;;;oBACkD;qDAAA,YAAU;;;;;;AAA7D,mBAAA,MAAA,mBAAA,EAAA,OAAA,WAAA,GAAA,kBAAA,EAAA,MAAA,SAAA,MAAA,WAAA,MAAA,UAAA,UAAA,GAAA,MAAA,uBAAA;;;AAAa,wBAAA,YAAA,uBAAA;;IACZ,YACC,SAA0D;AAE1D,YAAM,OAAO;AAGb,WAAK,gBAAgB,QAAQ;AAC7B,WAAK,yCACJ,QAAQ;AACT,WAAK,wCACJ,QAAQ;AACT,WAAK,2BAA2B,QAAQ;AACxC,WAAK,iBAAiB,QAAQ;AAC9B,WAAK,qBAAqB,QAAQ;AAClC,WAAK,cAAc,QAAQ;AAC3B,WAAK,eAAe,QAAQ;IAC7B;IAEO,OAAO,KACb,KACA,KAAqB;AAErB,uCAAgB,IAAI,QAAQ,UAAU,CAAC;AACvC,YAAM,gBAAuC,IAAI,QAAQ,CAAC;AAC1D,YAAM,yCAA2D;QAChE,CAAC,EAAE,IAAI,QAAQ,CAAC,IAAI;QACpB,CAAC,EAAE,IAAI,QAAQ,CAAC,IAAI;QACpB,CAAC,EAAE,IAAI,QAAQ,CAAC,IAAI;QACpB,CAAC,EAAE,IAAI,QAAQ,CAAC,IAAI;;AAErB,YAAM,wCAA0D;QAC/D,CAAC,EAAE,IAAI,QAAQ,CAAC,IAAI;QACpB,CAAC,EAAE,IAAI,QAAQ,CAAC,IAAI;QACpB,CAAC,EAAE,IAAI,QAAQ,CAAC,IAAI;QACpB,CAAC,EAAE,IAAI,QAAQ,CAAC,IAAI;;AAErB,UAAI;AACJ,UAAI,kBAAkB,mCAAsB,OAAO;AAClD,cAAM,qBAAqB,IAAI,QAAQ,CAAC;AACxC,cAAM,qBAAqB,IAAI,QAAQ,CAAC;AACxC,YAAI,sBAAsB,OAAQ,sBAAsB,IAAI;AAC3D,qCAA2B,qBACxB,qBAAqB;QACzB;MACD;AAEA,UAAI;AACJ,UAAI;AACJ,UAAI;AACJ,UAAI;AACJ,UAAI,IAAI,QAAQ,UAAU,GAAG;AAC5B,yBAAiB,IAAI,QAAQ,aAAa,CAAC;AAC3C,6BAAqB,IAAI,QAAQ,aAAa,CAAC;AAE/C,cAAM,QAAQ,IAAI,QAAQ,CAAC;AAC3B,sBAAc,CAAC,EAAE,QAAQ;AACzB,uBAAe,CAAC,EAAE,QAAQ;MAC3B;AAEA,aAAO,IAAI,KAAK;QACf,QAAQ,IAAI;QACZ;QACA;QACA;QACA;QACA;QACA;QACA;QACA;OACA;IACF;IAEgB;IAEA;IAEA;IAEA;;;IAIA;IACA;IACA;IACA;IAET,cAAc,KAAyB;AAC7C,UAAI,CAAC,MAAM,cAAc,GAAG;AAAG,eAAO;AAGtC,YAAM,qBAAqB,CAAC,CAAC,KAAK,SACjC,KACA,iBAAiB,mBAAmB;AAErC,UAAI,oBAAoB;AACvB,aAAK,SACJ,KACA,iBAAiB,gBACjB,KAAK,cAAc;MAErB;AACA,YAAM,yBAAyB,CAAC,CAAC,KAAK,SACrC,KACA,iBAAiB,uBAAuB;AAEzC,UAAI,wBAAwB;AAC3B,aAAK,SACJ,KACA,iBAAiB,oBACjB,KAAK,kBAAkB;MAEzB;AACA,YAAM,sBAAsB,CAAC,CAAC,KAAK,SAClC,KACA,iBAAiB,oBAAoB;AAEtC,UAAI,qBAAqB;AACxB,aAAK,SACJ,KACA,iBAAiB,aACjB,KAAK,WAAW;MAElB;AACA,YAAM,uBAAuB,CAAC,CAAC,KAAK,SACnC,KACA,iBAAiB,qBAAqB;AAEvC,UAAI,sBAAsB;AACzB,aAAK,SACJ,KACA,iBAAiB,cACjB,KAAK,YAAY;MAEnB;AAEA,aAAO;IACR;IAEO,WAAW,KAAgB;AACjC,YAAM,UAAyB;QAC9B,sBAAkB,gCACjB,oCACA,KAAK,aAAa;QAEnB,gCAAgC,KAC9B,uCAAuC,KAAK,IAAI;QAClD,+BAA+B,KAC7B,sCAAsC,KAAK,IAAI;;AAElD,UAAI,KAAK,4BAA4B,QAAW;AAC/C,gBACC,qBAAqB,IAClB,GAAG,KAAK,wBAAwB;MACrC;AACA,UAAI,KAAK,kBAAkB,QAAW;AACrC,gBAAQ,kBAAkB,IAAI,GAAG,KAAK,cAAc;MACrD;AACA,UAAI,KAAK,sBAAsB,QAAW;AACzC,gBACC,uBAAuB,IACpB,GAAG,KAAK,kBAAkB;MAC/B;AACA,UAAI,KAAK,eAAe,QAAW;AAClC,gBAAQ,sBAAsB,IAAI,KAAK;MACxC;AACA,UAAI,KAAK,gBAAgB,QAAW;AACnC,gBAAQ,wBAAwB,IAAI,KAAK;MAC1C;AACA,aAAO;QACN,GAAG,MAAM,WAAW,GAAG;QACvB;;IAEF;;;;IAKY,8BAA0B,MAAA;8BAFtC,yCAAU,6BAAgB,gBAAgB,OAC1C,kDAAmB,6BAA6B,CAAC;;;;oBACF;kDAAA,YAAU;;;;;;AAA1D,mBAAA,MAAA,mBAAA,EAAA,OAAA,WAAA,GAAA,kBAAA,EAAA,MAAA,SAAA,MAAA,WAAA,MAAA,UAAA,UAAA,GAAA,MAAA,uBAAA;;;AAAa,wBAAA,YAAA,uBAAA;;;;;IA0BA,8BAA0B,MAAA;8BAFtC,yCAAU,6BAAgB,gBAAgB,OAC1C,8CAAc,CAAE;;;;oBAC+B;kDAAA,YAAU;;;;;;AAA1D,mBAAA,MAAA,mBAAA,EAAA,OAAA,WAAA,GAAA,kBAAA,EAAA,MAAA,SAAA,MAAA,WAAA,MAAA,UAAA,UAAA,GAAA,MAAA,uBAAA;;;AAAa,wBAAA,YAAA,uBAAA;;IACZ,YACC,SAAuD;AAEvD,YAAM,OAAO;AACb,WAAK,gBAAgB,QAAQ;AAC7B,WAAK,yCACJ,QAAQ;AACT,WAAK,wCACJ,QAAQ;AACT,WAAK,2BAA2B,QAAQ;AACxC,WAAK,iBAAiB,QAAQ;AAC9B,WAAK,qBAAqB,QAAQ;AAClC,WAAK,cAAc,QAAQ;AAC3B,WAAK,eAAe,QAAQ;IAC7B;IAEO,OAAO,KACb,MACA,MAAsB;AAGtB,YAAM,IAAI,uBACT,GAAG,KAAK,IAAI,qCACZ,4BAAgB,8BAA8B;IAMhD;IAEO;IACA;IACA;IACA;IACA;IACA;IACA;IACA;IAEA,UAAU,KAAsB;AACtC,YAAM,oBAAgB,2BACpB,KAAK,qCAAqC,IAEzC,KAAK,wCACL,CAAA;AACH,YAAM,qBAAiB,2BACrB,KAAK,sCAAsC,IAE1C,KAAK,yCACL,CAAA;AAEH,YAAM,UAAU,CAAC,GAAG,eAAe,GAAG,cAAc,EAClD,IAAI,CAAC,KAAK,MAAO,MAAM,KAAK,IAAI,CAAE,EAClC,OAAO,CAAC,KAAK,QAAQ,MAAM,KAAK,CAAC;AAEnC,UAAI;AACJ,UAAI;AACJ,UAAI,KAAK,kBAAkB,mCAAsB,UAAU;AAC1D,6BAAqB,qBAAqB;MAC3C,OAAO;AACN,6BAAqB,KAAK,MACzB,KAAK,2BAA4B,EAAE;AAEpC,6BAAqB,KAAK,2BAA4B;MACvD;AAEA,YAAM,SAAS,KAAK,cAAc,IAAM,MACpC,KAAK,eAAe,IAAO;AAE/B,WAAK,UAAU,mBAAM,KAAK;QACzB,KAAK;QACL;QACA;QACA;;QAEA;QACA;;QAEA;QACA;QACA;OACA;AAED,WAAK,QAAQ,eAAe,KAAK,kBAAkB,KAAK,OAAQ,CAAC;AACjE,WAAK,QAAQ,eACX,KAAK,sBAAsB,KAAK,OACjC,CAAC;AAGF,aAAO,MAAM,UAAU,GAAG;IAC3B;IAEO,WAAW,KAAgB;AACjC,YAAM,oBAAgB,2BACpB,KAAK,qCAAqC,IAEzC,KAAK,wCACL,CAAA;AACH,YAAM,qBAAiB,2BACrB,KAAK,sCAAsC,IAE1C,KAAK,yCACL,CAAA;AACH,YAAM,UAAyB;QAC9B,sBAAkB,gCACjB,oCACA,KAAK,aAAa;QAEnB,gCAAgC,eAAe,KAAK,IAAI;QACxD,+BAA+B,cAAc,KAAK,IAAI;;AAEvD,UAAI,KAAK,4BAA4B,QAAW;AAC/C,gBACC,qBAAqB,IAClB,GAAG,KAAK,wBAAwB;MACrC;AACA,UAAI,KAAK,kBAAkB,QAAW;AACrC,gBAAQ,kBAAkB,IAAI,GAAG,KAAK,cAAc;MACrD;AACA,UAAI,KAAK,sBAAsB,QAAW;AACzC,gBACC,uBAAuB,IACpB,GAAG,KAAK,kBAAkB;MAC/B;AACA,UAAI,KAAK,eAAe,QAAW;AAClC,gBAAQ,qBAAqB,IAAI,KAAK;MACvC;AACA,UAAI,KAAK,gBAAgB,QAAW;AACnC,gBAAQ,uBAAuB,IAAI,KAAK;MACzC;AACA,aAAO;QACN,GAAG,MAAM,WAAW,GAAG;QACvB;;IAEF;;;;IAqCY,gCAA4B,MAAA;8BAnBxC,yCAAU,6BAAgB,kBAAkB,OAC5C,+CACA,2BACA,iBAAiB,uBAAuB,OAExC,+CACA,0BACA,iBAAiB,sBAAsB,OAEvC,+CAAgB,uBAAuB,iBAAiB,mBAAmB,OAC3E,+CACA,2BACA,iBAAiB,uBAAuB,OAExC,+CAAgB,wBAAwB,iBAAiB,oBAAoB,OAC7E,+CACA,yBACA,iBAAiB,qBAAqB,CACtC;;;;oBACiD;oDAAA,YAAU;;;;;;AAA5D,mBAAA,MAAA,mBAAA,EAAA,OAAA,WAAA,GAAA,kBAAA,EAAA,MAAA,SAAA,MAAA,WAAA,MAAA,UAAA,UAAA,GAAA,MAAA,uBAAA;;;AAAa,wBAAA,YAAA,uBAAA;;IACZ,YACC,SAAyD;AAEzD,YAAM,OAAO;AAGb,WAAK,0BAA0B,QAAQ;AACvC,WAAK,yBAAyB,QAAQ;AACtC,WAAK,0BAA0B,QAAQ;AACvC,WAAK,yBAAyB,QAAQ;AACtC,WAAK,gBAAgB,QAAQ;AAC7B,WAAK,gBAAgB,QAAQ;AAC7B,WAAK,iBAAiB,QAAQ;AAC9B,WAAK,wBAAwB,QAAQ;AACrC,WAAK,uBAAuB,QAAQ;AACpC,WAAK,0BAA0B,QAAQ;AACvC,WAAK,sBAAsB,QAAQ;IACpC;IAEO,OAAO,KACb,KACA,KAAqB;AAGrB,uCAAgB,IAAI,QAAQ,UAAU,CAAC;AACvC,YAAM,gBAAgB,IAAI,QAAQ,CAAC,IAAI;AACvC,UAAI,SAAS;AACb,uCAAgB,IAAI,QAAQ,UAAU,SAAS,gBAAgB,CAAC;AAChE,YAAM,8BAAmD;QACxD,IAAI,QAAQ,SAAS,QAAQ,SAAS,aAAa;;QAEnD;MAAC;AAEF,gBAAU;AAEV,YAAM,aAAa,IAAI,QAAQ,MAAM;AACrC,gBAAU;AACV,uCAAgB,IAAI,QAAQ,UAAU,SAAS,aAAa,CAAC;AAC7D,YAAM,yBAAyC;QAC9C,GAAG,IAAI,QAAQ,SAAS,QAAQ,SAAS,UAAU;;AAEpD,gBAAU;AACV,YAAM,0BAA4C;QACjD,CAAC,EAAE,IAAI,QAAQ,MAAM,IAAI;QACzB,CAAC,EAAE,IAAI,QAAQ,MAAM,IAAI;QACzB,CAAC,EAAE,IAAI,QAAQ,MAAM,IAAI;QACzB,CAAC,EAAE,IAAI,QAAQ,MAAM,IAAI;;AAE1B,YAAM,yBAA2C;QAChD,CAAC,EAAE,IAAI,QAAQ,MAAM,IAAI;QACzB,CAAC,EAAE,IAAI,QAAQ,MAAM,IAAI;QACzB,CAAC,EAAE,IAAI,QAAQ,MAAM,IAAI;QACzB,CAAC,EAAE,IAAI,QAAQ,MAAM,IAAI;;AAE1B,YAAM,gBAAgB,CAAC,EAAE,IAAI,QAAQ,SAAS,CAAC,IAAI;AACnD,YAAM,gBAAgB,CAAC,EAAE,IAAI,QAAQ,SAAS,CAAC,IAAI;AACnD,YAAM,iBAAiB,CAAC,EAAE,IAAI,QAAQ,SAAS,CAAC,IAAI;AACpD,YAAM,wBAAwB,CAAC,EAAE,IAAI,QAAQ,SAAS,CAAC,IAAI;AAC3D,YAAM,uBAAuB,CAAC,EAAE,IAAI,QAAQ,SAAS,CAAC,IAAI;AAC1D,YAAM,0BAA0B,CAAC,EAAE,IAAI,QAAQ,SAAS,CAAC,IAAI;AAC7D,YAAM,sBAAsB,CAAC,EAAE,IAAI,QAAQ,SAAS,CAAC,IAAI;AAEzD,aAAO,IAAI,KAAK;QACf,QAAQ,IAAI;QACZ;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;QACA;OACA;IACF;IAEgB;IACA;IAEA;IAEA;;;IAIA;IACA;IACA;IAEA;IAEA;IAEA;IAEA;IAET,WAAW,KAAgB;AACjC,aAAO;QACN,GAAG,MAAM,WAAW,GAAG;QACvB,SAAS;UACR,MAAM,KAAK;UACX,MAAM,KAAK;UACX,OAAO,KAAK;UACZ,0BAA0B,KAAK;UAC/B,wBAAwB,KAAK;UAC7B,4BAA4B,KAAK;UACjC,uBAAuB,KAAK;UAC5B,mBAAmB,KAAK,wBACtB,IACA,CAAC,MACA;WACC,gCACC,oCACA,CAAC,CAEH,EAAE,EAEH,KAAK,EAAE;UACT,mBAAmB,KAAK,uBACtB,IAAI,CAAC,MAAM;WAAO,gCAAkB,2BAAc,CAAC,CAAC,EAAE,EACtD,KAAK,EAAE;UACT,mBAAmB,KAAK,wBAAwB,KAAK,IAAI;UACzD,kBAAkB,KAAK,uBAAuB,KAAK,IAAI;;;IAG1D;;;;IAKY,6BAAyB,MAAA;8BAFrC,yCAAU,6BAAgB,eAAe,OACzC,kDAAmB,4BAA4B,CAAC;;;;oBACF;iDAAA,YAAU;;;;;;AAAzD,mBAAA,MAAA,mBAAA,EAAA,OAAA,WAAA,GAAA,kBAAA,EAAA,MAAA,SAAA,MAAA,WAAA,MAAA,UAAA,UAAA,GAAA,MAAA,uBAAA;;;AAAa,wBAAA,YAAA,uBAAA;;;;;",
6
+ "names": ["import_safe"]
7
7
  }